From f5097e0eeeb5e61c799f0ccc871699a15b7fe209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Mon, 12 Feb 2024 20:28:38 +0100 Subject: [PATCH] =?UTF-8?q?=E0=BC=BC=20=E3=81=A4=20=E2=97=95=5F=E2=97=95?= =?UTF-8?q?=20=E0=BC=BD=E3=81=A4=20initial=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + README.md | 11 +- images/toolbar-button-download.svg | 4 + images/toolbar-button-pageDown.svg | 3 + images/toolbar-button-pageUp.svg | 3 + images/toolbar-button-print.svg | 3 + index.html | 30 + index.mjs | 21 + lib/canvg/dist/umd.js | 7045 ++ lib/canvg/dist/umd.js.map | 1 + lib/canvg/v2/canvg.js | 4093 ++ lib/canvg/v2/rgbcolor.min.js | 1 + lib/canvg/v2/stackblur.min.js | 1 + lib/changeDPI/index.js | 189 + lib/color.js | 5728 ++ lib/jspdf/build/cmaps/78-EUC-H.bcmap | Bin 0 -> 2404 bytes lib/jspdf/build/cmaps/78-EUC-V.bcmap | Bin 0 -> 173 bytes lib/jspdf/build/cmaps/78-H.bcmap | Bin 0 -> 2379 bytes lib/jspdf/build/cmaps/78-RKSJ-H.bcmap | Bin 0 -> 2398 bytes lib/jspdf/build/cmaps/78-RKSJ-V.bcmap | Bin 0 -> 173 bytes lib/jspdf/build/cmaps/78-V.bcmap | Bin 0 -> 169 bytes lib/jspdf/build/cmaps/78ms-RKSJ-H.bcmap | Bin 0 -> 2651 bytes lib/jspdf/build/cmaps/78ms-RKSJ-V.bcmap | Bin 0 -> 290 bytes lib/jspdf/build/cmaps/83pv-RKSJ-H.bcmap | Bin 0 -> 905 bytes lib/jspdf/build/cmaps/90ms-RKSJ-H.bcmap | Bin 0 -> 721 bytes lib/jspdf/build/cmaps/90ms-RKSJ-V.bcmap | Bin 0 -> 290 bytes lib/jspdf/build/cmaps/90msp-RKSJ-H.bcmap | Bin 0 -> 715 bytes lib/jspdf/build/cmaps/90msp-RKSJ-V.bcmap | Bin 0 -> 291 bytes lib/jspdf/build/cmaps/90pv-RKSJ-H.bcmap | Bin 0 -> 982 bytes lib/jspdf/build/cmaps/90pv-RKSJ-V.bcmap | Bin 0 -> 260 bytes lib/jspdf/build/cmaps/Add-H.bcmap | Bin 0 -> 2419 bytes lib/jspdf/build/cmaps/Add-RKSJ-H.bcmap | Bin 0 -> 2413 bytes lib/jspdf/build/cmaps/Add-RKSJ-V.bcmap | Bin 0 -> 287 bytes lib/jspdf/build/cmaps/Add-V.bcmap | Bin 0 -> 282 bytes lib/jspdf/build/cmaps/Adobe-CNS1-0.bcmap | Bin 0 -> 317 bytes lib/jspdf/build/cmaps/Adobe-CNS1-1.bcmap | Bin 0 -> 371 bytes lib/jspdf/build/cmaps/Adobe-CNS1-2.bcmap | Bin 0 -> 376 bytes lib/jspdf/build/cmaps/Adobe-CNS1-3.bcmap | Bin 0 -> 401 bytes lib/jspdf/build/cmaps/Adobe-CNS1-4.bcmap | Bin 0 -> 405 bytes lib/jspdf/build/cmaps/Adobe-CNS1-5.bcmap | Bin 0 -> 406 bytes lib/jspdf/build/cmaps/Adobe-CNS1-6.bcmap | Bin 0 -> 406 bytes lib/jspdf/build/cmaps/Adobe-CNS1-UCS2.bcmap | Bin 0 -> 41193 bytes lib/jspdf/build/cmaps/Adobe-GB1-0.bcmap | Bin 0 -> 217 bytes lib/jspdf/build/cmaps/Adobe-GB1-1.bcmap | Bin 0 -> 250 bytes lib/jspdf/build/cmaps/Adobe-GB1-2.bcmap | Bin 0 -> 465 bytes lib/jspdf/build/cmaps/Adobe-GB1-3.bcmap | Bin 0 -> 470 bytes lib/jspdf/build/cmaps/Adobe-GB1-4.bcmap | Bin 0 -> 601 bytes lib/jspdf/build/cmaps/Adobe-GB1-5.bcmap | Bin 0 -> 625 bytes lib/jspdf/build/cmaps/Adobe-GB1-UCS2.bcmap | Bin 0 -> 33974 bytes lib/jspdf/build/cmaps/Adobe-Japan1-0.bcmap | Bin 0 -> 225 bytes lib/jspdf/build/cmaps/Adobe-Japan1-1.bcmap | Bin 0 -> 226 bytes lib/jspdf/build/cmaps/Adobe-Japan1-2.bcmap | Bin 0 -> 233 bytes lib/jspdf/build/cmaps/Adobe-Japan1-3.bcmap | Bin 0 -> 242 bytes lib/jspdf/build/cmaps/Adobe-Japan1-4.bcmap | Bin 0 -> 337 bytes lib/jspdf/build/cmaps/Adobe-Japan1-5.bcmap | Bin 0 -> 430 bytes lib/jspdf/build/cmaps/Adobe-Japan1-6.bcmap | Bin 0 -> 485 bytes lib/jspdf/build/cmaps/Adobe-Japan1-UCS2.bcmap | Bin 0 -> 40951 bytes lib/jspdf/build/cmaps/Adobe-Korea1-0.bcmap | Bin 0 -> 241 bytes lib/jspdf/build/cmaps/Adobe-Korea1-1.bcmap | Bin 0 -> 386 bytes lib/jspdf/build/cmaps/Adobe-Korea1-2.bcmap | Bin 0 -> 391 bytes lib/jspdf/build/cmaps/Adobe-Korea1-UCS2.bcmap | Bin 0 -> 23293 bytes lib/jspdf/build/cmaps/B5-H.bcmap | Bin 0 -> 1086 bytes lib/jspdf/build/cmaps/B5-V.bcmap | Bin 0 -> 142 bytes lib/jspdf/build/cmaps/B5pc-H.bcmap | Bin 0 -> 1099 bytes lib/jspdf/build/cmaps/B5pc-V.bcmap | Bin 0 -> 144 bytes lib/jspdf/build/cmaps/CNS-EUC-H.bcmap | Bin 0 -> 1780 bytes lib/jspdf/build/cmaps/CNS-EUC-V.bcmap | Bin 0 -> 1920 bytes lib/jspdf/build/cmaps/CNS1-H.bcmap | Bin 0 -> 706 bytes lib/jspdf/build/cmaps/CNS1-V.bcmap | Bin 0 -> 143 bytes lib/jspdf/build/cmaps/CNS2-H.bcmap | Bin 0 -> 504 bytes lib/jspdf/build/cmaps/CNS2-V.bcmap | 3 + lib/jspdf/build/cmaps/ETHK-B5-H.bcmap | Bin 0 -> 4426 bytes lib/jspdf/build/cmaps/ETHK-B5-V.bcmap | Bin 0 -> 158 bytes lib/jspdf/build/cmaps/ETen-B5-H.bcmap | Bin 0 -> 1125 bytes lib/jspdf/build/cmaps/ETen-B5-V.bcmap | Bin 0 -> 158 bytes lib/jspdf/build/cmaps/ETenms-B5-H.bcmap | 3 + lib/jspdf/build/cmaps/ETenms-B5-V.bcmap | Bin 0 -> 172 bytes lib/jspdf/build/cmaps/EUC-H.bcmap | Bin 0 -> 578 bytes lib/jspdf/build/cmaps/EUC-V.bcmap | Bin 0 -> 170 bytes lib/jspdf/build/cmaps/Ext-H.bcmap | Bin 0 -> 2536 bytes lib/jspdf/build/cmaps/Ext-RKSJ-H.bcmap | Bin 0 -> 2542 bytes lib/jspdf/build/cmaps/Ext-RKSJ-V.bcmap | Bin 0 -> 218 bytes lib/jspdf/build/cmaps/Ext-V.bcmap | Bin 0 -> 215 bytes lib/jspdf/build/cmaps/GB-EUC-H.bcmap | Bin 0 -> 549 bytes lib/jspdf/build/cmaps/GB-EUC-V.bcmap | Bin 0 -> 179 bytes lib/jspdf/build/cmaps/GB-H.bcmap | 4 + lib/jspdf/build/cmaps/GB-V.bcmap | Bin 0 -> 175 bytes lib/jspdf/build/cmaps/GBK-EUC-H.bcmap | Bin 0 -> 14692 bytes lib/jspdf/build/cmaps/GBK-EUC-V.bcmap | Bin 0 -> 180 bytes lib/jspdf/build/cmaps/GBK2K-H.bcmap | Bin 0 -> 19662 bytes lib/jspdf/build/cmaps/GBK2K-V.bcmap | Bin 0 -> 219 bytes lib/jspdf/build/cmaps/GBKp-EUC-H.bcmap | Bin 0 -> 14686 bytes lib/jspdf/build/cmaps/GBKp-EUC-V.bcmap | Bin 0 -> 181 bytes lib/jspdf/build/cmaps/GBT-EUC-H.bcmap | Bin 0 -> 7290 bytes lib/jspdf/build/cmaps/GBT-EUC-V.bcmap | Bin 0 -> 180 bytes lib/jspdf/build/cmaps/GBT-H.bcmap | Bin 0 -> 7269 bytes lib/jspdf/build/cmaps/GBT-V.bcmap | Bin 0 -> 176 bytes lib/jspdf/build/cmaps/GBTpc-EUC-H.bcmap | Bin 0 -> 7298 bytes lib/jspdf/build/cmaps/GBTpc-EUC-V.bcmap | Bin 0 -> 182 bytes lib/jspdf/build/cmaps/GBpc-EUC-H.bcmap | Bin 0 -> 557 bytes lib/jspdf/build/cmaps/GBpc-EUC-V.bcmap | Bin 0 -> 181 bytes lib/jspdf/build/cmaps/H.bcmap | Bin 0 -> 553 bytes lib/jspdf/build/cmaps/HKdla-B5-H.bcmap | Bin 0 -> 2654 bytes lib/jspdf/build/cmaps/HKdla-B5-V.bcmap | Bin 0 -> 148 bytes lib/jspdf/build/cmaps/HKdlb-B5-H.bcmap | Bin 0 -> 2414 bytes lib/jspdf/build/cmaps/HKdlb-B5-V.bcmap | Bin 0 -> 148 bytes lib/jspdf/build/cmaps/HKgccs-B5-H.bcmap | Bin 0 -> 2292 bytes lib/jspdf/build/cmaps/HKgccs-B5-V.bcmap | Bin 0 -> 149 bytes lib/jspdf/build/cmaps/HKm314-B5-H.bcmap | Bin 0 -> 1772 bytes lib/jspdf/build/cmaps/HKm314-B5-V.bcmap | Bin 0 -> 149 bytes lib/jspdf/build/cmaps/HKm471-B5-H.bcmap | Bin 0 -> 2171 bytes lib/jspdf/build/cmaps/HKm471-B5-V.bcmap | Bin 0 -> 149 bytes lib/jspdf/build/cmaps/HKscs-B5-H.bcmap | Bin 0 -> 4437 bytes lib/jspdf/build/cmaps/HKscs-B5-V.bcmap | Bin 0 -> 159 bytes lib/jspdf/build/cmaps/Hankaku.bcmap | Bin 0 -> 132 bytes lib/jspdf/build/cmaps/Hiragana.bcmap | Bin 0 -> 124 bytes lib/jspdf/build/cmaps/KSC-EUC-H.bcmap | Bin 0 -> 1848 bytes lib/jspdf/build/cmaps/KSC-EUC-V.bcmap | Bin 0 -> 164 bytes lib/jspdf/build/cmaps/KSC-H.bcmap | Bin 0 -> 1831 bytes lib/jspdf/build/cmaps/KSC-Johab-H.bcmap | Bin 0 -> 16791 bytes lib/jspdf/build/cmaps/KSC-Johab-V.bcmap | Bin 0 -> 166 bytes lib/jspdf/build/cmaps/KSC-V.bcmap | Bin 0 -> 160 bytes lib/jspdf/build/cmaps/KSCms-UHC-H.bcmap | Bin 0 -> 2787 bytes lib/jspdf/build/cmaps/KSCms-UHC-HW-H.bcmap | Bin 0 -> 2789 bytes lib/jspdf/build/cmaps/KSCms-UHC-HW-V.bcmap | Bin 0 -> 169 bytes lib/jspdf/build/cmaps/KSCms-UHC-V.bcmap | Bin 0 -> 166 bytes lib/jspdf/build/cmaps/KSCpc-EUC-H.bcmap | Bin 0 -> 2024 bytes lib/jspdf/build/cmaps/KSCpc-EUC-V.bcmap | Bin 0 -> 166 bytes lib/jspdf/build/cmaps/Katakana.bcmap | Bin 0 -> 100 bytes lib/jspdf/build/cmaps/LICENSE | 36 + lib/jspdf/build/cmaps/NWP-H.bcmap | Bin 0 -> 2765 bytes lib/jspdf/build/cmaps/NWP-V.bcmap | Bin 0 -> 252 bytes lib/jspdf/build/cmaps/RKSJ-H.bcmap | Bin 0 -> 534 bytes lib/jspdf/build/cmaps/RKSJ-V.bcmap | Bin 0 -> 170 bytes lib/jspdf/build/cmaps/Roman.bcmap | Bin 0 -> 96 bytes lib/jspdf/build/cmaps/UniCNS-UCS2-H.bcmap | Bin 0 -> 48280 bytes lib/jspdf/build/cmaps/UniCNS-UCS2-V.bcmap | Bin 0 -> 156 bytes lib/jspdf/build/cmaps/UniCNS-UTF16-H.bcmap | Bin 0 -> 50419 bytes lib/jspdf/build/cmaps/UniCNS-UTF16-V.bcmap | Bin 0 -> 156 bytes lib/jspdf/build/cmaps/UniCNS-UTF32-H.bcmap | Bin 0 -> 52679 bytes lib/jspdf/build/cmaps/UniCNS-UTF32-V.bcmap | Bin 0 -> 160 bytes lib/jspdf/build/cmaps/UniCNS-UTF8-H.bcmap | Bin 0 -> 53629 bytes lib/jspdf/build/cmaps/UniCNS-UTF8-V.bcmap | Bin 0 -> 157 bytes lib/jspdf/build/cmaps/UniGB-UCS2-H.bcmap | Bin 0 -> 43366 bytes lib/jspdf/build/cmaps/UniGB-UCS2-V.bcmap | Bin 0 -> 193 bytes lib/jspdf/build/cmaps/UniGB-UTF16-H.bcmap | Bin 0 -> 44086 bytes lib/jspdf/build/cmaps/UniGB-UTF16-V.bcmap | Bin 0 -> 178 bytes lib/jspdf/build/cmaps/UniGB-UTF32-H.bcmap | Bin 0 -> 45738 bytes lib/jspdf/build/cmaps/UniGB-UTF32-V.bcmap | Bin 0 -> 182 bytes lib/jspdf/build/cmaps/UniGB-UTF8-H.bcmap | Bin 0 -> 46837 bytes lib/jspdf/build/cmaps/UniGB-UTF8-V.bcmap | Bin 0 -> 181 bytes lib/jspdf/build/cmaps/UniJIS-UCS2-H.bcmap | Bin 0 -> 25439 bytes lib/jspdf/build/cmaps/UniJIS-UCS2-HW-H.bcmap | Bin 0 -> 119 bytes lib/jspdf/build/cmaps/UniJIS-UCS2-HW-V.bcmap | Bin 0 -> 680 bytes lib/jspdf/build/cmaps/UniJIS-UCS2-V.bcmap | Bin 0 -> 664 bytes lib/jspdf/build/cmaps/UniJIS-UTF16-H.bcmap | Bin 0 -> 39443 bytes lib/jspdf/build/cmaps/UniJIS-UTF16-V.bcmap | Bin 0 -> 643 bytes lib/jspdf/build/cmaps/UniJIS-UTF32-H.bcmap | Bin 0 -> 40539 bytes lib/jspdf/build/cmaps/UniJIS-UTF32-V.bcmap | Bin 0 -> 677 bytes lib/jspdf/build/cmaps/UniJIS-UTF8-H.bcmap | Bin 0 -> 41695 bytes lib/jspdf/build/cmaps/UniJIS-UTF8-V.bcmap | Bin 0 -> 678 bytes .../build/cmaps/UniJIS2004-UTF16-H.bcmap | Bin 0 -> 39534 bytes .../build/cmaps/UniJIS2004-UTF16-V.bcmap | Bin 0 -> 647 bytes .../build/cmaps/UniJIS2004-UTF32-H.bcmap | Bin 0 -> 40630 bytes .../build/cmaps/UniJIS2004-UTF32-V.bcmap | Bin 0 -> 681 bytes lib/jspdf/build/cmaps/UniJIS2004-UTF8-H.bcmap | Bin 0 -> 41779 bytes lib/jspdf/build/cmaps/UniJIS2004-UTF8-V.bcmap | Bin 0 -> 682 bytes .../build/cmaps/UniJISPro-UCS2-HW-V.bcmap | Bin 0 -> 705 bytes lib/jspdf/build/cmaps/UniJISPro-UCS2-V.bcmap | Bin 0 -> 689 bytes lib/jspdf/build/cmaps/UniJISPro-UTF8-V.bcmap | Bin 0 -> 726 bytes .../build/cmaps/UniJISX0213-UTF32-H.bcmap | Bin 0 -> 40517 bytes .../build/cmaps/UniJISX0213-UTF32-V.bcmap | Bin 0 -> 684 bytes .../build/cmaps/UniJISX02132004-UTF32-H.bcmap | Bin 0 -> 40608 bytes .../build/cmaps/UniJISX02132004-UTF32-V.bcmap | Bin 0 -> 688 bytes lib/jspdf/build/cmaps/UniKS-UCS2-H.bcmap | Bin 0 -> 25783 bytes lib/jspdf/build/cmaps/UniKS-UCS2-V.bcmap | Bin 0 -> 178 bytes lib/jspdf/build/cmaps/UniKS-UTF16-H.bcmap | Bin 0 -> 26327 bytes lib/jspdf/build/cmaps/UniKS-UTF16-V.bcmap | Bin 0 -> 164 bytes lib/jspdf/build/cmaps/UniKS-UTF32-H.bcmap | Bin 0 -> 26451 bytes lib/jspdf/build/cmaps/UniKS-UTF32-V.bcmap | Bin 0 -> 168 bytes lib/jspdf/build/cmaps/UniKS-UTF8-H.bcmap | Bin 0 -> 27790 bytes lib/jspdf/build/cmaps/UniKS-UTF8-V.bcmap | Bin 0 -> 169 bytes lib/jspdf/build/cmaps/V.bcmap | Bin 0 -> 166 bytes lib/jspdf/build/cmaps/WP-Symbol.bcmap | Bin 0 -> 179 bytes lib/jspdf/build/pdf.mjs | 18151 +++++ lib/jspdf/build/pdf.mjs.map | 1 + lib/jspdf/build/pdf.sandbox.mjs | 241 + lib/jspdf/build/pdf.sandbox.mjs.map | 1 + lib/jspdf/build/pdf.worker.mjs | 57171 ++++++++++++++++ lib/jspdf/build/pdf.worker.mjs.map | 1 + lib/jspdf/jspdf.es.js | 27878 ++++++++ lib/jspdf/jspdf.es.js.map | 1 + lib/jspdf/jspdf.es.min.js | 332 + lib/jspdf/jspdf.es.min.js.map | 1 + lib/jspdf/jspdf.node.js | 32841 +++++++++ lib/jspdf/jspdf.node.js.map | 1 + lib/jspdf/jspdf.node.min.js | 456 + lib/jspdf/jspdf.node.min.js.map | 1 + lib/jspdf/jspdf.umd.js | 28833 ++++++++ lib/jspdf/jspdf.umd.js.map | 1 + lib/jspdf/jspdf.umd.min.js | 398 + lib/jspdf/jspdf.umd.min.js.map | 1 + lib/jspdf/polyfills.es.js | 62 + lib/jspdf/polyfills.umd.js | 73 + lib/qrcode.min.js | 383 + package.json | 16 + src/Checkbox.css | 58 + src/Checkbox.mjs | 40 + src/ColorUtils.mjs | 55 + src/EventTarget.mjs | 29 + src/PDFRenderer.mjs | 151 + src/PDFViewer.css | 118 + src/PDFViewer.mjs | 102 + src/PNGRenderer.mjs | 56 + src/PreviewBox.css | 56 + src/PreviewBox.mjs | 70 + src/SVGRenderer.mjs | 85 + src/SettingsForm.css | 90 + src/SettingsForm.mjs | 133 + src/Utils.mjs | 32 + style.css | 140 + 221 files changed, 185240 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 images/toolbar-button-download.svg create mode 100644 images/toolbar-button-pageDown.svg create mode 100644 images/toolbar-button-pageUp.svg create mode 100644 images/toolbar-button-print.svg create mode 100644 index.html create mode 100644 index.mjs create mode 100644 lib/canvg/dist/umd.js create mode 100644 lib/canvg/dist/umd.js.map create mode 100644 lib/canvg/v2/canvg.js create mode 100644 lib/canvg/v2/rgbcolor.min.js create mode 100644 lib/canvg/v2/stackblur.min.js create mode 100644 lib/changeDPI/index.js create mode 100644 lib/color.js create mode 100644 lib/jspdf/build/cmaps/78-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/78-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/78-H.bcmap create mode 100644 lib/jspdf/build/cmaps/78-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/78-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/78-V.bcmap create mode 100644 lib/jspdf/build/cmaps/78ms-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/78ms-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/83pv-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/90ms-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/90ms-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/90msp-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/90msp-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/90pv-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/90pv-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Add-H.bcmap create mode 100644 lib/jspdf/build/cmaps/Add-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/Add-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Add-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-0.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-1.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-3.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-4.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-5.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-6.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-CNS1-UCS2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-0.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-1.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-3.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-4.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-5.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-GB1-UCS2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-0.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-1.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-3.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-4.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-5.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-6.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Japan1-UCS2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Korea1-0.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Korea1-1.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Korea1-2.bcmap create mode 100644 lib/jspdf/build/cmaps/Adobe-Korea1-UCS2.bcmap create mode 100644 lib/jspdf/build/cmaps/B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/B5pc-H.bcmap create mode 100644 lib/jspdf/build/cmaps/B5pc-V.bcmap create mode 100644 lib/jspdf/build/cmaps/CNS-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/CNS-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/CNS1-H.bcmap create mode 100644 lib/jspdf/build/cmaps/CNS1-V.bcmap create mode 100644 lib/jspdf/build/cmaps/CNS2-H.bcmap create mode 100644 lib/jspdf/build/cmaps/CNS2-V.bcmap create mode 100644 lib/jspdf/build/cmaps/ETHK-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/ETHK-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/ETen-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/ETen-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/ETenms-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/ETenms-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Ext-H.bcmap create mode 100644 lib/jspdf/build/cmaps/Ext-RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/Ext-RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Ext-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GB-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GB-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GB-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GB-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBK-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBK-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBK2K-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBK2K-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBKp-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBKp-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBT-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBT-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBT-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBT-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBTpc-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBTpc-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/GBpc-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/GBpc-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKdla-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKdla-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/HKdlb-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKdlb-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/HKgccs-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKgccs-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/HKm314-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKm314-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/HKm471-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKm471-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/HKscs-B5-H.bcmap create mode 100644 lib/jspdf/build/cmaps/HKscs-B5-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Hankaku.bcmap create mode 100644 lib/jspdf/build/cmaps/Hiragana.bcmap create mode 100644 lib/jspdf/build/cmaps/KSC-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/KSC-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/KSC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/KSC-Johab-H.bcmap create mode 100644 lib/jspdf/build/cmaps/KSC-Johab-V.bcmap create mode 100644 lib/jspdf/build/cmaps/KSC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/KSCms-UHC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/KSCms-UHC-HW-H.bcmap create mode 100644 lib/jspdf/build/cmaps/KSCms-UHC-HW-V.bcmap create mode 100644 lib/jspdf/build/cmaps/KSCms-UHC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/KSCpc-EUC-H.bcmap create mode 100644 lib/jspdf/build/cmaps/KSCpc-EUC-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Katakana.bcmap create mode 100644 lib/jspdf/build/cmaps/LICENSE create mode 100644 lib/jspdf/build/cmaps/NWP-H.bcmap create mode 100644 lib/jspdf/build/cmaps/NWP-V.bcmap create mode 100644 lib/jspdf/build/cmaps/RKSJ-H.bcmap create mode 100644 lib/jspdf/build/cmaps/RKSJ-V.bcmap create mode 100644 lib/jspdf/build/cmaps/Roman.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UCS2-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UCS2-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UTF16-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UTF16-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UTF8-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniCNS-UTF8-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UCS2-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UCS2-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UTF16-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UTF16-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UTF8-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniGB-UTF8-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UCS2-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UCS2-HW-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UCS2-HW-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UCS2-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UTF16-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UTF16-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UTF8-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS-UTF8-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS2004-UTF16-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS2004-UTF16-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS2004-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS2004-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS2004-UTF8-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJIS2004-UTF8-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISPro-UCS2-HW-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISPro-UCS2-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISPro-UTF8-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISX0213-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISX0213-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISX02132004-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniJISX02132004-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UCS2-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UCS2-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UTF16-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UTF16-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UTF32-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UTF32-V.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UTF8-H.bcmap create mode 100644 lib/jspdf/build/cmaps/UniKS-UTF8-V.bcmap create mode 100644 lib/jspdf/build/cmaps/V.bcmap create mode 100644 lib/jspdf/build/cmaps/WP-Symbol.bcmap create mode 100644 lib/jspdf/build/pdf.mjs create mode 100644 lib/jspdf/build/pdf.mjs.map create mode 100644 lib/jspdf/build/pdf.sandbox.mjs create mode 100644 lib/jspdf/build/pdf.sandbox.mjs.map create mode 100644 lib/jspdf/build/pdf.worker.mjs create mode 100644 lib/jspdf/build/pdf.worker.mjs.map create mode 100644 lib/jspdf/jspdf.es.js create mode 100644 lib/jspdf/jspdf.es.js.map create mode 100644 lib/jspdf/jspdf.es.min.js create mode 100644 lib/jspdf/jspdf.es.min.js.map create mode 100644 lib/jspdf/jspdf.node.js create mode 100644 lib/jspdf/jspdf.node.js.map create mode 100644 lib/jspdf/jspdf.node.min.js create mode 100644 lib/jspdf/jspdf.node.min.js.map create mode 100644 lib/jspdf/jspdf.umd.js create mode 100644 lib/jspdf/jspdf.umd.js.map create mode 100644 lib/jspdf/jspdf.umd.min.js create mode 100644 lib/jspdf/jspdf.umd.min.js.map create mode 100644 lib/jspdf/polyfills.es.js create mode 100644 lib/jspdf/polyfills.umd.js create mode 100644 lib/qrcode.min.js create mode 100644 package.json create mode 100644 src/Checkbox.css create mode 100644 src/Checkbox.mjs create mode 100644 src/ColorUtils.mjs create mode 100644 src/EventTarget.mjs create mode 100644 src/PDFRenderer.mjs create mode 100644 src/PDFViewer.css create mode 100644 src/PDFViewer.mjs create mode 100644 src/PNGRenderer.mjs create mode 100644 src/PreviewBox.css create mode 100644 src/PreviewBox.mjs create mode 100644 src/SVGRenderer.mjs create mode 100644 src/SettingsForm.css create mode 100644 src/SettingsForm.mjs create mode 100644 src/Utils.mjs create mode 100644 style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc30125 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +.vscode/ + +.DS_Store diff --git a/README.md b/README.md index a57c1bd..74452d5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,9 @@ -# fabaccess-sticker-generator -FabAccess Sticker Generator +# FabAccess Sticker Generator + +A web based Tool to create Stickers for the FabAccess Resource Management System [1]. + +A running instance can be found and used here: +https://fabaccess-sticker-generator.sternenlabor.de/ + + +[1] https://www.fab-access.info/ \ No newline at end of file diff --git a/images/toolbar-button-download.svg b/images/toolbar-button-download.svg new file mode 100644 index 0000000..e2e850a --- /dev/null +++ b/images/toolbar-button-download.svg @@ -0,0 +1,4 @@ + + + + diff --git a/images/toolbar-button-pageDown.svg b/images/toolbar-button-pageDown.svg new file mode 100644 index 0000000..1fc12e7 --- /dev/null +++ b/images/toolbar-button-pageDown.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/toolbar-button-pageUp.svg b/images/toolbar-button-pageUp.svg new file mode 100644 index 0000000..0936b9a --- /dev/null +++ b/images/toolbar-button-pageUp.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/toolbar-button-print.svg b/images/toolbar-button-print.svg new file mode 100644 index 0000000..97a3904 --- /dev/null +++ b/images/toolbar-button-print.svg @@ -0,0 +1,3 @@ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..cafb356 --- /dev/null +++ b/index.html @@ -0,0 +1,30 @@ + + + + FabAccess Sticker Generator + + + + + +

FabAccess Sticker Generator

+
+ + + + +
+ + + + +
+ + +
+ + + + + + diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..79cccc7 --- /dev/null +++ b/index.mjs @@ -0,0 +1,21 @@ +import SVGRenderer from '/src/SVGRenderer.mjs' +import PNGRenderer from '/src/PNGRenderer.mjs' +import PDFRenderer from '/src/PDFRenderer.mjs' + +const box = document.querySelector('fabaccess-preview-box') +const form = document.querySelector('fabaccess-settings-form') + +form.addEventListener('change', (e) => { + SVGRenderer.optimizeForPrint = e.detail.optimizeForPrint + box.setAttribute('value', e.detail.machineID) + box.setAttribute('size', e.detail.size) + box.update() +}) + +document.querySelector('#download-qr-code-svg').addEventListener('click', () => SVGRenderer.downloadSVG(form.machineID, form.size)) +document.querySelector('#download-qr-code-png').addEventListener('click', () => PNGRenderer.downloadPNG(form.machineID, form.size)) +document.querySelector('#add-qr-code-to-page').addEventListener('click', () => PDFRenderer.addToPDF(form.machineID, form.size)) +document.querySelector('#download-pdf').addEventListener('click', () => PDFRenderer.downloadPDF()) + +box.setAttribute('value', form.machineID) +box.setAttribute('size', form.size) diff --git a/lib/canvg/dist/umd.js b/lib/canvg/dist/umd.js new file mode 100644 index 0000000..02bab73 --- /dev/null +++ b/lib/canvg/dist/umd.js @@ -0,0 +1,7045 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.canvg = {})); +})(this, (function (exports) { 'use strict'; + + /** + * Options preset for `OffscreenCanvas`. + * @param config - Preset requirements. + * @param config.DOMParser - XML/HTML parser from string into DOM Document. + * @returns Preset object. + */ function offscreen() { + let { DOMParser: DOMParserFallback } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + const preset = { + window: null, + ignoreAnimation: true, + ignoreMouse: true, + DOMParser: DOMParserFallback, + createCanvas (width, height) { + return new OffscreenCanvas(width, height); + }, + async createImage (url) { + const response = await fetch(url); + const blob = await response.blob(); + const img = await createImageBitmap(blob); + return img; + } + }; + if (typeof globalThis.DOMParser !== "undefined" || typeof DOMParserFallback === "undefined") { + Reflect.deleteProperty(preset, "DOMParser"); + } + return preset; + } + + /* eslint-disable @typescript-eslint/no-explicit-any */ /** + * Options preset for `node-canvas`. + * @param config - Preset requirements. + * @param config.DOMParser - XML/HTML parser from string into DOM Document. + * @param config.canvas - `node-canvas` exports. + * @param config.fetch - WHATWG-compatible `fetch` function. + * @returns Preset object. + */ function node(param) { + let { DOMParser, canvas, fetch } = param; + return { + window: null, + ignoreAnimation: true, + ignoreMouse: true, + DOMParser, + fetch, + createCanvas: canvas.createCanvas, + createImage: canvas.loadImage + }; + } + + var index = /*#__PURE__*/Object.freeze({ + __proto__: null, + offscreen: offscreen, + node: node + }); + + /** + * HTML-safe compress white-spaces. + * @param str - String to compress. + * @returns String. + */ function compressSpaces(str) { + return str.replace(/(?!\u3000)\s+/gm, " "); + } + /** + * HTML-safe left trim. + * @param str - String to trim. + * @returns String. + */ function trimLeft(str) { + return str.replace(/^[\n \t]+/, ""); + } + /** + * HTML-safe right trim. + * @param str - String to trim. + * @returns String. + */ function trimRight(str) { + return str.replace(/[\n \t]+$/, ""); + } + /** + * String to numbers array. + * @param str - Numbers string. + * @returns Numbers array. + */ function toNumbers(str) { + const matches = str.match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm); + return matches ? matches.map(parseFloat) : []; + } + /** + * String to matrix value. + * @param str - Numbers string. + * @returns Matrix value. + */ function toMatrixValue(str) { + const numbers = toNumbers(str); + const matrix = [ + numbers[0] || 0, + numbers[1] || 0, + numbers[2] || 0, + numbers[3] || 0, + numbers[4] || 0, + numbers[5] || 0 + ]; + return matrix; + } + // Microsoft Edge fix + const allUppercase = /^[A-Z-]+$/; + /** + * Normalize attribute name. + * @param name - Attribute name. + * @returns Normalized attribute name. + */ function normalizeAttributeName(name) { + if (allUppercase.test(name)) { + return name.toLowerCase(); + } + return name; + } + /** + * Parse external URL. + * @param url - CSS url string. + * @returns Parsed URL. + */ function parseExternalUrl(url) { + // single quotes [2] + // v double quotes [3] + // v v no quotes [4] + // v v v + const urlMatch = /url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(url); + if (!urlMatch) { + return ""; + } + return urlMatch[2] || urlMatch[3] || urlMatch[4] || ""; + } + /** + * Transform floats to integers in rgb colors. + * @param color - Color to normalize. + * @returns Normalized color. + */ function normalizeColor(color) { + if (!color.startsWith("rgb")) { + return color; + } + let rgbParts = 3; + const normalizedColor = color.replace(/\d+(\.\d+)?/g, (num, isFloat)=>rgbParts-- && isFloat ? String(Math.round(parseFloat(num))) : num); + return normalizedColor; + } + + // slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js + const attributeRegex = /(\[[^\]]+\])/g; + const idRegex = /(#[^\s+>~.[:]+)/g; + const classRegex = /(\.[^\s+>~.[:]+)/g; + const pseudoElementRegex = /(::[^\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi; + const pseudoClassWithBracketsRegex = /(:[\w-]+\([^)]*\))/gi; + const pseudoClassRegex = /(:[^\s+>~.[:]+)/g; + const elementRegex = /([^\s+>~.[:]+)/g; + function findSelectorMatch(selector, regex) { + const matches = regex.exec(selector); + if (!matches) { + return [ + selector, + 0 + ]; + } + return [ + selector.replace(regex, " "), + matches.length + ]; + } + /** + * Measure selector specificity. + * @param selector - Selector to measure. + * @returns Specificity. + */ function getSelectorSpecificity(selector) { + const specificity = [ + 0, + 0, + 0 + ]; + let currentSelector = selector.replace(/:not\(([^)]*)\)/g, " $1 ").replace(/{[\s\S]*/gm, " "); + let delta = 0; + [currentSelector, delta] = findSelectorMatch(currentSelector, attributeRegex); + specificity[1] += delta; + [currentSelector, delta] = findSelectorMatch(currentSelector, idRegex); + specificity[0] += delta; + [currentSelector, delta] = findSelectorMatch(currentSelector, classRegex); + specificity[1] += delta; + [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoElementRegex); + specificity[2] += delta; + [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassWithBracketsRegex); + specificity[1] += delta; + [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassRegex); + specificity[1] += delta; + currentSelector = currentSelector.replace(/[*\s+>~]/g, " ").replace(/[#.]/g, " "); + [currentSelector, delta] = findSelectorMatch(currentSelector, elementRegex) // lgtm [js/useless-assignment-to-local] + ; + specificity[2] += delta; + return specificity.join(""); + } + + const PSEUDO_ZERO = .00000001; + /** + * Vector magnitude. + * @param v + * @returns Number result. + */ function vectorMagnitude(v) { + return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); + } + /** + * Ratio between two vectors. + * @param u + * @param v + * @returns Number result. + */ function vectorsRatio(u, v) { + return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v)); + } + /** + * Angle between two vectors. + * @param u + * @param v + * @returns Number result. + */ function vectorsAngle(u, v) { + return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vectorsRatio(u, v)); + } + function CB1(t) { + return t * t * t; + } + function CB2(t) { + return 3 * t * t * (1 - t); + } + function CB3(t) { + return 3 * t * (1 - t) * (1 - t); + } + function CB4(t) { + return (1 - t) * (1 - t) * (1 - t); + } + function QB1(t) { + return t * t; + } + function QB2(t) { + return 2 * t * (1 - t); + } + function QB3(t) { + return (1 - t) * (1 - t); + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var raf$1 = {exports: {}}; + + var performanceNow = {exports: {}}; + + // Generated by CoffeeScript 1.12.2 + (function() { + var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime; + if (typeof performance !== "undefined" && performance !== null && performance.now) { + performanceNow.exports = function() { + return performance.now(); + }; + } else if (typeof process !== "undefined" && process !== null && process.hrtime) { + performanceNow.exports = function() { + return (getNanoSeconds() - nodeLoadTime) / 1e6; + }; + hrtime = process.hrtime; + getNanoSeconds = function() { + var hr; + hr = hrtime(); + return hr[0] * 1e9 + hr[1]; + }; + moduleLoadTime = getNanoSeconds(); + upTime = process.uptime() * 1e9; + nodeLoadTime = moduleLoadTime - upTime; + } else if (Date.now) { + performanceNow.exports = function() { + return Date.now() - loadTime; + }; + loadTime = Date.now(); + } else { + performanceNow.exports = function() { + return new Date().getTime() - loadTime; + }; + loadTime = new Date().getTime(); + } + }).call(commonjsGlobal); + + var now = performanceNow.exports, root = typeof window === "undefined" ? commonjsGlobal : window, vendors = [ + "moz", + "webkit" + ], suffix = "AnimationFrame", raf = root["request" + suffix], caf = root["cancel" + suffix] || root["cancelRequest" + suffix]; + for(var i$1 = 0; !raf && i$1 < vendors.length; i$1++){ + raf = root[vendors[i$1] + "Request" + suffix]; + caf = root[vendors[i$1] + "Cancel" + suffix] || root[vendors[i$1] + "CancelRequest" + suffix]; + } + // Some versions of FF have rAF but not cAF + if (!raf || !caf) { + var last = 0, id = 0, queue = [], frameDuration = 1000 / 60; + raf = function(callback) { + if (queue.length === 0) { + var _now = now(), next = Math.max(0, frameDuration - (_now - last)); + last = next + _now; + setTimeout(function() { + var cp = queue.slice(0); + // Clear queue here to prevent + // callbacks from appending listeners + // to the current frame's queue + queue.length = 0; + for(var i = 0; i < cp.length; i++){ + if (!cp[i].cancelled) { + try { + cp[i].callback(last); + } catch (e) { + setTimeout(function() { + throw e; + }, 0); + } + } + } + }, Math.round(next)); + } + queue.push({ + handle: ++id, + callback: callback, + cancelled: false + }); + return id; + }; + caf = function(handle) { + for(var i = 0; i < queue.length; i++){ + if (queue[i].handle === handle) { + queue[i].cancelled = true; + } + } + }; + } + raf$1.exports = function(fn) { + // Wrap in a new function to prevent + // `cancel` potentially being assigned + // to the native rAF function + return raf.call(root, fn); + }; + raf$1.exports.cancel = function() { + caf.apply(root, arguments); + }; + raf$1.exports.polyfill = function(object) { + if (!object) { + object = root; + } + object.requestAnimationFrame = raf; + object.cancelAnimationFrame = caf; + }; + + var requestAnimationFrame = raf$1.exports; + + /* + Based on rgbcolor.js by Stoyan Stefanov + http://www.phpied.com/rgb-color-parser-in-javascript/ + */ + + var rgbcolor = function(color_string) { + this.ok = false; + this.alpha = 1.0; + // strip any leading # + if (color_string.charAt(0) == "#") { + color_string = color_string.substr(1, 6); + } + color_string = color_string.replace(/ /g, ""); + color_string = color_string.toLowerCase(); + // before getting into regexps, try simple matches + // and overwrite the input + var simple_colors = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "00ffff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000000", + blanchedalmond: "ffebcd", + blue: "0000ff", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "00ffff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dodgerblue: "1e90ff", + feldspar: "d19275", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "ff00ff", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgrey: "d3d3d3", + lightgreen: "90ee90", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslateblue: "8470ff", + lightslategray: "778899", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "00ff00", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "ff00ff", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370d8", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "d87093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "ff0000", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + violetred: "d02090", + wheat: "f5deb3", + white: "ffffff", + whitesmoke: "f5f5f5", + yellow: "ffff00", + yellowgreen: "9acd32" + }; + color_string = simple_colors[color_string] || color_string; + // emd of simple type-in colors + // array of color definition objects + var color_defs = [ + { + re: /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*((?:\d?\.)?\d)\)$/, + example: [ + "rgba(123, 234, 45, 0.8)", + "rgba(255,234,245,1.0)" + ], + process: function(bits) { + return [ + parseInt(bits[1]), + parseInt(bits[2]), + parseInt(bits[3]), + parseFloat(bits[4]) + ]; + } + }, + { + re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, + example: [ + "rgb(123, 234, 45)", + "rgb(255,234,245)" + ], + process: function(bits) { + return [ + parseInt(bits[1]), + parseInt(bits[2]), + parseInt(bits[3]) + ]; + } + }, + { + re: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + example: [ + "#00ff00", + "336699" + ], + process: function(bits) { + return [ + parseInt(bits[1], 16), + parseInt(bits[2], 16), + parseInt(bits[3], 16) + ]; + } + }, + { + re: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + example: [ + "#fb0", + "f0f" + ], + process: function(bits) { + return [ + parseInt(bits[1] + bits[1], 16), + parseInt(bits[2] + bits[2], 16), + parseInt(bits[3] + bits[3], 16) + ]; + } + } + ]; + // search through the definitions to find a match + for(var i = 0; i < color_defs.length; i++){ + var re = color_defs[i].re; + var processor = color_defs[i].process; + var bits = re.exec(color_string); + if (bits) { + var channels = processor(bits); + this.r = channels[0]; + this.g = channels[1]; + this.b = channels[2]; + if (channels.length > 3) { + this.alpha = channels[3]; + } + this.ok = true; + } + } + // validate/cleanup values + this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; + this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g; + this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; + this.alpha = this.alpha < 0 ? 0 : this.alpha > 1.0 || isNaN(this.alpha) ? 1.0 : this.alpha; + // some getters + this.toRGB = function() { + return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")"; + }; + this.toRGBA = function() { + return "rgba(" + this.r + ", " + this.g + ", " + this.b + ", " + this.alpha + ")"; + }; + this.toHex = function() { + var r = this.r.toString(16); + var g = this.g.toString(16); + var b = this.b.toString(16); + if (r.length == 1) r = "0" + r; + if (g.length == 1) g = "0" + g; + if (b.length == 1) b = "0" + b; + return "#" + r + g + b; + }; + // help + this.getHelpXML = function() { + var examples = new Array(); + // add regexps + for(var i = 0; i < color_defs.length; i++){ + var example = color_defs[i].example; + for(var j = 0; j < example.length; j++){ + examples[examples.length] = example[j]; + } + } + // add type-in colors + for(var sc in simple_colors){ + examples[examples.length] = sc; + } + var xml = document.createElement("ul"); + xml.setAttribute("id", "rgbcolor-examples"); + for(var i = 0; i < examples.length; i++){ + try { + var list_item = document.createElement("li"); + var list_color = new RGBColor(examples[i]); + var example_div = document.createElement("div"); + example_div.style.cssText = "margin: 3px; " + "border: 1px solid black; " + "background:" + list_color.toHex() + "; " + "color:" + list_color.toHex(); + example_div.appendChild(document.createTextNode("test")); + var list_item_value = document.createTextNode(" " + examples[i] + " -> " + list_color.toRGB() + " -> " + list_color.toHex()); + list_item.appendChild(example_div); + list_item.appendChild(list_item_value); + xml.appendChild(list_item); + } catch (e) {} + } + return xml; + }; + }; + + class Property { + document; + name; + value; + static empty(document) { + return new Property(document, "EMPTY", ""); + } + static textBaselineMapping = { + "baseline": "alphabetic", + "before-edge": "top", + "text-before-edge": "top", + "middle": "middle", + "central": "middle", + "after-edge": "bottom", + "text-after-edge": "bottom", + "ideographic": "ideographic", + "alphabetic": "alphabetic", + "hanging": "hanging", + "mathematical": "alphabetic" + }; + isNormalizedColor; + constructor(document, name, value){ + this.document = document; + this.name = name; + this.value = value; + this.isNormalizedColor = false; + } + split() { + let separator = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : " "; + const { document, name } = this; + return compressSpaces(this.getString()).trim().split(separator).map((value)=>new Property(document, name, value)); + } + hasValue(zeroIsValue) { + const value = this.value; + return value !== null && value !== "" && (zeroIsValue || value !== 0) && typeof value !== "undefined"; + } + isString(regexp) { + const { value } = this; + const result = typeof value === "string"; + if (!result || !regexp) { + return result; + } + return regexp.test(value); + } + isUrlDefinition() { + return this.isString(/^url\(/); + } + isPixels() { + if (!this.hasValue()) { + return false; + } + const asString = this.getString(); + switch(true){ + case asString.endsWith("px"): + case /^[0-9]+$/.test(asString): + return true; + default: + return false; + } + } + setValue(value) { + this.value = value; + return this; + } + getValue(def) { + if (typeof def === "undefined" || this.hasValue()) { + return this.value; + } + return def; + } + getNumber(def) { + if (!this.hasValue()) { + if (typeof def === "undefined") { + return 0; + } + // @ts-expect-error Parse unknown value. + return parseFloat(def); + } + const { value } = this; + // @ts-expect-error Parse unknown value. + let n = parseFloat(value); + if (this.isString(/%$/)) { + n /= 100.0; + } + return n; + } + getString(def) { + if (typeof def === "undefined" || this.hasValue()) { + return typeof this.value === "undefined" ? "" : String(this.value); + } + return String(def); + } + getColor(def) { + let color = this.getString(def); + if (this.isNormalizedColor) { + return color; + } + this.isNormalizedColor = true; + color = normalizeColor(color); + this.value = color; + return color; + } + getDpi() { + return 96.0 // TODO: compute? + ; + } + getRem() { + return this.document.rootEmSize; + } + getEm() { + return this.document.emSize; + } + getUnits() { + return this.getString().replace(/[0-9.-]/g, ""); + } + getPixels(axisOrIsFontSize) { + let processPercent = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (!this.hasValue()) { + return 0; + } + const [axis, isFontSize] = typeof axisOrIsFontSize === "boolean" ? [ + undefined, + axisOrIsFontSize + ] : [ + axisOrIsFontSize + ]; + const { viewPort } = this.document.screen; + switch(true){ + case this.isString(/vmin$/): + return this.getNumber() / 100.0 * Math.min(viewPort.computeSize("x"), viewPort.computeSize("y")); + case this.isString(/vmax$/): + return this.getNumber() / 100.0 * Math.max(viewPort.computeSize("x"), viewPort.computeSize("y")); + case this.isString(/vw$/): + return this.getNumber() / 100.0 * viewPort.computeSize("x"); + case this.isString(/vh$/): + return this.getNumber() / 100.0 * viewPort.computeSize("y"); + case this.isString(/rem$/): + return this.getNumber() * this.getRem(); + case this.isString(/em$/): + return this.getNumber() * this.getEm(); + case this.isString(/ex$/): + return this.getNumber() * this.getEm() / 2.0; + case this.isString(/px$/): + return this.getNumber(); + case this.isString(/pt$/): + return this.getNumber() * this.getDpi() * (1.0 / 72.0); + case this.isString(/pc$/): + return this.getNumber() * 15; + case this.isString(/cm$/): + return this.getNumber() * this.getDpi() / 2.54; + case this.isString(/mm$/): + return this.getNumber() * this.getDpi() / 25.4; + case this.isString(/in$/): + return this.getNumber() * this.getDpi(); + case this.isString(/%$/) && isFontSize: + return this.getNumber() * this.getEm(); + case this.isString(/%$/): + return this.getNumber() * viewPort.computeSize(axis); + default: + { + const n = this.getNumber(); + if (processPercent && n < 1.0) { + return n * viewPort.computeSize(axis); + } + return n; + } + } + } + getMilliseconds() { + if (!this.hasValue()) { + return 0; + } + if (this.isString(/ms$/)) { + return this.getNumber(); + } + return this.getNumber() * 1000; + } + getRadians() { + if (!this.hasValue()) { + return 0; + } + switch(true){ + case this.isString(/deg$/): + return this.getNumber() * (Math.PI / 180.0); + case this.isString(/grad$/): + return this.getNumber() * (Math.PI / 200.0); + case this.isString(/rad$/): + return this.getNumber(); + default: + return this.getNumber() * (Math.PI / 180.0); + } + } + getDefinition() { + const asString = this.getString(); + const match = /#([^)'"]+)/.exec(asString); + const name = (match === null || match === void 0 ? void 0 : match[1]) || asString; + return this.document.definitions[name]; + } + getFillStyleDefinition(element, opacity) { + let def = this.getDefinition(); + if (!def) { + return null; + } + // gradient + if (typeof def.createGradient === "function" && "getBoundingBox" in element) { + return def.createGradient(this.document.ctx, element, opacity); + } + // pattern + if (typeof def.createPattern === "function") { + if (def.getHrefAttribute().hasValue()) { + const patternTransform = def.getAttribute("patternTransform"); + def = def.getHrefAttribute().getDefinition(); + if (def && patternTransform.hasValue()) { + def.getAttribute("patternTransform", true).setValue(patternTransform.value); + } + } + if (def) { + return def.createPattern(this.document.ctx, element, opacity); + } + } + return null; + } + getTextBaseline() { + if (!this.hasValue()) { + return null; + } + const key = this.getString(); + return Property.textBaselineMapping[key] || null; + } + addOpacity(opacity) { + let value = this.getColor(); + const len = value.length; + let commas = 0; + // Simulate old RGBColor version, which can't parse rgba. + for(let i = 0; i < len; i++){ + if (value[i] === ",") { + commas++; + } + if (commas === 3) { + break; + } + } + if (opacity.hasValue() && this.isString() && commas !== 3) { + const color = new rgbcolor(value); + if (color.ok) { + color.alpha = opacity.getNumber(); + value = color.toRGBA(); + } + } + return new Property(this.document, this.name, value); + } + } + + class ViewPort { + static DEFAULT_VIEWPORT_WIDTH = 800; + static DEFAULT_VIEWPORT_HEIGHT = 600; + viewPorts = []; + clear() { + this.viewPorts = []; + } + setCurrent(width, height) { + this.viewPorts.push({ + width, + height + }); + } + removeCurrent() { + this.viewPorts.pop(); + } + getRoot() { + const [root] = this.viewPorts; + if (!root) { + return getDefault(); + } + return root; + } + getCurrent() { + const { viewPorts } = this; + const current = viewPorts[viewPorts.length - 1]; + if (!current) { + return getDefault(); + } + return current; + } + get width() { + return this.getCurrent().width; + } + get height() { + return this.getCurrent().height; + } + computeSize(d) { + if (typeof d === "number") { + return d; + } + if (d === "x") { + return this.width; + } + if (d === "y") { + return this.height; + } + return Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2)) / Math.sqrt(2); + } + } + function getDefault() { + return { + width: ViewPort.DEFAULT_VIEWPORT_WIDTH, + height: ViewPort.DEFAULT_VIEWPORT_HEIGHT + }; + } + + class Point { + x; + y; + static parse(point) { + let defaultValue = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + const [x = defaultValue, y = defaultValue] = toNumbers(point); + return new Point(x, y); + } + static parseScale(scale) { + let defaultValue = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + const [x = defaultValue, y = x] = toNumbers(scale); + return new Point(x, y); + } + static parsePath(path) { + const points = toNumbers(path); + const len = points.length; + const pathPoints = []; + for(let i = 0; i < len; i += 2){ + pathPoints.push(new Point(points[i], points[i + 1])); + } + return pathPoints; + } + constructor(x, y){ + this.x = x; + this.y = y; + } + angleTo(point) { + return Math.atan2(point.y - this.y, point.x - this.x); + } + applyTransform(transform) { + const { x, y } = this; + const xp = x * transform[0] + y * transform[2] + transform[4]; + const yp = x * transform[1] + y * transform[3] + transform[5]; + this.x = xp; + this.y = yp; + } + } + + class Mouse { + screen; + working; + events; + eventElements; + constructor(screen){ + this.screen = screen; + this.working = false; + this.events = []; + this.eventElements = []; + this.onClick = this.onClick.bind(this); + this.onMouseMove = this.onMouseMove.bind(this); + } + isWorking() { + return this.working; + } + start() { + if (this.working) { + return; + } + const { screen, onClick, onMouseMove } = this; + const canvas = screen.ctx.canvas; + canvas.onclick = onClick; + canvas.onmousemove = onMouseMove; + this.working = true; + } + stop() { + if (!this.working) { + return; + } + const canvas = this.screen.ctx.canvas; + this.working = false; + canvas.onclick = null; + canvas.onmousemove = null; + } + hasEvents() { + return this.working && this.events.length > 0; + } + runEvents() { + if (!this.working) { + return; + } + const { screen: document, events, eventElements } = this; + const { style } = document.ctx.canvas; + let element; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (style) { + style.cursor = ""; + } + events.forEach((param, i)=>{ + let { run } = param; + element = eventElements[i]; + while(element){ + run(element); + element = element.parent; + } + }); + // done running, clear + this.events = []; + this.eventElements = []; + } + checkPath(element, ctx) { + if (!this.working || !ctx) { + return; + } + const { events, eventElements } = this; + events.forEach((param, i)=>{ + let { x, y } = param; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) { + eventElements[i] = element; + } + }); + } + checkBoundingBox(element, boundingBox) { + if (!this.working || !boundingBox) { + return; + } + const { events, eventElements } = this; + events.forEach((param, i)=>{ + let { x, y } = param; + if (!eventElements[i] && boundingBox.isPointInBox(x, y)) { + eventElements[i] = element; + } + }); + } + mapXY(x, y) { + const { window, ctx } = this.screen; + const point = new Point(x, y); + let element = ctx.canvas; + while(element){ + point.x -= element.offsetLeft; + point.y -= element.offsetTop; + element = element.offsetParent; + } + if (window === null || window === void 0 ? void 0 : window.scrollX) { + point.x += window.scrollX; + } + if (window === null || window === void 0 ? void 0 : window.scrollY) { + point.y += window.scrollY; + } + return point; + } + onClick(event) { + const { x, y } = this.mapXY(event.clientX, event.clientY); + this.events.push({ + type: "onclick", + x, + y, + run (eventTarget) { + if (eventTarget.onClick) { + eventTarget.onClick(); + } + } + }); + } + onMouseMove(event) { + const { x, y } = this.mapXY(event.clientX, event.clientY); + this.events.push({ + type: "onmousemove", + x, + y, + run (eventTarget) { + if (eventTarget.onMouseMove) { + eventTarget.onMouseMove(); + } + } + }); + } + } + + const defaultWindow = typeof window !== "undefined" ? window : null; + const defaultFetch$1 = typeof fetch !== "undefined" ? fetch.bind(undefined) // `fetch` depends on context: `someObject.fetch(...)` will throw error. + : undefined; + class Screen { + ctx; + static defaultWindow = defaultWindow; + static defaultFetch = defaultFetch$1; + static FRAMERATE = 30; + static MAX_VIRTUAL_PIXELS = 30000; + window; + fetch; + viewPort; + mouse; + animations; + readyPromise; + resolveReady; + waits; + frameDuration; + isReadyLock; + isFirstRender; + intervalId; + constructor(ctx, { fetch: fetch1 = defaultFetch$1, window: window1 = defaultWindow } = {}){ + this.ctx = ctx; + this.viewPort = new ViewPort(); + this.mouse = new Mouse(this); + this.animations = []; + this.waits = []; + this.frameDuration = 0; + this.isReadyLock = false; + this.isFirstRender = true; + this.intervalId = null; + this.window = window1; + if (!fetch1) { + throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`); + } + this.fetch = fetch1; + } + wait(checker) { + this.waits.push(checker); + } + ready() { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + if (!this.readyPromise) { + return Promise.resolve(); + } + return this.readyPromise; + } + isReady() { + if (this.isReadyLock) { + return true; + } + const isReadyLock = this.waits.every((_)=>_()); + if (isReadyLock) { + this.waits = []; + if (this.resolveReady) { + this.resolveReady(); + } + } + this.isReadyLock = isReadyLock; + return isReadyLock; + } + setDefaults(ctx) { + // initial values and defaults + ctx.strokeStyle = "rgba(0,0,0,0)"; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 4; + } + setViewBox(param) { + let { document, ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX = 0, minY = 0, refX, refY, clip = false, clipX = 0, clipY = 0 } = param; + // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute + const cleanAspectRatio = compressSpaces(aspectRatio).replace(/^defer\s/, "") // ignore defer + ; + const [aspectRatioAlign, aspectRatioMeetOrSlice] = cleanAspectRatio.split(" "); + const align = aspectRatioAlign || "xMidYMid"; + const meetOrSlice = aspectRatioMeetOrSlice || "meet"; + // calculate scale + const scaleX = width / desiredWidth; + const scaleY = height / desiredHeight; + const scaleMin = Math.min(scaleX, scaleY); + const scaleMax = Math.max(scaleX, scaleY); + let finalDesiredWidth = desiredWidth; + let finalDesiredHeight = desiredHeight; + if (meetOrSlice === "meet") { + finalDesiredWidth *= scaleMin; + finalDesiredHeight *= scaleMin; + } + if (meetOrSlice === "slice") { + finalDesiredWidth *= scaleMax; + finalDesiredHeight *= scaleMax; + } + const refXProp = new Property(document, "refX", refX); + const refYProp = new Property(document, "refY", refY); + const hasRefs = refXProp.hasValue() && refYProp.hasValue(); + if (hasRefs) { + ctx.translate(-scaleMin * refXProp.getPixels("x"), -scaleMin * refYProp.getPixels("y")); + } + if (clip) { + const scaledClipX = scaleMin * clipX; + const scaledClipY = scaleMin * clipY; + ctx.beginPath(); + ctx.moveTo(scaledClipX, scaledClipY); + ctx.lineTo(width, scaledClipY); + ctx.lineTo(width, height); + ctx.lineTo(scaledClipX, height); + ctx.closePath(); + ctx.clip(); + } + if (!hasRefs) { + const isMeetMinY = meetOrSlice === "meet" && scaleMin === scaleY; + const isSliceMaxY = meetOrSlice === "slice" && scaleMax === scaleY; + const isMeetMinX = meetOrSlice === "meet" && scaleMin === scaleX; + const isSliceMaxX = meetOrSlice === "slice" && scaleMax === scaleX; + if (align.startsWith("xMid") && (isMeetMinY || isSliceMaxY)) { + ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0); + } + if (align.endsWith("YMid") && (isMeetMinX || isSliceMaxX)) { + ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0); + } + if (align.startsWith("xMax") && (isMeetMinY || isSliceMaxY)) { + ctx.translate(width - finalDesiredWidth, 0); + } + if (align.endsWith("YMax") && (isMeetMinX || isSliceMaxX)) { + ctx.translate(0, height - finalDesiredHeight); + } + } + // scale + switch(true){ + case align === "none": + ctx.scale(scaleX, scaleY); + break; + case meetOrSlice === "meet": + ctx.scale(scaleMin, scaleMin); + break; + case meetOrSlice === "slice": + ctx.scale(scaleMax, scaleMax); + break; + } + // translate + ctx.translate(-minX, -minY); + } + start(element) { + let { enableRedraw = false, ignoreMouse = false, ignoreAnimation = false, ignoreDimensions = false, ignoreClear = false, forceRedraw, scaleWidth, scaleHeight, offsetX, offsetY } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { mouse } = this; + const frameDuration = 1000 / Screen.FRAMERATE; + this.isReadyLock = false; + this.frameDuration = frameDuration; + this.readyPromise = new Promise((resolve)=>{ + this.resolveReady = resolve; + }); + if (this.isReady()) { + this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY); + } + if (!enableRedraw) { + return; + } + let now = Date.now(); + let then = now; + let delta = 0; + const tick = ()=>{ + now = Date.now(); + delta = now - then; + if (delta >= frameDuration) { + then = now - delta % frameDuration; + if (this.shouldUpdate(ignoreAnimation, forceRedraw)) { + this.render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY); + mouse.runEvents(); + } + } + this.intervalId = requestAnimationFrame(tick); + }; + if (!ignoreMouse) { + mouse.start(); + } + this.intervalId = requestAnimationFrame(tick); + } + stop() { + if (this.intervalId) { + requestAnimationFrame.cancel(this.intervalId); + this.intervalId = null; + } + this.mouse.stop(); + } + shouldUpdate(ignoreAnimation, forceRedraw) { + // need update from animations? + if (!ignoreAnimation) { + const { frameDuration } = this; + const shouldUpdate = this.animations.reduce((shouldUpdate, animation)=>animation.update(frameDuration) || shouldUpdate, false); + if (shouldUpdate) { + return true; + } + } + // need update from redraw? + if (typeof forceRedraw === "function" && forceRedraw()) { + return true; + } + if (!this.isReadyLock && this.isReady()) { + return true; + } + // need update from mouse events? + if (this.mouse.hasEvents()) { + return true; + } + return false; + } + render(element, ignoreDimensions, ignoreClear, scaleWidth, scaleHeight, offsetX, offsetY) { + const { viewPort, ctx, isFirstRender } = this; + const canvas = ctx.canvas; + viewPort.clear(); + if (canvas.width && canvas.height) { + viewPort.setCurrent(canvas.width, canvas.height); + } + const widthStyle = element.getStyle("width"); + const heightStyle = element.getStyle("height"); + if (!ignoreDimensions && (isFirstRender || typeof scaleWidth !== "number" && typeof scaleHeight !== "number")) { + // set canvas size + if (widthStyle.hasValue()) { + canvas.width = widthStyle.getPixels("x"); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (canvas.style) { + canvas.style.width = `${canvas.width}px`; + } + } + if (heightStyle.hasValue()) { + canvas.height = heightStyle.getPixels("y"); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (canvas.style) { + canvas.style.height = `${canvas.height}px`; + } + } + } + let cWidth = canvas.clientWidth || canvas.width; + let cHeight = canvas.clientHeight || canvas.height; + if (ignoreDimensions && widthStyle.hasValue() && heightStyle.hasValue()) { + cWidth = widthStyle.getPixels("x"); + cHeight = heightStyle.getPixels("y"); + } + viewPort.setCurrent(cWidth, cHeight); + if (typeof offsetX === "number") { + element.getAttribute("x", true).setValue(offsetX); + } + if (typeof offsetY === "number") { + element.getAttribute("y", true).setValue(offsetY); + } + if (typeof scaleWidth === "number" || typeof scaleHeight === "number") { + const viewBox = toNumbers(element.getAttribute("viewBox").getString()); + let xRatio = 0; + let yRatio = 0; + if (typeof scaleWidth === "number") { + const widthStyle = element.getStyle("width"); + if (widthStyle.hasValue()) { + xRatio = widthStyle.getPixels("x") / scaleWidth; + } else if (viewBox[2] && !isNaN(viewBox[2])) { + xRatio = viewBox[2] / scaleWidth; + } + } + if (typeof scaleHeight === "number") { + const heightStyle = element.getStyle("height"); + if (heightStyle.hasValue()) { + yRatio = heightStyle.getPixels("y") / scaleHeight; + } else if (viewBox[3] && !isNaN(viewBox[3])) { + yRatio = viewBox[3] / scaleHeight; + } + } + if (!xRatio) { + xRatio = yRatio; + } + if (!yRatio) { + yRatio = xRatio; + } + element.getAttribute("width", true).setValue(scaleWidth); + element.getAttribute("height", true).setValue(scaleHeight); + const transformStyle = element.getStyle("transform", true, true); + transformStyle.setValue(`${transformStyle.getString()} scale(${1.0 / xRatio}, ${1.0 / yRatio})`); + } + // clear and render + if (!ignoreClear) { + ctx.clearRect(0, 0, cWidth, cHeight); + } + element.render(ctx); + if (isFirstRender) { + this.isFirstRender = false; + } + } + } + + const { defaultFetch } = Screen; + const DefaultDOMParser = typeof DOMParser !== "undefined" ? DOMParser : undefined; + class Parser { + fetch; + DOMParser; + constructor({ fetch = defaultFetch, DOMParser: DOMParser1 = DefaultDOMParser } = {}){ + if (!fetch) { + throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`); + } + if (!DOMParser1) { + throw new Error(`Can't find 'DOMParser' in 'globalThis', please provide it via options`); + } + this.fetch = fetch; + this.DOMParser = DOMParser1; + } + async parse(resource) { + if (resource.startsWith("<")) { + return this.parseFromString(resource); + } + return this.load(resource); + } + parseFromString(xml) { + const parser = new this.DOMParser(); + try { + return this.checkDocument(parser.parseFromString(xml, "image/svg+xml")); + } catch (err) { + return this.checkDocument(parser.parseFromString(xml, "text/xml")); + } + } + checkDocument(document) { + const parserError = document.getElementsByTagName("parsererror")[0]; + if (parserError) { + throw new Error(parserError.textContent || "Unknown parse error"); + } + return document; + } + async load(url) { + const response = await this.fetch(url); + const xml = await response.text(); + return this.parseFromString(xml); + } + } + + class Translate { + type = "translate"; + point; + constructor(_, point){ + this.point = Point.parse(point); + } + apply(ctx) { + const { x, y } = this.point; + ctx.translate(x || 0.0, y || 0.0); + } + unapply(ctx) { + const { x, y } = this.point; + ctx.translate(-1.0 * x || 0.0, -1.0 * y || 0.0); + } + applyToPoint(point) { + const { x, y } = this.point; + point.applyTransform([ + 1, + 0, + 0, + 1, + x || 0.0, + y || 0.0 + ]); + } + } + + class Rotate { + type = "rotate"; + angle; + originX; + originY; + cx; + cy; + constructor(document, rotate, transformOrigin){ + const numbers = toNumbers(rotate); + this.angle = new Property(document, "angle", numbers[0]); + this.originX = transformOrigin[0]; + this.originY = transformOrigin[1]; + this.cx = numbers[1] || 0; + this.cy = numbers[2] || 0; + } + apply(ctx) { + const { cx, cy, originX, originY, angle } = this; + const tx = cx + originX.getPixels("x"); + const ty = cy + originY.getPixels("y"); + ctx.translate(tx, ty); + ctx.rotate(angle.getRadians()); + ctx.translate(-tx, -ty); + } + unapply(ctx) { + const { cx, cy, originX, originY, angle } = this; + const tx = cx + originX.getPixels("x"); + const ty = cy + originY.getPixels("y"); + ctx.translate(tx, ty); + ctx.rotate(-1.0 * angle.getRadians()); + ctx.translate(-tx, -ty); + } + applyToPoint(point) { + const { cx, cy, angle } = this; + const rad = angle.getRadians(); + point.applyTransform([ + 1, + 0, + 0, + 1, + cx || 0.0, + cy || 0.0 // this.p.y + ]); + point.applyTransform([ + Math.cos(rad), + Math.sin(rad), + -Math.sin(rad), + Math.cos(rad), + 0, + 0 + ]); + point.applyTransform([ + 1, + 0, + 0, + 1, + -cx || 0.0, + -cy || 0.0 // -this.p.y + ]); + } + } + + class Scale { + type = "scale"; + scale; + originX; + originY; + constructor(_, scale, transformOrigin){ + const scaleSize = Point.parseScale(scale); + // Workaround for node-canvas + if (scaleSize.x === 0 || scaleSize.y === 0) { + scaleSize.x = PSEUDO_ZERO; + scaleSize.y = PSEUDO_ZERO; + } + this.scale = scaleSize; + this.originX = transformOrigin[0]; + this.originY = transformOrigin[1]; + } + apply(ctx) { + const { scale: { x, y }, originX, originY } = this; + const tx = originX.getPixels("x"); + const ty = originY.getPixels("y"); + ctx.translate(tx, ty); + ctx.scale(x, y || x); + ctx.translate(-tx, -ty); + } + unapply(ctx) { + const { scale: { x, y }, originX, originY } = this; + const tx = originX.getPixels("x"); + const ty = originY.getPixels("y"); + ctx.translate(tx, ty); + ctx.scale(1.0 / x, 1.0 / y || x); + ctx.translate(-tx, -ty); + } + applyToPoint(point) { + const { x, y } = this.scale; + point.applyTransform([ + x || 0.0, + 0, + 0, + y || 0.0, + 0, + 0 + ]); + } + } + + class Matrix { + type = "matrix"; + matrix; + originX; + originY; + constructor(_, matrix, transformOrigin){ + this.matrix = toMatrixValue(matrix); + this.originX = transformOrigin[0]; + this.originY = transformOrigin[1]; + } + apply(ctx) { + const { originX, originY, matrix } = this; + const tx = originX.getPixels("x"); + const ty = originY.getPixels("y"); + ctx.translate(tx, ty); + ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); + ctx.translate(-tx, -ty); + } + unapply(ctx) { + const { originX, originY, matrix } = this; + const a = matrix[0]; + const b = matrix[2]; + const c = matrix[4]; + const d = matrix[1]; + const e = matrix[3]; + const f = matrix[5]; + const g = 0.0; + const h = 0.0; + const i = 1.0; + const det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g)); + const tx = originX.getPixels("x"); + const ty = originY.getPixels("y"); + ctx.translate(tx, ty); + ctx.transform(det * (e * i - f * h), det * (f * g - d * i), det * (c * h - b * i), det * (a * i - c * g), det * (b * f - c * e), det * (c * d - a * f)); + ctx.translate(-tx, -ty); + } + applyToPoint(point) { + point.applyTransform(this.matrix); + } + } + + class Skew extends Matrix { + type = "skew"; + angle; + constructor(document, skew, transformOrigin){ + super(document, skew, transformOrigin); + this.angle = new Property(document, "angle", skew); + } + } + + class SkewX extends Skew { + type = "skewX"; + constructor(document, skew, transformOrigin){ + super(document, skew, transformOrigin); + this.matrix = [ + 1, + 0, + Math.tan(this.angle.getRadians()), + 1, + 0, + 0 + ]; + } + } + + class SkewY extends Skew { + type = "skewY"; + constructor(document, skew, transformOrigin){ + super(document, skew, transformOrigin); + this.matrix = [ + 1, + Math.tan(this.angle.getRadians()), + 0, + 1, + 0, + 0 + ]; + } + } + + function parseTransforms(transform) { + return compressSpaces(transform).trim().replace(/\)([a-zA-Z])/g, ") $1").replace(/\)(\s?,\s?)/g, ") ").split(/\s(?=[a-z])/); + } + function parseTransform(transform) { + const [type = "", value = ""] = transform.split("("); + return [ + type.trim(), + value.trim().replace(")", "") + ]; + } + class Transform { + document; + static fromElement(document, element) { + const transformStyle = element.getStyle("transform", false, true); + if (transformStyle.hasValue()) { + const [transformOriginXProperty, transformOriginYProperty = transformOriginXProperty] = element.getStyle("transform-origin", false, true).split(); + if (transformOriginXProperty && transformOriginYProperty) { + const transformOrigin = [ + transformOriginXProperty, + transformOriginYProperty + ]; + return new Transform(document, transformStyle.getString(), transformOrigin); + } + } + return null; + } + static transformTypes = { + translate: Translate, + rotate: Rotate, + scale: Scale, + matrix: Matrix, + skewX: SkewX, + skewY: SkewY + }; + transforms; + constructor(document, transform, transformOrigin){ + this.document = document; + this.transforms = []; + const data = parseTransforms(transform); + data.forEach((transform)=>{ + if (transform === "none") { + return; + } + const [type, value] = parseTransform(transform); + const TransformType = Transform.transformTypes[type]; + if (TransformType) { + this.transforms.push(new TransformType(this.document, value, transformOrigin)); + } + }); + } + apply(ctx) { + this.transforms.forEach((transform)=>transform.apply(ctx)); + } + unapply(ctx) { + this.transforms.forEach((transform)=>transform.unapply(ctx)); + } + // TODO: applyToPoint unused ... remove? + applyToPoint(point) { + this.transforms.forEach((transform)=>transform.applyToPoint(point)); + } + } + + class Element { + document; + node; + captureTextNodes; + static ignoreChildTypes = [ + "title" + ]; + type; + attributes; + styles; + stylesSpecificity; + animationFrozen; + animationFrozenValue; + parent; + children; + constructor(document, node, captureTextNodes = false){ + this.document = document; + this.node = node; + this.captureTextNodes = captureTextNodes; + this.type = ""; + this.attributes = {}; + this.styles = {}; + this.stylesSpecificity = {}; + this.animationFrozen = false; + this.animationFrozenValue = ""; + this.parent = null; + this.children = []; + if (!node || node.nodeType !== 1) { + return; + } + // add attributes + Array.from(node.attributes).forEach((attribute)=>{ + const nodeName = normalizeAttributeName(attribute.nodeName); + this.attributes[nodeName] = new Property(document, nodeName, attribute.value); + }); + this.addStylesFromStyleDefinition(); + // add inline styles + if (this.getAttribute("style").hasValue()) { + const styles = this.getAttribute("style").getString().split(";").map((_)=>_.trim()); + styles.forEach((style)=>{ + if (!style) { + return; + } + const [name, value] = style.split(":").map((_)=>_.trim()); + if (name) { + this.styles[name] = new Property(document, name, value); + } + }); + } + const { definitions } = document; + const id = this.getAttribute("id"); + // add id + if (id.hasValue()) { + if (!definitions[id.getString()]) { + definitions[id.getString()] = this; + } + } + Array.from(node.childNodes).forEach((childNode)=>{ + if (childNode.nodeType === 1) { + this.addChild(childNode) // ELEMENT_NODE + ; + } else if (captureTextNodes && (childNode.nodeType === 3 || childNode.nodeType === 4)) { + const textNode = document.createTextNode(childNode); + if (textNode.getText().length > 0) { + this.addChild(textNode) // TEXT_NODE + ; + } + } + }); + } + getAttribute(name) { + let createIfNotExists = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + const attr = this.attributes[name]; + if (!attr && createIfNotExists) { + const attr = new Property(this.document, name, ""); + this.attributes[name] = attr; + return attr; + } + return attr || Property.empty(this.document); + } + getHrefAttribute() { + let href; + for(const key in this.attributes){ + if (key === "href" || key.endsWith(":href")) { + href = this.attributes[key]; + break; + } + } + return href || Property.empty(this.document); + } + getStyle(name) { + let createIfNotExists = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false, skipAncestors = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; + const style = this.styles[name]; + if (style) { + return style; + } + const attr = this.getAttribute(name); + if (attr.hasValue()) { + this.styles[name] = attr // move up to me to cache + ; + return attr; + } + if (!skipAncestors) { + const { parent } = this; + if (parent) { + const parentStyle = parent.getStyle(name); + if (parentStyle.hasValue()) { + return parentStyle; + } + } + } + if (createIfNotExists) { + const style = new Property(this.document, name, ""); + this.styles[name] = style; + return style; + } + return Property.empty(this.document); + } + render(ctx) { + // don't render display=none + // don't render visibility=hidden + if (this.getStyle("display").getString() === "none" || this.getStyle("visibility").getString() === "hidden") { + return; + } + ctx.save(); + if (this.getStyle("mask").hasValue()) { + const mask = this.getStyle("mask").getDefinition(); + if (mask) { + this.applyEffects(ctx); + mask.apply(ctx, this); + } + } else if (this.getStyle("filter").getValue("none") !== "none") { + const filter = this.getStyle("filter").getDefinition(); + if (filter) { + this.applyEffects(ctx); + filter.apply(ctx, this); + } + } else { + this.setContext(ctx); + this.renderChildren(ctx); + this.clearContext(ctx); + } + ctx.restore(); + } + setContext(_) { + // NO RENDER + } + applyEffects(ctx) { + // transform + const transform = Transform.fromElement(this.document, this); + if (transform) { + transform.apply(ctx); + } + // clip + const clipPathStyleProp = this.getStyle("clip-path", false, true); + if (clipPathStyleProp.hasValue()) { + const clip = clipPathStyleProp.getDefinition(); + if (clip) { + clip.apply(ctx); + } + } + } + clearContext(_) { + // NO RENDER + } + renderChildren(ctx) { + this.children.forEach((child)=>{ + child.render(ctx); + }); + } + addChild(childNode) { + const child = childNode instanceof Element ? childNode : this.document.createElement(childNode); + child.parent = this; + if (!Element.ignoreChildTypes.includes(child.type)) { + this.children.push(child); + } + } + matchesSelector(selector) { + var _node_getAttribute; + const { node } = this; + if (typeof node.matches === "function") { + return node.matches(selector); + } + const styleClasses = (_node_getAttribute = node.getAttribute) === null || _node_getAttribute === void 0 ? void 0 : _node_getAttribute.call(node, "class"); + if (!styleClasses || styleClasses === "") { + return false; + } + return styleClasses.split(" ").some((styleClass)=>`.${styleClass}` === selector); + } + addStylesFromStyleDefinition() { + const { styles, stylesSpecificity } = this.document; + let styleProp; + for(const selector in styles){ + if (!selector.startsWith("@") && this.matchesSelector(selector)) { + const style = styles[selector]; + const specificity = stylesSpecificity[selector]; + if (style) { + for(const name in style){ + let existingSpecificity = this.stylesSpecificity[name]; + if (typeof existingSpecificity === "undefined") { + existingSpecificity = "000"; + } + if (specificity && specificity >= existingSpecificity) { + styleProp = style[name]; + if (styleProp) { + this.styles[name] = styleProp; + } + this.stylesSpecificity[name] = specificity; + } + } + } + } + } + } + removeStyles(element, ignoreStyles) { + const toRestore = ignoreStyles.reduce((toRestore, name)=>{ + const styleProp = element.getStyle(name); + if (!styleProp.hasValue()) { + return toRestore; + } + const value = styleProp.getString(); + styleProp.setValue(""); + return [ + ...toRestore, + [ + name, + value + ] + ]; + }, []); + return toRestore; + } + restoreStyles(element, styles) { + styles.forEach((param)=>{ + let [name, value] = param; + element.getStyle(name, true).setValue(value); + }); + } + isFirstChild() { + var _this_parent; + return ((_this_parent = this.parent) === null || _this_parent === void 0 ? void 0 : _this_parent.children.indexOf(this)) === 0; + } + } + + class UnknownElement extends Element { + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + { + console.warn(`Element ${node.nodeName} not yet implemented.`); + } + } + } + + function wrapFontFamily(fontFamily) { + const trimmed = fontFamily.trim(); + return /^('|")/.test(trimmed) ? trimmed : `"${trimmed}"`; + } + function prepareFontFamily(fontFamily) { + return typeof process === "undefined" ? fontFamily : fontFamily.trim().split(",").map(wrapFontFamily).join(","); + } + /** + * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style + * @param fontStyle + * @returns CSS font style. + */ function prepareFontStyle(fontStyle) { + if (!fontStyle) { + return ""; + } + const targetFontStyle = fontStyle.trim().toLowerCase(); + switch(targetFontStyle){ + case "normal": + case "italic": + case "oblique": + case "inherit": + case "initial": + case "unset": + return targetFontStyle; + default: + if (/^oblique\s+(-|)\d+deg$/.test(targetFontStyle)) { + return targetFontStyle; + } + return ""; + } + } + /** + * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight + * @param fontWeight + * @returns CSS font weight. + */ function prepareFontWeight(fontWeight) { + if (!fontWeight) { + return ""; + } + const targetFontWeight = fontWeight.trim().toLowerCase(); + switch(targetFontWeight){ + case "normal": + case "bold": + case "lighter": + case "bolder": + case "inherit": + case "initial": + case "unset": + return targetFontWeight; + default: + if (/^[\d.]+$/.test(targetFontWeight)) { + return targetFontWeight; + } + return ""; + } + } + class Font { + static parse() { + let font = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", inherit = arguments.length > 1 ? arguments[1] : void 0; + let fontStyle = ""; + let fontVariant = ""; + let fontWeight = ""; + let fontSize = ""; + let fontFamily = ""; + const parts = compressSpaces(font).trim().split(" "); + const set = { + fontSize: false, + fontStyle: false, + fontWeight: false, + fontVariant: false + }; + parts.forEach((part)=>{ + switch(true){ + case !set.fontStyle && Font.styles.includes(part): + if (part !== "inherit") { + fontStyle = part; + } + set.fontStyle = true; + break; + case !set.fontVariant && Font.variants.includes(part): + if (part !== "inherit") { + fontVariant = part; + } + set.fontStyle = true; + set.fontVariant = true; + break; + case !set.fontWeight && Font.weights.includes(part): + if (part !== "inherit") { + fontWeight = part; + } + set.fontStyle = true; + set.fontVariant = true; + set.fontWeight = true; + break; + case !set.fontSize: + if (part !== "inherit") { + fontSize = part.split("/")[0] || ""; + } + set.fontStyle = true; + set.fontVariant = true; + set.fontWeight = true; + set.fontSize = true; + break; + default: + if (part !== "inherit") { + fontFamily += part; + } + } + }); + return new Font(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit); + } + static styles = "normal|italic|oblique|inherit"; + static variants = "normal|small-caps|inherit"; + static weights = "normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit"; + fontFamily; + fontSize; + fontStyle; + fontWeight; + fontVariant; + constructor(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit){ + const inheritFont = inherit ? typeof inherit === "string" ? Font.parse(inherit) : inherit : {}; + this.fontFamily = fontFamily || inheritFont.fontFamily; + this.fontSize = fontSize || inheritFont.fontSize; + this.fontStyle = fontStyle || inheritFont.fontStyle; + this.fontWeight = fontWeight || inheritFont.fontWeight; + this.fontVariant = fontVariant || inheritFont.fontVariant; + } + toString() { + return [ + prepareFontStyle(this.fontStyle), + this.fontVariant, + prepareFontWeight(this.fontWeight), + this.fontSize, + // Wrap fontFamily only on nodejs and only for canvas.ctx + prepareFontFamily(this.fontFamily) + ].join(" ").trim(); + } + } + + class BoundingBox { + x1; + y1; + x2; + y2; + constructor(x1 = Number.NaN, y1 = Number.NaN, x2 = Number.NaN, y2 = Number.NaN){ + this.x1 = x1; + this.y1 = y1; + this.x2 = x2; + this.y2 = y2; + this.addPoint(x1, y1); + this.addPoint(x2, y2); + } + get x() { + return this.x1; + } + get y() { + return this.y1; + } + get width() { + return this.x2 - this.x1; + } + get height() { + return this.y2 - this.y1; + } + addPoint(x, y) { + if (typeof x !== "undefined") { + if (isNaN(this.x1) || isNaN(this.x2)) { + this.x1 = x; + this.x2 = x; + } + if (x < this.x1) { + this.x1 = x; + } + if (x > this.x2) { + this.x2 = x; + } + } + if (typeof y !== "undefined") { + if (isNaN(this.y1) || isNaN(this.y2)) { + this.y1 = y; + this.y2 = y; + } + if (y < this.y1) { + this.y1 = y; + } + if (y > this.y2) { + this.y2 = y; + } + } + } + addX(x) { + this.addPoint(x, 0); + } + addY(y) { + this.addPoint(0, y); + } + addBoundingBox(boundingBox) { + if (!boundingBox) { + return; + } + const { x1, y1, x2, y2 } = boundingBox; + this.addPoint(x1, y1); + this.addPoint(x2, y2); + } + sumCubic(t, p0, p1, p2, p3) { + return Math.pow(1 - t, 3) * p0 + 3 * Math.pow(1 - t, 2) * t * p1 + 3 * (1 - t) * Math.pow(t, 2) * p2 + Math.pow(t, 3) * p3; + } + bezierCurveAdd(forX, p0, p1, p2, p3) { + const b = 6 * p0 - 12 * p1 + 6 * p2; + const a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3; + const c = 3 * p1 - 3 * p0; + if (a === 0) { + if (b === 0) { + return; + } + const t = -c / b; + if (0 < t && t < 1) { + if (forX) { + this.addX(this.sumCubic(t, p0, p1, p2, p3)); + } else { + this.addY(this.sumCubic(t, p0, p1, p2, p3)); + } + } + return; + } + const b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) { + return; + } + const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (forX) { + this.addX(this.sumCubic(t1, p0, p1, p2, p3)); + } else { + this.addY(this.sumCubic(t1, p0, p1, p2, p3)); + } + } + const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (forX) { + this.addX(this.sumCubic(t2, p0, p1, p2, p3)); + } else { + this.addY(this.sumCubic(t2, p0, p1, p2, p3)); + } + } + } + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + this.addPoint(p0x, p0y); + this.addPoint(p3x, p3y); + this.bezierCurveAdd(true, p0x, p1x, p2x, p3x); + this.bezierCurveAdd(false, p0y, p1y, p2y, p3y); + } + addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { + const cp1x = p0x + 2 / 3 * (p1x - p0x // CP1 = QP0 + 2/3 *(QP1-QP0) + ); + const cp1y = p0y + 2 / 3 * (p1y - p0y // CP1 = QP0 + 2/3 *(QP1-QP0) + ); + const cp2x = cp1x + 1 / 3 * (p2x - p0x // CP2 = CP1 + 1/3 *(QP2-QP0) + ); + const cp2y = cp1y + 1 / 3 * (p2y - p0y // CP2 = CP1 + 1/3 *(QP2-QP0) + ); + this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); + } + isPointInBox(x, y) { + const { x1, y1, x2, y2 } = this; + return x1 <= x && x <= x2 && y1 <= y && y <= y2; + } + } + + class RenderedElement extends Element { + modifiedEmSizeStack = false; + calculateOpacity() { + let opacity = 1.0; + // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this + let element = this; + while(element){ + const opacityStyle = element.getStyle("opacity", false, true) // no ancestors on style call + ; + if (opacityStyle.hasValue(true)) { + opacity *= opacityStyle.getNumber(); + } + element = element.parent; + } + return opacity; + } + setContext(ctx) { + let fromMeasure = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (!fromMeasure) { + // fill + const fillStyleProp = this.getStyle("fill"); + const fillOpacityStyleProp = this.getStyle("fill-opacity"); + const strokeStyleProp = this.getStyle("stroke"); + const strokeOpacityProp = this.getStyle("stroke-opacity"); + if (fillStyleProp.isUrlDefinition()) { + const fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp); + if (fillStyle) { + ctx.fillStyle = fillStyle; + } + } else if (fillStyleProp.hasValue()) { + if (fillStyleProp.getString() === "currentColor") { + fillStyleProp.setValue(this.getStyle("color").getColor()); + } + const fillStyle = fillStyleProp.getColor(); + if (fillStyle !== "inherit") { + ctx.fillStyle = fillStyle === "none" ? "rgba(0,0,0,0)" : fillStyle; + } + } + if (fillOpacityStyleProp.hasValue()) { + const fillStyle = new Property(this.document, "fill", ctx.fillStyle).addOpacity(fillOpacityStyleProp).getColor(); + ctx.fillStyle = fillStyle; + } + // stroke + if (strokeStyleProp.isUrlDefinition()) { + const strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp); + if (strokeStyle) { + ctx.strokeStyle = strokeStyle; + } + } else if (strokeStyleProp.hasValue()) { + if (strokeStyleProp.getString() === "currentColor") { + strokeStyleProp.setValue(this.getStyle("color").getColor()); + } + const strokeStyle = strokeStyleProp.getString(); + if (strokeStyle !== "inherit") { + ctx.strokeStyle = strokeStyle === "none" ? "rgba(0,0,0,0)" : strokeStyle; + } + } + if (strokeOpacityProp.hasValue()) { + const strokeStyle = new Property(this.document, "stroke", ctx.strokeStyle).addOpacity(strokeOpacityProp).getString(); + ctx.strokeStyle = strokeStyle; + } + const strokeWidthStyleProp = this.getStyle("stroke-width"); + if (strokeWidthStyleProp.hasValue()) { + const newLineWidth = strokeWidthStyleProp.getPixels(); + ctx.lineWidth = !newLineWidth ? PSEUDO_ZERO // browsers don't respect 0 (or node-canvas? :-) + : newLineWidth; + } + const strokeLinecapStyleProp = this.getStyle("stroke-linecap"); + const strokeLinejoinStyleProp = this.getStyle("stroke-linejoin"); + const strokeMiterlimitProp = this.getStyle("stroke-miterlimit"); + // NEED TEST + // const pointOrderStyleProp = this.getStyle('paint-order'); + const strokeDasharrayStyleProp = this.getStyle("stroke-dasharray"); + const strokeDashoffsetProp = this.getStyle("stroke-dashoffset"); + if (strokeLinecapStyleProp.hasValue()) { + ctx.lineCap = strokeLinecapStyleProp.getString(); + } + if (strokeLinejoinStyleProp.hasValue()) { + ctx.lineJoin = strokeLinejoinStyleProp.getString(); + } + if (strokeMiterlimitProp.hasValue()) { + ctx.miterLimit = strokeMiterlimitProp.getNumber(); + } + // NEED TEST + // if (pointOrderStyleProp.hasValue()) { + // // ? + // ctx.paintOrder = pointOrderStyleProp.getValue(); + // } + if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== "none") { + const gaps = toNumbers(strokeDasharrayStyleProp.getString()); + if (typeof ctx.setLineDash !== "undefined") { + ctx.setLineDash(gaps); + } else // @ts-expect-error Handle browser prefix. + if (typeof ctx.webkitLineDash !== "undefined") { + // @ts-expect-error Handle browser prefix. + ctx.webkitLineDash = gaps; + } else // @ts-expect-error Handle browser prefix. + if (typeof ctx.mozDash !== "undefined" && !(gaps.length === 1 && gaps[0] === 0)) { + // @ts-expect-error Handle browser prefix. + ctx.mozDash = gaps; + } + const offset = strokeDashoffsetProp.getPixels(); + if (typeof ctx.lineDashOffset !== "undefined") { + ctx.lineDashOffset = offset; + } else // @ts-expect-error Handle browser prefix. + if (typeof ctx.webkitLineDashOffset !== "undefined") { + // @ts-expect-error Handle browser prefix. + ctx.webkitLineDashOffset = offset; + } else // @ts-expect-error Handle browser prefix. + if (typeof ctx.mozDashOffset !== "undefined") { + // @ts-expect-error Handle browser prefix. + ctx.mozDashOffset = offset; + } + } + } + // font + this.modifiedEmSizeStack = false; + if (typeof ctx.font !== "undefined") { + const fontStyleProp = this.getStyle("font"); + const fontStyleStyleProp = this.getStyle("font-style"); + const fontVariantStyleProp = this.getStyle("font-variant"); + const fontWeightStyleProp = this.getStyle("font-weight"); + const fontSizeStyleProp = this.getStyle("font-size"); + const fontFamilyStyleProp = this.getStyle("font-family"); + const font = new Font(fontStyleStyleProp.getString(), fontVariantStyleProp.getString(), fontWeightStyleProp.getString(), fontSizeStyleProp.hasValue() ? `${fontSizeStyleProp.getPixels(true)}px` : "", fontFamilyStyleProp.getString(), Font.parse(fontStyleProp.getString(), ctx.font)); + fontStyleStyleProp.setValue(font.fontStyle); + fontVariantStyleProp.setValue(font.fontVariant); + fontWeightStyleProp.setValue(font.fontWeight); + fontSizeStyleProp.setValue(font.fontSize); + fontFamilyStyleProp.setValue(font.fontFamily); + ctx.font = font.toString(); + if (fontSizeStyleProp.isPixels()) { + this.document.emSize = fontSizeStyleProp.getPixels(); + this.modifiedEmSizeStack = true; + } + } + if (!fromMeasure) { + // effects + this.applyEffects(ctx); + // opacity + ctx.globalAlpha = this.calculateOpacity(); + } + } + clearContext(ctx) { + super.clearContext(ctx); + if (this.modifiedEmSizeStack) { + this.document.popEmSize(); + } + } + } + + class TextElement extends RenderedElement { + type = "text"; + x = 0; + y = 0; + leafTexts = []; + textChunkStart = 0; + minX = Number.POSITIVE_INFINITY; + maxX = Number.NEGATIVE_INFINITY; + measureCache = -1; + constructor(document, node, captureTextNodes){ + super(document, node, new.target === TextElement ? true : captureTextNodes); + } + setContext(ctx) { + let fromMeasure = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + super.setContext(ctx, fromMeasure); + const textBaseline = this.getStyle("dominant-baseline").getTextBaseline() || this.getStyle("alignment-baseline").getTextBaseline(); + if (textBaseline) { + ctx.textBaseline = textBaseline; + } + } + initializeCoordinates() { + this.x = 0; + this.y = 0; + this.leafTexts = []; + this.textChunkStart = 0; + this.minX = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + } + getBoundingBox(ctx) { + if (this.type !== "text") { + return this.getTElementBoundingBox(ctx); + } + // first, calculate child positions + this.initializeCoordinates(); + this.adjustChildCoordinatesRecursive(ctx); + let boundingBox = null; + // then calculate bounding box + this.children.forEach((_, i)=>{ + const childBoundingBox = this.getChildBoundingBox(ctx, this, this, i); + if (!boundingBox) { + boundingBox = childBoundingBox; + } else { + boundingBox.addBoundingBox(childBoundingBox); + } + }); + return boundingBox; + } + getFontSize() { + const { document, parent } = this; + const inheritFontSize = Font.parse(document.ctx.font).fontSize; + const fontSize = parent.getStyle("font-size").getNumber(inheritFontSize); + return fontSize; + } + getTElementBoundingBox(ctx) { + const fontSize = this.getFontSize(); + return new BoundingBox(this.x, this.y - fontSize, this.x + this.measureText(ctx), this.y); + } + getGlyph(font, text, i) { + const char = text[i]; + let glyph; + if (font.isArabic) { + var _font_arabicGlyphs_char; + const len = text.length; + const prevChar = text[i - 1]; + const nextChar = text[i + 1]; + let arabicForm = "isolated"; + if ((i === 0 || prevChar === " ") && i < len - 1 && nextChar !== " ") { + arabicForm = "terminal"; + } + if (i > 0 && prevChar !== " " && i < len - 1 && nextChar !== " ") { + arabicForm = "medial"; + } + if (i > 0 && prevChar !== " " && (i === len - 1 || nextChar === " ")) { + arabicForm = "initial"; + } + glyph = ((_font_arabicGlyphs_char = font.arabicGlyphs[char]) === null || _font_arabicGlyphs_char === void 0 ? void 0 : _font_arabicGlyphs_char[arabicForm]) || font.glyphs[char]; + } else { + glyph = font.glyphs[char]; + } + if (!glyph) { + glyph = font.missingGlyph; + } + return glyph; + } + getText() { + return ""; + } + getTextFromNode(node) { + const textNode = node || this.node; + const childNodes = Array.from(textNode.parentNode.childNodes); + const index = childNodes.indexOf(textNode); + const lastIndex = childNodes.length - 1; + let text = compressSpaces(// textNode.value + // || textNode.text + textNode.textContent || ""); + if (index === 0) { + text = trimLeft(text); + } + if (index === lastIndex) { + text = trimRight(text); + } + return text; + } + renderChildren(ctx) { + if (this.type !== "text") { + this.renderTElementChildren(ctx); + return; + } + // first, calculate child positions + this.initializeCoordinates(); + this.adjustChildCoordinatesRecursive(ctx); + // then render + this.children.forEach((_, i)=>{ + this.renderChild(ctx, this, this, i); + }); + const { mouse } = this.document.screen; + // Do not calc bounding box if mouse is not working. + if (mouse.isWorking()) { + mouse.checkBoundingBox(this, this.getBoundingBox(ctx)); + } + } + renderTElementChildren(ctx) { + const { document, parent } = this; + const renderText = this.getText(); + const customFont = parent.getStyle("font-family").getDefinition(); + if (customFont) { + const { unitsPerEm } = customFont.fontFace; + const ctxFont = Font.parse(document.ctx.font); + const fontSize = parent.getStyle("font-size").getNumber(ctxFont.fontSize); + const fontStyle = parent.getStyle("font-style").getString(ctxFont.fontStyle); + const scale = fontSize / unitsPerEm; + const text = customFont.isRTL ? renderText.split("").reverse().join("") : renderText; + const dx = toNumbers(parent.getAttribute("dx").getString()); + const len = text.length; + for(let i = 0; i < len; i++){ + const glyph = this.getGlyph(customFont, text, i); + ctx.translate(this.x, this.y); + ctx.scale(scale, -scale); + const lw = ctx.lineWidth; + ctx.lineWidth = ctx.lineWidth * unitsPerEm / fontSize; + if (fontStyle === "italic") { + ctx.transform(1, 0, .4, 1, 0, 0); + } + glyph.render(ctx); + if (fontStyle === "italic") { + ctx.transform(1, 0, -.4, 1, 0, 0); + } + ctx.lineWidth = lw; + ctx.scale(1 / scale, -1 / scale); + ctx.translate(-this.x, -this.y); + this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / unitsPerEm; + if (typeof dx[i] !== "undefined" && !isNaN(dx[i])) { + this.x += dx[i]; + } + } + return; + } + const { x, y } = this; + // NEED TEST + // if (ctx.paintOrder === 'stroke') { + // if (ctx.strokeStyle) { + // ctx.strokeText(renderText, x, y); + // } + // if (ctx.fillStyle) { + // ctx.fillText(renderText, x, y); + // } + // } else { + if (ctx.fillStyle) { + ctx.fillText(renderText, x, y); + } + if (ctx.strokeStyle) { + ctx.strokeText(renderText, x, y); + } + // } + } + applyAnchoring() { + if (this.textChunkStart >= this.leafTexts.length) { + return; + } + // This is basically the "Apply anchoring" part of https://www.w3.org/TR/SVG2/text.html#TextLayoutAlgorithm. + // The difference is that we apply the anchoring as soon as a chunk is finished. This saves some extra looping. + // Vertical text is not supported. + const firstElement = this.leafTexts[this.textChunkStart]; + const textAnchor = firstElement.getStyle("text-anchor").getString("start"); + const isRTL = false // we treat RTL like LTR + ; + let shift = 0; + if (textAnchor === "start" && !isRTL || textAnchor === "end" && isRTL) { + shift = firstElement.x - this.minX; + } else if (textAnchor === "end" && !isRTL || textAnchor === "start" && isRTL) { + shift = firstElement.x - this.maxX; + } else { + shift = firstElement.x - (this.minX + this.maxX) / 2; + } + for(let i = this.textChunkStart; i < this.leafTexts.length; i++){ + this.leafTexts[i].x += shift; + } + // start new chunk + this.minX = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.textChunkStart = this.leafTexts.length; + } + adjustChildCoordinatesRecursive(ctx) { + this.children.forEach((_, i)=>{ + this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i); + }); + this.applyAnchoring(); + } + adjustChildCoordinatesRecursiveCore(ctx, textParent, parent, i) { + const child = parent.children[i]; + if (child.children.length > 0) { + child.children.forEach((_, i)=>{ + textParent.adjustChildCoordinatesRecursiveCore(ctx, textParent, child, i); + }); + } else { + // only leafs are relevant + this.adjustChildCoordinates(ctx, textParent, parent, i); + } + } + adjustChildCoordinates(ctx, textParent, parent, i) { + const child = parent.children[i]; + if (typeof child.measureText !== "function") { + return child; + } + ctx.save(); + child.setContext(ctx, true); + const xAttr = child.getAttribute("x"); + const yAttr = child.getAttribute("y"); + const dxAttr = child.getAttribute("dx"); + const dyAttr = child.getAttribute("dy"); + const customFont = child.getStyle("font-family").getDefinition(); + const isRTL = Boolean(customFont === null || customFont === void 0 ? void 0 : customFont.isRTL); + if (i === 0) { + // First children inherit attributes from parent(s). Positional attributes + // are only inherited from a parent to it's first child. + if (!xAttr.hasValue()) { + xAttr.setValue(child.getInheritedAttribute("x")); + } + if (!yAttr.hasValue()) { + yAttr.setValue(child.getInheritedAttribute("y")); + } + if (!dxAttr.hasValue()) { + dxAttr.setValue(child.getInheritedAttribute("dx")); + } + if (!dyAttr.hasValue()) { + dyAttr.setValue(child.getInheritedAttribute("dy")); + } + } + const width = child.measureText(ctx); + if (isRTL) { + textParent.x -= width; + } + if (xAttr.hasValue()) { + // an "x" attribute marks the start of a new chunk + textParent.applyAnchoring(); + child.x = xAttr.getPixels("x"); + if (dxAttr.hasValue()) { + child.x += dxAttr.getPixels("x"); + } + } else { + if (dxAttr.hasValue()) { + textParent.x += dxAttr.getPixels("x"); + } + child.x = textParent.x; + } + textParent.x = child.x; + if (!isRTL) { + textParent.x += width; + } + if (yAttr.hasValue()) { + child.y = yAttr.getPixels("y"); + if (dyAttr.hasValue()) { + child.y += dyAttr.getPixels("y"); + } + } else { + if (dyAttr.hasValue()) { + textParent.y += dyAttr.getPixels("y"); + } + child.y = textParent.y; + } + textParent.y = child.y; + // update the current chunk and it's bounds + textParent.leafTexts.push(child); + textParent.minX = Math.min(textParent.minX, child.x, child.x + width); + textParent.maxX = Math.max(textParent.maxX, child.x, child.x + width); + child.clearContext(ctx); + ctx.restore(); + return child; + } + getChildBoundingBox(ctx, textParent, parent, i) { + const child = parent.children[i]; + // not a text node? + if (typeof child.getBoundingBox !== "function") { + return null; + } + const boundingBox = child.getBoundingBox(ctx); + if (boundingBox) { + child.children.forEach((_, i)=>{ + const childBoundingBox = textParent.getChildBoundingBox(ctx, textParent, child, i); + boundingBox.addBoundingBox(childBoundingBox); + }); + } + return boundingBox; + } + renderChild(ctx, textParent, parent, i) { + const child = parent.children[i]; + child.render(ctx); + child.children.forEach((_, i)=>{ + textParent.renderChild(ctx, textParent, child, i); + }); + } + measureText(ctx) { + const { measureCache } = this; + if (~measureCache) { + return measureCache; + } + const renderText = this.getText(); + const measure = this.measureTargetText(ctx, renderText); + this.measureCache = measure; + return measure; + } + measureTargetText(ctx, targetText) { + if (!targetText.length) { + return 0; + } + const { parent } = this; + const customFont = parent.getStyle("font-family").getDefinition(); + if (customFont) { + const fontSize = this.getFontSize(); + const text = customFont.isRTL ? targetText.split("").reverse().join("") : targetText; + const dx = toNumbers(parent.getAttribute("dx").getString()); + const len = text.length; + let measure = 0; + for(let i = 0; i < len; i++){ + const glyph = this.getGlyph(customFont, text, i); + measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; + if (typeof dx[i] !== "undefined" && !isNaN(dx[i])) { + measure += dx[i]; + } + } + return measure; + } + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (!ctx.measureText) { + return targetText.length * 10; + } + ctx.save(); + this.setContext(ctx, true); + const { width: measure } = ctx.measureText(targetText); + this.clearContext(ctx); + ctx.restore(); + return measure; + } + /** + * Inherits positional attributes from {@link TextElement} parent(s). Attributes + * are only inherited from a parent to its first child. + * @param name - The attribute name. + * @returns The attribute value or null. + */ getInheritedAttribute(name) { + // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this + let current = this; + while(current instanceof TextElement && current.isFirstChild() && current.parent){ + const parentAttr = current.parent.getAttribute(name); + if (parentAttr.hasValue(true)) { + return parentAttr.getString("0"); + } + current = current.parent; + } + return null; + } + } + + class TSpanElement extends TextElement { + type = "tspan"; + text; + constructor(document, node, captureTextNodes){ + super(document, node, new.target === TSpanElement ? true : captureTextNodes); + // if this node has children, then they own the text + this.text = this.children.length > 0 ? "" : this.getTextFromNode(); + } + getText() { + return this.text; + } + } + + class TextNode extends TSpanElement { + type = "textNode"; + } + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ var t = function(r, e) { + return (t = Object.setPrototypeOf || ({ + __proto__: [] + }) instanceof Array && function(t, r) { + t.__proto__ = r; + } || function(t, r) { + for(var e in r)Object.prototype.hasOwnProperty.call(r, e) && (t[e] = r[e]); + })(r, e); + }; + function r(r, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Class extends value " + String(e) + " is not a constructor or null"); + function i() { + this.constructor = r; + } + t(r, e), r.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype, new i); + } + function e(t) { + var r = ""; + Array.isArray(t) || (t = [ + t + ]); + for(var e = 0; e < t.length; e++){ + var i = t[e]; + if (i.type === _.CLOSE_PATH) r += "z"; + else if (i.type === _.HORIZ_LINE_TO) r += (i.relative ? "h" : "H") + i.x; + else if (i.type === _.VERT_LINE_TO) r += (i.relative ? "v" : "V") + i.y; + else if (i.type === _.MOVE_TO) r += (i.relative ? "m" : "M") + i.x + " " + i.y; + else if (i.type === _.LINE_TO) r += (i.relative ? "l" : "L") + i.x + " " + i.y; + else if (i.type === _.CURVE_TO) r += (i.relative ? "c" : "C") + i.x1 + " " + i.y1 + " " + i.x2 + " " + i.y2 + " " + i.x + " " + i.y; + else if (i.type === _.SMOOTH_CURVE_TO) r += (i.relative ? "s" : "S") + i.x2 + " " + i.y2 + " " + i.x + " " + i.y; + else if (i.type === _.QUAD_TO) r += (i.relative ? "q" : "Q") + i.x1 + " " + i.y1 + " " + i.x + " " + i.y; + else if (i.type === _.SMOOTH_QUAD_TO) r += (i.relative ? "t" : "T") + i.x + " " + i.y; + else { + if (i.type !== _.ARC) throw new Error('Unexpected command type "' + i.type + '" at index ' + e + "."); + r += (i.relative ? "a" : "A") + i.rX + " " + i.rY + " " + i.xRot + " " + +i.lArcFlag + " " + +i.sweepFlag + " " + i.x + " " + i.y; + } + } + return r; + } + function i(t, r) { + var e = t[0], i = t[1]; + return [ + e * Math.cos(r) - i * Math.sin(r), + e * Math.sin(r) + i * Math.cos(r) + ]; + } + function a() { + for(var t = [], r = 0; r < arguments.length; r++)t[r] = arguments[r]; + for(var e = 0; e < t.length; e++)if ("number" != typeof t[e]) throw new Error("assertNumbers arguments[" + e + "] is not a number. " + typeof t[e] + " == typeof " + t[e]); + return !0; + } + var n = Math.PI; + function o(t, r, e) { + t.lArcFlag = 0 === t.lArcFlag ? 0 : 1, t.sweepFlag = 0 === t.sweepFlag ? 0 : 1; + var a = t.rX, o = t.rY, s = t.x, u = t.y; + a = Math.abs(t.rX), o = Math.abs(t.rY); + var h = i([ + (r - s) / 2, + (e - u) / 2 + ], -t.xRot / 180 * n), c = h[0], y = h[1], p = Math.pow(c, 2) / Math.pow(a, 2) + Math.pow(y, 2) / Math.pow(o, 2); + 1 < p && (a *= Math.sqrt(p), o *= Math.sqrt(p)), t.rX = a, t.rY = o; + var m = Math.pow(a, 2) * Math.pow(y, 2) + Math.pow(o, 2) * Math.pow(c, 2), O = (t.lArcFlag !== t.sweepFlag ? 1 : -1) * Math.sqrt(Math.max(0, (Math.pow(a, 2) * Math.pow(o, 2) - m) / m)), l = a * y / o * O, T = -o * c / a * O, v = i([ + l, + T + ], t.xRot / 180 * n); + t.cX = v[0] + (r + s) / 2, t.cY = v[1] + (e + u) / 2, t.phi1 = Math.atan2((y - T) / o, (c - l) / a), t.phi2 = Math.atan2((-y - T) / o, (-c - l) / a), 0 === t.sweepFlag && t.phi2 > t.phi1 && (t.phi2 -= 2 * n), 1 === t.sweepFlag && t.phi2 < t.phi1 && (t.phi2 += 2 * n), t.phi1 *= 180 / n, t.phi2 *= 180 / n; + } + function s(t, r, e) { + a(t, r, e); + var i = t * t + r * r - e * e; + if (0 > i) return []; + if (0 === i) return [ + [ + t * e / (t * t + r * r), + r * e / (t * t + r * r) + ] + ]; + var n = Math.sqrt(i); + return [ + [ + (t * e + r * n) / (t * t + r * r), + (r * e - t * n) / (t * t + r * r) + ], + [ + (t * e - r * n) / (t * t + r * r), + (r * e + t * n) / (t * t + r * r) + ] + ]; + } + var u, h = Math.PI / 180; + function c$1(t, r, e) { + return (1 - e) * t + e * r; + } + function y(t, r, e, i) { + return t + Math.cos(i / 180 * n) * r + Math.sin(i / 180 * n) * e; + } + function p(t, r, e, i) { + var a = 1e-6, n = r - t, o = e - r, s = 3 * n + 3 * (i - e) - 6 * o, u = 6 * (o - n), h = 3 * n; + return Math.abs(s) < a ? [ + -h / u + ] : function(t, r, e) { + void 0 === e && (e = 1e-6); + var i = t * t / 4 - r; + if (i < -e) return []; + if (i <= e) return [ + -t / 2 + ]; + var a = Math.sqrt(i); + return [ + -t / 2 - a, + -t / 2 + a + ]; + }(u / s, h / s, a); + } + function m$1(t, r, e, i, a) { + var n = 1 - a; + return t * (n * n * n) + r * (3 * n * n * a) + e * (3 * n * a * a) + i * (a * a * a); + } + !function(t) { + function r() { + return u(function(t, r, e) { + return t.relative && (void 0 !== t.x1 && (t.x1 += r), void 0 !== t.y1 && (t.y1 += e), void 0 !== t.x2 && (t.x2 += r), void 0 !== t.y2 && (t.y2 += e), void 0 !== t.x && (t.x += r), void 0 !== t.y && (t.y += e), t.relative = !1), t; + }); + } + function e() { + var t = NaN, r = NaN, e = NaN, i = NaN; + return u(function(a, n, o) { + return a.type & _.SMOOTH_CURVE_TO && (a.type = _.CURVE_TO, t = isNaN(t) ? n : t, r = isNaN(r) ? o : r, a.x1 = a.relative ? n - t : 2 * n - t, a.y1 = a.relative ? o - r : 2 * o - r), a.type & _.CURVE_TO ? (t = a.relative ? n + a.x2 : a.x2, r = a.relative ? o + a.y2 : a.y2) : (t = NaN, r = NaN), a.type & _.SMOOTH_QUAD_TO && (a.type = _.QUAD_TO, e = isNaN(e) ? n : e, i = isNaN(i) ? o : i, a.x1 = a.relative ? n - e : 2 * n - e, a.y1 = a.relative ? o - i : 2 * o - i), a.type & _.QUAD_TO ? (e = a.relative ? n + a.x1 : a.x1, i = a.relative ? o + a.y1 : a.y1) : (e = NaN, i = NaN), a; + }); + } + function n() { + var t = NaN, r = NaN; + return u(function(e, i, a) { + if (e.type & _.SMOOTH_QUAD_TO && (e.type = _.QUAD_TO, t = isNaN(t) ? i : t, r = isNaN(r) ? a : r, e.x1 = e.relative ? i - t : 2 * i - t, e.y1 = e.relative ? a - r : 2 * a - r), e.type & _.QUAD_TO) { + t = e.relative ? i + e.x1 : e.x1, r = e.relative ? a + e.y1 : e.y1; + var n = e.x1, o = e.y1; + e.type = _.CURVE_TO, e.x1 = ((e.relative ? 0 : i) + 2 * n) / 3, e.y1 = ((e.relative ? 0 : a) + 2 * o) / 3, e.x2 = (e.x + 2 * n) / 3, e.y2 = (e.y + 2 * o) / 3; + } else t = NaN, r = NaN; + return e; + }); + } + function u(t) { + var r = 0, e = 0, i = NaN, a = NaN; + return function(n) { + if (isNaN(i) && !(n.type & _.MOVE_TO)) throw new Error("path must start with moveto"); + var o = t(n, r, e, i, a); + return n.type & _.CLOSE_PATH && (r = i, e = a), void 0 !== n.x && (r = n.relative ? r + n.x : n.x), void 0 !== n.y && (e = n.relative ? e + n.y : n.y), n.type & _.MOVE_TO && (i = r, a = e), o; + }; + } + function O(t, r, e, i, n, o) { + return a(t, r, e, i, n, o), u(function(a, s, u, h) { + var c = a.x1, y = a.x2, p = a.relative && !isNaN(h), m = void 0 !== a.x ? a.x : p ? 0 : s, O = void 0 !== a.y ? a.y : p ? 0 : u; + function l(t) { + return t * t; + } + a.type & _.HORIZ_LINE_TO && 0 !== r && (a.type = _.LINE_TO, a.y = a.relative ? 0 : u), a.type & _.VERT_LINE_TO && 0 !== e && (a.type = _.LINE_TO, a.x = a.relative ? 0 : s), void 0 !== a.x && (a.x = a.x * t + O * e + (p ? 0 : n)), void 0 !== a.y && (a.y = m * r + a.y * i + (p ? 0 : o)), void 0 !== a.x1 && (a.x1 = a.x1 * t + a.y1 * e + (p ? 0 : n)), void 0 !== a.y1 && (a.y1 = c * r + a.y1 * i + (p ? 0 : o)), void 0 !== a.x2 && (a.x2 = a.x2 * t + a.y2 * e + (p ? 0 : n)), void 0 !== a.y2 && (a.y2 = y * r + a.y2 * i + (p ? 0 : o)); + var T = t * i - r * e; + if (void 0 !== a.xRot && (1 !== t || 0 !== r || 0 !== e || 1 !== i)) if (0 === T) delete a.rX, delete a.rY, delete a.xRot, delete a.lArcFlag, delete a.sweepFlag, a.type = _.LINE_TO; + else { + var v = a.xRot * Math.PI / 180, f = Math.sin(v), N = Math.cos(v), x = 1 / l(a.rX), d = 1 / l(a.rY), E = l(N) * x + l(f) * d, A = 2 * f * N * (x - d), C = l(f) * x + l(N) * d, M = E * i * i - A * r * i + C * r * r, R = A * (t * i + r * e) - 2 * (E * e * i + C * t * r), g = E * e * e - A * t * e + C * t * t, I = (Math.atan2(R, M - g) + Math.PI) % Math.PI / 2, S = Math.sin(I), L = Math.cos(I); + a.rX = Math.abs(T) / Math.sqrt(M * l(L) + R * S * L + g * l(S)), a.rY = Math.abs(T) / Math.sqrt(M * l(S) - R * S * L + g * l(L)), a.xRot = 180 * I / Math.PI; + } + return void 0 !== a.sweepFlag && 0 > T && (a.sweepFlag = +!a.sweepFlag), a; + }); + } + function l() { + return function(t) { + var r = {}; + for(var e in t)r[e] = t[e]; + return r; + }; + } + t.ROUND = function(t) { + function r(r) { + return Math.round(r * t) / t; + } + return void 0 === t && (t = 1e13), a(t), function(t) { + return void 0 !== t.x1 && (t.x1 = r(t.x1)), void 0 !== t.y1 && (t.y1 = r(t.y1)), void 0 !== t.x2 && (t.x2 = r(t.x2)), void 0 !== t.y2 && (t.y2 = r(t.y2)), void 0 !== t.x && (t.x = r(t.x)), void 0 !== t.y && (t.y = r(t.y)), void 0 !== t.rX && (t.rX = r(t.rX)), void 0 !== t.rY && (t.rY = r(t.rY)), t; + }; + }, t.TO_ABS = r, t.TO_REL = function() { + return u(function(t, r, e) { + return t.relative || (void 0 !== t.x1 && (t.x1 -= r), void 0 !== t.y1 && (t.y1 -= e), void 0 !== t.x2 && (t.x2 -= r), void 0 !== t.y2 && (t.y2 -= e), void 0 !== t.x && (t.x -= r), void 0 !== t.y && (t.y -= e), t.relative = !0), t; + }); + }, t.NORMALIZE_HVZ = function(t, r, e) { + return void 0 === t && (t = !0), void 0 === r && (r = !0), void 0 === e && (e = !0), u(function(i, a, n, o, s) { + if (isNaN(o) && !(i.type & _.MOVE_TO)) throw new Error("path must start with moveto"); + return r && i.type & _.HORIZ_LINE_TO && (i.type = _.LINE_TO, i.y = i.relative ? 0 : n), e && i.type & _.VERT_LINE_TO && (i.type = _.LINE_TO, i.x = i.relative ? 0 : a), t && i.type & _.CLOSE_PATH && (i.type = _.LINE_TO, i.x = i.relative ? o - a : o, i.y = i.relative ? s - n : s), i.type & _.ARC && (0 === i.rX || 0 === i.rY) && (i.type = _.LINE_TO, delete i.rX, delete i.rY, delete i.xRot, delete i.lArcFlag, delete i.sweepFlag), i; + }); + }, t.NORMALIZE_ST = e, t.QT_TO_C = n, t.INFO = u, t.SANITIZE = function(t) { + void 0 === t && (t = 0), a(t); + var r = NaN, e = NaN, i = NaN, n = NaN; + return u(function(a, o, s, u, h) { + var c = Math.abs, y = !1, p = 0, m = 0; + if (a.type & _.SMOOTH_CURVE_TO && (p = isNaN(r) ? 0 : o - r, m = isNaN(e) ? 0 : s - e), a.type & (_.CURVE_TO | _.SMOOTH_CURVE_TO) ? (r = a.relative ? o + a.x2 : a.x2, e = a.relative ? s + a.y2 : a.y2) : (r = NaN, e = NaN), a.type & _.SMOOTH_QUAD_TO ? (i = isNaN(i) ? o : 2 * o - i, n = isNaN(n) ? s : 2 * s - n) : a.type & _.QUAD_TO ? (i = a.relative ? o + a.x1 : a.x1, n = a.relative ? s + a.y1 : a.y2) : (i = NaN, n = NaN), a.type & _.LINE_COMMANDS || a.type & _.ARC && (0 === a.rX || 0 === a.rY || !a.lArcFlag) || a.type & _.CURVE_TO || a.type & _.SMOOTH_CURVE_TO || a.type & _.QUAD_TO || a.type & _.SMOOTH_QUAD_TO) { + var O = void 0 === a.x ? 0 : a.relative ? a.x : a.x - o, l = void 0 === a.y ? 0 : a.relative ? a.y : a.y - s; + p = isNaN(i) ? void 0 === a.x1 ? p : a.relative ? a.x : a.x1 - o : i - o, m = isNaN(n) ? void 0 === a.y1 ? m : a.relative ? a.y : a.y1 - s : n - s; + var T = void 0 === a.x2 ? 0 : a.relative ? a.x : a.x2 - o, v = void 0 === a.y2 ? 0 : a.relative ? a.y : a.y2 - s; + c(O) <= t && c(l) <= t && c(p) <= t && c(m) <= t && c(T) <= t && c(v) <= t && (y = !0); + } + return a.type & _.CLOSE_PATH && c(o - u) <= t && c(s - h) <= t && (y = !0), y ? [] : a; + }); + }, t.MATRIX = O, t.ROTATE = function(t, r, e) { + void 0 === r && (r = 0), void 0 === e && (e = 0), a(t, r, e); + var i = Math.sin(t), n = Math.cos(t); + return O(n, i, -i, n, r - r * n + e * i, e - r * i - e * n); + }, t.TRANSLATE = function(t, r) { + return void 0 === r && (r = 0), a(t, r), O(1, 0, 0, 1, t, r); + }, t.SCALE = function(t, r) { + return void 0 === r && (r = t), a(t, r), O(t, 0, 0, r, 0, 0); + }, t.SKEW_X = function(t) { + return a(t), O(1, 0, Math.atan(t), 1, 0, 0); + }, t.SKEW_Y = function(t) { + return a(t), O(1, Math.atan(t), 0, 1, 0, 0); + }, t.X_AXIS_SYMMETRY = function(t) { + return void 0 === t && (t = 0), a(t), O(-1, 0, 0, 1, t, 0); + }, t.Y_AXIS_SYMMETRY = function(t) { + return void 0 === t && (t = 0), a(t), O(1, 0, 0, -1, 0, t); + }, t.A_TO_C = function() { + return u(function(t, r, e) { + return _.ARC === t.type ? function(t, r, e) { + var a, n, s, u; + t.cX || o(t, r, e); + for(var y = Math.min(t.phi1, t.phi2), p = Math.max(t.phi1, t.phi2) - y, m = Math.ceil(p / 90), O = new Array(m), l = r, T = e, v = 0; v < m; v++){ + var f = c$1(t.phi1, t.phi2, v / m), N = c$1(t.phi1, t.phi2, (v + 1) / m), x = N - f, d = 4 / 3 * Math.tan(x * h / 4), E = [ + Math.cos(f * h) - d * Math.sin(f * h), + Math.sin(f * h) + d * Math.cos(f * h) + ], A = E[0], C = E[1], M = [ + Math.cos(N * h), + Math.sin(N * h) + ], R = M[0], g = M[1], I = [ + R + d * Math.sin(N * h), + g - d * Math.cos(N * h) + ], S = I[0], L = I[1]; + O[v] = { + relative: t.relative, + type: _.CURVE_TO + }; + var H = function(r, e) { + var a = i([ + r * t.rX, + e * t.rY + ], t.xRot), n = a[0], o = a[1]; + return [ + t.cX + n, + t.cY + o + ]; + }; + a = H(A, C), O[v].x1 = a[0], O[v].y1 = a[1], n = H(S, L), O[v].x2 = n[0], O[v].y2 = n[1], s = H(R, g), O[v].x = s[0], O[v].y = s[1], t.relative && (O[v].x1 -= l, O[v].y1 -= T, O[v].x2 -= l, O[v].y2 -= T, O[v].x -= l, O[v].y -= T), l = (u = [ + O[v].x, + O[v].y + ])[0], T = u[1]; + } + return O; + }(t, t.relative ? 0 : r, t.relative ? 0 : e) : t; + }); + }, t.ANNOTATE_ARCS = function() { + return u(function(t, r, e) { + return t.relative && (r = 0, e = 0), _.ARC === t.type && o(t, r, e), t; + }); + }, t.CLONE = l, t.CALCULATE_BOUNDS = function() { + var t = function(t) { + var r = {}; + for(var e in t)r[e] = t[e]; + return r; + }, i = r(), a = n(), h = e(), c = u(function(r, e, n) { + var u = h(a(i(t(r)))); + function O(t) { + t > c.maxX && (c.maxX = t), t < c.minX && (c.minX = t); + } + function l(t) { + t > c.maxY && (c.maxY = t), t < c.minY && (c.minY = t); + } + if (u.type & _.DRAWING_COMMANDS && (O(e), l(n)), u.type & _.HORIZ_LINE_TO && O(u.x), u.type & _.VERT_LINE_TO && l(u.y), u.type & _.LINE_TO && (O(u.x), l(u.y)), u.type & _.CURVE_TO) { + O(u.x), l(u.y); + for(var T = 0, v = p(e, u.x1, u.x2, u.x); T < v.length; T++){ + 0 < (w = v[T]) && 1 > w && O(m$1(e, u.x1, u.x2, u.x, w)); + } + for(var f = 0, N = p(n, u.y1, u.y2, u.y); f < N.length; f++){ + 0 < (w = N[f]) && 1 > w && l(m$1(n, u.y1, u.y2, u.y, w)); + } + } + if (u.type & _.ARC) { + O(u.x), l(u.y), o(u, e, n); + for(var x = u.xRot / 180 * Math.PI, d = Math.cos(x) * u.rX, E = Math.sin(x) * u.rX, A = -Math.sin(x) * u.rY, C = Math.cos(x) * u.rY, M = u.phi1 < u.phi2 ? [ + u.phi1, + u.phi2 + ] : -180 > u.phi2 ? [ + u.phi2 + 360, + u.phi1 + 360 + ] : [ + u.phi2, + u.phi1 + ], R = M[0], g = M[1], I = function(t) { + var r = t[0], e = t[1], i = 180 * Math.atan2(e, r) / Math.PI; + return i < R ? i + 360 : i; + }, S = 0, L = s(A, -d, 0).map(I); S < L.length; S++){ + (w = L[S]) > R && w < g && O(y(u.cX, d, A, w)); + } + for(var H = 0, U = s(C, -E, 0).map(I); H < U.length; H++){ + var w; + (w = U[H]) > R && w < g && l(y(u.cY, E, C, w)); + } + } + return r; + }); + return c.minX = 1 / 0, c.maxX = -1 / 0, c.minY = 1 / 0, c.maxY = -1 / 0, c; + }; + }(u || (u = {})); + var O, l = function() { + function t() {} + return t.prototype.round = function(t) { + return this.transform(u.ROUND(t)); + }, t.prototype.toAbs = function() { + return this.transform(u.TO_ABS()); + }, t.prototype.toRel = function() { + return this.transform(u.TO_REL()); + }, t.prototype.normalizeHVZ = function(t, r, e) { + return this.transform(u.NORMALIZE_HVZ(t, r, e)); + }, t.prototype.normalizeST = function() { + return this.transform(u.NORMALIZE_ST()); + }, t.prototype.qtToC = function() { + return this.transform(u.QT_TO_C()); + }, t.prototype.aToC = function() { + return this.transform(u.A_TO_C()); + }, t.prototype.sanitize = function(t) { + return this.transform(u.SANITIZE(t)); + }, t.prototype.translate = function(t, r) { + return this.transform(u.TRANSLATE(t, r)); + }, t.prototype.scale = function(t, r) { + return this.transform(u.SCALE(t, r)); + }, t.prototype.rotate = function(t, r, e) { + return this.transform(u.ROTATE(t, r, e)); + }, t.prototype.matrix = function(t, r, e, i, a, n) { + return this.transform(u.MATRIX(t, r, e, i, a, n)); + }, t.prototype.skewX = function(t) { + return this.transform(u.SKEW_X(t)); + }, t.prototype.skewY = function(t) { + return this.transform(u.SKEW_Y(t)); + }, t.prototype.xSymmetry = function(t) { + return this.transform(u.X_AXIS_SYMMETRY(t)); + }, t.prototype.ySymmetry = function(t) { + return this.transform(u.Y_AXIS_SYMMETRY(t)); + }, t.prototype.annotateArcs = function() { + return this.transform(u.ANNOTATE_ARCS()); + }, t; + }(), T = function(t) { + return " " === t || " " === t || "\r" === t || "\n" === t; + }, v = function(t) { + return "0".charCodeAt(0) <= t.charCodeAt(0) && t.charCodeAt(0) <= "9".charCodeAt(0); + }, f = function(t) { + function e() { + var r = t.call(this) || this; + return r.curNumber = "", r.curCommandType = -1, r.curCommandRelative = !1, r.canParseCommandOrComma = !0, r.curNumberHasExp = !1, r.curNumberHasExpDigits = !1, r.curNumberHasDecimal = !1, r.curArgs = [], r; + } + return r(e, t), e.prototype.finish = function(t) { + if (void 0 === t && (t = []), this.parse(" ", t), 0 !== this.curArgs.length || !this.canParseCommandOrComma) throw new SyntaxError("Unterminated command at the path end."); + return t; + }, e.prototype.parse = function(t, r) { + var e = this; + void 0 === r && (r = []); + for(var i = function(t) { + r.push(t), e.curArgs.length = 0, e.canParseCommandOrComma = !0; + }, a = 0; a < t.length; a++){ + var n = t[a], o = !(this.curCommandType !== _.ARC || 3 !== this.curArgs.length && 4 !== this.curArgs.length || 1 !== this.curNumber.length || "0" !== this.curNumber && "1" !== this.curNumber), s = v(n) && ("0" === this.curNumber && "0" === n || o); + if (!v(n) || s) if ("e" !== n && "E" !== n) if ("-" !== n && "+" !== n || !this.curNumberHasExp || this.curNumberHasExpDigits) if ("." !== n || this.curNumberHasExp || this.curNumberHasDecimal || o) { + if (this.curNumber && -1 !== this.curCommandType) { + var u = Number(this.curNumber); + if (isNaN(u)) throw new SyntaxError("Invalid number ending at " + a); + if (this.curCommandType === _.ARC) { + if (0 === this.curArgs.length || 1 === this.curArgs.length) { + if (0 > u) throw new SyntaxError('Expected positive number, got "' + u + '" at index "' + a + '"'); + } else if ((3 === this.curArgs.length || 4 === this.curArgs.length) && "0" !== this.curNumber && "1" !== this.curNumber) throw new SyntaxError('Expected a flag, got "' + this.curNumber + '" at index "' + a + '"'); + } + this.curArgs.push(u), this.curArgs.length === N[this.curCommandType] && (_.HORIZ_LINE_TO === this.curCommandType ? i({ + type: _.HORIZ_LINE_TO, + relative: this.curCommandRelative, + x: u + }) : _.VERT_LINE_TO === this.curCommandType ? i({ + type: _.VERT_LINE_TO, + relative: this.curCommandRelative, + y: u + }) : this.curCommandType === _.MOVE_TO || this.curCommandType === _.LINE_TO || this.curCommandType === _.SMOOTH_QUAD_TO ? (i({ + type: this.curCommandType, + relative: this.curCommandRelative, + x: this.curArgs[0], + y: this.curArgs[1] + }), _.MOVE_TO === this.curCommandType && (this.curCommandType = _.LINE_TO)) : this.curCommandType === _.CURVE_TO ? i({ + type: _.CURVE_TO, + relative: this.curCommandRelative, + x1: this.curArgs[0], + y1: this.curArgs[1], + x2: this.curArgs[2], + y2: this.curArgs[3], + x: this.curArgs[4], + y: this.curArgs[5] + }) : this.curCommandType === _.SMOOTH_CURVE_TO ? i({ + type: _.SMOOTH_CURVE_TO, + relative: this.curCommandRelative, + x2: this.curArgs[0], + y2: this.curArgs[1], + x: this.curArgs[2], + y: this.curArgs[3] + }) : this.curCommandType === _.QUAD_TO ? i({ + type: _.QUAD_TO, + relative: this.curCommandRelative, + x1: this.curArgs[0], + y1: this.curArgs[1], + x: this.curArgs[2], + y: this.curArgs[3] + }) : this.curCommandType === _.ARC && i({ + type: _.ARC, + relative: this.curCommandRelative, + rX: this.curArgs[0], + rY: this.curArgs[1], + xRot: this.curArgs[2], + lArcFlag: this.curArgs[3], + sweepFlag: this.curArgs[4], + x: this.curArgs[5], + y: this.curArgs[6] + })), this.curNumber = "", this.curNumberHasExpDigits = !1, this.curNumberHasExp = !1, this.curNumberHasDecimal = !1, this.canParseCommandOrComma = !0; + } + if (!T(n)) if ("," === n && this.canParseCommandOrComma) this.canParseCommandOrComma = !1; + else if ("+" !== n && "-" !== n && "." !== n) if (s) this.curNumber = n, this.curNumberHasDecimal = !1; + else { + if (0 !== this.curArgs.length) throw new SyntaxError("Unterminated command at index " + a + "."); + if (!this.canParseCommandOrComma) throw new SyntaxError('Unexpected character "' + n + '" at index ' + a + ". Command cannot follow comma"); + if (this.canParseCommandOrComma = !1, "z" !== n && "Z" !== n) if ("h" === n || "H" === n) this.curCommandType = _.HORIZ_LINE_TO, this.curCommandRelative = "h" === n; + else if ("v" === n || "V" === n) this.curCommandType = _.VERT_LINE_TO, this.curCommandRelative = "v" === n; + else if ("m" === n || "M" === n) this.curCommandType = _.MOVE_TO, this.curCommandRelative = "m" === n; + else if ("l" === n || "L" === n) this.curCommandType = _.LINE_TO, this.curCommandRelative = "l" === n; + else if ("c" === n || "C" === n) this.curCommandType = _.CURVE_TO, this.curCommandRelative = "c" === n; + else if ("s" === n || "S" === n) this.curCommandType = _.SMOOTH_CURVE_TO, this.curCommandRelative = "s" === n; + else if ("q" === n || "Q" === n) this.curCommandType = _.QUAD_TO, this.curCommandRelative = "q" === n; + else if ("t" === n || "T" === n) this.curCommandType = _.SMOOTH_QUAD_TO, this.curCommandRelative = "t" === n; + else { + if ("a" !== n && "A" !== n) throw new SyntaxError('Unexpected character "' + n + '" at index ' + a + "."); + this.curCommandType = _.ARC, this.curCommandRelative = "a" === n; + } + else r.push({ + type: _.CLOSE_PATH + }), this.canParseCommandOrComma = !0, this.curCommandType = -1; + } + else this.curNumber = n, this.curNumberHasDecimal = "." === n; + } else this.curNumber += n, this.curNumberHasDecimal = !0; + else this.curNumber += n; + else this.curNumber += n, this.curNumberHasExp = !0; + else this.curNumber += n, this.curNumberHasExpDigits = this.curNumberHasExp; + } + return r; + }, e.prototype.transform = function(t) { + return Object.create(this, { + parse: { + value: function(r, e) { + void 0 === e && (e = []); + for(var i = 0, a = Object.getPrototypeOf(this).parse.call(this, r); i < a.length; i++){ + var n = a[i], o = t(n); + Array.isArray(o) ? e.push.apply(e, o) : e.push(o); + } + return e; + } + } + }); + }, e; + }(l), _ = function(t) { + function i(r) { + var e = t.call(this) || this; + return e.commands = "string" == typeof r ? i.parse(r) : r, e; + } + return r(i, t), i.prototype.encode = function() { + return i.encode(this.commands); + }, i.prototype.getBounds = function() { + var t = u.CALCULATE_BOUNDS(); + return this.transform(t), t; + }, i.prototype.transform = function(t) { + for(var r = [], e = 0, i = this.commands; e < i.length; e++){ + var a = t(i[e]); + Array.isArray(a) ? r.push.apply(r, a) : r.push(a); + } + return this.commands = r, this; + }, i.encode = function(t) { + return e(t); + }, i.parse = function(t) { + var r = new f, e = []; + return r.parse(t, e), r.finish(e), e; + }, i.CLOSE_PATH = 1, i.MOVE_TO = 2, i.HORIZ_LINE_TO = 4, i.VERT_LINE_TO = 8, i.LINE_TO = 16, i.CURVE_TO = 32, i.SMOOTH_CURVE_TO = 64, i.QUAD_TO = 128, i.SMOOTH_QUAD_TO = 256, i.ARC = 512, i.LINE_COMMANDS = i.LINE_TO | i.HORIZ_LINE_TO | i.VERT_LINE_TO, i.DRAWING_COMMANDS = i.HORIZ_LINE_TO | i.VERT_LINE_TO | i.LINE_TO | i.CURVE_TO | i.SMOOTH_CURVE_TO | i.QUAD_TO | i.SMOOTH_QUAD_TO | i.ARC, i; + }(l), N = ((O = {})[_.MOVE_TO] = 2, O[_.LINE_TO] = 2, O[_.HORIZ_LINE_TO] = 1, O[_.VERT_LINE_TO] = 1, O[_.CLOSE_PATH] = 0, O[_.QUAD_TO] = 4, O[_.SMOOTH_QUAD_TO] = 2, O[_.CURVE_TO] = 6, O[_.SMOOTH_CURVE_TO] = 4, O[_.ARC] = 7, O); + + class PathParser extends _ { + control = new Point(0, 0); + start = new Point(0, 0); + current = new Point(0, 0); + command = null; + commands = this.commands; + i = -1; + previousCommand = null; + points = []; + angles = []; + constructor(path){ + super(path// Fix spaces after signs. + .replace(/([+\-.])\s+/gm, "$1")// Remove invalid part. + .replace(/[^MmZzLlHhVvCcSsQqTtAae\d\s.,+-].*/g, "")); + } + reset() { + this.i = -1; + this.command = null; + this.previousCommand = null; + this.start = new Point(0, 0); + this.control = new Point(0, 0); + this.current = new Point(0, 0); + this.points = []; + this.angles = []; + } + isEnd() { + const { i, commands } = this; + return i >= commands.length - 1; + } + next() { + const command = this.commands[++this.i]; + this.previousCommand = this.command; + this.command = command; + return command; + } + getPoint() { + let xProp = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "x", yProp = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "y"; + const point = new Point(this.command[xProp], this.command[yProp]); + return this.makeAbsolute(point); + } + getAsControlPoint(xProp, yProp) { + const point = this.getPoint(xProp, yProp); + this.control = point; + return point; + } + getAsCurrentPoint(xProp, yProp) { + const point = this.getPoint(xProp, yProp); + this.current = point; + return point; + } + getReflectedControlPoint() { + const previousCommand = this.previousCommand.type; + if (previousCommand !== _.CURVE_TO && previousCommand !== _.SMOOTH_CURVE_TO && previousCommand !== _.QUAD_TO && previousCommand !== _.SMOOTH_QUAD_TO) { + return this.current; + } + // reflect point + const { current: { x: cx, y: cy }, control: { x: ox, y: oy } } = this; + const point = new Point(2 * cx - ox, 2 * cy - oy); + return point; + } + makeAbsolute(point) { + if (this.command.relative) { + const { x, y } = this.current; + point.x += x; + point.y += y; + } + return point; + } + addMarker(point, from, priorTo) { + const { points, angles } = this; + // if the last angle isn't filled in because we didn't have this point yet ... + if (priorTo && angles.length > 0 && !angles[angles.length - 1]) { + angles[angles.length - 1] = points[points.length - 1].angleTo(priorTo); + } + this.addMarkerAngle(point, from ? from.angleTo(point) : null); + } + addMarkerAngle(point, angle) { + this.points.push(point); + this.angles.push(angle); + } + getMarkerPoints() { + return this.points; + } + getMarkerAngles() { + const { angles } = this; + const len = angles.length; + for(let i = 0; i < len; i++){ + if (!angles[i]) { + for(let j = i + 1; j < len; j++){ + if (angles[j]) { + angles[i] = angles[j]; + break; + } + } + } + } + return angles; + } + } + + class PathElement extends RenderedElement { + type = "path"; + pathParser; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.pathParser = new PathParser(this.getAttribute("d").getString()); + } + path(ctx) { + const { pathParser } = this; + const boundingBox = new BoundingBox(); + pathParser.reset(); + if (ctx) { + ctx.beginPath(); + } + while(!pathParser.isEnd()){ + switch(pathParser.next().type){ + case PathParser.MOVE_TO: + this.pathM(ctx, boundingBox); + break; + case PathParser.LINE_TO: + this.pathL(ctx, boundingBox); + break; + case PathParser.HORIZ_LINE_TO: + this.pathH(ctx, boundingBox); + break; + case PathParser.VERT_LINE_TO: + this.pathV(ctx, boundingBox); + break; + case PathParser.CURVE_TO: + this.pathC(ctx, boundingBox); + break; + case PathParser.SMOOTH_CURVE_TO: + this.pathS(ctx, boundingBox); + break; + case PathParser.QUAD_TO: + this.pathQ(ctx, boundingBox); + break; + case PathParser.SMOOTH_QUAD_TO: + this.pathT(ctx, boundingBox); + break; + case PathParser.ARC: + this.pathA(ctx, boundingBox); + break; + case PathParser.CLOSE_PATH: + this.pathZ(ctx, boundingBox); + break; + } + } + return boundingBox; + } + getBoundingBox(_ctx) { + return this.path(); + } + getMarkers() { + const { pathParser } = this; + const points = pathParser.getMarkerPoints(); + const angles = pathParser.getMarkerAngles(); + const markers = points.map((point, i)=>[ + point, + angles[i] + ]); + return markers; + } + renderChildren(ctx) { + this.path(ctx); + this.document.screen.mouse.checkPath(this, ctx); + const fillRuleStyleProp = this.getStyle("fill-rule"); + if (ctx.fillStyle !== "") { + if (fillRuleStyleProp.getString("inherit") !== "inherit") { + ctx.fill(fillRuleStyleProp.getString()); + } else { + ctx.fill(); + } + } + if (ctx.strokeStyle !== "") { + if (this.getAttribute("vector-effect").getString() === "non-scaling-stroke") { + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.stroke(); + ctx.restore(); + } else { + ctx.stroke(); + } + } + const markers = this.getMarkers(); + if (markers) { + const markersLastIndex = markers.length - 1; + const markerStartStyleProp = this.getStyle("marker-start"); + const markerMidStyleProp = this.getStyle("marker-mid"); + const markerEndStyleProp = this.getStyle("marker-end"); + if (markerStartStyleProp.isUrlDefinition()) { + const marker = markerStartStyleProp.getDefinition(); + const [point, angle] = markers[0]; + marker.render(ctx, point, angle); + } + if (markerMidStyleProp.isUrlDefinition()) { + const marker = markerMidStyleProp.getDefinition(); + for(let i = 1; i < markersLastIndex; i++){ + const [point, angle] = markers[i]; + marker.render(ctx, point, angle); + } + } + if (markerEndStyleProp.isUrlDefinition()) { + const marker = markerEndStyleProp.getDefinition(); + const [point, angle] = markers[markersLastIndex]; + marker.render(ctx, point, angle); + } + } + } + static pathM(pathParser) { + const point = pathParser.getAsCurrentPoint(); + pathParser.start = pathParser.current; + return { + point + }; + } + pathM(ctx, boundingBox) { + const { pathParser } = this; + const { point } = PathElement.pathM(pathParser); + const { x, y } = point; + pathParser.addMarker(point); + boundingBox.addPoint(x, y); + if (ctx) { + ctx.moveTo(x, y); + } + } + static pathL(pathParser) { + const { current } = pathParser; + const point = pathParser.getAsCurrentPoint(); + return { + current, + point + }; + } + pathL(ctx, boundingBox) { + const { pathParser } = this; + const { current, point } = PathElement.pathL(pathParser); + const { x, y } = point; + pathParser.addMarker(point, current); + boundingBox.addPoint(x, y); + if (ctx) { + ctx.lineTo(x, y); + } + } + static pathH(pathParser) { + const { current, command } = pathParser; + const point = new Point((command.relative ? current.x : 0) + command.x, current.y); + pathParser.current = point; + return { + current, + point + }; + } + pathH(ctx, boundingBox) { + const { pathParser } = this; + const { current, point } = PathElement.pathH(pathParser); + const { x, y } = point; + pathParser.addMarker(point, current); + boundingBox.addPoint(x, y); + if (ctx) { + ctx.lineTo(x, y); + } + } + static pathV(pathParser) { + const { current, command } = pathParser; + const point = new Point(current.x, (command.relative ? current.y : 0) + command.y); + pathParser.current = point; + return { + current, + point + }; + } + pathV(ctx, boundingBox) { + const { pathParser } = this; + const { current, point } = PathElement.pathV(pathParser); + const { x, y } = point; + pathParser.addMarker(point, current); + boundingBox.addPoint(x, y); + if (ctx) { + ctx.lineTo(x, y); + } + } + static pathC(pathParser) { + const { current } = pathParser; + const point = pathParser.getPoint("x1", "y1"); + const controlPoint = pathParser.getAsControlPoint("x2", "y2"); + const currentPoint = pathParser.getAsCurrentPoint(); + return { + current, + point, + controlPoint, + currentPoint + }; + } + pathC(ctx, boundingBox) { + const { pathParser } = this; + const { current, point, controlPoint, currentPoint } = PathElement.pathC(pathParser); + pathParser.addMarker(currentPoint, controlPoint, point); + boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + if (ctx) { + ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + } + } + static pathS(pathParser) { + const { current } = pathParser; + const point = pathParser.getReflectedControlPoint(); + const controlPoint = pathParser.getAsControlPoint("x2", "y2"); + const currentPoint = pathParser.getAsCurrentPoint(); + return { + current, + point, + controlPoint, + currentPoint + }; + } + pathS(ctx, boundingBox) { + const { pathParser } = this; + const { current, point, controlPoint, currentPoint } = PathElement.pathS(pathParser); + pathParser.addMarker(currentPoint, controlPoint, point); + boundingBox.addBezierCurve(current.x, current.y, point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + if (ctx) { + ctx.bezierCurveTo(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + } + } + static pathQ(pathParser) { + const { current } = pathParser; + const controlPoint = pathParser.getAsControlPoint("x1", "y1"); + const currentPoint = pathParser.getAsCurrentPoint(); + return { + current, + controlPoint, + currentPoint + }; + } + pathQ(ctx, boundingBox) { + const { pathParser } = this; + const { current, controlPoint, currentPoint } = PathElement.pathQ(pathParser); + pathParser.addMarker(currentPoint, controlPoint, controlPoint); + boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + if (ctx) { + ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + } + } + static pathT(pathParser) { + const { current } = pathParser; + const controlPoint = pathParser.getReflectedControlPoint(); + pathParser.control = controlPoint; + const currentPoint = pathParser.getAsCurrentPoint(); + return { + current, + controlPoint, + currentPoint + }; + } + pathT(ctx, boundingBox) { + const { pathParser } = this; + const { current, controlPoint, currentPoint } = PathElement.pathT(pathParser); + pathParser.addMarker(currentPoint, controlPoint, controlPoint); + boundingBox.addQuadraticCurve(current.x, current.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + if (ctx) { + ctx.quadraticCurveTo(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + } + } + static pathA(pathParser) { + const { current, command } = pathParser; + let { rX, rY, xRot, lArcFlag, sweepFlag } = command; + const xAxisRotation = xRot * (Math.PI / 180.0); + const currentPoint = pathParser.getAsCurrentPoint(); + // Conversion from endpoint to center parameterization + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + // x1', y1' + const currp = new Point(Math.cos(xAxisRotation) * (current.x - currentPoint.x) / 2.0 + Math.sin(xAxisRotation) * (current.y - currentPoint.y) / 2.0, -Math.sin(xAxisRotation) * (current.x - currentPoint.x) / 2.0 + Math.cos(xAxisRotation) * (current.y - currentPoint.y) / 2.0); + // adjust radii + const l = Math.pow(currp.x, 2) / Math.pow(rX, 2) + Math.pow(currp.y, 2) / Math.pow(rY, 2); + if (l > 1) { + rX *= Math.sqrt(l); + rY *= Math.sqrt(l); + } + // cx', cy' + let s = (lArcFlag === sweepFlag ? -1 : 1) * Math.sqrt((Math.pow(rX, 2) * Math.pow(rY, 2) - Math.pow(rX, 2) * Math.pow(currp.y, 2) - Math.pow(rY, 2) * Math.pow(currp.x, 2)) / (Math.pow(rX, 2) * Math.pow(currp.y, 2) + Math.pow(rY, 2) * Math.pow(currp.x, 2))); + if (isNaN(s)) { + s = 0; + } + const cpp = new Point(s * rX * currp.y / rY, s * -rY * currp.x / rX); + // cx, cy + const centp = new Point((current.x + currentPoint.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, (current.y + currentPoint.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y); + // initial angle + const a1 = vectorsAngle([ + 1, + 0 + ], [ + (currp.x - cpp.x) / rX, + (currp.y - cpp.y) / rY + ]) // θ1 + ; + // angle delta + const u = [ + (currp.x - cpp.x) / rX, + (currp.y - cpp.y) / rY + ]; + const v = [ + (-currp.x - cpp.x) / rX, + (-currp.y - cpp.y) / rY + ]; + let ad = vectorsAngle(u, v) // Δθ + ; + if (vectorsRatio(u, v) <= -1) { + ad = Math.PI; + } + if (vectorsRatio(u, v) >= 1) { + ad = 0; + } + return { + currentPoint, + rX, + rY, + sweepFlag, + xAxisRotation, + centp, + a1, + ad + }; + } + pathA(ctx, boundingBox) { + const { pathParser } = this; + const { currentPoint, rX, rY, sweepFlag, xAxisRotation, centp, a1, ad } = PathElement.pathA(pathParser); + // for markers + const dir = 1 - sweepFlag ? 1.0 : -1.0; + const ah = a1 + dir * (ad / 2.0); + const halfWay = new Point(centp.x + rX * Math.cos(ah), centp.y + rY * Math.sin(ah)); + pathParser.addMarkerAngle(halfWay, ah - dir * Math.PI / 2); + pathParser.addMarkerAngle(currentPoint, ah - dir * Math.PI); + boundingBox.addPoint(currentPoint.x, currentPoint.y) // TODO: this is too naive, make it better + ; + if (ctx && !isNaN(a1) && !isNaN(ad)) { + const r = rX > rY ? rX : rY; + const sx = rX > rY ? 1 : rX / rY; + const sy = rX > rY ? rY / rX : 1; + ctx.translate(centp.x, centp.y); + ctx.rotate(xAxisRotation); + ctx.scale(sx, sy); + ctx.arc(0, 0, r, a1, a1 + ad, Boolean(1 - sweepFlag)); + ctx.scale(1 / sx, 1 / sy); + ctx.rotate(-xAxisRotation); + ctx.translate(-centp.x, -centp.y); + } + } + static pathZ(pathParser) { + pathParser.current = pathParser.start; + } + pathZ(ctx, boundingBox) { + PathElement.pathZ(this.pathParser); + if (ctx) { + // only close path if it is not a straight line + if (boundingBox.x1 !== boundingBox.x2 && boundingBox.y1 !== boundingBox.y2) { + ctx.closePath(); + } + } + } + } + + class SVGElement extends RenderedElement { + type = "svg"; + root = false; + setContext(ctx) { + var _this_node_parentNode; + const { document } = this; + const { screen, window } = document; + const canvas = ctx.canvas; + screen.setDefaults(ctx); + if ("style" in canvas && typeof ctx.font !== "undefined" && window && typeof window.getComputedStyle !== "undefined") { + ctx.font = window.getComputedStyle(canvas).getPropertyValue("font"); + const fontSizeProp = new Property(document, "fontSize", Font.parse(ctx.font).fontSize); + if (fontSizeProp.hasValue()) { + document.rootEmSize = fontSizeProp.getPixels("y"); + document.emSize = document.rootEmSize; + } + } + // create new view port + if (!this.getAttribute("x").hasValue()) { + this.getAttribute("x", true).setValue(0); + } + if (!this.getAttribute("y").hasValue()) { + this.getAttribute("y", true).setValue(0); + } + let { width, height } = screen.viewPort; + if (!this.getStyle("width").hasValue()) { + this.getStyle("width", true).setValue("100%"); + } + if (!this.getStyle("height").hasValue()) { + this.getStyle("height", true).setValue("100%"); + } + if (!this.getStyle("color").hasValue()) { + this.getStyle("color", true).setValue("black"); + } + const refXAttr = this.getAttribute("refX"); + const refYAttr = this.getAttribute("refY"); + const viewBoxAttr = this.getAttribute("viewBox"); + const viewBox = viewBoxAttr.hasValue() ? toNumbers(viewBoxAttr.getString()) : null; + const clip = !this.root && this.getStyle("overflow").getValue("hidden") !== "visible"; + let minX = 0; + let minY = 0; + let clipX = 0; + let clipY = 0; + if (viewBox) { + minX = viewBox[0]; + minY = viewBox[1]; + } + if (!this.root) { + width = this.getStyle("width").getPixels("x"); + height = this.getStyle("height").getPixels("y"); + if (this.type === "marker") { + clipX = minX; + clipY = minY; + minX = 0; + minY = 0; + } + } + screen.viewPort.setCurrent(width, height); + // Default value of transform-origin is center only for root SVG elements + // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform-origin + if (this.node // is not temporary SVGElement + && (!this.parent || ((_this_node_parentNode = this.node.parentNode) === null || _this_node_parentNode === void 0 ? void 0 : _this_node_parentNode.nodeName) === "foreignObject") && this.getStyle("transform", false, true).hasValue() && !this.getStyle("transform-origin", false, true).hasValue()) { + this.getStyle("transform-origin", true, true).setValue("50% 50%"); + } + super.setContext(ctx); + ctx.translate(this.getAttribute("x").getPixels("x"), this.getAttribute("y").getPixels("y")); + if (viewBox) { + width = viewBox[2]; + height = viewBox[3]; + } + document.setViewBox({ + ctx, + aspectRatio: this.getAttribute("preserveAspectRatio").getString(), + width: screen.viewPort.width, + desiredWidth: width, + height: screen.viewPort.height, + desiredHeight: height, + minX, + minY, + refX: refXAttr.getValue(), + refY: refYAttr.getValue(), + clip, + clipX, + clipY + }); + if (viewBox) { + screen.viewPort.removeCurrent(); + screen.viewPort.setCurrent(width, height); + } + } + clearContext(ctx) { + super.clearContext(ctx); + this.document.screen.viewPort.removeCurrent(); + } + /** + * Resize SVG to fit in given size. + * @param width + * @param height + * @param preserveAspectRatio + */ resize(width) { + let height = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : width, preserveAspectRatio = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; + const widthAttr = this.getAttribute("width", true); + const heightAttr = this.getAttribute("height", true); + const viewBoxAttr = this.getAttribute("viewBox"); + const styleAttr = this.getAttribute("style"); + const originWidth = widthAttr.getNumber(0); + const originHeight = heightAttr.getNumber(0); + if (preserveAspectRatio) { + if (typeof preserveAspectRatio === "string") { + this.getAttribute("preserveAspectRatio", true).setValue(preserveAspectRatio); + } else { + const preserveAspectRatioAttr = this.getAttribute("preserveAspectRatio"); + if (preserveAspectRatioAttr.hasValue()) { + preserveAspectRatioAttr.setValue(preserveAspectRatioAttr.getString().replace(/^\s*(\S.*\S)\s*$/, "$1")); + } + } + } + widthAttr.setValue(width); + heightAttr.setValue(height); + if (!viewBoxAttr.hasValue()) { + viewBoxAttr.setValue(`0 0 ${originWidth || width} ${originHeight || height}`); + } + if (styleAttr.hasValue()) { + const widthStyle = this.getStyle("width"); + const heightStyle = this.getStyle("height"); + if (widthStyle.hasValue()) { + widthStyle.setValue(`${width}px`); + } + if (heightStyle.hasValue()) { + heightStyle.setValue(`${height}px`); + } + } + } + } + + class RectElement extends PathElement { + type = "rect"; + path(ctx) { + const x = this.getAttribute("x").getPixels("x"); + const y = this.getAttribute("y").getPixels("y"); + const width = this.getStyle("width", false, true).getPixels("x"); + const height = this.getStyle("height", false, true).getPixels("y"); + const rxAttr = this.getAttribute("rx"); + const ryAttr = this.getAttribute("ry"); + let rx = rxAttr.getPixels("x"); + let ry = ryAttr.getPixels("y"); + if (rxAttr.hasValue() && !ryAttr.hasValue()) { + ry = rx; + } + if (ryAttr.hasValue() && !rxAttr.hasValue()) { + rx = ry; + } + rx = Math.min(rx, width / 2.0); + ry = Math.min(ry, height / 2.0); + if (ctx) { + const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); + ctx.beginPath() // always start the path so we don't fill prior paths + ; + if (height > 0 && width > 0) { + ctx.moveTo(x + rx, y); + ctx.lineTo(x + width - rx, y); + ctx.bezierCurveTo(x + width - rx + KAPPA * rx, y, x + width, y + ry - KAPPA * ry, x + width, y + ry); + ctx.lineTo(x + width, y + height - ry); + ctx.bezierCurveTo(x + width, y + height - ry + KAPPA * ry, x + width - rx + KAPPA * rx, y + height, x + width - rx, y + height); + ctx.lineTo(x + rx, y + height); + ctx.bezierCurveTo(x + rx - KAPPA * rx, y + height, x, y + height - ry + KAPPA * ry, x, y + height - ry); + ctx.lineTo(x, y + ry); + ctx.bezierCurveTo(x, y + ry - KAPPA * ry, x + rx - KAPPA * rx, y, x + rx, y); + ctx.closePath(); + } + } + return new BoundingBox(x, y, x + width, y + height); + } + getMarkers() { + return null; + } + } + + class CircleElement extends PathElement { + type = "circle"; + path(ctx) { + const cx = this.getAttribute("cx").getPixels("x"); + const cy = this.getAttribute("cy").getPixels("y"); + const r = this.getAttribute("r").getPixels(); + if (ctx && r > 0) { + ctx.beginPath(); + ctx.arc(cx, cy, r, 0, Math.PI * 2, false); + ctx.closePath(); + } + return new BoundingBox(cx - r, cy - r, cx + r, cy + r); + } + getMarkers() { + return null; + } + } + + class EllipseElement extends PathElement { + type = "ellipse"; + path(ctx) { + const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); + const rx = this.getAttribute("rx").getPixels("x"); + const ry = this.getAttribute("ry").getPixels("y"); + const cx = this.getAttribute("cx").getPixels("x"); + const cy = this.getAttribute("cy").getPixels("y"); + if (ctx && rx > 0 && ry > 0) { + ctx.beginPath(); + ctx.moveTo(cx + rx, cy); + ctx.bezierCurveTo(cx + rx, cy + KAPPA * ry, cx + KAPPA * rx, cy + ry, cx, cy + ry); + ctx.bezierCurveTo(cx - KAPPA * rx, cy + ry, cx - rx, cy + KAPPA * ry, cx - rx, cy); + ctx.bezierCurveTo(cx - rx, cy - KAPPA * ry, cx - KAPPA * rx, cy - ry, cx, cy - ry); + ctx.bezierCurveTo(cx + KAPPA * rx, cy - ry, cx + rx, cy - KAPPA * ry, cx + rx, cy); + ctx.closePath(); + } + return new BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); + } + getMarkers() { + return null; + } + } + + class LineElement extends PathElement { + type = "line"; + getPoints() { + return [ + new Point(this.getAttribute("x1").getPixels("x"), this.getAttribute("y1").getPixels("y")), + new Point(this.getAttribute("x2").getPixels("x"), this.getAttribute("y2").getPixels("y")) + ]; + } + path(ctx) { + const [{ x: x0, y: y0 }, { x: x1, y: y1 }] = this.getPoints(); + if (ctx) { + ctx.beginPath(); + ctx.moveTo(x0, y0); + ctx.lineTo(x1, y1); + } + return new BoundingBox(x0, y0, x1, y1); + } + getMarkers() { + const [p0, p1] = this.getPoints(); + const a = p0.angleTo(p1); + return [ + [ + p0, + a + ], + [ + p1, + a + ] + ]; + } + } + + class PolylineElement extends PathElement { + type = "polyline"; + points = []; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.points = Point.parsePath(this.getAttribute("points").getString()); + } + path(ctx) { + const { points } = this; + const [{ x: x0, y: y0 }] = points; + const boundingBox = new BoundingBox(x0, y0); + if (ctx) { + ctx.beginPath(); + ctx.moveTo(x0, y0); + } + points.forEach((param)=>{ + let { x, y } = param; + boundingBox.addPoint(x, y); + if (ctx) { + ctx.lineTo(x, y); + } + }); + return boundingBox; + } + getMarkers() { + const { points } = this; + const lastIndex = points.length - 1; + const markers = []; + points.forEach((point, i)=>{ + if (i === lastIndex) { + return; + } + markers.push([ + point, + point.angleTo(points[i + 1]) + ]); + }); + if (markers.length > 0) { + markers.push([ + points[points.length - 1], + markers[markers.length - 1][1] + ]); + } + return markers; + } + } + + class PolygonElement extends PolylineElement { + type = "polygon"; + path(ctx) { + const boundingBox = super.path(ctx); + const [{ x, y }] = this.points; + if (ctx) { + ctx.lineTo(x, y); + ctx.closePath(); + } + return boundingBox; + } + } + + class PatternElement extends Element { + type = "pattern"; + createPattern(ctx, _, parentOpacityProp) { + const width = this.getStyle("width").getPixels("x", true); + const height = this.getStyle("height").getPixels("y", true); + // render me using a temporary svg element + const patternSvg = new SVGElement(this.document, null); + patternSvg.attributes.viewBox = new Property(this.document, "viewBox", this.getAttribute("viewBox").getValue()); + patternSvg.attributes.width = new Property(this.document, "width", `${width}px`); + patternSvg.attributes.height = new Property(this.document, "height", `${height}px`); + patternSvg.attributes.transform = new Property(this.document, "transform", this.getAttribute("patternTransform").getValue()); + patternSvg.children = this.children; + const patternCanvas = this.document.createCanvas(width, height); + const patternCtx = patternCanvas.getContext("2d"); + const xAttr = this.getAttribute("x"); + const yAttr = this.getAttribute("y"); + if (xAttr.hasValue() && yAttr.hasValue()) { + patternCtx.translate(xAttr.getPixels("x", true), yAttr.getPixels("y", true)); + } + if (parentOpacityProp.hasValue()) { + this.styles["fill-opacity"] = parentOpacityProp; + } else { + Reflect.deleteProperty(this.styles, "fill-opacity"); + } + // render 3x3 grid so when we transform there's no white space on edges + for(let x = -1; x <= 1; x++){ + for(let y = -1; y <= 1; y++){ + patternCtx.save(); + patternSvg.attributes.x = new Property(this.document, "x", x * patternCanvas.width); + patternSvg.attributes.y = new Property(this.document, "y", y * patternCanvas.height); + patternSvg.render(patternCtx); + patternCtx.restore(); + } + } + const pattern = ctx.createPattern(patternCanvas, "repeat"); + return pattern; + } + } + + class MarkerElement extends Element { + type = "marker"; + render(ctx, point, angle) { + if (!point) { + return; + } + const { x, y } = point; + const orient = this.getAttribute("orient").getString("auto"); + const markerUnits = this.getAttribute("markerUnits").getString("strokeWidth"); + ctx.translate(x, y); + if (orient === "auto") { + ctx.rotate(angle); + } + if (markerUnits === "strokeWidth") { + ctx.scale(ctx.lineWidth, ctx.lineWidth); + } + ctx.save(); + // render me using a temporary svg element + const markerSvg = new SVGElement(this.document); + markerSvg.type = this.type; + markerSvg.attributes.viewBox = new Property(this.document, "viewBox", this.getAttribute("viewBox").getValue()); + markerSvg.attributes.refX = new Property(this.document, "refX", this.getAttribute("refX").getValue()); + markerSvg.attributes.refY = new Property(this.document, "refY", this.getAttribute("refY").getValue()); + markerSvg.attributes.width = new Property(this.document, "width", this.getAttribute("markerWidth").getValue()); + markerSvg.attributes.height = new Property(this.document, "height", this.getAttribute("markerHeight").getValue()); + markerSvg.attributes.overflow = new Property(this.document, "overflow", this.getAttribute("overflow").getValue()); + markerSvg.attributes.fill = new Property(this.document, "fill", this.getAttribute("fill").getColor("black")); + markerSvg.attributes.stroke = new Property(this.document, "stroke", this.getAttribute("stroke").getValue("none")); + markerSvg.children = this.children; + markerSvg.render(ctx); + ctx.restore(); + if (markerUnits === "strokeWidth") { + ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth); + } + if (orient === "auto") { + ctx.rotate(-angle); + } + ctx.translate(-x, -y); + } + } + + class DefsElement extends Element { + type = "defs"; + render() { + // NOOP + } + } + + class GElement extends RenderedElement { + type = "g"; + getBoundingBox(ctx) { + const boundingBox = new BoundingBox(); + this.children.forEach((child)=>{ + boundingBox.addBoundingBox(child.getBoundingBox(ctx)); + }); + return boundingBox; + } + } + + class GradientElement extends Element { + attributesToInherit = [ + "gradientUnits" + ]; + stops = []; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + const { stops, children } = this; + children.forEach((child)=>{ + if (child.type === "stop") { + stops.push(child); + } + }); + } + getGradientUnits() { + return this.getAttribute("gradientUnits").getString("objectBoundingBox"); + } + createGradient(ctx, element, parentOpacityProp) { + // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this + let stopsContainer = this; + if (this.getHrefAttribute().hasValue()) { + stopsContainer = this.getHrefAttribute().getDefinition(); + this.inheritStopContainer(stopsContainer); + } + const { stops } = stopsContainer; + const gradient = this.getGradient(ctx, element); + if (!gradient) { + return this.addParentOpacity(parentOpacityProp, stops[stops.length - 1].color); + } + stops.forEach((stop)=>{ + gradient.addColorStop(stop.offset, this.addParentOpacity(parentOpacityProp, stop.color)); + }); + if (this.getAttribute("gradientTransform").hasValue()) { + // render as transformed pattern on temporary canvas + const { document } = this; + const { MAX_VIRTUAL_PIXELS } = Screen; + const { viewPort } = document.screen; + const rootView = viewPort.getRoot(); + const rect = new RectElement(document); + rect.attributes.x = new Property(document, "x", -MAX_VIRTUAL_PIXELS / 3.0); + rect.attributes.y = new Property(document, "y", -MAX_VIRTUAL_PIXELS / 3.0); + rect.attributes.width = new Property(document, "width", MAX_VIRTUAL_PIXELS); + rect.attributes.height = new Property(document, "height", MAX_VIRTUAL_PIXELS); + const group = new GElement(document); + group.attributes.transform = new Property(document, "transform", this.getAttribute("gradientTransform").getValue()); + group.children = [ + rect + ]; + const patternSvg = new SVGElement(document); + patternSvg.attributes.x = new Property(document, "x", 0); + patternSvg.attributes.y = new Property(document, "y", 0); + patternSvg.attributes.width = new Property(document, "width", rootView.width); + patternSvg.attributes.height = new Property(document, "height", rootView.height); + patternSvg.children = [ + group + ]; + const patternCanvas = document.createCanvas(rootView.width, rootView.height); + const patternCtx = patternCanvas.getContext("2d"); + patternCtx.fillStyle = gradient; + patternSvg.render(patternCtx); + return patternCtx.createPattern(patternCanvas, "no-repeat"); + } + return gradient; + } + inheritStopContainer(stopsContainer) { + this.attributesToInherit.forEach((attributeToInherit)=>{ + if (!this.getAttribute(attributeToInherit).hasValue() && stopsContainer.getAttribute(attributeToInherit).hasValue()) { + this.getAttribute(attributeToInherit, true).setValue(stopsContainer.getAttribute(attributeToInherit).getValue()); + } + }); + } + addParentOpacity(parentOpacityProp, color) { + if (parentOpacityProp.hasValue()) { + const colorProp = new Property(this.document, "color", color); + return colorProp.addOpacity(parentOpacityProp).getColor(); + } + return color; + } + } + + class LinearGradientElement extends GradientElement { + type = "linearGradient"; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.attributesToInherit.push("x1", "y1", "x2", "y2"); + } + getGradient(ctx, element) { + const isBoundingBoxUnits = this.getGradientUnits() === "objectBoundingBox"; + const boundingBox = isBoundingBoxUnits ? element.getBoundingBox(ctx) : null; + if (isBoundingBoxUnits && !boundingBox) { + return null; + } + if (!this.getAttribute("x1").hasValue() && !this.getAttribute("y1").hasValue() && !this.getAttribute("x2").hasValue() && !this.getAttribute("y2").hasValue()) { + this.getAttribute("x1", true).setValue(0); + this.getAttribute("y1", true).setValue(0); + this.getAttribute("x2", true).setValue(1); + this.getAttribute("y2", true).setValue(0); + } + const x1 = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute("x1").getNumber() : this.getAttribute("x1").getPixels("x"); + const y1 = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute("y1").getNumber() : this.getAttribute("y1").getPixels("y"); + const x2 = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute("x2").getNumber() : this.getAttribute("x2").getPixels("x"); + const y2 = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute("y2").getNumber() : this.getAttribute("y2").getPixels("y"); + if (x1 === x2 && y1 === y2) { + return null; + } + return ctx.createLinearGradient(x1, y1, x2, y2); + } + } + + class RadialGradientElement extends GradientElement { + type = "radialGradient"; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.attributesToInherit.push("cx", "cy", "r", "fx", "fy", "fr"); + } + getGradient(ctx, element) { + const isBoundingBoxUnits = this.getGradientUnits() === "objectBoundingBox"; + const boundingBox = element.getBoundingBox(ctx); + if (isBoundingBoxUnits && !boundingBox) { + return null; + } + if (!this.getAttribute("cx").hasValue()) { + this.getAttribute("cx", true).setValue("50%"); + } + if (!this.getAttribute("cy").hasValue()) { + this.getAttribute("cy", true).setValue("50%"); + } + if (!this.getAttribute("r").hasValue()) { + this.getAttribute("r", true).setValue("50%"); + } + const cx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute("cx").getNumber() : this.getAttribute("cx").getPixels("x"); + const cy = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute("cy").getNumber() : this.getAttribute("cy").getPixels("y"); + let fx = cx; + let fy = cy; + if (this.getAttribute("fx").hasValue()) { + fx = isBoundingBoxUnits ? boundingBox.x + boundingBox.width * this.getAttribute("fx").getNumber() : this.getAttribute("fx").getPixels("x"); + } + if (this.getAttribute("fy").hasValue()) { + fy = isBoundingBoxUnits ? boundingBox.y + boundingBox.height * this.getAttribute("fy").getNumber() : this.getAttribute("fy").getPixels("y"); + } + const r = isBoundingBoxUnits ? (boundingBox.width + boundingBox.height) / 2.0 * this.getAttribute("r").getNumber() : this.getAttribute("r").getPixels(); + const fr = this.getAttribute("fr").getPixels(); + return ctx.createRadialGradient(fx, fy, fr, cx, cy, r); + } + } + + class StopElement extends Element { + type = "stop"; + offset; + color; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + const offset = Math.max(0, Math.min(1, this.getAttribute("offset").getNumber())); + const stopOpacity = this.getStyle("stop-opacity"); + let stopColor = this.getStyle("stop-color", true); + if (stopColor.getString() === "") { + stopColor.setValue("#000"); + } + if (stopOpacity.hasValue()) { + stopColor = stopColor.addOpacity(stopOpacity); + } + this.offset = offset; + this.color = stopColor.getColor(); + } + } + + class AnimateElement extends Element { + type = "animate"; + begin; + maxDuration; + from; + to; + values; + duration = 0; + initialValue; + initialUnits = ""; + removed = false; + frozen = false; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + document.screen.animations.push(this); + this.begin = this.getAttribute("begin").getMilliseconds(); + this.maxDuration = this.begin + this.getAttribute("dur").getMilliseconds(); + this.from = this.getAttribute("from"); + this.to = this.getAttribute("to"); + this.values = new Property(document, "values", null); + const valuesAttr = this.getAttribute("values"); + if (valuesAttr.hasValue()) { + this.values.setValue(valuesAttr.getString().split(";")); + } + } + getProperty() { + const attributeType = this.getAttribute("attributeType").getString(); + const attributeName = this.getAttribute("attributeName").getString(); + if (attributeType === "CSS") { + return this.parent.getStyle(attributeName, true); + } + return this.parent.getAttribute(attributeName, true); + } + calcValue() { + const { initialUnits } = this; + const { progress, from, to } = this.getProgress(); + // tween value linearly + let newValue = from.getNumber() + (to.getNumber() - from.getNumber()) * progress; + if (initialUnits === "%") { + newValue *= 100.0 // numValue() returns 0-1 whereas properties are 0-100 + ; + } + return `${newValue}${initialUnits}`; + } + update(delta) { + const { parent } = this; + const prop = this.getProperty(); + // set initial value + if (!this.initialValue) { + this.initialValue = prop.getString(); + this.initialUnits = prop.getUnits(); + } + // if we're past the end time + if (this.duration > this.maxDuration) { + const fill = this.getAttribute("fill").getString("remove"); + // loop for indefinitely repeating animations + if (this.getAttribute("repeatCount").getString() === "indefinite" || this.getAttribute("repeatDur").getString() === "indefinite") { + this.duration = 0; + } else if (fill === "freeze" && !this.frozen) { + this.frozen = true; + if (parent && prop) { + parent.animationFrozen = true; + parent.animationFrozenValue = prop.getString(); + } + } else if (fill === "remove" && !this.removed) { + this.removed = true; + if (parent && prop) { + prop.setValue(parent.animationFrozen ? parent.animationFrozenValue : this.initialValue); + } + return true; + } + return false; + } + this.duration += delta; + // if we're past the begin time + let updated = false; + if (this.begin < this.duration) { + let newValue = this.calcValue() // tween + ; + const typeAttr = this.getAttribute("type"); + if (typeAttr.hasValue()) { + // for transform, etc. + const type = typeAttr.getString(); + newValue = `${type}(${newValue})`; + } + prop.setValue(newValue); + updated = true; + } + return updated; + } + getProgress() { + const { document, values } = this; + let progress = (this.duration - this.begin) / (this.maxDuration - this.begin); + let from; + let to; + if (values.hasValue()) { + const p = progress * (values.getValue().length - 1); + const lb = Math.floor(p); + const ub = Math.ceil(p); + let value; + value = values.getValue()[lb]; + from = new Property(document, "from", value ? parseFloat(value) : 0); + value = values.getValue()[ub]; + to = new Property(document, "to", value ? parseFloat(value) : 0); + progress = (p - lb) / (ub - lb); + } else { + from = this.from; + to = this.to; + } + return { + progress, + from, + to + }; + } + } + + class AnimateColorElement extends AnimateElement { + type = "animateColor"; + calcValue() { + const { progress, from, to } = this.getProgress(); + const colorFrom = new rgbcolor(from.getColor()); + const colorTo = new rgbcolor(to.getColor()); + if (colorFrom.ok && colorTo.ok) { + // tween color linearly + const r = colorFrom.r + (colorTo.r - colorFrom.r) * progress; + const g = colorFrom.g + (colorTo.g - colorFrom.g) * progress; + const b = colorFrom.b + (colorTo.b - colorFrom.b) * progress; + // ? alpha + return `rgb(${Math.floor(r)}, ${Math.floor(g)}, ${Math.floor(b)})`; + } + return this.getAttribute("from").getColor(); + } + } + + class AnimateTransformElement extends AnimateElement { + type = "animateTransform"; + calcValue() { + const { progress, from, to } = this.getProgress(); + // tween value linearly + const transformFrom = toNumbers(from.getString()); + const transformTo = toNumbers(to.getString()); + const newValue = transformFrom.map((from, i)=>{ + const to = transformTo[i]; + return from + (to - from) * progress; + }).join(" "); + return newValue; + } + } + + class FontFaceElement extends Element { + type = "font-face"; + ascent; + descent; + unitsPerEm; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.ascent = this.getAttribute("ascent").getNumber(); + this.descent = this.getAttribute("descent").getNumber(); + this.unitsPerEm = this.getAttribute("units-per-em").getNumber(); + } + } + + class GlyphElement extends PathElement { + type = "glyph"; + horizAdvX; + unicode; + arabicForm; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.horizAdvX = this.getAttribute("horiz-adv-x").getNumber(); + this.unicode = this.getAttribute("unicode").getString(); + this.arabicForm = this.getAttribute("arabic-form").getString(); + } + } + + class MissingGlyphElement extends GlyphElement { + type = "missing-glyph"; + horizAdvX = 0; + } + + class FontElement extends Element { + type = "font"; + isArabic = false; + missingGlyph; + glyphs = {}; + arabicGlyphs = {}; + horizAdvX; + isRTL = false; + fontFace; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.horizAdvX = this.getAttribute("horiz-adv-x").getNumber(); + const { definitions } = document; + const { children } = this; + for (const child of children){ + if (child instanceof FontFaceElement) { + this.fontFace = child; + const fontFamilyStyle = child.getStyle("font-family"); + if (fontFamilyStyle.hasValue()) { + definitions[fontFamilyStyle.getString()] = this; + } + } else if (child instanceof MissingGlyphElement) { + this.missingGlyph = child; + } else if (child instanceof GlyphElement) { + if (child.arabicForm) { + this.isRTL = true; + this.isArabic = true; + const arabicGlyph = this.arabicGlyphs[child.unicode]; + if (typeof arabicGlyph === "undefined") { + this.arabicGlyphs[child.unicode] = { + [child.arabicForm]: child + }; + } else { + arabicGlyph[child.arabicForm] = child; + } + } else { + this.glyphs[child.unicode] = child; + } + } + } + } + render() { + // NO RENDER + } + } + + class TRefElement extends TextElement { + type = "tref"; + getText() { + const element = this.getHrefAttribute().getDefinition(); + if (element) { + const firstChild = element.children[0]; + if (firstChild) { + return firstChild.getText(); + } + } + return ""; + } + } + + class AElement extends TextElement { + type = "a"; + hasText; + text; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + const { childNodes } = node; + const firstChild = childNodes[0]; + const hasText = childNodes.length > 0 && Array.from(childNodes).every((node)=>node.nodeType === 3); + this.hasText = hasText; + this.text = hasText ? this.getTextFromNode(firstChild) : ""; + } + getText() { + return this.text; + } + renderChildren(ctx) { + if (this.hasText) { + // render as text element + super.renderChildren(ctx); + const { document, x, y } = this; + const { mouse } = document.screen; + const fontSize = new Property(document, "fontSize", Font.parse(document.ctx.font).fontSize); + // Do not calc bounding box if mouse is not working. + if (mouse.isWorking()) { + mouse.checkBoundingBox(this, new BoundingBox(x, y - fontSize.getPixels("y"), x + this.measureText(ctx), y)); + } + } else if (this.children.length > 0) { + // render as temporary group + const g = new GElement(this.document); + g.children = this.children; + g.parent = this; + g.render(ctx); + } + } + onClick() { + const { window } = this.document; + if (window) { + window.open(this.getHrefAttribute().getString()); + } + } + onMouseMove() { + const ctx = this.document.ctx; + ctx.canvas.style.cursor = "pointer"; + } + } + + class TextPathElement extends TextElement { + type = "textPath"; + textWidth = 0; + textHeight = 0; + pathLength = -1; + glyphInfo = null; + text; + dataArray; + letterSpacingCache = []; + equidistantCache; + measuresCache = new Map([ + [ + "", + 0 + ] + ]); + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + const pathElement = this.getHrefAttribute().getDefinition(); + this.text = this.getTextFromNode(); + this.dataArray = this.parsePathData(pathElement); + } + getText() { + return this.text; + } + path(ctx) { + const { dataArray } = this; + if (ctx) { + ctx.beginPath(); + } + dataArray.forEach((param)=>{ + let { type, points } = param; + switch(type){ + case PathParser.LINE_TO: + if (ctx) { + ctx.lineTo(points[0], points[1]); + } + break; + case PathParser.MOVE_TO: + if (ctx) { + ctx.moveTo(points[0], points[1]); + } + break; + case PathParser.CURVE_TO: + if (ctx) { + ctx.bezierCurveTo(points[0], points[1], points[2], points[3], points[4], points[5]); + } + break; + case PathParser.QUAD_TO: + if (ctx) { + ctx.quadraticCurveTo(points[0], points[1], points[2], points[3]); + } + break; + case PathParser.ARC: + { + const [cx, cy, rx, ry, theta, dTheta, psi, fs] = points; + const r = rx > ry ? rx : ry; + const scaleX = rx > ry ? 1 : rx / ry; + const scaleY = rx > ry ? ry / rx : 1; + if (ctx) { + ctx.translate(cx, cy); + ctx.rotate(psi); + ctx.scale(scaleX, scaleY); + ctx.arc(0, 0, r, theta, theta + dTheta, Boolean(1 - fs)); + ctx.scale(1 / scaleX, 1 / scaleY); + ctx.rotate(-psi); + ctx.translate(-cx, -cy); + } + break; + } + case PathParser.CLOSE_PATH: + if (ctx) { + ctx.closePath(); + } + break; + } + }); + } + renderChildren(ctx) { + this.setTextData(ctx); + ctx.save(); + const textDecoration = this.parent.getStyle("text-decoration").getString(); + const fontSize = this.getFontSize(); + const { glyphInfo } = this; + const fill = ctx.fillStyle; + if (textDecoration === "underline") { + ctx.beginPath(); + } + glyphInfo.forEach((glyph, i)=>{ + const { p0, p1, rotation, text: partialText } = glyph; + ctx.save(); + ctx.translate(p0.x, p0.y); + ctx.rotate(rotation); + if (ctx.fillStyle) { + ctx.fillText(partialText, 0, 0); + } + if (ctx.strokeStyle) { + ctx.strokeText(partialText, 0, 0); + } + ctx.restore(); + if (textDecoration === "underline") { + if (i === 0) { + ctx.moveTo(p0.x, p0.y + fontSize / 8); + } + ctx.lineTo(p1.x, p1.y + fontSize / 5); + } + // // To assist with debugging visually, uncomment following + // + // ctx.beginPath(); + // if (i % 2) + // ctx.strokeStyle = 'red'; + // else + // ctx.strokeStyle = 'green'; + // ctx.moveTo(p0.x, p0.y); + // ctx.lineTo(p1.x, p1.y); + // ctx.stroke(); + // ctx.closePath(); + }); + if (textDecoration === "underline") { + ctx.lineWidth = fontSize / 20; + ctx.strokeStyle = fill; + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } + getLetterSpacingAt() { + let idx = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + return this.letterSpacingCache[idx] || 0; + } + findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, inputOffset, dy, c, charI) { + let offset = inputOffset; + let glyphWidth = this.measureText(ctx, c); + if (c === " " && anchor === "justify" && textFullWidth < fullPathWidth) { + glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber; + } + if (charI > -1) { + offset += this.getLetterSpacingAt(charI); + } + const splineStep = this.textHeight / 20; + const p0 = this.getEquidistantPointOnPath(offset, splineStep, 0); + const p1 = this.getEquidistantPointOnPath(offset + glyphWidth, splineStep, 0); + const segment = { + p0, + p1 + }; + const rotation = p0 && p1 ? Math.atan2(p1.y - p0.y, p1.x - p0.x) : 0; + if (dy) { + const dyX = Math.cos(Math.PI / 2 + rotation) * dy; + const dyY = Math.cos(-rotation) * dy; + segment.p0 = { + ...p0, + x: p0.x + dyX, + y: p0.y + dyY + }; + segment.p1 = { + ...p1, + x: p1.x + dyX, + y: p1.y + dyY + }; + } + offset += glyphWidth; + return { + offset, + segment, + rotation + }; + } + measureText(ctx, text) { + const { measuresCache } = this; + const targetText = text || this.getText(); + if (measuresCache.has(targetText)) { + return measuresCache.get(targetText); + } + const measure = this.measureTargetText(ctx, targetText); + measuresCache.set(targetText, measure); + return measure; + } + // This method supposes what all custom fonts already loaded. + // If some font will be loaded after this method call, will not be rendered correctly. + // You need to call this method manually to update glyphs cache. + setTextData(ctx) { + if (this.glyphInfo) { + return; + } + const renderText = this.getText(); + const chars = renderText.split(""); + const spacesNumber = renderText.split(" ").length - 1; + const dx = this.parent.getAttribute("dx").split().map((_)=>_.getPixels("x")); + const dy = this.parent.getAttribute("dy").getPixels("y"); + const anchor = this.parent.getStyle("text-anchor").getString("start"); + const thisSpacing = this.getStyle("letter-spacing"); + const parentSpacing = this.parent.getStyle("letter-spacing"); + let letterSpacing = 0; + if (!thisSpacing.hasValue() || thisSpacing.getValue() === "inherit") { + letterSpacing = parentSpacing.getPixels(); + } else if (thisSpacing.hasValue()) { + if (thisSpacing.getValue() !== "initial" && thisSpacing.getValue() !== "unset") { + letterSpacing = thisSpacing.getPixels(); + } + } + // fill letter-spacing cache + const letterSpacingCache = []; + const textLen = renderText.length; + this.letterSpacingCache = letterSpacingCache; + for(let i = 0; i < textLen; i++){ + letterSpacingCache.push(typeof dx[i] !== "undefined" ? dx[i] : letterSpacing); + } + const dxSum = letterSpacingCache.reduce((acc, cur, i)=>i === 0 ? 0 : acc + cur || 0, 0); + const textWidth = this.measureText(ctx); + const textFullWidth = Math.max(textWidth + dxSum, 0); + this.textWidth = textWidth; + this.textHeight = this.getFontSize(); + this.glyphInfo = []; + const fullPathWidth = this.getPathLength(); + const startOffset = this.getStyle("startOffset").getNumber(0) * fullPathWidth; + let offset = 0; + if (anchor === "middle" || anchor === "center") { + offset = -textFullWidth / 2; + } + if (anchor === "end" || anchor === "right") { + offset = -textFullWidth; + } + offset += startOffset; + chars.forEach((char, i)=>{ + // Find such segment what distance between p0 and p1 is approx. width of glyph + const { offset: nextOffset, segment, rotation } = this.findSegmentToFitChar(ctx, anchor, textFullWidth, fullPathWidth, spacesNumber, offset, dy, char, i); + offset = nextOffset; + if (!segment.p0 || !segment.p1) { + return; + } + // const width = this.getLineLength( + // segment.p0.x, + // segment.p0.y, + // segment.p1.x, + // segment.p1.y + // ); + // Note: Since glyphs are rendered one at a time, any kerning pair data built into the font will not be used. + // Can foresee having a rough pair table built in that the developer can override as needed. + // Or use "dx" attribute of the node as a naive replacement + // const kern = 0; + // placeholder for future implementation + // const midpoint = this.getPointOnLine( + // kern + width / 2.0, + // segment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y + // ); + this.glyphInfo.push({ + // transposeX: midpoint.x, + // transposeY: midpoint.y, + text: chars[i], + p0: segment.p0, + p1: segment.p1, + rotation + }); + }); + } + parsePathData(path) { + this.pathLength = -1 // reset path length + ; + if (!path) { + return []; + } + const pathCommands = []; + const { pathParser } = path; + pathParser.reset(); + // convert l, H, h, V, and v to L + while(!pathParser.isEnd()){ + const { current } = pathParser; + const startX = current ? current.x : 0; + const startY = current ? current.y : 0; + const command = pathParser.next(); + let nextCommandType = command.type; + let points = []; + switch(command.type){ + case PathParser.MOVE_TO: + this.pathM(pathParser, points); + break; + case PathParser.LINE_TO: + nextCommandType = this.pathL(pathParser, points); + break; + case PathParser.HORIZ_LINE_TO: + nextCommandType = this.pathH(pathParser, points); + break; + case PathParser.VERT_LINE_TO: + nextCommandType = this.pathV(pathParser, points); + break; + case PathParser.CURVE_TO: + this.pathC(pathParser, points); + break; + case PathParser.SMOOTH_CURVE_TO: + nextCommandType = this.pathS(pathParser, points); + break; + case PathParser.QUAD_TO: + this.pathQ(pathParser, points); + break; + case PathParser.SMOOTH_QUAD_TO: + nextCommandType = this.pathT(pathParser, points); + break; + case PathParser.ARC: + points = this.pathA(pathParser); + break; + case PathParser.CLOSE_PATH: + PathElement.pathZ(pathParser); + break; + } + if (command.type !== PathParser.CLOSE_PATH) { + pathCommands.push({ + type: nextCommandType, + points, + start: { + x: startX, + y: startY + }, + pathLength: this.calcLength(startX, startY, nextCommandType, points) + }); + } else { + pathCommands.push({ + type: PathParser.CLOSE_PATH, + points: [], + pathLength: 0 + }); + } + } + return pathCommands; + } + pathM(pathParser, points) { + const { x, y } = PathElement.pathM(pathParser).point; + points.push(x, y); + } + pathL(pathParser, points) { + const { x, y } = PathElement.pathL(pathParser).point; + points.push(x, y); + return PathParser.LINE_TO; + } + pathH(pathParser, points) { + const { x, y } = PathElement.pathH(pathParser).point; + points.push(x, y); + return PathParser.LINE_TO; + } + pathV(pathParser, points) { + const { x, y } = PathElement.pathV(pathParser).point; + points.push(x, y); + return PathParser.LINE_TO; + } + pathC(pathParser, points) { + const { point, controlPoint, currentPoint } = PathElement.pathC(pathParser); + points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + } + pathS(pathParser, points) { + const { point, controlPoint, currentPoint } = PathElement.pathS(pathParser); + points.push(point.x, point.y, controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + return PathParser.CURVE_TO; + } + pathQ(pathParser, points) { + const { controlPoint, currentPoint } = PathElement.pathQ(pathParser); + points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + } + pathT(pathParser, points) { + const { controlPoint, currentPoint } = PathElement.pathT(pathParser); + points.push(controlPoint.x, controlPoint.y, currentPoint.x, currentPoint.y); + return PathParser.QUAD_TO; + } + pathA(pathParser) { + let { rX, rY, sweepFlag, xAxisRotation, centp, a1, ad } = PathElement.pathA(pathParser); + if (sweepFlag === 0 && ad > 0) { + ad -= 2 * Math.PI; + } + if (sweepFlag === 1 && ad < 0) { + ad += 2 * Math.PI; + } + return [ + centp.x, + centp.y, + rX, + rY, + a1, + ad, + xAxisRotation, + sweepFlag + ]; + } + calcLength(x, y, commandType, points) { + let len = 0; + let p1 = null; + let p2 = null; + let t = 0; + switch(commandType){ + case PathParser.LINE_TO: + return this.getLineLength(x, y, points[0], points[1]); + case PathParser.CURVE_TO: + // Approximates by breaking curve into 100 line segments + len = 0.0; + p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]); + for(t = 0.01; t <= 1; t += 0.01){ + p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + return len; + case PathParser.QUAD_TO: + // Approximates by breaking curve into 100 line segments + len = 0.0; + p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]); + for(t = 0.01; t <= 1; t += 0.01){ + p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + return len; + case PathParser.ARC: + { + // Approximates by breaking curve into line segments + len = 0.0; + const start = points[4]; + // 4 = theta + const dTheta = points[5]; + // 5 = dTheta + const end = points[4] + dTheta; + let inc = Math.PI / 180.0; + // 1 degree resolution + if (Math.abs(start - end) < inc) { + inc = Math.abs(start - end); + } + // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi + p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0); + if (dTheta < 0) { + for(t = start - inc; t > end; t -= inc){ + p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + } else { + for(t = start + inc; t < end; t += inc){ + p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + } + p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + return len; + } + } + return 0; + } + getPointOnLine(dist, p1x, p1y, p2x, p2y) { + let fromX = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : p1x, fromY = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : p1y; + const m = (p2y - p1y) / (p2x - p1x + PSEUDO_ZERO); + let run = Math.sqrt(dist * dist / (1 + m * m)); + if (p2x < p1x) { + run *= -1; + } + let rise = m * run; + let pt = null; + if (p2x === p1x) { + pt = { + x: fromX, + y: fromY + rise + }; + } else if ((fromY - p1y) / (fromX - p1x + PSEUDO_ZERO) === m) { + pt = { + x: fromX + run, + y: fromY + rise + }; + } else { + let ix = 0; + let iy = 0; + const len = this.getLineLength(p1x, p1y, p2x, p2y); + if (len < PSEUDO_ZERO) { + return null; + } + let u = (fromX - p1x) * (p2x - p1x) + (fromY - p1y) * (p2y - p1y); + u /= len * len; + ix = p1x + u * (p2x - p1x); + iy = p1y + u * (p2y - p1y); + const pRise = this.getLineLength(fromX, fromY, ix, iy); + const pRun = Math.sqrt(dist * dist - pRise * pRise); + run = Math.sqrt(pRun * pRun / (1 + m * m)); + if (p2x < p1x) { + run *= -1; + } + rise = m * run; + pt = { + x: ix + run, + y: iy + rise + }; + } + return pt; + } + getPointOnPath(distance) { + const fullLen = this.getPathLength(); + let cumulativePathLength = 0; + let p = null; + if (distance < -0.00005 || distance - 0.00005 > fullLen) { + return null; + } + const { dataArray } = this; + for (const command of dataArray){ + if (command && (command.pathLength < 0.00005 || cumulativePathLength + command.pathLength + 0.00005 < distance)) { + cumulativePathLength += command.pathLength; + continue; + } + const delta = distance - cumulativePathLength; + let currentT = 0; + switch(command.type){ + case PathParser.LINE_TO: + p = this.getPointOnLine(delta, command.start.x, command.start.y, command.points[0], command.points[1], command.start.x, command.start.y); + break; + case PathParser.ARC: + { + const start = command.points[4]; + // 4 = theta + const dTheta = command.points[5]; + // 5 = dTheta + const end = command.points[4] + dTheta; + currentT = start + delta / command.pathLength * dTheta; + if (dTheta < 0 && currentT < end || dTheta >= 0 && currentT > end) { + break; + } + p = this.getPointOnEllipticalArc(command.points[0], command.points[1], command.points[2], command.points[3], currentT, command.points[6]); + break; + } + case PathParser.CURVE_TO: + currentT = delta / command.pathLength; + if (currentT > 1) { + currentT = 1; + } + p = this.getPointOnCubicBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3], command.points[4], command.points[5]); + break; + case PathParser.QUAD_TO: + currentT = delta / command.pathLength; + if (currentT > 1) { + currentT = 1; + } + p = this.getPointOnQuadraticBezier(currentT, command.start.x, command.start.y, command.points[0], command.points[1], command.points[2], command.points[3]); + break; + } + if (p) { + return p; + } + break; + } + return null; + } + getLineLength(x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + } + getPathLength() { + if (this.pathLength === -1) { + this.pathLength = this.dataArray.reduce((length, command)=>command.pathLength > 0 ? length + command.pathLength : length, 0); + } + return this.pathLength; + } + getPointOnCubicBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) { + const x = p4x * CB1(pct) + p3x * CB2(pct) + p2x * CB3(pct) + p1x * CB4(pct); + const y = p4y * CB1(pct) + p3y * CB2(pct) + p2y * CB3(pct) + p1y * CB4(pct); + return { + x, + y + }; + } + getPointOnQuadraticBezier(pct, p1x, p1y, p2x, p2y, p3x, p3y) { + const x = p3x * QB1(pct) + p2x * QB2(pct) + p1x * QB3(pct); + const y = p3y * QB1(pct) + p2y * QB2(pct) + p1y * QB3(pct); + return { + x, + y + }; + } + getPointOnEllipticalArc(cx, cy, rx, ry, theta, psi) { + const cosPsi = Math.cos(psi); + const sinPsi = Math.sin(psi); + const pt = { + x: rx * Math.cos(theta), + y: ry * Math.sin(theta) + }; + return { + x: cx + (pt.x * cosPsi - pt.y * sinPsi), + y: cy + (pt.x * sinPsi + pt.y * cosPsi) + }; + } + // TODO need some optimisations. possibly build cache only for curved segments? + buildEquidistantCache(inputStep, inputPrecision) { + const fullLen = this.getPathLength(); + const precision = inputPrecision || 0.25 // accuracy vs performance + ; + const step = inputStep || fullLen / 100; + if (!this.equidistantCache || this.equidistantCache.step !== step || this.equidistantCache.precision !== precision) { + // Prepare cache + this.equidistantCache = { + step, + precision, + points: [] + }; + // Calculate points + let s = 0; + for(let l = 0; l <= fullLen; l += precision){ + const p0 = this.getPointOnPath(l); + const p1 = this.getPointOnPath(l + precision); + if (!p0 || !p1) { + continue; + } + s += this.getLineLength(p0.x, p0.y, p1.x, p1.y); + if (s >= step) { + this.equidistantCache.points.push({ + x: p0.x, + y: p0.y, + distance: l + }); + s -= step; + } + } + } + } + getEquidistantPointOnPath(targetDistance, step, precision) { + this.buildEquidistantCache(step, precision); + if (targetDistance < 0 || targetDistance - this.getPathLength() > 0.00005) { + return null; + } + const idx = Math.round(targetDistance / this.getPathLength() * (this.equidistantCache.points.length - 1)); + return this.equidistantCache.points[idx] || null; + } + } + + // groups: 1: mime-type (+ charset), 2: mime-type (w/o charset), 3: charset, 4: base64?, 5: body + const dataUriRegex = /^\s*data:(([^/,;]+\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i; + class ImageElement extends RenderedElement { + type = "image"; + loaded = false; + image; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + const href = this.getHrefAttribute().getString(); + if (!href) { + return; + } + const isSvg = href.endsWith(".svg") || /^\s*data:image\/svg\+xml/i.test(href); + document.images.push(this); + if (!isSvg) { + void this.loadImage(href); + } else { + void this.loadSvg(href); + } + } + async loadImage(href) { + try { + const image = await this.document.createImage(href); + this.image = image; + } catch (err) { + console.error(`Error while loading image "${href}":`, err); + } + this.loaded = true; + } + async loadSvg(href) { + const match = dataUriRegex.exec(href); + if (match) { + const data = match[5]; + if (data) { + if (match[4] === "base64") { + this.image = atob(data); + } else { + this.image = decodeURIComponent(data); + } + } + } else { + try { + const response = await this.document.fetch(href); + const svg = await response.text(); + this.image = svg; + } catch (err) { + console.error(`Error while loading image "${href}":`, err); + } + } + this.loaded = true; + } + renderChildren(ctx) { + const { document, image, loaded } = this; + const x = this.getAttribute("x").getPixels("x"); + const y = this.getAttribute("y").getPixels("y"); + const width = this.getStyle("width").getPixels("x"); + const height = this.getStyle("height").getPixels("y"); + if (!loaded || !image || !width || !height) { + return; + } + ctx.save(); + ctx.translate(x, y); + if (typeof image === "string") { + const subDocument = document.canvg.forkString(ctx, image, { + ignoreMouse: true, + ignoreAnimation: true, + ignoreDimensions: true, + ignoreClear: true, + offsetX: 0, + offsetY: 0, + scaleWidth: width, + scaleHeight: height + }); + const { documentElement } = subDocument.document; + if (documentElement) { + documentElement.parent = this; + } + void subDocument.render(); + } else { + document.setViewBox({ + ctx, + aspectRatio: this.getAttribute("preserveAspectRatio").getString(), + width, + desiredWidth: image.width, + height, + desiredHeight: image.height + }); + if (this.loaded) { + if (!("complete" in image) || image.complete) { + ctx.drawImage(image, 0, 0); + } + } + } + ctx.restore(); + } + getBoundingBox() { + const x = this.getAttribute("x").getPixels("x"); + const y = this.getAttribute("y").getPixels("y"); + const width = this.getStyle("width").getPixels("x"); + const height = this.getStyle("height").getPixels("y"); + return new BoundingBox(x, y, x + width, y + height); + } + } + + class SymbolElement extends RenderedElement { + type = "symbol"; + render(_) { + // NO RENDER + } + } + + class SVGFontLoader { + document; + loaded; + constructor(document){ + this.document = document; + this.loaded = false; + document.fonts.push(this); + } + async load(fontFamily, url) { + try { + const { document } = this; + const svgDocument = await document.canvg.parser.load(url); + const fonts = svgDocument.getElementsByTagName("font"); + Array.from(fonts).forEach((fontNode)=>{ + const font = document.createElement(fontNode); + document.definitions[fontFamily] = font; + }); + } catch (err) { + console.error(`Error while loading font "${url}":`, err); + } + this.loaded = true; + } + } + + class StyleElement extends Element { + static parseExternalUrl = parseExternalUrl; + type = "style"; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + const css = compressSpaces(Array.from(node.childNodes)// NEED TEST + .map((_)=>_.textContent).join("").replace(/(\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, "") // remove comments + .replace(/@import.*;/g, "") // remove imports + ); + const cssDefs = css.split("}"); + cssDefs.forEach((_)=>{ + const def = _.trim(); + if (!def) { + return; + } + const cssParts = def.split("{"); + const cssClasses = cssParts[0].split(","); + const cssProps = cssParts[1].split(";"); + cssClasses.forEach((_)=>{ + const cssClass = _.trim(); + if (!cssClass) { + return; + } + const props = document.styles[cssClass] || {}; + cssProps.forEach((cssProp)=>{ + const prop = cssProp.indexOf(":"); + const name = cssProp.substr(0, prop).trim(); + const value = cssProp.substr(prop + 1, cssProp.length - prop).trim(); + if (name && value) { + props[name] = new Property(document, name, value); + } + }); + document.styles[cssClass] = props; + document.stylesSpecificity[cssClass] = getSelectorSpecificity(cssClass); + if (cssClass === "@font-face") { + const fontFamily = props["font-family"].getString().replace(/"|'/g, ""); + const srcs = props.src.getString().split(","); + srcs.forEach((src)=>{ + if (src.indexOf('format("svg")') > 0) { + const url = parseExternalUrl(src); + if (url) { + void new SVGFontLoader(document).load(fontFamily, url); + } + } + }); + } + }); + }); + } + } + + class UseElement extends RenderedElement { + type = "use"; + cachedElement; + setContext(ctx) { + super.setContext(ctx); + const xAttr = this.getAttribute("x"); + const yAttr = this.getAttribute("y"); + if (xAttr.hasValue()) { + ctx.translate(xAttr.getPixels("x"), 0); + } + if (yAttr.hasValue()) { + ctx.translate(0, yAttr.getPixels("y")); + } + } + path(ctx) { + const { element } = this; + if (element) { + element.path(ctx); + } + } + renderChildren(ctx) { + const { document, element } = this; + if (element) { + let tempSvg = element; + if (element.type === "symbol") { + // render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement) + tempSvg = new SVGElement(document); + tempSvg.attributes.viewBox = new Property(document, "viewBox", element.getAttribute("viewBox").getString()); + tempSvg.attributes.preserveAspectRatio = new Property(document, "preserveAspectRatio", element.getAttribute("preserveAspectRatio").getString()); + tempSvg.attributes.overflow = new Property(document, "overflow", element.getAttribute("overflow").getString()); + tempSvg.children = element.children; + // element is still the parent of the children + element.styles.opacity = new Property(document, "opacity", this.calculateOpacity()); + } + if (tempSvg.type === "svg") { + const widthStyle = this.getStyle("width", false, true); + const heightStyle = this.getStyle("height", false, true); + // if symbol or svg, inherit width/height from me + if (widthStyle.hasValue()) { + tempSvg.attributes.width = new Property(document, "width", widthStyle.getString()); + } + if (heightStyle.hasValue()) { + tempSvg.attributes.height = new Property(document, "height", heightStyle.getString()); + } + } + const oldParent = tempSvg.parent; + tempSvg.parent = this; + tempSvg.render(ctx); + tempSvg.parent = oldParent; + } + } + getBoundingBox(ctx) { + const { element } = this; + if (element) { + return element.getBoundingBox(ctx); + } + return null; + } + elementTransform() { + const { document, element } = this; + if (!element) { + return null; + } + return Transform.fromElement(document, element); + } + get element() { + if (!this.cachedElement) { + this.cachedElement = this.getHrefAttribute().getDefinition(); + } + return this.cachedElement; + } + } + + function imGet(img, x, y, width, _height, rgba) { + return img[y * width * 4 + x * 4 + rgba]; + } + function imSet(img, x, y, width, _height, rgba, val) { + img[y * width * 4 + x * 4 + rgba] = val; + } + function m(matrix, i, v) { + const mi = matrix[i]; + return mi * v; + } + function c(a, m1, m2, m3) { + return m1 + Math.cos(a) * m2 + Math.sin(a) * m3; + } + class FeColorMatrixElement extends Element { + type = "feColorMatrix"; + matrix; + includeOpacity; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + let matrix = toNumbers(this.getAttribute("values").getString()); + switch(this.getAttribute("type").getString("matrix")){ + case "saturate": + { + const s = matrix[0]; + /* eslint-disable array-element-newline */ matrix = [ + 0.213 + 0.787 * s, + 0.715 - 0.715 * s, + 0.072 - 0.072 * s, + 0, + 0, + 0.213 - 0.213 * s, + 0.715 + 0.285 * s, + 0.072 - 0.072 * s, + 0, + 0, + 0.213 - 0.213 * s, + 0.715 - 0.715 * s, + 0.072 + 0.928 * s, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ]; + break; + } + case "hueRotate": + { + const a = matrix[0] * Math.PI / 180.0; + /* eslint-disable array-element-newline */ matrix = [ + c(a, 0.213, 0.787, -0.213), + c(a, 0.715, -0.715, -0.715), + c(a, 0.072, -0.072, 0.928), + 0, + 0, + c(a, 0.213, -0.213, 0.143), + c(a, 0.715, 0.285, 0.140), + c(a, 0.072, -0.072, -0.283), + 0, + 0, + c(a, 0.213, -0.213, -0.787), + c(a, 0.715, -0.715, 0.715), + c(a, 0.072, 0.928, 0.072), + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ]; + break; + } + case "luminanceToAlpha": + /* eslint-disable array-element-newline */ matrix = [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.2125, + 0.7154, + 0.0721, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ]; + break; + } + this.matrix = matrix; + this.includeOpacity = this.getAttribute("includeOpacity").hasValue(); + } + apply(ctx, _x, _y, width, height) { + // assuming x==0 && y==0 for now + const { includeOpacity, matrix } = this; + const srcData = ctx.getImageData(0, 0, width, height); + for(let y = 0; y < height; y++){ + for(let x = 0; x < width; x++){ + const r = imGet(srcData.data, x, y, width, height, 0); + const g = imGet(srcData.data, x, y, width, height, 1); + const b = imGet(srcData.data, x, y, width, height, 2); + const a = imGet(srcData.data, x, y, width, height, 3); + let nr = m(matrix, 0, r) + m(matrix, 1, g) + m(matrix, 2, b) + m(matrix, 3, a) + m(matrix, 4, 1); + let ng = m(matrix, 5, r) + m(matrix, 6, g) + m(matrix, 7, b) + m(matrix, 8, a) + m(matrix, 9, 1); + let nb = m(matrix, 10, r) + m(matrix, 11, g) + m(matrix, 12, b) + m(matrix, 13, a) + m(matrix, 14, 1); + let na = m(matrix, 15, r) + m(matrix, 16, g) + m(matrix, 17, b) + m(matrix, 18, a) + m(matrix, 19, 1); + if (includeOpacity) { + nr = 0; + ng = 0; + nb = 0; + na *= a / 255; + } + imSet(srcData.data, x, y, width, height, 0, nr); + imSet(srcData.data, x, y, width, height, 1, ng); + imSet(srcData.data, x, y, width, height, 2, nb); + imSet(srcData.data, x, y, width, height, 3, na); + } + } + ctx.clearRect(0, 0, width, height); + ctx.putImageData(srcData, 0, 0); + } + } + + class MaskElement extends Element { + static ignoreStyles = [ + "mask", + "transform", + "clip-path" + ]; + type = "mask"; + apply(ctx, element) { + const { document } = this; + // render as temp svg + let x = this.getAttribute("x").getPixels("x"); + let y = this.getAttribute("y").getPixels("y"); + let width = this.getStyle("width").getPixels("x"); + let height = this.getStyle("height").getPixels("y"); + if (!width && !height) { + const boundingBox = new BoundingBox(); + this.children.forEach((child)=>{ + boundingBox.addBoundingBox(child.getBoundingBox(ctx)); + }); + x = Math.floor(boundingBox.x1); + y = Math.floor(boundingBox.y1); + width = Math.floor(boundingBox.width); + height = Math.floor(boundingBox.height); + } + const ignoredStyles = this.removeStyles(element, MaskElement.ignoreStyles); + const maskCanvas = document.createCanvas(x + width, y + height); + const maskCtx = maskCanvas.getContext("2d"); + document.screen.setDefaults(maskCtx); + this.renderChildren(maskCtx); + // convert mask to alpha with a fake node + // TODO: refactor out apply from feColorMatrix + new FeColorMatrixElement(document, { + nodeType: 1, + childNodes: [], + attributes: [ + { + nodeName: "type", + value: "luminanceToAlpha" + }, + { + nodeName: "includeOpacity", + value: "true" + } + ] + }).apply(maskCtx, 0, 0, x + width, y + height); + const tmpCanvas = document.createCanvas(x + width, y + height); + const tmpCtx = tmpCanvas.getContext("2d"); + document.screen.setDefaults(tmpCtx); + element.render(tmpCtx); + tmpCtx.globalCompositeOperation = "destination-in"; + tmpCtx.fillStyle = maskCtx.createPattern(maskCanvas, "no-repeat"); + tmpCtx.fillRect(0, 0, x + width, y + height); + ctx.fillStyle = tmpCtx.createPattern(tmpCanvas, "no-repeat"); + ctx.fillRect(0, 0, x + width, y + height); + // reassign mask + this.restoreStyles(element, ignoredStyles); + } + render(_) { + // NO RENDER + } + } + + const noop = ()=>{ + // NOOP + }; + class ClipPathElement extends Element { + type = "clipPath"; + apply(ctx) { + const { document } = this; + const contextProto = Reflect.getPrototypeOf(ctx); + const { beginPath, closePath } = ctx; + if (contextProto) { + contextProto.beginPath = noop; + contextProto.closePath = noop; + } + Reflect.apply(beginPath, ctx, []); + this.children.forEach((child)=>{ + if (!("path" in child)) { + return; + } + let transform = "elementTransform" in child ? child.elementTransform() : null // handle + ; + if (!transform) { + transform = Transform.fromElement(document, child); + } + if (transform) { + transform.apply(ctx); + } + child.path(ctx); + if (contextProto) { + contextProto.closePath = closePath; + } + if (transform) { + transform.unapply(ctx); + } + }); + Reflect.apply(closePath, ctx, []); + ctx.clip(); + if (contextProto) { + contextProto.beginPath = beginPath; + contextProto.closePath = closePath; + } + } + render(_) { + // NO RENDER + } + } + + class FilterElement extends Element { + static ignoreStyles = [ + "filter", + "transform", + "clip-path" + ]; + type = "filter"; + apply(ctx, element) { + // render as temp svg + const { document, children } = this; + const boundingBox = "getBoundingBox" in element ? element.getBoundingBox(ctx) : null; + if (!boundingBox) { + return; + } + let px = 0; + let py = 0; + children.forEach((child)=>{ + const efd = child.extraFilterDistance || 0; + px = Math.max(px, efd); + py = Math.max(py, efd); + }); + const width = Math.floor(boundingBox.width); + const height = Math.floor(boundingBox.height); + const tmpCanvasWidth = width + 2 * px; + const tmpCanvasHeight = height + 2 * py; + if (tmpCanvasWidth < 1 || tmpCanvasHeight < 1) { + return; + } + const x = Math.floor(boundingBox.x); + const y = Math.floor(boundingBox.y); + const ignoredStyles = this.removeStyles(element, FilterElement.ignoreStyles); + const tmpCanvas = document.createCanvas(tmpCanvasWidth, tmpCanvasHeight); + const tmpCtx = tmpCanvas.getContext("2d"); + document.screen.setDefaults(tmpCtx); + tmpCtx.translate(-x + px, -y + py); + element.render(tmpCtx); + // apply filters + children.forEach((child)=>{ + if (typeof child.apply === "function") { + child.apply(tmpCtx, 0, 0, tmpCanvasWidth, tmpCanvasHeight); + } + }); + // render on me + ctx.drawImage(tmpCanvas, 0, 0, tmpCanvasWidth, tmpCanvasHeight, x - px, y - py, tmpCanvasWidth, tmpCanvasHeight); + this.restoreStyles(element, ignoredStyles); + } + render(_) { + // NO RENDER + } + } + + class FeDropShadowElement extends Element { + type = "feDropShadow"; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.addStylesFromStyleDefinition(); + } + apply(_, _x, _y, _width, _height) { + // TODO: implement + } + } + + class FeMorphologyElement extends Element { + type = "feMorphology"; + apply(_, _x, _y, _width, _height) { + // TODO: implement + } + } + + class FeCompositeElement extends Element { + type = "feComposite"; + apply(_, _x, _y, _width, _height) { + // TODO: implement + } + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function(obj) { + return typeof obj; + }; + } else { + _typeof = function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + return _typeof(obj); + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + /* eslint-disable no-bitwise -- used for calculations */ /* eslint-disable unicorn/prefer-query-selector -- aiming at + backward-compatibility */ /** + * StackBlur - a fast almost Gaussian Blur For Canvas + * + * In case you find this class useful - especially in commercial projects - + * I am not totally unhappy for a small donation to my PayPal account + * mario@quasimondo.de + * + * Or support me on flattr: + * {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}. + * + * @module StackBlur + * @author Mario Klingemann + * Contact: mario@quasimondo.com + * Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html} + * Twitter: @quasimondo + * + * @copyright (c) 2010 Mario Klingemann + * + * 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. + */ var mulTable = [ + 512, + 512, + 456, + 512, + 328, + 456, + 335, + 512, + 405, + 328, + 271, + 456, + 388, + 335, + 292, + 512, + 454, + 405, + 364, + 328, + 298, + 271, + 496, + 456, + 420, + 388, + 360, + 335, + 312, + 292, + 273, + 512, + 482, + 454, + 428, + 405, + 383, + 364, + 345, + 328, + 312, + 298, + 284, + 271, + 259, + 496, + 475, + 456, + 437, + 420, + 404, + 388, + 374, + 360, + 347, + 335, + 323, + 312, + 302, + 292, + 282, + 273, + 265, + 512, + 497, + 482, + 468, + 454, + 441, + 428, + 417, + 405, + 394, + 383, + 373, + 364, + 354, + 345, + 337, + 328, + 320, + 312, + 305, + 298, + 291, + 284, + 278, + 271, + 265, + 259, + 507, + 496, + 485, + 475, + 465, + 456, + 446, + 437, + 428, + 420, + 412, + 404, + 396, + 388, + 381, + 374, + 367, + 360, + 354, + 347, + 341, + 335, + 329, + 323, + 318, + 312, + 307, + 302, + 297, + 292, + 287, + 282, + 278, + 273, + 269, + 265, + 261, + 512, + 505, + 497, + 489, + 482, + 475, + 468, + 461, + 454, + 447, + 441, + 435, + 428, + 422, + 417, + 411, + 405, + 399, + 394, + 389, + 383, + 378, + 373, + 368, + 364, + 359, + 354, + 350, + 345, + 341, + 337, + 332, + 328, + 324, + 320, + 316, + 312, + 309, + 305, + 301, + 298, + 294, + 291, + 287, + 284, + 281, + 278, + 274, + 271, + 268, + 265, + 262, + 259, + 257, + 507, + 501, + 496, + 491, + 485, + 480, + 475, + 470, + 465, + 460, + 456, + 451, + 446, + 442, + 437, + 433, + 428, + 424, + 420, + 416, + 412, + 408, + 404, + 400, + 396, + 392, + 388, + 385, + 381, + 377, + 374, + 370, + 367, + 363, + 360, + 357, + 354, + 350, + 347, + 344, + 341, + 338, + 335, + 332, + 329, + 326, + 323, + 320, + 318, + 315, + 312, + 310, + 307, + 304, + 302, + 299, + 297, + 294, + 292, + 289, + 287, + 285, + 282, + 280, + 278, + 275, + 273, + 271, + 269, + 267, + 265, + 263, + 261, + 259 + ]; + var shgTable = [ + 9, + 11, + 12, + 13, + 13, + 14, + 14, + 15, + 15, + 15, + 15, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 17, + 17, + 17, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 19, + 20, + 20, + 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, + 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, + 22, + 22, + 22, + 22, + 22, + 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, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 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, + 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, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ]; + /** + * @param {string|HTMLCanvasElement} canvas + * @param {Integer} topX + * @param {Integer} topY + * @param {Integer} width + * @param {Integer} height + * @throws {Error|TypeError} + * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata} + */ function getImageDataFromCanvas(canvas, topX, topY, width, height) { + if (typeof canvas === "string") { + canvas = document.getElementById(canvas); + } + if (!canvas || _typeof(canvas) !== "object" || !("getContext" in canvas)) { + throw new TypeError("Expecting canvas with `getContext` method " + "in processCanvasRGB(A) calls!"); + } + var context = canvas.getContext("2d"); + try { + return context.getImageData(topX, topY, width, height); + } catch (e) { + throw new Error("unable to access image data: " + e); + } + } + /** + * @param {HTMLCanvasElement} canvas + * @param {Integer} topX + * @param {Integer} topY + * @param {Integer} width + * @param {Integer} height + * @param {Float} radius + * @returns {undefined} + */ function processCanvasRGBA(canvas, topX, topY, width, height, radius) { + if (isNaN(radius) || radius < 1) { + return; + } + radius |= 0; + var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height); + imageData = processImageDataRGBA(imageData, topX, topY, width, height, radius); + canvas.getContext("2d").putImageData(imageData, topX, topY); + } + /** + * @param {ImageData} imageData + * @param {Integer} topX + * @param {Integer} topY + * @param {Integer} width + * @param {Integer} height + * @param {Float} radius + * @returns {ImageData} + */ function processImageDataRGBA(imageData, topX, topY, width, height, radius) { + var pixels = imageData.data; + var div = 2 * radius + 1; // const w4 = width << 2; + var widthMinus1 = width - 1; + var heightMinus1 = height - 1; + var radiusPlus1 = radius + 1; + var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; + var stackStart = new BlurStack(); + var stack = stackStart; + var stackEnd; + for(var i = 1; i < div; i++){ + stack = stack.next = new BlurStack(); + if (i === radiusPlus1) { + stackEnd = stack; + } + } + stack.next = stackStart; + var stackIn = null, stackOut = null, yw = 0, yi = 0; + var mulSum = mulTable[radius]; + var shgSum = shgTable[radius]; + for(var y = 0; y < height; y++){ + stack = stackStart; + var pr = pixels[yi], pg = pixels[yi + 1], pb = pixels[yi + 2], pa = pixels[yi + 3]; + for(var _i = 0; _i < radiusPlus1; _i++){ + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + var rInSum = 0, gInSum = 0, bInSum = 0, aInSum = 0, rOutSum = radiusPlus1 * pr, gOutSum = radiusPlus1 * pg, bOutSum = radiusPlus1 * pb, aOutSum = radiusPlus1 * pa, rSum = sumFactor * pr, gSum = sumFactor * pg, bSum = sumFactor * pb, aSum = sumFactor * pa; + for(var _i2 = 1; _i2 < radiusPlus1; _i2++){ + var p = yi + ((widthMinus1 < _i2 ? widthMinus1 : _i2) << 2); + var r = pixels[p], g = pixels[p + 1], b = pixels[p + 2], a = pixels[p + 3]; + var rbs = radiusPlus1 - _i2; + rSum += (stack.r = r) * rbs; + gSum += (stack.g = g) * rbs; + bSum += (stack.b = b) * rbs; + aSum += (stack.a = a) * rbs; + rInSum += r; + gInSum += g; + bInSum += b; + aInSum += a; + stack = stack.next; + } + stackIn = stackStart; + stackOut = stackEnd; + for(var x = 0; x < width; x++){ + var paInitial = aSum * mulSum >>> shgSum; + pixels[yi + 3] = paInitial; + if (paInitial !== 0) { + var _a2 = 255 / paInitial; + pixels[yi] = (rSum * mulSum >>> shgSum) * _a2; + pixels[yi + 1] = (gSum * mulSum >>> shgSum) * _a2; + pixels[yi + 2] = (bSum * mulSum >>> shgSum) * _a2; + } else { + pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0; + } + rSum -= rOutSum; + gSum -= gOutSum; + bSum -= bOutSum; + aSum -= aOutSum; + rOutSum -= stackIn.r; + gOutSum -= stackIn.g; + bOutSum -= stackIn.b; + aOutSum -= stackIn.a; + var _p = x + radius + 1; + _p = yw + (_p < widthMinus1 ? _p : widthMinus1) << 2; + rInSum += stackIn.r = pixels[_p]; + gInSum += stackIn.g = pixels[_p + 1]; + bInSum += stackIn.b = pixels[_p + 2]; + aInSum += stackIn.a = pixels[_p + 3]; + rSum += rInSum; + gSum += gInSum; + bSum += bInSum; + aSum += aInSum; + stackIn = stackIn.next; + var _stackOut = stackOut, _r = _stackOut.r, _g = _stackOut.g, _b = _stackOut.b, _a = _stackOut.a; + rOutSum += _r; + gOutSum += _g; + bOutSum += _b; + aOutSum += _a; + rInSum -= _r; + gInSum -= _g; + bInSum -= _b; + aInSum -= _a; + stackOut = stackOut.next; + yi += 4; + } + yw += width; + } + for(var _x = 0; _x < width; _x++){ + yi = _x << 2; + var _pr = pixels[yi], _pg = pixels[yi + 1], _pb = pixels[yi + 2], _pa = pixels[yi + 3], _rOutSum = radiusPlus1 * _pr, _gOutSum = radiusPlus1 * _pg, _bOutSum = radiusPlus1 * _pb, _aOutSum = radiusPlus1 * _pa, _rSum = sumFactor * _pr, _gSum = sumFactor * _pg, _bSum = sumFactor * _pb, _aSum = sumFactor * _pa; + stack = stackStart; + for(var _i3 = 0; _i3 < radiusPlus1; _i3++){ + stack.r = _pr; + stack.g = _pg; + stack.b = _pb; + stack.a = _pa; + stack = stack.next; + } + var yp = width; + var _gInSum = 0, _bInSum = 0, _aInSum = 0, _rInSum = 0; + for(var _i4 = 1; _i4 <= radius; _i4++){ + yi = yp + _x << 2; + var _rbs = radiusPlus1 - _i4; + _rSum += (stack.r = _pr = pixels[yi]) * _rbs; + _gSum += (stack.g = _pg = pixels[yi + 1]) * _rbs; + _bSum += (stack.b = _pb = pixels[yi + 2]) * _rbs; + _aSum += (stack.a = _pa = pixels[yi + 3]) * _rbs; + _rInSum += _pr; + _gInSum += _pg; + _bInSum += _pb; + _aInSum += _pa; + stack = stack.next; + if (_i4 < heightMinus1) { + yp += width; + } + } + yi = _x; + stackIn = stackStart; + stackOut = stackEnd; + for(var _y = 0; _y < height; _y++){ + var _p2 = yi << 2; + pixels[_p2 + 3] = _pa = _aSum * mulSum >>> shgSum; + if (_pa > 0) { + _pa = 255 / _pa; + pixels[_p2] = (_rSum * mulSum >>> shgSum) * _pa; + pixels[_p2 + 1] = (_gSum * mulSum >>> shgSum) * _pa; + pixels[_p2 + 2] = (_bSum * mulSum >>> shgSum) * _pa; + } else { + pixels[_p2] = pixels[_p2 + 1] = pixels[_p2 + 2] = 0; + } + _rSum -= _rOutSum; + _gSum -= _gOutSum; + _bSum -= _bOutSum; + _aSum -= _aOutSum; + _rOutSum -= stackIn.r; + _gOutSum -= stackIn.g; + _bOutSum -= stackIn.b; + _aOutSum -= stackIn.a; + _p2 = _x + ((_p2 = _y + radiusPlus1) < heightMinus1 ? _p2 : heightMinus1) * width << 2; + _rSum += _rInSum += stackIn.r = pixels[_p2]; + _gSum += _gInSum += stackIn.g = pixels[_p2 + 1]; + _bSum += _bInSum += stackIn.b = pixels[_p2 + 2]; + _aSum += _aInSum += stackIn.a = pixels[_p2 + 3]; + stackIn = stackIn.next; + _rOutSum += _pr = stackOut.r; + _gOutSum += _pg = stackOut.g; + _bOutSum += _pb = stackOut.b; + _aOutSum += _pa = stackOut.a; + _rInSum -= _pr; + _gInSum -= _pg; + _bInSum -= _pb; + _aInSum -= _pa; + stackOut = stackOut.next; + yi += width; + } + } + return imageData; + } + /** + * + */ var BlurStack = /** + * Set properties. + */ function BlurStack() { + _classCallCheck(this, BlurStack); + this.r = 0; + this.g = 0; + this.b = 0; + this.a = 0; + this.next = null; + }; + + class FeGaussianBlurElement extends Element { + type = "feGaussianBlur"; + extraFilterDistance; + blurRadius; + constructor(document, node, captureTextNodes){ + super(document, node, captureTextNodes); + this.blurRadius = Math.floor(this.getAttribute("stdDeviation").getNumber()); + this.extraFilterDistance = this.blurRadius; + } + apply(ctx, x, y, width, height) { + const { document, blurRadius } = this; + const body = document.window ? document.window.document.body : null; + const canvas = ctx.canvas; + // StackBlur requires canvas be on document + canvas.id = document.getUniqueId(); + if (body) { + canvas.style.display = "none"; + body.appendChild(canvas); + } + processCanvasRGBA(canvas, x, y, width, height, blurRadius); + if (body) { + body.removeChild(canvas); + } + } + } + + class TitleElement extends Element { + type = "title"; + } + + class DescElement extends Element { + type = "desc"; + } + + const elements = { + "svg": SVGElement, + "rect": RectElement, + "circle": CircleElement, + "ellipse": EllipseElement, + "line": LineElement, + "polyline": PolylineElement, + "polygon": PolygonElement, + "path": PathElement, + "pattern": PatternElement, + "marker": MarkerElement, + "defs": DefsElement, + "linearGradient": LinearGradientElement, + "radialGradient": RadialGradientElement, + "stop": StopElement, + "animate": AnimateElement, + "animateColor": AnimateColorElement, + "animateTransform": AnimateTransformElement, + "font": FontElement, + "font-face": FontFaceElement, + "missing-glyph": MissingGlyphElement, + "glyph": GlyphElement, + "text": TextElement, + "tspan": TSpanElement, + "tref": TRefElement, + "a": AElement, + "textPath": TextPathElement, + "image": ImageElement, + "g": GElement, + "symbol": SymbolElement, + "style": StyleElement, + "use": UseElement, + "mask": MaskElement, + "clipPath": ClipPathElement, + "filter": FilterElement, + "feDropShadow": FeDropShadowElement, + "feMorphology": FeMorphologyElement, + "feComposite": FeCompositeElement, + "feColorMatrix": FeColorMatrixElement, + "feGaussianBlur": FeGaussianBlurElement, + "title": TitleElement, + "desc": DescElement + }; + + function createCanvas(width, height) { + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } + async function createImage(src) { + let anonymousCrossOrigin = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + const image = document.createElement("img"); + if (anonymousCrossOrigin) { + image.crossOrigin = "Anonymous"; + } + return new Promise((resolve, reject)=>{ + image.onload = ()=>{ + resolve(image); + }; + image.onerror = (_event, _source, _lineno, _colno, error)=>{ + reject(error); + }; + image.src = src; + }); + } + const DEFAULT_EM_SIZE = 12; + class Document { + canvg; + static createCanvas = createCanvas; + static createImage = createImage; + static elementTypes = elements; + rootEmSize; + documentElement; + screen; + createCanvas; + createImage; + definitions; + styles; + stylesSpecificity; + images; + fonts; + emSizeStack; + uniqueId; + constructor(canvg, { rootEmSize = DEFAULT_EM_SIZE, emSize = DEFAULT_EM_SIZE, createCanvas = Document.createCanvas, createImage = Document.createImage, anonymousCrossOrigin } = {}){ + this.canvg = canvg; + this.definitions = {}; + this.styles = {}; + this.stylesSpecificity = {}; + this.images = []; + this.fonts = []; + this.emSizeStack = []; + this.uniqueId = 0; + this.screen = canvg.screen; + this.rootEmSize = rootEmSize; + this.emSize = emSize; + this.createCanvas = createCanvas; + this.createImage = this.bindCreateImage(createImage, anonymousCrossOrigin); + this.screen.wait(()=>this.isImagesLoaded()); + this.screen.wait(()=>this.isFontsLoaded()); + } + bindCreateImage(createImage, anonymousCrossOrigin) { + if (typeof anonymousCrossOrigin === "boolean") { + return (source, forceAnonymousCrossOrigin)=>createImage(source, typeof forceAnonymousCrossOrigin === "boolean" ? forceAnonymousCrossOrigin : anonymousCrossOrigin); + } + return createImage; + } + get window() { + return this.screen.window; + } + get fetch() { + return this.screen.fetch; + } + get ctx() { + return this.screen.ctx; + } + get emSize() { + const { emSizeStack } = this; + return emSizeStack[emSizeStack.length - 1] || DEFAULT_EM_SIZE; + } + set emSize(value) { + const { emSizeStack } = this; + emSizeStack.push(value); + } + popEmSize() { + const { emSizeStack } = this; + emSizeStack.pop(); + } + getUniqueId() { + return `canvg${++this.uniqueId}`; + } + isImagesLoaded() { + return this.images.every((_)=>_.loaded); + } + isFontsLoaded() { + return this.fonts.every((_)=>_.loaded); + } + createDocumentElement(document1) { + const documentElement = this.createElement(document1.documentElement); + documentElement.root = true; + documentElement.addStylesFromStyleDefinition(); + this.documentElement = documentElement; + return documentElement; + } + createElement(node) { + const elementType = node.nodeName.replace(/^[^:]+:/, ""); + const ElementType = Document.elementTypes[elementType]; + if (ElementType) { + return new ElementType(this, node); + } + return new UnknownElement(this, node); + } + createTextNode(node) { + return new TextNode(this, node); + } + setViewBox(config) { + this.screen.setViewBox({ + document: this, + ...config + }); + } + } + + /** + * SVG renderer on canvas. + */ class Canvg { + /** + * Create Canvg instance from SVG source string or URL. + * @param ctx - Rendering context. + * @param svg - SVG source string or URL. + * @param options - Rendering options. + * @returns Canvg instance. + */ static async from(ctx, svg) { + let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + const parser = new Parser(options); + const svgDocument = await parser.parse(svg); + return new Canvg(ctx, svgDocument, options); + } + /** + * Create Canvg instance from SVG source string. + * @param ctx - Rendering context. + * @param svg - SVG source string. + * @param options - Rendering options. + * @returns Canvg instance. + */ static fromString(ctx, svg) { + let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + const parser = new Parser(options); + const svgDocument = parser.parseFromString(svg); + return new Canvg(ctx, svgDocument, options); + } + /** + * XML/HTML parser instance. + */ parser; + /** + * Screen instance. + */ screen; + /** + * Canvg Document. + */ document; + documentElement; + options; + /** + * Main constructor. + * @param ctx - Rendering context. + * @param svg - SVG Document. + * @param options - Rendering options. + */ constructor(ctx, svg, options = {}){ + this.parser = new Parser(options); + this.screen = new Screen(ctx, options); + this.options = options; + const document = new Document(this, options); + const documentElement = document.createDocumentElement(svg); + this.document = document; + this.documentElement = documentElement; + } + /** + * Create new Canvg instance with inherited options. + * @param ctx - Rendering context. + * @param svg - SVG source string or URL. + * @param options - Rendering options. + * @returns Canvg instance. + */ fork(ctx, svg) { + let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + return Canvg.from(ctx, svg, { + ...this.options, + ...options + }); + } + /** + * Create new Canvg instance with inherited options. + * @param ctx - Rendering context. + * @param svg - SVG source string. + * @param options - Rendering options. + * @returns Canvg instance. + */ forkString(ctx, svg) { + let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + return Canvg.fromString(ctx, svg, { + ...this.options, + ...options + }); + } + /** + * Document is ready promise. + * @returns Ready promise. + */ ready() { + return this.screen.ready(); + } + /** + * Document is ready value. + * @returns Is ready or not. + */ isReady() { + return this.screen.isReady(); + } + /** + * Render only first frame, ignoring animations and mouse. + * @param options - Rendering options. + */ async render() { + let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + this.start({ + enableRedraw: true, + ignoreAnimation: true, + ignoreMouse: true, + ...options + }); + await this.ready(); + this.stop(); + } + /** + * Start rendering. + * @param options - Render options. + */ start() { + let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + const { documentElement, screen, options: baseOptions } = this; + screen.start(documentElement, { + enableRedraw: true, + ...baseOptions, + ...options + }); + } + /** + * Stop rendering. + */ stop() { + this.screen.stop(); + } + /** + * Resize SVG to fit in given size. + * @param width + * @param height + * @param preserveAspectRatio + */ resize(width) { + let height = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : width, preserveAspectRatio = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; + this.documentElement.resize(width, height, preserveAspectRatio); + } + } + + exports.AElement = AElement; + exports.AnimateColorElement = AnimateColorElement; + exports.AnimateElement = AnimateElement; + exports.AnimateTransformElement = AnimateTransformElement; + exports.BoundingBox = BoundingBox; + exports.CB1 = CB1; + exports.CB2 = CB2; + exports.CB3 = CB3; + exports.CB4 = CB4; + exports.Canvg = Canvg; + exports.CircleElement = CircleElement; + exports.ClipPathElement = ClipPathElement; + exports.DefsElement = DefsElement; + exports.DescElement = DescElement; + exports.Document = Document; + exports.Element = Element; + exports.EllipseElement = EllipseElement; + exports.FeColorMatrixElement = FeColorMatrixElement; + exports.FeCompositeElement = FeCompositeElement; + exports.FeDropShadowElement = FeDropShadowElement; + exports.FeGaussianBlurElement = FeGaussianBlurElement; + exports.FeMorphologyElement = FeMorphologyElement; + exports.FilterElement = FilterElement; + exports.Font = Font; + exports.FontElement = FontElement; + exports.FontFaceElement = FontFaceElement; + exports.GElement = GElement; + exports.GlyphElement = GlyphElement; + exports.GradientElement = GradientElement; + exports.ImageElement = ImageElement; + exports.LineElement = LineElement; + exports.LinearGradientElement = LinearGradientElement; + exports.MarkerElement = MarkerElement; + exports.MaskElement = MaskElement; + exports.Matrix = Matrix; + exports.MissingGlyphElement = MissingGlyphElement; + exports.Mouse = Mouse; + exports.PSEUDO_ZERO = PSEUDO_ZERO; + exports.Parser = Parser; + exports.PathElement = PathElement; + exports.PathParser = PathParser; + exports.PatternElement = PatternElement; + exports.Point = Point; + exports.PolygonElement = PolygonElement; + exports.PolylineElement = PolylineElement; + exports.Property = Property; + exports.QB1 = QB1; + exports.QB2 = QB2; + exports.QB3 = QB3; + exports.RadialGradientElement = RadialGradientElement; + exports.RectElement = RectElement; + exports.RenderedElement = RenderedElement; + exports.Rotate = Rotate; + exports.SVGElement = SVGElement; + exports.SVGFontLoader = SVGFontLoader; + exports.Scale = Scale; + exports.Screen = Screen; + exports.Skew = Skew; + exports.SkewX = SkewX; + exports.SkewY = SkewY; + exports.StopElement = StopElement; + exports.StyleElement = StyleElement; + exports.SymbolElement = SymbolElement; + exports.TRefElement = TRefElement; + exports.TSpanElement = TSpanElement; + exports.TextElement = TextElement; + exports.TextPathElement = TextPathElement; + exports.TitleElement = TitleElement; + exports.Transform = Transform; + exports.Translate = Translate; + exports.UnknownElement = UnknownElement; + exports.UseElement = UseElement; + exports.ViewPort = ViewPort; + exports.compressSpaces = compressSpaces; + exports.elements = elements; + exports.getSelectorSpecificity = getSelectorSpecificity; + exports.normalizeAttributeName = normalizeAttributeName; + exports.normalizeColor = normalizeColor; + exports.parseExternalUrl = parseExternalUrl; + exports.presets = index; + exports.toMatrixValue = toMatrixValue; + exports.toNumbers = toNumbers; + exports.trimLeft = trimLeft; + exports.trimRight = trimRight; + exports.vectorMagnitude = vectorMagnitude; + exports.vectorsAngle = vectorsAngle; + exports.vectorsRatio = vectorsRatio; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=umd.js.map diff --git a/lib/canvg/dist/umd.js.map b/lib/canvg/dist/umd.js.map new file mode 100644 index 0000000..e8249c5 --- /dev/null +++ b/lib/canvg/dist/umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"umd.js","sources":["../src/presets/offscreen.ts","../src/presets/node.ts","../src/util/string.ts","../src/util/styles.ts","../src/util/math.ts","../node_modules/performance-now/lib/performance-now.js","../node_modules/raf/index.js","../node_modules/rgbcolor/index.js","../src/Property.ts","../src/ViewPort.ts","../src/Point.ts","../src/Mouse.ts","../src/Screen.ts","../src/Parser.ts","../src/Transform/Translate.ts","../src/Transform/Rotate.ts","../src/Transform/Scale.ts","../src/Transform/Matrix.ts","../src/Transform/Skew.ts","../src/Transform/SkewX.ts","../src/Transform/SkewY.ts","../src/Transform/Transform.ts","../src/Document/Element.ts","../src/Document/UnknownElement.ts","../src/Font.ts","../src/BoundingBox.ts","../src/Document/RenderedElement.ts","../src/Document/TextElement.ts","../src/Document/TSpanElement.ts","../src/Document/TextNode.ts","../node_modules/svg-pathdata/lib/SVGPathData.module.js","../src/PathParser.ts","../src/Document/PathElement.ts","../src/Document/SVGElement.ts","../src/Document/RectElement.ts","../src/Document/CircleElement.ts","../src/Document/EllipseElement.ts","../src/Document/LineElement.ts","../src/Document/PolylineElement.ts","../src/Document/PolygonElement.ts","../src/Document/PatternElement.ts","../src/Document/MarkerElement.ts","../src/Document/DefsElement.ts","../src/Document/GElement.ts","../src/Document/GradientElement.ts","../src/Document/LinearGradientElement.ts","../src/Document/RadialGradientElement.ts","../src/Document/StopElement.ts","../src/Document/AnimateElement.ts","../src/Document/AnimateColorElement.ts","../src/Document/AnimateTransformElement.ts","../src/Document/FontFaceElement.ts","../src/Document/GlyphElement.ts","../src/Document/MissingGlyphElement.ts","../src/Document/FontElement.ts","../src/Document/TRefElement.ts","../src/Document/AElement.ts","../src/Document/TextPathElement.ts","../src/Document/ImageElement.ts","../src/Document/SymbolElement.ts","../src/SVGFontLoader.ts","../src/Document/StyleElement.ts","../src/Document/UseElement.ts","../src/Document/FeColorMatrixElement.ts","../src/Document/MaskElement.ts","../src/Document/ClipPathElement.ts","../src/Document/FilterElement.ts","../src/Document/FeDropShadowElement.ts","../src/Document/FeMorphologyElement.ts","../src/Document/FeCompositeElement.ts","../node_modules/stackblur-canvas/dist/stackblur-es.js","../src/Document/FeGaussianBlurElement.ts","../src/Document/TitleElement.ts","../src/Document/DescElement.ts","../src/Document/elements.ts","../src/Document/Document.ts","../src/Canvg.ts"],"sourcesContent":["import { DOMParser } from './types'\n\ninterface IConfig {\n /**\n * XML/HTML parser from string into DOM Document.\n */\n DOMParser?: DOMParser\n}\n\n/**\n * Options preset for `OffscreenCanvas`.\n * @param config - Preset requirements.\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\n * @returns Preset object.\n */\nexport function offscreen({ DOMParser: DOMParserFallback }: IConfig = {}) {\n const preset = {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser: DOMParserFallback,\n createCanvas(width: number, height: number) {\n return new OffscreenCanvas(width, height)\n },\n async createImage(url: string) {\n const response = await fetch(url)\n const blob = await response.blob()\n const img = await createImageBitmap(blob)\n\n return img\n }\n }\n\n if (typeof globalThis.DOMParser !== 'undefined'\n || typeof DOMParserFallback === 'undefined'\n ) {\n Reflect.deleteProperty(preset, 'DOMParser')\n }\n\n return preset\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DOMParser } from './types'\n\n/**\n * `node-canvas` exports.\n */\ninterface ICanvas {\n createCanvas(width: number, height: number): any\n loadImage(src: string): Promise\n}\n\n/**\n * WHATWG-compatible `fetch` function.\n */\ntype Fetch = (input: any, config?: any) => Promise\n\ninterface IConfig {\n /**\n * XML/HTML parser from string into DOM Document.\n */\n DOMParser: DOMParser\n /**\n * `node-canvas` exports.\n */\n canvas: ICanvas\n /**\n * WHATWG-compatible `fetch` function.\n */\n fetch: Fetch\n}\n\n/**\n * Options preset for `node-canvas`.\n * @param config - Preset requirements.\n * @param config.DOMParser - XML/HTML parser from string into DOM Document.\n * @param config.canvas - `node-canvas` exports.\n * @param config.fetch - WHATWG-compatible `fetch` function.\n * @returns Preset object.\n */\nexport function node({\n DOMParser,\n canvas,\n fetch\n}: IConfig) {\n return {\n window: null,\n ignoreAnimation: true,\n ignoreMouse: true,\n DOMParser,\n fetch,\n createCanvas: canvas.createCanvas,\n createImage: canvas.loadImage\n }\n}\n","import { MatrixValue } from '../types'\n\n/**\n * HTML-safe compress white-spaces.\n * @param str - String to compress.\n * @returns String.\n */\nexport function compressSpaces(str: string) {\n return str.replace(/(?!\\u3000)\\s+/gm, ' ')\n}\n\n/**\n * HTML-safe left trim.\n * @param str - String to trim.\n * @returns String.\n */\nexport function trimLeft(str: string) {\n return str.replace(/^[\\n \\t]+/, '')\n}\n\n/**\n * HTML-safe right trim.\n * @param str - String to trim.\n * @returns String.\n */\nexport function trimRight(str: string) {\n return str.replace(/[\\n \\t]+$/, '')\n}\n\n/**\n * String to numbers array.\n * @param str - Numbers string.\n * @returns Numbers array.\n */\nexport function toNumbers(str: string) {\n const matches = str.match(/-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)/gm)\n\n return matches ? matches.map(parseFloat) : []\n}\n\n/**\n * String to matrix value.\n * @param str - Numbers string.\n * @returns Matrix value.\n */\nexport function toMatrixValue(str: string): MatrixValue {\n const numbers = toNumbers(str)\n const matrix = [\n numbers[0] || 0,\n numbers[1] || 0,\n numbers[2] || 0,\n numbers[3] || 0,\n numbers[4] || 0,\n numbers[5] || 0\n ] as const\n\n return matrix\n}\n\n// Microsoft Edge fix\nconst allUppercase = /^[A-Z-]+$/\n\n/**\n * Normalize attribute name.\n * @param name - Attribute name.\n * @returns Normalized attribute name.\n */\nexport function normalizeAttributeName(name: string) {\n if (allUppercase.test(name)) {\n return name.toLowerCase()\n }\n\n return name\n}\n\n/**\n * Parse external URL.\n * @param url - CSS url string.\n * @returns Parsed URL.\n */\nexport function parseExternalUrl(url: string): string {\n // single quotes [2]\n // v double quotes [3]\n // v v no quotes [4]\n // v v v\n const urlMatch = /url\\(('([^']+)'|\"([^\"]+)\"|([^'\")]+))\\)/.exec(url)\n\n if (!urlMatch) {\n return ''\n }\n\n return urlMatch[2] || urlMatch[3] || urlMatch[4] || ''\n}\n\n/**\n * Transform floats to integers in rgb colors.\n * @param color - Color to normalize.\n * @returns Normalized color.\n */\nexport function normalizeColor(color: string) {\n if (!color.startsWith('rgb')) {\n return color\n }\n\n let rgbParts = 3\n const normalizedColor = color.replace(\n /\\d+(\\.\\d+)?/g,\n (num, isFloat) => (rgbParts-- && isFloat\n ? String(Math.round(parseFloat(num)))\n : num)\n )\n\n return normalizedColor\n}\n","\n// slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js\nconst attributeRegex = /(\\[[^\\]]+\\])/g\nconst idRegex = /(#[^\\s+>~.[:]+)/g\nconst classRegex = /(\\.[^\\s+>~.[:]+)/g\nconst pseudoElementRegex = /(::[^\\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi\nconst pseudoClassWithBracketsRegex = /(:[\\w-]+\\([^)]*\\))/gi\nconst pseudoClassRegex = /(:[^\\s+>~.[:]+)/g\nconst elementRegex = /([^\\s+>~.[:]+)/g\n\nfunction findSelectorMatch(selector: string, regex: RegExp): [string, number] {\n const matches = regex.exec(selector)\n\n if (!matches) {\n return [selector, 0]\n }\n\n return [selector.replace(regex, ' '), matches.length]\n}\n\n/**\n * Measure selector specificity.\n * @param selector - Selector to measure.\n * @returns Specificity.\n */\nexport function getSelectorSpecificity(selector: string) {\n const specificity = [\n 0,\n 0,\n 0\n ]\n let currentSelector = selector\n .replace(/:not\\(([^)]*)\\)/g, ' $1 ')\n .replace(/{[\\s\\S]*/gm, ' ')\n let delta = 0;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, attributeRegex)\n specificity[1] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, idRegex)\n specificity[0] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, classRegex)\n specificity[1] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoElementRegex)\n specificity[2] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassWithBracketsRegex)\n specificity[1] += delta;\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, pseudoClassRegex)\n specificity[1] += delta\n\n currentSelector = currentSelector\n .replace(/[*\\s+>~]/g, ' ')\n .replace(/[#.]/g, ' ');\n\n [currentSelector, delta] = findSelectorMatch(currentSelector, elementRegex) // lgtm [js/useless-assignment-to-local]\n specificity[2] += delta\n\n return specificity.join('')\n}\n","import { VectorValue } from '../types'\n\nexport const PSEUDO_ZERO = .00000001\n\n/**\n * Vector magnitude.\n * @param v\n * @returns Number result.\n */\nexport function vectorMagnitude(v: VectorValue) {\n return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2))\n}\n\n/**\n * Ratio between two vectors.\n * @param u\n * @param v\n * @returns Number result.\n */\nexport function vectorsRatio(u: VectorValue, v: VectorValue) {\n return (u[0] * v[0] + u[1] * v[1]) / (vectorMagnitude(u) * vectorMagnitude(v))\n}\n\n/**\n * Angle between two vectors.\n * @param u\n * @param v\n * @returns Number result.\n */\nexport function vectorsAngle(u: VectorValue, v: VectorValue) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vectorsRatio(u, v))\n}\n\nexport function CB1(t: number) {\n return t * t * t\n}\n\nexport function CB2(t: number) {\n return 3 * t * t * (1 - t)\n}\n\nexport function CB3(t: number) {\n return 3 * t * (1 - t) * (1 - t)\n}\n\nexport function CB4(t: number) {\n return (1 - t) * (1 - t) * (1 - t)\n}\n\nexport function QB1(t: number) {\n return t * t\n}\n\nexport function QB2(t: number) {\n return 2 * t * (1 - t)\n}\n\nexport function QB3(t: number) {\n return (1 - t) * (1 - t)\n}\n","// Generated by CoffeeScript 1.12.2\n(function() {\n var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - nodeLoadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n moduleLoadTime = getNanoSeconds();\n upTime = process.uptime() * 1e9;\n nodeLoadTime = moduleLoadTime - upTime;\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n","var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // `cancel` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n","/*\n\tBased on rgbcolor.js by Stoyan Stefanov \n\thttp://www.phpied.com/rgb-color-parser-in-javascript/\n*/\n\nmodule.exports = function(color_string) {\n this.ok = false;\n this.alpha = 1.0;\n\n // strip any leading #\n if (color_string.charAt(0) == '#') { // remove # if any\n color_string = color_string.substr(1,6);\n }\n\n color_string = color_string.replace(/ /g,'');\n color_string = color_string.toLowerCase();\n\n // before getting into regexps, try simple matches\n // and overwrite the input\n var simple_colors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dodgerblue: '1e90ff',\n feldspar: 'd19275',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred : 'cd5c5c',\n indigo : '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslateblue: '8470ff',\n lightslategray: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n rebeccapurple: '663399',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n violetred: 'd02090',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n color_string = simple_colors[color_string] || color_string;\n // emd of simple type-in colors\n\n // array of color definition objects\n var color_defs = [\n {\n re: /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$/,\n example: ['rgba(123, 234, 45, 0.8)', 'rgba(255,234,245,1.0)'],\n process: function (bits){\n return [\n parseInt(bits[1]),\n parseInt(bits[2]),\n parseInt(bits[3]),\n parseFloat(bits[4])\n ];\n }\n },\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\n process: function (bits){\n return [\n parseInt(bits[1]),\n parseInt(bits[2]),\n parseInt(bits[3])\n ];\n }\n },\n {\n re: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n example: ['#00ff00', '336699'],\n process: function (bits){\n return [\n parseInt(bits[1], 16),\n parseInt(bits[2], 16),\n parseInt(bits[3], 16)\n ];\n }\n },\n {\n re: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n example: ['#fb0', 'f0f'],\n process: function (bits){\n return [\n parseInt(bits[1] + bits[1], 16),\n parseInt(bits[2] + bits[2], 16),\n parseInt(bits[3] + bits[3], 16)\n ];\n }\n }\n ];\n\n // search through the definitions to find a match\n for (var i = 0; i < color_defs.length; i++) {\n var re = color_defs[i].re;\n var processor = color_defs[i].process;\n var bits = re.exec(color_string);\n if (bits) {\n var channels = processor(bits);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n if (channels.length > 3) {\n this.alpha = channels[3];\n }\n this.ok = true;\n }\n\n }\n\n // validate/cleanup values\n this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\n this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\n this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\n this.alpha = (this.alpha < 0) ? 0 : ((this.alpha > 1.0 || isNaN(this.alpha)) ? 1.0 : this.alpha);\n\n // some getters\n this.toRGB = function () {\n return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\n }\n this.toRGBA = function () {\n return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + this.alpha + ')';\n }\n this.toHex = function () {\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n if (r.length == 1) r = '0' + r;\n if (g.length == 1) g = '0' + g;\n if (b.length == 1) b = '0' + b;\n return '#' + r + g + b;\n }\n\n // help\n this.getHelpXML = function () {\n\n var examples = new Array();\n // add regexps\n for (var i = 0; i < color_defs.length; i++) {\n var example = color_defs[i].example;\n for (var j = 0; j < example.length; j++) {\n examples[examples.length] = example[j];\n }\n }\n // add type-in colors\n for (var sc in simple_colors) {\n examples[examples.length] = sc;\n }\n\n var xml = document.createElement('ul');\n xml.setAttribute('id', 'rgbcolor-examples');\n for (var i = 0; i < examples.length; i++) {\n try {\n var list_item = document.createElement('li');\n var list_color = new RGBColor(examples[i]);\n var example_div = document.createElement('div');\n example_div.style.cssText =\n 'margin: 3px; '\n + 'border: 1px solid black; '\n + 'background:' + list_color.toHex() + '; '\n + 'color:' + list_color.toHex()\n ;\n example_div.appendChild(document.createTextNode('test'));\n var list_item_value = document.createTextNode(\n ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()\n );\n list_item.appendChild(example_div);\n list_item.appendChild(list_item_value);\n xml.appendChild(list_item);\n\n } catch(e){}\n }\n return xml;\n\n }\n\n}\n","import RGBColor from 'rgbcolor'\nimport {\n compressSpaces,\n normalizeColor\n} from './util'\nimport { Axis } from './ViewPort'\nimport {\n Document,\n Element,\n PathElement,\n PatternElement,\n GradientElement\n} from './Document'\n\nexport class Property {\n static empty(document: Document) {\n return new Property(document, 'EMPTY', '')\n }\n\n static readonly textBaselineMapping: Record = {\n 'baseline': 'alphabetic',\n 'before-edge': 'top',\n 'text-before-edge': 'top',\n 'middle': 'middle',\n 'central': 'middle',\n 'after-edge': 'bottom',\n 'text-after-edge': 'bottom',\n 'ideographic': 'ideographic',\n 'alphabetic': 'alphabetic',\n 'hanging': 'hanging',\n 'mathematical': 'alphabetic'\n }\n\n private isNormalizedColor = false\n\n constructor(\n private readonly document: Document,\n private readonly name: string,\n private value: T\n ) {}\n\n split(separator = ' ') {\n const {\n document,\n name\n } = this\n\n return compressSpaces(this.getString())\n .trim()\n .split(separator)\n .map(value => new Property(document, name, value))\n }\n\n hasValue(zeroIsValue?: boolean) {\n const value = this.value as unknown\n\n return value !== null\n && value !== ''\n && (zeroIsValue || value !== 0)\n && typeof value !== 'undefined'\n }\n\n isString(regexp?: RegExp) {\n const { value } = this\n const result = typeof value === 'string'\n\n if (!result || !regexp) {\n return result\n }\n\n return regexp.test(value)\n }\n\n isUrlDefinition() {\n return this.isString(/^url\\(/)\n }\n\n isPixels() {\n if (!this.hasValue()) {\n return false\n }\n\n const asString = this.getString()\n\n switch (true) {\n case asString.endsWith('px'):\n case /^[0-9]+$/.test(asString):\n return true\n\n default:\n return false\n }\n }\n\n setValue(value: T) {\n this.value = value\n return this\n }\n\n getValue(def?: T) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return this.value\n }\n\n return def\n }\n\n getNumber(def?: T) {\n if (!this.hasValue()) {\n if (typeof def === 'undefined') {\n return 0\n }\n\n // @ts-expect-error Parse unknown value.\n return parseFloat(def)\n }\n\n const { value } = this\n // @ts-expect-error Parse unknown value.\n let n = parseFloat(value)\n\n if (this.isString(/%$/)) {\n n /= 100.0\n }\n\n return n\n }\n\n getString(def?: T) {\n if (typeof def === 'undefined' || this.hasValue()) {\n return typeof this.value === 'undefined'\n ? ''\n : String(this.value)\n }\n\n return String(def)\n }\n\n getColor(def?: T) {\n let color = this.getString(def)\n\n if (this.isNormalizedColor) {\n return color\n }\n\n this.isNormalizedColor = true\n color = normalizeColor(color)\n this.value = color as unknown as T\n\n return color\n }\n\n getDpi() {\n return 96.0 // TODO: compute?\n }\n\n getRem() {\n return this.document.rootEmSize\n }\n\n getEm() {\n return this.document.emSize\n }\n\n getUnits() {\n return this.getString().replace(/[0-9.-]/g, '')\n }\n\n getPixels(axis?: Axis, processPercent?: boolean): number\n getPixels(isFontSize?: boolean): number\n getPixels(axisOrIsFontSize?: Axis | boolean, processPercent = false): number {\n if (!this.hasValue()) {\n return 0\n }\n\n const [axis, isFontSize] = typeof axisOrIsFontSize === 'boolean'\n ? [undefined, axisOrIsFontSize]\n : [axisOrIsFontSize]\n const { viewPort } = this.document.screen\n\n switch (true) {\n case this.isString(/vmin$/):\n return this.getNumber()\n / 100.0\n * Math.min(\n viewPort.computeSize('x'),\n viewPort.computeSize('y')\n )\n\n case this.isString(/vmax$/):\n return this.getNumber()\n / 100.0\n * Math.max(\n viewPort.computeSize('x'),\n viewPort.computeSize('y')\n )\n\n case this.isString(/vw$/):\n return this.getNumber()\n / 100.0\n * viewPort.computeSize('x')\n\n case this.isString(/vh$/):\n return this.getNumber()\n / 100.0\n * viewPort.computeSize('y')\n\n case this.isString(/rem$/):\n return this.getNumber() * this.getRem(/* viewPort */)\n\n case this.isString(/em$/):\n return this.getNumber() * this.getEm(/* viewPort */)\n\n case this.isString(/ex$/):\n return this.getNumber() * this.getEm(/* viewPort */) / 2.0\n\n case this.isString(/px$/):\n return this.getNumber()\n\n case this.isString(/pt$/):\n return this.getNumber() * this.getDpi(/* viewPort */) * (1.0 / 72.0)\n\n case this.isString(/pc$/):\n return this.getNumber() * 15\n\n case this.isString(/cm$/):\n return this.getNumber() * this.getDpi(/* viewPort */) / 2.54\n\n case this.isString(/mm$/):\n return this.getNumber() * this.getDpi(/* viewPort */) / 25.4\n\n case this.isString(/in$/):\n return this.getNumber() * this.getDpi(/* viewPort */)\n\n case this.isString(/%$/) && isFontSize:\n return this.getNumber() * this.getEm(/* viewPort */)\n\n case this.isString(/%$/):\n return this.getNumber() * viewPort.computeSize(axis)\n\n default: {\n const n = this.getNumber()\n\n if (processPercent && n < 1.0) {\n return n * viewPort.computeSize(axis)\n }\n\n return n\n }\n }\n }\n\n getMilliseconds() {\n if (!this.hasValue()) {\n return 0\n }\n\n if (this.isString(/ms$/)) {\n return this.getNumber()\n }\n\n return this.getNumber() * 1000\n }\n\n getRadians() {\n if (!this.hasValue()) {\n return 0\n }\n\n switch (true) {\n case this.isString(/deg$/):\n return this.getNumber() * (Math.PI / 180.0)\n\n case this.isString(/grad$/):\n return this.getNumber() * (Math.PI / 200.0)\n\n case this.isString(/rad$/):\n return this.getNumber()\n\n default:\n return this.getNumber() * (Math.PI / 180.0)\n }\n }\n\n getDefinition() {\n const asString = this.getString()\n const match = /#([^)'\"]+)/.exec(asString)\n const name = match?.[1] || asString\n\n return this.document.definitions[name] as T | undefined\n }\n\n getFillStyleDefinition(element: Element | PathElement, opacity: Property) {\n let def = this.getDefinition()\n\n if (!def) {\n return null\n }\n\n // gradient\n if (typeof def.createGradient === 'function' && 'getBoundingBox' in element) {\n return def.createGradient(\n this.document.ctx,\n element,\n opacity\n )\n }\n\n // pattern\n if (typeof def.createPattern === 'function') {\n if (def.getHrefAttribute().hasValue()) {\n const patternTransform = def.getAttribute('patternTransform')\n\n def = def.getHrefAttribute().getDefinition()\n\n if (def && patternTransform.hasValue()) {\n def.getAttribute('patternTransform', true).setValue(patternTransform.value)\n }\n }\n\n if (def) {\n return def.createPattern(this.document.ctx, element, opacity)\n }\n }\n\n return null\n }\n\n getTextBaseline() {\n if (!this.hasValue()) {\n return null\n }\n\n const key = this.getString()\n\n return Property.textBaselineMapping[key] || null\n }\n\n addOpacity(opacity: Property) {\n let value = this.getColor()\n const len = value.length\n let commas = 0\n\n // Simulate old RGBColor version, which can't parse rgba.\n for (let i = 0; i < len; i++) {\n if (value[i] === ',') {\n commas++\n }\n\n if (commas === 3) {\n break\n }\n }\n\n if (opacity.hasValue() && this.isString() && commas !== 3) {\n const color = new RGBColor(value)\n\n if (color.ok) {\n color.alpha = opacity.getNumber()\n value = color.toRGBA()\n }\n }\n\n return new Property(this.document, this.name, value)\n }\n}\n","\nexport interface IViewPortSize {\n width: number\n height: number\n}\n\nexport type Axis = 'x' | 'y'\n\nexport class ViewPort {\n static DEFAULT_VIEWPORT_WIDTH = 800\n static DEFAULT_VIEWPORT_HEIGHT = 600\n\n viewPorts: IViewPortSize[] = []\n\n clear() {\n this.viewPorts = []\n }\n\n setCurrent(width: number, height: number) {\n this.viewPorts.push({\n width,\n height\n })\n }\n\n removeCurrent() {\n this.viewPorts.pop()\n }\n\n getRoot() {\n const [root] = this.viewPorts\n\n if (!root) {\n return getDefault()\n }\n\n return root\n }\n\n getCurrent() {\n const { viewPorts } = this\n const current = viewPorts[viewPorts.length - 1]\n\n if (!current) {\n return getDefault()\n }\n\n return current\n }\n\n get width() {\n return this.getCurrent().width\n }\n\n get height() {\n return this.getCurrent().height\n }\n\n computeSize(d?: number|Axis) {\n if (typeof d === 'number') {\n return d\n }\n\n if (d === 'x') {\n return this.width\n }\n\n if (d === 'y') {\n return this.height\n }\n\n return Math.sqrt(\n Math.pow(this.width, 2) + Math.pow(this.height, 2)\n ) / Math.sqrt(2)\n }\n}\n\nfunction getDefault() {\n return {\n width: ViewPort.DEFAULT_VIEWPORT_WIDTH,\n height: ViewPort.DEFAULT_VIEWPORT_HEIGHT\n }\n}\n","import { MatrixValue } from './types'\nimport { toNumbers } from './util'\n\nexport class Point {\n static parse(point: string, defaultValue = 0) {\n const [x = defaultValue, y = defaultValue] = toNumbers(point)\n\n return new Point(x, y)\n }\n\n static parseScale(scale: string, defaultValue = 1) {\n const [x = defaultValue, y = x] = toNumbers(scale)\n\n return new Point(x, y)\n }\n\n static parsePath(path: string) {\n const points = toNumbers(path)\n const len = points.length\n const pathPoints: Point[] = []\n\n for (let i = 0; i < len; i += 2) {\n pathPoints.push(new Point(points[i], points[i + 1]))\n }\n\n return pathPoints\n }\n\n constructor(\n public x: number,\n public y: number\n ) {}\n\n angleTo(point: Point) {\n return Math.atan2(point.y - this.y, point.x - this.x)\n }\n\n applyTransform(transform: MatrixValue) {\n const {\n x,\n y\n } = this\n const xp = x * transform[0] + y * transform[2] + transform[4]\n const yp = x * transform[1] + y * transform[3] + transform[5]\n\n this.x = xp\n this.y = yp\n }\n}\n","import { RenderingContext2D } from './types'\nimport { BoundingBox } from './BoundingBox'\nimport { Point } from './Point'\nimport { Screen } from './Screen'\nimport { Element } from './Document'\n\ninterface IEventTarget {\n onClick?(): void\n onMouseMove?(): void\n}\n\nexport interface IEvent {\n type: string\n x: number\n y: number\n run(eventTarget: IEventTarget): void\n}\n\nexport class Mouse {\n private working = false\n private events: IEvent[] = []\n private eventElements: Element[] = []\n\n constructor(\n private readonly screen: Screen\n ) {\n this.onClick = this.onClick.bind(this)\n this.onMouseMove = this.onMouseMove.bind(this)\n }\n\n isWorking() {\n return this.working\n }\n\n start() {\n if (this.working) {\n return\n }\n\n const {\n screen,\n onClick,\n onMouseMove\n } = this\n const canvas = screen.ctx.canvas as HTMLCanvasElement\n\n canvas.onclick = onClick\n canvas.onmousemove = onMouseMove\n this.working = true\n }\n\n stop() {\n if (!this.working) {\n return\n }\n\n const canvas = this.screen.ctx.canvas as HTMLCanvasElement\n\n this.working = false\n canvas.onclick = null\n canvas.onmousemove = null\n }\n\n hasEvents() {\n return this.working && this.events.length > 0\n }\n\n runEvents() {\n if (!this.working) {\n return\n }\n\n const {\n screen: document,\n events,\n eventElements\n } = this\n const { style } = document.ctx.canvas as HTMLCanvasElement\n let element: Element | null | undefined\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (style) {\n style.cursor = ''\n }\n\n events.forEach(({ run }, i) => {\n element = eventElements[i]\n\n while (element) {\n run(element as IEventTarget)\n element = element.parent\n }\n })\n\n // done running, clear\n this.events = []\n this.eventElements = []\n }\n\n checkPath(element: Element, ctx: RenderingContext2D | null) {\n if (!this.working || !ctx) {\n return\n }\n\n const {\n events,\n eventElements\n } = this\n\n events.forEach(({ x, y }, i) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!eventElements[i] && ctx.isPointInPath && ctx.isPointInPath(x, y)) {\n eventElements[i] = element\n }\n })\n }\n\n checkBoundingBox(element: Element, boundingBox: BoundingBox | null) {\n if (!this.working || !boundingBox) {\n return\n }\n\n const {\n events,\n eventElements\n } = this\n\n events.forEach(({ x, y }, i) => {\n if (!eventElements[i] && boundingBox.isPointInBox(x, y)) {\n eventElements[i] = element\n }\n })\n }\n\n private mapXY(x: number, y: number) {\n const {\n window,\n ctx\n } = this.screen\n const point = new Point(x, y)\n let element = ctx.canvas as HTMLElement | null\n\n while (element) {\n point.x -= element.offsetLeft\n point.y -= element.offsetTop\n element = element.offsetParent as HTMLElement | null\n }\n\n if (window?.scrollX) {\n point.x += window.scrollX\n }\n\n if (window?.scrollY) {\n point.y += window.scrollY\n }\n\n return point\n }\n\n private onClick(event: MouseEvent) {\n const {\n x,\n y\n } = this.mapXY(\n event.clientX,\n event.clientY\n )\n\n this.events.push({\n type: 'onclick',\n x,\n y,\n run(eventTarget) {\n if (eventTarget.onClick) {\n eventTarget.onClick()\n }\n }\n })\n }\n\n private onMouseMove(event: MouseEvent) {\n const {\n x,\n y\n } = this.mapXY(\n event.clientX,\n event.clientY\n )\n\n this.events.push({\n type: 'onmousemove',\n x,\n y,\n run(eventTarget) {\n if (eventTarget.onMouseMove) {\n eventTarget.onMouseMove()\n }\n }\n })\n }\n}\n","import requestAnimationFrame from 'raf'\nimport {\n RenderingContext2D,\n Fetch\n} from './types'\nimport {\n compressSpaces,\n toNumbers\n} from './util'\nimport { Property } from './Property'\nimport { ViewPort } from './ViewPort'\nimport { Mouse } from './Mouse'\nimport {\n Document,\n Element,\n AnimateElement\n} from './Document'\n\nexport interface IScreenOptions {\n /**\n * Window object.\n */\n window?: Window | null\n /**\n * WHATWG-compatible `fetch` function.\n */\n fetch?: Fetch\n}\n\nexport interface IScreenStartOptions {\n /**\n * Whether enable the redraw.\n */\n enableRedraw?: boolean\n /**\n * Ignore mouse events.\n */\n ignoreMouse?: boolean\n /**\n * Ignore animations.\n */\n ignoreAnimation?: boolean\n /**\n * Does not try to resize canvas.\n */\n ignoreDimensions?: boolean\n /**\n * Does not clear canvas.\n */\n ignoreClear?: boolean\n /**\n * Scales horizontally to width.\n */\n scaleWidth?: number\n /**\n * Scales vertically to height.\n */\n scaleHeight?: number\n /**\n * Draws at a x offset.\n */\n offsetX?: number\n /**\n * Draws at a y offset.\n */\n offsetY?: number\n /**\n * Will call the function on every frame, if it returns true, will redraw.\n */\n forceRedraw?(): boolean\n}\n\nexport interface IScreenViewBoxConfig {\n document: Document\n ctx: RenderingContext2D\n aspectRatio: string\n width: number\n desiredWidth: number\n height: number\n desiredHeight: number\n minX?: number\n minY?: number\n refX?: number\n refY?: number\n clip?: boolean\n clipX?: number\n clipY?: number\n}\n\nconst defaultWindow = typeof window !== 'undefined'\n ? window\n : null\nconst defaultFetch = typeof fetch !== 'undefined'\n ? fetch.bind(undefined) // `fetch` depends on context: `someObject.fetch(...)` will throw error.\n : undefined\n\nexport class Screen {\n static readonly defaultWindow = defaultWindow\n static readonly defaultFetch = defaultFetch\n static FRAMERATE = 30\n static MAX_VIRTUAL_PIXELS = 30000\n\n readonly window: Window | null\n readonly fetch: Fetch\n readonly viewPort = new ViewPort()\n readonly mouse = new Mouse(this)\n readonly animations: AnimateElement[] = []\n private readyPromise: Promise | undefined\n private resolveReady: (() => void) | undefined\n private waits: (() => boolean)[] = []\n private frameDuration = 0\n private isReadyLock = false\n private isFirstRender = true\n private intervalId: number | null = null\n\n constructor(\n readonly ctx: RenderingContext2D,\n {\n fetch = defaultFetch,\n window = defaultWindow\n }: IScreenOptions = {}\n ) {\n this.window = window\n\n if (!fetch) {\n throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`)\n }\n\n this.fetch = fetch\n }\n\n wait(checker: () => boolean) {\n this.waits.push(checker)\n }\n\n ready() {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (!this.readyPromise) {\n return Promise.resolve()\n }\n\n return this.readyPromise\n }\n\n isReady() {\n if (this.isReadyLock) {\n return true\n }\n\n const isReadyLock = this.waits.every(_ => _())\n\n if (isReadyLock) {\n this.waits = []\n\n if (this.resolveReady) {\n this.resolveReady()\n }\n }\n\n this.isReadyLock = isReadyLock\n\n return isReadyLock\n }\n\n setDefaults(ctx: RenderingContext2D) {\n // initial values and defaults\n ctx.strokeStyle = 'rgba(0,0,0,0)'\n ctx.lineCap = 'butt'\n ctx.lineJoin = 'miter'\n ctx.miterLimit = 4\n }\n\n setViewBox({\n document,\n ctx,\n aspectRatio,\n width,\n desiredWidth,\n height,\n desiredHeight,\n minX = 0,\n minY = 0,\n refX,\n refY,\n clip = false,\n clipX = 0,\n clipY = 0\n }: IScreenViewBoxConfig) {\n // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute\n const cleanAspectRatio = compressSpaces(aspectRatio).replace(/^defer\\s/, '') // ignore defer\n const [aspectRatioAlign, aspectRatioMeetOrSlice] = cleanAspectRatio.split(' ')\n const align = aspectRatioAlign || 'xMidYMid'\n const meetOrSlice = aspectRatioMeetOrSlice || 'meet'\n // calculate scale\n const scaleX = width / desiredWidth\n const scaleY = height / desiredHeight\n const scaleMin = Math.min(scaleX, scaleY)\n const scaleMax = Math.max(scaleX, scaleY)\n let finalDesiredWidth = desiredWidth\n let finalDesiredHeight = desiredHeight\n\n if (meetOrSlice === 'meet') {\n finalDesiredWidth *= scaleMin\n finalDesiredHeight *= scaleMin\n }\n\n if (meetOrSlice === 'slice') {\n finalDesiredWidth *= scaleMax\n finalDesiredHeight *= scaleMax\n }\n\n const refXProp = new Property(document, 'refX', refX)\n const refYProp = new Property(document, 'refY', refY)\n const hasRefs = refXProp.hasValue() && refYProp.hasValue()\n\n if (hasRefs) {\n ctx.translate(\n -scaleMin * refXProp.getPixels('x'),\n -scaleMin * refYProp.getPixels('y')\n )\n }\n\n if (clip) {\n const scaledClipX = scaleMin * clipX\n const scaledClipY = scaleMin * clipY\n\n ctx.beginPath()\n ctx.moveTo(scaledClipX, scaledClipY)\n ctx.lineTo(width, scaledClipY)\n ctx.lineTo(width, height)\n ctx.lineTo(scaledClipX, height)\n ctx.closePath()\n ctx.clip()\n }\n\n if (!hasRefs) {\n const isMeetMinY = meetOrSlice === 'meet' && scaleMin === scaleY\n const isSliceMaxY = meetOrSlice === 'slice' && scaleMax === scaleY\n const isMeetMinX = meetOrSlice === 'meet' && scaleMin === scaleX\n const isSliceMaxX = meetOrSlice === 'slice' && scaleMax === scaleX\n\n if (align.startsWith('xMid') && (\n isMeetMinY || isSliceMaxY\n )) {\n ctx.translate(width / 2.0 - finalDesiredWidth / 2.0, 0)\n }\n\n if (align.endsWith('YMid') && (\n isMeetMinX || isSliceMaxX\n )) {\n ctx.translate(0, height / 2.0 - finalDesiredHeight / 2.0)\n }\n\n if (align.startsWith('xMax') && (\n isMeetMinY || isSliceMaxY\n )) {\n ctx.translate(width - finalDesiredWidth, 0)\n }\n\n if (align.endsWith('YMax') && (\n isMeetMinX || isSliceMaxX\n )) {\n ctx.translate(0, height - finalDesiredHeight)\n }\n }\n\n // scale\n switch (true) {\n case align === 'none':\n ctx.scale(scaleX, scaleY)\n break\n\n case meetOrSlice === 'meet':\n ctx.scale(scaleMin, scaleMin)\n break\n\n case meetOrSlice === 'slice':\n ctx.scale(scaleMax, scaleMax)\n break\n }\n\n // translate\n ctx.translate(-minX, -minY)\n }\n\n start(\n element: Element,\n {\n enableRedraw = false,\n ignoreMouse = false,\n ignoreAnimation = false,\n ignoreDimensions = false,\n ignoreClear = false,\n forceRedraw,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n }: IScreenStartOptions = {}\n ) {\n const { mouse } = this\n const frameDuration = 1000 / Screen.FRAMERATE\n\n this.isReadyLock = false\n this.frameDuration = frameDuration\n this.readyPromise = new Promise((resolve) => {\n this.resolveReady = resolve\n })\n\n if (this.isReady()) {\n this.render(\n element,\n ignoreDimensions,\n ignoreClear,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n )\n }\n\n if (!enableRedraw) {\n return\n }\n\n let now = Date.now()\n let then = now\n let delta = 0\n const tick = () => {\n now = Date.now()\n delta = now - then\n\n if (delta >= frameDuration) {\n then = now - (delta % frameDuration)\n\n if (this.shouldUpdate(\n ignoreAnimation,\n forceRedraw\n )) {\n this.render(\n element,\n ignoreDimensions,\n ignoreClear,\n scaleWidth,\n scaleHeight,\n offsetX,\n offsetY\n )\n mouse.runEvents()\n }\n }\n\n this.intervalId = requestAnimationFrame(tick)\n }\n\n if (!ignoreMouse) {\n mouse.start()\n }\n\n this.intervalId = requestAnimationFrame(tick)\n }\n\n stop() {\n if (this.intervalId) {\n requestAnimationFrame.cancel(this.intervalId)\n this.intervalId = null\n }\n\n this.mouse.stop()\n }\n\n private shouldUpdate(\n ignoreAnimation: boolean,\n forceRedraw: (() => boolean) | undefined\n ) {\n // need update from animations?\n if (!ignoreAnimation) {\n const { frameDuration } = this\n const shouldUpdate = this.animations.reduce(\n (shouldUpdate, animation) => animation.update(frameDuration) || shouldUpdate,\n false\n )\n\n if (shouldUpdate) {\n return true\n }\n }\n\n // need update from redraw?\n if (typeof forceRedraw === 'function' && forceRedraw()) {\n return true\n }\n\n if (!this.isReadyLock && this.isReady()) {\n return true\n }\n\n // need update from mouse events?\n if (this.mouse.hasEvents()) {\n return true\n }\n\n return false\n }\n\n private render(\n element: Element,\n ignoreDimensions: boolean,\n ignoreClear: boolean,\n scaleWidth: number | undefined,\n scaleHeight: number | undefined,\n offsetX: number | undefined,\n offsetY: number | undefined\n ) {\n const {\n viewPort,\n ctx,\n isFirstRender\n } = this\n const canvas = ctx.canvas as HTMLCanvasElement\n\n viewPort.clear()\n\n if (canvas.width && canvas.height) {\n viewPort.setCurrent(canvas.width, canvas.height)\n }\n\n const widthStyle = element.getStyle('width')\n const heightStyle = element.getStyle('height')\n\n if (!ignoreDimensions && (\n isFirstRender\n || typeof scaleWidth !== 'number' && typeof scaleHeight !== 'number'\n )) {\n // set canvas size\n if (widthStyle.hasValue()) {\n canvas.width = widthStyle.getPixels('x')\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (canvas.style) {\n canvas.style.width = `${canvas.width}px`\n }\n }\n\n if (heightStyle.hasValue()) {\n canvas.height = heightStyle.getPixels('y')\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (canvas.style) {\n canvas.style.height = `${canvas.height}px`\n }\n }\n }\n\n let cWidth = canvas.clientWidth || canvas.width\n let cHeight = canvas.clientHeight || canvas.height\n\n if (ignoreDimensions && widthStyle.hasValue() && heightStyle.hasValue()) {\n cWidth = widthStyle.getPixels('x')\n cHeight = heightStyle.getPixels('y')\n }\n\n viewPort.setCurrent(cWidth, cHeight)\n\n if (typeof offsetX === 'number') {\n element.getAttribute('x', true).setValue(offsetX)\n }\n\n if (typeof offsetY === 'number') {\n element.getAttribute('y', true).setValue(offsetY)\n }\n\n if (typeof scaleWidth === 'number'\n || typeof scaleHeight === 'number'\n ) {\n const viewBox = toNumbers(element.getAttribute('viewBox').getString())\n let xRatio = 0\n let yRatio = 0\n\n if (typeof scaleWidth === 'number') {\n const widthStyle = element.getStyle('width')\n\n if (widthStyle.hasValue()) {\n xRatio = widthStyle.getPixels('x') / scaleWidth\n } else\n if (viewBox[2] && !isNaN(viewBox[2])) {\n xRatio = viewBox[2] / scaleWidth\n }\n }\n\n if (typeof scaleHeight === 'number') {\n const heightStyle = element.getStyle('height')\n\n if (heightStyle.hasValue()) {\n yRatio = heightStyle.getPixels('y') / scaleHeight\n } else\n if (viewBox[3] && !isNaN(viewBox[3])) {\n yRatio = viewBox[3] / scaleHeight\n }\n }\n\n if (!xRatio) {\n xRatio = yRatio\n }\n\n if (!yRatio) {\n yRatio = xRatio\n }\n\n element.getAttribute('width', true).setValue(scaleWidth)\n element.getAttribute('height', true).setValue(scaleHeight)\n\n const transformStyle = element.getStyle('transform', true, true)\n\n transformStyle.setValue(`${transformStyle.getString()} scale(${1.0 / xRatio}, ${1.0 / yRatio})`)\n }\n\n // clear and render\n if (!ignoreClear) {\n ctx.clearRect(0, 0, cWidth, cHeight)\n }\n\n element.render(ctx)\n\n if (isFirstRender) {\n this.isFirstRender = false\n }\n }\n}\n","import { Fetch } from './types'\nimport { Screen } from './Screen'\n\ntype DOMParserConstructor = typeof DOMParser\n\nexport interface IParserOptions {\n /**\n * WHATWG-compatible `fetch` function.\n */\n fetch?: Fetch\n /**\n * XML/HTML parser from string into DOM Document.\n */\n DOMParser?: DOMParserConstructor\n}\n\nconst { defaultFetch } = Screen\nconst DefaultDOMParser = typeof DOMParser !== 'undefined'\n ? DOMParser\n : undefined\n\nexport class Parser {\n private readonly fetch: Fetch\n private readonly DOMParser: DOMParserConstructor\n\n constructor({\n fetch = defaultFetch,\n DOMParser = DefaultDOMParser\n }: IParserOptions = {}) {\n if (!fetch) {\n throw new Error(`Can't find 'fetch' in 'globalThis', please provide it via options`)\n }\n\n if (!DOMParser) {\n throw new Error(`Can't find 'DOMParser' in 'globalThis', please provide it via options`)\n }\n\n this.fetch = fetch\n this.DOMParser = DOMParser\n }\n\n async parse(resource: string) {\n if (resource.startsWith('<')) {\n return this.parseFromString(resource)\n }\n\n return this.load(resource)\n }\n\n parseFromString(xml: string) {\n const parser = new this.DOMParser()\n\n try {\n return this.checkDocument(\n parser.parseFromString(xml, 'image/svg+xml')\n )\n } catch (err) {\n return this.checkDocument(\n parser.parseFromString(xml, 'text/xml')\n )\n }\n }\n\n private checkDocument(document: Document) {\n const parserError = document.getElementsByTagName('parsererror')[0]\n\n if (parserError) {\n throw new Error(parserError.textContent || 'Unknown parse error')\n }\n\n return document\n }\n\n async load(url: string) {\n const response = await this.fetch(url)\n const xml = await response.text()\n\n return this.parseFromString(xml)\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from '../Document'\nimport { Point } from '../Point'\n\nexport class Translate {\n type = 'translate'\n private readonly point: Point\n\n constructor(\n _: Document,\n point: string\n ) {\n this.point = Point.parse(point)\n }\n\n apply(ctx: RenderingContext2D) {\n const {\n x,\n y\n } = this.point\n\n ctx.translate(\n x || 0.0,\n y || 0.0\n )\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n x,\n y\n } = this.point\n\n ctx.translate(\n -1.0 * x || 0.0,\n -1.0 * y || 0.0\n )\n }\n\n applyToPoint(point: Point) {\n const {\n x,\n y\n } = this.point\n\n point.applyTransform([\n 1,\n 0,\n 0,\n 1,\n x || 0.0,\n y || 0.0\n ])\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { toNumbers } from '../util'\nimport { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Point } from '../Point'\n\nexport class Rotate {\n type = 'rotate'\n private readonly angle: Property\n private readonly originX: Property\n private readonly originY: Property\n private readonly cx: number\n private readonly cy: number\n\n constructor(\n document: Document,\n rotate: string,\n transformOrigin: readonly [Property, Property]\n ) {\n const numbers = toNumbers(rotate)\n\n this.angle = new Property(document, 'angle', numbers[0])\n this.originX = transformOrigin[0]\n this.originY = transformOrigin[1]\n this.cx = numbers[1] || 0\n this.cy = numbers[2] || 0\n }\n\n apply(ctx: RenderingContext2D) {\n const {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this\n const tx = cx + originX.getPixels('x')\n const ty = cy + originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.rotate(angle.getRadians())\n ctx.translate(-tx, -ty)\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n cx,\n cy,\n originX,\n originY,\n angle\n } = this\n const tx = cx + originX.getPixels('x')\n const ty = cy + originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.rotate(-1.0 * angle.getRadians())\n ctx.translate(-tx, -ty)\n }\n\n applyToPoint(point: Point) {\n const {\n cx,\n cy,\n angle\n } = this\n const rad = angle.getRadians()\n\n point.applyTransform([\n 1,\n 0,\n 0,\n 1,\n cx || 0.0, // this.p.x\n cy || 0.0 // this.p.y\n ])\n point.applyTransform([\n Math.cos(rad),\n Math.sin(rad),\n -Math.sin(rad),\n Math.cos(rad),\n 0,\n 0\n ])\n point.applyTransform([\n 1,\n 0,\n 0,\n 1,\n -cx || 0.0, // -this.p.x\n -cy || 0.0 // -this.p.y\n ])\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { PSEUDO_ZERO } from '../util'\nimport { Document } from '../Document'\nimport { Point } from '../Point'\nimport { Property } from '../Property'\n\nexport class Scale {\n type = 'scale'\n private readonly scale: Point\n private readonly originX: Property\n private readonly originY: Property\n\n constructor(\n _: Document,\n scale: string,\n transformOrigin: readonly [Property, Property]\n ) {\n const scaleSize = Point.parseScale(scale)\n\n // Workaround for node-canvas\n if (scaleSize.x === 0\n || scaleSize.y === 0\n ) {\n scaleSize.x = PSEUDO_ZERO\n scaleSize.y = PSEUDO_ZERO\n }\n\n this.scale = scaleSize\n this.originX = transformOrigin[0]\n this.originY = transformOrigin[1]\n }\n\n apply(ctx: RenderingContext2D) {\n const {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.scale(x, y || x)\n ctx.translate(-tx, -ty)\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n scale: {\n x,\n y\n },\n originX,\n originY\n } = this\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.scale(1.0 / x, 1.0 / y || x)\n ctx.translate(-tx, -ty)\n }\n\n applyToPoint(point: Point) {\n const {\n x,\n y\n } = this.scale\n\n point.applyTransform([\n x || 0.0,\n 0,\n 0,\n y || 0.0,\n 0,\n 0\n ])\n }\n}\n","import { MatrixValue, RenderingContext2D } from '../types'\nimport { toMatrixValue } from '../util'\nimport { Document } from '../Document'\nimport { Point } from '../Point'\nimport { Property } from '../Property'\nimport { ITransform } from './types'\n\nexport class Matrix implements ITransform {\n type = 'matrix'\n protected matrix: MatrixValue\n private readonly originX: Property\n private readonly originY: Property\n\n constructor(\n _: Document,\n matrix: string,\n transformOrigin: readonly [Property, Property]\n ) {\n this.matrix = toMatrixValue(matrix)\n this.originX = transformOrigin[0]\n this.originY = transformOrigin[1]\n }\n\n apply(ctx: RenderingContext2D) {\n const {\n originX,\n originY,\n matrix\n } = this\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.transform(\n matrix[0],\n matrix[1],\n matrix[2],\n matrix[3],\n matrix[4],\n matrix[5]\n )\n ctx.translate(-tx, -ty)\n }\n\n unapply(ctx: RenderingContext2D) {\n const {\n originX,\n originY,\n matrix\n } = this\n const a = matrix[0]\n const b = matrix[2]\n const c = matrix[4]\n const d = matrix[1]\n const e = matrix[3]\n const f = matrix[5]\n const g = 0.0\n const h = 0.0\n const i = 1.0\n const det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g))\n const tx = originX.getPixels('x')\n const ty = originY.getPixels('y')\n\n ctx.translate(tx, ty)\n ctx.transform(\n det * (e * i - f * h),\n det * (f * g - d * i),\n det * (c * h - b * i),\n det * (a * i - c * g),\n det * (b * f - c * e),\n det * (c * d - a * f)\n )\n ctx.translate(-tx, -ty)\n }\n\n applyToPoint(point: Point) {\n point.applyTransform(this.matrix)\n }\n}\n","import { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Matrix } from './Matrix'\n\nexport class Skew extends Matrix {\n override type = 'skew'\n protected readonly angle: Property\n\n constructor(\n document: Document,\n skew: string,\n transformOrigin: readonly [Property, Property]\n ) {\n super(document, skew, transformOrigin)\n\n this.angle = new Property(document, 'angle', skew)\n }\n}\n","import { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Skew } from './Skew'\n\nexport class SkewX extends Skew {\n override type = 'skewX'\n\n constructor(\n document: Document,\n skew: string,\n transformOrigin: readonly [Property, Property]\n ) {\n super(document, skew, transformOrigin)\n\n this.matrix = [\n 1,\n 0,\n Math.tan(this.angle.getRadians()),\n 1,\n 0,\n 0\n ]\n }\n}\n","import { Document } from '../Document'\nimport { Property } from '../Property'\nimport { Skew } from './Skew'\n\nexport class SkewY extends Skew {\n override type = 'skewY'\n\n constructor(\n document: Document,\n skew: string,\n transformOrigin: readonly [Property, Property]\n ) {\n super(document, skew, transformOrigin)\n\n this.matrix = [\n 1,\n Math.tan(this.angle.getRadians()),\n 0,\n 1,\n 0,\n 0\n ]\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { compressSpaces } from '../util'\nimport { Property } from '../Property'\nimport { Point } from '../Point'\nimport { Document, Element } from '../Document'\nimport { ITransform } from './types'\nimport { Translate } from './Translate'\nimport { Rotate } from './Rotate'\nimport { Scale } from './Scale'\nimport { Matrix } from './Matrix'\nimport { SkewX } from './SkewX'\nimport { SkewY } from './SkewY'\n\nfunction parseTransforms(transform: string) {\n return compressSpaces(transform)\n .trim()\n .replace(/\\)([a-zA-Z])/g, ') $1')\n .replace(/\\)(\\s?,\\s?)/g, ') ')\n .split(/\\s(?=[a-z])/)\n}\n\nfunction parseTransform(transform: string) {\n const [type = '', value = ''] = transform.split('(')\n\n return [type.trim(), value.trim().replace(')', '')] as const\n}\n\ninterface ITransformConstructor {\n prototype: ITransform\n new (\n document: Document,\n value: string,\n transformOrigin: readonly [Property, Property]\n ): ITransform\n}\n\nexport class Transform {\n static fromElement(document: Document, element: Element) {\n const transformStyle = element.getStyle('transform', false, true)\n\n if (transformStyle.hasValue()) {\n const [transformOriginXProperty, transformOriginYProperty = transformOriginXProperty] = element.getStyle('transform-origin', false, true).split()\n\n if (transformOriginXProperty && transformOriginYProperty) {\n const transformOrigin = [transformOriginXProperty, transformOriginYProperty] as const\n\n return new Transform(\n document,\n transformStyle.getString(),\n transformOrigin\n )\n }\n }\n\n return null\n }\n\n static transformTypes: Record = {\n translate: Translate,\n rotate: Rotate,\n scale: Scale,\n matrix: Matrix,\n skewX: SkewX,\n skewY: SkewY\n }\n\n private readonly transforms: ITransform[] = []\n\n constructor(\n private readonly document: Document,\n transform: string,\n transformOrigin: readonly [Property, Property]\n ) {\n const data = parseTransforms(transform)\n\n data.forEach((transform) => {\n if (transform === 'none') {\n return\n }\n\n const [type, value] = parseTransform(transform)\n const TransformType = Transform.transformTypes[type]\n\n if (TransformType) {\n this.transforms.push(new TransformType(this.document, value, transformOrigin))\n }\n })\n }\n\n apply(ctx: RenderingContext2D) {\n this.transforms.forEach(transform => transform.apply(ctx))\n }\n\n unapply(ctx: RenderingContext2D) {\n this.transforms.forEach(transform => transform.unapply(ctx))\n }\n\n // TODO: applyToPoint unused ... remove?\n applyToPoint(point: Point) {\n this.transforms.forEach(transform => transform.applyToPoint(point))\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { normalizeAttributeName } from '../util'\nimport { Property } from '../Property'\nimport { Transform } from '../Transform'\nimport { Document } from './Document'\nimport { ClipPathElement } from './ClipPathElement'\nimport { MaskElement } from './MaskElement'\nimport { FilterElement } from './FilterElement'\n\nexport abstract class Element {\n static readonly ignoreChildTypes = ['title']\n\n readonly type: string = ''\n readonly attributes: Record = {}\n readonly styles: Record = {}\n readonly stylesSpecificity: Record = {}\n animationFrozen = false\n animationFrozenValue = ''\n parent: Element | null = null\n children: Element[] = []\n\n constructor(\n protected readonly document: Document,\n protected readonly node?: HTMLElement,\n protected readonly captureTextNodes = false\n ) {\n if (!node || node.nodeType !== 1) { // ELEMENT_NODE\n return\n }\n\n // add attributes\n Array.from(node.attributes).forEach((attribute) => {\n const nodeName = normalizeAttributeName(attribute.nodeName)\n\n this.attributes[nodeName] = new Property(document, nodeName, attribute.value)\n })\n\n this.addStylesFromStyleDefinition()\n\n // add inline styles\n if (this.getAttribute('style').hasValue()) {\n const styles = this.getAttribute('style')\n .getString()\n .split(';')\n .map(_ => _.trim())\n\n styles.forEach((style) => {\n if (!style) {\n return\n }\n\n const [name, value] = style.split(':').map(_ => _.trim())\n\n if (name) {\n this.styles[name] = new Property(document, name, value)\n }\n })\n }\n\n const { definitions } = document\n const id = this.getAttribute('id')\n\n // add id\n if (id.hasValue()) {\n if (!definitions[id.getString()]) {\n definitions[id.getString()] = this\n }\n }\n\n Array.from(node.childNodes).forEach((childNode: HTMLElement) => {\n if (childNode.nodeType === 1) {\n this.addChild(childNode) // ELEMENT_NODE\n } else\n if (captureTextNodes && (\n childNode.nodeType === 3\n || childNode.nodeType === 4\n )) {\n const textNode = document.createTextNode(childNode)\n\n if (textNode.getText().length > 0) {\n this.addChild(textNode) // TEXT_NODE\n }\n }\n })\n }\n\n getAttribute(name: string, createIfNotExists = false): Property {\n const attr = this.attributes[name]\n\n if (!attr && createIfNotExists) {\n const attr = new Property(this.document, name, '')\n\n this.attributes[name] = attr\n\n return attr\n }\n\n return attr || Property.empty(this.document)\n }\n\n getHrefAttribute(): Property {\n let href: Property | undefined\n\n for (const key in this.attributes) {\n if (key === 'href' || key.endsWith(':href')) {\n href = this.attributes[key]\n break\n }\n }\n\n return href || Property.empty(this.document)\n }\n\n getStyle(name: string, createIfNotExists = false, skipAncestors = false): Property {\n const style = this.styles[name]\n\n if (style) {\n return style\n }\n\n const attr = this.getAttribute(name)\n\n if (attr.hasValue()) {\n this.styles[name] = attr // move up to me to cache\n return attr\n }\n\n if (!skipAncestors) {\n const { parent } = this\n\n if (parent) {\n const parentStyle = parent.getStyle(name)\n\n if (parentStyle.hasValue()) {\n return parentStyle\n }\n }\n }\n\n if (createIfNotExists) {\n const style = new Property(this.document, name, '')\n\n this.styles[name] = style\n\n return style\n }\n\n return Property.empty(this.document)\n }\n\n render(ctx: RenderingContext2D) {\n // don't render display=none\n // don't render visibility=hidden\n if (this.getStyle('display').getString() === 'none'\n || this.getStyle('visibility').getString() === 'hidden'\n ) {\n return\n }\n\n ctx.save()\n\n if (this.getStyle('mask').hasValue()) { // mask\n const mask = this.getStyle('mask').getDefinition()\n\n if (mask) {\n this.applyEffects(ctx)\n mask.apply(ctx, this)\n }\n } else\n if (this.getStyle('filter').getValue('none') !== 'none') { // filter\n const filter = this.getStyle('filter').getDefinition()\n\n if (filter) {\n this.applyEffects(ctx)\n filter.apply(ctx, this)\n }\n } else {\n this.setContext(ctx)\n this.renderChildren(ctx)\n this.clearContext(ctx)\n }\n\n ctx.restore()\n }\n\n setContext(_: RenderingContext2D) {\n // NO RENDER\n }\n\n protected applyEffects(ctx: RenderingContext2D) {\n // transform\n const transform = Transform.fromElement(this.document, this)\n\n if (transform) {\n transform.apply(ctx)\n }\n\n // clip\n const clipPathStyleProp = this.getStyle('clip-path', false, true)\n\n if (clipPathStyleProp.hasValue()) {\n const clip = clipPathStyleProp.getDefinition()\n\n if (clip) {\n clip.apply(ctx)\n }\n }\n }\n\n clearContext(_: RenderingContext2D) {\n // NO RENDER\n }\n\n renderChildren(ctx: RenderingContext2D) {\n this.children.forEach((child) => {\n child.render(ctx)\n })\n }\n\n protected addChild(childNode: Element|HTMLElement) {\n const child = childNode instanceof Element\n ? childNode\n : this.document.createElement(childNode)\n\n child.parent = this\n\n if (!Element.ignoreChildTypes.includes(child.type)) {\n this.children.push(child)\n }\n }\n\n protected matchesSelector(selector: string) {\n const { node } = this\n\n if (typeof node.matches === 'function') {\n return node.matches(selector)\n }\n\n const styleClasses = node.getAttribute?.('class')\n\n if (!styleClasses || styleClasses === '') {\n return false\n }\n\n return styleClasses.split(' ').some(styleClass => `.${styleClass}` === selector)\n }\n\n addStylesFromStyleDefinition() {\n const {\n styles,\n stylesSpecificity\n } = this.document\n let styleProp: Property | undefined\n\n for (const selector in styles) {\n if (!selector.startsWith('@') && this.matchesSelector(selector)) {\n const style = styles[selector]\n const specificity = stylesSpecificity[selector]\n\n if (style) {\n for (const name in style) {\n let existingSpecificity = this.stylesSpecificity[name]\n\n if (typeof existingSpecificity === 'undefined') {\n existingSpecificity = '000'\n }\n\n if (specificity && specificity >= existingSpecificity) {\n styleProp = style[name]\n\n if (styleProp) {\n this.styles[name] = styleProp\n }\n\n this.stylesSpecificity[name] = specificity\n }\n }\n }\n }\n }\n }\n\n protected removeStyles(element: Element, ignoreStyles: string[]) {\n const toRestore = ignoreStyles.reduce<[string, string][]>((toRestore, name) => {\n const styleProp = element.getStyle(name)\n\n if (!styleProp.hasValue()) {\n return toRestore\n }\n\n const value = styleProp.getString()\n\n styleProp.setValue('')\n\n return [...toRestore, [name, value]]\n }, [])\n\n return toRestore\n }\n\n protected restoreStyles(element: Element, styles: [string, string][]) {\n styles.forEach(([name, value]) => {\n element.getStyle(name, true).setValue(value)\n })\n }\n\n isFirstChild() {\n return this.parent?.children.indexOf(this) === 0\n }\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\n\nexport class UnknownElement extends Element {\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Element ${node.nodeName} not yet implemented.`)\n }\n }\n}\n","import { compressSpaces } from './util'\n\nfunction wrapFontFamily(fontFamily: string) {\n const trimmed = fontFamily.trim()\n\n return /^('|\")/.test(trimmed)\n ? trimmed\n : `\"${trimmed}\"`\n}\n\nfunction prepareFontFamily(fontFamily: string) {\n return typeof process === 'undefined'\n ? fontFamily\n : fontFamily\n .trim()\n .split(',')\n .map(wrapFontFamily)\n .join(',')\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n * @param fontStyle\n * @returns CSS font style.\n */\nfunction prepareFontStyle(fontStyle: string) {\n if (!fontStyle) {\n return ''\n }\n\n const targetFontStyle = fontStyle.trim().toLowerCase()\n\n switch (targetFontStyle) {\n case 'normal':\n case 'italic':\n case 'oblique':\n case 'inherit':\n case 'initial':\n case 'unset':\n return targetFontStyle\n\n default:\n\n if (/^oblique\\s+(-|)\\d+deg$/.test(targetFontStyle)) {\n return targetFontStyle\n }\n\n return ''\n }\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n * @param fontWeight\n * @returns CSS font weight.\n */\nfunction prepareFontWeight(fontWeight: string) {\n if (!fontWeight) {\n return ''\n }\n\n const targetFontWeight = fontWeight.trim().toLowerCase()\n\n switch (targetFontWeight) {\n case 'normal':\n case 'bold':\n case 'lighter':\n case 'bolder':\n case 'inherit':\n case 'initial':\n case 'unset':\n return targetFontWeight\n\n default:\n\n if (/^[\\d.]+$/.test(targetFontWeight)) {\n return targetFontWeight\n }\n\n return ''\n }\n}\n\nexport class Font {\n static parse(\n font = '',\n inherit?: string | Font\n ) {\n let fontStyle = ''\n let fontVariant = ''\n let fontWeight = ''\n let fontSize = ''\n let fontFamily = ''\n const parts = compressSpaces(font).trim().split(' ')\n const set = {\n fontSize: false,\n fontStyle: false,\n fontWeight: false,\n fontVariant: false\n }\n\n parts.forEach((part) => {\n switch (true) {\n case !set.fontStyle && Font.styles.includes(part):\n\n if (part !== 'inherit') {\n fontStyle = part\n }\n\n set.fontStyle = true\n break\n\n case !set.fontVariant && Font.variants.includes(part):\n\n if (part !== 'inherit') {\n fontVariant = part\n }\n\n set.fontStyle = true\n set.fontVariant = true\n break\n\n case !set.fontWeight && Font.weights.includes(part):\n\n if (part !== 'inherit') {\n fontWeight = part\n }\n\n set.fontStyle = true\n set.fontVariant = true\n set.fontWeight = true\n break\n\n case !set.fontSize:\n\n if (part !== 'inherit') {\n fontSize = part.split('/')[0] || ''\n }\n\n set.fontStyle = true\n set.fontVariant = true\n set.fontWeight = true\n set.fontSize = true\n break\n\n default:\n\n if (part !== 'inherit') {\n fontFamily += part\n }\n }\n })\n\n return new Font(\n fontStyle,\n fontVariant,\n fontWeight,\n fontSize,\n fontFamily,\n inherit\n )\n }\n\n static readonly styles = 'normal|italic|oblique|inherit'\n static readonly variants = 'normal|small-caps|inherit'\n static readonly weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit'\n\n readonly fontFamily: string\n readonly fontSize: string\n readonly fontStyle: string\n readonly fontWeight: string\n readonly fontVariant: string\n\n constructor(\n fontStyle: string,\n fontVariant: string,\n fontWeight: string,\n fontSize: string,\n fontFamily: string,\n inherit?: string | Font\n ) {\n const inheritFont = inherit\n ? typeof inherit === 'string'\n ? Font.parse(inherit)\n : inherit\n : {} as Font\n\n this.fontFamily = fontFamily || inheritFont.fontFamily\n this.fontSize = fontSize || inheritFont.fontSize\n this.fontStyle = fontStyle || inheritFont.fontStyle\n this.fontWeight = fontWeight || inheritFont.fontWeight\n this.fontVariant = fontVariant || inheritFont.fontVariant\n }\n\n toString() {\n return [\n prepareFontStyle(this.fontStyle),\n this.fontVariant,\n prepareFontWeight(this.fontWeight),\n this.fontSize,\n // Wrap fontFamily only on nodejs and only for canvas.ctx\n prepareFontFamily(this.fontFamily)\n ].join(' ').trim()\n }\n}\n","\nexport class BoundingBox {\n constructor(\n public x1 = Number.NaN,\n public y1 = Number.NaN,\n public x2 = Number.NaN,\n public y2 = Number.NaN\n ) {\n this.addPoint(x1, y1)\n this.addPoint(x2, y2)\n }\n\n get x() {\n return this.x1\n }\n\n get y() {\n return this.y1\n }\n\n get width() {\n return this.x2 - this.x1\n }\n\n get height() {\n return this.y2 - this.y1\n }\n\n addPoint(x: number | undefined, y: number | undefined) {\n if (typeof x !== 'undefined') {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x\n this.x2 = x\n }\n\n if (x < this.x1) {\n this.x1 = x\n }\n\n if (x > this.x2) {\n this.x2 = x\n }\n }\n\n if (typeof y !== 'undefined') {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y\n this.y2 = y\n }\n\n if (y < this.y1) {\n this.y1 = y\n }\n\n if (y > this.y2) {\n this.y2 = y\n }\n }\n }\n\n addX(x: number) {\n this.addPoint(x, 0)\n }\n\n addY(y: number) {\n this.addPoint(0, y)\n }\n\n addBoundingBox(boundingBox: BoundingBox | null) {\n if (!boundingBox) {\n return\n }\n\n const {\n x1,\n y1,\n x2,\n y2\n } = boundingBox\n\n this.addPoint(x1, y1)\n this.addPoint(x2, y2)\n }\n\n private sumCubic(\n t: number,\n p0: number,\n p1: number,\n p2: number,\n p3: number\n ) {\n return (\n Math.pow(1 - t, 3) * p0\n + 3 * Math.pow(1 - t, 2) * t * p1\n + 3 * (1 - t) * Math.pow(t, 2) * p2\n + Math.pow(t, 3) * p3\n )\n }\n\n private bezierCurveAdd(\n forX: boolean,\n p0: number,\n p1: number,\n p2: number,\n p3: number\n ) {\n const b = 6 * p0 - 12 * p1 + 6 * p2\n const a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3\n const c = 3 * p1 - 3 * p0\n\n if (a === 0) {\n if (b === 0) {\n return\n }\n\n const t = -c / b\n\n if (0 < t && t < 1) {\n if (forX) {\n this.addX(this.sumCubic(t, p0, p1, p2, p3))\n } else {\n this.addY(this.sumCubic(t, p0, p1, p2, p3))\n }\n }\n\n return\n }\n\n const b2ac = Math.pow(b, 2) - 4 * c * a\n\n if (b2ac < 0) {\n return\n }\n\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a)\n\n if (0 < t1 && t1 < 1) {\n if (forX) {\n this.addX(\n this.sumCubic(t1, p0, p1, p2, p3)\n )\n } else {\n this.addY(\n this.sumCubic(t1, p0, p1, p2, p3)\n )\n }\n }\n\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a)\n\n if (0 < t2 && t2 < 1) {\n if (forX) {\n this.addX(this.sumCubic(t2, p0, p1, p2, p3))\n } else {\n this.addY(this.sumCubic(t2, p0, p1, p2, p3))\n }\n }\n }\n\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n addBezierCurve(\n p0x: number,\n p0y: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number\n ) {\n this.addPoint(p0x, p0y)\n this.addPoint(p3x, p3y)\n this.bezierCurveAdd(true, p0x, p1x, p2x, p3x)\n this.bezierCurveAdd(false, p0y, p1y, p2y, p3y)\n }\n\n addQuadraticCurve(\n p0x: number,\n p0y: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number\n ) {\n const cp1x = p0x + 2 / 3 * (p1x - p0x) // CP1 = QP0 + 2/3 *(QP1-QP0)\n const cp1y = p0y + 2 / 3 * (p1y - p0y) // CP1 = QP0 + 2/3 *(QP1-QP0)\n const cp2x = cp1x + 1 / 3 * (p2x - p0x) // CP2 = CP1 + 1/3 *(QP2-QP0)\n const cp2y = cp1y + 1 / 3 * (p2y - p0y) // CP2 = CP1 + 1/3 *(QP2-QP0)\n\n this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y)\n }\n\n isPointInBox(\n x: number,\n y: number\n ) {\n const {\n x1,\n y1,\n x2,\n y2\n } = this\n\n return (\n x1 <= x\n && x <= x2\n && y1 <= y\n && y <= y2\n )\n }\n}\n","import { RenderingContext2D } from '../types'\nimport {\n PSEUDO_ZERO,\n toNumbers\n} from '../util'\nimport { Font } from '../Font'\nimport { Property } from '../Property'\nimport { Element } from './Element'\n\nexport abstract class RenderedElement extends Element {\n private modifiedEmSizeStack = false\n\n protected calculateOpacity() {\n let opacity = 1.0\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n let element: Element | null = this\n\n while (element) {\n const opacityStyle = element.getStyle('opacity', false, true) // no ancestors on style call\n\n if (opacityStyle.hasValue(true)) {\n opacity *= opacityStyle.getNumber()\n }\n\n element = element.parent\n }\n\n return opacity\n }\n\n override setContext(ctx: RenderingContext2D, fromMeasure = false) {\n if (!fromMeasure) { // causes stack overflow when measuring text with gradients\n // fill\n const fillStyleProp = this.getStyle('fill')\n const fillOpacityStyleProp = this.getStyle('fill-opacity')\n const strokeStyleProp = this.getStyle('stroke')\n const strokeOpacityProp = this.getStyle('stroke-opacity')\n\n if (fillStyleProp.isUrlDefinition()) {\n const fillStyle = fillStyleProp.getFillStyleDefinition(this, fillOpacityStyleProp)\n\n if (fillStyle) {\n ctx.fillStyle = fillStyle\n }\n } else\n if (fillStyleProp.hasValue()) {\n if (fillStyleProp.getString() === 'currentColor') {\n fillStyleProp.setValue(this.getStyle('color').getColor())\n }\n\n const fillStyle = fillStyleProp.getColor()\n\n if (fillStyle !== 'inherit') {\n ctx.fillStyle = fillStyle === 'none'\n ? 'rgba(0,0,0,0)'\n : fillStyle\n }\n }\n\n if (fillOpacityStyleProp.hasValue()) {\n const fillStyle = new Property(this.document, 'fill', ctx.fillStyle)\n .addOpacity(fillOpacityStyleProp)\n .getColor()\n\n ctx.fillStyle = fillStyle\n }\n\n // stroke\n if (strokeStyleProp.isUrlDefinition()) {\n const strokeStyle = strokeStyleProp.getFillStyleDefinition(this, strokeOpacityProp)\n\n if (strokeStyle) {\n ctx.strokeStyle = strokeStyle\n }\n } else\n if (strokeStyleProp.hasValue()) {\n if (strokeStyleProp.getString() === 'currentColor') {\n strokeStyleProp.setValue(this.getStyle('color').getColor())\n }\n\n const strokeStyle = strokeStyleProp.getString()\n\n if (strokeStyle !== 'inherit') {\n ctx.strokeStyle = strokeStyle === 'none'\n ? 'rgba(0,0,0,0)'\n : strokeStyle\n }\n }\n\n if (strokeOpacityProp.hasValue()) {\n const strokeStyle = new Property(this.document, 'stroke', ctx.strokeStyle)\n .addOpacity(strokeOpacityProp)\n .getString()\n\n ctx.strokeStyle = strokeStyle\n }\n\n const strokeWidthStyleProp = this.getStyle('stroke-width')\n\n if (strokeWidthStyleProp.hasValue()) {\n const newLineWidth = strokeWidthStyleProp.getPixels()\n\n ctx.lineWidth = !newLineWidth\n ? PSEUDO_ZERO // browsers don't respect 0 (or node-canvas? :-)\n : newLineWidth\n }\n\n const strokeLinecapStyleProp = this.getStyle('stroke-linecap')\n const strokeLinejoinStyleProp = this.getStyle('stroke-linejoin')\n const strokeMiterlimitProp = this.getStyle('stroke-miterlimit')\n // NEED TEST\n // const pointOrderStyleProp = this.getStyle('paint-order');\n const strokeDasharrayStyleProp = this.getStyle('stroke-dasharray')\n const strokeDashoffsetProp = this.getStyle('stroke-dashoffset')\n\n if (strokeLinecapStyleProp.hasValue()) {\n ctx.lineCap = strokeLinecapStyleProp.getString() as CanvasLineCap\n }\n\n if (strokeLinejoinStyleProp.hasValue()) {\n ctx.lineJoin = strokeLinejoinStyleProp.getString() as CanvasLineJoin\n }\n\n if (strokeMiterlimitProp.hasValue()) {\n ctx.miterLimit = strokeMiterlimitProp.getNumber()\n }\n\n // NEED TEST\n // if (pointOrderStyleProp.hasValue()) {\n // // ?\n // ctx.paintOrder = pointOrderStyleProp.getValue();\n // }\n\n if (strokeDasharrayStyleProp.hasValue() && strokeDasharrayStyleProp.getString() !== 'none') {\n const gaps = toNumbers(strokeDasharrayStyleProp.getString())\n\n if (typeof ctx.setLineDash !== 'undefined') {\n ctx.setLineDash(gaps)\n } else\n // @ts-expect-error Handle browser prefix.\n if (typeof ctx.webkitLineDash !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.webkitLineDash = gaps\n } else\n // @ts-expect-error Handle browser prefix.\n if (typeof ctx.mozDash !== 'undefined' && !(gaps.length === 1 && gaps[0] === 0)) {\n // @ts-expect-error Handle browser prefix.\n ctx.mozDash = gaps\n }\n\n const offset = strokeDashoffsetProp.getPixels()\n\n if (typeof ctx.lineDashOffset !== 'undefined') {\n ctx.lineDashOffset = offset\n } else\n // @ts-expect-error Handle browser prefix.\n if (typeof ctx.webkitLineDashOffset !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.webkitLineDashOffset = offset\n } else\n // @ts-expect-error Handle browser prefix.\n if (typeof ctx.mozDashOffset !== 'undefined') {\n // @ts-expect-error Handle browser prefix.\n ctx.mozDashOffset = offset\n }\n }\n }\n\n // font\n this.modifiedEmSizeStack = false\n\n if (typeof ctx.font !== 'undefined') {\n const fontStyleProp = this.getStyle('font')\n const fontStyleStyleProp = this.getStyle('font-style')\n const fontVariantStyleProp = this.getStyle('font-variant')\n const fontWeightStyleProp = this.getStyle('font-weight')\n const fontSizeStyleProp = this.getStyle('font-size')\n const fontFamilyStyleProp = this.getStyle('font-family')\n const font = new Font(\n fontStyleStyleProp.getString(),\n fontVariantStyleProp.getString(),\n fontWeightStyleProp.getString(),\n fontSizeStyleProp.hasValue()\n ? `${fontSizeStyleProp.getPixels(true)}px`\n : '',\n fontFamilyStyleProp.getString(),\n Font.parse(\n fontStyleProp.getString(),\n ctx.font\n )\n )\n\n fontStyleStyleProp.setValue(font.fontStyle)\n fontVariantStyleProp.setValue(font.fontVariant)\n fontWeightStyleProp.setValue(font.fontWeight)\n fontSizeStyleProp.setValue(font.fontSize)\n fontFamilyStyleProp.setValue(font.fontFamily)\n\n ctx.font = font.toString()\n\n if (fontSizeStyleProp.isPixels()) {\n this.document.emSize = fontSizeStyleProp.getPixels()\n this.modifiedEmSizeStack = true\n }\n }\n\n if (!fromMeasure) {\n // effects\n this.applyEffects(ctx)\n // opacity\n ctx.globalAlpha = this.calculateOpacity()\n }\n }\n\n override clearContext(ctx: RenderingContext2D) {\n super.clearContext(ctx)\n\n if (this.modifiedEmSizeStack) {\n this.document.popEmSize()\n }\n }\n}\n","import { RenderingContext2D } from '../types'\nimport {\n toNumbers,\n compressSpaces,\n trimLeft,\n trimRight\n} from '../util'\nimport { Font } from '../Font'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { Element } from './Element'\nimport { FontElement } from './FontElement'\nimport { ArabicForm, GlyphElement } from './GlyphElement'\nimport { RenderedElement } from './RenderedElement'\n\nexport class TextElement extends RenderedElement {\n override type = 'text'\n protected x = 0\n protected y = 0\n private leafTexts: TextElement[] = []\n private textChunkStart = 0\n private minX = Number.POSITIVE_INFINITY\n private maxX = Number.NEGATIVE_INFINITY\n private measureCache = -1\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(\n document,\n node,\n new.target === TextElement\n ? true\n : captureTextNodes\n )\n }\n\n override setContext(ctx: RenderingContext2D, fromMeasure = false) {\n super.setContext(ctx, fromMeasure)\n\n const textBaseline = this.getStyle('dominant-baseline').getTextBaseline()\n || this.getStyle('alignment-baseline').getTextBaseline()\n\n if (textBaseline) {\n ctx.textBaseline = textBaseline as CanvasTextBaseline\n }\n }\n\n protected initializeCoordinates() {\n this.x = 0\n this.y = 0\n this.leafTexts = []\n this.textChunkStart = 0\n this.minX = Number.POSITIVE_INFINITY\n this.maxX = Number.NEGATIVE_INFINITY\n }\n\n getBoundingBox(ctx: RenderingContext2D) {\n if (this.type !== 'text') {\n return this.getTElementBoundingBox(ctx)\n }\n\n // first, calculate child positions\n this.initializeCoordinates()\n this.adjustChildCoordinatesRecursive(ctx)\n\n let boundingBox: BoundingBox | null = null\n\n // then calculate bounding box\n this.children.forEach((_, i) => {\n const childBoundingBox = this.getChildBoundingBox(ctx, this, this, i)\n\n if (!boundingBox) {\n boundingBox = childBoundingBox\n } else {\n boundingBox.addBoundingBox(childBoundingBox)\n }\n })\n\n return boundingBox\n }\n\n protected getFontSize() {\n const {\n document,\n parent\n } = this\n const inheritFontSize = Font.parse(document.ctx.font).fontSize\n const fontSize = parent.getStyle('font-size').getNumber(inheritFontSize)\n\n return fontSize\n }\n\n protected getTElementBoundingBox(ctx: RenderingContext2D) {\n const fontSize = this.getFontSize()\n\n return new BoundingBox(\n this.x,\n this.y - fontSize,\n this.x + this.measureText(ctx),\n this.y\n )\n }\n\n getGlyph(\n font: FontElement,\n text: string,\n i: number\n ) {\n const char = text[i]\n let glyph: GlyphElement | undefined\n\n if (font.isArabic) {\n const len = text.length\n const prevChar = text[i - 1]\n const nextChar = text[i + 1]\n let arabicForm: ArabicForm = 'isolated'\n\n if ((i === 0 || prevChar === ' ') && i < len - 1 && nextChar !== ' ') {\n arabicForm = 'terminal'\n }\n\n if (i > 0 && prevChar !== ' ' && i < len - 1 && nextChar !== ' ') {\n arabicForm = 'medial'\n }\n\n if (i > 0 && prevChar !== ' ' && (i === len - 1 || nextChar === ' ')) {\n arabicForm = 'initial'\n }\n\n glyph = font.arabicGlyphs[char]?.[arabicForm] || font.glyphs[char]\n } else {\n glyph = font.glyphs[char]\n }\n\n if (!glyph) {\n glyph = font.missingGlyph\n }\n\n return glyph\n }\n\n getText() {\n return ''\n }\n\n protected getTextFromNode(node?: ChildNode) {\n const textNode = node || this.node\n const childNodes = Array.from(textNode.parentNode.childNodes)\n const index = childNodes.indexOf(textNode)\n const lastIndex = childNodes.length - 1\n let text = compressSpaces(\n // textNode.value\n // || textNode.text\n textNode.textContent\n || ''\n )\n\n if (index === 0) {\n text = trimLeft(text)\n }\n\n if (index === lastIndex) {\n text = trimRight(text)\n }\n\n return text\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n if (this.type !== 'text') {\n this.renderTElementChildren(ctx)\n return\n }\n\n // first, calculate child positions\n this.initializeCoordinates()\n this.adjustChildCoordinatesRecursive(ctx)\n\n // then render\n this.children.forEach((_, i) => {\n this.renderChild(ctx, this, this, i)\n })\n\n const { mouse } = this.document.screen\n\n // Do not calc bounding box if mouse is not working.\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(\n this,\n this.getBoundingBox(ctx)\n )\n }\n }\n\n protected renderTElementChildren(ctx: RenderingContext2D) {\n const {\n document,\n parent\n } = this\n const renderText = this.getText()\n const customFont = parent.getStyle('font-family').getDefinition()\n\n if (customFont) {\n const { unitsPerEm } = customFont.fontFace\n const ctxFont = Font.parse(document.ctx.font)\n const fontSize = parent.getStyle('font-size').getNumber(ctxFont.fontSize)\n const fontStyle = parent.getStyle('font-style').getString(ctxFont.fontStyle)\n const scale = fontSize / unitsPerEm\n const text = customFont.isRTL\n ? renderText.split('').reverse().join('')\n : renderText\n const dx = toNumbers(parent.getAttribute('dx').getString())\n const len = text.length\n\n for (let i = 0; i < len; i++) {\n const glyph = this.getGlyph(customFont, text, i)\n\n ctx.translate(this.x, this.y)\n ctx.scale(scale, -scale)\n\n const lw = ctx.lineWidth\n\n ctx.lineWidth = ctx.lineWidth * unitsPerEm / fontSize\n\n if (fontStyle === 'italic') {\n ctx.transform(1, 0, .4, 1, 0, 0)\n }\n\n glyph.render(ctx)\n\n if (fontStyle === 'italic') {\n ctx.transform(1, 0, -.4, 1, 0, 0)\n }\n\n ctx.lineWidth = lw\n ctx.scale(1 / scale, -1 / scale)\n ctx.translate(-this.x, -this.y)\n\n this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / unitsPerEm\n\n if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n this.x += dx[i]\n }\n }\n\n return\n }\n\n const {\n x,\n y\n } = this\n\n // NEED TEST\n // if (ctx.paintOrder === 'stroke') {\n // if (ctx.strokeStyle) {\n // ctx.strokeText(renderText, x, y);\n // }\n\n // if (ctx.fillStyle) {\n // ctx.fillText(renderText, x, y);\n // }\n // } else {\n if (ctx.fillStyle) {\n ctx.fillText(renderText, x, y)\n }\n\n if (ctx.strokeStyle) {\n ctx.strokeText(renderText, x, y)\n }\n // }\n }\n\n protected applyAnchoring() {\n if (this.textChunkStart >= this.leafTexts.length) {\n return\n }\n\n // This is basically the \"Apply anchoring\" part of https://www.w3.org/TR/SVG2/text.html#TextLayoutAlgorithm.\n // The difference is that we apply the anchoring as soon as a chunk is finished. This saves some extra looping.\n // Vertical text is not supported.\n\n const firstElement = this.leafTexts[this.textChunkStart]\n const textAnchor = firstElement.getStyle('text-anchor').getString('start')\n const isRTL = false // we treat RTL like LTR\n let shift = 0\n\n if (textAnchor === 'start' && !isRTL || textAnchor === 'end' && isRTL) {\n shift = firstElement.x - this.minX\n } else if (textAnchor === 'end' && !isRTL || textAnchor === 'start' && isRTL) {\n shift = firstElement.x - this.maxX\n } else {\n shift = firstElement.x - (this.minX + this.maxX) / 2\n }\n\n for (let i = this.textChunkStart; i < this.leafTexts.length; i++) {\n this.leafTexts[i].x += shift\n }\n\n // start new chunk\n this.minX = Number.POSITIVE_INFINITY\n this.maxX = Number.NEGATIVE_INFINITY\n this.textChunkStart = this.leafTexts.length\n }\n\n protected adjustChildCoordinatesRecursive(ctx: RenderingContext2D) {\n this.children.forEach((_, i) => {\n this.adjustChildCoordinatesRecursiveCore(ctx, this, this, i)\n })\n this.applyAnchoring()\n }\n\n protected adjustChildCoordinatesRecursiveCore(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ): void {\n const child = parent.children[i] as TextElement\n\n if (child.children.length > 0) {\n child.children.forEach((_, i) => {\n textParent.adjustChildCoordinatesRecursiveCore(ctx, textParent, child, i)\n })\n } else {\n // only leafs are relevant\n this.adjustChildCoordinates(ctx, textParent, parent, i)\n }\n }\n\n protected adjustChildCoordinates(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ) {\n const child = parent.children[i] as TextElement\n\n if (typeof child.measureText !== 'function') {\n return child\n }\n\n ctx.save()\n child.setContext(ctx, true)\n\n const xAttr = child.getAttribute('x')\n const yAttr = child.getAttribute('y')\n const dxAttr = child.getAttribute('dx')\n const dyAttr = child.getAttribute('dy')\n const customFont = child.getStyle('font-family').getDefinition()\n const isRTL = Boolean(customFont?.isRTL)\n\n if (i === 0) {\n // First children inherit attributes from parent(s). Positional attributes\n // are only inherited from a parent to it's first child.\n if (!xAttr.hasValue()) {\n xAttr.setValue(child.getInheritedAttribute('x'))\n }\n\n if (!yAttr.hasValue()) {\n yAttr.setValue(child.getInheritedAttribute('y'))\n }\n\n if (!dxAttr.hasValue()) {\n dxAttr.setValue(child.getInheritedAttribute('dx'))\n }\n\n if (!dyAttr.hasValue()) {\n dyAttr.setValue(child.getInheritedAttribute('dy'))\n }\n }\n\n const width = child.measureText(ctx)\n\n if (isRTL) {\n textParent.x -= width\n }\n\n if (xAttr.hasValue()) {\n // an \"x\" attribute marks the start of a new chunk\n textParent.applyAnchoring()\n\n child.x = xAttr.getPixels('x')\n\n if (dxAttr.hasValue()) {\n child.x += dxAttr.getPixels('x')\n }\n } else {\n if (dxAttr.hasValue()) {\n textParent.x += dxAttr.getPixels('x')\n }\n\n child.x = textParent.x\n }\n\n textParent.x = child.x\n\n if (!isRTL) {\n textParent.x += width\n }\n\n if (yAttr.hasValue()) {\n child.y = yAttr.getPixels('y')\n\n if (dyAttr.hasValue()) {\n child.y += dyAttr.getPixels('y')\n }\n } else {\n if (dyAttr.hasValue()) {\n textParent.y += dyAttr.getPixels('y')\n }\n\n child.y = textParent.y\n }\n\n textParent.y = child.y\n\n // update the current chunk and it's bounds\n textParent.leafTexts.push(child)\n textParent.minX = Math.min(textParent.minX, child.x, child.x + width)\n textParent.maxX = Math.max(textParent.maxX, child.x, child.x + width)\n\n child.clearContext(ctx)\n ctx.restore()\n\n return child\n }\n\n protected getChildBoundingBox(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ) {\n const child = parent.children[i] as TextElement\n\n // not a text node?\n if (typeof child.getBoundingBox !== 'function') {\n return null\n }\n\n const boundingBox = child.getBoundingBox(ctx)\n\n if (boundingBox) {\n child.children.forEach((_, i) => {\n const childBoundingBox = textParent.getChildBoundingBox(ctx, textParent, child, i)\n\n boundingBox.addBoundingBox(childBoundingBox)\n })\n }\n\n return boundingBox\n }\n\n protected renderChild(\n ctx: RenderingContext2D,\n textParent: TextElement,\n parent: Element,\n i: number\n ) {\n const child = parent.children[i] as TextElement\n\n child.render(ctx)\n child.children.forEach((_, i) => {\n textParent.renderChild(ctx, textParent, child, i)\n })\n }\n\n protected measureText(ctx: RenderingContext2D) {\n const { measureCache } = this\n\n if (~measureCache) {\n return measureCache\n }\n\n const renderText = this.getText()\n const measure = this.measureTargetText(ctx, renderText)\n\n this.measureCache = measure\n\n return measure\n }\n\n protected measureTargetText(\n ctx: RenderingContext2D,\n targetText: string\n ) {\n if (!targetText.length) {\n return 0\n }\n\n const { parent } = this\n const customFont = parent.getStyle('font-family').getDefinition()\n\n if (customFont) {\n const fontSize = this.getFontSize()\n const text = customFont.isRTL\n ? targetText.split('').reverse().join('')\n : targetText\n const dx = toNumbers(parent.getAttribute('dx').getString())\n const len = text.length\n let measure = 0\n\n for (let i = 0; i < len; i++) {\n const glyph = this.getGlyph(customFont, text, i)\n\n measure += (glyph.horizAdvX || customFont.horizAdvX)\n * fontSize\n / customFont.fontFace.unitsPerEm\n\n if (typeof dx[i] !== 'undefined' && !isNaN(dx[i])) {\n measure += dx[i]\n }\n }\n\n return measure\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!ctx.measureText) {\n return targetText.length * 10\n }\n\n ctx.save()\n this.setContext(ctx, true)\n\n const { width: measure } = ctx.measureText(targetText)\n\n this.clearContext(ctx)\n ctx.restore()\n\n return measure\n }\n\n /**\n * Inherits positional attributes from {@link TextElement} parent(s). Attributes\n * are only inherited from a parent to its first child.\n * @param name - The attribute name.\n * @returns The attribute value or null.\n */\n protected getInheritedAttribute(name: string): string | null {\n // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this\n let current: Element | null = this\n\n while (current instanceof TextElement && current.isFirstChild() && current.parent) {\n const parentAttr = current.parent.getAttribute(name)\n\n if (parentAttr.hasValue(true)) {\n return parentAttr.getString('0')\n }\n\n current = current.parent\n }\n\n return null\n }\n}\n","import { Document } from './Document'\nimport { TextElement } from './TextElement'\n\nexport class TSpanElement extends TextElement {\n override type = 'tspan'\n protected readonly text: string\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(\n document,\n node,\n new.target === TSpanElement\n ? true\n : captureTextNodes\n )\n\n // if this node has children, then they own the text\n this.text = this.children.length > 0\n ? ''\n : this.getTextFromNode()\n }\n\n override getText() {\n return this.text\n }\n}\n","import { TSpanElement } from './TSpanElement'\n\nexport class TextNode extends TSpanElement {\n override type = 'textNode'\n}\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nvar t=function(r,e){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])})(r,e)};function r(r,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function i(){this.constructor=r}t(r,e),r.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function e(t){var r=\"\";Array.isArray(t)||(t=[t]);for(var e=0;et.phi1&&(t.phi2-=2*n),1===t.sweepFlag&&t.phi2i)return[];if(0===i)return[[t*e/(t*t+r*r),r*e/(t*t+r*r)]];var n=Math.sqrt(i);return[[(t*e+r*n)/(t*t+r*r),(r*e-t*n)/(t*t+r*r)],[(t*e-r*n)/(t*t+r*r),(r*e+t*n)/(t*t+r*r)]]}var u,h=Math.PI/180;function c(t,r,e){return(1-e)*t+e*r}function y(t,r,e,i){return t+Math.cos(i/180*n)*r+Math.sin(i/180*n)*e}function p(t,r,e,i){var a=1e-6,n=r-t,o=e-r,s=3*n+3*(i-e)-6*o,u=6*(o-n),h=3*n;return Math.abs(s)T&&(a.sweepFlag=+!a.sweepFlag),a}))}function l(){return function(t){var r={};for(var e in t)r[e]=t[e];return r}}t.ROUND=function(t){function r(r){return Math.round(r*t)/t}return void 0===t&&(t=1e13),a(t),function(t){return void 0!==t.x1&&(t.x1=r(t.x1)),void 0!==t.y1&&(t.y1=r(t.y1)),void 0!==t.x2&&(t.x2=r(t.x2)),void 0!==t.y2&&(t.y2=r(t.y2)),void 0!==t.x&&(t.x=r(t.x)),void 0!==t.y&&(t.y=r(t.y)),void 0!==t.rX&&(t.rX=r(t.rX)),void 0!==t.rY&&(t.rY=r(t.rY)),t}},t.TO_ABS=r,t.TO_REL=function(){return u((function(t,r,e){return t.relative||(void 0!==t.x1&&(t.x1-=r),void 0!==t.y1&&(t.y1-=e),void 0!==t.x2&&(t.x2-=r),void 0!==t.y2&&(t.y2-=e),void 0!==t.x&&(t.x-=r),void 0!==t.y&&(t.y-=e),t.relative=!0),t}))},t.NORMALIZE_HVZ=function(t,r,e){return void 0===t&&(t=!0),void 0===r&&(r=!0),void 0===e&&(e=!0),u((function(i,a,n,o,s){if(isNaN(o)&&!(i.type&_.MOVE_TO))throw new Error(\"path must start with moveto\");return r&&i.type&_.HORIZ_LINE_TO&&(i.type=_.LINE_TO,i.y=i.relative?0:n),e&&i.type&_.VERT_LINE_TO&&(i.type=_.LINE_TO,i.x=i.relative?0:a),t&&i.type&_.CLOSE_PATH&&(i.type=_.LINE_TO,i.x=i.relative?o-a:o,i.y=i.relative?s-n:s),i.type&_.ARC&&(0===i.rX||0===i.rY)&&(i.type=_.LINE_TO,delete i.rX,delete i.rY,delete i.xRot,delete i.lArcFlag,delete i.sweepFlag),i}))},t.NORMALIZE_ST=e,t.QT_TO_C=n,t.INFO=u,t.SANITIZE=function(t){void 0===t&&(t=0),a(t);var r=NaN,e=NaN,i=NaN,n=NaN;return u((function(a,o,s,u,h){var c=Math.abs,y=!1,p=0,m=0;if(a.type&_.SMOOTH_CURVE_TO&&(p=isNaN(r)?0:o-r,m=isNaN(e)?0:s-e),a.type&(_.CURVE_TO|_.SMOOTH_CURVE_TO)?(r=a.relative?o+a.x2:a.x2,e=a.relative?s+a.y2:a.y2):(r=NaN,e=NaN),a.type&_.SMOOTH_QUAD_TO?(i=isNaN(i)?o:2*o-i,n=isNaN(n)?s:2*s-n):a.type&_.QUAD_TO?(i=a.relative?o+a.x1:a.x1,n=a.relative?s+a.y1:a.y2):(i=NaN,n=NaN),a.type&_.LINE_COMMANDS||a.type&_.ARC&&(0===a.rX||0===a.rY||!a.lArcFlag)||a.type&_.CURVE_TO||a.type&_.SMOOTH_CURVE_TO||a.type&_.QUAD_TO||a.type&_.SMOOTH_QUAD_TO){var O=void 0===a.x?0:a.relative?a.x:a.x-o,l=void 0===a.y?0:a.relative?a.y:a.y-s;p=isNaN(i)?void 0===a.x1?p:a.relative?a.x:a.x1-o:i-o,m=isNaN(n)?void 0===a.y1?m:a.relative?a.y:a.y1-s:n-s;var T=void 0===a.x2?0:a.relative?a.x:a.x2-o,v=void 0===a.y2?0:a.relative?a.y:a.y2-s;c(O)<=t&&c(l)<=t&&c(p)<=t&&c(m)<=t&&c(T)<=t&&c(v)<=t&&(y=!0)}return a.type&_.CLOSE_PATH&&c(o-u)<=t&&c(s-h)<=t&&(y=!0),y?[]:a}))},t.MATRIX=O,t.ROTATE=function(t,r,e){void 0===r&&(r=0),void 0===e&&(e=0),a(t,r,e);var i=Math.sin(t),n=Math.cos(t);return O(n,i,-i,n,r-r*n+e*i,e-r*i-e*n)},t.TRANSLATE=function(t,r){return void 0===r&&(r=0),a(t,r),O(1,0,0,1,t,r)},t.SCALE=function(t,r){return void 0===r&&(r=t),a(t,r),O(t,0,0,r,0,0)},t.SKEW_X=function(t){return a(t),O(1,0,Math.atan(t),1,0,0)},t.SKEW_Y=function(t){return a(t),O(1,Math.atan(t),0,1,0,0)},t.X_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),a(t),O(-1,0,0,1,t,0)},t.Y_AXIS_SYMMETRY=function(t){return void 0===t&&(t=0),a(t),O(1,0,0,-1,0,t)},t.A_TO_C=function(){return u((function(t,r,e){return _.ARC===t.type?function(t,r,e){var a,n,s,u;t.cX||o(t,r,e);for(var y=Math.min(t.phi1,t.phi2),p=Math.max(t.phi1,t.phi2)-y,m=Math.ceil(p/90),O=new Array(m),l=r,T=e,v=0;vc.maxX&&(c.maxX=t),tc.maxY&&(c.maxY=t),tw&&O(m(e,u.x1,u.x2,u.x,w))}for(var f=0,N=p(n,u.y1,u.y2,u.y);fw&&l(m(n,u.y1,u.y2,u.y,w))}}if(u.type&_.ARC){O(u.x),l(u.y),o(u,e,n);for(var x=u.xRot/180*Math.PI,d=Math.cos(x)*u.rX,E=Math.sin(x)*u.rX,A=-Math.sin(x)*u.rY,C=Math.cos(x)*u.rY,M=u.phi1u.phi2?[u.phi2+360,u.phi1+360]:[u.phi2,u.phi1],R=M[0],g=M[1],I=function(t){var r=t[0],e=t[1],i=180*Math.atan2(e,r)/Math.PI;return iR&&wR&&wu)throw new SyntaxError('Expected positive number, got \"'+u+'\" at index \"'+a+'\"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&\"0\"!==this.curNumber&&\"1\"!==this.curNumber)throw new SyntaxError('Expected a flag, got \"'+this.curNumber+'\" at index \"'+a+'\"');this.curArgs.push(u),this.curArgs.length===N[this.curCommandType]&&(_.HORIZ_LINE_TO===this.curCommandType?i({type:_.HORIZ_LINE_TO,relative:this.curCommandRelative,x:u}):_.VERT_LINE_TO===this.curCommandType?i({type:_.VERT_LINE_TO,relative:this.curCommandRelative,y:u}):this.curCommandType===_.MOVE_TO||this.curCommandType===_.LINE_TO||this.curCommandType===_.SMOOTH_QUAD_TO?(i({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),_.MOVE_TO===this.curCommandType&&(this.curCommandType=_.LINE_TO)):this.curCommandType===_.CURVE_TO?i({type:_.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===_.SMOOTH_CURVE_TO?i({type:_.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===_.QUAD_TO?i({type:_.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===_.ARC&&i({type:_.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=\"\",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!T(n))if(\",\"===n&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(\"+\"!==n&&\"-\"!==n&&\".\"!==n)if(s)this.curNumber=n,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError(\"Unterminated command at index \"+a+\".\");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character \"'+n+'\" at index '+a+\". Command cannot follow comma\");if(this.canParseCommandOrComma=!1,\"z\"!==n&&\"Z\"!==n)if(\"h\"===n||\"H\"===n)this.curCommandType=_.HORIZ_LINE_TO,this.curCommandRelative=\"h\"===n;else if(\"v\"===n||\"V\"===n)this.curCommandType=_.VERT_LINE_TO,this.curCommandRelative=\"v\"===n;else if(\"m\"===n||\"M\"===n)this.curCommandType=_.MOVE_TO,this.curCommandRelative=\"m\"===n;else if(\"l\"===n||\"L\"===n)this.curCommandType=_.LINE_TO,this.curCommandRelative=\"l\"===n;else if(\"c\"===n||\"C\"===n)this.curCommandType=_.CURVE_TO,this.curCommandRelative=\"c\"===n;else if(\"s\"===n||\"S\"===n)this.curCommandType=_.SMOOTH_CURVE_TO,this.curCommandRelative=\"s\"===n;else if(\"q\"===n||\"Q\"===n)this.curCommandType=_.QUAD_TO,this.curCommandRelative=\"q\"===n;else if(\"t\"===n||\"T\"===n)this.curCommandType=_.SMOOTH_QUAD_TO,this.curCommandRelative=\"t\"===n;else{if(\"a\"!==n&&\"A\"!==n)throw new SyntaxError('Unexpected character \"'+n+'\" at index '+a+\".\");this.curCommandType=_.ARC,this.curCommandRelative=\"a\"===n}else r.push({type:_.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=n,this.curNumberHasDecimal=\".\"===n}else this.curNumber+=n,this.curNumberHasDecimal=!0;else this.curNumber+=n;else this.curNumber+=n,this.curNumberHasExp=!0;else this.curNumber+=n,this.curNumberHasExpDigits=this.curNumberHasExp}return r},e.prototype.transform=function(t){return Object.create(this,{parse:{value:function(r,e){void 0===e&&(e=[]);for(var i=0,a=Object.getPrototypeOf(this).parse.call(this,r);i\n & Omit\n & Omit\n & Omit\n & Omit\n & Omit\n & Omit\n & Omit\n & Omit\n & Omit\n\nexport class PathParser extends SVGPathData {\n control: Point = new Point(0, 0)\n start: Point = new Point(0, 0)\n current: Point = new Point(0, 0)\n command: Command | null = null\n override readonly commands: Command[] /* Babel fix: */ = this.commands\n private i = -1\n private previousCommand: Command | null = null\n private points: Point[] = []\n private angles: (number | null)[] = []\n\n constructor(path: string) {\n super(\n path\n // Fix spaces after signs.\n .replace(/([+\\-.])\\s+/gm, '$1')\n // Remove invalid part.\n .replace(/[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*/g, '')\n )\n }\n\n reset() {\n this.i = -1\n this.command = null\n this.previousCommand = null\n this.start = new Point(0, 0)\n this.control = new Point(0, 0)\n this.current = new Point(0, 0)\n this.points = []\n this.angles = []\n }\n\n isEnd() {\n const {\n i,\n commands\n } = this\n\n return i >= commands.length - 1\n }\n\n next() {\n const command = this.commands[++this.i]\n\n this.previousCommand = this.command\n this.command = command\n\n return command\n }\n\n getPoint(xProp = 'x', yProp = 'y') {\n const point = new Point(\n this.command[xProp] as number,\n this.command[yProp] as number\n )\n\n return this.makeAbsolute(point)\n }\n\n getAsControlPoint(xProp?: string, yProp?: string) {\n const point = this.getPoint(xProp, yProp)\n\n this.control = point\n\n return point\n }\n\n getAsCurrentPoint(xProp?: string, yProp?: string) {\n const point = this.getPoint(xProp, yProp)\n\n this.current = point\n\n return point\n }\n\n getReflectedControlPoint() {\n const previousCommand = this.previousCommand.type\n\n if (previousCommand !== SVGPathData.CURVE_TO\n && previousCommand !== SVGPathData.SMOOTH_CURVE_TO\n && previousCommand !== SVGPathData.QUAD_TO\n && previousCommand !== SVGPathData.SMOOTH_QUAD_TO\n ) {\n return this.current\n }\n\n // reflect point\n const {\n current: {\n x: cx,\n y: cy\n },\n control: {\n x: ox,\n y: oy\n }\n } = this\n const point = new Point(2 * cx - ox, 2 * cy - oy)\n\n return point\n }\n\n makeAbsolute(point: Point) {\n if (this.command.relative) {\n const {\n x,\n y\n } = this.current\n\n point.x += x\n point.y += y\n }\n\n return point\n }\n\n addMarker(point: Point, from?: Point, priorTo?: Point) {\n const {\n points,\n angles\n } = this\n\n // if the last angle isn't filled in because we didn't have this point yet ...\n if (priorTo && angles.length > 0 && !angles[angles.length - 1]) {\n angles[angles.length - 1] = points[points.length - 1].angleTo(priorTo)\n }\n\n this.addMarkerAngle(point, from ? from.angleTo(point) : null)\n }\n\n addMarkerAngle(point: Point, angle: number) {\n this.points.push(point)\n this.angles.push(angle)\n }\n\n getMarkerPoints() {\n return this.points\n }\n\n getMarkerAngles() {\n const { angles } = this\n const len = angles.length\n\n for (let i = 0; i < len; i++) {\n if (!angles[i]) {\n for (let j = i + 1; j < len; j++) {\n if (angles[j]) {\n angles[i] = angles[j]\n break\n }\n }\n }\n }\n\n return angles\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { RenderingContext2D } from '../types'\nimport {\n vectorsRatio,\n vectorsAngle\n} from '../util'\nimport { Point } from '../Point'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathParser } from '../PathParser'\nimport { Document } from './Document'\nimport { RenderedElement } from './RenderedElement'\nimport { MarkerElement } from './MarkerElement'\n\nexport type Marker = [Point, number]\n\nexport class PathElement extends RenderedElement {\n override type = 'path'\n readonly pathParser: PathParser\n\n constructor(\n document: Document,\n node?: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.pathParser = new PathParser(this.getAttribute('d').getString())\n }\n\n path(ctx?: RenderingContext2D) {\n const { pathParser } = this\n const boundingBox = new BoundingBox()\n\n pathParser.reset()\n\n if (ctx) {\n ctx.beginPath()\n }\n\n while (!pathParser.isEnd()) {\n switch (pathParser.next().type) {\n case PathParser.MOVE_TO:\n this.pathM(ctx, boundingBox)\n break\n\n case PathParser.LINE_TO:\n this.pathL(ctx, boundingBox)\n break\n\n case PathParser.HORIZ_LINE_TO:\n this.pathH(ctx, boundingBox)\n break\n\n case PathParser.VERT_LINE_TO:\n this.pathV(ctx, boundingBox)\n break\n\n case PathParser.CURVE_TO:\n this.pathC(ctx, boundingBox)\n break\n\n case PathParser.SMOOTH_CURVE_TO:\n this.pathS(ctx, boundingBox)\n break\n\n case PathParser.QUAD_TO:\n this.pathQ(ctx, boundingBox)\n break\n\n case PathParser.SMOOTH_QUAD_TO:\n this.pathT(ctx, boundingBox)\n break\n\n case PathParser.ARC:\n this.pathA(ctx, boundingBox)\n break\n\n case PathParser.CLOSE_PATH:\n this.pathZ(ctx, boundingBox)\n break\n\n default:\n }\n }\n\n return boundingBox\n }\n\n getBoundingBox(_ctx: RenderingContext2D) {\n return this.path()\n }\n\n getMarkers(): Marker[] {\n const { pathParser } = this\n const points = pathParser.getMarkerPoints()\n const angles = pathParser.getMarkerAngles()\n const markers = points.map((point, i): Marker => [point, angles[i]])\n\n return markers\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n this.path(ctx)\n this.document.screen.mouse.checkPath(this, ctx)\n\n const fillRuleStyleProp = this.getStyle('fill-rule')\n\n if (ctx.fillStyle !== '') {\n if (fillRuleStyleProp.getString('inherit') !== 'inherit') {\n ctx.fill(fillRuleStyleProp.getString() as CanvasFillRule)\n } else {\n ctx.fill()\n }\n }\n\n if (ctx.strokeStyle !== '') {\n if (this.getAttribute('vector-effect').getString() === 'non-scaling-stroke') {\n ctx.save()\n ctx.setTransform(1, 0, 0, 1, 0, 0)\n ctx.stroke()\n ctx.restore()\n } else {\n ctx.stroke()\n }\n }\n\n const markers = this.getMarkers()\n\n if (markers) {\n const markersLastIndex = markers.length - 1\n const markerStartStyleProp = this.getStyle('marker-start')\n const markerMidStyleProp = this.getStyle('marker-mid')\n const markerEndStyleProp = this.getStyle('marker-end')\n\n if (markerStartStyleProp.isUrlDefinition()) {\n const marker = markerStartStyleProp.getDefinition()\n const [point, angle] = markers[0]\n\n marker.render(ctx, point, angle)\n }\n\n if (markerMidStyleProp.isUrlDefinition()) {\n const marker = markerMidStyleProp.getDefinition()\n\n for (let i = 1; i < markersLastIndex; i++) {\n const [point, angle] = markers[i]\n\n marker.render(ctx, point, angle)\n }\n }\n\n if (markerEndStyleProp.isUrlDefinition()) {\n const marker = markerEndStyleProp.getDefinition()\n const [point, angle] = markers[markersLastIndex]\n\n marker.render(ctx, point, angle)\n }\n }\n }\n\n static pathM(pathParser: PathParser) {\n const point = pathParser.getAsCurrentPoint()\n\n pathParser.start = pathParser.current\n\n return {\n point\n }\n }\n\n protected pathM(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const { point } = PathElement.pathM(pathParser)\n const {\n x,\n y\n } = point\n\n pathParser.addMarker(point)\n boundingBox.addPoint(x, y)\n\n if (ctx) {\n ctx.moveTo(x, y)\n }\n }\n\n static pathL(pathParser: PathParser) {\n const { current } = pathParser\n const point = pathParser.getAsCurrentPoint()\n\n return {\n current,\n point\n }\n }\n\n protected pathL(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point\n } = PathElement.pathL(pathParser)\n const {\n x,\n y\n } = point\n\n pathParser.addMarker(point, current)\n boundingBox.addPoint(x, y)\n\n if (ctx) {\n ctx.lineTo(x, y)\n }\n }\n\n static pathH(pathParser: PathParser) {\n const {\n current,\n command\n } = pathParser\n const point = new Point(\n (command.relative ? current.x : 0) + command.x,\n current.y\n )\n\n pathParser.current = point\n\n return {\n current,\n point\n }\n }\n\n protected pathH(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point\n } = PathElement.pathH(pathParser)\n const {\n x,\n y\n } = point\n\n pathParser.addMarker(point, current)\n boundingBox.addPoint(x, y)\n\n if (ctx) {\n ctx.lineTo(x, y)\n }\n }\n\n static pathV(pathParser: PathParser) {\n const {\n current,\n command\n } = pathParser\n const point = new Point(\n current.x,\n (command.relative ? current.y : 0) + command.y\n )\n\n pathParser.current = point\n\n return {\n current,\n point\n }\n }\n\n protected pathV(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point\n } = PathElement.pathV(pathParser)\n const {\n x,\n y\n } = point\n\n pathParser.addMarker(point, current)\n boundingBox.addPoint(x, y)\n\n if (ctx) {\n ctx.lineTo(x, y)\n }\n }\n\n static pathC(pathParser: PathParser) {\n const { current } = pathParser\n const point = pathParser.getPoint('x1', 'y1')\n const controlPoint = pathParser.getAsControlPoint('x2', 'y2')\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n point,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathC(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, point)\n boundingBox.addBezierCurve(\n current.x,\n current.y,\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.bezierCurveTo(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathS(pathParser: PathParser) {\n const { current } = pathParser\n const point = pathParser.getReflectedControlPoint()\n const controlPoint = pathParser.getAsControlPoint('x2', 'y2')\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n point,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathS(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, point)\n boundingBox.addBezierCurve(\n current.x,\n current.y,\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.bezierCurveTo(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathQ(pathParser: PathParser) {\n const { current } = pathParser\n const controlPoint = pathParser.getAsControlPoint('x1', 'y1')\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathQ(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, controlPoint)\n boundingBox.addQuadraticCurve(\n current.x,\n current.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.quadraticCurveTo(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathT(pathParser: PathParser) {\n const { current } = pathParser\n const controlPoint = pathParser.getReflectedControlPoint()\n\n pathParser.control = controlPoint\n\n const currentPoint = pathParser.getAsCurrentPoint()\n\n return {\n current,\n controlPoint,\n currentPoint\n }\n }\n\n protected pathT(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n current,\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser)\n\n pathParser.addMarker(currentPoint, controlPoint, controlPoint)\n boundingBox.addQuadraticCurve(\n current.x,\n current.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n if (ctx) {\n ctx.quadraticCurveTo(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n }\n\n static pathA(pathParser: PathParser) {\n const {\n current,\n command\n } = pathParser\n let {\n rX,\n rY,\n xRot,\n lArcFlag,\n sweepFlag\n } = command\n const xAxisRotation = xRot * (Math.PI / 180.0)\n const currentPoint = pathParser.getAsCurrentPoint()\n // Conversion from endpoint to center parameterization\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n // x1', y1'\n const currp = new Point(\n Math.cos(xAxisRotation) * (current.x - currentPoint.x) / 2.0\n + Math.sin(xAxisRotation) * (current.y - currentPoint.y) / 2.0,\n -Math.sin(xAxisRotation) * (current.x - currentPoint.x) / 2.0\n + Math.cos(xAxisRotation) * (current.y - currentPoint.y) / 2.0\n )\n // adjust radii\n const l =\n Math.pow(currp.x, 2) / Math.pow(rX, 2)\n + Math.pow(currp.y, 2) / Math.pow(rY, 2)\n\n if (l > 1) {\n rX *= Math.sqrt(l)\n rY *= Math.sqrt(l)\n }\n\n // cx', cy'\n let s = (lArcFlag === sweepFlag ? -1 : 1) * Math.sqrt(\n (\n (Math.pow(rX, 2) * Math.pow(rY, 2))\n - (Math.pow(rX, 2) * Math.pow(currp.y, 2))\n - (Math.pow(rY, 2) * Math.pow(currp.x, 2))\n ) / (\n Math.pow(rX, 2) * Math.pow(currp.y, 2)\n + Math.pow(rY, 2) * Math.pow(currp.x, 2)\n )\n )\n\n if (isNaN(s)) {\n s = 0\n }\n\n const cpp = new Point(\n s * rX * currp.y / rY,\n s * -rY * currp.x / rX\n )\n // cx, cy\n const centp = new Point(\n (current.x + currentPoint.x) / 2.0\n + Math.cos(xAxisRotation) * cpp.x\n - Math.sin(xAxisRotation) * cpp.y,\n (current.y + currentPoint.y) / 2.0\n + Math.sin(xAxisRotation) * cpp.x\n + Math.cos(xAxisRotation) * cpp.y\n )\n // initial angle\n const a1 = vectorsAngle([1, 0], [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY]) // θ1\n // angle delta\n const u = [(currp.x - cpp.x) / rX, (currp.y - cpp.y) / rY] as const\n const v = [(-currp.x - cpp.x) / rX, (-currp.y - cpp.y) / rY] as const\n let ad = vectorsAngle(u, v) // Δθ\n\n if (vectorsRatio(u, v) <= -1) {\n ad = Math.PI\n }\n\n if (vectorsRatio(u, v) >= 1) {\n ad = 0\n }\n\n return {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n }\n }\n\n protected pathA(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n const { pathParser } = this\n const {\n currentPoint,\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser)\n // for markers\n const dir = 1 - sweepFlag ? 1.0 : -1.0\n const ah = a1 + dir * (ad / 2.0)\n const halfWay = new Point(\n centp.x + rX * Math.cos(ah),\n centp.y + rY * Math.sin(ah)\n )\n\n pathParser.addMarkerAngle(halfWay, ah - dir * Math.PI / 2)\n pathParser.addMarkerAngle(currentPoint, ah - dir * Math.PI)\n boundingBox.addPoint(currentPoint.x, currentPoint.y) // TODO: this is too naive, make it better\n\n if (ctx && !isNaN(a1) && !isNaN(ad)) {\n const r = rX > rY ? rX : rY\n const sx = rX > rY ? 1 : rX / rY\n const sy = rX > rY ? rY / rX : 1\n\n ctx.translate(centp.x, centp.y)\n ctx.rotate(xAxisRotation)\n ctx.scale(sx, sy)\n ctx.arc(0, 0, r, a1, a1 + ad, Boolean(1 - sweepFlag))\n ctx.scale(1 / sx, 1 / sy)\n ctx.rotate(-xAxisRotation)\n ctx.translate(-centp.x, -centp.y)\n }\n }\n\n static pathZ(pathParser: PathParser) {\n pathParser.current = pathParser.start\n }\n\n protected pathZ(\n ctx: RenderingContext2D | undefined,\n boundingBox: BoundingBox\n ) {\n PathElement.pathZ(this.pathParser)\n\n if (ctx) {\n // only close path if it is not a straight line\n if (boundingBox.x1 !== boundingBox.x2\n && boundingBox.y1 !== boundingBox.y2\n ) {\n ctx.closePath()\n }\n }\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { toNumbers } from '../util'\nimport { Property } from '../Property'\nimport { Font } from '../Font'\nimport { RenderedElement } from './RenderedElement'\n\nexport class SVGElement extends RenderedElement {\n override type = 'svg'\n root = false\n\n override setContext(ctx: RenderingContext2D) {\n const { document } = this\n const {\n screen,\n window\n } = document\n const canvas = ctx.canvas\n\n screen.setDefaults(ctx)\n\n if ('style' in canvas\n && typeof ctx.font !== 'undefined'\n && window\n && typeof window.getComputedStyle !== 'undefined'\n ) {\n ctx.font = window.getComputedStyle(canvas).getPropertyValue('font')\n\n const fontSizeProp = new Property(\n document,\n 'fontSize',\n Font.parse(ctx.font).fontSize\n )\n\n if (fontSizeProp.hasValue()) {\n document.rootEmSize = fontSizeProp.getPixels('y')\n document.emSize = document.rootEmSize\n }\n }\n\n // create new view port\n if (!this.getAttribute('x').hasValue()) {\n this.getAttribute('x', true).setValue(0)\n }\n\n if (!this.getAttribute('y').hasValue()) {\n this.getAttribute('y', true).setValue(0)\n }\n\n let {\n width,\n height\n } = screen.viewPort\n\n if (!this.getStyle('width').hasValue()) {\n this.getStyle('width', true).setValue('100%')\n }\n\n if (!this.getStyle('height').hasValue()) {\n this.getStyle('height', true).setValue('100%')\n }\n\n if (!this.getStyle('color').hasValue()) {\n this.getStyle('color', true).setValue('black')\n }\n\n const refXAttr = this.getAttribute('refX')\n const refYAttr = this.getAttribute('refY')\n const viewBoxAttr = this.getAttribute('viewBox')\n const viewBox = viewBoxAttr.hasValue()\n ? toNumbers(viewBoxAttr.getString())\n : null\n const clip = !this.root\n && this.getStyle('overflow').getValue('hidden') !== 'visible'\n let minX = 0\n let minY = 0\n let clipX = 0\n let clipY = 0\n\n if (viewBox) {\n minX = viewBox[0]\n minY = viewBox[1]\n }\n\n if (!this.root) {\n width = this.getStyle('width').getPixels('x')\n height = this.getStyle('height').getPixels('y')\n\n if (this.type === 'marker') {\n clipX = minX\n clipY = minY\n minX = 0\n minY = 0\n }\n }\n\n screen.viewPort.setCurrent(width, height)\n\n // Default value of transform-origin is center only for root SVG elements\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform-origin\n if (this.node // is not temporary SVGElement\n && (!this.parent || this.node.parentNode?.nodeName === 'foreignObject')\n && this.getStyle('transform', false, true).hasValue()\n && !this.getStyle('transform-origin', false, true).hasValue()\n ) {\n this.getStyle('transform-origin', true, true).setValue('50% 50%')\n }\n\n super.setContext(ctx)\n\n ctx.translate(\n this.getAttribute('x').getPixels('x'),\n this.getAttribute('y').getPixels('y')\n )\n\n if (viewBox) {\n width = viewBox[2]\n height = viewBox[3]\n }\n\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width: screen.viewPort.width,\n desiredWidth: width,\n height: screen.viewPort.height,\n desiredHeight: height,\n minX,\n minY,\n refX: refXAttr.getValue() as number,\n refY: refYAttr.getValue() as number,\n clip,\n clipX,\n clipY\n })\n\n if (viewBox) {\n screen.viewPort.removeCurrent()\n screen.viewPort.setCurrent(width, height)\n }\n }\n\n override clearContext(ctx: RenderingContext2D) {\n super.clearContext(ctx)\n\n this.document.screen.viewPort.removeCurrent()\n }\n\n /**\n * Resize SVG to fit in given size.\n * @param width\n * @param height\n * @param preserveAspectRatio\n */\n resize(\n width: number,\n height = width,\n preserveAspectRatio: boolean | string = false\n ) {\n const widthAttr = this.getAttribute('width', true)\n const heightAttr = this.getAttribute('height', true)\n const viewBoxAttr = this.getAttribute('viewBox')\n const styleAttr = this.getAttribute('style')\n const originWidth = widthAttr.getNumber(0)\n const originHeight = heightAttr.getNumber(0)\n\n if (preserveAspectRatio) {\n if (typeof preserveAspectRatio === 'string') {\n this.getAttribute('preserveAspectRatio', true).setValue(preserveAspectRatio)\n } else {\n const preserveAspectRatioAttr = this.getAttribute('preserveAspectRatio')\n\n if (preserveAspectRatioAttr.hasValue()) {\n preserveAspectRatioAttr.setValue(preserveAspectRatioAttr.getString().replace(/^\\s*(\\S.*\\S)\\s*$/, '$1'))\n }\n }\n }\n\n widthAttr.setValue(width)\n heightAttr.setValue(height)\n\n if (!viewBoxAttr.hasValue()) {\n viewBoxAttr.setValue(`0 0 ${originWidth || width} ${originHeight || height}`)\n }\n\n if (styleAttr.hasValue()) {\n const widthStyle = this.getStyle('width')\n const heightStyle = this.getStyle('height')\n\n if (widthStyle.hasValue()) {\n widthStyle.setValue(`${width}px`)\n }\n\n if (heightStyle.hasValue()) {\n heightStyle.setValue(`${height}px`)\n }\n }\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\n\nexport class RectElement extends PathElement {\n override type = 'rect'\n\n override path(ctx: RenderingContext2D) {\n const x = this.getAttribute('x').getPixels('x')\n const y = this.getAttribute('y').getPixels('y')\n const width = this.getStyle('width', false, true).getPixels('x')\n const height = this.getStyle('height', false, true).getPixels('y')\n const rxAttr = this.getAttribute('rx')\n const ryAttr = this.getAttribute('ry')\n let rx = rxAttr.getPixels('x')\n let ry = ryAttr.getPixels('y')\n\n if (rxAttr.hasValue() && !ryAttr.hasValue()) {\n ry = rx\n }\n\n if (ryAttr.hasValue() && !rxAttr.hasValue()) {\n rx = ry\n }\n\n rx = Math.min(rx, width / 2.0)\n ry = Math.min(ry, height / 2.0)\n\n if (ctx) {\n const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3)\n\n ctx.beginPath() // always start the path so we don't fill prior paths\n\n if (height > 0 && width > 0) {\n ctx.moveTo(x + rx, y)\n ctx.lineTo(x + width - rx, y)\n ctx.bezierCurveTo(x + width - rx + (KAPPA * rx), y, x + width, y + ry - (KAPPA * ry), x + width, y + ry)\n ctx.lineTo(x + width, y + height - ry)\n ctx.bezierCurveTo(\n x + width,\n y + height - ry + (KAPPA * ry),\n x + width - rx + (KAPPA * rx),\n y + height,\n x + width - rx,\n y + height\n )\n ctx.lineTo(x + rx, y + height)\n ctx.bezierCurveTo(x + rx - (KAPPA * rx), y + height, x, y + height - ry + (KAPPA * ry), x, y + height - ry)\n ctx.lineTo(x, y + ry)\n ctx.bezierCurveTo(x, y + ry - (KAPPA * ry), x + rx - (KAPPA * rx), y, x + rx, y)\n ctx.closePath()\n }\n }\n\n return new BoundingBox(x, y, x + width, y + height)\n }\n\n override getMarkers() {\n return null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\n\nexport class CircleElement extends PathElement {\n override type = 'circle'\n\n override path(ctx: RenderingContext2D) {\n const cx = this.getAttribute('cx').getPixels('x')\n const cy = this.getAttribute('cy').getPixels('y')\n const r = this.getAttribute('r').getPixels()\n\n if (ctx && r > 0) {\n ctx.beginPath()\n ctx.arc(cx, cy, r, 0, Math.PI * 2, false)\n ctx.closePath()\n }\n\n return new BoundingBox(\n cx - r,\n cy - r,\n cx + r,\n cy + r\n )\n }\n\n override getMarkers() {\n return null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\n\nexport class EllipseElement extends PathElement {\n override type = 'ellipse'\n\n override path(ctx: RenderingContext2D) {\n const KAPPA = 4 * ((Math.sqrt(2) - 1) / 3)\n const rx = this.getAttribute('rx').getPixels('x')\n const ry = this.getAttribute('ry').getPixels('y')\n const cx = this.getAttribute('cx').getPixels('x')\n const cy = this.getAttribute('cy').getPixels('y')\n\n if (ctx && rx > 0 && ry > 0) {\n ctx.beginPath()\n ctx.moveTo(cx + rx, cy)\n ctx.bezierCurveTo(\n cx + rx,\n cy + (KAPPA * ry),\n cx + (KAPPA * rx),\n cy + ry,\n cx,\n cy + ry\n )\n ctx.bezierCurveTo(\n cx - (KAPPA * rx),\n cy + ry,\n cx - rx,\n cy + (KAPPA * ry),\n cx - rx,\n cy\n )\n ctx.bezierCurveTo(\n cx - rx,\n cy - (KAPPA * ry),\n cx - (KAPPA * rx),\n cy - ry,\n cx,\n cy - ry\n )\n ctx.bezierCurveTo(\n cx + (KAPPA * rx),\n cy - ry,\n cx + rx,\n cy - (KAPPA * ry),\n cx + rx,\n cy\n )\n ctx.closePath()\n }\n\n return new BoundingBox(\n cx - rx,\n cy - ry,\n cx + rx,\n cy + ry\n )\n }\n\n override getMarkers() {\n return null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Point } from '../Point'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement, Marker } from './PathElement'\n\nexport class LineElement extends PathElement {\n override type = 'line'\n\n getPoints() {\n return [\n new Point(\n this.getAttribute('x1').getPixels('x'),\n this.getAttribute('y1').getPixels('y')\n ),\n new Point(\n this.getAttribute('x2').getPixels('x'),\n this.getAttribute('y2').getPixels('y')\n )\n ]\n }\n\n override path(ctx: RenderingContext2D) {\n const [\n {\n x: x0,\n y: y0\n },\n {\n x: x1,\n y: y1\n }\n ] = this.getPoints()\n\n if (ctx) {\n ctx.beginPath()\n ctx.moveTo(x0, y0)\n ctx.lineTo(x1, y1)\n }\n\n return new BoundingBox(\n x0,\n y0,\n x1,\n y1\n )\n }\n\n override getMarkers(): Marker[] {\n const [p0, p1] = this.getPoints()\n const a = p0.angleTo(p1)\n\n return [[p0, a], [p1, a]]\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Point } from '../Point'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { PathElement, Marker } from './PathElement'\n\nexport class PolylineElement extends PathElement {\n override type = 'polyline'\n protected readonly points: Point[] = []\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.points = Point.parsePath(\n this.getAttribute('points').getString()\n )\n }\n\n override path(ctx: RenderingContext2D) {\n const { points } = this\n const [\n {\n x: x0,\n y: y0\n }\n ] = points\n const boundingBox = new BoundingBox(x0, y0)\n\n if (ctx) {\n ctx.beginPath()\n ctx.moveTo(x0, y0)\n }\n\n points.forEach(({\n x,\n y\n }) => {\n boundingBox.addPoint(x, y)\n\n if (ctx) {\n ctx.lineTo(x, y)\n }\n })\n\n return boundingBox\n }\n\n override getMarkers() {\n const { points } = this\n const lastIndex = points.length - 1\n const markers: Marker[] = []\n\n points.forEach((point, i) => {\n if (i === lastIndex) {\n return\n }\n\n markers.push([point, point.angleTo(points[i + 1])])\n })\n\n if (markers.length > 0) {\n markers.push([points[points.length - 1], markers[markers.length - 1][1]])\n }\n\n return markers\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { PolylineElement } from './PolylineElement'\n\nexport class PolygonElement extends PolylineElement {\n override type = 'polygon'\n\n override path(ctx: RenderingContext2D) {\n const boundingBox = super.path(ctx)\n const [\n {\n x,\n y\n }\n ] = this.points\n\n if (ctx) {\n ctx.lineTo(x, y)\n ctx.closePath()\n }\n\n return boundingBox\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Property } from '../Property'\nimport { Element } from './Element'\nimport { SVGElement } from './SVGElement'\n\nexport class PatternElement extends Element {\n override type = 'pattern'\n\n createPattern(\n ctx: RenderingContext2D,\n _: Element,\n parentOpacityProp: Property\n ) {\n const width = this.getStyle('width').getPixels('x', true)\n const height = this.getStyle('height').getPixels('y', true)\n // render me using a temporary svg element\n const patternSvg = new SVGElement(\n this.document,\n null\n )\n\n patternSvg.attributes.viewBox = new Property(\n this.document,\n 'viewBox',\n this.getAttribute('viewBox').getValue()\n )\n patternSvg.attributes.width = new Property(\n this.document,\n 'width',\n `${width}px`\n )\n patternSvg.attributes.height = new Property(\n this.document,\n 'height',\n `${height}px`\n )\n patternSvg.attributes.transform = new Property(\n this.document,\n 'transform',\n this.getAttribute('patternTransform').getValue()\n )\n patternSvg.children = this.children\n\n const patternCanvas = this.document.createCanvas(width, height)\n const patternCtx = patternCanvas.getContext('2d')\n const xAttr = this.getAttribute('x')\n const yAttr = this.getAttribute('y')\n\n if (xAttr.hasValue() && yAttr.hasValue()) {\n patternCtx.translate(\n xAttr.getPixels('x', true),\n yAttr.getPixels('y', true)\n )\n }\n\n if (parentOpacityProp.hasValue()) {\n this.styles['fill-opacity'] = parentOpacityProp\n } else {\n Reflect.deleteProperty(this.styles, 'fill-opacity')\n }\n\n // render 3x3 grid so when we transform there's no white space on edges\n for (let x = -1; x <= 1; x++) {\n for (let y = -1; y <= 1; y++) {\n patternCtx.save()\n patternSvg.attributes.x = new Property(\n this.document,\n 'x',\n x * patternCanvas.width\n )\n patternSvg.attributes.y = new Property(\n this.document,\n 'y',\n y * patternCanvas.height\n )\n patternSvg.render(patternCtx)\n patternCtx.restore()\n }\n }\n\n const pattern = ctx.createPattern(patternCanvas as CanvasImageSource, 'repeat')\n\n return pattern\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Point } from '../Point'\nimport { Property } from '../Property'\nimport { Element } from './Element'\nimport { SVGElement } from './SVGElement'\n\nexport class MarkerElement extends Element {\n override type = 'marker'\n\n override render(ctx: RenderingContext2D, point?: Point, angle?: number) {\n if (!point) {\n return\n }\n\n const {\n x,\n y\n } = point\n const orient = this.getAttribute('orient').getString('auto')\n const markerUnits = this.getAttribute('markerUnits').getString('strokeWidth')\n\n ctx.translate(x, y)\n\n if (orient === 'auto') {\n ctx.rotate(angle)\n }\n\n if (markerUnits === 'strokeWidth') {\n ctx.scale(ctx.lineWidth, ctx.lineWidth)\n }\n\n ctx.save()\n\n // render me using a temporary svg element\n const markerSvg = new SVGElement(this.document)\n\n markerSvg.type = this.type\n markerSvg.attributes.viewBox = new Property(\n this.document,\n 'viewBox',\n this.getAttribute('viewBox').getValue()\n )\n markerSvg.attributes.refX = new Property(\n this.document,\n 'refX',\n this.getAttribute('refX').getValue()\n )\n markerSvg.attributes.refY = new Property(\n this.document,\n 'refY',\n this.getAttribute('refY').getValue()\n )\n markerSvg.attributes.width = new Property(\n this.document,\n 'width',\n this.getAttribute('markerWidth').getValue()\n )\n markerSvg.attributes.height = new Property(\n this.document,\n 'height',\n this.getAttribute('markerHeight').getValue()\n )\n markerSvg.attributes.overflow = new Property(\n this.document,\n 'overflow',\n this.getAttribute('overflow').getValue()\n )\n markerSvg.attributes.fill = new Property(\n this.document,\n 'fill',\n this.getAttribute('fill').getColor('black')\n )\n markerSvg.attributes.stroke = new Property(\n this.document,\n 'stroke',\n this.getAttribute('stroke').getValue('none')\n )\n markerSvg.children = this.children\n\n markerSvg.render(ctx)\n\n ctx.restore()\n\n if (markerUnits === 'strokeWidth') {\n ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth)\n }\n\n if (orient === 'auto') {\n ctx.rotate(-angle)\n }\n\n ctx.translate(-x, -y)\n }\n}\n","import { Element } from './Element'\n\nexport class DefsElement extends Element {\n override type = 'defs'\n\n override render() {\n // NOOP\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { PathElement } from './PathElement'\nimport { RenderedElement } from './RenderedElement'\n\nexport class GElement extends RenderedElement {\n override type = 'g'\n\n getBoundingBox(ctx: RenderingContext2D) {\n const boundingBox = new BoundingBox()\n\n this.children.forEach((child: PathElement) => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx))\n })\n\n return boundingBox\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Screen } from '../Screen'\nimport { Property } from '../Property'\nimport { Document } from './Document'\nimport { Element } from './Element'\nimport { PathElement } from './PathElement'\nimport { SVGElement } from './SVGElement'\nimport { RectElement } from './RectElement'\nimport { StopElement } from './StopElement'\nimport { GElement } from './GElement'\n\nexport abstract class GradientElement extends Element {\n readonly attributesToInherit = ['gradientUnits']\n\n protected readonly stops: StopElement[] = []\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const {\n stops,\n children\n } = this\n\n children.forEach((child) => {\n if (child.type === 'stop') {\n stops.push(child as StopElement)\n }\n })\n }\n\n abstract getGradient(ctx: RenderingContext2D, element: PathElement): CanvasGradient | null\n\n getGradientUnits() {\n return this.getAttribute('gradientUnits').getString('objectBoundingBox')\n }\n\n createGradient(\n ctx: RenderingContext2D,\n element: PathElement,\n parentOpacityProp: Property\n ) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n let stopsContainer = this\n\n if (this.getHrefAttribute().hasValue()) {\n stopsContainer = this.getHrefAttribute().getDefinition()\n this.inheritStopContainer(stopsContainer)\n }\n\n const { stops } = stopsContainer\n const gradient = this.getGradient(ctx, element)\n\n if (!gradient) {\n return this.addParentOpacity(\n parentOpacityProp,\n stops[stops.length - 1].color\n )\n }\n\n stops.forEach((stop: StopElement) => {\n gradient.addColorStop(\n stop.offset,\n this.addParentOpacity(\n parentOpacityProp,\n stop.color\n )\n )\n })\n\n if (this.getAttribute('gradientTransform').hasValue()) {\n // render as transformed pattern on temporary canvas\n const { document } = this\n const { MAX_VIRTUAL_PIXELS } = Screen\n const { viewPort } = document.screen\n const rootView = viewPort.getRoot()\n const rect = new RectElement(document)\n\n rect.attributes.x = new Property(\n document,\n 'x',\n -MAX_VIRTUAL_PIXELS / 3.0\n )\n rect.attributes.y = new Property(\n document,\n 'y',\n -MAX_VIRTUAL_PIXELS / 3.0\n )\n rect.attributes.width = new Property(\n document,\n 'width',\n MAX_VIRTUAL_PIXELS\n )\n rect.attributes.height = new Property(\n document,\n 'height',\n MAX_VIRTUAL_PIXELS\n )\n\n const group = new GElement(document)\n\n group.attributes.transform = new Property(\n document,\n 'transform',\n this.getAttribute('gradientTransform').getValue()\n )\n group.children = [rect]\n\n const patternSvg = new SVGElement(document)\n\n patternSvg.attributes.x = new Property(\n document,\n 'x',\n 0\n )\n patternSvg.attributes.y = new Property(\n document,\n 'y',\n 0\n )\n patternSvg.attributes.width = new Property(\n document,\n 'width',\n rootView.width\n )\n patternSvg.attributes.height = new Property(\n document,\n 'height',\n rootView.height\n )\n patternSvg.children = [group]\n\n const patternCanvas = document.createCanvas(rootView.width, rootView.height)\n const patternCtx = patternCanvas.getContext('2d')\n\n patternCtx.fillStyle = gradient\n patternSvg.render(patternCtx)\n\n return patternCtx.createPattern(patternCanvas as CanvasImageSource, 'no-repeat')\n }\n\n return gradient\n }\n\n protected inheritStopContainer(stopsContainer: Element) {\n this.attributesToInherit.forEach((attributeToInherit) => {\n if (!this.getAttribute(attributeToInherit).hasValue()\n && stopsContainer.getAttribute(attributeToInherit).hasValue()\n ) {\n this.getAttribute(attributeToInherit, true)\n .setValue(stopsContainer.getAttribute(attributeToInherit).getValue())\n }\n })\n }\n\n protected addParentOpacity(parentOpacityProp: Property, color: string) {\n if (parentOpacityProp.hasValue()) {\n const colorProp = new Property(\n this.document,\n 'color',\n color\n )\n\n return colorProp.addOpacity(parentOpacityProp).getColor()\n }\n\n return color\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { PathElement } from './PathElement'\nimport { GradientElement } from './GradientElement'\n\nexport class LinearGradientElement extends GradientElement {\n override type = 'linearGradient'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.attributesToInherit.push(\n 'x1',\n 'y1',\n 'x2',\n 'y2'\n )\n }\n\n getGradient(ctx: RenderingContext2D, element: PathElement) {\n const isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox'\n const boundingBox = isBoundingBoxUnits\n ? element.getBoundingBox(ctx)\n : null\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null\n }\n\n if (!this.getAttribute('x1').hasValue()\n && !this.getAttribute('y1').hasValue()\n && !this.getAttribute('x2').hasValue()\n && !this.getAttribute('y2').hasValue()\n ) {\n this.getAttribute('x1', true).setValue(0)\n this.getAttribute('y1', true).setValue(0)\n this.getAttribute('x2', true).setValue(1)\n this.getAttribute('y2', true).setValue(0)\n }\n\n const x1 = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('x1').getNumber()\n : this.getAttribute('x1').getPixels('x')\n const y1 = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('y1').getNumber()\n : this.getAttribute('y1').getPixels('y')\n const x2 = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('x2').getNumber()\n : this.getAttribute('x2').getPixels('x')\n const y2 = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('y2').getNumber()\n : this.getAttribute('y2').getPixels('y')\n\n if (x1 === x2 && y1 === y2) {\n return null\n }\n\n return ctx.createLinearGradient(x1, y1, x2, y2)\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { PathElement } from './PathElement'\nimport { GradientElement } from './GradientElement'\n\nexport class RadialGradientElement extends GradientElement {\n override type = 'radialGradient'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.attributesToInherit.push(\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr'\n )\n }\n\n getGradient(ctx: RenderingContext2D, element: PathElement) {\n const isBoundingBoxUnits = this.getGradientUnits() === 'objectBoundingBox'\n const boundingBox = element.getBoundingBox(ctx)\n\n if (isBoundingBoxUnits && !boundingBox) {\n return null\n }\n\n if (!this.getAttribute('cx').hasValue()) {\n this.getAttribute('cx', true).setValue('50%')\n }\n\n if (!this.getAttribute('cy').hasValue()) {\n this.getAttribute('cy', true).setValue('50%')\n }\n\n if (!this.getAttribute('r').hasValue()) {\n this.getAttribute('r', true).setValue('50%')\n }\n\n const cx = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('cx').getNumber()\n : this.getAttribute('cx').getPixels('x')\n const cy = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('cy').getNumber()\n : this.getAttribute('cy').getPixels('y')\n let fx = cx\n let fy = cy\n\n if (this.getAttribute('fx').hasValue()) {\n fx = isBoundingBoxUnits\n ? boundingBox.x + boundingBox.width * this.getAttribute('fx').getNumber()\n : this.getAttribute('fx').getPixels('x')\n }\n\n if (this.getAttribute('fy').hasValue()) {\n fy = isBoundingBoxUnits\n ? boundingBox.y + boundingBox.height * this.getAttribute('fy').getNumber()\n : this.getAttribute('fy').getPixels('y')\n }\n\n const r = isBoundingBoxUnits\n ? (boundingBox.width + boundingBox.height) / 2.0 * this.getAttribute('r').getNumber()\n : this.getAttribute('r').getPixels()\n const fr = this.getAttribute('fr').getPixels()\n\n return ctx.createRadialGradient(fx, fy, fr, cx, cy, r)\n }\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\n\nexport class StopElement extends Element {\n override type = 'stop'\n readonly offset: number\n readonly color: string\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const offset = Math.max(0, Math.min(1, this.getAttribute('offset').getNumber()))\n const stopOpacity = this.getStyle('stop-opacity')\n let stopColor = this.getStyle('stop-color', true)\n\n if (stopColor.getString() === '') {\n stopColor.setValue('#000')\n }\n\n if (stopOpacity.hasValue()) {\n stopColor = stopColor.addOpacity(stopOpacity)\n }\n\n this.offset = offset\n this.color = stopColor.getColor()\n }\n}\n","import { Property } from '../Property'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport interface IProgress {\n from: Property\n to: Property\n progress: number\n}\n\nexport class AnimateElement extends Element {\n override type = 'animate'\n protected readonly begin: number\n protected readonly maxDuration: number\n protected readonly from: Property\n protected readonly to: Property\n protected readonly values: Property\n protected duration = 0\n protected initialValue: string | undefined\n protected initialUnits = ''\n protected removed = false\n protected frozen = false\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n document.screen.animations.push(this)\n\n this.begin = this.getAttribute('begin').getMilliseconds()\n this.maxDuration = this.begin + this.getAttribute('dur').getMilliseconds()\n this.from = this.getAttribute('from')\n this.to = this.getAttribute('to')\n this.values = new Property(document, 'values', null)\n\n const valuesAttr = this.getAttribute('values')\n\n if (valuesAttr.hasValue()) {\n this.values.setValue(valuesAttr.getString().split(';'))\n }\n }\n\n protected getProperty() {\n const attributeType = this.getAttribute('attributeType').getString()\n const attributeName = this.getAttribute('attributeName').getString()\n\n if (attributeType === 'CSS') {\n return this.parent.getStyle(attributeName, true)\n }\n\n return this.parent.getAttribute(attributeName, true)\n }\n\n calcValue() {\n const { initialUnits } = this\n const {\n progress,\n from,\n to\n } = this.getProgress()\n // tween value linearly\n let newValue = from.getNumber() + (to.getNumber() - from.getNumber()) * progress\n\n if (initialUnits === '%') {\n newValue *= 100.0 // numValue() returns 0-1 whereas properties are 0-100\n }\n\n return `${newValue}${initialUnits}`\n }\n\n update(delta: number) {\n const { parent } = this\n const prop = this.getProperty()\n\n // set initial value\n if (!this.initialValue) {\n this.initialValue = prop.getString()\n this.initialUnits = prop.getUnits()\n }\n\n // if we're past the end time\n if (this.duration > this.maxDuration) {\n const fill = this.getAttribute('fill').getString('remove')\n\n // loop for indefinitely repeating animations\n if (this.getAttribute('repeatCount').getString() === 'indefinite'\n || this.getAttribute('repeatDur').getString() === 'indefinite'\n ) {\n this.duration = 0\n } else\n if (fill === 'freeze' && !this.frozen) {\n this.frozen = true\n\n if (parent && prop) {\n parent.animationFrozen = true\n parent.animationFrozenValue = prop.getString()\n }\n } else\n if (fill === 'remove' && !this.removed) {\n this.removed = true\n\n if (parent && prop) {\n prop.setValue(\n parent.animationFrozen\n ? parent.animationFrozenValue\n : this.initialValue\n )\n }\n\n return true\n }\n\n return false\n }\n\n this.duration += delta\n\n // if we're past the begin time\n let updated = false\n\n if (this.begin < this.duration) {\n let newValue = this.calcValue() // tween\n const typeAttr = this.getAttribute('type')\n\n if (typeAttr.hasValue()) {\n // for transform, etc.\n const type = typeAttr.getString()\n\n newValue = `${type}(${newValue})`\n }\n\n prop.setValue(newValue)\n updated = true\n }\n\n return updated\n }\n\n getProgress(): IProgress {\n const {\n document,\n values\n } = this\n let progress = (this.duration - this.begin) / (this.maxDuration - this.begin)\n let from: Property\n let to: Property\n\n if (values.hasValue()) {\n const p = progress * (values.getValue().length - 1)\n const lb = Math.floor(p)\n const ub = Math.ceil(p)\n let value: string | undefined\n\n value = values.getValue()[lb]\n from = new Property(\n document,\n 'from',\n value ? parseFloat(value) : 0\n )\n\n value = values.getValue()[ub]\n to = new Property(\n document,\n 'to',\n value ? parseFloat(value) : 0\n )\n\n progress = (p - lb) / (ub - lb)\n } else {\n from = this.from\n to = this.to\n }\n\n return {\n progress,\n from,\n to\n }\n }\n}\n","import RGBColor from 'rgbcolor'\nimport { AnimateElement } from './AnimateElement'\n\nexport class AnimateColorElement extends AnimateElement {\n override type = 'animateColor'\n\n override calcValue() {\n const {\n progress,\n from,\n to\n } = this.getProgress()\n const colorFrom = new RGBColor(from.getColor())\n const colorTo = new RGBColor(to.getColor())\n\n if (colorFrom.ok && colorTo.ok) {\n // tween color linearly\n const r = colorFrom.r + (colorTo.r - colorFrom.r) * progress\n const g = colorFrom.g + (colorTo.g - colorFrom.g) * progress\n const b = colorFrom.b + (colorTo.b - colorFrom.b) * progress\n\n // ? alpha\n return `rgb(${\n Math.floor(r)\n }, ${\n Math.floor(g)\n }, ${\n Math.floor(b)\n })`\n }\n\n return this.getAttribute('from').getColor()\n }\n}\n","import { toNumbers } from '../util'\nimport { AnimateElement } from './AnimateElement'\n\nexport class AnimateTransformElement extends AnimateElement {\n override type = 'animateTransform'\n\n override calcValue() {\n const {\n progress,\n from,\n to\n } = this.getProgress()\n // tween value linearly\n const transformFrom = toNumbers(from.getString())\n const transformTo = toNumbers(to.getString())\n const newValue = transformFrom.map((from, i) => {\n const to = transformTo[i]\n\n return from + (to - from) * progress\n }).join(' ')\n\n return newValue\n }\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\n\nexport class FontFaceElement extends Element {\n override type = 'font-face'\n readonly ascent: number\n readonly descent: number\n readonly unitsPerEm: number\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.ascent = this.getAttribute('ascent').getNumber()\n this.descent = this.getAttribute('descent').getNumber()\n this.unitsPerEm = this.getAttribute('units-per-em').getNumber()\n }\n}\n","import { Document } from './Document'\nimport { PathElement } from './PathElement'\n\nexport type ArabicForm = 'isolated' | 'terminal' | 'medial' | 'initial'\n\nexport class GlyphElement extends PathElement {\n override type = 'glyph'\n readonly horizAdvX: number\n readonly unicode: string\n readonly arabicForm: ArabicForm | undefined\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber()\n this.unicode = this.getAttribute('unicode').getString()\n this.arabicForm = this.getAttribute('arabic-form').getString() as ArabicForm\n }\n}\n","import { GlyphElement } from './GlyphElement'\n\nexport class MissingGlyphElement extends GlyphElement {\n override type = 'missing-glyph'\n override readonly horizAdvX = 0\n}\n","import { Document } from './Document'\nimport { Element } from './Element'\nimport { FontFaceElement } from './FontFaceElement'\nimport { MissingGlyphElement } from './MissingGlyphElement'\nimport { ArabicForm, GlyphElement } from './GlyphElement'\n\nexport class FontElement extends Element {\n override type = 'font'\n readonly isArabic: boolean = false\n readonly missingGlyph: MissingGlyphElement | undefined\n readonly glyphs: Record = {}\n readonly arabicGlyphs: Record>> = {}\n readonly horizAdvX: number\n readonly isRTL: boolean = false\n readonly fontFace: FontFaceElement | undefined\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.horizAdvX = this.getAttribute('horiz-adv-x').getNumber()\n\n const { definitions } = document\n const { children } = this\n\n for (const child of children) {\n if (child instanceof FontFaceElement) {\n this.fontFace = child\n\n const fontFamilyStyle = child.getStyle('font-family')\n\n if (fontFamilyStyle.hasValue()) {\n definitions[fontFamilyStyle.getString()] = this\n }\n } else\n if (child instanceof MissingGlyphElement) {\n this.missingGlyph = child\n } else\n if (child instanceof GlyphElement) {\n if (child.arabicForm) {\n this.isRTL = true\n this.isArabic = true\n\n const arabicGlyph = this.arabicGlyphs[child.unicode]\n\n if (typeof arabicGlyph === 'undefined') {\n this.arabicGlyphs[child.unicode] = {\n [child.arabicForm]: child\n }\n } else {\n arabicGlyph[child.arabicForm] = child\n }\n } else {\n this.glyphs[child.unicode] = child\n }\n }\n }\n }\n\n override render() {\n // NO RENDER\n }\n}\n","import { TextElement } from './TextElement'\n\nexport class TRefElement extends TextElement {\n override type = 'tref'\n\n override getText() {\n const element = this.getHrefAttribute().getDefinition()\n\n if (element) {\n const firstChild = element.children[0] as TextElement\n\n if (firstChild) {\n return firstChild.getText()\n }\n }\n\n return ''\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Property } from '../Property'\nimport { Font } from '../Font'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { TextElement } from './TextElement'\nimport { GElement } from './GElement'\n\nexport class AElement extends TextElement {\n override type = 'a'\n protected readonly hasText: boolean\n protected readonly text: string\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const { childNodes } = node\n const firstChild = childNodes[0]\n const hasText = childNodes.length > 0\n && Array.from(childNodes).every(node => node.nodeType === 3)\n\n this.hasText = hasText\n this.text = hasText\n ? this.getTextFromNode(firstChild)\n : ''\n }\n\n override getText() {\n return this.text\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n if (this.hasText) {\n // render as text element\n super.renderChildren(ctx)\n\n const {\n document,\n x,\n y\n } = this\n const { mouse } = document.screen\n const fontSize = new Property(\n document,\n 'fontSize',\n Font.parse(document.ctx.font).fontSize\n )\n\n // Do not calc bounding box if mouse is not working.\n if (mouse.isWorking()) {\n mouse.checkBoundingBox(\n this,\n new BoundingBox(\n x,\n y - fontSize.getPixels('y'),\n x + this.measureText(ctx),\n y\n )\n )\n }\n } else\n if (this.children.length > 0) {\n // render as temporary group\n const g = new GElement(this.document)\n\n g.children = this.children\n g.parent = this\n g.render(ctx)\n }\n }\n\n onClick() {\n const { window } = this.document\n\n if (window) {\n window.open(this.getHrefAttribute().getString())\n }\n }\n\n onMouseMove() {\n const ctx = this.document.ctx as CanvasRenderingContext2D\n\n ctx.canvas.style.cursor = 'pointer'\n }\n}\n","import { RenderingContext2D } from '../types'\nimport {\n PSEUDO_ZERO,\n CB1,\n CB2,\n CB3,\n CB4,\n QB1,\n QB2,\n QB3\n} from '../util'\nimport { PathParser, CommandType } from '../PathParser'\nimport { Document } from './Document'\nimport { TextElement } from './TextElement'\nimport { PathElement } from './PathElement'\n\nexport interface IPoint {\n x: number\n y: number\n}\n\nexport interface IPathCommand {\n type: CommandType\n points: number[]\n start?: IPoint\n pathLength: number\n}\n\ninterface ICachedPoint extends IPoint {\n distance: number\n}\n\ninterface IEquidistantCache {\n step: number\n precision: number\n points: ICachedPoint[]\n}\n\ninterface IGlyphInfo {\n // transposeX: number;\n // transposeY: number;\n text: string\n rotation: number\n p0: ICachedPoint\n p1: ICachedPoint\n}\n\nexport class TextPathElement extends TextElement {\n override type = 'textPath'\n protected textWidth = 0\n protected textHeight = 0\n protected pathLength = -1\n protected glyphInfo: IGlyphInfo[] = null\n protected readonly text: string\n protected readonly dataArray: IPathCommand[]\n private letterSpacingCache: number[] = []\n private equidistantCache: IEquidistantCache\n private readonly measuresCache = new Map([['', 0]])\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const pathElement = this.getHrefAttribute().getDefinition()\n\n this.text = this.getTextFromNode()\n this.dataArray = this.parsePathData(pathElement)\n }\n\n override getText() {\n return this.text\n }\n\n path(ctx: RenderingContext2D) {\n const { dataArray } = this\n\n if (ctx) {\n ctx.beginPath()\n }\n\n dataArray.forEach(({\n type,\n points\n }) => {\n switch (type) {\n case PathParser.LINE_TO:\n\n if (ctx) {\n ctx.lineTo(points[0], points[1])\n }\n\n break\n\n case PathParser.MOVE_TO:\n\n if (ctx) {\n ctx.moveTo(points[0], points[1])\n }\n\n break\n\n case PathParser.CURVE_TO:\n\n if (ctx) {\n ctx.bezierCurveTo(\n points[0],\n points[1],\n points[2],\n points[3],\n points[4],\n points[5]\n )\n }\n\n break\n\n case PathParser.QUAD_TO:\n\n if (ctx) {\n ctx.quadraticCurveTo(\n points[0],\n points[1],\n points[2],\n points[3]\n )\n }\n\n break\n\n case PathParser.ARC: {\n const [\n cx,\n cy,\n rx,\n ry,\n theta,\n dTheta,\n psi,\n fs\n ] = points\n const r = rx > ry ? rx : ry\n const scaleX = rx > ry ? 1 : rx / ry\n const scaleY = rx > ry ? ry / rx : 1\n\n if (ctx) {\n ctx.translate(cx, cy)\n ctx.rotate(psi)\n ctx.scale(scaleX, scaleY)\n ctx.arc(0, 0, r, theta, theta + dTheta, Boolean(1 - fs))\n ctx.scale(1 / scaleX, 1 / scaleY)\n ctx.rotate(-psi)\n ctx.translate(-cx, -cy)\n }\n\n break\n }\n\n case PathParser.CLOSE_PATH:\n\n if (ctx) {\n ctx.closePath()\n }\n\n break\n\n default:\n }\n })\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n this.setTextData(ctx)\n ctx.save()\n\n const textDecoration = this.parent.getStyle('text-decoration').getString()\n const fontSize = this.getFontSize()\n const { glyphInfo } = this\n const fill = ctx.fillStyle\n\n if (textDecoration === 'underline') {\n ctx.beginPath()\n }\n\n glyphInfo.forEach((glyph, i) => {\n const {\n p0,\n p1,\n rotation,\n text: partialText\n } = glyph\n\n ctx.save()\n ctx.translate(p0.x, p0.y)\n ctx.rotate(rotation)\n\n if (ctx.fillStyle) {\n ctx.fillText(partialText, 0, 0)\n }\n\n if (ctx.strokeStyle) {\n ctx.strokeText(partialText, 0, 0)\n }\n\n ctx.restore()\n\n if (textDecoration === 'underline') {\n if (i === 0) {\n ctx.moveTo(p0.x, p0.y + fontSize / 8)\n }\n\n ctx.lineTo(p1.x, p1.y + fontSize / 5)\n }\n\n // // To assist with debugging visually, uncomment following\n //\n // ctx.beginPath();\n // if (i % 2)\n // ctx.strokeStyle = 'red';\n // else\n // ctx.strokeStyle = 'green';\n // ctx.moveTo(p0.x, p0.y);\n // ctx.lineTo(p1.x, p1.y);\n // ctx.stroke();\n // ctx.closePath();\n })\n\n if (textDecoration === 'underline') {\n ctx.lineWidth = fontSize / 20\n ctx.strokeStyle = fill\n ctx.stroke()\n ctx.closePath()\n }\n\n ctx.restore()\n }\n\n protected getLetterSpacingAt(idx = 0) {\n return this.letterSpacingCache[idx] || 0\n }\n\n protected findSegmentToFitChar(\n ctx: RenderingContext2D,\n anchor: string,\n textFullWidth: number,\n fullPathWidth: number,\n spacesNumber: number,\n inputOffset: number,\n dy: number,\n c: string,\n charI: number\n ) {\n let offset = inputOffset\n let glyphWidth = this.measureText(ctx, c)\n\n if (c === ' '\n && anchor === 'justify'\n && textFullWidth < fullPathWidth\n ) {\n glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber\n }\n\n if (charI > -1) {\n offset += this.getLetterSpacingAt(charI)\n }\n\n const splineStep = this.textHeight / 20\n const p0 = this.getEquidistantPointOnPath(offset, splineStep, 0)\n const p1 = this.getEquidistantPointOnPath(offset + glyphWidth, splineStep, 0)\n const segment = {\n p0,\n p1\n }\n const rotation = p0 && p1\n ? Math.atan2(\n p1.y - p0.y,\n p1.x - p0.x\n )\n : 0\n\n if (dy) {\n const dyX = Math.cos(Math.PI / 2 + rotation) * dy\n const dyY = Math.cos(-rotation) * dy\n\n segment.p0 = {\n ...p0,\n x: p0.x + dyX,\n y: p0.y + dyY\n }\n segment.p1 = {\n ...p1,\n x: p1.x + dyX,\n y: p1.y + dyY\n }\n }\n\n offset += glyphWidth\n\n return {\n offset,\n segment,\n rotation\n }\n }\n\n protected override measureText(\n ctx: RenderingContext2D,\n text?: string\n ) {\n const { measuresCache } = this\n const targetText = text || this.getText()\n\n if (measuresCache.has(targetText)) {\n return measuresCache.get(targetText)\n }\n\n const measure = this.measureTargetText(ctx, targetText)\n\n measuresCache.set(targetText, measure)\n\n return measure\n }\n\n // This method supposes what all custom fonts already loaded.\n // If some font will be loaded after this method call, will not be rendered correctly.\n // You need to call this method manually to update glyphs cache.\n protected setTextData(ctx: RenderingContext2D) {\n if (this.glyphInfo) {\n return\n }\n\n const renderText = this.getText()\n const chars = renderText.split('')\n const spacesNumber = renderText.split(' ').length - 1\n const dx = this.parent.getAttribute('dx').split().map(_ => _.getPixels('x'))\n const dy = this.parent.getAttribute('dy').getPixels('y')\n const anchor = this.parent.getStyle('text-anchor').getString('start')\n const thisSpacing = this.getStyle('letter-spacing')\n const parentSpacing = this.parent.getStyle('letter-spacing')\n let letterSpacing = 0\n\n if (!thisSpacing.hasValue()\n || thisSpacing.getValue() === 'inherit'\n ) {\n letterSpacing = parentSpacing.getPixels()\n } else\n if (thisSpacing.hasValue()) {\n if (thisSpacing.getValue() !== 'initial'\n && thisSpacing.getValue() !== 'unset'\n ) {\n letterSpacing = thisSpacing.getPixels()\n }\n }\n\n // fill letter-spacing cache\n const letterSpacingCache: number[] = []\n const textLen = renderText.length\n\n this.letterSpacingCache = letterSpacingCache\n\n for (let i = 0; i < textLen; i++) {\n letterSpacingCache.push(\n typeof dx[i] !== 'undefined'\n ? dx[i]\n : letterSpacing\n )\n }\n\n const dxSum = letterSpacingCache.reduce(\n (acc, cur, i) => (\n i === 0\n ? 0\n : acc + cur || 0\n ),\n 0\n )\n const textWidth = this.measureText(ctx)\n const textFullWidth = Math.max(textWidth + dxSum, 0)\n\n this.textWidth = textWidth\n this.textHeight = this.getFontSize()\n this.glyphInfo = []\n\n const fullPathWidth = this.getPathLength()\n const startOffset = this.getStyle('startOffset').getNumber(0) * fullPathWidth\n let offset = 0\n\n if (anchor === 'middle'\n || anchor === 'center'\n ) {\n offset = -textFullWidth / 2\n }\n\n if (anchor === 'end'\n || anchor === 'right'\n ) {\n offset = -textFullWidth\n }\n\n offset += startOffset\n\n chars.forEach((char, i) => {\n // Find such segment what distance between p0 and p1 is approx. width of glyph\n const {\n offset: nextOffset,\n segment,\n rotation\n } = this.findSegmentToFitChar(\n ctx,\n anchor,\n textFullWidth,\n fullPathWidth,\n spacesNumber,\n offset,\n dy,\n char,\n i\n )\n\n offset = nextOffset\n\n if (!segment.p0 || !segment.p1) {\n return\n }\n\n // const width = this.getLineLength(\n // segment.p0.x,\n // segment.p0.y,\n // segment.p1.x,\n // segment.p1.y\n // );\n // Note: Since glyphs are rendered one at a time, any kerning pair data built into the font will not be used.\n // Can foresee having a rough pair table built in that the developer can override as needed.\n // Or use \"dx\" attribute of the node as a naive replacement\n // const kern = 0;\n // placeholder for future implementation\n // const midpoint = this.getPointOnLine(\n // kern + width / 2.0,\n // segment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y\n // );\n\n this.glyphInfo.push({\n // transposeX: midpoint.x,\n // transposeY: midpoint.y,\n text: chars[i],\n p0: segment.p0,\n p1: segment.p1,\n rotation\n })\n })\n }\n\n protected parsePathData(path: PathElement) {\n this.pathLength = -1 // reset path length\n\n if (!path) {\n return []\n }\n\n const pathCommands: IPathCommand[] = []\n const { pathParser } = path\n\n pathParser.reset()\n\n // convert l, H, h, V, and v to L\n while (!pathParser.isEnd()) {\n const { current } = pathParser\n const startX = current ? current.x : 0\n const startY = current ? current.y : 0\n const command = pathParser.next()\n let nextCommandType: CommandType = command.type\n let points: number[] = []\n\n switch (command.type) {\n case PathParser.MOVE_TO:\n this.pathM(pathParser, points)\n break\n\n case PathParser.LINE_TO:\n nextCommandType = this.pathL(pathParser, points)\n break\n\n case PathParser.HORIZ_LINE_TO:\n nextCommandType = this.pathH(pathParser, points)\n break\n\n case PathParser.VERT_LINE_TO:\n nextCommandType = this.pathV(pathParser, points)\n break\n\n case PathParser.CURVE_TO:\n this.pathC(pathParser, points)\n break\n\n case PathParser.SMOOTH_CURVE_TO:\n nextCommandType = this.pathS(pathParser, points)\n break\n\n case PathParser.QUAD_TO:\n this.pathQ(pathParser, points)\n break\n\n case PathParser.SMOOTH_QUAD_TO:\n nextCommandType = this.pathT(pathParser, points)\n break\n\n case PathParser.ARC:\n points = this.pathA(pathParser)\n break\n\n case PathParser.CLOSE_PATH:\n PathElement.pathZ(pathParser)\n break\n\n default:\n }\n\n if (command.type !== PathParser.CLOSE_PATH) {\n pathCommands.push({\n type: nextCommandType,\n points,\n start: {\n x: startX,\n y: startY\n },\n pathLength: this.calcLength(startX, startY, nextCommandType, points)\n })\n } else {\n pathCommands.push({\n type: PathParser.CLOSE_PATH,\n points: [],\n pathLength: 0\n })\n }\n }\n\n return pathCommands\n }\n\n protected pathM(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathM(pathParser).point\n\n points.push(x, y)\n }\n\n protected pathL(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathL(pathParser).point\n\n points.push(x, y)\n\n return PathParser.LINE_TO\n }\n\n protected pathH(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathH(pathParser).point\n\n points.push(x, y)\n\n return PathParser.LINE_TO\n }\n\n protected pathV(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n x,\n y\n } = PathElement.pathV(pathParser).point\n\n points.push(x, y)\n\n return PathParser.LINE_TO\n }\n\n protected pathC(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathC(pathParser)\n\n points.push(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n\n protected pathS(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n point,\n controlPoint,\n currentPoint\n } = PathElement.pathS(pathParser)\n\n points.push(\n point.x,\n point.y,\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n return PathParser.CURVE_TO\n }\n\n protected pathQ(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n controlPoint,\n currentPoint\n } = PathElement.pathQ(pathParser)\n\n points.push(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n }\n\n protected pathT(\n pathParser: PathParser,\n points: number[]\n ) {\n const {\n controlPoint,\n currentPoint\n } = PathElement.pathT(pathParser)\n\n points.push(\n controlPoint.x,\n controlPoint.y,\n currentPoint.x,\n currentPoint.y\n )\n\n return PathParser.QUAD_TO\n }\n\n protected pathA(\n pathParser: PathParser\n ) {\n let {\n rX,\n rY,\n sweepFlag,\n xAxisRotation,\n centp,\n a1,\n ad\n } = PathElement.pathA(pathParser)\n\n if (sweepFlag === 0 && ad > 0) {\n ad -= 2 * Math.PI\n }\n\n if (sweepFlag === 1 && ad < 0) {\n ad += 2 * Math.PI\n }\n\n return [\n centp.x,\n centp.y,\n rX,\n rY,\n a1,\n ad,\n xAxisRotation,\n sweepFlag\n ]\n }\n\n protected calcLength(\n x: number,\n y: number,\n commandType: CommandType,\n points: number[]\n ) {\n let len = 0\n let p1: IPoint = null\n let p2: IPoint = null\n let t = 0\n\n switch (commandType) {\n case PathParser.LINE_TO:\n return this.getLineLength(x, y, points[0], points[1])\n\n case PathParser.CURVE_TO:\n // Approximates by breaking curve into 100 line segments\n len = 0.0\n p1 = this.getPointOnCubicBezier(\n 0,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3],\n points[4],\n points[5]\n )\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnCubicBezier(\n t,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3],\n points[4],\n points[5]\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n p1 = p2\n }\n\n return len\n\n case PathParser.QUAD_TO:\n // Approximates by breaking curve into 100 line segments\n len = 0.0\n p1 = this.getPointOnQuadraticBezier(\n 0,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3]\n )\n\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnQuadraticBezier(\n t,\n x,\n y,\n points[0],\n points[1],\n points[2],\n points[3]\n )\n len += this.getLineLength(\n p1.x,\n p1.y,\n p2.x,\n p2.y\n )\n p1 = p2\n }\n\n return len\n\n case PathParser.ARC: {\n // Approximates by breaking curve into line segments\n len = 0.0\n\n const start = points[4]\n // 4 = theta\n const dTheta = points[5]\n // 5 = dTheta\n const end = points[4] + dTheta\n let inc = Math.PI / 180.0\n\n // 1 degree resolution\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end)\n }\n\n // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi\n p1 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n start,\n 0\n )\n\n if (dTheta < 0) { // clockwise\n for (t = start - inc; t > end; t -= inc) {\n p2 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n t,\n 0\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n p1 = p2\n }\n } else { // counter-clockwise\n for (t = start + inc; t < end; t += inc) {\n p2 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n t,\n 0\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n p1 = p2\n }\n }\n\n p2 = this.getPointOnEllipticalArc(\n points[0],\n points[1],\n points[2],\n points[3],\n end,\n 0\n )\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y)\n\n return len\n }\n\n default:\n }\n\n return 0\n }\n\n protected getPointOnLine(\n dist: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n fromX = p1x,\n fromY = p1y\n ) {\n const m = (p2y - p1y) / ((p2x - p1x) + PSEUDO_ZERO)\n let run = Math.sqrt(dist * dist / (1 + m * m))\n\n if (p2x < p1x) {\n run *= -1\n }\n\n let rise = m * run\n let pt: IPoint = null\n\n if (p2x === p1x) { // vertical line\n pt = {\n x: fromX,\n y: fromY + rise\n }\n } else\n if ((fromY - p1y) / ((fromX - p1x) + PSEUDO_ZERO) === m) {\n pt = {\n x: fromX + run,\n y: fromY + rise\n }\n } else {\n let ix = 0\n let iy = 0\n const len = this.getLineLength(p1x, p1y, p2x, p2y)\n\n if (len < PSEUDO_ZERO) {\n return null\n }\n\n let u =\n ((fromX - p1x) * (p2x - p1x))\n + ((fromY - p1y) * (p2y - p1y))\n\n u /= len * len\n ix = p1x + u * (p2x - p1x)\n iy = p1y + u * (p2y - p1y)\n\n const pRise = this.getLineLength(fromX, fromY, ix, iy)\n const pRun = Math.sqrt(dist * dist - pRise * pRise)\n\n run = Math.sqrt(pRun * pRun / (1 + m * m))\n\n if (p2x < p1x) {\n run *= -1\n }\n\n rise = m * run\n pt = {\n x: ix + run,\n y: iy + rise\n }\n }\n\n return pt\n }\n\n protected getPointOnPath(distance: number) {\n const fullLen = this.getPathLength()\n let cumulativePathLength = 0\n let p: IPoint = null\n\n if (distance < -0.00005\n || distance - 0.00005 > fullLen\n ) {\n return null\n }\n\n const { dataArray } = this\n\n for (const command of dataArray) {\n if (command\n && (\n command.pathLength < 0.00005\n || cumulativePathLength + command.pathLength + 0.00005 < distance\n )\n ) {\n cumulativePathLength += command.pathLength\n continue\n }\n\n const delta = distance - cumulativePathLength\n let currentT = 0\n\n switch (command.type) {\n case PathParser.LINE_TO:\n p = this.getPointOnLine(\n delta,\n command.start.x,\n command.start.y,\n command.points[0],\n command.points[1],\n command.start.x,\n command.start.y\n )\n break\n\n case PathParser.ARC: {\n const start = command.points[4]\n // 4 = theta\n const dTheta = command.points[5]\n // 5 = dTheta\n const end = command.points[4] + dTheta\n\n currentT = start + delta / command.pathLength * dTheta\n\n if (dTheta < 0 && currentT < end\n || dTheta >= 0 && currentT > end\n ) {\n break\n }\n\n p = this.getPointOnEllipticalArc(\n command.points[0],\n command.points[1],\n command.points[2],\n command.points[3],\n currentT,\n command.points[6]\n )\n break\n }\n\n case PathParser.CURVE_TO:\n\n currentT = delta / command.pathLength\n\n if (currentT > 1) {\n currentT = 1\n }\n\n p = this.getPointOnCubicBezier(\n currentT,\n command.start.x,\n command.start.y,\n command.points[0],\n command.points[1],\n command.points[2],\n command.points[3],\n command.points[4],\n command.points[5]\n )\n break\n\n case PathParser.QUAD_TO:\n\n currentT = delta / command.pathLength\n\n if (currentT > 1) {\n currentT = 1\n }\n\n p = this.getPointOnQuadraticBezier(\n currentT,\n command.start.x,\n command.start.y,\n command.points[0],\n command.points[1],\n command.points[2],\n command.points[3]\n )\n break\n\n default:\n }\n\n if (p) {\n return p\n }\n\n break\n }\n\n return null\n }\n\n protected getLineLength(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n ) {\n return Math.sqrt(\n (x2 - x1) * (x2 - x1)\n + (y2 - y1) * (y2 - y1)\n )\n }\n\n protected getPathLength() {\n if (this.pathLength === -1) {\n this.pathLength = this.dataArray.reduce(\n (length, command: IPathCommand) => (\n command.pathLength > 0\n ? length + command.pathLength\n : length\n ),\n 0\n )\n }\n\n return this.pathLength\n }\n\n protected getPointOnCubicBezier(\n pct: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number\n ): IPoint {\n const x = p4x * CB1(pct) + p3x * CB2(pct) + p2x * CB3(pct) + p1x * CB4(pct)\n const y = p4y * CB1(pct) + p3y * CB2(pct) + p2y * CB3(pct) + p1y * CB4(pct)\n\n return {\n x,\n y\n }\n }\n\n protected getPointOnQuadraticBezier(\n pct: number,\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number\n ): IPoint {\n const x = p3x * QB1(pct) + p2x * QB2(pct) + p1x * QB3(pct)\n const y = p3y * QB1(pct) + p2y * QB2(pct) + p1y * QB3(pct)\n\n return {\n x,\n y\n }\n }\n\n protected getPointOnEllipticalArc(\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n theta: number,\n psi: number\n ): IPoint {\n const cosPsi = Math.cos(psi)\n const sinPsi = Math.sin(psi)\n const pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta)\n }\n\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n }\n }\n\n // TODO need some optimisations. possibly build cache only for curved segments?\n protected buildEquidistantCache(\n inputStep: number,\n inputPrecision: number\n ) {\n const fullLen = this.getPathLength()\n const precision = inputPrecision || 0.25 // accuracy vs performance\n const step = inputStep || fullLen / 100\n\n if (!this.equidistantCache\n || this.equidistantCache.step !== step\n || this.equidistantCache.precision !== precision\n ) {\n // Prepare cache\n this.equidistantCache = {\n step,\n precision,\n points: []\n }\n\n // Calculate points\n let s = 0\n\n for (let l = 0; l <= fullLen; l += precision) {\n const p0 = this.getPointOnPath(l)\n const p1 = this.getPointOnPath(l + precision)\n\n if (!p0 || !p1) {\n continue\n }\n\n s += this.getLineLength(p0.x, p0.y, p1.x, p1.y)\n\n if (s >= step) {\n this.equidistantCache.points.push({\n x: p0.x,\n y: p0.y,\n distance: l\n })\n s -= step\n }\n }\n }\n }\n\n protected getEquidistantPointOnPath(\n targetDistance: number,\n step?: number,\n precision?: number\n ) {\n this.buildEquidistantCache(step, precision)\n\n if (targetDistance < 0\n || targetDistance - this.getPathLength() > 0.00005\n ) {\n return null\n }\n\n const idx = Math.round(\n targetDistance\n / this.getPathLength()\n * (this.equidistantCache.points.length - 1)\n )\n\n return this.equidistantCache.points[idx] || null\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { Document } from './Document'\nimport { RenderedElement } from './RenderedElement'\n\n// groups: 1: mime-type (+ charset), 2: mime-type (w/o charset), 3: charset, 4: base64?, 5: body\nconst dataUriRegex = /^\\s*data:(([^/,;]+\\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i\n\nexport class ImageElement extends RenderedElement {\n override type = 'image'\n loaded = false\n protected image: CanvasImageSource | string | undefined\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const href = this.getHrefAttribute().getString()\n\n if (!href) {\n return\n }\n\n const isSvg = href.endsWith('.svg') || /^\\s*data:image\\/svg\\+xml/i.test(href)\n\n document.images.push(this)\n\n if (!isSvg) {\n void this.loadImage(href)\n } else {\n void this.loadSvg(href)\n }\n }\n\n protected async loadImage(href: string) {\n try {\n const image = await this.document.createImage(href)\n\n this.image = image\n } catch (err) {\n console.error(`Error while loading image \"${href}\":`, err)\n }\n\n this.loaded = true\n }\n\n protected async loadSvg(href: string) {\n const match = dataUriRegex.exec(href)\n\n if (match) {\n const data = match[5]\n\n if (data) {\n if (match[4] === 'base64') {\n this.image = atob(data)\n } else {\n this.image = decodeURIComponent(data)\n }\n }\n } else {\n try {\n const response = await this.document.fetch(href)\n const svg = await response.text()\n\n this.image = svg\n } catch (err) {\n console.error(`Error while loading image \"${href}\":`, err)\n }\n }\n\n this.loaded = true\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n const {\n document,\n image,\n loaded\n } = this\n const x = this.getAttribute('x').getPixels('x')\n const y = this.getAttribute('y').getPixels('y')\n const width = this.getStyle('width').getPixels('x')\n const height = this.getStyle('height').getPixels('y')\n\n if (!loaded || !image\n || !width || !height\n ) {\n return\n }\n\n ctx.save()\n ctx.translate(x, y)\n\n if (typeof image === 'string') {\n const subDocument = document.canvg.forkString(\n ctx,\n image,\n {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true,\n ignoreClear: true,\n offsetX: 0,\n offsetY: 0,\n scaleWidth: width,\n scaleHeight: height\n }\n )\n const { documentElement } = subDocument.document\n\n if (documentElement) {\n documentElement.parent = this\n }\n\n void subDocument.render()\n } else {\n document.setViewBox({\n ctx,\n aspectRatio: this.getAttribute('preserveAspectRatio').getString(),\n width,\n desiredWidth: image.width as number,\n height,\n desiredHeight: image.height as number\n })\n\n if (this.loaded) {\n if (!('complete' in image) || image.complete) {\n ctx.drawImage(image, 0, 0)\n }\n }\n }\n\n ctx.restore()\n }\n\n getBoundingBox() {\n const x = this.getAttribute('x').getPixels('x')\n const y = this.getAttribute('y').getPixels('y')\n const width = this.getStyle('width').getPixels('x')\n const height = this.getStyle('height').getPixels('y')\n\n return new BoundingBox(x, y, x + width, y + height)\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { RenderedElement } from './RenderedElement'\n\nexport class SymbolElement extends RenderedElement {\n override type = 'symbol'\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { Document } from './Document'\n\nexport class SVGFontLoader {\n loaded = false\n\n constructor(\n private readonly document: Document\n ) {\n document.fonts.push(this)\n }\n\n async load(fontFamily: string, url: string) {\n try {\n const { document } = this\n const svgDocument = await document.canvg.parser.load(url)\n const fonts = svgDocument.getElementsByTagName('font')\n\n Array.from(fonts).forEach((fontNode) => {\n const font = document.createElement(fontNode)\n\n document.definitions[fontFamily] = font\n })\n } catch (err) {\n console.error(`Error while loading font \"${url}\":`, err)\n }\n\n this.loaded = true\n }\n}\n","import {\n compressSpaces,\n getSelectorSpecificity,\n parseExternalUrl\n} from '../util'\nimport { Property } from '../Property'\nimport { SVGFontLoader } from '../SVGFontLoader'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport class StyleElement extends Element {\n static readonly parseExternalUrl = parseExternalUrl\n\n override type = 'style'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n const css = compressSpaces(\n Array.from(node.childNodes)\n // NEED TEST\n .map(_ => _.textContent)\n .join('')\n .replace(/(\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+\\/)|(^[\\s]*\\/\\/.*)/gm, '') // remove comments\n .replace(/@import.*;/g, '') // remove imports\n )\n const cssDefs = css.split('}')\n\n cssDefs.forEach((_) => {\n const def = _.trim()\n\n if (!def) {\n return\n }\n\n const cssParts = def.split('{')\n const cssClasses = cssParts[0].split(',')\n const cssProps = cssParts[1].split(';')\n\n cssClasses.forEach((_) => {\n const cssClass = _.trim()\n\n if (!cssClass) {\n return\n }\n\n const props = document.styles[cssClass] || {}\n\n cssProps.forEach((cssProp) => {\n const prop = cssProp.indexOf(':')\n const name = cssProp.substr(0, prop).trim()\n const value = cssProp.substr(prop + 1, cssProp.length - prop).trim()\n\n if (name && value) {\n props[name] = new Property(document, name, value)\n }\n })\n\n document.styles[cssClass] = props\n document.stylesSpecificity[cssClass] = getSelectorSpecificity(cssClass)\n\n if (cssClass === '@font-face') { // && !nodeEnv\n const fontFamily = props['font-family'].getString().replace(/\"|'/g, '')\n const srcs = props.src.getString().split(',')\n\n srcs.forEach((src) => {\n if (src.indexOf('format(\"svg\")') > 0) {\n const url = parseExternalUrl(src)\n\n if (url) {\n void new SVGFontLoader(document).load(fontFamily, url)\n }\n }\n })\n }\n })\n })\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Property } from '../Property'\nimport { Transform } from '../Transform'\nimport { RenderedElement } from './RenderedElement'\nimport { PathElement } from './PathElement'\nimport { SVGElement } from './SVGElement'\n\nexport class UseElement extends RenderedElement {\n override type = 'use'\n private cachedElement: PathElement | undefined\n\n override setContext(ctx: RenderingContext2D) {\n super.setContext(ctx)\n\n const xAttr = this.getAttribute('x')\n const yAttr = this.getAttribute('y')\n\n if (xAttr.hasValue()) {\n ctx.translate(xAttr.getPixels('x'), 0)\n }\n\n if (yAttr.hasValue()) {\n ctx.translate(0, yAttr.getPixels('y'))\n }\n }\n\n path(ctx: RenderingContext2D) {\n const { element } = this\n\n if (element) {\n element.path(ctx)\n }\n }\n\n override renderChildren(ctx: RenderingContext2D) {\n const {\n document,\n element\n } = this\n\n if (element) {\n let tempSvg: RenderedElement = element\n\n if (element.type === 'symbol') {\n // render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement)\n tempSvg = new SVGElement(document)\n tempSvg.attributes.viewBox = new Property(\n document,\n 'viewBox',\n element.getAttribute('viewBox').getString()\n )\n tempSvg.attributes.preserveAspectRatio = new Property(\n document,\n 'preserveAspectRatio',\n element.getAttribute('preserveAspectRatio').getString()\n )\n tempSvg.attributes.overflow = new Property(\n document,\n 'overflow',\n element.getAttribute('overflow').getString()\n )\n tempSvg.children = element.children\n\n // element is still the parent of the children\n element.styles.opacity = new Property(\n document,\n 'opacity',\n this.calculateOpacity()\n )\n }\n\n if (tempSvg.type === 'svg') {\n const widthStyle = this.getStyle('width', false, true)\n const heightStyle = this.getStyle('height', false, true)\n\n // if symbol or svg, inherit width/height from me\n if (widthStyle.hasValue()) {\n tempSvg.attributes.width = new Property(\n document,\n 'width',\n widthStyle.getString()\n )\n }\n\n if (heightStyle.hasValue()) {\n tempSvg.attributes.height = new Property(\n document,\n 'height',\n heightStyle.getString()\n )\n }\n }\n\n const oldParent = tempSvg.parent\n\n tempSvg.parent = this\n tempSvg.render(ctx)\n tempSvg.parent = oldParent\n }\n }\n\n getBoundingBox(ctx: CanvasRenderingContext2D) {\n const { element } = this\n\n if (element) {\n return element.getBoundingBox(ctx)\n }\n\n return null\n }\n\n elementTransform() {\n const {\n document,\n element\n } = this\n\n if (!element) {\n return null\n }\n\n return Transform.fromElement(document, element)\n }\n\n protected get element() {\n if (!this.cachedElement) {\n this.cachedElement = this.getHrefAttribute().getDefinition()\n }\n\n return this.cachedElement\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { toNumbers } from '../util'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nfunction imGet(\n img: Uint8ClampedArray,\n x: number,\n y: number,\n width: number,\n _height: number,\n rgba: number\n) {\n return img[y * width * 4 + x * 4 + rgba]\n}\n\nfunction imSet(\n img: Uint8ClampedArray,\n x: number,\n y: number,\n width: number,\n _height: number,\n rgba: number,\n val: number\n) {\n img[y * width * 4 + x * 4 + rgba] = val\n}\n\nfunction m(\n matrix: number[],\n i: number,\n v: number\n) {\n const mi = matrix[i]\n\n return mi * v\n}\n\nfunction c(\n a: number,\n m1: number,\n m2: number,\n m3: number\n) {\n return m1 + Math.cos(a) * m2 + Math.sin(a) * m3\n}\n\nexport class FeColorMatrixElement extends Element {\n override type = 'feColorMatrix'\n protected readonly matrix: number[]\n protected readonly includeOpacity: boolean\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n let matrix = toNumbers(this.getAttribute('values').getString())\n\n switch (this.getAttribute('type').getString('matrix')) { // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement\n case 'saturate': {\n const s = matrix[0]\n\n /* eslint-disable array-element-newline */\n matrix = [\n 0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0,\n 0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0,\n 0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0,\n 0, 0, 0, 1, 0,\n 0, 0, 0, 0, 1\n ]\n /* eslint-enable array-element-newline */\n break\n }\n\n case 'hueRotate': {\n const a = matrix[0] * Math.PI / 180.0\n\n /* eslint-disable array-element-newline */\n matrix = [\n c(a, 0.213, 0.787, -0.213), c(a, 0.715, -0.715, -0.715), c(a, 0.072, -0.072, 0.928), 0, 0,\n c(a, 0.213, -0.213, 0.143), c(a, 0.715, 0.285, 0.140), c(a, 0.072, -0.072, -0.283), 0, 0,\n c(a, 0.213, -0.213, -0.787), c(a, 0.715, -0.715, 0.715), c(a, 0.072, 0.928, 0.072), 0, 0,\n 0, 0, 0, 1, 0,\n 0, 0, 0, 0, 1\n ]\n /* eslint-enable array-element-newline */\n break\n }\n\n case 'luminanceToAlpha':\n /* eslint-disable array-element-newline */\n matrix = [\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0.2125, 0.7154, 0.0721, 0, 0,\n 0, 0, 0, 0, 1\n ]\n /* eslint-enable array-element-newline */\n break\n\n default:\n }\n\n this.matrix = matrix\n this.includeOpacity = this.getAttribute('includeOpacity').hasValue()\n }\n\n apply(\n ctx: RenderingContext2D,\n _x: number,\n _y: number,\n width: number,\n height: number\n ) {\n // assuming x==0 && y==0 for now\n const {\n includeOpacity,\n matrix\n } = this\n const srcData = ctx.getImageData(0, 0, width, height)\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const r = imGet(srcData.data, x, y, width, height, 0)\n const g = imGet(srcData.data, x, y, width, height, 1)\n const b = imGet(srcData.data, x, y, width, height, 2)\n const a = imGet(srcData.data, x, y, width, height, 3)\n let nr = m(matrix, 0, r) + m(matrix, 1, g) + m(matrix, 2, b) + m(matrix, 3, a) + m(matrix, 4, 1)\n let ng = m(matrix, 5, r) + m(matrix, 6, g) + m(matrix, 7, b) + m(matrix, 8, a) + m(matrix, 9, 1)\n let nb = m(matrix, 10, r) + m(matrix, 11, g) + m(matrix, 12, b) + m(matrix, 13, a) + m(matrix, 14, 1)\n let na = m(matrix, 15, r) + m(matrix, 16, g) + m(matrix, 17, b) + m(matrix, 18, a) + m(matrix, 19, 1)\n\n if (includeOpacity) {\n nr = 0\n ng = 0\n nb = 0\n na *= a / 255\n }\n\n imSet(srcData.data, x, y, width, height, 0, nr)\n imSet(srcData.data, x, y, width, height, 1, ng)\n imSet(srcData.data, x, y, width, height, 2, nb)\n imSet(srcData.data, x, y, width, height, 3, na)\n }\n }\n\n ctx.clearRect(0, 0, width, height)\n ctx.putImageData(srcData, 0, 0)\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { BoundingBox } from '../BoundingBox'\nimport { Element } from './Element'\nimport { PathElement } from './PathElement'\nimport { FeColorMatrixElement } from './FeColorMatrixElement'\n\nexport class MaskElement extends Element {\n static ignoreStyles = [\n 'mask',\n 'transform',\n 'clip-path'\n ]\n\n override type = 'mask'\n\n apply(ctx: RenderingContext2D, element: Element) {\n const { document } = this\n // render as temp svg\n let x = this.getAttribute('x').getPixels('x')\n let y = this.getAttribute('y').getPixels('y')\n let width = this.getStyle('width').getPixels('x')\n let height = this.getStyle('height').getPixels('y')\n\n if (!width && !height) {\n const boundingBox = new BoundingBox()\n\n this.children.forEach((child: PathElement) => {\n boundingBox.addBoundingBox(child.getBoundingBox(ctx))\n })\n\n x = Math.floor(boundingBox.x1)\n y = Math.floor(boundingBox.y1)\n width = Math.floor(boundingBox.width)\n height = Math.floor(boundingBox.height)\n }\n\n const ignoredStyles = this.removeStyles(element, MaskElement.ignoreStyles)\n const maskCanvas = document.createCanvas(x + width, y + height)\n const maskCtx = maskCanvas.getContext('2d')\n\n document.screen.setDefaults(maskCtx)\n this.renderChildren(maskCtx)\n\n // convert mask to alpha with a fake node\n // TODO: refactor out apply from feColorMatrix\n new FeColorMatrixElement(\n document,\n ({\n nodeType: 1,\n childNodes: [],\n attributes: [\n {\n nodeName: 'type',\n value: 'luminanceToAlpha'\n },\n {\n nodeName: 'includeOpacity',\n value: 'true'\n }\n ]\n }) as unknown as HTMLElement\n ).apply(maskCtx, 0, 0, x + width, y + height)\n\n const tmpCanvas = document.createCanvas(x + width, y + height)\n const tmpCtx = tmpCanvas.getContext('2d')\n\n document.screen.setDefaults(tmpCtx)\n element.render(tmpCtx)\n\n tmpCtx.globalCompositeOperation = 'destination-in'\n tmpCtx.fillStyle = maskCtx.createPattern(maskCanvas as CanvasImageSource, 'no-repeat')\n tmpCtx.fillRect(0, 0, x + width, y + height)\n\n ctx.fillStyle = tmpCtx.createPattern(tmpCanvas as CanvasImageSource, 'no-repeat')\n ctx.fillRect(0, 0, x + width, y + height)\n\n // reassign mask\n this.restoreStyles(element, ignoredStyles)\n }\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Transform } from '../Transform'\nimport { Element } from './Element'\nimport { UseElement } from './UseElement'\n\nconst noop = () => {\n // NOOP\n}\n\nexport class ClipPathElement extends Element {\n override type = 'clipPath'\n\n apply(ctx: RenderingContext2D) {\n const { document } = this\n const contextProto = Reflect.getPrototypeOf(ctx) as RenderingContext2D | null\n const {\n beginPath,\n closePath\n } = ctx\n\n if (contextProto) {\n contextProto.beginPath = noop\n contextProto.closePath = noop\n }\n\n Reflect.apply(beginPath, ctx, [])\n\n this.children.forEach((child: Element | UseElement) => {\n if (!('path' in child)) {\n return\n }\n\n let transform = 'elementTransform' in child\n ? child.elementTransform()\n : null // handle \n\n if (!transform) {\n transform = Transform.fromElement(document, child)\n }\n\n if (transform) {\n transform.apply(ctx)\n }\n\n child.path(ctx)\n\n if (contextProto) {\n contextProto.closePath = closePath\n }\n\n if (transform) {\n transform.unapply(ctx)\n }\n })\n\n Reflect.apply(closePath, ctx, [])\n ctx.clip()\n\n if (contextProto) {\n contextProto.beginPath = beginPath\n contextProto.closePath = closePath\n }\n }\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Element } from './Element'\nimport { PathElement } from './PathElement'\nimport { FeGaussianBlurElement } from './FeGaussianBlurElement'\n\nexport class FilterElement extends Element {\n static ignoreStyles = [\n 'filter',\n 'transform',\n 'clip-path'\n ]\n\n override type = 'filter'\n\n apply(ctx: RenderingContext2D, element: Element | PathElement) {\n // render as temp svg\n const {\n document,\n children\n } = this\n const boundingBox = 'getBoundingBox' in element\n ? element.getBoundingBox(ctx)\n : null\n\n if (!boundingBox) {\n return\n }\n\n let px = 0\n let py = 0\n\n children.forEach((child: FeGaussianBlurElement) => {\n const efd = child.extraFilterDistance || 0\n\n px = Math.max(px, efd)\n py = Math.max(py, efd)\n })\n\n const width = Math.floor(boundingBox.width)\n const height = Math.floor(boundingBox.height)\n const tmpCanvasWidth = width + 2 * px\n const tmpCanvasHeight = height + 2 * py\n\n if (tmpCanvasWidth < 1 || tmpCanvasHeight < 1) {\n return\n }\n\n const x = Math.floor(boundingBox.x)\n const y = Math.floor(boundingBox.y)\n const ignoredStyles = this.removeStyles(element, FilterElement.ignoreStyles)\n const tmpCanvas = document.createCanvas(tmpCanvasWidth, tmpCanvasHeight)\n const tmpCtx = tmpCanvas.getContext('2d')\n\n document.screen.setDefaults(tmpCtx)\n tmpCtx.translate(-x + px, -y + py)\n element.render(tmpCtx)\n\n // apply filters\n children.forEach((child: FeGaussianBlurElement) => {\n if (typeof child.apply === 'function') {\n child.apply(\n tmpCtx,\n 0,\n 0,\n tmpCanvasWidth,\n tmpCanvasHeight\n )\n }\n })\n\n // render on me\n ctx.drawImage(\n tmpCanvas,\n 0,\n 0,\n tmpCanvasWidth,\n tmpCanvasHeight,\n x - px,\n y - py,\n tmpCanvasWidth,\n tmpCanvasHeight\n )\n\n this.restoreStyles(element, ignoredStyles)\n }\n\n override render(_: RenderingContext2D) {\n // NO RENDER\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport class FeDropShadowElement extends Element {\n override type = 'feDropShadow'\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.addStylesFromStyleDefinition()\n }\n\n apply(\n _: RenderingContext2D,\n _x: number,\n _y: number,\n _width: number,\n _height: number\n ) {\n // TODO: implement\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Element } from './Element'\n\nexport class FeMorphologyElement extends Element {\n override type = 'feMorphology'\n\n apply(\n _: RenderingContext2D,\n _x: number,\n _y: number,\n _width: number,\n _height: number\n ) {\n // TODO: implement\n }\n}\n","import { RenderingContext2D } from '../types'\nimport { Element } from './Element'\n\nexport class FeCompositeElement extends Element {\n override type = 'feComposite'\n\n apply(\n _: RenderingContext2D,\n _x: number,\n _y: number,\n _width: number,\n _height: number\n ) {\n // TODO: implement\n }\n}\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\n/* eslint-disable no-bitwise -- used for calculations */\n\n/* eslint-disable unicorn/prefer-query-selector -- aiming at\n backward-compatibility */\n\n/**\n* StackBlur - a fast almost Gaussian Blur For Canvas\n*\n* In case you find this class useful - especially in commercial projects -\n* I am not totally unhappy for a small donation to my PayPal account\n* mario@quasimondo.de\n*\n* Or support me on flattr:\n* {@link https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript}.\n*\n* @module StackBlur\n* @author Mario Klingemann\n* Contact: mario@quasimondo.com\n* Website: {@link http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html}\n* Twitter: @quasimondo\n*\n* @copyright (c) 2010 Mario Klingemann\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\nvar mulTable = [512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];\nvar shgTable = [9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 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, 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, 22, 22, 22, 22, 22, 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, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 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, 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, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];\n/**\n * @param {string|HTMLImageElement} img\n * @param {string|HTMLCanvasElement} canvas\n * @param {Float} radius\n * @param {boolean} blurAlphaChannel\n * @param {boolean} useOffset\n * @param {boolean} skipStyles\n * @returns {undefined}\n */\n\nfunction processImage(img, canvas, radius, blurAlphaChannel, useOffset, skipStyles) {\n if (typeof img === 'string') {\n img = document.getElementById(img);\n }\n\n if (!img || Object.prototype.toString.call(img).slice(8, -1) === 'HTMLImageElement' && !('naturalWidth' in img)) {\n return;\n }\n\n var dimensionType = useOffset ? 'offset' : 'natural';\n var w = img[dimensionType + 'Width'];\n var h = img[dimensionType + 'Height']; // add ImageBitmap support,can blur texture source\n\n if (Object.prototype.toString.call(img).slice(8, -1) === 'ImageBitmap') {\n w = img.width;\n h = img.height;\n }\n\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n\n if (!canvas || !('getContext' in canvas)) {\n return;\n }\n\n if (!skipStyles) {\n canvas.style.width = w + 'px';\n canvas.style.height = h + 'px';\n }\n\n canvas.width = w;\n canvas.height = h;\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, w, h);\n context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, w, h);\n\n if (isNaN(radius) || radius < 1) {\n return;\n }\n\n if (blurAlphaChannel) {\n processCanvasRGBA(canvas, 0, 0, w, h, radius);\n } else {\n processCanvasRGB(canvas, 0, 0, w, h, radius);\n }\n}\n/**\n * @param {string|HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @throws {Error|TypeError}\n * @returns {ImageData} See {@link https://html.spec.whatwg.org/multipage/canvas.html#imagedata}\n */\n\n\nfunction getImageDataFromCanvas(canvas, topX, topY, width, height) {\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n }\n\n if (!canvas || _typeof(canvas) !== 'object' || !('getContext' in canvas)) {\n throw new TypeError('Expecting canvas with `getContext` method ' + 'in processCanvasRGB(A) calls!');\n }\n\n var context = canvas.getContext('2d');\n\n try {\n return context.getImageData(topX, topY, width, height);\n } catch (e) {\n throw new Error('unable to access image data: ' + e);\n }\n}\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\n\n\nfunction processCanvasRGBA(canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) {\n return;\n }\n\n radius |= 0;\n var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGBA(imageData, topX, topY, width, height, radius);\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\n\n\nfunction processImageDataRGBA(imageData, topX, topY, width, height, radius) {\n var pixels = imageData.data;\n var div = 2 * radius + 1; // const w4 = width << 2;\n\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n var stackStart = new BlurStack();\n var stack = stackStart;\n var stackEnd;\n\n for (var i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n\n stack.next = stackStart;\n var stackIn = null,\n stackOut = null,\n yw = 0,\n yi = 0;\n var mulSum = mulTable[radius];\n var shgSum = shgTable[radius];\n\n for (var y = 0; y < height; y++) {\n stack = stackStart;\n var pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n pa = pixels[yi + 3];\n\n for (var _i = 0; _i < radiusPlus1; _i++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n var rInSum = 0,\n gInSum = 0,\n bInSum = 0,\n aInSum = 0,\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n aOutSum = radiusPlus1 * pa,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb,\n aSum = sumFactor * pa;\n\n for (var _i2 = 1; _i2 < radiusPlus1; _i2++) {\n var p = yi + ((widthMinus1 < _i2 ? widthMinus1 : _i2) << 2);\n var r = pixels[p],\n g = pixels[p + 1],\n b = pixels[p + 2],\n a = pixels[p + 3];\n var rbs = radiusPlus1 - _i2;\n rSum += (stack.r = r) * rbs;\n gSum += (stack.g = g) * rbs;\n bSum += (stack.b = b) * rbs;\n aSum += (stack.a = a) * rbs;\n rInSum += r;\n gInSum += g;\n bInSum += b;\n aInSum += a;\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var x = 0; x < width; x++) {\n var paInitial = aSum * mulSum >>> shgSum;\n pixels[yi + 3] = paInitial;\n\n if (paInitial !== 0) {\n var _a2 = 255 / paInitial;\n\n pixels[yi] = (rSum * mulSum >>> shgSum) * _a2;\n pixels[yi + 1] = (gSum * mulSum >>> shgSum) * _a2;\n pixels[yi + 2] = (bSum * mulSum >>> shgSum) * _a2;\n } else {\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\n }\n\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n aSum -= aOutSum;\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n aOutSum -= stackIn.a;\n\n var _p = x + radius + 1;\n\n _p = yw + (_p < widthMinus1 ? _p : widthMinus1) << 2;\n rInSum += stackIn.r = pixels[_p];\n gInSum += stackIn.g = pixels[_p + 1];\n bInSum += stackIn.b = pixels[_p + 2];\n aInSum += stackIn.a = pixels[_p + 3];\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n aSum += aInSum;\n stackIn = stackIn.next;\n var _stackOut = stackOut,\n _r = _stackOut.r,\n _g = _stackOut.g,\n _b = _stackOut.b,\n _a = _stackOut.a;\n rOutSum += _r;\n gOutSum += _g;\n bOutSum += _b;\n aOutSum += _a;\n rInSum -= _r;\n gInSum -= _g;\n bInSum -= _b;\n aInSum -= _a;\n stackOut = stackOut.next;\n yi += 4;\n }\n\n yw += width;\n }\n\n for (var _x = 0; _x < width; _x++) {\n yi = _x << 2;\n\n var _pr = pixels[yi],\n _pg = pixels[yi + 1],\n _pb = pixels[yi + 2],\n _pa = pixels[yi + 3],\n _rOutSum = radiusPlus1 * _pr,\n _gOutSum = radiusPlus1 * _pg,\n _bOutSum = radiusPlus1 * _pb,\n _aOutSum = radiusPlus1 * _pa,\n _rSum = sumFactor * _pr,\n _gSum = sumFactor * _pg,\n _bSum = sumFactor * _pb,\n _aSum = sumFactor * _pa;\n\n stack = stackStart;\n\n for (var _i3 = 0; _i3 < radiusPlus1; _i3++) {\n stack.r = _pr;\n stack.g = _pg;\n stack.b = _pb;\n stack.a = _pa;\n stack = stack.next;\n }\n\n var yp = width;\n var _gInSum = 0,\n _bInSum = 0,\n _aInSum = 0,\n _rInSum = 0;\n\n for (var _i4 = 1; _i4 <= radius; _i4++) {\n yi = yp + _x << 2;\n\n var _rbs = radiusPlus1 - _i4;\n\n _rSum += (stack.r = _pr = pixels[yi]) * _rbs;\n _gSum += (stack.g = _pg = pixels[yi + 1]) * _rbs;\n _bSum += (stack.b = _pb = pixels[yi + 2]) * _rbs;\n _aSum += (stack.a = _pa = pixels[yi + 3]) * _rbs;\n _rInSum += _pr;\n _gInSum += _pg;\n _bInSum += _pb;\n _aInSum += _pa;\n stack = stack.next;\n\n if (_i4 < heightMinus1) {\n yp += width;\n }\n }\n\n yi = _x;\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var _y = 0; _y < height; _y++) {\n var _p2 = yi << 2;\n\n pixels[_p2 + 3] = _pa = _aSum * mulSum >>> shgSum;\n\n if (_pa > 0) {\n _pa = 255 / _pa;\n pixels[_p2] = (_rSum * mulSum >>> shgSum) * _pa;\n pixels[_p2 + 1] = (_gSum * mulSum >>> shgSum) * _pa;\n pixels[_p2 + 2] = (_bSum * mulSum >>> shgSum) * _pa;\n } else {\n pixels[_p2] = pixels[_p2 + 1] = pixels[_p2 + 2] = 0;\n }\n\n _rSum -= _rOutSum;\n _gSum -= _gOutSum;\n _bSum -= _bOutSum;\n _aSum -= _aOutSum;\n _rOutSum -= stackIn.r;\n _gOutSum -= stackIn.g;\n _bOutSum -= stackIn.b;\n _aOutSum -= stackIn.a;\n _p2 = _x + ((_p2 = _y + radiusPlus1) < heightMinus1 ? _p2 : heightMinus1) * width << 2;\n _rSum += _rInSum += stackIn.r = pixels[_p2];\n _gSum += _gInSum += stackIn.g = pixels[_p2 + 1];\n _bSum += _bInSum += stackIn.b = pixels[_p2 + 2];\n _aSum += _aInSum += stackIn.a = pixels[_p2 + 3];\n stackIn = stackIn.next;\n _rOutSum += _pr = stackOut.r;\n _gOutSum += _pg = stackOut.g;\n _bOutSum += _pb = stackOut.b;\n _aOutSum += _pa = stackOut.a;\n _rInSum -= _pr;\n _gInSum -= _pg;\n _bInSum -= _pb;\n _aInSum -= _pa;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n\n return imageData;\n}\n/**\n * @param {HTMLCanvasElement} canvas\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {undefined}\n */\n\n\nfunction processCanvasRGB(canvas, topX, topY, width, height, radius) {\n if (isNaN(radius) || radius < 1) {\n return;\n }\n\n radius |= 0;\n var imageData = getImageDataFromCanvas(canvas, topX, topY, width, height);\n imageData = processImageDataRGB(imageData, topX, topY, width, height, radius);\n canvas.getContext('2d').putImageData(imageData, topX, topY);\n}\n/**\n * @param {ImageData} imageData\n * @param {Integer} topX\n * @param {Integer} topY\n * @param {Integer} width\n * @param {Integer} height\n * @param {Float} radius\n * @returns {ImageData}\n */\n\n\nfunction processImageDataRGB(imageData, topX, topY, width, height, radius) {\n var pixels = imageData.data;\n var div = 2 * radius + 1; // const w4 = width << 2;\n\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n var stackStart = new BlurStack();\n var stack = stackStart;\n var stackEnd;\n\n for (var i = 1; i < div; i++) {\n stack = stack.next = new BlurStack();\n\n if (i === radiusPlus1) {\n stackEnd = stack;\n }\n }\n\n stack.next = stackStart;\n var stackIn = null;\n var stackOut = null;\n var mulSum = mulTable[radius];\n var shgSum = shgTable[radius];\n var p, rbs;\n var yw = 0,\n yi = 0;\n\n for (var y = 0; y < height; y++) {\n var pr = pixels[yi],\n pg = pixels[yi + 1],\n pb = pixels[yi + 2],\n rOutSum = radiusPlus1 * pr,\n gOutSum = radiusPlus1 * pg,\n bOutSum = radiusPlus1 * pb,\n rSum = sumFactor * pr,\n gSum = sumFactor * pg,\n bSum = sumFactor * pb;\n stack = stackStart;\n\n for (var _i5 = 0; _i5 < radiusPlus1; _i5++) {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n var rInSum = 0,\n gInSum = 0,\n bInSum = 0;\n\n for (var _i6 = 1; _i6 < radiusPlus1; _i6++) {\n p = yi + ((widthMinus1 < _i6 ? widthMinus1 : _i6) << 2);\n rSum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - _i6);\n gSum += (stack.g = pg = pixels[p + 1]) * rbs;\n bSum += (stack.b = pb = pixels[p + 2]) * rbs;\n rInSum += pr;\n gInSum += pg;\n bInSum += pb;\n stack = stack.next;\n }\n\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var x = 0; x < width; x++) {\n pixels[yi] = rSum * mulSum >>> shgSum;\n pixels[yi + 1] = gSum * mulSum >>> shgSum;\n pixels[yi + 2] = bSum * mulSum >>> shgSum;\n rSum -= rOutSum;\n gSum -= gOutSum;\n bSum -= bOutSum;\n rOutSum -= stackIn.r;\n gOutSum -= stackIn.g;\n bOutSum -= stackIn.b;\n p = yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1) << 2;\n rInSum += stackIn.r = pixels[p];\n gInSum += stackIn.g = pixels[p + 1];\n bInSum += stackIn.b = pixels[p + 2];\n rSum += rInSum;\n gSum += gInSum;\n bSum += bInSum;\n stackIn = stackIn.next;\n rOutSum += pr = stackOut.r;\n gOutSum += pg = stackOut.g;\n bOutSum += pb = stackOut.b;\n rInSum -= pr;\n gInSum -= pg;\n bInSum -= pb;\n stackOut = stackOut.next;\n yi += 4;\n }\n\n yw += width;\n }\n\n for (var _x2 = 0; _x2 < width; _x2++) {\n yi = _x2 << 2;\n\n var _pr2 = pixels[yi],\n _pg2 = pixels[yi + 1],\n _pb2 = pixels[yi + 2],\n _rOutSum2 = radiusPlus1 * _pr2,\n _gOutSum2 = radiusPlus1 * _pg2,\n _bOutSum2 = radiusPlus1 * _pb2,\n _rSum2 = sumFactor * _pr2,\n _gSum2 = sumFactor * _pg2,\n _bSum2 = sumFactor * _pb2;\n\n stack = stackStart;\n\n for (var _i7 = 0; _i7 < radiusPlus1; _i7++) {\n stack.r = _pr2;\n stack.g = _pg2;\n stack.b = _pb2;\n stack = stack.next;\n }\n\n var _rInSum2 = 0,\n _gInSum2 = 0,\n _bInSum2 = 0;\n\n for (var _i8 = 1, yp = width; _i8 <= radius; _i8++) {\n yi = yp + _x2 << 2;\n _rSum2 += (stack.r = _pr2 = pixels[yi]) * (rbs = radiusPlus1 - _i8);\n _gSum2 += (stack.g = _pg2 = pixels[yi + 1]) * rbs;\n _bSum2 += (stack.b = _pb2 = pixels[yi + 2]) * rbs;\n _rInSum2 += _pr2;\n _gInSum2 += _pg2;\n _bInSum2 += _pb2;\n stack = stack.next;\n\n if (_i8 < heightMinus1) {\n yp += width;\n }\n }\n\n yi = _x2;\n stackIn = stackStart;\n stackOut = stackEnd;\n\n for (var _y2 = 0; _y2 < height; _y2++) {\n p = yi << 2;\n pixels[p] = _rSum2 * mulSum >>> shgSum;\n pixels[p + 1] = _gSum2 * mulSum >>> shgSum;\n pixels[p + 2] = _bSum2 * mulSum >>> shgSum;\n _rSum2 -= _rOutSum2;\n _gSum2 -= _gOutSum2;\n _bSum2 -= _bOutSum2;\n _rOutSum2 -= stackIn.r;\n _gOutSum2 -= stackIn.g;\n _bOutSum2 -= stackIn.b;\n p = _x2 + ((p = _y2 + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width << 2;\n _rSum2 += _rInSum2 += stackIn.r = pixels[p];\n _gSum2 += _gInSum2 += stackIn.g = pixels[p + 1];\n _bSum2 += _bInSum2 += stackIn.b = pixels[p + 2];\n stackIn = stackIn.next;\n _rOutSum2 += _pr2 = stackOut.r;\n _gOutSum2 += _pg2 = stackOut.g;\n _bOutSum2 += _pb2 = stackOut.b;\n _rInSum2 -= _pr2;\n _gInSum2 -= _pg2;\n _bInSum2 -= _pb2;\n stackOut = stackOut.next;\n yi += width;\n }\n }\n\n return imageData;\n}\n/**\n *\n */\n\n\nvar BlurStack =\n/**\n * Set properties.\n */\nfunction BlurStack() {\n _classCallCheck(this, BlurStack);\n\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n};\n\nexport { BlurStack, processCanvasRGB as canvasRGB, processCanvasRGBA as canvasRGBA, processImage as image, processImageDataRGB as imageDataRGB, processImageDataRGBA as imageDataRGBA };\n","import { canvasRGBA } from 'stackblur-canvas'\nimport { RenderingContext2D } from '../types'\nimport { Document } from './Document'\nimport { Element } from './Element'\n\nexport class FeGaussianBlurElement extends Element {\n override type = 'feGaussianBlur'\n readonly extraFilterDistance: number\n protected readonly blurRadius: number\n\n constructor(\n document: Document,\n node: HTMLElement,\n captureTextNodes?: boolean\n ) {\n super(document, node, captureTextNodes)\n\n this.blurRadius = Math.floor(this.getAttribute('stdDeviation').getNumber())\n this.extraFilterDistance = this.blurRadius\n }\n\n apply(\n ctx: RenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n const {\n document,\n blurRadius\n } = this\n const body = document.window\n ? document.window.document.body\n : null\n const canvas = ctx.canvas as HTMLCanvasElement\n\n // StackBlur requires canvas be on document\n canvas.id = document.getUniqueId()\n\n if (body) {\n canvas.style.display = 'none'\n body.appendChild(canvas)\n }\n\n canvasRGBA(canvas, x, y, width, height, blurRadius)\n\n if (body) {\n body.removeChild(canvas)\n }\n }\n}\n","import { Element } from './Element'\n\nexport class TitleElement extends Element {\n override type = 'title'\n}\n","import { Element } from './Element'\n\nexport class DescElement extends Element {\n override type = 'desc'\n}\n","import { Element } from './Element'\nimport { UnknownElement } from './UnknownElement'\nimport { RenderedElement } from './RenderedElement'\nimport { PathElement } from './PathElement'\nimport { SVGElement } from './SVGElement'\nimport { RectElement } from './RectElement'\nimport { CircleElement } from './CircleElement'\nimport { EllipseElement } from './EllipseElement'\nimport { LineElement } from './LineElement'\nimport { PolylineElement } from './PolylineElement'\nimport { PolygonElement } from './PolygonElement'\nimport { PatternElement } from './PatternElement'\nimport { MarkerElement } from './MarkerElement'\nimport { DefsElement } from './DefsElement'\nimport { GradientElement } from './GradientElement'\nimport { LinearGradientElement } from './LinearGradientElement'\nimport { RadialGradientElement } from './RadialGradientElement'\nimport { StopElement } from './StopElement'\nimport { AnimateElement } from './AnimateElement'\nimport { AnimateColorElement } from './AnimateColorElement'\nimport { AnimateTransformElement } from './AnimateTransformElement'\nimport { FontElement } from './FontElement'\nimport { FontFaceElement } from './FontFaceElement'\nimport { MissingGlyphElement } from './MissingGlyphElement'\nimport { GlyphElement } from './GlyphElement'\nimport { TextElement } from './TextElement'\nimport { TSpanElement } from './TSpanElement'\nimport { TRefElement } from './TRefElement'\nimport { AElement } from './AElement'\nimport { TextPathElement } from './TextPathElement'\nimport { ImageElement } from './ImageElement'\nimport { GElement } from './GElement'\nimport { SymbolElement } from './SymbolElement'\nimport { StyleElement } from './StyleElement'\nimport { UseElement } from './UseElement'\nimport { MaskElement } from './MaskElement'\nimport { ClipPathElement } from './ClipPathElement'\nimport { FilterElement } from './FilterElement'\nimport { FeDropShadowElement } from './FeDropShadowElement'\nimport { FeMorphologyElement } from './FeMorphologyElement'\nimport { FeCompositeElement } from './FeCompositeElement'\nimport { FeColorMatrixElement } from './FeColorMatrixElement'\nimport { FeGaussianBlurElement } from './FeGaussianBlurElement'\nimport { TitleElement } from './TitleElement'\nimport { DescElement } from './DescElement'\n\nexport const elements = {\n 'svg': SVGElement,\n 'rect': RectElement,\n 'circle': CircleElement,\n 'ellipse': EllipseElement,\n 'line': LineElement,\n 'polyline': PolylineElement,\n 'polygon': PolygonElement,\n 'path': PathElement,\n 'pattern': PatternElement,\n 'marker': MarkerElement,\n 'defs': DefsElement,\n 'linearGradient': LinearGradientElement,\n 'radialGradient': RadialGradientElement,\n 'stop': StopElement,\n 'animate': AnimateElement,\n 'animateColor': AnimateColorElement,\n 'animateTransform': AnimateTransformElement,\n 'font': FontElement,\n 'font-face': FontFaceElement,\n 'missing-glyph': MissingGlyphElement,\n 'glyph': GlyphElement,\n 'text': TextElement,\n 'tspan': TSpanElement,\n 'tref': TRefElement,\n 'a': AElement,\n 'textPath': TextPathElement,\n 'image': ImageElement,\n 'g': GElement,\n 'symbol': SymbolElement,\n 'style': StyleElement,\n 'use': UseElement,\n 'mask': MaskElement,\n 'clipPath': ClipPathElement,\n 'filter': FilterElement,\n 'feDropShadow': FeDropShadowElement,\n 'feMorphology': FeMorphologyElement,\n 'feComposite': FeCompositeElement,\n 'feColorMatrix': FeColorMatrixElement,\n 'feGaussianBlur': FeGaussianBlurElement,\n 'title': TitleElement,\n 'desc': DescElement\n}\n\ntype Elements = typeof elements\n\nexport type AnyElement = Elements[keyof Elements]\n\nexport {\n Element,\n UnknownElement,\n RenderedElement,\n PathElement,\n SVGElement,\n RectElement,\n CircleElement,\n EllipseElement,\n LineElement,\n PolylineElement,\n PolygonElement,\n PatternElement,\n MarkerElement,\n DefsElement,\n GradientElement,\n LinearGradientElement,\n RadialGradientElement,\n StopElement,\n AnimateElement,\n AnimateColorElement,\n AnimateTransformElement,\n FontElement,\n FontFaceElement,\n MissingGlyphElement,\n GlyphElement,\n TextElement,\n TSpanElement,\n TRefElement,\n AElement,\n TextPathElement,\n ImageElement,\n GElement,\n SymbolElement,\n StyleElement,\n UseElement,\n MaskElement,\n ClipPathElement,\n FilterElement,\n FeDropShadowElement,\n FeMorphologyElement,\n FeCompositeElement,\n FeColorMatrixElement,\n FeGaussianBlurElement,\n TitleElement,\n DescElement\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { Canvg } from '../Canvg'\nimport { IScreenViewBoxConfig, Screen } from '../Screen'\nimport { Property } from '../Property'\nimport { SVGFontLoader } from '../SVGFontLoader'\nimport { Element } from './Element'\nimport { UnknownElement } from './UnknownElement'\nimport { TextNode } from './TextNode'\nimport { ImageElement } from './ImageElement'\nimport { SVGElement } from './SVGElement'\nimport {\n AnyElement,\n elements as elementTypes\n} from './elements'\n\n/**\n * Function to create new canvas.\n */\nexport type CreateCanvas = (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas\n\n/**\n * Function to create new image.\n */\nexport type CreateImage = (src: string, anonymousCrossOrigin?: boolean) => Promise\n\nexport interface IDocumentOptions {\n /**\n * Default `rem` size.\n */\n rootEmSize?: number\n /**\n * Default `em` size.\n */\n emSize?: number\n /**\n * Function to create new canvas.\n */\n createCanvas?: CreateCanvas\n /**\n * Function to create new image.\n */\n createImage?: CreateImage\n /**\n * Load images anonymously.\n */\n anonymousCrossOrigin?: boolean\n}\n\nexport type IViewBoxConfig = Omit\n\ntype DOMDocument = typeof window.document\n\nfunction createCanvas(width: number, height: number) {\n const canvas = document.createElement('canvas')\n\n canvas.width = width\n canvas.height = height\n\n return canvas\n}\n\nasync function createImage(src: string, anonymousCrossOrigin = false) {\n const image = document.createElement('img')\n\n if (anonymousCrossOrigin) {\n image.crossOrigin = 'Anonymous'\n }\n\n return new Promise((resolve, reject) => {\n image.onload = () => {\n resolve(image)\n }\n\n image.onerror = (_event, _source, _lineno, _colno, error) => {\n reject(error)\n }\n\n image.src = src\n })\n}\n\nconst DEFAULT_EM_SIZE = 12\n\nexport class Document {\n static readonly createCanvas = createCanvas\n static readonly createImage = createImage\n static readonly elementTypes: Record = elementTypes\n\n rootEmSize: number\n documentElement?: SVGElement\n readonly screen: Screen\n readonly createCanvas: CreateCanvas\n readonly createImage: CreateImage\n readonly definitions: Record = {}\n readonly styles: Record> = {}\n readonly stylesSpecificity: Record = {}\n readonly images: ImageElement[] = []\n readonly fonts: SVGFontLoader[] = []\n private readonly emSizeStack: number[] = []\n private uniqueId = 0\n\n constructor(\n readonly canvg: Canvg,\n {\n rootEmSize = DEFAULT_EM_SIZE,\n emSize = DEFAULT_EM_SIZE,\n createCanvas = Document.createCanvas,\n createImage = Document.createImage,\n anonymousCrossOrigin\n }: IDocumentOptions = {}\n ) {\n this.screen = canvg.screen\n this.rootEmSize = rootEmSize\n this.emSize = emSize\n this.createCanvas = createCanvas\n this.createImage = this.bindCreateImage(createImage, anonymousCrossOrigin)\n\n this.screen.wait(() => this.isImagesLoaded())\n this.screen.wait(() => this.isFontsLoaded())\n }\n\n private bindCreateImage(createImage: CreateImage, anonymousCrossOrigin?: boolean) {\n if (typeof anonymousCrossOrigin === 'boolean') {\n return (source: string, forceAnonymousCrossOrigin?: boolean) => createImage(\n source,\n typeof forceAnonymousCrossOrigin === 'boolean'\n ? forceAnonymousCrossOrigin\n : anonymousCrossOrigin\n )\n }\n\n return createImage\n }\n\n get window() {\n return this.screen.window\n }\n\n get fetch() {\n return this.screen.fetch\n }\n\n get ctx() {\n return this.screen.ctx\n }\n\n get emSize() {\n const { emSizeStack } = this\n\n return emSizeStack[emSizeStack.length - 1] || DEFAULT_EM_SIZE\n }\n\n set emSize(value: number) {\n const { emSizeStack } = this\n\n emSizeStack.push(value)\n }\n\n popEmSize() {\n const { emSizeStack } = this\n\n emSizeStack.pop()\n }\n\n getUniqueId() {\n return `canvg${++this.uniqueId}`\n }\n\n isImagesLoaded() {\n return this.images.every(_ => _.loaded)\n }\n\n isFontsLoaded() {\n return this.fonts.every(_ => _.loaded)\n }\n\n createDocumentElement(document: DOMDocument) {\n const documentElement = this.createElement(document.documentElement)\n\n documentElement.root = true\n documentElement.addStylesFromStyleDefinition()\n\n this.documentElement = documentElement\n\n return documentElement\n }\n\n createElement(node: HTMLElement) {\n const elementType = node.nodeName.replace(/^[^:]+:/, '')\n const ElementType = Document.elementTypes[elementType]\n\n if (ElementType) {\n return new ElementType(this, node) as T\n }\n\n return new UnknownElement(this, node) as T\n }\n\n createTextNode(node: HTMLElement) {\n return new TextNode(this, node)\n }\n\n setViewBox(config: IViewBoxConfig) {\n this.screen.setViewBox({\n document: this,\n ...config\n })\n }\n}\n","import { RenderingContext2D } from './types'\nimport { IParserOptions, Parser } from './Parser'\nimport {\n IScreenOptions,\n IScreenStartOptions,\n Screen\n} from './Screen'\nimport {\n IDocumentOptions,\n Document,\n SVGElement\n} from './Document'\n\ntype DOMDocument = typeof window.document\n\nexport interface IOptions extends IParserOptions,\n IScreenOptions,\n IScreenStartOptions,\n IDocumentOptions {}\n\n/**\n * SVG renderer on canvas.\n */\nexport class Canvg {\n /**\n * Create Canvg instance from SVG source string or URL.\n * @param ctx - Rendering context.\n * @param svg - SVG source string or URL.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n static async from(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n const parser = new Parser(options)\n const svgDocument = await parser.parse(svg)\n\n return new Canvg(ctx, svgDocument, options)\n }\n\n /**\n * Create Canvg instance from SVG source string.\n * @param ctx - Rendering context.\n * @param svg - SVG source string.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n static fromString(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n const parser = new Parser(options)\n const svgDocument = parser.parseFromString(svg)\n\n return new Canvg(ctx, svgDocument, options)\n }\n\n /**\n * XML/HTML parser instance.\n */\n readonly parser: Parser\n /**\n * Screen instance.\n */\n readonly screen: Screen\n /**\n * Canvg Document.\n */\n readonly document: Document\n private readonly documentElement: SVGElement\n private readonly options: IOptions\n\n /**\n * Main constructor.\n * @param ctx - Rendering context.\n * @param svg - SVG Document.\n * @param options - Rendering options.\n */\n constructor(\n ctx: RenderingContext2D,\n svg: DOMDocument,\n options: IOptions = {}\n ) {\n this.parser = new Parser(options)\n this.screen = new Screen(ctx, options)\n this.options = options\n\n const document = new Document(this, options)\n const documentElement = document.createDocumentElement(svg)\n\n this.document = document\n this.documentElement = documentElement\n }\n\n /**\n * Create new Canvg instance with inherited options.\n * @param ctx - Rendering context.\n * @param svg - SVG source string or URL.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n fork(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n return Canvg.from(ctx, svg, {\n ...this.options,\n ...options\n })\n }\n\n /**\n * Create new Canvg instance with inherited options.\n * @param ctx - Rendering context.\n * @param svg - SVG source string.\n * @param options - Rendering options.\n * @returns Canvg instance.\n */\n forkString(\n ctx: RenderingContext2D,\n svg: string,\n options: IOptions = {}\n ) {\n return Canvg.fromString(ctx, svg, {\n ...this.options,\n ...options\n })\n }\n\n /**\n * Document is ready promise.\n * @returns Ready promise.\n */\n ready() {\n return this.screen.ready()\n }\n\n /**\n * Document is ready value.\n * @returns Is ready or not.\n */\n isReady() {\n return this.screen.isReady()\n }\n\n /**\n * Render only first frame, ignoring animations and mouse.\n * @param options - Rendering options.\n */\n async render(options: IScreenStartOptions = {}) {\n this.start({\n enableRedraw: true,\n ignoreAnimation: true,\n ignoreMouse: true,\n ...options\n })\n\n await this.ready()\n\n this.stop()\n }\n\n /**\n * Start rendering.\n * @param options - Render options.\n */\n start(options: IScreenStartOptions = {}) {\n const {\n documentElement,\n screen,\n options: baseOptions\n } = this\n\n screen.start(documentElement, {\n enableRedraw: true,\n ...baseOptions,\n ...options\n })\n }\n\n /**\n * Stop rendering.\n */\n stop() {\n this.screen.stop()\n }\n\n /**\n * Resize SVG to fit in given size.\n * @param width\n * @param height\n * @param preserveAspectRatio\n */\n resize(\n width: number,\n height = width,\n preserveAspectRatio: boolean | string = false\n ) {\n this.documentElement.resize(width, height, preserveAspectRatio)\n }\n}\n"],"names":["offscreen","DOMParser","DOMParserFallback","preset","window","ignoreAnimation","ignoreMouse","createCanvas","width","height","OffscreenCanvas","createImage","url","response","fetch","blob","img","createImageBitmap","globalThis","Reflect","deleteProperty","node","canvas","loadImage","compressSpaces","str","replace","trimLeft","trimRight","toNumbers","matches","match","map","parseFloat","toMatrixValue","numbers","matrix","allUppercase","normalizeAttributeName","name","test","toLowerCase","parseExternalUrl","urlMatch","exec","normalizeColor","color","startsWith","rgbParts","normalizedColor","num","isFloat","String","Math","round","attributeRegex","idRegex","classRegex","pseudoElementRegex","pseudoClassWithBracketsRegex","pseudoClassRegex","elementRegex","findSelectorMatch","selector","regex","length","getSelectorSpecificity","specificity","currentSelector","delta","join","PSEUDO_ZERO","vectorMagnitude","v","sqrt","pow","vectorsRatio","u","vectorsAngle","acos","CB1","t","CB2","CB3","CB4","QB1","QB2","QB3","getNanoSeconds","hrtime","loadTime","moduleLoadTime","nodeLoadTime","upTime","performance","now","module","process","hr","uptime","Date","getTime","call","this","require","root","global","vendors","suffix","raf","caf","i","last","id","queue","frameDuration","callback","_now","next","max","setTimeout","cp","slice","cancelled","e","push","handle","fn","apply","arguments","raf_1","object","requestAnimationFrame","cancelAnimationFrame","color_string","ok","alpha","charAt","substr","simple_colors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","color_defs","re","example","bits","parseInt","processor","channels","r","g","b","isNaN","toRGB","toRGBA","toHex","toString","getHelpXML","examples","Array","j","sc","xml","document","createElement","setAttribute","list_item","list_color","RGBColor","example_div","style","cssText","appendChild","createTextNode","list_item_value","Property","empty","textBaselineMapping","isNormalizedColor","constructor","value","split","separator","getString","trim","hasValue","zeroIsValue","isString","regexp","result","isUrlDefinition","isPixels","asString","endsWith","setValue","getValue","def","getNumber","n","getColor","getDpi","getRem","rootEmSize","getEm","emSize","getUnits","getPixels","axisOrIsFontSize","processPercent","axis","isFontSize","undefined","viewPort","screen","min","computeSize","getMilliseconds","getRadians","PI","getDefinition","definitions","getFillStyleDefinition","element","opacity","createGradient","ctx","createPattern","getHrefAttribute","patternTransform","getAttribute","getTextBaseline","key","addOpacity","len","commas","ViewPort","DEFAULT_VIEWPORT_WIDTH","DEFAULT_VIEWPORT_HEIGHT","viewPorts","clear","setCurrent","removeCurrent","pop","getRoot","getDefault","getCurrent","current","d","Point","parse","point","defaultValue","x","y","parseScale","scale","parsePath","path","points","pathPoints","angleTo","atan2","applyTransform","transform","xp","yp","Mouse","working","events","eventElements","onClick","bind","onMouseMove","isWorking","start","onclick","onmousemove","stop","hasEvents","runEvents","cursor","forEach","run","parent","checkPath","isPointInPath","checkBoundingBox","boundingBox","isPointInBox","mapXY","offsetLeft","offsetTop","offsetParent","scrollX","scrollY","event","clientX","clientY","type","eventTarget","defaultWindow","defaultFetch","Screen","FRAMERATE","MAX_VIRTUAL_PIXELS","mouse","animations","readyPromise","resolveReady","waits","isReadyLock","isFirstRender","intervalId","Error","wait","checker","ready","Promise","resolve","isReady","every","_","setDefaults","strokeStyle","lineCap","lineJoin","miterLimit","setViewBox","aspectRatio","desiredWidth","desiredHeight","minX","minY","refX","refY","clip","clipX","clipY","cleanAspectRatio","aspectRatioAlign","aspectRatioMeetOrSlice","align","meetOrSlice","scaleX","scaleY","scaleMin","scaleMax","finalDesiredWidth","finalDesiredHeight","refXProp","refYProp","hasRefs","translate","scaledClipX","scaledClipY","beginPath","moveTo","lineTo","closePath","isMeetMinY","isSliceMaxY","isMeetMinX","isSliceMaxX","enableRedraw","ignoreDimensions","ignoreClear","forceRedraw","scaleWidth","scaleHeight","offsetX","offsetY","render","then","tick","shouldUpdate","cancel","reduce","animation","update","widthStyle","getStyle","heightStyle","cWidth","clientWidth","cHeight","clientHeight","viewBox","xRatio","yRatio","transformStyle","clearRect","DefaultDOMParser","Parser","resource","parseFromString","load","parser","checkDocument","err","parserError","getElementsByTagName","textContent","text","Translate","unapply","applyToPoint","Rotate","angle","originX","originY","cx","cy","rotate","transformOrigin","tx","ty","rad","cos","sin","Scale","scaleSize","Matrix","a","c","f","h","det","Skew","skew","SkewX","SkewY","parseTransforms","parseTransform","Transform","fromElement","transformOriginXProperty","transformOriginYProperty","transformTypes","skewX","skewY","transforms","data","TransformType","Element","ignoreChildTypes","attributes","styles","stylesSpecificity","animationFrozen","animationFrozenValue","children","captureTextNodes","nodeType","from","attribute","nodeName","addStylesFromStyleDefinition","childNodes","childNode","addChild","textNode","getText","createIfNotExists","attr","href","skipAncestors","parentStyle","save","mask","applyEffects","filter","setContext","renderChildren","clearContext","restore","clipPathStyleProp","child","includes","matchesSelector","styleClasses","some","styleClass","styleProp","existingSpecificity","removeStyles","ignoreStyles","toRestore","restoreStyles","isFirstChild","indexOf","UnknownElement","console","warn","wrapFontFamily","fontFamily","trimmed","prepareFontFamily","prepareFontStyle","fontStyle","targetFontStyle","prepareFontWeight","fontWeight","targetFontWeight","Font","font","inherit","fontVariant","fontSize","parts","set","part","variants","weights","inheritFont","BoundingBox","Number","NaN","y1","x2","x1","y2","addPoint","addX","addY","addBoundingBox","sumCubic","p0","p1","p2","p3","bezierCurveAdd","forX","b2ac","t1","t2","addBezierCurve","p0x","p0y","p1x","p1y","p2x","p2y","p3x","p3y","addQuadraticCurve","cp1x","cp1y","cp2x","cp2y","RenderedElement","modifiedEmSizeStack","calculateOpacity","opacityStyle","fromMeasure","fillStyleProp","fillOpacityStyleProp","strokeStyleProp","strokeOpacityProp","fillStyle","strokeWidthStyleProp","newLineWidth","lineWidth","strokeLinecapStyleProp","strokeLinejoinStyleProp","strokeMiterlimitProp","strokeDasharrayStyleProp","strokeDashoffsetProp","gaps","setLineDash","webkitLineDash","mozDash","offset","lineDashOffset","webkitLineDashOffset","mozDashOffset","fontStyleProp","fontStyleStyleProp","fontVariantStyleProp","fontWeightStyleProp","fontSizeStyleProp","fontFamilyStyleProp","globalAlpha","popEmSize","TextElement","leafTexts","textChunkStart","POSITIVE_INFINITY","maxX","NEGATIVE_INFINITY","measureCache","textBaseline","initializeCoordinates","getBoundingBox","getTElementBoundingBox","adjustChildCoordinatesRecursive","childBoundingBox","getChildBoundingBox","getFontSize","inheritFontSize","measureText","getGlyph","char","glyph","isArabic","prevChar","nextChar","arabicForm","arabicGlyphs","glyphs","missingGlyph","getTextFromNode","parentNode","index","lastIndex","renderTElementChildren","renderChild","renderText","customFont","unitsPerEm","fontFace","ctxFont","isRTL","reverse","dx","lw","horizAdvX","fillText","strokeText","applyAnchoring","firstElement","textAnchor","shift","adjustChildCoordinatesRecursiveCore","textParent","adjustChildCoordinates","xAttr","yAttr","dxAttr","dyAttr","Boolean","getInheritedAttribute","measure","measureTargetText","targetText","parentAttr","TSpanElement","TextNode","Object","setPrototypeOf","__proto__","prototype","hasOwnProperty","TypeError","create","isArray","CLOSE_PATH","HORIZ_LINE_TO","relative","VERT_LINE_TO","MOVE_TO","LINE_TO","CURVE_TO","SMOOTH_CURVE_TO","QUAD_TO","SMOOTH_QUAD_TO","ARC","rX","rY","xRot","lArcFlag","sweepFlag","o","s","abs","p","m","O","l","T","cX","cY","phi1","phi2","N","E","A","C","M","R","I","S","L","ROUND","TO_ABS","TO_REL","NORMALIZE_HVZ","NORMALIZE_ST","QT_TO_C","INFO","SANITIZE","LINE_COMMANDS","MATRIX","ROTATE","TRANSLATE","SCALE","SKEW_X","atan","SKEW_Y","X_AXIS_SYMMETRY","Y_AXIS_SYMMETRY","A_TO_C","ceil","H","ANNOTATE_ARCS","CLONE","CALCULATE_BOUNDS","maxY","DRAWING_COMMANDS","w","U","toAbs","toRel","normalizeHVZ","normalizeST","qtToC","aToC","sanitize","xSymmetry","ySymmetry","annotateArcs","charCodeAt","curNumber","curCommandType","curCommandRelative","canParseCommandOrComma","curNumberHasExp","curNumberHasExpDigits","curNumberHasDecimal","curArgs","finish","SyntaxError","getPrototypeOf","commands","encode","getBounds","PathParser","SVGPathData","control","command","previousCommand","angles","reset","isEnd","getPoint","xProp","yProp","makeAbsolute","getAsControlPoint","getAsCurrentPoint","getReflectedControlPoint","ox","oy","addMarker","priorTo","addMarkerAngle","getMarkerPoints","getMarkerAngles","PathElement","pathParser","pathM","pathL","pathH","pathV","pathC","pathS","pathQ","pathT","pathA","pathZ","_ctx","getMarkers","markers","fillRuleStyleProp","fill","setTransform","stroke","markersLastIndex","markerStartStyleProp","markerMidStyleProp","markerEndStyleProp","marker","controlPoint","currentPoint","bezierCurveTo","quadraticCurveTo","xAxisRotation","currp","cpp","centp","a1","ad","dir","ah","halfWay","sx","sy","arc","SVGElement","getComputedStyle","getPropertyValue","fontSizeProp","refXAttr","refYAttr","viewBoxAttr","resize","preserveAspectRatio","widthAttr","heightAttr","styleAttr","originWidth","originHeight","preserveAspectRatioAttr","RectElement","rxAttr","ryAttr","rx","ry","KAPPA","CircleElement","EllipseElement","LineElement","getPoints","x0","y0","PolylineElement","PolygonElement","PatternElement","parentOpacityProp","patternSvg","patternCanvas","patternCtx","getContext","pattern","MarkerElement","orient","markerUnits","markerSvg","overflow","DefsElement","GElement","GradientElement","attributesToInherit","stops","getGradientUnits","stopsContainer","inheritStopContainer","gradient","getGradient","addParentOpacity","addColorStop","rootView","rect","group","attributeToInherit","colorProp","LinearGradientElement","isBoundingBoxUnits","createLinearGradient","RadialGradientElement","fx","fy","fr","createRadialGradient","StopElement","stopOpacity","stopColor","AnimateElement","begin","maxDuration","to","values","duration","initialValue","initialUnits","removed","frozen","valuesAttr","getProperty","attributeType","attributeName","calcValue","progress","getProgress","newValue","prop","updated","typeAttr","lb","floor","ub","AnimateColorElement","colorFrom","colorTo","AnimateTransformElement","transformFrom","transformTo","FontFaceElement","ascent","descent","GlyphElement","unicode","MissingGlyphElement","FontElement","fontFamilyStyle","arabicGlyph","TRefElement","firstChild","AElement","hasText","open","TextPathElement","textWidth","textHeight","pathLength","glyphInfo","dataArray","letterSpacingCache","equidistantCache","measuresCache","Map","pathElement","parsePathData","theta","dTheta","psi","fs","setTextData","textDecoration","rotation","partialText","getLetterSpacingAt","idx","findSegmentToFitChar","anchor","textFullWidth","fullPathWidth","spacesNumber","inputOffset","dy","charI","glyphWidth","splineStep","getEquidistantPointOnPath","segment","dyX","dyY","has","get","chars","thisSpacing","parentSpacing","letterSpacing","textLen","dxSum","acc","cur","getPathLength","startOffset","nextOffset","pathCommands","startX","startY","nextCommandType","calcLength","commandType","getLineLength","getPointOnCubicBezier","getPointOnQuadraticBezier","end","inc","getPointOnEllipticalArc","getPointOnLine","dist","fromX","fromY","rise","pt","ix","iy","pRise","pRun","getPointOnPath","distance","fullLen","cumulativePathLength","currentT","pct","p4x","p4y","cosPsi","sinPsi","buildEquidistantCache","inputStep","inputPrecision","precision","step","targetDistance","dataUriRegex","ImageElement","loaded","image","isSvg","images","loadSvg","error","atob","decodeURIComponent","svg","subDocument","canvg","forkString","documentElement","complete","drawImage","SymbolElement","SVGFontLoader","fonts","svgDocument","fontNode","StyleElement","css","cssDefs","cssParts","cssClasses","cssProps","cssClass","props","cssProp","srcs","src","UseElement","cachedElement","tempSvg","oldParent","elementTransform","imGet","_height","rgba","imSet","val","mi","m1","m2","m3","FeColorMatrixElement","includeOpacity","_x","_y","srcData","getImageData","nr","ng","nb","na","putImageData","MaskElement","ignoredStyles","maskCanvas","maskCtx","tmpCanvas","tmpCtx","globalCompositeOperation","fillRect","noop","ClipPathElement","contextProto","FilterElement","px","py","efd","extraFilterDistance","tmpCanvasWidth","tmpCanvasHeight","FeDropShadowElement","_width","FeMorphologyElement","FeCompositeElement","_typeof","obj","Symbol","iterator","_classCallCheck","instance","Constructor","mulTable","shgTable","getImageDataFromCanvas","topX","topY","getElementById","context","processCanvasRGBA","radius","imageData","processImageDataRGBA","pixels","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","stackEnd","stackIn","stackOut","yw","yi","mulSum","shgSum","pr","pg","pb","pa","_i","rInSum","gInSum","bInSum","aInSum","rOutSum","gOutSum","bOutSum","aOutSum","rSum","gSum","bSum","aSum","_i2","rbs","paInitial","_a2","_p","_stackOut","_r","_g","_b","_a","_pr","_pg","_pb","_pa","_rOutSum","_gOutSum","_bOutSum","_aOutSum","_rSum","_gSum","_bSum","_aSum","_i3","_gInSum","_bInSum","_aInSum","_rInSum","_i4","_rbs","_p2","FeGaussianBlurElement","blurRadius","body","getUniqueId","display","canvasRGBA","removeChild","TitleElement","DescElement","elements","anonymousCrossOrigin","crossOrigin","reject","onload","onerror","_event","_source","_lineno","_colno","DEFAULT_EM_SIZE","Document","elementTypes","emSizeStack","uniqueId","bindCreateImage","isImagesLoaded","isFontsLoaded","source","forceAnonymousCrossOrigin","createDocumentElement","elementType","ElementType","config","Canvg","options","fromString","fork","baseOptions"],"mappings":"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,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAK,IAAA,GAAA;EAAI,CAAA,CAAA;EAC1wC,IAAIC,QAAW,GAAA;EAAC,IAAA,CAAA;EAAG,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,EAAA;EAAI,IAAA,E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"} \ No newline at end of file diff --git a/lib/canvg/v2/canvg.js b/lib/canvg/v2/canvg.js new file mode 100644 index 0000000..a924700 --- /dev/null +++ b/lib/canvg/v2/canvg.js @@ -0,0 +1,4093 @@ +/* eslint-disable */ +/* + * canvg.js - Javascript SVG parser and renderer on Canvas + * version 2.0.0 + * MIT Licensed + * Gabe Lerner (gabelerner@gmail.com) + * https://github.com/canvg/canvg + * + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('rgbcolor'), require('stackblur-canvas')) : + typeof define === 'function' && define.amd ? define(['rgbcolor', 'stackblur-canvas'], factory) : + (global.canvgv2 = factory(global.RGBColor,global.StackBlur)); +}(this || window, (function (rgbcolor,stackblurCanvas) { 'use strict'; + + rgbcolor = rgbcolor && rgbcolor.hasOwnProperty('default') ? rgbcolor['default'] : rgbcolor; + stackblurCanvas = stackblurCanvas && stackblurCanvas.hasOwnProperty('default') ? stackblurCanvas['default'] : stackblurCanvas; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var canvg_1 = createCommonjsModule(function (module) { + /* eslint-env browser, node */ + /* globals $, Sizzle, Windows, ActiveXObject */ + /* eslint-disable no-redeclare */ + + + var isNode = (module.exports && typeof window === 'undefined'), + nodeEnv = false; + var windowEnv; + + { + windowEnv = window; + windowEnv.DOMParser = window.DOMParser; + } + + var doc = windowEnv.document, + defaultClientWidth = 800, + defaultClientHeight = 600; + + function createCanvas(width, height) { + var c; + { + c = doc.createElement('canvas'); + c.width = width; + c.height = height; + } + return c; + } + + // canvg(target, s) + // empty parameters: replace all 'svg' elements on page with 'canvas' elements + // target: canvas element or the id of a canvas element + // s: svg string, url to svg file, or xml document + // opts: optional hash of options + // ignoreMouse: true => ignore mouse events + // ignoreAnimation: true => ignore animations + // ignoreDimensions: true => does not try to resize canvas + // ignoreClear: true => does not clear canvas + // offsetX: int => draws at a x offset + // offsetY: int => draws at a y offset + // scaleWidth: int => scales horizontally to width + // scaleHeight: int => scales vertically to height + // renderCallback: function => will call the function after the first render is completed + // enableRedraw: function => whether enable the redraw interval in node environment + // forceRedraw: function => will call the function on every frame, if it returns true, will redraw + var canvg = function (target, s, opts) { + // no parameters + if (target == null && s == null && opts == null) { + var svgTags = doc.querySelectorAll('svg'); + for (var i = 0; i < svgTags.length; i++) { + var svgTag = svgTags[i]; + var c = doc.createElement('canvas'); + if (typeof(svgTag.clientWidth) !== 'undefined' && typeof(svgTag.clientHeight) !== 'undefined') { + c.width = svgTag.clientWidth; + c.height = svgTag.clientHeight; + } else { + var rect = svgTag.getBoundingClientRect(); + c.width = rect.width; + c.height = rect.height; + } + svgTag.parentNode.insertBefore(c, svgTag); + svgTag.parentNode.removeChild(svgTag); + var div = doc.createElement('div'); + div.appendChild(svgTag); + canvg(c, div.innerHTML); + } + return; + } + + var svg = build(opts || {}); + + if (typeof target == 'string') { + target = doc.getElementById(target); + } + + // store class on canvas + if (target.svg != null) target.svg.stop(); + + // on i.e. 8 for flash canvas, we can't assign the property so check for it + if (!(target.childNodes && target.childNodes.length == 1 && target.childNodes[0].nodeName == 'OBJECT')) target.svg = svg; + + var ctx = target.getContext('2d'); + + if (typeof s.documentElement != 'undefined') { + // load from xml doc + svg.loadXmlDoc(ctx, s); + } else if (s.substr(0, 1) == '<') { + // load from xml string + svg.loadXml(ctx, s); + } else { + // load from url + svg.load(ctx, s); + } + }; + + var matchesSelector; + { + // see https://developer.mozilla.org/en-US/docs/Web/API/Element.matches + if (typeof Element == 'undefined') ; else if (typeof Element.prototype.matches != 'undefined') { + matchesSelector = function (node, selector) { + return node.matches(selector); + }; + } else if (typeof Element.prototype.webkitMatchesSelector != 'undefined') { + matchesSelector = function (node, selector) { + return node.webkitMatchesSelector(selector); + }; + } else if (typeof Element.prototype.mozMatchesSelector != 'undefined') { + matchesSelector = function (node, selector) { + return node.mozMatchesSelector(selector); + }; + } else if (typeof Element.prototype.msMatchesSelector != 'undefined') { + matchesSelector = function (node, selector) { + return node.msMatchesSelector(selector); + }; + } else if (typeof Element.prototype.oMatchesSelector != 'undefined') { + matchesSelector = function (node, selector) { + return node.oMatchesSelector(selector); + }; + } else { + // requires Sizzle: https://github.com/jquery/sizzle/wiki/Sizzle-Documentation + // or jQuery: http://jquery.com/download/ + // or Zepto: http://zeptojs.com/# + // without it, this is a ReferenceError + + if (typeof jQuery === 'function' || typeof Zepto === 'function') { + matchesSelector = function (node, selector) { + return $(node).is(selector); + }; + } + + if (typeof matchesSelector === 'undefined' && typeof Sizzle !== 'undefined') { + matchesSelector = Sizzle.matchesSelector; + } + } + } + + // slightly modified version of https://github.com/keeganstreet/specificity/blob/master/specificity.js + var attributeRegex = /(\[[^\]]+\])/g; + var idRegex = /(#[^\s\+>~\.\[:]+)/g; + var classRegex = /(\.[^\s\+>~\.\[:]+)/g; + var pseudoElementRegex = /(::[^\s\+>~\.\[:]+|:first-line|:first-letter|:before|:after)/gi; + var pseudoClassWithBracketsRegex = /(:[\w-]+\([^\)]*\))/gi; + var pseudoClassRegex = /(:[^\s\+>~\.\[:]+)/g; + var elementRegex = /([^\s\+>~\.\[:]+)/g; + + function getSelectorSpecificity(selector) { + var typeCount = [0, 0, 0]; + var findMatch = function (regex, type) { + var matches = selector.match(regex); + if (matches == null) { + return; + } + typeCount[type] += matches.length; + selector = selector.replace(regex, ' '); + }; + + selector = selector.replace(/:not\(([^\)]*)\)/g, ' $1 '); + selector = selector.replace(/{[\s\S]*/gm, ' '); + findMatch(attributeRegex, 1); + findMatch(idRegex, 0); + findMatch(classRegex, 1); + findMatch(pseudoElementRegex, 2); + findMatch(pseudoClassWithBracketsRegex, 1); + findMatch(pseudoClassRegex, 1); + selector = selector.replace(/[\*\s\+>~]/g, ' '); + selector = selector.replace(/[#\.]/g, ' '); + findMatch(elementRegex, 2); + return typeCount.join(''); + } + + function build(opts) { + var svg = { opts: opts }; + + svg.FRAMERATE = 30; + svg.MAX_VIRTUAL_PIXELS = 30000; + + svg.rootEmSize = 12; + svg.emSize = 12; + + svg.log = function (/* msg */) { }; + if (svg.opts['log'] == true && typeof console != 'undefined') { + svg.log = function (msg) { console.log(msg); }; // eslint-disable-line no-console + } + + // globals + svg.init = function (ctx) { + var uniqueId = 0; + svg.UniqueId = function () { uniqueId++; return 'canvg' + uniqueId; }; + svg.Definitions = {}; + svg.Styles = {}; + svg.StylesSpecificity = {}; + svg.Animations = []; + svg.Images = []; + svg.ctx = ctx; + svg.ViewPort = new (function () { + + this.viewPorts = []; + this.Clear = function () { this.viewPorts = []; }; + this.SetCurrent = function (width, height) { this.viewPorts.push({ width: width, height: height }); }; + this.RemoveCurrent = function () { this.viewPorts.pop(); }; + this.Current = function () { return this.viewPorts[this.viewPorts.length - 1]; }; + this.width = function () { return this.Current().width; }; + this.height = function () { return this.Current().height; }; + this.ComputeSize = function (d) { + if (d != null && typeof d == 'number') return d; + if (d == 'x') return this.width(); + if (d == 'y') return this.height(); + return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); + }; + }); + }; + svg.init(); + + // images loaded + svg.ImagesLoaded = function () { + for (var i = 0; i < svg.Images.length; i++) { + if (!svg.Images[i].loaded) return false; + } + return true; + }; + + // trim + svg.trim = function (s) { return s.replace(/^\s+|\s+$/g, ''); }; + + // compress non-ideographic spaces + svg.compressSpaces = function (s) { return s.replace(/(?!\u3000)\s+/gm, ' '); }; + + // ajax + svg.ajax = function (url) { + var AJAX; + if (windowEnv.XMLHttpRequest) { AJAX = new windowEnv.XMLHttpRequest(); } else { AJAX = new ActiveXObject('Microsoft.XMLHTTP'); } + if (AJAX) { + AJAX.open('GET', url, false); + AJAX.send(null); + return AJAX.responseText; + } + return null; + }; + + // parse xml + svg.parseXml = function (xml) { + if (typeof Windows != 'undefined' && typeof Windows.Data != 'undefined' && typeof Windows.Data.Xml != 'undefined') { + var xmlDoc = new Windows.Data.Xml.Dom.XmlDocument(); + var settings = new Windows.Data.Xml.Dom.XmlLoadSettings(); + settings.prohibitDtd = false; + xmlDoc.loadXml(xml, settings); + return xmlDoc; + } else if (windowEnv.DOMParser) { + try { + var parser = opts.xmldom ? new windowEnv.DOMParser(opts.xmldom) : new windowEnv.DOMParser(); + return parser.parseFromString(xml, 'image/svg+xml'); + } catch (e) { + parser = opts.xmldom ? new windowEnv.DOMParser(opts.xmldom) : new windowEnv.DOMParser(); + return parser.parseFromString(xml, 'text/xml'); + } + } else { + xml = xml.replace(/]*>/, ''); + var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); + xmlDoc.async = 'false'; + xmlDoc.loadXML(xml); + return xmlDoc; + } + }; + + svg.Property = function (name, value) { + this.name = name; + this.value = value; + }; + svg.Property.prototype.getValue = function () { + return this.value; + }; + + svg.Property.prototype.hasValue = function () { + return (this.value != null && this.value !== ''); + }; + + // return the numerical value of the property + svg.Property.prototype.numValue = function () { + if (!this.hasValue()) return 0; + + var n = parseFloat(this.value); + if ((this.value + '').match(/%$/)) { + n = n / 100.0; + } + return n; + }; + + svg.Property.prototype.valueOrDefault = function (def) { + if (this.hasValue()) return this.value; + return def; + }; + + svg.Property.prototype.numValueOrDefault = function (def) { + if (this.hasValue()) return this.numValue(); + return parseFloat(def); + }; + + // color extensions + // augment the current color value with the opacity + svg.Property.prototype.addOpacity = function (opacityProp) { + var newValue = this.value; + if (opacityProp.value != null && opacityProp.value != '' && typeof this.value == 'string') { // can only add opacity to colors, not patterns + var color = new rgbcolor(this.value); + if (color.ok) { + newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacityProp.numValue() + ')'; + } + } + return new svg.Property(this.name, newValue); + }; + + // definition extensions + // get the definition from the definitions table + svg.Property.prototype.getDefinition = function () { + var name = this.value.match(/#([^\)'"]+)/); + if (name) { name = name[1]; } + if (!name) { name = this.value; } + return svg.Definitions[name]; + }; + + svg.Property.prototype.isUrlDefinition = function () { + return this.value.indexOf('url(') == 0 + }; + + svg.Property.prototype.getFillStyleDefinition = function (e, opacityProp) { + var def = this.getDefinition(); + + // gradient + if (def != null && def.createGradient) { + return def.createGradient(svg.ctx, e, opacityProp); + } + + // pattern + if (def != null && def.createPattern) { + if (def.getHrefAttribute().hasValue()) { + var pt = def.attribute('patternTransform'); + def = def.getHrefAttribute().getDefinition(); + if (pt.hasValue()) { def.attribute('patternTransform', true).value = pt.value; } + } + return def.createPattern(svg.ctx, e, opacityProp); + } + + return null; + }; + + // length extensions + svg.Property.prototype.getDPI = function (/* viewPort */) { + return 96.0; // TODO: compute? + }; + + svg.Property.prototype.getREM = function (/* viewPort */) { + return svg.rootEmSize; + }; + + svg.Property.prototype.getEM = function (/* viewPort */) { + return svg.emSize; + }; + + svg.Property.prototype.getUnits = function () { + var s = this.value + ''; + return s.replace(/[0-9\.\-]/g, ''); + }; + + svg.Property.prototype.isPixels = function () { + if (!this.hasValue()) return false; + var s = this.value + ''; + if (s.match(/px$/)) return true; + if (s.match(/^[0-9]+$/)) return true; + return false; + }; + + // get the length as pixels + svg.Property.prototype.toPixels = function (viewPort, processPercent) { + if (!this.hasValue()) return 0; + var s = this.value + ''; + if (s.match(/rem$/)) return this.numValue() * this.getREM(viewPort); + if (s.match(/em$/)) return this.numValue() * this.getEM(viewPort); + if (s.match(/ex$/)) return this.numValue() * this.getEM(viewPort) / 2.0; + if (s.match(/px$/)) return this.numValue(); + if (s.match(/pt$/)) return this.numValue() * this.getDPI(viewPort) * (1.0 / 72.0); + if (s.match(/pc$/)) return this.numValue() * 15; + if (s.match(/cm$/)) return this.numValue() * this.getDPI(viewPort) / 2.54; + if (s.match(/mm$/)) return this.numValue() * this.getDPI(viewPort) / 25.4; + if (s.match(/in$/)) return this.numValue() * this.getDPI(viewPort); + if (s.match(/%$/)) return this.numValue() * svg.ViewPort.ComputeSize(viewPort); + var n = this.numValue(); + if (processPercent && n < 1.0) return n * svg.ViewPort.ComputeSize(viewPort); + return n; + }; + + // time extensions + // get the time as milliseconds + // https://svgwg.org/specs/animations/#ClockValueSyntax + svg.Property.prototype.toMilliseconds = function () { + if (!this.hasValue()) return 0; + var s = this.value + ''; + if (s.match(/ms$/)) return this.numValue(); + return this.numValue() * 1000; + }; + + // angle extensions + // get the angle as radians + svg.Property.prototype.toRadians = function () { + if (!this.hasValue()) return 0; + var s = this.value + ''; + if (s.match(/deg$/)) return this.numValue() * (Math.PI / 180.0); + if (s.match(/grad$/)) return this.numValue() * (Math.PI / 200.0); + if (s.match(/rad$/)) return this.numValue(); + return this.numValue() * (Math.PI / 180.0); + }; + + // text extensions + // get the text baseline + var textBaselineMapping = { + 'baseline': 'alphabetic', + 'before-edge': 'top', + 'text-before-edge': 'top', + 'middle': 'middle', + 'central': 'middle', + 'after-edge': 'bottom', + 'text-after-edge': 'bottom', + 'ideographic': 'ideographic', + 'alphabetic': 'alphabetic', + 'hanging': 'hanging', + 'mathematical': 'alphabetic' + }; + svg.Property.prototype.toTextBaseline = function () { + if (!this.hasValue()) return null; + return textBaselineMapping[this.value]; + }; + + // fonts + svg.Font = new (function () { + this.Styles = 'normal|italic|oblique|inherit'; + this.Variants = 'normal|small-caps|inherit'; + this.Weights = 'normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit'; + + this.CreateFont = function (fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { + var f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font); + fontFamily = fontFamily || f.fontFamily; + return { + fontFamily: fontFamily, + fontSize: fontSize || f.fontSize, + fontStyle: fontStyle || f.fontStyle, + fontWeight: fontWeight || f.fontWeight, + fontVariant: fontVariant || f.fontVariant, + toString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } + } + }; + + var that = this; + this.Parse = function (s) { + var f = {}; + var d = svg.trim(svg.compressSpaces(s || '')).split(' '); + var set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false }; + var ff = ''; + for (var i = 0; i < d.length; i++) { + if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { + if (d[i] != 'inherit') f.fontStyle = d[i]; + set.fontStyle = true; + } else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { + if (d[i] != 'inherit') f.fontVariant = d[i]; + set.fontStyle = set.fontVariant = true; + } else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { + if (d[i] != 'inherit') f.fontWeight = d[i]; + set.fontStyle = set.fontVariant = set.fontWeight = true; + } else if (!set.fontSize) { + if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; + set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; + } else { if (d[i] != 'inherit') ff += d[i]; } + } + if (ff != '') f.fontFamily = ff; + return f; + }; + }); + + // points and paths + svg.ToNumberArray = function (s) { + var a = (s || '').match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm) || []; + for (var i = 0; i < a.length; i++) { + a[i] = parseFloat(a[i]); + } + return a; + }; + svg.Point = function (x, y) { + this.x = x; + this.y = y; + }; + svg.Point.prototype.angleTo = function (p) { + return Math.atan2(p.y - this.y, p.x - this.x); + }; + + svg.Point.prototype.applyTransform = function (v) { + var xp = this.x * v[0] + this.y * v[2] + v[4]; + var yp = this.x * v[1] + this.y * v[3] + v[5]; + this.x = xp; + this.y = yp; + }; + + svg.CreatePoint = function (s) { + var a = svg.ToNumberArray(s); + return new svg.Point(a[0], a[1]); + }; + svg.CreatePath = function (s) { + var a = svg.ToNumberArray(s); + var path = []; + for (var i = 0; i < a.length; i += 2) { + path.push(new svg.Point(a[i], a[i + 1])); + } + return path; + }; + + // bounding box + svg.BoundingBox = function (x1, y1, x2, y2) { // pass in initial points if you want + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; + + this.x = function () { return this.x1; }; + this.y = function () { return this.y1; }; + this.width = function () { return this.x2 - this.x1; }; + this.height = function () { return this.y2 - this.y1; }; + + this.addPoint = function (x, y) { + if (x != null) { + if (isNaN(this.x1) || isNaN(this.x2)) { + this.x1 = x; + this.x2 = x; + } + if (x < this.x1) this.x1 = x; + if (x > this.x2) this.x2 = x; + } + + if (y != null) { + if (isNaN(this.y1) || isNaN(this.y2)) { + this.y1 = y; + this.y2 = y; + } + if (y < this.y1) this.y1 = y; + if (y > this.y2) this.y2 = y; + } + }; + this.addX = function (x) { this.addPoint(x, null); }; + this.addY = function (y) { this.addPoint(null, y); }; + + this.addBoundingBox = function (bb) { + this.addPoint(bb.x1, bb.y1); + this.addPoint(bb.x2, bb.y2); + }; + + this.addQuadraticCurve = function (p0x, p0y, p1x, p1y, p2x, p2y) { + var cp1x = p0x + 2 / 3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0) + var cp1y = p0y + 2 / 3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0) + var cp2x = cp1x + 1 / 3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0) + var cp2y = cp1y + 1 / 3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0) + this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); + }; + + this.addBezierCurve = function (p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { + // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html + var p0 = [p0x, p0y], + p1 = [p1x, p1y], + p2 = [p2x, p2y], + p3 = [p3x, p3y]; + this.addPoint(p0[0], p0[1]); + this.addPoint(p3[0], p3[1]); + + for (var i = 0; i <= 1; i++) { + var f = function (t) { + return Math.pow(1 - t, 3) * p0[i] + + 3 * Math.pow(1 - t, 2) * t * p1[i] + + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + + Math.pow(t, 3) * p3[i]; + }; + + var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + var c = 3 * p1[i] - 3 * p0[i]; + + if (a == 0) { + if (b == 0) continue; + var t = -c / b; + if (0 < t && t < 1) { + if (i == 0) this.addX(f(t)); + if (i == 1) this.addY(f(t)); + } + continue; + } + + var b2ac = Math.pow(b, 2) - 4 * c * a; + if (b2ac < 0) continue; + var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); + if (0 < t1 && t1 < 1) { + if (i == 0) this.addX(f(t1)); + if (i == 1) this.addY(f(t1)); + } + var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); + if (0 < t2 && t2 < 1) { + if (i == 0) this.addX(f(t2)); + if (i == 1) this.addY(f(t2)); + } + } + }; + + this.isPointInBox = function (x, y) { + return (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2); + }; + + this.addPoint(x1, y1); + this.addPoint(x2, y2); + }; + + // transforms + svg.Transform = function (v) { + var that = this; + this.Type = {}; + + // translate + this.Type.translate = function (s) { + this.p = svg.CreatePoint(s); + this.apply = function (ctx) { + ctx.translate(this.p.x || 0.0, this.p.y || 0.0); + }; + this.unapply = function (ctx) { + ctx.translate(-1.0 * this.p.x || 0.0, -1.0 * this.p.y || 0.0); + }; + this.applyToPoint = function (p) { + p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); + }; + }; + + // rotate + this.Type.rotate = function (s) { + var a = svg.ToNumberArray(s); + this.angle = new svg.Property('angle', a[0]); + this.cx = a[1] || 0; + this.cy = a[2] || 0; + this.apply = function (ctx) { + ctx.translate(this.cx, this.cy); + ctx.rotate(this.angle.toRadians()); + ctx.translate(-this.cx, -this.cy); + }; + this.unapply = function (ctx) { + ctx.translate(this.cx, this.cy); + ctx.rotate(-1.0 * this.angle.toRadians()); + ctx.translate(-this.cx, -this.cy); + }; + this.applyToPoint = function (p) { + var a = this.angle.toRadians(); + p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); + p.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); + p.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]); + }; + }; + + this.Type.scale = function (s) { + this.p = svg.CreatePoint(s); + this.apply = function (ctx) { + ctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0); + }; + this.unapply = function (ctx) { + ctx.scale(1.0 / this.p.x || 1.0, 1.0 / this.p.y || this.p.x || 1.0); + }; + this.applyToPoint = function (p) { + p.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]); + }; + }; + + this.Type.matrix = function (s) { + this.m = svg.ToNumberArray(s); + this.apply = function (ctx) { + ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); + }; + this.unapply = function (ctx) { + var a = this.m[0]; + var b = this.m[2]; + var c = this.m[4]; + var d = this.m[1]; + var e = this.m[3]; + var f = this.m[5]; + var g = 0.0; + var h = 0.0; + var i = 1.0; + var det = 1 / (a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g)); + ctx.transform( + det * (e * i - f * h), + det * (f * g - d * i), + det * (c * h - b * i), + det * (a * i - c * g), + det * (b * f - c * e), + det * (c * d - a * f) + ); + }; + this.applyToPoint = function (p) { + p.applyTransform(this.m); + }; + }; + + this.Type.SkewBase = function (s) { + this.base = that.Type.matrix; + this.base(s); + this.angle = new svg.Property('angle', s); + }; + this.Type.SkewBase.prototype = new this.Type.matrix; + + this.Type.skewX = function (s) { + this.base = that.Type.SkewBase; + this.base(s); + this.m = [1, 0, Math.tan(this.angle.toRadians()), 1, 0, 0]; + }; + this.Type.skewX.prototype = new this.Type.SkewBase; + + this.Type.skewY = function (s) { + this.base = that.Type.SkewBase; + this.base(s); + this.m = [1, Math.tan(this.angle.toRadians()), 0, 1, 0, 0]; + }; + this.Type.skewY.prototype = new this.Type.SkewBase; + + this.transforms = []; + + this.apply = function (ctx) { + for (var i = 0; i < this.transforms.length; i++) { + this.transforms[i].apply(ctx); + } + }; + + this.unapply = function (ctx) { + for (var i = this.transforms.length - 1; i >= 0; i--) { + this.transforms[i].unapply(ctx); + } + }; + + // TODO: applyToPoint unused ... remove? + this.applyToPoint = function (p) { + for (var i = 0; i < this.transforms.length; i++) { + this.transforms[i].applyToPoint(p); + } + }; + + var data = svg.trim(svg.compressSpaces(v)).replace(/\)([a-zA-Z])/g, ') $1').replace(/\)(\s?,\s?)/g, ') ').split(/\s(?=[a-z])/); + for (var i = 0; i < data.length; i++) { + if (data[i] === 'none') { + continue; + } + + var type = svg.trim(data[i].split('(')[0]); + var s = data[i].split('(')[1].replace(')', ''); + var transformType = this.Type[type]; + if (typeof transformType != 'undefined') { + var transform = new transformType(s); + transform.type = type; + this.transforms.push(transform); + } + } + }; + + // aspect ratio + svg.AspectRatio = function (ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) { + // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute + aspectRatio = svg.compressSpaces(aspectRatio); + aspectRatio = aspectRatio.replace(/^defer\s/, ''); // ignore defer + var align = aspectRatio.split(' ')[0] || 'xMidYMid'; + var meetOrSlice = aspectRatio.split(' ')[1] || 'meet'; + + // calculate scale + var scaleX = width / desiredWidth; + var scaleY = height / desiredHeight; + var scaleMin = Math.min(scaleX, scaleY); + var scaleMax = Math.max(scaleX, scaleY); + if (meetOrSlice == 'meet') { + desiredWidth *= scaleMin; + desiredHeight *= scaleMin; + } + if (meetOrSlice == 'slice') { + desiredWidth *= scaleMax; + desiredHeight *= scaleMax; + } + + refX = new svg.Property('refX', refX); + refY = new svg.Property('refY', refY); + if (refX.hasValue() && refY.hasValue()) { + ctx.translate(-scaleMin * refX.toPixels('x'), -scaleMin * refY.toPixels('y')); + } else { + // align + if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0); + if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0); + if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0); + if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight); + } + + // scale + if (align == 'none') ctx.scale(scaleX, scaleY); + else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin); + else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax); + + // translate + ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY); + }; + + // elements + svg.Element = {}; + + svg.EmptyProperty = new svg.Property('EMPTY', ''); + + svg.Element.ElementBase = function (node) { + this.attributes = {}; + this.styles = {}; + this.stylesSpecificity = {}; + this.children = []; + + // get or create attribute + this.attribute = function (name, createIfNotExists) { + var a = this.attributes[name]; + if (a != null) return a; + + if (createIfNotExists == true) { + a = new svg.Property(name, ''); + this.attributes[name] = a; + } + return a || svg.EmptyProperty; + }; + + this.getHrefAttribute = function () { + for (var a in this.attributes) { + if (a == 'href' || a.match(/:href$/)) { + return this.attributes[a]; + } + } + return svg.EmptyProperty; + }; + + // get or create style, crawls up node tree + this.style = function (name, createIfNotExists, skipAncestors) { + var s = this.styles[name]; + if (s != null) return s; + + var a = this.attribute(name); + if (a != null && a.hasValue()) { + this.styles[name] = a; // move up to me to cache + return a; + } + + if (skipAncestors != true) { + var p = this.parent; + if (p != null) { + var ps = p.style(name); + if (ps != null && ps.hasValue()) { + return ps; + } + } + } + + if (createIfNotExists == true) { + s = new svg.Property(name, ''); + this.styles[name] = s; + } + return s || svg.EmptyProperty; + }; + + // base render + this.render = function (ctx) { + // don't render display=none + if (this.style('display').value == 'none') return; + + // don't render visibility=hidden + if (this.style('visibility').value == 'hidden') return; + + ctx.save(); + if (this.style('mask').hasValue()) { // mask + var mask = this.style('mask').getDefinition(); + if (mask != null) mask.apply(ctx, this); + } else if (this.style('filter').hasValue()) { // filter + var filter = this.style('filter').getDefinition(); + if (filter != null) filter.apply(ctx, this); + } else { + this.setContext(ctx); + this.renderChildren(ctx); + this.clearContext(ctx); + } + ctx.restore(); + }; + + // base set context + this.setContext = function (/* ctx */) { + // OVERRIDE ME! + }; + + // base clear context + this.clearContext = function (/* ctx */) { + // OVERRIDE ME! + }; + + // base render children + this.renderChildren = function (ctx) { + for (var i = 0; i < this.children.length; i++) { + this.children[i].render(ctx); + } + }; + + this.addChild = function (childNode, create) { + var child = childNode; + if (create) child = svg.CreateElement(childNode); + child.parent = this; + if (child.type != 'title') { this.children.push(child); } + }; + + this.addStylesFromStyleDefinition = function () { + // add styles + for (var selector in svg.Styles) { + if (selector[0] != '@' && matchesSelector(node, selector)) { + var styles = svg.Styles[selector]; + var specificity = svg.StylesSpecificity[selector]; + if (styles != null) { + for (var name in styles) { + var existingSpecificity = this.stylesSpecificity[name]; + if (typeof existingSpecificity == 'undefined') { + existingSpecificity = '000'; + } + if (specificity >= existingSpecificity) { + this.styles[name] = styles[name]; + this.stylesSpecificity[name] = specificity; + } + } + } + } + } + }; + + // Microsoft Edge fix + var allUppercase = new RegExp('^[A-Z\-]+$'); + var normalizeAttributeName = function (name) { + if (allUppercase.test(name)) { + return name.toLowerCase(); + } + return name; + }; + + if (node != null && node.nodeType == 1) { //ELEMENT_NODE + // add attributes + for (var i = 0; i < node.attributes.length; i++) { + var attribute = node.attributes[i]; + var nodeName = normalizeAttributeName(attribute.nodeName); + this.attributes[nodeName] = new svg.Property(nodeName, attribute.value); + } + + this.addStylesFromStyleDefinition(); + + // add inline styles + if (this.attribute('style').hasValue()) { + var styles = this.attribute('style').value.split(';'); + for (var i = 0; i < styles.length; i++) { + if (svg.trim(styles[i]) != '') { + var style = styles[i].split(':'); + var name = svg.trim(style[0]); + var value = svg.trim(style[1]); + this.styles[name] = new svg.Property(name, value); + } + } + } + + // add id + if (this.attribute('id').hasValue()) { + if (svg.Definitions[this.attribute('id').value] == null) { + svg.Definitions[this.attribute('id').value] = this; + } + } + + // add children + for (var i = 0; i < node.childNodes.length; i++) { + var childNode = node.childNodes[i]; + if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE + if (this.captureTextNodes && (childNode.nodeType == 3 || childNode.nodeType == 4)) { + var text = childNode.value || childNode.text || childNode.textContent || ''; + if (svg.compressSpaces(text) != '') { + this.addChild(new svg.Element.tspan(childNode), false); // TEXT_NODE + } + } + } + } + }; + + svg.Element.RenderedElementBase = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.calculateOpacity = function() { + var opacity = 1.0; + + var el = this; + while (el != null) { + var opacityStyle = el.style('opacity', false, true); // no ancestors on style call + if (opacityStyle.hasValue()) { + opacity = opacity * opacityStyle.numValue(); + } + el = el.parent; + } + + return opacity; + }; + + this.setContext = function (ctx, fromMeasure) { + if (!fromMeasure) { // causes stack overflow when measuring text with gradients + // fill + if (this.style('fill').isUrlDefinition()) { + var fs = this.style('fill').getFillStyleDefinition(this, this.style('fill-opacity')); + if (fs != null) ctx.fillStyle = fs; + } else if (this.style('fill').hasValue()) { + var fillStyle = this.style('fill'); + if (fillStyle.value == 'currentColor') fillStyle.value = this.style('color').value; + if (fillStyle.value != 'inherit') ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value); + } + if (this.style('fill-opacity').hasValue()) { + var fillStyle = new svg.Property('fill', ctx.fillStyle); + fillStyle = fillStyle.addOpacity(this.style('fill-opacity')); + ctx.fillStyle = fillStyle.value; + } + + // stroke + if (this.style('stroke').isUrlDefinition()) { + var fs = this.style('stroke').getFillStyleDefinition(this, this.style('stroke-opacity')); + if (fs != null) ctx.strokeStyle = fs; + } else if (this.style('stroke').hasValue()) { + var strokeStyle = this.style('stroke'); + if (strokeStyle.value == 'currentColor') strokeStyle.value = this.style('color').value; + if (strokeStyle.value != 'inherit') ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value); + } + if (this.style('stroke-opacity').hasValue()) { + var strokeStyle = new svg.Property('stroke', ctx.strokeStyle); + strokeStyle = strokeStyle.addOpacity(this.style('stroke-opacity')); + ctx.strokeStyle = strokeStyle.value; + } + if (this.style('stroke-width').hasValue()) { + var newLineWidth = this.style('stroke-width').toPixels(); + ctx.lineWidth = newLineWidth == 0 ? 0.001 : newLineWidth; // browsers don't respect 0 + } + if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value; + if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value; + if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value; + if (this.style('paint-order').hasValue()) ctx.paintOrder = this.style('paint-order').value; + if (this.style('stroke-dasharray').hasValue() && this.style('stroke-dasharray').value != 'none') { + var gaps = svg.ToNumberArray(this.style('stroke-dasharray').value); + if (typeof ctx.setLineDash != 'undefined') { ctx.setLineDash(gaps); } else if (typeof ctx.webkitLineDash != 'undefined') { ctx.webkitLineDash = gaps; } else if (typeof ctx.mozDash != 'undefined' && !(gaps.length == 1 && gaps[0] == 0)) { ctx.mozDash = gaps; } + + var offset = this.style('stroke-dashoffset').toPixels(); + if (typeof ctx.lineDashOffset != 'undefined') { ctx.lineDashOffset = offset; } else if (typeof ctx.webkitLineDashOffset != 'undefined') { ctx.webkitLineDashOffset = offset; } else if (typeof ctx.mozDashOffset != 'undefined') { ctx.mozDashOffset = offset; } + } + } + + // font + if (typeof ctx.font != 'undefined') { + if (this.style('font').hasValue()) { + ctx.font = this.style('font').value; + } else { + ctx.font = svg.Font.CreateFont( + this.style('font-style').value, + this.style('font-variant').value, + this.style('font-weight').value, + this.style('font-size').hasValue() ? this.style('font-size').toPixels() + 'px' : '', + this.style('font-family').value).toString(); + + // update em size if needed + var currentFontSize = this.style('font-size', false, false); + if (currentFontSize.isPixels()) { + svg.emSize = currentFontSize.toPixels(); + } + } + } + + // transform + if (this.style('transform', false, true).hasValue()) { + var transform = new svg.Transform(this.style('transform', false, true).value); + transform.apply(ctx); + } + + // clip + if (this.style('clip-path', false, true).hasValue()) { + var clip = this.style('clip-path', false, true).getDefinition(); + if (clip != null) clip.apply(ctx); + } + + // opacity + ctx.globalAlpha = this.calculateOpacity(); + }; + }; + svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase; + + svg.Element.PathElementBase = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.path = function (ctx) { + if (ctx != null) ctx.beginPath(); + return new svg.BoundingBox(); + }; + + this.renderChildren = function (ctx) { + this.path(ctx); + svg.Mouse.checkPath(this, ctx); + if (ctx.fillStyle != '') { + if (this.style('fill-rule').valueOrDefault('inherit') != 'inherit') { ctx.fill(this.style('fill-rule').value); } else { ctx.fill(); } + } + if (ctx.strokeStyle != '') ctx.stroke(); + + var markers = this.getMarkers(); + if (markers != null) { + if (this.style('marker-start').isUrlDefinition()) { + var marker = this.style('marker-start').getDefinition(); + marker.render(ctx, markers[0][0], markers[0][1]); + } + if (this.style('marker-mid').isUrlDefinition()) { + var marker = this.style('marker-mid').getDefinition(); + for (var i = 1; i < markers.length - 1; i++) { + marker.render(ctx, markers[i][0], markers[i][1]); + } + } + if (this.style('marker-end').isUrlDefinition()) { + var marker = this.style('marker-end').getDefinition(); + marker.render(ctx, markers[markers.length - 1][0], markers[markers.length - 1][1]); + } + } + }; + + this.getBoundingBox = function () { + return this.path(); + }; + + this.getMarkers = function () { + return null; + }; + }; + svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase; + + svg.SetDefaults = function (ctx) { + // initial values and defaults + ctx.strokeStyle = 'rgba(0,0,0,0)'; + ctx.lineCap = 'butt'; + ctx.lineJoin = 'miter'; + ctx.miterLimit = 4; + }; + + // svg element + svg.Element.svg = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.baseClearContext = this.clearContext; + this.clearContext = function (ctx) { + this.baseClearContext(ctx); + svg.ViewPort.RemoveCurrent(); + }; + + this.baseSetContext = this.setContext; + this.setContext = function (ctx) { + svg.SetDefaults(ctx); + if (ctx.canvas.style && typeof ctx.font != 'undefined' && typeof windowEnv.getComputedStyle != 'undefined') { + ctx.font = windowEnv.getComputedStyle(ctx.canvas).getPropertyValue('font'); + + var fontSize = new svg.Property('fontSize', svg.Font.Parse(ctx.font).fontSize); + if (fontSize.hasValue()) svg.rootEmSize = svg.emSize = fontSize.toPixels('y'); + } + + this.baseSetContext(ctx); + + // create new view port + if (!this.attribute('x').hasValue()) this.attribute('x', true).value = 0; + if (!this.attribute('y').hasValue()) this.attribute('y', true).value = 0; + ctx.translate(this.attribute('x').toPixels('x'), this.attribute('y').toPixels('y')); + + var width = svg.ViewPort.width(); + var height = svg.ViewPort.height(); + + if (!this.attribute('width').hasValue()) this.attribute('width', true).value = '100%'; + if (!this.attribute('height').hasValue()) this.attribute('height', true).value = '100%'; + if (typeof this.root == 'undefined') { + width = this.attribute('width').toPixels('x'); + height = this.attribute('height').toPixels('y'); + + var x = 0; + var y = 0; + if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) { + x = -this.attribute('refX').toPixels('x'); + y = -this.attribute('refY').toPixels('y'); + } + + if (this.attribute('overflow').valueOrDefault('hidden') != 'visible') { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(width, y); + ctx.lineTo(width, height); + ctx.lineTo(x, height); + ctx.closePath(); + ctx.clip(); + } + } + svg.ViewPort.SetCurrent(width, height); + + // viewbox + if (this.attribute('viewBox').hasValue()) { + var viewBox = svg.ToNumberArray(this.attribute('viewBox').value); + var minX = viewBox[0]; + var minY = viewBox[1]; + width = viewBox[2]; + height = viewBox[3]; + + svg.AspectRatio(ctx, + this.attribute('preserveAspectRatio').value, + svg.ViewPort.width(), + width, + svg.ViewPort.height(), + height, + minX, + minY, + this.attribute('refX').value, + this.attribute('refY').value); + + svg.ViewPort.RemoveCurrent(); + svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]); + } + }; + }; + svg.Element.svg.prototype = new svg.Element.RenderedElementBase; + + // rect element + svg.Element.rect = function (node) { + this.base = svg.Element.PathElementBase; + this.base(node); + + this.path = function (ctx) { + var x = this.attribute('x').toPixels('x'); + var y = this.attribute('y').toPixels('y'); + var width = this.attribute('width').toPixels('x'); + var height = this.attribute('height').toPixels('y'); + var rx = this.attribute('rx').toPixels('x'); + var ry = this.attribute('ry').toPixels('y'); + if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx; + if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry; + rx = Math.min(rx, width / 2.0); + ry = Math.min(ry, height / 2.0); + + if (ctx != null) { + var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); + ctx.beginPath(); // always start the path so we don't fill prior paths + if (height > 0 && width > 0) { + ctx.moveTo(x + rx, y); + ctx.lineTo(x + width - rx, y); + ctx.bezierCurveTo(x + width - rx + (KAPPA * rx), y, x + width, y + ry - (KAPPA * ry), x + width, y + ry); + ctx.lineTo(x + width, y + height - ry); + ctx.bezierCurveTo(x + width, y + height - ry + (KAPPA * ry), x + width - rx + (KAPPA * rx), y + height, x + width - rx, y + height); + ctx.lineTo(x + rx, y + height); + ctx.bezierCurveTo(x + rx - (KAPPA * rx), y + height, x, y + height - ry + (KAPPA * ry), x, y + height - ry); + ctx.lineTo(x, y + ry); + ctx.bezierCurveTo(x, y + ry - (KAPPA * ry), x + rx - (KAPPA * rx), y, x + rx, y); + ctx.closePath(); + } + } + + return new svg.BoundingBox(x, y, x + width, y + height); + }; + }; + svg.Element.rect.prototype = new svg.Element.PathElementBase; + + // circle element + svg.Element.circle = function (node) { + this.base = svg.Element.PathElementBase; + this.base(node); + + this.path = function (ctx) { + var cx = this.attribute('cx').toPixels('x'); + var cy = this.attribute('cy').toPixels('y'); + var r = this.attribute('r').toPixels(); + + if (ctx != null && r > 0) { + ctx.beginPath(); + ctx.arc(cx, cy, r, 0, Math.PI * 2, false); + ctx.closePath(); + } + + return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r); + }; + }; + svg.Element.circle.prototype = new svg.Element.PathElementBase; + + // ellipse element + svg.Element.ellipse = function (node) { + this.base = svg.Element.PathElementBase; + this.base(node); + + this.path = function (ctx) { + var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3); + var rx = this.attribute('rx').toPixels('x'); + var ry = this.attribute('ry').toPixels('y'); + var cx = this.attribute('cx').toPixels('x'); + var cy = this.attribute('cy').toPixels('y'); + + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(cx + rx, cy); + ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry); + ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy); + ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry); + ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy); + ctx.closePath(); + } + + return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry); + }; + }; + svg.Element.ellipse.prototype = new svg.Element.PathElementBase; + + // line element + svg.Element.line = function (node) { + this.base = svg.Element.PathElementBase; + this.base(node); + + this.getPoints = function () { + return [ + new svg.Point(this.attribute('x1').toPixels('x'), this.attribute('y1').toPixels('y')), + new svg.Point(this.attribute('x2').toPixels('x'), this.attribute('y2').toPixels('y')) + ]; + }; + + this.path = function (ctx) { + var points = this.getPoints(); + + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(points[0].x, points[0].y); + ctx.lineTo(points[1].x, points[1].y); + } + + return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y); + }; + + this.getMarkers = function () { + var points = this.getPoints(); + var a = points[0].angleTo(points[1]); + return [ + [points[0], a], + [points[1], a] + ]; + }; + }; + svg.Element.line.prototype = new svg.Element.PathElementBase; + + // polyline element + svg.Element.polyline = function (node) { + this.base = svg.Element.PathElementBase; + this.base(node); + + this.points = svg.CreatePath(this.attribute('points').value); + this.path = function (ctx) { + var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y); + if (ctx != null) { + ctx.beginPath(); + ctx.moveTo(this.points[0].x, this.points[0].y); + } + for (var i = 1; i < this.points.length; i++) { + bb.addPoint(this.points[i].x, this.points[i].y); + if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y); + } + return bb; + }; + + this.getMarkers = function () { + var markers = []; + for (var i = 0; i < this.points.length - 1; i++) { + markers.push([this.points[i], this.points[i].angleTo(this.points[i + 1])]); + } + if (markers.length > 0) { + markers.push([this.points[this.points.length - 1], markers[markers.length - 1][1]]); + } + return markers; + }; + }; + svg.Element.polyline.prototype = new svg.Element.PathElementBase; + + // polygon element + svg.Element.polygon = function (node) { + this.base = svg.Element.polyline; + this.base(node); + + this.basePath = this.path; + this.path = function (ctx) { + var bb = this.basePath(ctx); + if (ctx != null) { + ctx.lineTo(this.points[0].x, this.points[0].y); + ctx.closePath(); + } + return bb; + }; + }; + svg.Element.polygon.prototype = new svg.Element.polyline; + + // path element + svg.Element.path = function (node) { + this.base = svg.Element.PathElementBase; + this.base(node); + + var d = this.attribute('d').value; + // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF + d = d.replace(/,/gm, ' '); // get rid of all commas + // As the end of a match can also be the start of the next match, we need to run this replace twice. + for (var i = 0; i < 2; i++) + d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm, '$1 $2'); // suffix commands with spaces + d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); // prefix commands with spaces + d = d.replace(/([0-9])([+\-])/gm, '$1 $2'); // separate digits on +- signs + // Again, we need to run this twice to find all occurances + for (var i = 0; i < 2; i++) + d = d.replace(/(\.[0-9]*)(\.)/gm, '$1 $2'); // separate digits when they start with a comma + d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, '$1 $3 $4 '); // shorthand elliptical arc path syntax + d = svg.compressSpaces(d); // compress multiple spaces + d = svg.trim(d); + this.PathParser = new (function (d) { + this.tokens = d.split(' '); + + this.reset = function () { + this.i = -1; + this.command = ''; + this.previousCommand = ''; + this.start = new svg.Point(0, 0); + this.control = new svg.Point(0, 0); + this.current = new svg.Point(0, 0); + this.points = []; + this.angles = []; + }; + + this.isEnd = function () { + return this.i >= this.tokens.length - 1; + }; + + this.isCommandOrEnd = function () { + if (this.isEnd()) return true; + return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; + }; + + this.isRelativeCommand = function () { + switch (this.command) { + case 'm': + case 'l': + case 'h': + case 'v': + case 'c': + case 's': + case 'q': + case 't': + case 'a': + case 'z': + return true; + } + return false; + }; + + this.getToken = function () { + this.i++; + return this.tokens[this.i]; + }; + + this.getScalar = function () { + return parseFloat(this.getToken()); + }; + + this.nextCommand = function () { + this.previousCommand = this.command; + this.command = this.getToken(); + }; + + this.getPoint = function () { + var p = new svg.Point(this.getScalar(), this.getScalar()); + return this.makeAbsolute(p); + }; + + this.getAsControlPoint = function () { + var p = this.getPoint(); + this.control = p; + return p; + }; + + this.getAsCurrentPoint = function () { + var p = this.getPoint(); + this.current = p; + return p; + }; + + this.getReflectedControlPoint = function () { + if (this.previousCommand.toLowerCase() != 'c' && + this.previousCommand.toLowerCase() != 's' && + this.previousCommand.toLowerCase() != 'q' && + this.previousCommand.toLowerCase() != 't') { + return this.current; + } + + // reflect point + var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); + return p; + }; + + this.makeAbsolute = function (p) { + if (this.isRelativeCommand()) { + p.x += this.current.x; + p.y += this.current.y; + } + return p; + }; + + this.addMarker = function (p, from, priorTo) { + // if the last angle isn't filled in because we didn't have this point yet ... + if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length - 1] == null) { + this.angles[this.angles.length - 1] = this.points[this.points.length - 1].angleTo(priorTo); + } + this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); + }; + + this.addMarkerAngle = function (p, a) { + this.points.push(p); + this.angles.push(a); + }; + + this.getMarkerPoints = function () { return this.points; }; + this.getMarkerAngles = function () { + for (var i = 0; i < this.angles.length; i++) { + if (this.angles[i] == null) { + for (var j = i + 1; j < this.angles.length; j++) { + if (this.angles[j] != null) { + this.angles[i] = this.angles[j]; + break; + } + } + } + } + return this.angles; + }; + })(d); + + this.path = function (ctx) { + var pp = this.PathParser; + pp.reset(); + + var bb = new svg.BoundingBox(); + if (ctx != null) ctx.beginPath(); + while (!pp.isEnd()) { + pp.nextCommand(); + switch (pp.command) { + case 'M': + case 'm': + var p = pp.getAsCurrentPoint(); + pp.addMarker(p); + bb.addPoint(p.x, p.y); + if (ctx != null) ctx.moveTo(p.x, p.y); + pp.start = pp.current; + while (!pp.isCommandOrEnd()) { + var p = pp.getAsCurrentPoint(); + pp.addMarker(p, pp.start); + bb.addPoint(p.x, p.y); + if (ctx != null) ctx.lineTo(p.x, p.y); + } + break; + case 'L': + case 'l': + while (!pp.isCommandOrEnd()) { + var c = pp.current; + var p = pp.getAsCurrentPoint(); + pp.addMarker(p, c); + bb.addPoint(p.x, p.y); + if (ctx != null) ctx.lineTo(p.x, p.y); + } + break; + case 'H': + case 'h': + while (!pp.isCommandOrEnd()) { + var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y); + pp.addMarker(newP, pp.current); + pp.current = newP; + bb.addPoint(pp.current.x, pp.current.y); + if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); + } + break; + case 'V': + case 'v': + while (!pp.isCommandOrEnd()) { + var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); + pp.addMarker(newP, pp.current); + pp.current = newP; + bb.addPoint(pp.current.x, pp.current.y); + if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y); + } + break; + case 'C': + case 'c': + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var p1 = pp.getPoint(); + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, p1); + bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + case 'S': + case 's': + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var p1 = pp.getReflectedControlPoint(); + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, p1); + bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + case 'Q': + case 'q': + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, cntrl); + bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + case 'T': + case 't': + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var cntrl = pp.getReflectedControlPoint(); + pp.control = cntrl; + var cp = pp.getAsCurrentPoint(); + pp.addMarker(cp, cntrl, cntrl); + bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y); + if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + case 'A': + case 'a': + while (!pp.isCommandOrEnd()) { + var curr = pp.current; + var rx = pp.getScalar(); + var ry = pp.getScalar(); + var xAxisRotation = pp.getScalar() * (Math.PI / 180.0); + var largeArcFlag = pp.getScalar(); + var sweepFlag = pp.getScalar(); + var cp = pp.getAsCurrentPoint(); + + // Conversion from endpoint to center parameterization + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + // x1', y1' + var currp = new svg.Point( + Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0, -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0 + ); + // adjust radii + var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2); + if (l > 1) { + rx *= Math.sqrt(l); + ry *= Math.sqrt(l); + } + // cx', cy' + var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt( + ((Math.pow(rx, 2) * Math.pow(ry, 2)) - (Math.pow(rx, 2) * Math.pow(currp.y, 2)) - (Math.pow(ry, 2) * Math.pow(currp.x, 2))) / + (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2)) + ); + if (isNaN(s)) s = 0; + var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); + // cx, cy + var centp = new svg.Point( + (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, + (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y + ); + // vector magnitude + var m = function (v) { return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); }; + // ratio between two vectors + var r = function (u, v) { return (u[0] * v[0] + u[1] * v[1]) / (m(u) * m(v)) }; + // angle between two vectors + var a = function (u, v) { return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(r(u, v)); }; + // initial angle + var a1 = a([1, 0], [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]); + // angle delta + var u = [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]; + var v = [(-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry]; + var ad = a(u, v); + if (r(u, v) <= -1) ad = Math.PI; + if (r(u, v) >= 1) ad = 0; + + // for markers + var dir = 1 - sweepFlag ? 1.0 : -1.0; + var ah = a1 + dir * (ad / 2.0); + var halfWay = new svg.Point( + centp.x + rx * Math.cos(ah), + centp.y + ry * Math.sin(ah) + ); + pp.addMarkerAngle(halfWay, ah - dir * Math.PI / 2); + pp.addMarkerAngle(cp, ah - dir * Math.PI); + + bb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better + if (ctx != null && !isNaN(a1) && !isNaN(ad)) { + var r = rx > ry ? rx : ry; + var sx = rx > ry ? 1 : rx / ry; + var sy = rx > ry ? ry / rx : 1; + + ctx.translate(centp.x, centp.y); + ctx.rotate(xAxisRotation); + ctx.scale(sx, sy); + ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); + ctx.scale(1 / sx, 1 / sy); + ctx.rotate(-xAxisRotation); + ctx.translate(-centp.x, -centp.y); + } + } + break; + case 'Z': + case 'z': + if (ctx != null) { + // only close path if it is not a straight line + if (bb.x1 !== bb.x2 && bb.y1 !== bb.y2) { + ctx.closePath(); + } + } + pp.current = pp.start; + } + } + + return bb; + }; + + this.getMarkers = function () { + var points = this.PathParser.getMarkerPoints(); + var angles = this.PathParser.getMarkerAngles(); + + var markers = []; + for (var i = 0; i < points.length; i++) { + markers.push([points[i], angles[i]]); + } + return markers; + }; + }; + svg.Element.path.prototype = new svg.Element.PathElementBase; + + // pattern element + svg.Element.pattern = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.createPattern = function (ctx, element, parentOpacityProp) { + var width = this.attribute('width').toPixels('x', true); + var height = this.attribute('height').toPixels('y', true); + + // render me using a temporary svg element + var tempSvg = new svg.Element.svg(); + tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); + tempSvg.attributes['width'] = new svg.Property('width', width + 'px'); + tempSvg.attributes['height'] = new svg.Property('height', height + 'px'); + tempSvg.attributes['transform'] = new svg.Property('transform', this.attribute('patternTransform').value); + tempSvg.children = this.children; + + var c = createCanvas(width, height); + var cctx = c.getContext('2d'); + if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) { + cctx.translate(this.attribute('x').toPixels('x', true), this.attribute('y').toPixels('y', true)); + } + + if (parentOpacityProp.hasValue()) { + this.styles['fill-opacity'] = parentOpacityProp; + } else { + delete this.styles['fill-opacity']; + } + + // render 3x3 grid so when we transform there's no white space on edges + for (var x = -1; x <= 1; x++) { + for (var y = -1; y <= 1; y++) { + cctx.save(); + tempSvg.attributes['x'] = new svg.Property('x', x * c.width); + tempSvg.attributes['y'] = new svg.Property('y', y * c.height); + tempSvg.render(cctx); + cctx.restore(); + } + } + var pattern = ctx.createPattern(c, 'repeat'); + return pattern; + }; + }; + svg.Element.pattern.prototype = new svg.Element.ElementBase; + + // marker element + svg.Element.marker = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.baseRender = this.render; + this.render = function (ctx, point, angle) { + if (!point) { return; } + ctx.translate(point.x, point.y); + if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle); + if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth); + ctx.save(); + + // render me using a temporary svg element + var tempSvg = new svg.Element.svg(); + tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value); + tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value); + tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value); + tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value); + tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value); + tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black')); + tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none')); + tempSvg.children = this.children; + tempSvg.render(ctx); + + ctx.restore(); + if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1 / ctx.lineWidth, 1 / ctx.lineWidth); + if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle); + ctx.translate(-point.x, -point.y); + }; + }; + svg.Element.marker.prototype = new svg.Element.ElementBase; + + // definitions element + svg.Element.defs = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.render = function (/* ctx */) { + // NOOP + }; + }; + svg.Element.defs.prototype = new svg.Element.ElementBase; + + // base for gradients + svg.Element.GradientBase = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.stops = []; + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (child.type == 'stop') this.stops.push(child); + } + + this.getGradient = function () { + // OVERRIDE ME! + }; + + this.gradientUnits = function () { + return this.attribute('gradientUnits').valueOrDefault('objectBoundingBox'); + }; + + this.attributesToInherit = ['gradientUnits']; + + this.inheritStopContainer = function (stopsContainer) { + for (var i = 0; i < this.attributesToInherit.length; i++) { + var attributeToInherit = this.attributesToInherit[i]; + if (!this.attribute(attributeToInherit).hasValue() && stopsContainer.attribute(attributeToInherit).hasValue()) { + this.attribute(attributeToInherit, true).value = stopsContainer.attribute(attributeToInherit).value; + } + } + }; + + this.createGradient = function (ctx, element, parentOpacityProp) { + var stopsContainer = this; + if (this.getHrefAttribute().hasValue()) { + stopsContainer = this.getHrefAttribute().getDefinition(); + this.inheritStopContainer(stopsContainer); + } + + var addParentOpacity = function (color) { + if (parentOpacityProp.hasValue()) { + var p = new svg.Property('color', color); + return p.addOpacity(parentOpacityProp).value; + } + return color; + }; + + var g = this.getGradient(ctx, element); + if (g == null) return addParentOpacity(stopsContainer.stops[stopsContainer.stops.length - 1].color); + for (var i = 0; i < stopsContainer.stops.length; i++) { + g.addColorStop(stopsContainer.stops[i].offset, addParentOpacity(stopsContainer.stops[i].color)); + } + + if (this.attribute('gradientTransform').hasValue()) { + // render as transformed pattern on temporary canvas + var rootView = svg.ViewPort.viewPorts[0]; + + var rect = new svg.Element.rect(); + rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS / 3.0); + rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS / 3.0); + rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS); + rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS); + + var group = new svg.Element.g(); + group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value); + group.children = [rect]; + + var tempSvg = new svg.Element.svg(); + tempSvg.attributes['x'] = new svg.Property('x', 0); + tempSvg.attributes['y'] = new svg.Property('y', 0); + tempSvg.attributes['width'] = new svg.Property('width', rootView.width); + tempSvg.attributes['height'] = new svg.Property('height', rootView.height); + tempSvg.children = [group]; + var c = createCanvas(rootView.width, rootView.height); + var tempCtx = c.getContext('2d'); + tempCtx.fillStyle = g; + tempSvg.render(tempCtx); + return tempCtx.createPattern(c, 'no-repeat'); + } + + return g; + }; + }; + svg.Element.GradientBase.prototype = new svg.Element.ElementBase; + + // linear gradient element + svg.Element.linearGradient = function (node) { + this.base = svg.Element.GradientBase; + this.base(node); + + this.attributesToInherit.push('x1'); + this.attributesToInherit.push('y1'); + this.attributesToInherit.push('x2'); + this.attributesToInherit.push('y2'); + + this.getGradient = function (ctx, element) { + var bb = this.gradientUnits() == 'objectBoundingBox' ? element.getBoundingBox(ctx) : null; + + if (!this.attribute('x1').hasValue() && + !this.attribute('y1').hasValue() && + !this.attribute('x2').hasValue() && + !this.attribute('y2').hasValue()) { + this.attribute('x1', true).value = 0; + this.attribute('y1', true).value = 0; + this.attribute('x2', true).value = 1; + this.attribute('y2', true).value = 0; + } + + var x1 = (this.gradientUnits() == 'objectBoundingBox' ? + bb.x() + bb.width() * this.attribute('x1').numValue() : + this.attribute('x1').toPixels('x')); + var y1 = (this.gradientUnits() == 'objectBoundingBox' ? + bb.y() + bb.height() * this.attribute('y1').numValue() : + this.attribute('y1').toPixels('y')); + var x2 = (this.gradientUnits() == 'objectBoundingBox' ? + bb.x() + bb.width() * this.attribute('x2').numValue() : + this.attribute('x2').toPixels('x')); + var y2 = (this.gradientUnits() == 'objectBoundingBox' ? + bb.y() + bb.height() * this.attribute('y2').numValue() : + this.attribute('y2').toPixels('y')); + + if (x1 == x2 && y1 == y2) return null; + return ctx.createLinearGradient(x1, y1, x2, y2); + }; + }; + svg.Element.linearGradient.prototype = new svg.Element.GradientBase; + + // radial gradient element + svg.Element.radialGradient = function (node) { + this.base = svg.Element.GradientBase; + this.base(node); + + this.attributesToInherit.push('cx'); + this.attributesToInherit.push('cy'); + this.attributesToInherit.push('r'); + this.attributesToInherit.push('fx'); + this.attributesToInherit.push('fy'); + this.attributesToInherit.push('fr'); + + this.getGradient = function (ctx, element) { + var bb = element.getBoundingBox(ctx); + + if (!this.attribute('cx').hasValue()) this.attribute('cx', true).value = '50%'; + if (!this.attribute('cy').hasValue()) this.attribute('cy', true).value = '50%'; + if (!this.attribute('r').hasValue()) this.attribute('r', true).value = '50%'; + + var cx = (this.gradientUnits() == 'objectBoundingBox' ? + bb.x() + bb.width() * this.attribute('cx').numValue() : + this.attribute('cx').toPixels('x')); + var cy = (this.gradientUnits() == 'objectBoundingBox' ? + bb.y() + bb.height() * this.attribute('cy').numValue() : + this.attribute('cy').toPixels('y')); + + var fx = cx; + var fy = cy; + if (this.attribute('fx').hasValue()) { + fx = (this.gradientUnits() == 'objectBoundingBox' ? + bb.x() + bb.width() * this.attribute('fx').numValue() : + this.attribute('fx').toPixels('x')); + } + if (this.attribute('fy').hasValue()) { + fy = (this.gradientUnits() == 'objectBoundingBox' ? + bb.y() + bb.height() * this.attribute('fy').numValue() : + this.attribute('fy').toPixels('y')); + } + + var r = (this.gradientUnits() == 'objectBoundingBox' ? + (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue() : + this.attribute('r').toPixels()); + + var fr = this.attribute('fr').toPixels(); + return ctx.createRadialGradient(fx, fy, fr, cx, cy, r); + }; + }; + svg.Element.radialGradient.prototype = new svg.Element.GradientBase; + + // gradient stop element + svg.Element.stop = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.offset = this.attribute('offset').numValue(); + if (this.offset < 0) this.offset = 0; + if (this.offset > 1) this.offset = 1; + + var stopColor = this.style('stop-color', true); + if (stopColor.value === '') stopColor.value = '#000'; + if (this.style('stop-opacity').hasValue()) stopColor = stopColor.addOpacity(this.style('stop-opacity')); + this.color = stopColor.value; + }; + svg.Element.stop.prototype = new svg.Element.ElementBase; + + // animation base element + svg.Element.AnimateBase = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + svg.Animations.push(this); + + this.duration = 0.0; + this.begin = this.attribute('begin').toMilliseconds(); + this.maxDuration = this.begin + this.attribute('dur').toMilliseconds(); + + this.getProperty = function () { + var attributeType = this.attribute('attributeType').value; + var attributeName = this.attribute('attributeName').value; + + if (attributeType == 'CSS') { + return this.parent.style(attributeName, true); + } + return this.parent.attribute(attributeName, true); + }; + + this.initialValue = null; + this.initialUnits = ''; + this.removed = false; + + this.calcValue = function () { + // OVERRIDE ME! + return ''; + }; + + this.update = function (delta) { + // set initial value + if (this.initialValue == null) { + this.initialValue = this.getProperty().value; + this.initialUnits = this.getProperty().getUnits(); + } + + // if we're past the end time + if (this.duration > this.maxDuration) { + // loop for indefinitely repeating animations + if (this.attribute('repeatCount').value == 'indefinite' || + this.attribute('repeatDur').value == 'indefinite') { + this.duration = 0.0; + } else if (this.attribute('fill').valueOrDefault('remove') == 'freeze' && !this.frozen) { + this.frozen = true; + this.parent.animationFrozen = true; + this.parent.animationFrozenValue = this.getProperty().value; + } else if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) { + this.removed = true; + this.getProperty().value = this.parent.animationFrozen ? this.parent.animationFrozenValue : this.initialValue; + return true; + } + return false; + } + this.duration = this.duration + delta; + + // if we're past the begin time + var updated = false; + if (this.begin < this.duration) { + var newValue = this.calcValue(); // tween + + if (this.attribute('type').hasValue()) { + // for transform, etc. + var type = this.attribute('type').value; + newValue = type + '(' + newValue + ')'; + } + + this.getProperty().value = newValue; + updated = true; + } + + return updated; + }; + + this.from = this.attribute('from'); + this.to = this.attribute('to'); + this.values = this.attribute('values'); + if (this.values.hasValue()) this.values.value = this.values.value.split(';'); + + // fraction of duration we've covered + this.progress = function () { + var ret = { progress: (this.duration - this.begin) / (this.maxDuration - this.begin) }; + if (this.values.hasValue()) { + var p = ret.progress * (this.values.value.length - 1); + var lb = Math.floor(p), + ub = Math.ceil(p); + ret.from = new svg.Property('from', parseFloat(this.values.value[lb])); + ret.to = new svg.Property('to', parseFloat(this.values.value[ub])); + ret.progress = (p - lb) / (ub - lb); + } else { + ret.from = this.from; + ret.to = this.to; + } + return ret; + }; + }; + svg.Element.AnimateBase.prototype = new svg.Element.ElementBase; + + // animate element + svg.Element.animate = function (node) { + this.base = svg.Element.AnimateBase; + this.base(node); + + this.calcValue = function () { + var p = this.progress(); + + // tween value linearly + var newValue = p.from.numValue() + (p.to.numValue() - p.from.numValue()) * p.progress; + if (this.initialUnits === '%') { + newValue *= 100.0; // numValue() returns 0-1 whereas properties are 0-100 + } + return newValue + this.initialUnits; + }; + }; + svg.Element.animate.prototype = new svg.Element.AnimateBase; + + // animate color element + svg.Element.animateColor = function (node) { + this.base = svg.Element.AnimateBase; + this.base(node); + + this.calcValue = function () { + var p = this.progress(); + var from = new rgbcolor(p.from.value); + var to = new rgbcolor(p.to.value); + + if (from.ok && to.ok) { + // tween color linearly + var r = from.r + (to.r - from.r) * p.progress; + var g = from.g + (to.g - from.g) * p.progress; + var b = from.b + (to.b - from.b) * p.progress; + return 'rgb(' + parseInt(r, 10) + ',' + parseInt(g, 10) + ',' + parseInt(b, 10) + ')'; + } + return this.attribute('from').value; + }; + }; + svg.Element.animateColor.prototype = new svg.Element.AnimateBase; + + // animate transform element + svg.Element.animateTransform = function (node) { + this.base = svg.Element.AnimateBase; + this.base(node); + + this.calcValue = function () { + var p = this.progress(); + + // tween value linearly + var from = svg.ToNumberArray(p.from.value); + var to = svg.ToNumberArray(p.to.value); + var newValue = ''; + for (var i = 0; i < from.length; i++) { + newValue += from[i] + (to[i] - from[i]) * p.progress + ' '; + } + return newValue; + }; + }; + svg.Element.animateTransform.prototype = new svg.Element.animate; + + // font element + svg.Element.font = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.horizAdvX = this.attribute('horiz-adv-x').numValue(); + + this.isRTL = false; + this.isArabic = false; + this.fontFace = null; + this.missingGlyph = null; + this.glyphs = []; + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (child.type == 'font-face') { + this.fontFace = child; + if (child.style('font-family').hasValue()) { + svg.Definitions[child.style('font-family').value] = this; + } + } else if (child.type == 'missing-glyph') this.missingGlyph = child; + else if (child.type == 'glyph') { + if (child.arabicForm != '') { + this.isRTL = true; + this.isArabic = true; + if (typeof this.glyphs[child.unicode] == 'undefined') this.glyphs[child.unicode] = []; + this.glyphs[child.unicode][child.arabicForm] = child; + } else { + this.glyphs[child.unicode] = child; + } + } + } + + this.render = function(/* ctx */) { + // NO RENDER + }; + }; + svg.Element.font.prototype = new svg.Element.ElementBase; + + // font-face element + svg.Element.fontface = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.ascent = this.attribute('ascent').value; + this.descent = this.attribute('descent').value; + this.unitsPerEm = this.attribute('units-per-em').numValue(); + }; + svg.Element.fontface.prototype = new svg.Element.ElementBase; + + // missing-glyph element + svg.Element.missingglyph = function (node) { + this.base = svg.Element.path; + this.base(node); + + this.horizAdvX = 0; + }; + svg.Element.missingglyph.prototype = new svg.Element.path; + + // glyph element + svg.Element.glyph = function (node) { + this.base = svg.Element.path; + this.base(node); + + this.horizAdvX = this.attribute('horiz-adv-x').numValue(); + this.unicode = this.attribute('unicode').value; + this.arabicForm = this.attribute('arabic-form').value; + }; + svg.Element.glyph.prototype = new svg.Element.path; + + // text element + svg.Element.text = function (node) { + this.captureTextNodes = true; + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.baseSetContext = this.setContext; + this.setContext = function (ctx) { + this.baseSetContext(ctx); + + var textBaseline = this.style('dominant-baseline').toTextBaseline(); + if (textBaseline == null) textBaseline = this.style('alignment-baseline').toTextBaseline(); + if (textBaseline != null) ctx.textBaseline = textBaseline; + }; + + this.initializeCoordinates = function (ctx) { + this.x = this.attribute('x').toPixels('x'); + this.y = this.attribute('y').toPixels('y'); + if (this.attribute('dx').hasValue()) this.x += this.attribute('dx').toPixels('x'); + if (this.attribute('dy').hasValue()) this.y += this.attribute('dy').toPixels('y'); + this.x += this.getAnchorDelta(ctx, this, 0); + }; + + this.getBoundingBox = function (ctx) { + this.initializeCoordinates(ctx); + var bb = null; + for (var i = 0; i < this.children.length; i++) { + var childBB = this.getChildBoundingBox(ctx, this, this, i); + if (bb == null) bb = childBB; + else bb.addBoundingBox(childBB); + } + return bb; + }; + + this.renderChildren = function (ctx) { + this.initializeCoordinates(ctx); + for (var i = 0; i < this.children.length; i++) { + this.renderChild(ctx, this, this, i); + } + svg.Mouse.checkBoundingBox(this, this.getBoundingBox(ctx)); + }; + + this.getAnchorDelta = function (ctx, parent, startI) { + var textAnchor = this.style('text-anchor').valueOrDefault('start'); + if (textAnchor != 'start') { + var width = 0; + for (var i = startI; i < parent.children.length; i++) { + var child = parent.children[i]; + if (i > startI && child.attribute('x').hasValue()) break; // new group + width += child.measureTextRecursive(ctx); + } + return -1 * (textAnchor == 'end' ? width : width / 2.0); + } + return 0; + }; + + this.adjustChildCoordinates = function(ctx, textParent, parent, i) { + var child = parent.children[i]; + if (typeof(child.measureText) !== 'function') { + return child; + } + + if (child.attribute('x').hasValue()) { + child.x = child.attribute('x').toPixels('x') + textParent.getAnchorDelta(ctx, parent, i); + + // local text-anchor + var textAnchor = child.attribute('text-anchor').valueOrDefault('start'); + if (textAnchor !== 'start') { + var width = child.measureTextRecursive(ctx); + child.x += -1 * (textAnchor == 'end' ? width : width / 2.0); + } + + if (child.attribute('dx').hasValue()) child.x += child.attribute('dx').toPixels('x'); + } else { + if (child.attribute('dx').hasValue()) textParent.x += child.attribute('dx').toPixels('x'); + child.x = textParent.x; + } + textParent.x = child.x + child.measureText(ctx); + + if (child.attribute('y').hasValue()) { + child.y = child.attribute('y').toPixels('y'); + if (child.attribute('dy').hasValue()) child.y += child.attribute('dy').toPixels('y'); + } else { + if (child.attribute('dy').hasValue()) textParent.y += child.attribute('dy').toPixels('y'); + child.y = textParent.y; + } + textParent.y = child.y; + + return child; + }; + + this.getChildBoundingBox = function (ctx, textParent, parent, i) { + var child = this.adjustChildCoordinates(ctx, textParent, parent, i); + var bb = child.getBoundingBox(ctx); + + for (var i = 0; i < child.children.length; i++) { + var childBB = textParent.getChildBoundingBox(ctx, textParent, child, i); + bb.addBoundingBox(childBB); + } + + return bb; + }; + + this.renderChild = function (ctx, textParent, parent, i) { + var child = this.adjustChildCoordinates(ctx, textParent, parent, i); + child.render(ctx); + + for (var i = 0; i < child.children.length; i++) { + textParent.renderChild(ctx, textParent, child, i); + } + }; + }; + svg.Element.text.prototype = new svg.Element.RenderedElementBase; + + // text base + svg.Element.TextElementBase = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.getGlyph = function (font, text, i) { + var c = text[i]; + var glyph = null; + if (font.isArabic) { + var arabicForm = 'isolated'; + if ((i == 0 || text[i - 1] == ' ') && i < text.length - 2 && text[i + 1] != ' ') arabicForm = 'terminal'; + if (i > 0 && text[i - 1] != ' ' && i < text.length - 2 && text[i + 1] != ' ') arabicForm = 'medial'; + if (i > 0 && text[i - 1] != ' ' && (i == text.length - 1 || text[i + 1] == ' ')) arabicForm = 'initial'; + if (typeof font.glyphs[c] != 'undefined') { + glyph = font.glyphs[c][arabicForm]; + if (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c]; + } + } else { + glyph = font.glyphs[c]; + } + if (glyph == null) glyph = font.missingGlyph; + return glyph; + }; + + this.renderChildren = function (ctx) { + var customFont = this.parent.style('font-family').getDefinition(); + if (customFont != null) { + var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); + var fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); + var text = this.getText(); + if (customFont.isRTL) text = text.split('').reverse().join(''); + + var dx = svg.ToNumberArray(this.parent.attribute('dx').value); + for (var i = 0; i < text.length; i++) { + var glyph = this.getGlyph(customFont, text, i); + var scale = fontSize / customFont.fontFace.unitsPerEm; + ctx.translate(this.x, this.y); + ctx.scale(scale, -scale); + var lw = ctx.lineWidth; + ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize; + if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0); + glyph.render(ctx); + if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0); + ctx.lineWidth = lw; + ctx.scale(1 / scale, -1 / scale); + ctx.translate(-this.x, -this.y); + + this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm; + if (typeof dx[i] != 'undefined' && !isNaN(dx[i])) { + this.x += dx[i]; + } + } + return; + } + if (ctx.paintOrder == 'stroke') { + if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); + if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); + } else { + if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y); + if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y); + } + }; + + this.getText = function () { + // OVERRIDE ME + }; + + this.measureTextRecursive = function (ctx) { + var width = this.measureText(ctx); + for (var i = 0; i < this.children.length; i++) { + width += this.children[i].measureTextRecursive(ctx); + } + return width; + }; + + this.measureText = function (ctx) { + var customFont = this.parent.style('font-family').getDefinition(); + if (customFont != null) { + var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); + var measure = 0; + var text = this.getText(); + if (customFont.isRTL) text = text.split('').reverse().join(''); + var dx = svg.ToNumberArray(this.parent.attribute('dx').value); + for (var i = 0; i < text.length; i++) { + var glyph = this.getGlyph(customFont, text, i); + measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; + if (typeof dx[i] != 'undefined' && !isNaN(dx[i])) { + measure += dx[i]; + } + } + return measure; + } + + var textToMeasure = svg.compressSpaces(this.getText()); + if (!ctx.measureText) return textToMeasure.length * 10; + + ctx.save(); + this.setContext(ctx, true); + var width = ctx.measureText(textToMeasure).width; + ctx.restore(); + return width; + }; + + this.getBoundingBox = function (ctx) { + var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); + return new svg.BoundingBox(this.x, this.y - fontSize, this.x + this.measureText(ctx), this.y); + }; + }; + svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase; + + // tspan + svg.Element.tspan = function (node) { + this.captureTextNodes = true; + this.base = svg.Element.TextElementBase; + this.base(node); + + this.text = svg.compressSpaces(node.value || node.text || node.textContent || ''); + this.getText = function () { + // if this node has children, then they own the text + if (this.children.length > 0) { return ''; } + return this.text; + }; + }; + svg.Element.tspan.prototype = new svg.Element.TextElementBase; + + // tref + svg.Element.tref = function (node) { + this.base = svg.Element.TextElementBase; + this.base(node); + + this.getText = function () { + var element = this.getHrefAttribute().getDefinition(); + if (element != null) return element.children[0].getText(); + }; + }; + svg.Element.tref.prototype = new svg.Element.TextElementBase; + + // a element + svg.Element.a = function (node) { + this.base = svg.Element.TextElementBase; + this.base(node); + + this.hasText = node.childNodes.length > 0; + for (var i = 0; i < node.childNodes.length; i++) { + if (node.childNodes[i].nodeType != 3) this.hasText = false; + } + + // this might contain text + this.text = this.hasText ? node.childNodes[0].value || node.childNodes[0].data : ''; + this.getText = function () { + return this.text; + }; + + this.baseRenderChildren = this.renderChildren; + this.renderChildren = function (ctx) { + if (this.hasText) { + // render as text element + this.baseRenderChildren(ctx); + var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); + svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.toPixels('y'), this.x + this.measureText(ctx), this.y)); + } else if (this.children.length > 0) { + // render as temporary group + var g = new svg.Element.g(); + g.children = this.children; + g.parent = this; + g.render(ctx); + } + }; + + this.onclick = function () { + windowEnv.open(this.getHrefAttribute().value); + }; + + this.onmousemove = function () { + svg.ctx.canvas.style.cursor = 'pointer'; + }; + }; + svg.Element.a.prototype = new svg.Element.TextElementBase; + + // textPath + svg.Element.textPath = function (node) { + this.base = svg.Element.TextElementBase; + this.base(node); + + var pathElement = this.getHrefAttribute().getDefinition(); + + this.text = svg.compressSpaces(node.value || node.text || node.textContent || ''); + + this.renderChildren = function (ctx) { + this.setTextData(ctx); + + ctx.save(); + var textDecoration = this.parent.style('text-decoration').value; + var fontSize = this.fontSize(); + var glyphInfo = this.glyphInfo; + var fill = ctx.fillStyle; + if (textDecoration === 'underline') { + ctx.beginPath(); + } + for (var i = 0; i < glyphInfo.length; i++) { + var p0 = glyphInfo[i].p0; + var p1 = glyphInfo[i].p1; + var partialText = glyphInfo[i].text; + + ctx.save(); + ctx.translate(p0.x, p0.y); + ctx.rotate(glyphInfo[i].rotation); + if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(partialText), 0, 0); + if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(partialText), 0, 0); + ctx.restore(); + if (textDecoration === 'underline') { + if (i === 0) { + ctx.moveTo(p0.x, p0.y + fontSize / 8); + } + ctx.lineTo(p1.x, p1.y + fontSize / 5); + } + + //// To assist with debugging visually, uncomment following + // + // ctx.beginPath(); + // if (i % 2) + // ctx.strokeStyle = 'red'; + // else + // ctx.strokeStyle = 'green'; + // ctx.moveTo(p0.x, p0.y); + // ctx.lineTo(p1.x, p1.y); + // ctx.stroke(); + // ctx.closePath(); + } + + if (textDecoration === 'underline') { + ctx.lineWidth = fontSize / 20; + ctx.strokeStyle = fill; + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + }; + + this.path = function (ctx) { + var ca = this.dataArray; + if (ctx != null) { + ctx.beginPath(); + } + for (var n = 0; n < ca.length; n++) { + var c = ca[n].command; + var p = ca[n].points; + switch (c) { + case 'L': + if (ctx != null) ctx.lineTo(p[0], p[1]); + break; + case 'M': + if (ctx != null) ctx.moveTo(p[0], p[1]); + break; + case 'C': + if (ctx != null) ctx.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]); + break; + case 'Q': + if (ctx != null) ctx.quadraticCurveTo(p[0], p[1], p[2], p[3]); + break; + case 'A': + var cx = p[0], cy = p[1], rx = p[2], ry = p[3], + theta = p[4], dTheta = p[5], psi = p[6], fs = p[7]; + + var r = (rx > ry) ? rx : ry; + var scaleX = (rx > ry) ? 1 : rx / ry; + var scaleY = (rx > ry) ? ry / rx : 1; + + if (ctx != null) { + ctx.translate(cx, cy); + ctx.rotate(psi); + ctx.scale(scaleX, scaleY); + ctx.arc(0, 0, r, theta, theta + dTheta, 1 - fs); + ctx.scale(1 / scaleX, 1 / scaleY); + ctx.rotate(-psi); + ctx.translate(-cx, -cy); + } + break; + case 'z': + if (ctx != null) ctx.closePath(); + break; + } + } + }; + + this.getText = function () { + return this.text; + }; + + this.fontSize = function () { + return this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); + }; + + this.measureText = function (ctx, text) { + var customFont = this.parent.style('font-family').getDefinition(); + text = text || this.getText(); + if (customFont != null) { + var fontSize = this.fontSize(); + var measure = 0; + if (customFont.isRTL) text = text.split("").reverse().join(""); + var dx = svg.ToNumberArray(this.parent.attribute('dx').value); + for (var i = 0; i < text.length; i++) { + var glyph = this.getGlyph(customFont, text, i); + measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm; + if (typeof dx[i] != 'undefined' && !isNaN(dx[i])) { + measure += dx[i]; + } + } + return measure; + } + + var textToMeasure = svg.compressSpaces(text); + if (!ctx.measureText) return textToMeasure.length * 10; + + ctx.save(); + this.setContext(ctx); + var width = ctx.measureText(textToMeasure).width; + ctx.restore(); + return width; + }; + + // This method supposes what all custom fonts already loaded. + // If some font will be loaded after this method call, will not be rendered correctly. + // You need to call this method manually to update glyphs cache. + this.setTextData = function (ctx) { + if (this.hasOwnProperty('glyphInfo')) return; + + var that = this; + var charArr = this.getText().split(''); + var spacesNumber = this.getText().split(' ').length - 1; + var dx = svg.ToNumberArray(this.parent.attribute('dx').valueOrDefault('0')); + var letterSpacing = 0; + var anchor = this.parent.style('text-anchor').valueOrDefault('start'); + + var thisSpacing = this.style('letter-spacing'); + var parentSpacing = this.parent.style('letter-spacing'); + if (!thisSpacing.hasValue() || thisSpacing.getValue() === 'inherit') { + letterSpacing = parentSpacing.toPixels(); + } else if (thisSpacing.hasValue()) { + if (thisSpacing.getValue() !== 'initial' && thisSpacing.getValue() !== 'unset') { + letterSpacing = thisSpacing.toPixels(); + } + } + + // fill letter-spacing cache + this.letterSpacingCache = []; + for (var i = 0; i < this.getText().length; i++) { + this.letterSpacingCache.push(dx[i] !== undefined ? dx[i] : letterSpacing); + } + + var dxSum = this.letterSpacingCache.reduce(function (acc, cur) { return acc + cur || 0 }, 0); + + this.textWidth = this.measureText(ctx); + this.textHeight = this.fontSize(); + + var textFullWidth = Math.max(this.textWidth + dxSum, 0); + + this.glyphInfo = []; + + var fullPathWidth = this.getPathLength(); + + var startOffset = this.style('startOffset').numValueOrDefault(0) * fullPathWidth; + var offset = 0; + if (anchor === 'middle' || anchor === 'center') { + offset = -textFullWidth / 2; + } + if (anchor === 'end' || anchor === 'right') { + offset = -textFullWidth; + } + offset += startOffset; + + var getGetterSpacingAt = function (idx) { + idx = idx || 0; + return that.letterSpacingCache[idx] || 0; + }; + + var findSegmentToFitChar = function (c, charI) { + var glyphWidth = that.measureText(ctx, c); + + if (c === ' ' && anchor === 'justify' && textFullWidth < fullPathWidth) { + glyphWidth += (fullPathWidth - textFullWidth) / spacesNumber; + } + + if (charI > -1) { + offset += getGetterSpacingAt(charI); + } + + var splineStep = that.textHeight / 20; + var segment = { + p0: that.getEquidistantPointOnPath(offset, splineStep), + p1: that.getEquidistantPointOnPath(offset + glyphWidth, splineStep) + }; + + offset += glyphWidth; + + return segment; + }; + + for (var i = 0; i < charArr.length; i++) { + + // Find such segment what distance between p0 and p1 is approx. width of glyph + var segment = findSegmentToFitChar(charArr[i], i); + + if (segment.p0 === undefined || segment.p1 === undefined) { + continue; + } + + var width = that.getLineLength(segment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y); + + // Note: Since glyphs are rendered one at a time, any kerning pair data built into the font will not be used. + // Can foresee having a rough pair table built in that the developer can override as needed. + // Or use "dx" attribute of the node as a naive replacement + + var kern = 0; + // placeholder for future implementation + + var midpoint = that.getPointOnLine(kern + width / 2.0, segment.p0.x, segment.p0.y, segment.p1.x, segment.p1.y); + + var rotation = Math.atan2((segment.p1.y - segment.p0.y), (segment.p1.x - segment.p0.x)); + this.glyphInfo.push({ + transposeX: midpoint.x, + transposeY: midpoint.y, + text: charArr[i], + rotation: rotation, + p0: segment.p0, + p1: segment.p1 + }); + } + }; + + this.parsePathData = function (path) { + this.pathLength = undefined; // reset path length + + if (!path) { + return []; + } + + var ca = []; + var pp = path.PathParser; + pp.reset(); + + // convert l, H, h, V, and v to L + while (!pp.isEnd()) { + var points = []; + var cmd = null; + var startX = pp.current ? pp.current.x : 0; + var startY = pp.current ? pp.current.y : 0; + + pp.nextCommand(); + var C = pp.command.toUpperCase(); + switch (pp.command) { + case 'M': + case 'm': + var p = pp.getAsCurrentPoint(); + // pp.addMarker(p); + points.push(p.x, p.y); + + pp.start = pp.current; + while (!pp.isCommandOrEnd()) { + var p = pp.getAsCurrentPoint(); + points.push(p.x, p.y); + cmd = 'L'; + } + break; + case 'L': + case 'l': + while (!pp.isCommandOrEnd()) { + var p = pp.getAsCurrentPoint(); + points.push(p.x, p.y); + } + cmd = 'L'; + break; + case 'H': + case 'h': + while (!pp.isCommandOrEnd()) { + var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), + pp.current.y); + points.push(newP.x, newP.y); + pp.current = newP; + } + cmd = 'L'; + break; + case 'V': + case 'v': + while (!pp.isCommandOrEnd()) { + var newP = new svg.Point(pp.current.x, + (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar()); + points.push(newP.x, newP.y); + pp.current = newP; + } + cmd = 'L'; + break; + case 'C': + case 'c': + while (!pp.isCommandOrEnd()) { + var p1 = pp.getPoint(); + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + points.push(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + case 'S': + case 's': + while (!pp.isCommandOrEnd()) { + var p1 = pp.getReflectedControlPoint(); + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + points.push(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y); + } + cmd = 'C'; + break; + case 'Q': + case 'q': + while (!pp.isCommandOrEnd()) { + var cntrl = pp.getAsControlPoint(); + var cp = pp.getAsCurrentPoint(); + points.push(cntrl.x, cntrl.y, cp.x, cp.y); + } + break; + case 'T': + case 't': + while (!pp.isCommandOrEnd()) { + var cntrl = pp.getReflectedControlPoint(); + pp.control = cntrl; + var cp = pp.getAsCurrentPoint(); + points.push(cntrl.x, cntrl.y, cp.x, cp.y); + } + cmd = 'Q'; + break; + case 'A': + case 'a': + while (!pp.isCommandOrEnd()) { + var curr = pp.current; // x1, y1 + var rx = pp.getScalar(); + var ry = pp.getScalar(); + var xAxisRotation = pp.getScalar() * (Math.PI / 180.0); // φ + var largeArcFlag = pp.getScalar(); // fA + var sweepFlag = pp.getScalar(); // fS + var cp = pp.getAsCurrentPoint(); // x2, y2 + + // Conversion from endpoint to center parameterization + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + // x1', y1' + var currp = new svg.Point( + Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0, + -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0 + ); + // adjust radii + var l = Math.pow(currp.x, 2) / Math.pow(rx, 2) + Math.pow(currp.y, 2) / Math.pow(ry, 2); + if (l > 1) { + rx *= Math.sqrt(l); + ry *= Math.sqrt(l); + } + // cx', cy' + var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt( + ((Math.pow(rx, 2) * Math.pow(ry, 2)) - (Math.pow(rx, 2) * Math.pow(currp.y, 2)) - (Math.pow(ry, 2) * Math.pow(currp.x, 2))) / + (Math.pow(rx, 2) * Math.pow(currp.y, 2) + Math.pow(ry, 2) * Math.pow(currp.x, 2)) + ); + if (isNaN(s)) s = 0; + var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); + // cx, cy + var centp = new svg.Point( + (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, + (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y + ); + // vector magnitude + var m = function (v) { + return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2)); + }; + // ratio between two vectors + var r = function (u, v) { + return (u[0] * v[0] + u[1] * v[1]) / (m(u) * m(v)) + }; + // angle between two vectors + var a = function (u, v) { + return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(r(u, v)); + }; + // initial angle + var a1 = a([1, 0], [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]); // θ1 + // angle delta + var u = [(currp.x - cpp.x) / rx, (currp.y - cpp.y) / ry]; + var v = [(-currp.x - cpp.x) / rx, (-currp.y - cpp.y) / ry]; + var ad = a(u, v); // Δθ + if (r(u, v) <= -1) ad = Math.PI; + if (r(u, v) >= 1) ad = 0; + if (sweepFlag === 0 && ad > 0) ad = ad - 2 * Math.PI; + if (sweepFlag === 1 && ad < 0) ad = ad + 2 * Math.PI; + + points = [centp.x, centp.y, rx, ry, a1, ad, xAxisRotation, sweepFlag]; + } + break; + case 'Z': + case 'z': + pp.current = pp.start; + } + + if (C !== 'Z') { + ca.push({ + command: cmd || C, + points: points, + start: { + x: startX, + y: startY + }, + pathLength: this.calcLength(startX, startY, cmd || C, points) + }); + } else { + ca.push({ + command: 'z', + points: [], + start: undefined, + pathLength: 0 + }); + } + } + return ca; + }; + + this.getPathLength = function() { + if (this.pathLength === undefined || this.pathLength === null || isNaN(this.pathLength)) { + this.pathLength = 0; + for (var l = 0; l < this.dataArray.length; l++) { + if (this.dataArray[l].pathLength > 0) { + this.pathLength += this.dataArray[l].pathLength; + } + } + } + return this.pathLength; + }; + + this.getPointOnPath = function(distance) { + var cumulativePathLength = 0; + var fullLen = this.getPathLength(); + var p = undefined; + + if (distance < -0.00005 || distance - 0.00005 > fullLen) return undefined; + + for(var i = 0; i < this.dataArray.length; i++) { + var pathCmd = this.dataArray[i]; + + if (pathCmd + && ( + pathCmd.pathLength < 0.00005 + || cumulativePathLength + pathCmd.pathLength + 0.00005 < distance + ) + ) { + cumulativePathLength += pathCmd.pathLength; + continue; + } + + var delta = distance - cumulativePathLength; + var currentT = undefined; + switch (pathCmd.command) { + case 'L': + p = this.getPointOnLine(delta, pathCmd.start.x, pathCmd.start.y, pathCmd.points[0], pathCmd.points[1], pathCmd.start.x, pathCmd.start.y); + break; + case 'A': + var start = pathCmd.points[4]; + // 4 = theta + var dTheta = pathCmd.points[5]; + // 5 = dTheta + var end = pathCmd.points[4] + dTheta; + + currentT = start + delta / pathCmd.pathLength * dTheta; + if(dTheta < 0 && currentT < end || dTheta >= 0 && currentT > end) { + break; + } + p = this.getPointOnEllipticalArc(pathCmd.points[0], pathCmd.points[1], pathCmd.points[2], pathCmd.points[3], currentT, pathCmd.points[6]); + break; + case 'C': + currentT = delta / pathCmd.pathLength; + if (currentT > 1) { + currentT = 1; + } + p = this.getPointOnCubicBezier(currentT, pathCmd.start.x, pathCmd.start.y, pathCmd.points[0], pathCmd.points[1], pathCmd.points[2], pathCmd.points[3], pathCmd.points[4], pathCmd.points[5]); + break; + case 'Q': + currentT = delta / pathCmd.pathLength; + if (currentT > 1) { + currentT = 1; + } + p = this.getPointOnQuadraticBezier(currentT, pathCmd.start.x, pathCmd.start.y, pathCmd.points[0], pathCmd.points[1], pathCmd.points[2], pathCmd.points[3]); + break; + } + + if (p !== undefined && p !== {}) { + return p; + } + + break; + } + }; + + // TODO need some optimisations. possibly build cache only for curved segments? + this.buildEquidistantCache = function(step, precision) { + var fullLen = this.getPathLength(); + precision = precision || 0.25; // accuracy vs performance + step = step || fullLen / 100; + this.equidistantCache = this.equidistantCache || {}; + if ( + !this.equidistantCache.hasOwnProperty('points') + || this.equidistantCache.step != step + || this.equidistantCache.precision != precision + ) { + // Prepare cache + this.equidistantCache = { + step: step, + precision: precision, + points: [] + }; + // Calculate points + var s = 0; + for (var l = 0; l <= fullLen; l += precision) { + var p0 = this.getPointOnPath(l), + p1 = this.getPointOnPath(l + precision); + + if (p0 === undefined || p1 === undefined) continue; + + s += this.getLineLength(p0.x, p0.y, p1.x, p1.y); + if (s >= step) { + this.equidistantCache.points.push({ + x: p0.x, + y: p0.y, + distance: l + }); + s -= step; + } + } + } + }; + + this.getEquidistantPointOnPath = function (targetDistance, step, precision) { + this.buildEquidistantCache(step, precision); + + if (targetDistance < 0 || targetDistance - this.getPathLength() > 0.00005) return undefined; + + var idx = Math.round(targetDistance / this.getPathLength() * (this.equidistantCache.points.length - 1)); + return this.equidistantCache.points[idx] || undefined; + }; + + this.getLineLength = function (x1, y1, x2, y2) { + return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + }; + + this.getPointOnLine = function (dist, P1x, P1y, P2x, P2y, fromX, fromY) { + if (fromX === undefined) { + fromX = P1x; + } + if (fromY === undefined) { + fromY = P1y; + } + + var m = (P2y - P1y) / ((P2x - P1x) + 0.00000001); + var run = Math.sqrt(dist * dist / (1 + m * m)); + if (P2x < P1x) { + run *= -1; + } + var rise = m * run; + var pt; + + if (P2x === P1x) { // vertical line + pt = { + x: fromX, + y: fromY + rise + }; + } else if ((fromY - P1y) / ((fromX - P1x) + 0.00000001) === m) { + pt = { + x: fromX + run, + y: fromY + rise + }; + } + else { + var ix, iy; + + var len = this.getLineLength(P1x, P1y, P2x, P2y); + if (len < 0.00000001) { + return undefined; + } + var u = (((fromX - P1x) * (P2x - P1x)) + ((fromY - P1y) * (P2y - P1y))); + u = u / (len * len); + ix = P1x + u * (P2x - P1x); + iy = P1y + u * (P2y - P1y); + + var pRise = this.getLineLength(fromX, fromY, ix, iy); + var pRun = Math.sqrt(dist * dist - pRise * pRise); + run = Math.sqrt(pRun * pRun / (1 + m * m)); + if (P2x < P1x) { + run *= -1; + } + rise = m * run; + pt = { + x: ix + run, + y: iy + rise + }; + } + + return pt; + }; + + this.getPointOnCubicBezier = function (pct, P1x, P1y, P2x, P2y, P3x, P3y, P4x, P4y) { + function CB1(t) { + return t * t * t; + } + + function CB2(t) { + return 3 * t * t * (1 - t); + } + + function CB3(t) { + return 3 * t * (1 - t) * (1 - t); + } + + function CB4(t) { + return (1 - t) * (1 - t) * (1 - t); + } + + var x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct); + var y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct); + + return { + x: x, + y: y + }; + }; + + this.getPointOnQuadraticBezier = function (pct, P1x, P1y, P2x, P2y, P3x, P3y) { + function QB1(t) { + return t * t; + } + + function QB2(t) { + return 2 * t * (1 - t); + } + + function QB3(t) { + return (1 - t) * (1 - t); + } + + var x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct); + var y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct); + + return { + x: x, + y: y + }; + }; + + this.getPointOnEllipticalArc = function (cx, cy, rx, ry, theta, psi) { + var cosPsi = Math.cos(psi), sinPsi = Math.sin(psi); + var pt = { + x: rx * Math.cos(theta), + y: ry * Math.sin(theta) + }; + return { + x: cx + (pt.x * cosPsi - pt.y * sinPsi), + y: cy + (pt.x * sinPsi + pt.y * cosPsi) + }; + }; + + this.calcLength = function (x, y, cmd, points) { + var len, p1, p2, t; + + switch (cmd) { + case 'L': + return this.getLineLength(x, y, points[0], points[1]); + case 'C': + // Approximates by breaking curve into 100 line segments + len = 0.0; + p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]); + for (t = 0.01; t <= 1; t += 0.01) { + p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + return len; + case 'Q': + // Approximates by breaking curve into 100 line segments + len = 0.0; + p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]); + for (t = 0.01; t <= 1; t += 0.01) { + p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + return len; + case 'A': + // Approximates by breaking curve into line segments + len = 0.0; + var start = points[4]; + // 4 = theta + var dTheta = points[5]; + // 5 = dTheta + var end = points[4] + dTheta; + var inc = Math.PI / 180.0; + // 1 degree resolution + if (Math.abs(start - end) < inc) { + inc = Math.abs(start - end); + } + // Note: for purpose of calculating arc length, not going to worry about rotating X-axis by angle psi + p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0); + if (dTheta < 0) {// clockwise + for (t = start - inc; t > end; t -= inc) { + p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + } + else {// counter-clockwise + for (t = start + inc; t < end; t += inc) { + p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + p1 = p2; + } + } + p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0); + len += this.getLineLength(p1.x, p1.y, p2.x, p2.y); + + return len; + } + + return 0; + }; + + this.dataArray = this.parsePathData(pathElement); + }; + svg.Element.textPath.prototype = new svg.Element.TextElementBase; + + // image element + svg.Element.image = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + var href = this.getHrefAttribute().value; + if (href == '') { return; } + var isSvg = href.match(/\.svg$/); + + svg.Images.push(this); + this.loaded = false; + if (!isSvg) { + this.img = doc.createElement('img'); + if (svg.opts['useCORS'] == true) { this.img.crossOrigin = 'Anonymous'; } + var self = this; + this.img.onload = function () { self.loaded = true; }; + this.img.onerror = function () { + svg.log('ERROR: image "' + href + '" not found'); + self.loaded = true; + }; + this.img.src = href; + } else { + this.img = svg.ajax(href); + this.loaded = true; + } + + this.renderChildren = function (ctx) { + var x = this.attribute('x').toPixels('x'); + var y = this.attribute('y').toPixels('y'); + + var width = this.attribute('width').toPixels('x'); + var height = this.attribute('height').toPixels('y'); + if (width == 0 || height == 0) return; + + ctx.save(); + if (isSvg) { + ctx.drawSvg(this.img, x, y, width, height); + } else { + ctx.translate(x, y); + svg.AspectRatio(ctx, + this.attribute('preserveAspectRatio').value, + width, + this.img.width, + height, + this.img.height, + 0, + 0); + if (self.loaded) { + if (this.img.complete === undefined || this.img.complete) { + ctx.drawImage(this.img, 0, 0); + } + } + } + ctx.restore(); + }; + + this.getBoundingBox = function () { + var x = this.attribute('x').toPixels('x'); + var y = this.attribute('y').toPixels('y'); + var width = this.attribute('width').toPixels('x'); + var height = this.attribute('height').toPixels('y'); + return new svg.BoundingBox(x, y, x + width, y + height); + }; + }; + svg.Element.image.prototype = new svg.Element.RenderedElementBase; + + // group element + svg.Element.g = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.getBoundingBox = function (ctx) { + var bb = new svg.BoundingBox(); + for (var i = 0; i < this.children.length; i++) { + bb.addBoundingBox(this.children[i].getBoundingBox(ctx)); + } + return bb; + }; + }; + svg.Element.g.prototype = new svg.Element.RenderedElementBase; + + // symbol element + svg.Element.symbol = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.render = function (/* ctx */) { + // NO RENDER + }; + }; + svg.Element.symbol.prototype = new svg.Element.RenderedElementBase; + + svg.ParseExternalUrl = function(url) { + // single quotes [2] + // v double quotes [3] + // v v no quotes [4] + // v v v + var urlMatch = url.match(/url\(('([^']+)'|"([^"]+)"|([^'"\)]+))\)/) || []; + return urlMatch[2] || urlMatch[3] || urlMatch[4]; + }; + + // style element + svg.Element.style = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + // text, or spaces then CDATA + var css = ''; + for (var i = 0; i < node.childNodes.length; i++) { + css += node.childNodes[i].data; + } + css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''); // remove comments + css = svg.compressSpaces(css); // replace whitespace + var cssDefs = css.split('}'); + for (var i = 0; i < cssDefs.length; i++) { + if (svg.trim(cssDefs[i]) != '') { + var cssDef = cssDefs[i].split('{'); + var cssClasses = cssDef[0].split(','); + var cssProps = cssDef[1].split(';'); + for (var j = 0; j < cssClasses.length; j++) { + var cssClass = svg.trim(cssClasses[j]); + if (cssClass != '') { + var props = svg.Styles[cssClass] || {}; + for (var k = 0; k < cssProps.length; k++) { + var prop = cssProps[k].indexOf(':'); + var name = cssProps[k].substr(0, prop); + var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop); + if (name != null && value != null) { + props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value)); + } + } + svg.Styles[cssClass] = props; + svg.StylesSpecificity[cssClass] = getSelectorSpecificity(cssClass); + if (cssClass == '@font-face' && !nodeEnv) { + var fontFamily = props['font-family'].value.replace(/"/g, ''); + var srcs = props['src'].value.split(','); + for (var s = 0; s < srcs.length; s++) { + if (srcs[s].indexOf('format("svg")') > 0) { + var url = svg.ParseExternalUrl(srcs[s]); + if (url) { + var doc = svg.parseXml(svg.ajax(url)); + var fonts = doc.getElementsByTagName('font'); + for (var f = 0; f < fonts.length; f++) { + var font = svg.CreateElement(fonts[f]); + svg.Definitions[fontFamily] = font; + } + } + } + } + } + } + } + } + } + }; + svg.Element.style.prototype = new svg.Element.ElementBase; + + // use element + svg.Element.use = function (node) { + this.base = svg.Element.RenderedElementBase; + this.base(node); + + this.baseSetContext = this.setContext; + this.setContext = function (ctx) { + this.baseSetContext(ctx); + if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').toPixels('x'), 0); + if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').toPixels('y')); + }; + + var element = this.getHrefAttribute().getDefinition(); + + this.path = function (ctx) { + if (element != null) element.path(ctx); + }; + + this.elementTransform = function () { + if (element != null && element.style('transform', false, true).hasValue()) { + return new svg.Transform(element.style('transform', false, true).value); + } + }; + + this.getBoundingBox = function (ctx) { + if (element != null) return element.getBoundingBox(ctx); + }; + + this.renderChildren = function (ctx) { + if (element != null) { + var tempSvg = element; + if (element.type == 'symbol') { + // render me using a temporary svg element in symbol cases (http://www.w3.org/TR/SVG/struct.html#UseElement) + tempSvg = new svg.Element.svg(); + tempSvg.type = 'svg'; + tempSvg.attributes['viewBox'] = new svg.Property('viewBox', element.attribute('viewBox').value); + tempSvg.attributes['preserveAspectRatio'] = new svg.Property('preserveAspectRatio', element.attribute('preserveAspectRatio').value); + tempSvg.attributes['overflow'] = new svg.Property('overflow', element.attribute('overflow').value); + tempSvg.children = element.children; + } + if (tempSvg.type == 'svg') { + // if symbol or svg, inherit width/height from me + if (this.attribute('width').hasValue()) tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value); + if (this.attribute('height').hasValue()) tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value); + } + var oldParent = tempSvg.parent; + tempSvg.parent = null; + tempSvg.render(ctx); + tempSvg.parent = oldParent; + } + }; + }; + svg.Element.use.prototype = new svg.Element.RenderedElementBase; + + // mask element + svg.Element.mask = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.apply = function (ctx, element) { + // render as temp svg + var x = this.attribute('x').toPixels('x'); + var y = this.attribute('y').toPixels('y'); + var width = this.attribute('width').toPixels('x'); + var height = this.attribute('height').toPixels('y'); + + if (width == 0 && height == 0) { + var bb = new svg.BoundingBox(); + for (var i = 0; i < this.children.length; i++) { + bb.addBoundingBox(this.children[i].getBoundingBox(ctx)); + } + var x = Math.floor(bb.x1); + var y = Math.floor(bb.y1); + var width = Math.floor(bb.width()); + var height = Math.floor(bb.height()); + } + + // temporarily remove mask to avoid recursion + var mask = element.style('mask').value; + element.style('mask').value = ''; + + var cMask = createCanvas(x + width, y + height); + var maskCtx = cMask.getContext('2d'); + svg.SetDefaults(maskCtx); + this.renderChildren(maskCtx); + + // convert mask to alpha with a fake node + // TODO: refactor out apply from feColorMatrix + var cm = new svg.Element.feColorMatrix({ + nodeType: 1, + childNodes: [], + attributes: [ + { nodeName: 'type', value: 'luminanceToAlpha' }, + { nodeName: 'includeOpacity', value: 'true' }, + ] + }); + cm.apply(maskCtx, 0, 0, x + width, y + height); + + var c = createCanvas(x + width, y + height); + var tempCtx = c.getContext('2d'); + svg.SetDefaults(tempCtx); + element.render(tempCtx); + tempCtx.globalCompositeOperation = 'destination-in'; + tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat'); + tempCtx.fillRect(0, 0, x + width, y + height); + + ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat'); + ctx.fillRect(0, 0, x + width, y + height); + + // reassign mask + element.style('mask').value = mask; + }; + + this.render = function (/* ctx */) { + // NO RENDER + }; + }; + svg.Element.mask.prototype = new svg.Element.ElementBase; + + // clip element + svg.Element.clipPath = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.apply = function (ctx) { + var hasContext2D = (typeof CanvasRenderingContext2D !== 'undefined'); + var oldBeginPath = ctx.beginPath; + var oldClosePath = ctx.closePath; + if (hasContext2D) { + CanvasRenderingContext2D.prototype.beginPath = function () { }; + CanvasRenderingContext2D.prototype.closePath = function () { }; + } + + oldBeginPath.call(ctx); + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + if (typeof child.path != 'undefined') { + var transform = typeof child.elementTransform != 'undefined' && child.elementTransform(); // handle + if (!transform && child.style('transform', false, true).hasValue()) { + transform = new svg.Transform(child.style('transform', false, true).value); + } + if (transform) { + transform.apply(ctx); + } + child.path(ctx); + if (hasContext2D) { + CanvasRenderingContext2D.prototype.closePath = oldClosePath; + } + if (transform) { transform.unapply(ctx); } + } + } + oldClosePath.call(ctx); + ctx.clip(); + if (hasContext2D) { + CanvasRenderingContext2D.prototype.beginPath = oldBeginPath; + CanvasRenderingContext2D.prototype.closePath = oldClosePath; + } + }; + + this.render = function (/* ctx */) { + // NO RENDER + }; + }; + svg.Element.clipPath.prototype = new svg.Element.ElementBase; + + // filters + svg.Element.filter = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.apply = function (ctx, element) { + // render as temp svg + var bb = element.getBoundingBox(ctx); + var x = Math.floor(bb.x1); + var y = Math.floor(bb.y1); + var width = Math.floor(bb.width()); + var height = Math.floor(bb.height()); + + // temporarily remove filter to avoid recursion + var filter = element.style('filter').value; + element.style('filter').value = ''; + + var px = 0, + py = 0; + for (var i = 0; i < this.children.length; i++) { + var efd = this.children[i].extraFilterDistance || 0; + px = Math.max(px, efd); + py = Math.max(py, efd); + } + + var c = createCanvas(width + 2 * px, height + 2 * py); + var tempCtx = c.getContext('2d'); + svg.SetDefaults(tempCtx); + tempCtx.translate(-x + px, -y + py); + element.render(tempCtx); + + // apply filters + for (var i = 0; i < this.children.length; i++) { + if (typeof this.children[i].apply == 'function') { + this.children[i].apply(tempCtx, 0, 0, width + 2 * px, height + 2 * py); + } + } + + // render on me + ctx.drawImage(c, 0, 0, width + 2 * px, height + 2 * py, x - px, y - py, width + 2 * px, height + 2 * py); + + // reassign filter + element.style('filter', true).value = filter; + }; + + this.render = function (/* ctx */) { + // NO RENDER + }; + }; + svg.Element.filter.prototype = new svg.Element.ElementBase; + + svg.Element.feDropShadow = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + this.addStylesFromStyleDefinition(); + + this.apply = function (/* ctx, x, y, width, height */) { + // TODO: implement + }; + }; + svg.Element.feDropShadow.prototype = new svg.Element.ElementBase; + + svg.Element.feMorphology = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.apply = function (/* ctx, x, y, width, height */) { + // TODO: implement + }; + }; + svg.Element.feMorphology.prototype = new svg.Element.ElementBase; + + svg.Element.feComposite = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.apply = function (/* ctx, x, y, width, height */) { + // TODO: implement + }; + }; + svg.Element.feComposite.prototype = new svg.Element.ElementBase; + + svg.Element.feColorMatrix = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + var matrix = svg.ToNumberArray(this.attribute('values').value); + switch (this.attribute('type').valueOrDefault('matrix')) { // http://www.w3.org/TR/SVG/filters.html#feColorMatrixElement + case 'saturate': + var s = matrix[0]; + matrix = [0.213 + 0.787 * s, 0.715 - 0.715 * s, 0.072 - 0.072 * s, 0, 0, + 0.213 - 0.213 * s, 0.715 + 0.285 * s, 0.072 - 0.072 * s, 0, 0, + 0.213 - 0.213 * s, 0.715 - 0.715 * s, 0.072 + 0.928 * s, 0, 0, + 0, 0, 0, 1, 0, + 0, 0, 0, 0, 1 + ]; + break; + case 'hueRotate': + var a = matrix[0] * Math.PI / 180.0; + var c = function (m1, m2, m3) { return m1 + Math.cos(a) * m2 + Math.sin(a) * m3; }; + matrix = [c(0.213, 0.787, -0.213), c(0.715, -0.715, -0.715), c(0.072, -0.072, 0.928), 0, 0, + c(0.213, -0.213, 0.143), c(0.715, 0.285, 0.140), c(0.072, -0.072, -0.283), 0, 0, + c(0.213, -0.213, -0.787), c(0.715, -0.715, 0.715), c(0.072, 0.928, 0.072), 0, 0, + 0, 0, 0, 1, 0, + 0, 0, 0, 0, 1 + ]; + break; + case 'luminanceToAlpha': + matrix = [0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0.2125, 0.7154, 0.0721, 0, 0, + 0, 0, 0, 0, 1 + ]; + break; + } + + function imGet(img, x, y, width, height, rgba) { + return img[y * width * 4 + x * 4 + rgba]; + } + + function imSet(img, x, y, width, height, rgba, val) { + img[y * width * 4 + x * 4 + rgba] = val; + } + + function m(i, v) { + var mi = matrix[i]; + return mi * (mi < 0 ? v - 255 : v); + } + + var includeOpacity = this.attribute('includeOpacity').hasValue(); + this.apply = function (ctx, x, y, width, height) { + // assuming x==0 && y==0 for now + var srcData = ctx.getImageData(0, 0, width, height); + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var r = imGet(srcData.data, x, y, width, height, 0); + var g = imGet(srcData.data, x, y, width, height, 1); + var b = imGet(srcData.data, x, y, width, height, 2); + var a = imGet(srcData.data, x, y, width, height, 3); + var nr = m(0, r) + m(1, g) + m(2, b) + m(3, a) + m(4, 1); + var ng = m(5, r) + m(6, g) + m(7, b) + m(8, a) + m(9, 1); + var nb = m(10, r) + m(11, g) + m(12, b) + m(13, a) + m(14, 1); + var na = m(15, r) + m(16, g) + m(17, b) + m(18, a) + m(19, 1); + if (includeOpacity) { + nr = ng = nb = 0; + na *= a / 255; + } + imSet(srcData.data, x, y, width, height, 0, nr); + imSet(srcData.data, x, y, width, height, 1, ng); + imSet(srcData.data, x, y, width, height, 2, nb); + imSet(srcData.data, x, y, width, height, 3, na); + } + } + ctx.clearRect(0, 0, width, height); + ctx.putImageData(srcData, 0, 0); + }; + }; + svg.Element.feColorMatrix.prototype = new svg.Element.ElementBase; + + svg.Element.feGaussianBlur = function (node) { + this.base = svg.Element.ElementBase; + this.base(node); + + this.blurRadius = Math.floor(this.attribute('stdDeviation').numValue()); + this.extraFilterDistance = this.blurRadius; + + this.apply = function (ctx, x, y, width, height) { + if (!stackblurCanvas || typeof stackblurCanvas.canvasRGBA === 'undefined') { + svg.log('ERROR: StackBlur.js must be included for blur to work'); + return; + } + + // StackBlur requires canvas be on document + ctx.canvas.id = svg.UniqueId(); + { + ctx.canvas.style.display = 'none'; + doc.body.appendChild(ctx.canvas); + } + stackblurCanvas.canvasRGBA(ctx.canvas, x, y, width, height, this.blurRadius); + { + doc.body.removeChild(ctx.canvas); + } + }; + }; + svg.Element.feGaussianBlur.prototype = new svg.Element.ElementBase; + + // title element, do nothing + svg.Element.title = function (/* node */) { }; + svg.Element.title.prototype = new svg.Element.ElementBase; + + // desc element, do nothing + svg.Element.desc = function (/* node */) { }; + svg.Element.desc.prototype = new svg.Element.ElementBase; + + svg.Element.MISSING = function (node) { + svg.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.'); + }; + svg.Element.MISSING.prototype = new svg.Element.ElementBase; + + // element factory + svg.CreateElement = function (node) { + var className = node.nodeName.replace(/^[^:]+:/, ''); // remove namespace + className = className.replace(/\-/g, ''); // remove dashes + var e = null; + if (typeof svg.Element[className] != 'undefined') { + e = new svg.Element[className](node); + } else { + e = new svg.Element.MISSING(node); + } + + e.type = node.nodeName; + return e; + }; + + // load from url + svg.load = function (ctx, url) { + svg.loadXml(ctx, svg.ajax(url)); + }; + + // load from xml + svg.loadXml = function (ctx, xml) { + svg.loadXmlDoc(ctx, svg.parseXml(xml)); + }; + + svg.loadXmlDoc = function (ctx, dom) { + svg.init(ctx); + + var mapXY = function (p) { + var e = ctx.canvas; + while (e) { + p.x -= e.offsetLeft; + p.y -= e.offsetTop; + e = e.offsetParent; + } + if (windowEnv.scrollX) p.x += windowEnv.scrollX; + if (windowEnv.scrollY) p.y += windowEnv.scrollY; + return p; + }; + + // bind mouse + if (svg.opts['ignoreMouse'] != true) { + ctx.canvas.onclick = function (e) { + var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); + svg.Mouse.onclick(p.x, p.y); + }; + ctx.canvas.onmousemove = function (e) { + var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY)); + svg.Mouse.onmousemove(p.x, p.y); + }; + } + + var e = svg.CreateElement(dom.documentElement); + e.root = true; + e.addStylesFromStyleDefinition(); + + // render loop + var isFirstRender = true; + var draw = function () { + svg.ViewPort.Clear(); + if (ctx.canvas.parentNode) { + svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight); + } else { + svg.ViewPort.SetCurrent(defaultClientWidth, defaultClientHeight); + } + + if (svg.opts['ignoreDimensions'] != true && (isFirstRender || (svg.opts['scaleWidth'] == null && svg.opts['scaleHeight'] == null))) { + // set canvas size + if (e.style('width').hasValue()) { + ctx.canvas.width = e.style('width').toPixels('x'); + if (ctx.canvas.style) { ctx.canvas.style.width = ctx.canvas.width + 'px'; } + } + if (e.style('height').hasValue()) { + ctx.canvas.height = e.style('height').toPixels('y'); + if (ctx.canvas.style) { ctx.canvas.style.height = ctx.canvas.height + 'px'; } + } + } + var cWidth = ctx.canvas.clientWidth || ctx.canvas.width; + var cHeight = ctx.canvas.clientHeight || ctx.canvas.height; + if (svg.opts['ignoreDimensions'] == true && e.style('width').hasValue() && e.style('height').hasValue()) { + cWidth = e.style('width').toPixels('x'); + cHeight = e.style('height').toPixels('y'); + } + svg.ViewPort.SetCurrent(cWidth, cHeight); + + if (svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX']; + if (svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY']; + if (svg.opts['scaleWidth'] != null || svg.opts['scaleHeight'] != null) { + var xRatio = null, + yRatio = null, + viewBox = svg.ToNumberArray(e.attribute('viewBox').value); + + if (svg.opts['scaleWidth'] != null) { + if (e.attribute('width').hasValue()) xRatio = e.attribute('width').toPixels('x') / svg.opts['scaleWidth']; + else if (!isNaN(viewBox[2])) xRatio = viewBox[2] / svg.opts['scaleWidth']; + } + + if (svg.opts['scaleHeight'] != null) { + if (e.attribute('height').hasValue()) yRatio = e.attribute('height').toPixels('y') / svg.opts['scaleHeight']; + else if (!isNaN(viewBox[3])) yRatio = viewBox[3] / svg.opts['scaleHeight']; + } + + if (xRatio == null) { xRatio = yRatio; } + if (yRatio == null) { yRatio = xRatio; } + + e.attribute('width', true).value = svg.opts['scaleWidth']; + e.attribute('height', true).value = svg.opts['scaleHeight']; + e.style('transform', true, true).value += ' scale(' + (1.0 / xRatio) + ',' + (1.0 / yRatio) + ')'; + } + + // clear and render + if (svg.opts['ignoreClear'] != true) { + ctx.clearRect(0, 0, cWidth, cHeight); + } + e.render(ctx); + if (isFirstRender) { + isFirstRender = false; + if (typeof svg.opts['renderCallback'] == 'function') svg.opts['renderCallback'](dom); + } + }; + + var waitingForImages = true; + if (svg.ImagesLoaded()) { + waitingForImages = false; + draw(); + } + { + //In node, in the most cases, we don't need the animation listener. + svg.intervalID = setInterval(function () { + var needUpdate = false; + + if (waitingForImages && svg.ImagesLoaded()) { + waitingForImages = false; + needUpdate = true; + } + + // need update from mouse events? + if (svg.opts['ignoreMouse'] != true) { + needUpdate = needUpdate || svg.Mouse.hasEvents(); + } + + // need update from animations? + if (svg.opts['ignoreAnimation'] != true) { + for (var i = 0; i < svg.Animations.length; i++) { + var needAnimationUpdate = svg.Animations[i].update(1000 / svg.FRAMERATE); + needUpdate = needUpdate || needAnimationUpdate; + } + } + + // need update from redraw? + if (typeof svg.opts['forceRedraw'] == 'function') { + if (svg.opts['forceRedraw']() == true) needUpdate = true; + } + + // render if needed + if (needUpdate) { + draw(); + svg.Mouse.runEvents(); // run and clear our events + } + }, 1000 / svg.FRAMERATE); + } + }; + + svg.stop = function () { + if (svg.intervalID) { + clearInterval(svg.intervalID); + } + }; + + svg.Mouse = new (function () { + this.events = []; + this.hasEvents = function () { return this.events.length != 0; }; + + this.onclick = function (x, y) { + this.events.push({ + type: 'onclick', + x: x, + y: y, + run: function (e) { if (e.onclick) e.onclick(); } + }); + }; + + this.onmousemove = function (x, y) { + this.events.push({ + type: 'onmousemove', + x: x, + y: y, + run: function (e) { if (e.onmousemove) e.onmousemove(); } + }); + }; + + this.eventElements = []; + + this.checkPath = function (element, ctx) { + for (var i = 0; i < this.events.length; i++) { + var e = this.events[i]; + if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element; + } + }; + + this.checkBoundingBox = function (element, bb) { + if (!bb) { + return; + } + + for (var i = 0; i < this.events.length; i++) { + var e = this.events[i]; + if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element; + } + }; + + this.runEvents = function () { + svg.ctx.canvas.style.cursor = ''; + + for (var i = 0; i < this.events.length; i++) { + var e = this.events[i]; + var element = this.eventElements[i]; + while (element) { + e.run(element); + element = element.parent; + } + } + + // done running, clear + this.events = []; + this.eventElements = []; + }; + }); + + return svg; + } + + if (typeof CanvasRenderingContext2D != 'undefined') { + CanvasRenderingContext2D.prototype.drawSvg = function (s, dx, dy, dw, dh, opts) { + var cOpts = { + ignoreMouse: true, + ignoreAnimation: true, + ignoreDimensions: true, + ignoreClear: true, + offsetX: dx, + offsetY: dy, + scaleWidth: dw, + scaleHeight: dh + }; + + for (var prop in opts) { + if (opts.hasOwnProperty(prop)) { + cOpts[prop] = opts[prop]; + } + } + canvg(this.canvas, s, cOpts); + }; + } + + // for tests + canvg._build = build; + + module.exports = canvg; + }); + + return canvg_1; + +}))); diff --git a/lib/canvg/v2/rgbcolor.min.js b/lib/canvg/v2/rgbcolor.min.js new file mode 100644 index 0000000..51471d9 --- /dev/null +++ b/lib/canvg/v2/rgbcolor.min.js @@ -0,0 +1 @@ +!function(e){function f(e){this.ok=!1,"#"==e.charAt(0)&&(e=e.substr(1,6)),e=(e=e.replace(/ /g,"")).toLowerCase();var a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};for(var r in a)e==r&&(e=a[r]);for(var t=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],d=0;d255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var e=this.r.toString(16),f=this.g.toString(16),a=this.b.toString(16);return 1==e.length&&(e="0"+e),1==f.length&&(f="0"+f),1==a.length&&(a="0"+a),"#"+e+f+a},this.getHelpXML=function(){for(var e=new Array,r=0;r "+s.toRGB()+" -> "+s.toHex());o.appendChild(c),o.appendChild(b),l.appendChild(o)}catch(e){}return l}}"undefined"!=typeof define&&define.amd?define(function(){return f}):"undefined"!=typeof module&&module.exports&&(module.exports=f),e.RGBColor=f}("undefined"!=typeof window?window:this); \ No newline at end of file diff --git a/lib/canvg/v2/stackblur.min.js b/lib/canvg/v2/stackblur.min.js new file mode 100644 index 0000000..8d273ba --- /dev/null +++ b/lib/canvg/v2/stackblur.min.js @@ -0,0 +1 @@ +!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.StackBlur=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>T,0!=F?(F=255/F,H[o]=(q*S>>T)*F,H[o+1]=(r*S>>T)*F,H[o+2]=(s*S>>T)*F):H[o]=H[o+1]=H[o+2]=0,q-=u,r-=v,s-=w,t-=x,u-=Q.r,v-=Q.g,w-=Q.b,x-=Q.a,m=p+((m=g+f+1)>T,F>0?(F=255/F,H[m]=(q*S>>T)*F,H[m+1]=(r*S>>T)*F,H[m+2]=(s*S>>T)*F):H[m]=H[m+1]=H[m+2]=0,q-=u,r-=v,s-=w,t-=x,u-=Q.r,v-=Q.g,w-=Q.b,x-=Q.a,m=g+((m=h+L)>P,D[o+1]=r*O>>P,D[o+2]=s*O>>P,q-=t,r-=u,s-=v,t-=M.r,u-=M.g,v-=M.b,m=p+((m=g+f+1)>P,D[m+1]=r*O>>P,D[m+2]=s*O>>P,q-=t,r-=u,s-=v,t-=M.r,u-=M.g,v-=M.b,m=g+((m=h+H)>> 1) : c >>> 1; + } + crcTable[n] = c; + } + return crcTable; +} + +function calcCrc(buf) { + let c = -1; + if (!pngDataTable) pngDataTable = createPngDataTable(); + for (let n = 0; n < buf.length; n++) { + c = pngDataTable[(c ^ buf[n]) & 0xFF] ^ (c >>> 8); + } + return c ^ -1; +} + +let pngDataTable; + +const PNG = 'image/png'; +const JPEG = 'image/jpeg'; + +// those are 3 possible signature of the physBlock in base64. +// the pHYs signature block is preceed by the 4 bytes of lenght. The length of +// the block is always 9 bytes. So a phys block has always this signature: +// 0 0 0 9 p H Y s. +// However the data64 encoding aligns we will always find one of those 3 strings. +// this allow us to find this particular occurence of the pHYs block without +// converting from b64 back to string +const b64PhysSignature1 = 'AAlwSFlz'; +const b64PhysSignature2 = 'AAAJcEhZ'; +const b64PhysSignature3 = 'AAAACXBI'; + +const _P = 'p'.charCodeAt(0); +const _H = 'H'.charCodeAt(0); +const _Y = 'Y'.charCodeAt(0); +const _S = 's'.charCodeAt(0); + +export function changeDpiBlob(blob, dpi) { + // 33 bytes are ok for pngs and jpegs + // to contain the information. + const headerChunk = blob.slice(0, 33); + return new Promise((resolve, reject) => { + const fileReader = new FileReader(); + fileReader.onload = () => { + const dataArray = new Uint8Array(fileReader.result); + const tail = blob.slice(33); + const changedArray = changeDpiOnArray(dataArray, dpi, blob.type); + resolve(new Blob([changedArray, tail], { type: blob.type })); + }; + fileReader.readAsArrayBuffer(headerChunk); + }); +} + +export function changeDpiDataUrl(base64Image, dpi) { + const dataSplitted = base64Image.split(','); + const format = dataSplitted[0]; + const body = dataSplitted[1]; + let type; + let headerLength; + let overwritepHYs = false; + if (format.indexOf(PNG) !== -1) { + type = PNG; + const b64Index = detectPhysChunkFromDataUrl(body); + // 28 bytes in dataUrl are 21bytes, length of phys chunk with everything inside. + if (b64Index >= 0) { + headerLength = Math.ceil((b64Index + 28) / 3) * 4; + overwritepHYs = true; + } else { + headerLength = 33 / 3 * 4; + } + } + if (format.indexOf(JPEG) !== -1) { + type = JPEG; + headerLength = 18 / 3 * 4; + } + // 33 bytes are ok for pngs and jpegs + // to contain the information. + const stringHeader = body.substring(0, headerLength); + const restOfData = body.substring(headerLength); + const headerBytes = atob(stringHeader); + const dataArray = new Uint8Array(headerBytes.length); + for (let i = 0; i < dataArray.length; i++) { + dataArray[i] = headerBytes.charCodeAt(i); + } + const finalArray = changeDpiOnArray(dataArray, dpi, type, overwritepHYs); + const base64Header = btoa(String.fromCharCode(...finalArray)); + return [format, ',', base64Header, restOfData].join(''); +} + +function detectPhysChunkFromDataUrl(data) { + let b64index = data.indexOf(b64PhysSignature1); + if (b64index === -1) { + b64index = data.indexOf(b64PhysSignature2); + } + if (b64index === -1) { + b64index = data.indexOf(b64PhysSignature3); + } + // if b64index === -1 chunk is not found + return b64index; +} + +function searchStartOfPhys(data) { + const length = data.length - 1; + // we check from the end since we cut the string in proximity of the header + // the header is within 21 bytes from the end. + for (let i = length; i >= 4; i--) { + if (data[i - 4] === 9 && data[i - 3] === _P && + data[i - 2] === _H && data[i - 1] === _Y && + data[i] === _S) { + return i - 3; + } + } +} + +function changeDpiOnArray(dataArray, dpi, format, overwritepHYs) { + if (format === JPEG) { + dataArray[13] = 1; // 1 pixel per inch or 2 pixel per cm + dataArray[14] = dpi >> 8; // dpiX high byte + dataArray[15] = dpi & 0xff; // dpiX low byte + dataArray[16] = dpi >> 8; // dpiY high byte + dataArray[17] = dpi & 0xff; // dpiY low byte + return dataArray; + } + if (format === PNG) { + const physChunk = new Uint8Array(13); + // chunk header pHYs + // 9 bytes of data + // 4 bytes of crc + // this multiplication is because the standard is dpi per meter. + dpi *= 39.3701; + physChunk[0] = _P; + physChunk[1] = _H; + physChunk[2] = _Y; + physChunk[3] = _S; + physChunk[4] = dpi >>> 24; // dpiX highest byte + physChunk[5] = dpi >>> 16; // dpiX veryhigh byte + physChunk[6] = dpi >>> 8; // dpiX high byte + physChunk[7] = dpi & 0xff; // dpiX low byte + physChunk[8] = physChunk[4]; // dpiY highest byte + physChunk[9] = physChunk[5]; // dpiY veryhigh byte + physChunk[10] = physChunk[6]; // dpiY high byte + physChunk[11] = physChunk[7]; // dpiY low byte + physChunk[12] = 1; // dot per meter.... + + const crc = calcCrc(physChunk); + + const crcChunk = new Uint8Array(4); + crcChunk[0] = crc >>> 24; + crcChunk[1] = crc >>> 16; + crcChunk[2] = crc >>> 8; + crcChunk[3] = crc & 0xff; + + if (overwritepHYs) { + const startingIndex = searchStartOfPhys(dataArray); + dataArray.set(physChunk, startingIndex); + dataArray.set(crcChunk, startingIndex + 13); + return dataArray; + } else { + // i need to give back an array of data that is divisible by 3 so that + // dataurl encoding gives me integers, for luck this chunk is 17 + 4 = 21 + // if it was we could add a text chunk contaning some info, untill desired + // length is met. + + // chunk structur 4 bytes for length is 9 + const chunkLength = new Uint8Array(4); + chunkLength[0] = 0; + chunkLength[1] = 0; + chunkLength[2] = 0; + chunkLength[3] = 9; + + const finalHeader = new Uint8Array(54); + finalHeader.set(dataArray, 0); + finalHeader.set(chunkLength, 33); + finalHeader.set(physChunk, 37); + finalHeader.set(crcChunk, 50); + return finalHeader; + } + } +} \ No newline at end of file diff --git a/lib/color.js b/lib/color.js new file mode 100644 index 0000000..7476baa --- /dev/null +++ b/lib/color.js @@ -0,0 +1,5728 @@ +// A is m x n. B is n x p. product is m x p. +function multiplyMatrices (A, B) { + let m = A.length; + + if (!Array.isArray(A[0])) { + // A is vector, convert to [[a, b, c, ...]] + A = [A]; + } + + if (!Array.isArray(B[0])) { + // B is vector, convert to [[a], [b], [c], ...]] + B = B.map(x => [x]); + } + + let p = B[0].length; + let B_cols = B[0].map((_, i) => B.map(x => x[i])); // transpose B + let product = A.map(row => B_cols.map(col => { + let ret = 0; + + if (!Array.isArray(row)) { + for (let c of col) { + ret += row * c; + } + + return ret; + } + + for (let i = 0; i < row.length; i++) { + ret += row[i] * (col[i] || 0); + } + + return ret; + })); + + if (m === 1) { + product = product[0]; // Avoid [[a, b, c, ...]] + } + + if (p === 1) { + return product.map(x => x[0]); // Avoid [[a], [b], [c], ...]] + } + + return product; +} + +/** + * Various utility functions + */ + + +/** + * Check if a value is a string (including a String object) + * @param {*} str - Value to check + * @returns {boolean} + */ +function isString (str) { + return type(str) === "string"; +} + +/** + * Determine the internal JavaScript [[Class]] of an object. + * @param {*} o - Value to check + * @returns {string} + */ +function type (o) { + let str = Object.prototype.toString.call(o); + + return (str.match(/^\[object\s+(.*?)\]$/)[1] || "").toLowerCase(); +} + +function serializeNumber (n, {precision, unit }) { + if (isNone(n)) { + return "none"; + } + + return toPrecision(n, precision) + (unit ?? ""); +} + +/** + * Check if a value corresponds to a none argument + * @param {*} n - Value to check + * @returns {boolean} + */ +function isNone (n) { + return Number.isNaN(n) || (n instanceof Number && n?.none); +} + +/** + * Replace none values with 0 + */ +function skipNone (n) { + return isNone(n) ? 0 : n; +} + +/** + * Round a number to a certain number of significant digits + * @param {number} n - The number to round + * @param {number} precision - Number of significant digits + */ +function toPrecision (n, precision) { + if (n === 0) { + return 0; + } + let integer = ~~n; + let digits = 0; + if (integer && precision) { + digits = ~~Math.log10(Math.abs(integer)) + 1; + } + const multiplier = 10.0 ** (precision - digits); + return Math.floor(n * multiplier + 0.5) / multiplier; +} + +const angleFactor = { + deg: 1, + grad: 0.9, + rad: 180 / Math.PI, + turn: 360, +}; + +/** +* Parse a CSS function, regardless of its name and arguments +* @param String str String to parse +* @return {{name, args, rawArgs}} +*/ +function parseFunction (str) { + if (!str) { + return; + } + + str = str.trim(); + + const isFunctionRegex = /^([a-z]+)\((.+?)\)$/i; + const isNumberRegex = /^-?[\d.]+$/; + const unitValueRegex = /%|deg|g?rad|turn$/; + const singleArgument = /\/?\s*(none|[-\w.]+(?:%|deg|g?rad|turn)?)/g; + let parts = str.match(isFunctionRegex); + + if (parts) { + // It is a function, parse args + let args = []; + parts[2].replace(singleArgument, ($0, rawArg) => { + let match = rawArg.match(unitValueRegex); + let arg = rawArg; + + if (match) { + let unit = match[0]; + // Drop unit from value + let unitlessArg = arg.slice(0, -unit.length); + + if (unit === "%") { + // Convert percentages to 0-1 numbers + arg = new Number(unitlessArg / 100); + arg.type = ""; + } + else { + // Multiply angle by appropriate factor for its unit + arg = new Number(unitlessArg * angleFactor[unit]); + arg.type = ""; + arg.unit = unit; + } + } + else if (isNumberRegex.test(arg)) { + // Convert numerical args to numbers + arg = new Number(arg); + arg.type = ""; + } + else if (arg === "none") { + arg = new Number(NaN); + arg.none = true; + } + + if ($0.startsWith("/")) { + // It's alpha + arg = arg instanceof Number ? arg : new Number(arg); + arg.alpha = true; + } + + if (typeof arg === "object" && arg instanceof Number) { + arg.raw = rawArg; + } + + args.push(arg); + }); + + return { + name: parts[1].toLowerCase(), + rawName: parts[1], + rawArgs: parts[2], + // An argument could be (as of css-color-4): + // a number, percentage, degrees (hue), ident (in color()) + args + }; + } +} + +function last (arr) { + return arr[arr.length - 1]; +} + +function interpolate (start, end, p) { + if (isNaN(start)) { + return end; + } + + if (isNaN(end)) { + return start; + } + + return start + (end - start) * p; +} + +function interpolateInv (start, end, value) { + return (value - start) / (end - start); +} + +function mapRange (from, to, value) { + return interpolate(to[0], to[1], interpolateInv(from[0], from[1], value)); +} + +function parseCoordGrammar (coordGrammars) { + return coordGrammars.map(coordGrammar => { + return coordGrammar.split("|").map(type => { + type = type.trim(); + let range = type.match(/^(<[a-z]+>)\[(-?[.\d]+),\s*(-?[.\d]+)\]?$/); + + if (range) { + let ret = new String(range[1]); + ret.range = [+range[2], +range[3]]; + return ret; + } + + return type; + }); + }); +} + +/** + * Clamp value between the minimum and maximum + * @param {number} min minimum value to return + * @param {number} val the value to return if it is between min and max + * @param {number} max maximum value to return + * @returns number + */ +function clamp (min, val, max) { + return Math.max(Math.min(max, val), min); +} + +/** + * Copy sign of one value to another. + * @param {number} - to number to copy sign to + * @param {number} - from number to copy sign from + * @returns number + */ +function copySign (to, from) { + return Math.sign(to) === Math.sign(from) ? to : -to; +} + +/** + * Perform pow on a signed number and copy sign to result + * @param {number} - base the base number + * @param {number} - exp the exponent + * @returns number + */ +function spow (base, exp) { + return copySign(Math.abs(base) ** exp, base); +} + +/** + * Perform a divide, but return zero if the numerator is zero + * @param {number} n - the numerator + * @param {number} d - the denominator + * @returns number + */ +function zdiv (n, d) { + return (d === 0) ? 0 : n / d; +} + +/** + * Perform a bisect on a sorted list and locate the insertion point for + * a value in arr to maintain sorted order. + * @param {number[]} arr - array of sorted numbers + * @param {number} value - value to find insertion point for + * @param {number} lo - used to specify a the low end of a subset of the list + * @param {number} hi - used to specify a the high end of a subset of the list + * @returns number + */ +function bisectLeft (arr, value, lo = 0, hi = arr.length) { + while (lo < hi) { + const mid = (lo + hi) >> 1; + if (arr[mid] < value) { + lo = mid + 1; + } + else { + hi = mid; + } + } + return lo; +} + +var util = /*#__PURE__*/Object.freeze({ + __proto__: null, + bisectLeft: bisectLeft, + clamp: clamp, + copySign: copySign, + interpolate: interpolate, + interpolateInv: interpolateInv, + isNone: isNone, + isString: isString, + last: last, + mapRange: mapRange, + multiplyMatrices: multiplyMatrices, + parseCoordGrammar: parseCoordGrammar, + parseFunction: parseFunction, + serializeNumber: serializeNumber, + skipNone: skipNone, + spow: spow, + toPrecision: toPrecision, + type: type, + zdiv: zdiv +}); + +/** + * A class for adding deep extensibility to any piece of JS code + */ +class Hooks { + add (name, callback, first) { + if (typeof arguments[0] != "string") { + // Multiple hooks + for (var name in arguments[0]) { + this.add(name, arguments[0][name], arguments[1]); + } + + return; + } + + (Array.isArray(name) ? name : [name]).forEach(function (name) { + this[name] = this[name] || []; + + if (callback) { + this[name][first ? "unshift" : "push"](callback); + } + }, this); + } + + run (name, env) { + this[name] = this[name] || []; + this[name].forEach(function (callback) { + callback.call(env && env.context ? env.context : env, env); + }); + } +} + +/** + * The instance of {@link Hooks} used throughout Color.js + */ +const hooks = new Hooks(); + +// Global defaults one may want to configure +var defaults = { + gamut_mapping: "css", + precision: 5, + deltaE: "76", // Default deltaE method +}; + +const WHITES = { + // for compatibility, the four-digit chromaticity-derived ones everyone else uses + D50: [0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585], + D65: [0.3127 / 0.3290, 1.00000, (1.0 - 0.3127 - 0.3290) / 0.3290], +}; + +function getWhite (name) { + if (Array.isArray(name)) { + return name; + } + + return WHITES[name]; +} + +// Adapt XYZ from white point W1 to W2 +function adapt$2 (W1, W2, XYZ, options = {}) { + W1 = getWhite(W1); + W2 = getWhite(W2); + + if (!W1 || !W2) { + throw new TypeError(`Missing white point to convert ${!W1 ? "from" : ""}${!W1 && !W2 ? "/" : ""}${!W2 ? "to" : ""}`); + } + + if (W1 === W2) { + // Same whitepoints, no conversion needed + return XYZ; + } + + let env = {W1, W2, XYZ, options}; + + hooks.run("chromatic-adaptation-start", env); + + if (!env.M) { + if (env.W1 === WHITES.D65 && env.W2 === WHITES.D50) { + env.M = [ + [ 1.0479297925449969, 0.022946870601609652, -0.05019226628920524 ], + [ 0.02962780877005599, 0.9904344267538799, -0.017073799063418826 ], + [ -0.009243040646204504, 0.015055191490298152, 0.7518742814281371 ] + ]; + } + else if (env.W1 === WHITES.D50 && env.W2 === WHITES.D65) { + + env.M = [ + [ 0.955473421488075, -0.02309845494876471, 0.06325924320057072 ], + [ -0.0283697093338637, 1.0099953980813041, 0.021041441191917323 ], + [ 0.012314014864481998, -0.020507649298898964, 1.330365926242124 ] + ]; + } + } + + hooks.run("chromatic-adaptation-end", env); + + if (env.M) { + return multiplyMatrices(env.M, env.XYZ); + } + else { + throw new TypeError("Only Bradford CAT with white points D50 and D65 supported for now."); + } +} + +const ε$7 = .000075; + +/** + * Class to represent a color space + */ +class ColorSpace { + constructor (options) { + this.id = options.id; + this.name = options.name; + this.base = options.base ? ColorSpace.get(options.base) : null; + this.aliases = options.aliases; + + if (this.base) { + this.fromBase = options.fromBase; + this.toBase = options.toBase; + } + + // Coordinate metadata + + let coords = options.coords ?? this.base.coords; + + for (let name in coords) { + if (!("name" in coords[name])) { + coords[name].name = name; + } + } + this.coords = coords; + + // White point + + let white = options.white ?? this.base.white ?? "D65"; + this.white = getWhite(white); + + // Sort out formats + + this.formats = options.formats ?? {}; + + for (let name in this.formats) { + let format = this.formats[name]; + format.type ||= "function"; + format.name ||= name; + } + + if (options.cssId && !this.formats.functions?.color) { + this.formats.color = { id: options.cssId }; + Object.defineProperty(this, "cssId", {value: options.cssId}); + } + else if (this.formats?.color && !this.formats?.color.id) { + this.formats.color.id = this.id; + } + + // Gamut space + + if (options.gamutSpace) { + // Gamut space explicitly specified + this.gamutSpace = options.gamutSpace === "self" ? this : ColorSpace.get(options.gamutSpace); + } + else { + // No gamut space specified, calculate a sensible default + if (this.isPolar) { + // Do not check gamut through polar coordinates + this.gamutSpace = this.base; + } + else { + this.gamutSpace = this; + } + } + + // Optimize inGamut for unbounded spaces + if (this.gamutSpace.isUnbounded) { + this.inGamut = (coords, options) => { + return true; + }; + } + + // Other stuff + this.referred = options.referred; + + // Compute ancestors and store them, since they will never change + Object.defineProperty(this, "path", { + value: getPath(this).reverse(), + writable: false, + enumerable: true, + configurable: true, + }); + + hooks.run("colorspace-init-end", this); + } + + inGamut (coords, {epsilon = ε$7} = {}) { + if (!this.equals(this.gamutSpace)) { + coords = this.to(this.gamutSpace, coords); + return this.gamutSpace.inGamut(coords, {epsilon}); + } + + let coordMeta = Object.values(this.coords); + + return coords.every((c, i) => { + let meta = coordMeta[i]; + + if (meta.type !== "angle" && meta.range) { + if (Number.isNaN(c)) { + // NaN is always in gamut + return true; + } + + let [min, max] = meta.range; + return (min === undefined || c >= min - epsilon) + && (max === undefined || c <= max + epsilon); + } + + return true; + }); + } + + get isUnbounded () { + return Object.values(this.coords).every(coord => !("range" in coord)); + } + + get cssId () { + return this.formats.functions?.color?.id || this.id; + } + + get isPolar () { + for (let id in this.coords) { + if (this.coords[id].type === "angle") { + return true; + } + } + + return false; + } + + getFormat (format) { + if (typeof format === "object") { + format = processFormat(format, this); + return format; + } + + let ret; + if (format === "default") { + // Get first format + ret = Object.values(this.formats)[0]; + } + else { + ret = this.formats[format]; + } + + if (ret) { + ret = processFormat(ret, this); + return ret; + } + + return null; + } + + /** + * Check if this color space is the same as another color space reference. + * Allows proxying color space objects and comparing color spaces with ids. + * @param {string | ColorSpace} space ColorSpace object or id to compare to + * @returns {boolean} + */ + equals (space) { + if (!space) { + return false; + } + + return this === space || this.id === space || this.id === space.id; + } + + to (space, coords) { + if (arguments.length === 1) { + [space, coords] = [space.space, space.coords]; + } + + space = ColorSpace.get(space); + + if (this.equals(space)) { + // Same space, no change needed + return coords; + } + + // Convert NaN to 0, which seems to be valid in every coordinate of every color space + coords = coords.map(c => Number.isNaN(c) ? 0 : c); + + // Find connection space = lowest common ancestor in the base tree + let myPath = this.path; + let otherPath = space.path; + + let connectionSpace, connectionSpaceIndex; + + for (let i = 0; i < myPath.length; i++) { + if (myPath[i].equals(otherPath[i])) { + connectionSpace = myPath[i]; + connectionSpaceIndex = i; + } + else { + break; + } + } + + if (!connectionSpace) { + // This should never happen + throw new Error(`Cannot convert between color spaces ${this} and ${space}: no connection space was found`); + } + + // Go up from current space to connection space + for (let i = myPath.length - 1; i > connectionSpaceIndex; i--) { + coords = myPath[i].toBase(coords); + } + + // Go down from connection space to target space + for (let i = connectionSpaceIndex + 1; i < otherPath.length; i++) { + coords = otherPath[i].fromBase(coords); + } + + return coords; + } + + from (space, coords) { + if (arguments.length === 1) { + [space, coords] = [space.space, space.coords]; + } + + space = ColorSpace.get(space); + + return space.to(this, coords); + } + + toString () { + return `${this.name} (${this.id})`; + } + + getMinCoords () { + let ret = []; + + for (let id in this.coords) { + let meta = this.coords[id]; + let range = meta.range || meta.refRange; + ret.push(range?.min ?? 0); + } + + return ret; + } + + static registry = {}; + + // Returns array of unique color spaces + static get all () { + return [...new Set(Object.values(ColorSpace.registry))]; + } + + static register (id, space) { + if (arguments.length === 1) { + space = arguments[0]; + id = space.id; + } + + space = this.get(space); + + if (this.registry[id] && this.registry[id] !== space) { + throw new Error(`Duplicate color space registration: '${id}'`); + } + this.registry[id] = space; + + // Register aliases when called without an explicit ID. + if (arguments.length === 1 && space.aliases) { + for (let alias of space.aliases) { + this.register(alias, space); + } + } + + return space; + } + + /** + * Lookup ColorSpace object by name + * @param {ColorSpace | string} name + */ + static get (space, ...alternatives) { + if (!space || space instanceof ColorSpace) { + return space; + } + + let argType = type(space); + + if (argType === "string") { + // It's a color space id + let ret = ColorSpace.registry[space.toLowerCase()]; + + if (!ret) { + throw new TypeError(`No color space found with id = "${space}"`); + } + + return ret; + } + + if (alternatives.length) { + return ColorSpace.get(...alternatives); + } + + throw new TypeError(`${space} is not a valid color space`); + } + + /** + * Get metadata about a coordinate of a color space + * + * @static + * @param {Array | string} ref + * @param {ColorSpace | string} [workingSpace] + * @return {Object} + */ + static resolveCoord (ref, workingSpace) { + let coordType = type(ref); + let space, coord; + + if (coordType === "string") { + if (ref.includes(".")) { + // Absolute coordinate + [space, coord] = ref.split("."); + } + else { + // Relative coordinate + [space, coord] = [, ref]; + } + } + else if (Array.isArray(ref)) { + [space, coord] = ref; + } + else { + // Object + space = ref.space; + coord = ref.coordId; + } + + space = ColorSpace.get(space); + + if (!space) { + space = workingSpace; + } + + if (!space) { + throw new TypeError(`Cannot resolve coordinate reference ${ref}: No color space specified and relative references are not allowed here`); + } + + coordType = type(coord); + + if (coordType === "number" || coordType === "string" && coord >= 0) { + // Resolve numerical coord + let meta = Object.entries(space.coords)[coord]; + + if (meta) { + return {space, id: meta[0], index: coord, ...meta[1]}; + } + } + + space = ColorSpace.get(space); + + let normalizedCoord = coord.toLowerCase(); + + let i = 0; + for (let id in space.coords) { + let meta = space.coords[id]; + + if (id.toLowerCase() === normalizedCoord || meta.name?.toLowerCase() === normalizedCoord) { + return {space, id, index: i, ...meta}; + } + + i++; + } + + throw new TypeError(`No "${coord}" coordinate found in ${space.name}. Its coordinates are: ${Object.keys(space.coords).join(", ")}`); + } + + static DEFAULT_FORMAT = { + type: "functions", + name: "color", + }; +} + +function getPath (space) { + let ret = [space]; + + for (let s = space; s = s.base;) { + ret.push(s); + } + + return ret; +} + +function processFormat (format, {coords} = {}) { + if (format.coords && !format.coordGrammar) { + format.type ||= "function"; + format.name ||= "color"; + + // Format has not been processed + format.coordGrammar = parseCoordGrammar(format.coords); + + let coordFormats = Object.entries(coords).map(([id, coordMeta], i) => { + // Preferred format for each coord is the first one + let outputType = format.coordGrammar[i][0]; + + let fromRange = coordMeta.range || coordMeta.refRange; + let toRange = outputType.range, suffix = ""; + + // Non-strict equals intentional since outputType could be a string object + if (outputType == "") { + toRange = [0, 100]; + suffix = "%"; + } + else if (outputType == "") { + suffix = "deg"; + } + + return {fromRange, toRange, suffix}; + }); + + format.serializeCoords = (coords, precision) => { + return coords.map((c, i) => { + let {fromRange, toRange, suffix} = coordFormats[i]; + + if (fromRange && toRange) { + c = mapRange(fromRange, toRange, c); + } + + c = serializeNumber(c, {precision, unit: suffix}); + + return c; + }); + }; + } + + return format; +} + +var xyz_d65 = new ColorSpace({ + id: "xyz-d65", + name: "XYZ D65", + coords: { + x: {name: "X"}, + y: {name: "Y"}, + z: {name: "Z"}, + }, + white: "D65", + formats: { + color: { + ids: ["xyz-d65", "xyz"], + } + }, + aliases: ["xyz"], +}); + +/** + * Convenience class for RGB color spaces + * @extends {ColorSpace} + */ +class RGBColorSpace extends ColorSpace { + /** + * Creates a new RGB ColorSpace. + * If coords are not specified, they will use the default RGB coords. + * Instead of `fromBase()` and `toBase()` functions, + * you can specify to/from XYZ matrices and have `toBase()` and `fromBase()` automatically generated. + * @param {*} options - Same options as {@link ColorSpace} plus: + * @param {number[][]} options.toXYZ_M - Matrix to convert to XYZ + * @param {number[][]} options.fromXYZ_M - Matrix to convert from XYZ + */ + constructor (options) { + if (!options.coords) { + options.coords = { + r: { + range: [0, 1], + name: "Red" + }, + g: { + range: [0, 1], + name: "Green" + }, + b: { + range: [0, 1], + name: "Blue" + } + }; + } + + if (!options.base) { + options.base = xyz_d65; + } + + if (options.toXYZ_M && options.fromXYZ_M) { + options.toBase ??= rgb => { + let xyz = multiplyMatrices(options.toXYZ_M, rgb); + + if (this.white !== this.base.white) { + // Perform chromatic adaptation + xyz = adapt$2(this.white, this.base.white, xyz); + } + + return xyz; + }; + + options.fromBase ??= xyz => { + xyz = adapt$2(this.base.white, this.white, xyz); + return multiplyMatrices(options.fromXYZ_M, xyz); + }; + } + + options.referred ??= "display"; + + super(options); + } +} + +const noneTypes = new Set(["", "", ""]); + +/** + * Validates the coordinates of a color against a format's coord grammar and + * maps the coordinates to the range or refRange of the coordinates. + * @param {ColorSpace} space - Colorspace the coords are in + * @param {object} format - the format object to validate against + * @param {string} name - the name of the color function. e.g. "oklab" or "color" + * @returns {object[]} - an array of type metadata for each coordinate + */ +function coerceCoords (space, format, name, coords) { + let types = Object.entries(space.coords).map(([id, coordMeta], i) => { + let coordGrammar = format.coordGrammar[i]; + let arg = coords[i]; + let providedType = arg?.type; + + // Find grammar alternative that matches the provided type + // Non-strict equals is intentional because we are comparing w/ string objects + let type; + if (arg.none) { + type = coordGrammar.find(c => noneTypes.has(c)); + } + else { + type = coordGrammar.find(c => c == providedType); + } + + // Check that each coord conforms to its grammar + if (!type) { + // Type does not exist in the grammar, throw + let coordName = coordMeta.name || id; + throw new TypeError(`${providedType ?? arg.raw} not allowed for ${coordName} in ${name}()`); + } + + let fromRange = type.range; + + if (providedType === "") { + fromRange ||= [0, 1]; + } + + let toRange = coordMeta.range || coordMeta.refRange; + + if (fromRange && toRange) { + coords[i] = mapRange(fromRange, toRange, coords[i]); + } + + return type; + }); + + return types; +} + + +/** + * Convert a CSS Color string to a color object + * @param {string} str + * @param {object} [options] + * @param {object} [options.meta] - Object for additional information about the parsing + * @returns {Color} + */ +function parse (str, {meta} = {}) { + let env = {"str": String(str)?.trim()}; + hooks.run("parse-start", env); + + if (env.color) { + return env.color; + } + + env.parsed = parseFunction(env.str); + + if (env.parsed) { + // Is a functional syntax + let name = env.parsed.name; + + if (name === "color") { + // color() function + let id = env.parsed.args.shift(); + let undashedId = id.startsWith("--") ? id.substring(2) : id; + let ids = [id, undashedId]; + let alpha = env.parsed.rawArgs.indexOf("/") > 0 ? env.parsed.args.pop() : 1; + + for (let space of ColorSpace.all) { + let colorSpec = space.getFormat("color"); + + if (colorSpec) { + if (ids.includes(colorSpec.id) || colorSpec.ids?.filter((specId) => ids.includes(specId)).length) { + // From https://drafts.csswg.org/css-color-4/#color-function + // If more s or s are provided than parameters that the colorspace takes, the excess s at the end are ignored. + // If less s or s are provided than parameters that the colorspace takes, the missing parameters default to 0. (This is particularly convenient for multichannel printers where the additional inks are spot colors or varnishes that most colors on the page won’t use.) + const coords = Object.keys(space.coords).map((_, i) => env.parsed.args[i] || 0); + + let types; + + if (colorSpec.coordGrammar) { + types = coerceCoords(space, colorSpec, "color", coords); + } + + if (meta) { + Object.assign(meta, {formatId: "color", types}); + } + + return {spaceId: space.id, coords, alpha}; + } + } + } + + // Not found + let didYouMean = ""; + let registryId = id in ColorSpace.registry ? id : undashedId; + if (registryId in ColorSpace.registry) { + // Used color space id instead of color() id, these are often different + let cssId = ColorSpace.registry[registryId].formats?.functions?.color?.id; + + if (cssId) { + didYouMean = `Did you mean color(${cssId})?`; + } + } + + throw new TypeError(`Cannot parse color(${id}). ` + (didYouMean || "Missing a plugin?")); + } + else { + for (let space of ColorSpace.all) { + // color space specific function + let format = space.getFormat(name); + if (format && format.type === "function") { + let alpha = 1; + + if (format.lastAlpha || last(env.parsed.args).alpha) { + alpha = env.parsed.args.pop(); + } + + let coords = env.parsed.args; + + let types; + + if (format.coordGrammar) { + types = coerceCoords(space, format, name, coords); + } + + if (meta) { + Object.assign(meta, {formatId: format.name, types}); + } + + return { + spaceId: space.id, + coords, alpha + }; + } + } + } + } + else { + // Custom, colorspace-specific format + for (let space of ColorSpace.all) { + for (let formatId in space.formats) { + let format = space.formats[formatId]; + + if (format.type !== "custom") { + continue; + } + + if (format.test && !format.test(env.str)) { + continue; + } + + let color = format.parse(env.str); + + if (color) { + color.alpha ??= 1; + + if (meta) { + meta.formatId = formatId; + } + + return color; + } + } + } + } + + + // If we're here, we couldn't parse + throw new TypeError(`Could not parse ${str} as a color. Missing a plugin?`); +} + +/** + * Resolves a color reference (object or string) to a plain color object + * @param {Color | {space, coords, alpha} | string} color + * @returns {{space, coords, alpha}} + */ +function getColor (color) { + if (!color) { + throw new TypeError("Empty color reference"); + } + + if (isString(color)) { + color = parse(color); + } + + // Object fixup + let space = color.space || color.spaceId; + + if (!(space instanceof ColorSpace)) { + // Convert string id to color space object + color.space = ColorSpace.get(space); + } + + if (color.alpha === undefined) { + color.alpha = 1; + } + + return color; +} + +/** + * Get the coordinates of a color in any color space + * @param {Color} color + * @param {string | ColorSpace} [space = color.space] The color space to convert to. Defaults to the color's current space + * @returns {number[]} The color coordinates in the given color space + */ +function getAll (color, space) { + if (!space || color.space.equals(space)) { + // No conversion needed + return color.coords.slice(); + } + + space = ColorSpace.get(space); + return space.from(color); +} + +function get (color, prop) { + let {space, index} = ColorSpace.resolveCoord(prop, color.space); + let coords = getAll(color, space); + return coords[index]; +} + +function setAll (color, space, coords) { + space = ColorSpace.get(space); + color.coords = space.to(color.space, coords); + return color; +} + +// Set properties and return current instance +function set (color, prop, value) { + color = getColor(color); + + if (arguments.length === 2 && type(arguments[1]) === "object") { + // Argument is an object literal + let object = arguments[1]; + for (let p in object) { + set(color, p, object[p]); + } + } + else { + if (typeof value === "function") { + value = value(get(color, prop)); + } + + let {space, index} = ColorSpace.resolveCoord(prop, color.space); + let coords = getAll(color, space); + coords[index] = value; + setAll(color, space, coords); + } + + return color; +} + +var XYZ_D50 = new ColorSpace({ + id: "xyz-d50", + name: "XYZ D50", + white: "D50", + base: xyz_d65, + fromBase: coords => adapt$2(xyz_d65.white, "D50", coords), + toBase: coords => adapt$2("D50", xyz_d65.white, coords), + formats: { + color: {} + }, +}); + +// κ * ε = 2^3 = 8 +const ε$6 = 216 / 24389; // 6^3/29^3 == (24/116)^3 +const ε3$1 = 24 / 116; +const κ$4 = 24389 / 27; // 29^3/3^3 + +let white$4 = WHITES.D50; + +var lab = new ColorSpace({ + id: "lab", + name: "Lab", + coords: { + l: { + refRange: [0, 100], + name: "Lightness" + }, + a: { + refRange: [-125, 125] + }, + b: { + refRange: [-125, 125] + } + }, + + // Assuming XYZ is relative to D50, convert to CIE Lab + // from CIE standard, which now defines these as a rational fraction + white: white$4, + + base: XYZ_D50, + // Convert D50-adapted XYX to Lab + // CIE 15.3:2004 section 8.2.1.1 + fromBase (XYZ) { + // compute xyz, which is XYZ scaled relative to reference white + let xyz = XYZ.map((value, i) => value / white$4[i]); + + // now compute f + let f = xyz.map(value => value > ε$6 ? Math.cbrt(value) : (κ$4 * value + 16) / 116); + + return [ + (116 * f[1]) - 16, // L + 500 * (f[0] - f[1]), // a + 200 * (f[1] - f[2]) // b + ]; + }, + // Convert Lab to D50-adapted XYZ + // Same result as CIE 15.3:2004 Appendix D although the derivation is different + // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + toBase (Lab) { + // compute f, starting with the luminance-related term + let f = []; + f[1] = (Lab[0] + 16) / 116; + f[0] = Lab[1] / 500 + f[1]; + f[2] = f[1] - Lab[2] / 200; + + // compute xyz + let xyz = [ + f[0] > ε3$1 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ$4, + Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ$4, + f[2] > ε3$1 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ$4 + ]; + + // Compute XYZ by scaling xyz by reference white + return xyz.map((value, i) => value * white$4[i]); + }, + + formats: { + "lab": { + coords: [" | ", " | [-1,1]", " | [-1,1]"], + } + } +}); + +function constrain (angle) { + return ((angle % 360) + 360) % 360; +} + +function adjust (arc, angles) { + if (arc === "raw") { + return angles; + } + + let [a1, a2] = angles.map(constrain); + + let angleDiff = a2 - a1; + + if (arc === "increasing") { + if (angleDiff < 0) { + a2 += 360; + } + } + else if (arc === "decreasing") { + if (angleDiff > 0) { + a1 += 360; + } + } + else if (arc === "longer") { + if (-180 < angleDiff && angleDiff < 180) { + if (angleDiff > 0) { + a1 += 360; + } + else { + a2 += 360; + } + } + } + else if (arc === "shorter") { + if (angleDiff > 180) { + a1 += 360; + } + else if (angleDiff < -180) { + a2 += 360; + } + } + + return [a1, a2]; +} + +var lch = new ColorSpace({ + id: "lch", + name: "LCH", + coords: { + l: { + refRange: [0, 100], + name: "Lightness" + }, + c: { + refRange: [0, 150], + name: "Chroma" + }, + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + } + }, + + base: lab, + fromBase (Lab) { + // Convert to polar form + let [L, a, b] = Lab; + let hue; + const ε = 0.02; + + if (Math.abs(a) < ε && Math.abs(b) < ε) { + hue = NaN; + } + else { + hue = Math.atan2(b, a) * 180 / Math.PI; + } + + return [ + L, // L is still L + Math.sqrt(a ** 2 + b ** 2), // Chroma + constrain(hue) // Hue, in degrees [0 to 360) + ]; + }, + toBase (LCH) { + // Convert from polar form + let [Lightness, Chroma, Hue] = LCH; + // Clamp any negative Chroma + if (Chroma < 0) { + Chroma = 0; + } + // Deal with NaN Hue + if (isNaN(Hue)) { + Hue = 0; + } + return [ + Lightness, // L is still L + Chroma * Math.cos(Hue * Math.PI / 180), // a + Chroma * Math.sin(Hue * Math.PI / 180) // b + ]; + }, + + formats: { + "lch": { + coords: [" | ", " | ", " | "], + } + } +}); + +// deltaE2000 is a statistically significant improvement +// and is recommended by the CIE and Idealliance +// especially for color differences less than 10 deltaE76 +// but is wicked complicated +// and many implementations have small errors! +// DeltaE2000 is also discontinuous; in case this +// matters to you, use deltaECMC instead. + +const Gfactor = 25 ** 7; +const π$1 = Math.PI; +const r2d = 180 / π$1; +const d2r$1 = π$1 / 180; + +function pow7 (x) { + // Faster than x ** 7 or Math.pow(x, 7) + + const x2 = x * x; + const x7 = x2 * x2 * x2 * x; + + return x7; +} + +function deltaE2000 (color, sample, {kL = 1, kC = 1, kH = 1} = {}) { + // Given this color as the reference + // and the function parameter as the sample, + // calculate deltaE 2000. + + // This implementation assumes the parametric + // weighting factors kL, kC and kH + // for the influence of viewing conditions + // are all 1, as sadly seems typical. + // kL should be increased for lightness texture or noise + // and kC increased for chroma noise + + let [L1, a1, b1] = lab.from(color); + let C1 = lch.from(lab, [L1, a1, b1])[1]; + let [L2, a2, b2] = lab.from(sample); + let C2 = lch.from(lab, [L2, a2, b2])[1]; + + // Check for negative Chroma, + // which might happen through + // direct user input of LCH values + + if (C1 < 0) { + C1 = 0; + } + if (C2 < 0) { + C2 = 0; + } + + let Cbar = (C1 + C2) / 2; // mean Chroma + + // calculate a-axis asymmetry factor from mean Chroma + // this turns JND ellipses for near-neutral colors back into circles + let C7 = pow7(Cbar); + + let G = 0.5 * (1 - Math.sqrt(C7 / (C7 + Gfactor))); + + // scale a axes by asymmetry factor + // this by the way is why there is no Lab2000 colorspace + let adash1 = (1 + G) * a1; + let adash2 = (1 + G) * a2; + + // calculate new Chroma from scaled a and original b axes + let Cdash1 = Math.sqrt(adash1 ** 2 + b1 ** 2); + let Cdash2 = Math.sqrt(adash2 ** 2 + b2 ** 2); + + // calculate new hues, with zero hue for true neutrals + // and in degrees, not radians + + let h1 = (adash1 === 0 && b1 === 0) ? 0 : Math.atan2(b1, adash1); + let h2 = (adash2 === 0 && b2 === 0) ? 0 : Math.atan2(b2, adash2); + + if (h1 < 0) { + h1 += 2 * π$1; + } + if (h2 < 0) { + h2 += 2 * π$1; + } + + h1 *= r2d; + h2 *= r2d; + + // Lightness and Chroma differences; sign matters + let ΔL = L2 - L1; + let ΔC = Cdash2 - Cdash1; + + // Hue difference, getting the sign correct + let hdiff = h2 - h1; + let hsum = h1 + h2; + let habs = Math.abs(hdiff); + let Δh; + + if (Cdash1 * Cdash2 === 0) { + Δh = 0; + } + else if (habs <= 180) { + Δh = hdiff; + } + else if (hdiff > 180) { + Δh = hdiff - 360; + } + else if (hdiff < -180) { + Δh = hdiff + 360; + } + else { + console.log("the unthinkable has happened"); + } + + // weighted Hue difference, more for larger Chroma + let ΔH = 2 * Math.sqrt(Cdash2 * Cdash1) * Math.sin(Δh * d2r$1 / 2); + + // calculate mean Lightness and Chroma + let Ldash = (L1 + L2) / 2; + let Cdash = (Cdash1 + Cdash2) / 2; + let Cdash7 = pow7(Cdash); + + // Compensate for non-linearity in the blue region of Lab. + // Four possibilities for hue weighting factor, + // depending on the angles, to get the correct sign + let hdash; + if (Cdash1 * Cdash2 === 0) { + hdash = hsum; // which should be zero + } + else if (habs <= 180) { + hdash = hsum / 2; + } + else if (hsum < 360) { + hdash = (hsum + 360) / 2; + } + else { + hdash = (hsum - 360) / 2; + } + + // positional corrections to the lack of uniformity of CIELAB + // These are all trying to make JND ellipsoids more like spheres + + // SL Lightness crispening factor + // a background with L=50 is assumed + let lsq = (Ldash - 50) ** 2; + let SL = 1 + ((0.015 * lsq) / Math.sqrt(20 + lsq)); + + // SC Chroma factor, similar to those in CMC and deltaE 94 formulae + let SC = 1 + 0.045 * Cdash; + + // Cross term T for blue non-linearity + let T = 1; + T -= (0.17 * Math.cos(( hdash - 30) * d2r$1)); + T += (0.24 * Math.cos( 2 * hdash * d2r$1)); + T += (0.32 * Math.cos(((3 * hdash) + 6) * d2r$1)); + T -= (0.20 * Math.cos(((4 * hdash) - 63) * d2r$1)); + + // SH Hue factor depends on Chroma, + // as well as adjusted hue angle like deltaE94. + let SH = 1 + 0.015 * Cdash * T; + + // RT Hue rotation term compensates for rotation of JND ellipses + // and Munsell constant hue lines + // in the medium-high Chroma blue region + // (Hue 225 to 315) + let Δθ = 30 * Math.exp(-1 * (((hdash - 275) / 25) ** 2)); + let RC = 2 * Math.sqrt(Cdash7 / (Cdash7 + Gfactor)); + let RT = -1 * Math.sin(2 * Δθ * d2r$1) * RC; + + // Finally calculate the deltaE, term by term as root sume of squares + let dE = (ΔL / (kL * SL)) ** 2; + dE += (ΔC / (kC * SC)) ** 2; + dE += (ΔH / (kH * SH)) ** 2; + dE += RT * (ΔC / (kC * SC)) * (ΔH / (kH * SH)); + return Math.sqrt(dE); + // Yay!!! +} + +// Recalculated for consistent reference white +// see https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484 +const XYZtoLMS_M$1 = [ + [ 0.8190224379967030, 0.3619062600528904, -0.1288737815209879 ], + [ 0.0329836539323885, 0.9292868615863434, 0.0361446663506424 ], + [ 0.0481771893596242, 0.2642395317527308, 0.6335478284694309 ] +]; +// inverse of XYZtoLMS_M +const LMStoXYZ_M$1 = [ + [ 1.2268798758459243, -0.5578149944602171, 0.2813910456659647 ], + [ -0.0405757452148008, 1.1122868032803170, -0.0717110580655164 ], + [ -0.0763729366746601, -0.4214933324022432, 1.5869240198367816 ] +]; +const LMStoLab_M = [ + [ 0.2104542683093140, 0.7936177747023054, -0.0040720430116193 ], + [ 1.9779985324311684, -2.4285922420485799, 0.4505937096174110 ], + [ 0.0259040424655478, 0.7827717124575296, -0.8086757549230774 ] +]; +// LMStoIab_M inverted +const LabtoLMS_M = [ + [ 1.0000000000000000, 0.3963377773761749, 0.2158037573099136 ], + [ 1.0000000000000000, -0.1055613458156586, -0.0638541728258133 ], + [ 1.0000000000000000, -0.0894841775298119, -1.2914855480194092 ] +]; + +var OKLab = new ColorSpace({ + id: "oklab", + name: "Oklab", + coords: { + l: { + refRange: [0, 1], + name: "Lightness" + }, + a: { + refRange: [-0.4, 0.4] + }, + b: { + refRange: [-0.4, 0.4] + } + }, + + // Note that XYZ is relative to D65 + white: "D65", + base: xyz_d65, + fromBase (XYZ) { + // move to LMS cone domain + let LMS = multiplyMatrices(XYZtoLMS_M$1, XYZ); + + // non-linearity + let LMSg = LMS.map(val => Math.cbrt(val)); + + return multiplyMatrices(LMStoLab_M, LMSg); + + }, + toBase (OKLab) { + // move to LMS cone domain + let LMSg = multiplyMatrices(LabtoLMS_M, OKLab); + + // restore linearity + let LMS = LMSg.map(val => val ** 3); + + return multiplyMatrices(LMStoXYZ_M$1, LMS); + }, + + formats: { + "oklab": { + coords: [" | ", " | [-1,1]", " | [-1,1]"], + } + } +}); + +// More accurate color-difference formulae +// than the simple 1976 Euclidean distance in CIE Lab + + +function deltaEOK (color, sample) { + // Given this color as the reference + // and a sample, + // calculate deltaEOK, term by term as root sum of squares + let [L1, a1, b1] = OKLab.from(color); + let [L2, a2, b2] = OKLab.from(sample); + let ΔL = L1 - L2; + let Δa = a1 - a2; + let Δb = b1 - b2; + return Math.sqrt(ΔL ** 2 + Δa ** 2 + Δb ** 2); +} + +const ε$5 = .000075; + +/** + * Check if a color is in gamut of either its own or another color space + * @return {Boolean} Is the color in gamut? + */ +function inGamut (color, space = color.space, {epsilon = ε$5} = {}) { + color = getColor(color); + space = ColorSpace.get(space); + let coords = color.coords; + + if (space !== color.space) { + coords = space.from(color); + } + + return space.inGamut(coords, {epsilon}); +} + +function clone (color) { + return { + space: color.space, + coords: color.coords.slice(), + alpha: color.alpha + }; +} + +/** + * Euclidean distance of colors in an arbitrary color space + */ +function distance (color1, color2, space = "lab") { + space = ColorSpace.get(space); + + let coords1 = space.from(color1); + let coords2 = space.from(color2); + + return Math.sqrt(coords1.reduce((acc, c1, i) => { + let c2 = coords2[i]; + if (isNaN(c1) || isNaN(c2)) { + return acc; + } + + return acc + (c2 - c1) ** 2; + }, 0)); +} + +function deltaE76 (color, sample) { + return distance(color, sample, "lab"); +} + +// More accurate color-difference formulae +// than the simple 1976 Euclidean distance in Lab + +// CMC by the Color Measurement Committee of the +// Bradford Society of Dyeists and Colorsts, 1994. +// Uses LCH rather than Lab, +// with different weights for L, C and H differences +// A nice increase in accuracy for modest increase in complexity +const π = Math.PI; +const d2r = π / 180; + +function deltaECMC (color, sample, {l = 2, c = 1} = {}) { + // Given this color as the reference + // and a sample, + // calculate deltaE CMC. + + // This implementation assumes the parametric + // weighting factors l:c are 2:1 + // which is typical for non-textile uses. + + let [L1, a1, b1] = lab.from(color); + let [, C1, H1] = lch.from(lab, [L1, a1, b1]); + let [L2, a2, b2] = lab.from(sample); + let C2 = lch.from(lab, [L2, a2, b2])[1]; + + // let [L1, a1, b1] = color.getAll(lab); + // let C1 = color.get("lch.c"); + // let H1 = color.get("lch.h"); + // let [L2, a2, b2] = sample.getAll(lab); + // let C2 = sample.get("lch.c"); + + // Check for negative Chroma, + // which might happen through + // direct user input of LCH values + + if (C1 < 0) { + C1 = 0; + } + if (C2 < 0) { + C2 = 0; + } + + // we don't need H2 as ΔH is calculated from Δa, Δb and ΔC + + // Lightness and Chroma differences + // These are (color - sample), unlike deltaE2000 + let ΔL = L1 - L2; + let ΔC = C1 - C2; + + let Δa = a1 - a2; + let Δb = b1 - b2; + + // weighted Hue difference, less for larger Chroma difference + + let H2 = (Δa ** 2) + (Δb ** 2) - (ΔC ** 2); + // due to roundoff error it is possible that, for zero a and b, + // ΔC > Δa + Δb is 0, resulting in attempting + // to take the square root of a negative number + + // trying instead the equation from Industrial Color Physics + // By Georg A. Klein + + // let ΔH = ((a1 * b2) - (a2 * b1)) / Math.sqrt(0.5 * ((C2 * C1) + (a2 * a1) + (b2 * b1))); + // console.log({ΔH}); + // This gives the same result to 12 decimal places + // except it sometimes NaNs when trying to root a negative number + + // let ΔH = Math.sqrt(H2); we never actually use the root, it gets squared again!! + + // positional corrections to the lack of uniformity of CIELAB + // These are all trying to make JND ellipsoids more like spheres + + // SL Lightness crispening factor, depends entirely on L1 not L2 + let SL = 0.511; // linear portion of the Y to L transfer function + if (L1 >= 16) { // cubic portion + SL = (0.040975 * L1) / (1 + 0.01765 * L1); + } + + // SC Chroma factor + let SC = ((0.0638 * C1) / (1 + 0.0131 * C1)) + 0.638; + + // Cross term T for blue non-linearity + let T; + if (Number.isNaN(H1)) { + H1 = 0; + } + + if (H1 >= 164 && H1 <= 345) { + T = 0.56 + Math.abs(0.2 * Math.cos((H1 + 168) * d2r)); + } + else { + T = 0.36 + Math.abs(0.4 * Math.cos((H1 + 35) * d2r)); + } + // console.log({T}); + + // SH Hue factor also depends on C1, + let C4 = Math.pow(C1, 4); + let F = Math.sqrt(C4 / (C4 + 1900)); + let SH = SC * ((F * T) + 1 - F); + + // Finally calculate the deltaE, term by term as root sume of squares + let dE = (ΔL / (l * SL)) ** 2; + dE += (ΔC / (c * SC)) ** 2; + dE += (H2 / (SH ** 2)); + // dE += (ΔH / SH) ** 2; + return Math.sqrt(dE); + // Yay!!! +} + +const Yw$1 = 203; // absolute luminance of media white + +var XYZ_Abs_D65 = new ColorSpace({ +// Absolute CIE XYZ, with a D65 whitepoint, +// as used in most HDR colorspaces as a starting point. +// SDR spaces are converted per BT.2048 +// so that diffuse, media white is 203 cd/m² + id: "xyz-abs-d65", + name: "Absolute XYZ D65", + coords: { + x: { + refRange: [0, 9504.7], + name: "Xa", + }, + y: { + refRange: [0, 10000], + name: "Ya", + }, + z: { + refRange: [0, 10888.3], + name: "Za", + } + }, + + base: xyz_d65, + fromBase (XYZ) { + // Make XYZ absolute, not relative to media white + // Maximum luminance in PQ is 10,000 cd/m² + // Relative XYZ has Y=1 for media white + return XYZ.map (v => Math.max(v * Yw$1, 0)); + }, + toBase (AbsXYZ) { + // Convert to media-white relative XYZ + return AbsXYZ.map(v => Math.max(v / Yw$1, 0)); + } +}); + +const b$1 = 1.15; +const g = 0.66; +const n$1 = 2610 / (2 ** 14); +const ninv$1 = (2 ** 14) / 2610; +const c1$2 = 3424 / (2 ** 12); +const c2$2 = 2413 / (2 ** 7); +const c3$2 = 2392 / (2 ** 7); +const p = 1.7 * 2523 / (2 ** 5); +const pinv = (2 ** 5) / (1.7 * 2523); +const d = -0.56; +const d0 = 1.6295499532821566E-11; + +const XYZtoCone_M = [ + [ 0.41478972, 0.579999, 0.0146480 ], + [ -0.2015100, 1.120649, 0.0531008 ], + [ -0.0166008, 0.264800, 0.6684799 ] +]; +// XYZtoCone_M inverted +const ConetoXYZ_M = [ + [ 1.9242264357876067, -1.0047923125953657, 0.037651404030618 ], + [ 0.35031676209499907, 0.7264811939316552, -0.06538442294808501 ], + [ -0.09098281098284752, -0.3127282905230739, 1.5227665613052603 ] +]; +const ConetoIab_M = [ + [ 0.5, 0.5, 0 ], + [ 3.524000, -4.066708, 0.542708 ], + [ 0.199076, 1.096799, -1.295875 ] +]; +// ConetoIab_M inverted +const IabtoCone_M = [ + [ 1, 0.1386050432715393, 0.05804731615611886 ], + [ 0.9999999999999999, -0.1386050432715393, -0.05804731615611886 ], + [ 0.9999999999999998, -0.09601924202631895, -0.8118918960560388 ] +]; + +var Jzazbz = new ColorSpace({ + id: "jzazbz", + name: "Jzazbz", + coords: { + jz: { + refRange: [0, 1], + name: "Jz", + }, + az: { + refRange: [-0.5, 0.5], + }, + bz: { + refRange: [-0.5, 0.5], + } + }, + + base: XYZ_Abs_D65, + fromBase (XYZ) { + // First make XYZ absolute, not relative to media white + // Maximum luminance in PQ is 10,000 cd/m² + // Relative XYZ has Y=1 for media white + // BT.2048 says media white Y=203 at PQ 58 + + let [ Xa, Ya, Za ] = XYZ; + + // modify X and Y + let Xm = (b$1 * Xa) - ((b$1 - 1) * Za); + let Ym = (g * Ya) - ((g - 1) * Xa); + + // move to LMS cone domain + let LMS = multiplyMatrices(XYZtoCone_M, [ Xm, Ym, Za ]); + + // PQ-encode LMS + let PQLMS = LMS.map (function (val) { + let num = c1$2 + (c2$2 * ((val / 10000) ** n$1)); + let denom = 1 + (c3$2 * ((val / 10000) ** n$1)); + + return (num / denom) ** p; + }); + + // almost there, calculate Iz az bz + let [ Iz, az, bz] = multiplyMatrices(ConetoIab_M, PQLMS); + // console.log({Iz, az, bz}); + + let Jz = ((1 + d) * Iz) / (1 + (d * Iz)) - d0; + return [Jz, az, bz]; + }, + toBase (Jzazbz) { + let [Jz, az, bz] = Jzazbz; + let Iz = (Jz + d0) / (1 + d - d * (Jz + d0)); + + // bring into LMS cone domain + let PQLMS = multiplyMatrices(IabtoCone_M, [ Iz, az, bz ]); + + // convert from PQ-coded to linear-light + let LMS = PQLMS.map(function (val) { + let num = (c1$2 - (val ** pinv)); + let denom = (c3$2 * (val ** pinv)) - c2$2; + let x = 10000 * ((num / denom) ** ninv$1); + + return (x); // luminance relative to diffuse white, [0, 70 or so]. + }); + + // modified abs XYZ + let [ Xm, Ym, Za ] = multiplyMatrices(ConetoXYZ_M, LMS); + + // restore standard D50 relative XYZ, relative to media white + let Xa = (Xm + ((b$1 - 1) * Za)) / b$1; + let Ya = (Ym + ((g - 1) * Xa)) / g; + return [ Xa, Ya, Za ]; + }, + + formats: { + // https://drafts.csswg.org/css-color-hdr/#Jzazbz + "color": { + coords: [" | ", " | [-1,1]", " | [-1,1]"], + } + } +}); + +var jzczhz = new ColorSpace({ + id: "jzczhz", + name: "JzCzHz", + coords: { + jz: { + refRange: [0, 1], + name: "Jz", + }, + cz: { + refRange: [0, 1], + name: "Chroma", + }, + hz: { + refRange: [0, 360], + type: "angle", + name: "Hue", + } + }, + + base: Jzazbz, + fromBase (jzazbz) { + // Convert to polar form + let [Jz, az, bz] = jzazbz; + let hue; + const ε = 0.0002; // chromatic components much smaller than a,b + + if (Math.abs(az) < ε && Math.abs(bz) < ε) { + hue = NaN; + } + else { + hue = Math.atan2(bz, az) * 180 / Math.PI; + } + + return [ + Jz, // Jz is still Jz + Math.sqrt(az ** 2 + bz ** 2), // Chroma + constrain(hue) // Hue, in degrees [0 to 360) + ]; + }, + toBase (jzczhz) { + // Convert from polar form + // debugger; + return [ + jzczhz[0], // Jz is still Jz + jzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az + jzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180) // bz + ]; + }, + formats: { + color: {} + }, +}); + +// More accurate color-difference formulae +// than the simple 1976 Euclidean distance in Lab + +// Uses JzCzHz, which has improved perceptual uniformity +// and thus a simple Euclidean root-sum of ΔL² ΔC² ΔH² +// gives good results. + +function deltaEJz (color, sample) { + // Given this color as the reference + // and a sample, + // calculate deltaE in JzCzHz. + let [Jz1, Cz1, Hz1] = jzczhz.from(color); + let [Jz2, Cz2, Hz2] = jzczhz.from(sample); + + // Lightness and Chroma differences + // sign does not matter as they are squared. + let ΔJ = Jz1 - Jz2; + let ΔC = Cz1 - Cz2; + + // length of chord for ΔH + if ((Number.isNaN(Hz1)) && (Number.isNaN(Hz2))) { + // both undefined hues + Hz1 = 0; + Hz2 = 0; + } + else if (Number.isNaN(Hz1)) { + // one undefined, set to the defined hue + Hz1 = Hz2; + } + else if (Number.isNaN(Hz2)) { + Hz2 = Hz1; + } + + let Δh = Hz1 - Hz2; + let ΔH = 2 * Math.sqrt(Cz1 * Cz2) * Math.sin((Δh / 2) * (Math.PI / 180)); + + return Math.sqrt(ΔJ ** 2 + ΔC ** 2 + ΔH ** 2); +} + +const c1$1 = 3424 / 4096; +const c2$1 = 2413 / 128; +const c3$1 = 2392 / 128; +const m1$1 = 2610 / 16384; +const m2 = 2523 / 32; +const im1 = 16384 / 2610; +const im2 = 32 / 2523; + +// The matrix below includes the 4% crosstalk components +// and is from the Dolby "What is ICtCp" paper" +const XYZtoLMS_M = [ + [ 0.3592832590121217, 0.6976051147779502, -0.0358915932320290 ], + [ -0.1920808463704993, 1.1004767970374321, 0.0753748658519118 ], + [ 0.0070797844607479, 0.0748396662186362, 0.8433265453898765 ] +]; +// linear-light Rec.2020 to LMS, again with crosstalk +// rational terms from Jan Fröhlich, +// Encoding High Dynamic Range andWide Color Gamut Imagery, p.97 +// and ITU-R BT.2124-0 p.2 +/* +const Rec2020toLMS_M = [ + [ 1688 / 4096, 2146 / 4096, 262 / 4096 ], + [ 683 / 4096, 2951 / 4096, 462 / 4096 ], + [ 99 / 4096, 309 / 4096, 3688 / 4096 ] +]; +*/ +// this includes the Ebner LMS coefficients, +// the rotation, and the scaling to [-0.5,0.5] range +// rational terms from Fröhlich p.97 +// and ITU-R BT.2124-0 pp.2-3 +const LMStoIPT_M = [ + [ 2048 / 4096, 2048 / 4096, 0 ], + [ 6610 / 4096, -13613 / 4096, 7003 / 4096 ], + [ 17933 / 4096, -17390 / 4096, -543 / 4096 ] +]; + +// inverted matrices, calculated from the above +const IPTtoLMS_M = [ + [ 0.9999999999999998, 0.0086090370379328, 0.1110296250030260 ], + [ 0.9999999999999998, -0.0086090370379328, -0.1110296250030259 ], + [ 0.9999999999999998, 0.5600313357106791, -0.3206271749873188 ] +]; +/* +const LMStoRec2020_M = [ + [ 3.4375568932814012112, -2.5072112125095058195, 0.069654319228104608382], + [-0.79142868665644156125, 1.9838372198740089874, -0.19240853321756742626 ], + [-0.025646662911506476363, -0.099240248643945566751, 1.1248869115554520431 ] +]; +*/ +const LMStoXYZ_M = [ + [ 2.0701522183894223, -1.3263473389671563, 0.2066510476294053 ], + [ 0.3647385209748072, 0.6805660249472273, -0.0453045459220347 ], + [ -0.0497472075358123, -0.0492609666966131, 1.1880659249923042 ] +]; + +// Only the PQ form of ICtCp is implemented here. There is also an HLG form. +// from Dolby, "WHAT IS ICTCP?" +// https://professional.dolby.com/siteassets/pdfs/ictcp_dolbywhitepaper_v071.pdf +// and +// Dolby, "Perceptual Color Volume +// Measuring the Distinguishable Colors of HDR and WCG Displays" +// https://professional.dolby.com/siteassets/pdfs/dolby-vision-measuring-perceptual-color-volume-v7.1.pdf +var ictcp = new ColorSpace({ + id: "ictcp", + name: "ICTCP", + // From BT.2100-2 page 7: + // During production, signal values are expected to exceed the + // range E′ = [0.0 : 1.0]. This provides processing headroom and avoids + // signal degradation during cascaded processing. Such values of E′, + // below 0.0 or exceeding 1.0, should not be clipped during production + // and exchange. + // Values below 0.0 should not be clipped in reference displays (even + // though they represent “negative” light) to allow the black level of + // the signal (LB) to be properly set using test signals known as “PLUGE” + coords: { + i: { + refRange: [0, 1], // Constant luminance, + name: "I" + }, + ct: { + refRange: [-0.5, 0.5], // Full BT.2020 gamut in range [-0.5, 0.5] + name: "CT" + }, + cp: { + refRange: [-0.5, 0.5], + name: "CP" + } + }, + + base: XYZ_Abs_D65, + fromBase (XYZ) { + // move to LMS cone domain + let LMS = multiplyMatrices(XYZtoLMS_M, XYZ); + + return LMStoICtCp(LMS); + }, + toBase (ICtCp) { + let LMS = ICtCptoLMS(ICtCp); + + return multiplyMatrices(LMStoXYZ_M, LMS); + }, + formats: { + color: {} + }, +}); + +function LMStoICtCp (LMS) { + // apply the PQ EOTF + // we can't ever be dividing by zero because of the "1 +" in the denominator + let PQLMS = LMS.map (function (val) { + let num = c1$1 + (c2$1 * ((val / 10000) ** m1$1)); + let denom = 1 + (c3$1 * ((val / 10000) ** m1$1)); + + return (num / denom) ** m2; + }); + + // LMS to IPT, with rotation for Y'C'bC'r compatibility + return multiplyMatrices(LMStoIPT_M, PQLMS); +} + +function ICtCptoLMS (ICtCp) { + let PQLMS = multiplyMatrices(IPTtoLMS_M, ICtCp); + + // From BT.2124-0 Annex 2 Conversion 3 + let LMS = PQLMS.map (function (val) { + let num = Math.max((val ** im2) - c1$1, 0); + let denom = (c2$1 - (c3$1 * (val ** im2))); + return 10000 * ((num / denom) ** im1); + }); + + return LMS; +} + +// Delta E in ICtCp space, +// which the ITU calls Delta E ITP, which is shorter +// formulae from ITU Rec. ITU-R BT.2124-0 + +function deltaEITP (color, sample) { + // Given this color as the reference + // and a sample, + // calculate deltaE in ICtCp + // which is simply the Euclidean distance + + let [ I1, T1, P1 ] = ictcp.from(color); + let [ I2, T2, P2 ] = ictcp.from(sample); + + // the 0.25 factor is to undo the encoding scaling in Ct + // the 720 is so that 1 deltaE = 1 JND + // per ITU-R BT.2124-0 p.3 + + return 720 * Math.sqrt((I1 - I2) ** 2 + (0.25 * (T1 - T2) ** 2) + (P1 - P2) ** 2); +} + +const white$3 = WHITES.D65; +const adaptedCoef = 0.42; +const adaptedCoefInv = 1 / adaptedCoef; +const tau = 2 * Math.PI; + +const cat16 = [ + [ 0.401288, 0.650173, -0.051461 ], + [ -0.250268, 1.204414, 0.045854 ], + [ -0.002079, 0.048952, 0.953127 ] +]; + +const cat16Inv = [ + [1.8620678550872327, -1.0112546305316843, 0.14918677544445175], + [0.38752654323613717, 0.6214474419314753, -0.008973985167612518], + [-0.015841498849333856, -0.03412293802851557, 1.0499644368778496] +]; + +const m1 = [ + [460.0, 451.0, 288.0], + [460.0, -891.0, -261.0], + [460.0, -220.0, -6300.0] +]; + +const surroundMap = { + dark: [0.8, 0.525, 0.8], + dim: [0.9, 0.59, 0.9], + average: [1, 0.69, 1] +}; + +const hueQuadMap = { + // Red, Yellow, Green, Blue, Red + h: [20.14, 90.00, 164.25, 237.53, 380.14], + e: [0.8, 0.7, 1.0, 1.2, 0.8], + H: [0.0, 100.0, 200.0, 300.0, 400.0] +}; + +const rad2deg = 180 / Math.PI; +const deg2rad$1 = Math.PI / 180; + +function adapt$1 (coords, fl) { + const temp = coords.map(c => { + const x = spow(fl * Math.abs(c) * 0.01, adaptedCoef); + return 400 * copySign(x, c) / (x + 27.13); + }); + return temp; +} + +function unadapt (adapted, fl) { + const constant = 100 / fl * (27.13 ** adaptedCoefInv); + return adapted.map(c => { + const cabs = Math.abs(c); + return copySign(constant * spow(cabs / (400 - cabs), adaptedCoefInv), c); + }); +} + +function hueQuadrature (h) { + let hp = constrain(h); + if (hp <= hueQuadMap.h[0]) { + hp += 360; + } + + const i = bisectLeft(hueQuadMap.h, hp) - 1; + const [hi, hii] = hueQuadMap.h.slice(i, i + 2); + const [ei, eii] = hueQuadMap.e.slice(i, i + 2); + const Hi = hueQuadMap.H[i]; + + const t = (hp - hi) / ei; + return Hi + (100 * t) / (t + (hii - hp) / eii); +} + +function invHueQuadrature (H) { + let Hp = ((H % 400 + 400) % 400); + const i = Math.floor(0.01 * Hp); + Hp = Hp % 100; + const [hi, hii] = hueQuadMap.h.slice(i, i + 2); + const [ei, eii] = hueQuadMap.e.slice(i, i + 2); + + return constrain( + (Hp * (eii * hi - ei * hii) - 100 * hi * eii) / + (Hp * (eii - ei) - 100 * eii) + ); +} + +function environment ( + refWhite, + adaptingLuminance, + backgroundLuminance, + surround, + discounting +) { + + const env = {}; + + env.discounting = discounting; + env.refWhite = refWhite; + env.surround = surround; + const xyzW = refWhite.map(c => { + return c * 100; + }); + + // The average luminance of the environment in `cd/m^2cd/m` (a.k.a. nits) + env.la = adaptingLuminance; + // The relative luminance of the nearby background + env.yb = backgroundLuminance; + // Absolute luminance of the reference white. + const yw = xyzW[1]; + + // Cone response for reference white + const rgbW = multiplyMatrices(cat16, xyzW); + + // Surround: dark, dim, and average + surround = surroundMap[env.surround]; + const f = surround[0]; + env.c = surround[1]; + env.nc = surround[2]; + + const k = 1 / (5 * env.la + 1); + const k4 = k ** 4; + + // Factor of luminance level adaptation + env.fl = (k4 * env.la + 0.1 * (1 - k4) * (1 - k4) * Math.cbrt(5 * env.la)); + env.flRoot = env.fl ** 0.25; + + env.n = env.yb / yw; + env.z = 1.48 + Math.sqrt(env.n); + env.nbb = 0.725 * (env.n ** -0.2); + env.ncb = env.nbb; + + // Degree of adaptation calculating if not discounting + // illuminant (assumed eye is fully adapted) + const d = (discounting) ? + 1 : + Math.max( + Math.min(f * (1 - 1 / 3.6 * Math.exp((-env.la - 42) / 92)), 1), + 0 + ); + env.dRgb = rgbW.map(c => { + return interpolate(1, yw / c, d); + }); + env.dRgbInv = env.dRgb.map(c => { + return 1 / c; + }); + + // Achromatic response + const rgbCW = rgbW.map((c, i) => { + return c * env.dRgb[i]; + }); + const rgbAW = adapt$1(rgbCW, env.fl); + env.aW = env.nbb * (2 * rgbAW[0] + rgbAW[1] + 0.05 * rgbAW[2]); + + // console.log(env); + + return env; +} + +// Pre-calculate everything we can with the viewing conditions +const viewingConditions$1 = environment( + white$3, + 64 / Math.PI * 0.2, 20, + "average", + false +); + +function fromCam16 (cam16, env) { + + // These check ensure one, and only one attribute for a + // given category is provided. + if (!((cam16.J !== undefined) ^ (cam16.Q !== undefined))) { + throw new Error("Conversion requires one and only one: 'J' or 'Q'"); + } + + if (!((cam16.C !== undefined) ^ (cam16.M !== undefined) ^ (cam16.s !== undefined))) { + throw new Error("Conversion requires one and only one: 'C', 'M' or 's'"); + } + + // Hue is absolutely required + if (!((cam16.h !== undefined) ^ (cam16.H !== undefined))) { + throw new Error("Conversion requires one and only one: 'h' or 'H'"); + } + + // Black + if (cam16.J === 0.0 || cam16.Q === 0.0) { + return [0.0, 0.0, 0.0]; + } + + // Break hue into Cartesian components + let hRad = 0.0; + if (cam16.h !== undefined) { + hRad = constrain(cam16.h) * deg2rad$1; + } + else { + hRad = invHueQuadrature(cam16.H) * deg2rad$1; + } + + const cosh = Math.cos(hRad); + const sinh = Math.sin(hRad); + + // Calculate `Jroot` from one of the lightness derived coordinates. + let Jroot = 0.0; + if (cam16.J !== undefined) { + Jroot = spow(cam16.J, 1 / 2) * 0.1; + } + else if (cam16.Q !== undefined) { + Jroot = 0.25 * env.c * cam16.Q / ((env.aW + 4) * env.flRoot); + } + + // Calculate the `t` value from one of the chroma derived coordinates + let alpha = 0.0; + if (cam16.C !== undefined) { + alpha = cam16.C / Jroot; + } + else if (cam16.M !== undefined) { + alpha = (cam16.M / env.flRoot) / Jroot; + } + else if (cam16.s !== undefined) { + alpha = 0.0004 * (cam16.s ** 2) * (env.aW + 4) / env.c; + } + const t = spow( + alpha * Math.pow(1.64 - Math.pow(0.29, env.n), -0.73), + 10 / 9 + ); + + // Eccentricity + const et = 0.25 * (Math.cos(hRad + 2) + 3.8); + + // Achromatic response + const A = env.aW * spow(Jroot, 2 / env.c / env.z); + + // Calculate red-green and yellow-blue components + const p1 = 5e4 / 13 * env.nc * env.ncb * et; + const p2 = A / env.nbb; + const r = ( + 23 * (p2 + 0.305) * + zdiv(t, 23 * p1 + t * (11 * cosh + 108 * sinh)) + ); + const a = r * cosh; + const b = r * sinh; + + // Calculate back from cone response to XYZ + const rgb_c = unadapt( + multiplyMatrices(m1, [p2, a, b]).map(c => { + return c * 1 / 1403; + }), + env.fl + ); + return multiplyMatrices( + cat16Inv, + rgb_c.map((c, i) => { + return c * env.dRgbInv[i]; + }) + ).map(c => { + return c / 100; + }); +} + + +function toCam16 (xyzd65, env) { + // Cone response + const xyz100 = xyzd65.map(c => { + return c * 100; + }); + const rgbA = adapt$1( + multiplyMatrices(cat16, xyz100).map((c, i) => { + return c * env.dRgb[i]; + }), + env.fl + ); + + // Calculate hue from red-green and yellow-blue components + const a = rgbA[0] + (-12 * rgbA[1] + rgbA[2]) / 11; + const b = (rgbA[0] + rgbA[1] - 2 * rgbA[2]) / 9; + const hRad = ((Math.atan2(b, a) % tau) + tau) % tau; + + // Eccentricity + const et = 0.25 * (Math.cos(hRad + 2) + 3.8); + + const t = ( + 5e4 / 13 * env.nc * env.ncb * + zdiv( + et * Math.sqrt(a ** 2 + b ** 2), + rgbA[0] + rgbA[1] + 1.05 * rgbA[2] + 0.305 + ) + ); + const alpha = spow(t, 0.9) * Math.pow(1.64 - Math.pow(0.29, env.n), 0.73); + + // Achromatic response + const A = env.nbb * (2 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]); + + const Jroot = spow(A / env.aW, 0.5 * env.c * env.z); + + // Lightness + const J = 100 * spow(Jroot, 2); + + // Brightness + const Q = (4 / env.c * Jroot * (env.aW + 4) * env.flRoot); + + // Chroma + const C = alpha * Jroot; + + // Colorfulness + const M = C * env.flRoot; + + // Hue + const h = constrain(hRad * rad2deg); + + // Hue quadrature + const H = hueQuadrature(h); + + // Saturation + const s = 50 * spow(env.c * alpha / (env.aW + 4), 1 / 2); + + // console.log({J: J, C: C, h: h, s: s, Q: Q, M: M, H: H}); + + return {J: J, C: C, h: h, s: s, Q: Q, M: M, H: H}; +} + + +// Provided as a way to directly evaluate the CAM16 model +// https://observablehq.com/@jrus/cam16: reference implementation +// https://arxiv.org/pdf/1802.06067.pdf: Nico Schlömer +// https://onlinelibrary.wiley.com/doi/pdf/10.1002/col.22324: hue quadrature +// https://www.researchgate.net/publication/318152296_Comprehensive_color_solutions_CAM16_CAT16_and_CAM16-UCS +// Results compared against: https://github.com/colour-science/colour +var cam16 = new ColorSpace({ + id: "cam16-jmh", + name: "CAM16-JMh", + coords: { + j: { + refRange: [0, 100], + name: "J", + }, + m: { + refRange: [0, 105.0], + name: "Colorfulness", + }, + h: { + refRange: [0, 360], + type: "angle", + name: "Hue", + } + }, + + base: xyz_d65, + + fromBase (xyz) { + const cam16 = toCam16(xyz, viewingConditions$1); + return [cam16.J, cam16.M, cam16.h]; + }, + toBase (cam16) { + return fromCam16( + {J: cam16[0], M: cam16[1], h: cam16[2]}, + viewingConditions$1 + ); + }, + formats: { + color: { + id: "--cam16-jmh" + }, + }, +}); + +const white$2 = WHITES.D65; +const ε$4 = 216 / 24389; // 6^3/29^3 == (24/116)^3 +const κ$3 = 24389 / 27; // 29^3/3^3 + +function toLstar (y) { + // Convert XYZ Y to L* + + const fy = (y > ε$4) ? Math.cbrt(y) : (κ$3 * y + 16) / 116; + return (116.0 * fy) - 16.0; +} + +function fromLstar (lstar) { + // Convert L* back to XYZ Y + + return (lstar > 8) ? Math.pow((lstar + 16) / 116, 3) : lstar / κ$3; +} + +function fromHct (coords, env) { + // Use Newton's method to try and converge as quick as possible or + // converge as close as we can. While the requested precision is achieved + // most of the time, it may not always be achievable. Especially past the + // visible spectrum, the algorithm will likely struggle to get the same + // precision. If, for whatever reason, we cannot achieve the accuracy we + // seek in the allotted iterations, just return the closest we were able to + // get. + + let [h, c, t] = coords; + let xyz = []; + let j = 0; + + // Shortcut out for black + if (t === 0) { + return [0.0, 0.0, 0.0]; + } + + // Calculate the Y we need to target + let y = fromLstar(t); + + // A better initial guess yields better results. Polynomials come from + // curve fitting the T vs J response. + if (t > 0) { + j = 0.00379058511492914 * t ** 2 + 0.608983189401032 * t + 0.9155088574762233; + } + else { + j = 9.514440756550361e-06 * t ** 2 + 0.08693057439788597 * t - 21.928975842194614; + } + + // Threshold of how close is close enough, and max number of attempts. + // More precision and more attempts means more time spent iterating. Higher + // required precision gives more accuracy but also increases the chance of + // not hitting the goal. 2e-12 allows us to convert round trip with + // reasonable accuracy of six decimal places or more. + const threshold = 2e-12; + const max_attempts = 15; + + let attempt = 0; + let last = Infinity; + + // Try to find a J such that the returned y matches the returned y of the L* + while (attempt <= max_attempts) { + xyz = fromCam16({J: j, C: c, h: h}, env); + + // If we are within range, return XYZ + // If we are closer than last time, save the values + const delta = Math.abs(xyz[1] - y); + if (delta < last) { + if (delta <= threshold) { + return xyz; + } + last = delta; + } + + // f(j_root) = (j ** (1 / 2)) * 0.1 + // f(j) = ((f(j_root) * 100) ** 2) / j - 1 = 0 + // f(j_root) = Y = y / 100 + // f(j) = (y ** 2) / j - 1 + // f'(j) = (2 * y) / j + j = j - (xyz[1] - y) * j / (2 * xyz[1]); + + attempt += 1; + } + + // We could not acquire the precision we desired, + // return our closest attempt. + return fromCam16({J: j, C: c, h: h}, env); +} + +function toHct (xyz, env) { + // Calculate HCT by taking the L* of CIE LCh D65 and CAM16 chroma and hue. + + const t = toLstar(xyz[1]); + if (t === 0.0) { + return [0.0, 0.0, 0.0]; + } + const cam16 = toCam16(xyz, viewingConditions); + return [constrain(cam16.h), cam16.C, t]; +} + +// Pre-calculate everything we can with the viewing conditions +const viewingConditions = environment( + white$2, 200 / Math.PI * fromLstar(50.0), + fromLstar(50.0) * 100, + "average", + false +); + +// https://material.io/blog/science-of-color-design +// This is not a port of the material-color-utilities, +// but instead implements the full color space as described, +// combining CAM16 JCh and Lab D65. This does not clamp conversion +// to HCT to specific chroma bands and provides support for wider +// gamuts than Google currently supports and does so at a greater +// precision (> 8 bits back to sRGB). +// This implementation comes from https://github.com/facelessuser/coloraide +// which is licensed under MIT. +var hct = new ColorSpace({ + id: "hct", + name: "HCT", + coords: { + h: { + refRange: [0, 360], + type: "angle", + name: "Hue", + }, + c: { + refRange: [0, 145], + name: "Colorfulness", + }, + t: { + refRange: [0, 100], + name: "Tone", + } + }, + + base: xyz_d65, + + fromBase (xyz) { + return toHct(xyz); + }, + toBase (hct) { + return fromHct(hct, viewingConditions); + }, + formats: { + color: { + id: "--hct", + coords: [" | ", " | ", " | "] + }, + }, +}); + +const deg2rad = Math.PI / 180; +const ucsCoeff = [1.00, 0.007, 0.0228]; + +/** +* Convert HCT chroma and hue (CAM16 JMh colorfulness and hue) using UCS logic for a and b. +* @param {number[]} coords - HCT coordinates. +* @return {number[]} +*/ +function convertUcsAb (coords) { + // We want the distance between the actual color. + // If chroma is negative, it will throw off our calculations. + // Normally, converting back to the base and forward will correct it. + // If we have a negative chroma after this, then we have a color that + // cannot resolve to positive chroma. + if (coords[1] < 0) { + coords = hct.fromBase(hct.toBase(coords)); + } + + // Only in extreme cases (usually outside the visible spectrum) + // can the input value for log become negative. + // Avoid domain error by forcing a zero result via "max" if necessary. + const M = Math.log(Math.max(1 + ucsCoeff[2] * coords[1] * viewingConditions.flRoot, 1.0)) / ucsCoeff[2]; + const hrad = coords[0] * deg2rad; + const a = M * Math.cos(hrad); + const b = M * Math.sin(hrad); + + return [coords[2], a, b]; +} + + +/** +* Color distance using HCT. +* @param {Color} color - Color to compare. +* @param {Color} sample - Color to compare. +* @return {number[]} +*/ +function deltaEHCT (color, sample) { + let [ t1, a1, b1 ] = convertUcsAb(hct.from(color)); + let [ t2, a2, b2 ] = convertUcsAb(hct.from(sample)); + + // Use simple euclidean distance with a and b using UCS conversion + // and LCh lightness (HCT tone). + return Math.sqrt((t1 - t2) ** 2 + (a1 - a2) ** 2 + (b1 - b2) ** 2); +} + +var deltaEMethods = { + deltaE76, + deltaECMC, + deltaE2000, + deltaEJz, + deltaEITP, + deltaEOK, + deltaEHCT +}; + +/** + * Calculate the epsilon to 2 degrees smaller than the specified JND. + * @param {Number} jnd - The target "just noticeable difference". + * @returns {Number} + */ +function calcEpsilon (jnd) { + // Calculate the epsilon to 2 degrees smaller than the specified JND. + + const order = (!jnd) ? 0 : Math.floor(Math.log10(Math.abs(jnd))); + // Limit to an arbitrary value to ensure value is never too small and causes infinite loops. + return Math.max(parseFloat(`1e${order - 2}`), 1e-6); +} + +const GMAPPRESET = { + "hct": { + method: "hct.c", + jnd: 2, + deltaEMethod: "hct", + blackWhiteClamp: {} + }, + "hct-tonal": { + method: "hct.c", + jnd: 0, + deltaEMethod: "hct", + blackWhiteClamp: { channel: "hct.t", min: 0, max: 100 } + }, +}; + +/** + * Force coordinates to be in gamut of a certain color space. + * Mutates the color it is passed. + * @param {Object|string} options object or spaceId string + * @param {string} options.method - How to force into gamut. + * If "clip", coordinates are just clipped to their reference range. + * If "css", coordinates are reduced according to the CSS 4 Gamut Mapping Algorithm. + * If in the form [colorSpaceId].[coordName], that coordinate is reduced + * until the color is in gamut. Please note that this may produce nonsensical + * results for certain coordinates (e.g. hue) or infinite loops if reducing the coordinate never brings the color in gamut. + * @param {ColorSpace|string} options.space - The space whose gamut we want to map to + * @param {string} options.deltaEMethod - The delta E method to use while performing gamut mapping. + * If no method is specified, delta E 2000 is used. + * @param {Number} options.jnd - The "just noticeable difference" to target. + * @param {Object} options.blackWhiteClamp - Used to configure SDR black and clamping. + * "channel" indicates the "space.channel" to use for determining when to clamp. + * "min" indicates the lower limit for black clamping and "max" indicates the upper + * limit for white clamping. + */ + +function toGamut ( + color, + { + method = defaults.gamut_mapping, + space = color.space, + deltaEMethod = "", + jnd = 2, + blackWhiteClamp = {} + } = {} +) { + if (isString(arguments[1])) { + space = arguments[1]; + } + + space = ColorSpace.get(space); + + // 3 spaces: + // color.space: current color space + // space: space whose gamut we are mapping to + // mapSpace: space with the coord we're reducing + + let spaceColor; + if (method === "css") { + spaceColor = to(toGamutCSS(color, { space }), color.space); + } + else { + if (inGamut(color, space, { epsilon: 0 })) { + return getColor(color); + } + + if (method !== "clip" && !inGamut(color, space)) { + + if (Object.prototype.hasOwnProperty.call(GMAPPRESET, method)) { + ({method, jnd, deltaEMethod, blackWhiteClamp} = GMAPPRESET[method]); + } + + // Get the correct delta E method + let de = deltaE2000; + if (deltaEMethod !== "") { + for (let m in deltaEMethods) { + if ("deltae" + deltaEMethod.toLowerCase() === m.toLowerCase()) { + de = deltaEMethods[m]; + break; + } + } + } + + let clipped = toGamut(to(color, space), { method: "clip", space }); + if (de(color, clipped) > jnd) { + + // Clamp to SDR white and black if required + if (Object.keys(blackWhiteClamp).length === 3) { + let channelMeta = ColorSpace.resolveCoord(blackWhiteClamp.channel); + let channel = get(to(color, channelMeta.space), channelMeta.id); + if (isNone(channel)) { + channel = 0; + } + if (channel >= blackWhiteClamp.max) { + return to({ space: "xyz-d65", coords: WHITES["D65"] }, color.space); + } + else if (channel <= blackWhiteClamp.min) { + return to({ space: "xyz-d65", coords: [0, 0, 0] }, color.space); + } + } + + // Reduce a coordinate of a certain color space until the color is in gamut + let coordMeta = ColorSpace.resolveCoord(method); + let mapSpace = coordMeta.space; + let coordId = coordMeta.id; + + let mappedColor = to(color, mapSpace); + // If we were already in the mapped color space, we need to resolve undefined channels + mappedColor.coords.forEach((c, i) => { + if (isNone(c)) { + mappedColor.coords[i] = 0; + } + }); + let bounds = coordMeta.range || coordMeta.refRange; + let min = bounds[0]; + let ε = calcEpsilon(jnd); + let low = min; + let high = get(mappedColor, coordId); + + while (high - low > ε) { + let clipped = clone(mappedColor); + clipped = toGamut(clipped, { space, method: "clip" }); + let deltaE = de(mappedColor, clipped); + + if (deltaE - jnd < ε) { + low = get(mappedColor, coordId); + } + else { + high = get(mappedColor, coordId); + } + + set(mappedColor, coordId, (low + high) / 2); + } + + spaceColor = to(mappedColor, space); + } + else { + spaceColor = clipped; + } + } + else { + spaceColor = to(color, space); + } + + if (method === "clip" // Dumb coord clipping + // finish off smarter gamut mapping with clip to get rid of ε, see #17 + || !inGamut(spaceColor, space, { epsilon: 0 }) + ) { + let bounds = Object.values(space.coords).map(c => c.range || []); + + spaceColor.coords = spaceColor.coords.map((c, i) => { + let [min, max] = bounds[i]; + + if (min !== undefined) { + c = Math.max(min, c); + } + + if (max !== undefined) { + c = Math.min(c, max); + } + + return c; + }); + } + } + + if (space !== color.space) { + spaceColor = to(spaceColor, color.space); + } + + color.coords = spaceColor.coords; + return color; +} + +toGamut.returns = "color"; + +// The reference colors to be used if lightness is out of the range 0-1 in the +// `Oklch` space. These are created in the `Oklab` space, as it is used by the +// DeltaEOK calculation, so it is guaranteed to be imported. +const COLORS = { + WHITE: { space: OKLab, coords: [1, 0, 0] }, + BLACK: { space: OKLab, coords: [0, 0, 0] } +}; + +/** + * Given a color `origin`, returns a new color that is in gamut using + * the CSS Gamut Mapping Algorithm. If `space` is specified, it will be in gamut + * in `space`, and returned in `space`. Otherwise, it will be in gamut and + * returned in the color space of `origin`. + * @param {Object} origin + * @param {Object} options + * @param {ColorSpace|string} options.space + * @returns {Color} + */ +function toGamutCSS (origin, { space = origin.space }) { + const JND = 0.02; + const ε = 0.0001; + space = ColorSpace.get(space); + const oklchSpace = ColorSpace.get("oklch"); + + if (space.isUnbounded) { + return to(origin, space); + } + + const origin_OKLCH = to(origin, oklchSpace); + let L = origin_OKLCH.coords[0]; + + // return media white or black, if lightness is out of range + if (L >= 1) { + const white = to(COLORS.WHITE, space); + white.alpha = origin.alpha; + return to(white, space); + } + if (L <= 0) { + const black = to(COLORS.BLACK, space); + black.alpha = origin.alpha; + return to(black, space); + } + + if (inGamut(origin_OKLCH, space, {epsilon: 0})) { + return to(origin_OKLCH, space); + } + + function clip (_color) { + const destColor = to(_color, space); + const spaceCoords = Object.values(space.coords); + destColor.coords = destColor.coords.map((coord, index) => { + if ("range" in spaceCoords[index]) { + const [min, max] = spaceCoords[index].range; + return clamp(min, coord, max); + } + return coord; + }); + return destColor; + } + let min = 0; + let max = origin_OKLCH.coords[1]; + let min_inGamut = true; + let current = clone(origin_OKLCH); + let clipped = clip(current); + + let E = deltaEOK(clipped, current); + if (E < JND) { + return clipped; + } + + while ((max - min) > ε) { + const chroma = (min + max) / 2; + current.coords[1] = chroma; + if (min_inGamut && inGamut(current, space, {epsilon: 0})) { + min = chroma; + } + else { + clipped = clip(current); + E = deltaEOK(clipped, current); + if (E < JND) { + if ((JND - E < ε)) { + break; + } + else { + min_inGamut = false; + min = chroma; + } + } + else { + max = chroma; + } + } + } + return clipped; +} + +/** + * Convert to color space and return a new color + * @param {Object|string} space - Color space object or id + * @param {Object} options + * @param {boolean} options.inGamut - Whether to force resulting color in gamut + * @returns {Color} + */ +function to (color, space, {inGamut} = {}) { + color = getColor(color); + space = ColorSpace.get(space); + + let coords = space.from(color); + let ret = {space, coords, alpha: color.alpha}; + + if (inGamut) { + ret = toGamut(ret, inGamut === true ? undefined : inGamut); + } + + return ret; +} + +to.returns = "color"; + +/** + * Generic toString() method, outputs a color(spaceId ...coords) function, a functional syntax, or custom formats defined by the color space + * @param {Object} options + * @param {number} options.precision - Significant digits + * @param {boolean} options.inGamut - Adjust coordinates to fit in gamut first? [default: false] + */ +function serialize (color, { + precision = defaults.precision, + format = "default", + inGamut: inGamut$1 = true, + ...customOptions +} = {}) { + let ret; + + color = getColor(color); + + let formatId = format; + format = color.space.getFormat(format) + ?? color.space.getFormat("default") + ?? ColorSpace.DEFAULT_FORMAT; + + // The assignment to coords and inGamut needs to stay in the order they are now + // The order of the assignment was changed as a workaround for a bug in Next.js + // See this issue for details: https://github.com/color-js/color.js/issues/260 + + let coords = color.coords.slice(); // clone so we can manipulate it + + inGamut$1 ||= format.toGamut; + + if (inGamut$1 && !inGamut(color)) { + // FIXME what happens if the color contains NaNs? + coords = toGamut(clone(color), inGamut$1 === true ? undefined : inGamut$1).coords; + } + + if (format.type === "custom") { + customOptions.precision = precision; + + if (format.serialize) { + ret = format.serialize(coords, color.alpha, customOptions); + } + else { + throw new TypeError(`format ${formatId} can only be used to parse colors, not for serialization`); + } + } + else { + // Functional syntax + let name = format.name || "color"; + + if (format.serializeCoords) { + coords = format.serializeCoords(coords, precision); + } + else { + if (precision !== null) { + coords = coords.map(c => { + return serializeNumber(c, {precision}); + }); + } + } + + let args = [...coords]; + + if (name === "color") { + // If output is a color() function, add colorspace id as first argument + let cssId = format.id || format.ids?.[0] || color.space.id; + args.unshift(cssId); + } + + let alpha = color.alpha; + if (precision !== null) { + alpha = serializeNumber(alpha, {precision}); + } + + let strAlpha = color.alpha >= 1 || format.noAlpha ? "" : `${format.commas ? "," : " /"} ${alpha}`; + ret = `${name}(${args.join(format.commas ? ", " : " ")}${strAlpha})`; + } + + return ret; +} + +// convert an array of linear-light rec2020 values to CIE XYZ +// using D65 (no chromatic adaptation) +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html +// 0 is actually calculated as 4.994106574466076e-17 +const toXYZ_M$5 = [ + [ 0.6369580483012914, 0.14461690358620832, 0.1688809751641721 ], + [ 0.2627002120112671, 0.6779980715188708, 0.05930171646986196 ], + [ 0.000000000000000, 0.028072693049087428, 1.060985057710791 ] +]; + +// from ITU-R BT.2124-0 Annex 2 p.3 +const fromXYZ_M$5 = [ + [ 1.716651187971268, -0.355670783776392, -0.253366281373660 ], + [ -0.666684351832489, 1.616481236634939, 0.0157685458139111 ], + [ 0.017639857445311, -0.042770613257809, 0.942103121235474 ] +]; + +var REC2020Linear = new RGBColorSpace({ + id: "rec2020-linear", + name: "Linear REC.2020", + white: "D65", + toXYZ_M: toXYZ_M$5, + fromXYZ_M: fromXYZ_M$5, + formats: { + color: {}, + } +}); + +// import sRGB from "./srgb.js"; + +const α = 1.09929682680944; +const β = 0.018053968510807; + +var REC2020 = new RGBColorSpace({ + id: "rec2020", + name: "REC.2020", + base: REC2020Linear, + // Non-linear transfer function from Rec. ITU-R BT.2020-2 table 4 + toBase (RGB) { + return RGB.map(function (val) { + if (val < β * 4.5) { + return val / 4.5; + } + + return Math.pow((val + α - 1) / α, 1 / 0.45); + }); + }, + fromBase (RGB) { + return RGB.map(function (val) { + if (val >= β) { + return α * Math.pow(val, 0.45) - (α - 1); + } + + return 4.5 * val; + }); + }, + formats: { + color: {}, + } +}); + +const toXYZ_M$4 = [ + [0.4865709486482162, 0.26566769316909306, 0.1982172852343625], + [0.2289745640697488, 0.6917385218365064, 0.079286914093745], + [0.0000000000000000, 0.04511338185890264, 1.043944368900976] +]; + +const fromXYZ_M$4 = [ + [ 2.493496911941425, -0.9313836179191239, -0.40271078445071684], + [-0.8294889695615747, 1.7626640603183463, 0.023624685841943577], + [ 0.03584583024378447, -0.07617238926804182, 0.9568845240076872] +]; + +var P3Linear = new RGBColorSpace({ + id: "p3-linear", + name: "Linear P3", + white: "D65", + toXYZ_M: toXYZ_M$4, + fromXYZ_M: fromXYZ_M$4 +}); + +// This is the linear-light version of sRGB +// as used for example in SVG filters +// or in Canvas + +// This matrix was calculated directly from the RGB and white chromaticities +// when rounded to 8 decimal places, it agrees completely with the official matrix +// see https://github.com/w3c/csswg-drafts/issues/5922 +const toXYZ_M$3 = [ + [ 0.41239079926595934, 0.357584339383878, 0.1804807884018343 ], + [ 0.21263900587151027, 0.715168678767756, 0.07219231536073371 ], + [ 0.01933081871559182, 0.11919477979462598, 0.9505321522496607 ] +]; + +// This matrix is the inverse of the above; +// again it agrees with the official definition when rounded to 8 decimal places +const fromXYZ_M$3 = [ + [ 3.2409699419045226, -1.537383177570094, -0.4986107602930034 ], + [ -0.9692436362808796, 1.8759675015077202, 0.04155505740717559 ], + [ 0.05563007969699366, -0.20397695888897652, 1.0569715142428786 ] +]; + +var sRGBLinear = new RGBColorSpace({ + id: "srgb-linear", + name: "Linear sRGB", + white: "D65", + toXYZ_M: toXYZ_M$3, + fromXYZ_M: fromXYZ_M$3, + formats: { + color: {} + }, +}); + +/* List of CSS color keywords + * Note that this does not include currentColor, transparent, + * or system colors + */ + +// To produce: Visit https://www.w3.org/TR/css-color-4/#named-colors +// and run in the console: +// copy($$("tr", $(".named-color-table tbody")).map(tr => `"${tr.cells[2].textContent.trim()}": [${tr.cells[4].textContent.trim().split(/\s+/).map(c => c === "0"? "0" : c === "255"? "1" : c + " / 255").join(", ")}]`).join(",\n")) +var KEYWORDS = { + "aliceblue": [240 / 255, 248 / 255, 1], + "antiquewhite": [250 / 255, 235 / 255, 215 / 255], + "aqua": [0, 1, 1], + "aquamarine": [127 / 255, 1, 212 / 255], + "azure": [240 / 255, 1, 1], + "beige": [245 / 255, 245 / 255, 220 / 255], + "bisque": [1, 228 / 255, 196 / 255], + "black": [0, 0, 0], + "blanchedalmond": [1, 235 / 255, 205 / 255], + "blue": [0, 0, 1], + "blueviolet": [138 / 255, 43 / 255, 226 / 255], + "brown": [165 / 255, 42 / 255, 42 / 255], + "burlywood": [222 / 255, 184 / 255, 135 / 255], + "cadetblue": [95 / 255, 158 / 255, 160 / 255], + "chartreuse": [127 / 255, 1, 0], + "chocolate": [210 / 255, 105 / 255, 30 / 255], + "coral": [1, 127 / 255, 80 / 255], + "cornflowerblue": [100 / 255, 149 / 255, 237 / 255], + "cornsilk": [1, 248 / 255, 220 / 255], + "crimson": [220 / 255, 20 / 255, 60 / 255], + "cyan": [0, 1, 1], + "darkblue": [0, 0, 139 / 255], + "darkcyan": [0, 139 / 255, 139 / 255], + "darkgoldenrod": [184 / 255, 134 / 255, 11 / 255], + "darkgray": [169 / 255, 169 / 255, 169 / 255], + "darkgreen": [0, 100 / 255, 0], + "darkgrey": [169 / 255, 169 / 255, 169 / 255], + "darkkhaki": [189 / 255, 183 / 255, 107 / 255], + "darkmagenta": [139 / 255, 0, 139 / 255], + "darkolivegreen": [85 / 255, 107 / 255, 47 / 255], + "darkorange": [1, 140 / 255, 0], + "darkorchid": [153 / 255, 50 / 255, 204 / 255], + "darkred": [139 / 255, 0, 0], + "darksalmon": [233 / 255, 150 / 255, 122 / 255], + "darkseagreen": [143 / 255, 188 / 255, 143 / 255], + "darkslateblue": [72 / 255, 61 / 255, 139 / 255], + "darkslategray": [47 / 255, 79 / 255, 79 / 255], + "darkslategrey": [47 / 255, 79 / 255, 79 / 255], + "darkturquoise": [0, 206 / 255, 209 / 255], + "darkviolet": [148 / 255, 0, 211 / 255], + "deeppink": [1, 20 / 255, 147 / 255], + "deepskyblue": [0, 191 / 255, 1], + "dimgray": [105 / 255, 105 / 255, 105 / 255], + "dimgrey": [105 / 255, 105 / 255, 105 / 255], + "dodgerblue": [30 / 255, 144 / 255, 1], + "firebrick": [178 / 255, 34 / 255, 34 / 255], + "floralwhite": [1, 250 / 255, 240 / 255], + "forestgreen": [34 / 255, 139 / 255, 34 / 255], + "fuchsia": [1, 0, 1], + "gainsboro": [220 / 255, 220 / 255, 220 / 255], + "ghostwhite": [248 / 255, 248 / 255, 1], + "gold": [1, 215 / 255, 0], + "goldenrod": [218 / 255, 165 / 255, 32 / 255], + "gray": [128 / 255, 128 / 255, 128 / 255], + "green": [0, 128 / 255, 0], + "greenyellow": [173 / 255, 1, 47 / 255], + "grey": [128 / 255, 128 / 255, 128 / 255], + "honeydew": [240 / 255, 1, 240 / 255], + "hotpink": [1, 105 / 255, 180 / 255], + "indianred": [205 / 255, 92 / 255, 92 / 255], + "indigo": [75 / 255, 0, 130 / 255], + "ivory": [1, 1, 240 / 255], + "khaki": [240 / 255, 230 / 255, 140 / 255], + "lavender": [230 / 255, 230 / 255, 250 / 255], + "lavenderblush": [1, 240 / 255, 245 / 255], + "lawngreen": [124 / 255, 252 / 255, 0], + "lemonchiffon": [1, 250 / 255, 205 / 255], + "lightblue": [173 / 255, 216 / 255, 230 / 255], + "lightcoral": [240 / 255, 128 / 255, 128 / 255], + "lightcyan": [224 / 255, 1, 1], + "lightgoldenrodyellow": [250 / 255, 250 / 255, 210 / 255], + "lightgray": [211 / 255, 211 / 255, 211 / 255], + "lightgreen": [144 / 255, 238 / 255, 144 / 255], + "lightgrey": [211 / 255, 211 / 255, 211 / 255], + "lightpink": [1, 182 / 255, 193 / 255], + "lightsalmon": [1, 160 / 255, 122 / 255], + "lightseagreen": [32 / 255, 178 / 255, 170 / 255], + "lightskyblue": [135 / 255, 206 / 255, 250 / 255], + "lightslategray": [119 / 255, 136 / 255, 153 / 255], + "lightslategrey": [119 / 255, 136 / 255, 153 / 255], + "lightsteelblue": [176 / 255, 196 / 255, 222 / 255], + "lightyellow": [1, 1, 224 / 255], + "lime": [0, 1, 0], + "limegreen": [50 / 255, 205 / 255, 50 / 255], + "linen": [250 / 255, 240 / 255, 230 / 255], + "magenta": [1, 0, 1], + "maroon": [128 / 255, 0, 0], + "mediumaquamarine": [102 / 255, 205 / 255, 170 / 255], + "mediumblue": [0, 0, 205 / 255], + "mediumorchid": [186 / 255, 85 / 255, 211 / 255], + "mediumpurple": [147 / 255, 112 / 255, 219 / 255], + "mediumseagreen": [60 / 255, 179 / 255, 113 / 255], + "mediumslateblue": [123 / 255, 104 / 255, 238 / 255], + "mediumspringgreen": [0, 250 / 255, 154 / 255], + "mediumturquoise": [72 / 255, 209 / 255, 204 / 255], + "mediumvioletred": [199 / 255, 21 / 255, 133 / 255], + "midnightblue": [25 / 255, 25 / 255, 112 / 255], + "mintcream": [245 / 255, 1, 250 / 255], + "mistyrose": [1, 228 / 255, 225 / 255], + "moccasin": [1, 228 / 255, 181 / 255], + "navajowhite": [1, 222 / 255, 173 / 255], + "navy": [0, 0, 128 / 255], + "oldlace": [253 / 255, 245 / 255, 230 / 255], + "olive": [128 / 255, 128 / 255, 0], + "olivedrab": [107 / 255, 142 / 255, 35 / 255], + "orange": [1, 165 / 255, 0], + "orangered": [1, 69 / 255, 0], + "orchid": [218 / 255, 112 / 255, 214 / 255], + "palegoldenrod": [238 / 255, 232 / 255, 170 / 255], + "palegreen": [152 / 255, 251 / 255, 152 / 255], + "paleturquoise": [175 / 255, 238 / 255, 238 / 255], + "palevioletred": [219 / 255, 112 / 255, 147 / 255], + "papayawhip": [1, 239 / 255, 213 / 255], + "peachpuff": [1, 218 / 255, 185 / 255], + "peru": [205 / 255, 133 / 255, 63 / 255], + "pink": [1, 192 / 255, 203 / 255], + "plum": [221 / 255, 160 / 255, 221 / 255], + "powderblue": [176 / 255, 224 / 255, 230 / 255], + "purple": [128 / 255, 0, 128 / 255], + "rebeccapurple": [102 / 255, 51 / 255, 153 / 255], + "red": [1, 0, 0], + "rosybrown": [188 / 255, 143 / 255, 143 / 255], + "royalblue": [65 / 255, 105 / 255, 225 / 255], + "saddlebrown": [139 / 255, 69 / 255, 19 / 255], + "salmon": [250 / 255, 128 / 255, 114 / 255], + "sandybrown": [244 / 255, 164 / 255, 96 / 255], + "seagreen": [46 / 255, 139 / 255, 87 / 255], + "seashell": [1, 245 / 255, 238 / 255], + "sienna": [160 / 255, 82 / 255, 45 / 255], + "silver": [192 / 255, 192 / 255, 192 / 255], + "skyblue": [135 / 255, 206 / 255, 235 / 255], + "slateblue": [106 / 255, 90 / 255, 205 / 255], + "slategray": [112 / 255, 128 / 255, 144 / 255], + "slategrey": [112 / 255, 128 / 255, 144 / 255], + "snow": [1, 250 / 255, 250 / 255], + "springgreen": [0, 1, 127 / 255], + "steelblue": [70 / 255, 130 / 255, 180 / 255], + "tan": [210 / 255, 180 / 255, 140 / 255], + "teal": [0, 128 / 255, 128 / 255], + "thistle": [216 / 255, 191 / 255, 216 / 255], + "tomato": [1, 99 / 255, 71 / 255], + "turquoise": [64 / 255, 224 / 255, 208 / 255], + "violet": [238 / 255, 130 / 255, 238 / 255], + "wheat": [245 / 255, 222 / 255, 179 / 255], + "white": [1, 1, 1], + "whitesmoke": [245 / 255, 245 / 255, 245 / 255], + "yellow": [1, 1, 0], + "yellowgreen": [154 / 255, 205 / 255, 50 / 255] +}; + +let coordGrammar = Array(3).fill(" | [0, 255]"); +let coordGrammarNumber = Array(3).fill("[0, 255]"); + +var sRGB = new RGBColorSpace({ + id: "srgb", + name: "sRGB", + base: sRGBLinear, + fromBase: rgb => { + // convert an array of linear-light sRGB values in the range 0.0-1.0 + // to gamma corrected form + // https://en.wikipedia.org/wiki/SRGB + return rgb.map(val => { + let sign = val < 0 ? -1 : 1; + let abs = val * sign; + + if (abs > 0.0031308) { + return sign * (1.055 * (abs ** (1 / 2.4)) - 0.055); + } + + return 12.92 * val; + }); + }, + toBase: rgb => { + // convert an array of sRGB values in the range 0.0 - 1.0 + // to linear light (un-companded) form. + // https://en.wikipedia.org/wiki/SRGB + return rgb.map(val => { + let sign = val < 0 ? -1 : 1; + let abs = val * sign; + + if (abs <= 0.04045) { + return val / 12.92; + } + + return sign * (((abs + 0.055) / 1.055) ** 2.4); + }); + }, + formats: { + "rgb": { + coords: coordGrammar, + }, + "rgb_number": { + name: "rgb", + commas: true, + coords: coordGrammarNumber, + noAlpha: true, + }, + "color": { /* use defaults */ }, + "rgba": { + coords: coordGrammar, + commas: true, + lastAlpha: true, + }, + "rgba_number": { + name: "rgba", + commas: true, + coords: coordGrammarNumber + }, + "hex": { + type: "custom", + toGamut: true, + test: str => /^#([a-f0-9]{3,4}){1,2}$/i.test(str), + parse (str) { + if (str.length <= 5) { + // #rgb or #rgba, duplicate digits + str = str.replace(/[a-f0-9]/gi, "$&$&"); + } + + let rgba = []; + str.replace(/[a-f0-9]{2}/gi, component => { + rgba.push(parseInt(component, 16) / 255); + }); + + return { + spaceId: "srgb", + coords: rgba.slice(0, 3), + alpha: rgba.slice(3)[0] + }; + }, + serialize: (coords, alpha, { + collapse = true // collapse to 3-4 digit hex when possible? + } = {}) => { + if (alpha < 1) { + coords.push(alpha); + } + + coords = coords.map(c => Math.round(c * 255)); + + let collapsible = collapse && coords.every(c => c % 17 === 0); + + let hex = coords.map(c => { + if (collapsible) { + return (c / 17).toString(16); + } + + return c.toString(16).padStart(2, "0"); + }).join(""); + + return "#" + hex; + } + }, + "keyword": { + type: "custom", + test: str => /^[a-z]+$/i.test(str), + parse (str) { + str = str.toLowerCase(); + let ret = {spaceId: "srgb", coords: null, alpha: 1}; + + if (str === "transparent") { + ret.coords = KEYWORDS.black; + ret.alpha = 0; + } + else { + ret.coords = KEYWORDS[str]; + } + + if (ret.coords) { + return ret; + } + } + }, + } +}); + +var P3 = new RGBColorSpace({ + id: "p3", + name: "P3", + base: P3Linear, + // Gamma encoding/decoding is the same as sRGB + fromBase: sRGB.fromBase, + toBase: sRGB.toBase, + formats: { + color: { + id: "display-p3", + } + }, +}); + +// Default space for CSS output. Code in Color.js makes this wider if there's a DOM available +defaults.display_space = sRGB; + +let supportsNone; + +if (typeof CSS !== "undefined" && CSS.supports) { + // Find widest supported color space for CSS + for (let space of [lab, REC2020, P3]) { + let coords = space.getMinCoords(); + let color = {space, coords, alpha: 1}; + let str = serialize(color); + + if (CSS.supports("color", str)) { + defaults.display_space = space; + break; + } + } +} + +/** + * Returns a serialization of the color that can actually be displayed in the browser. + * If the default serialization can be displayed, it is returned. + * Otherwise, the color is converted to Lab, REC2020, or P3, whichever is the widest supported. + * In Node.js, this is basically equivalent to `serialize()` but returns a `String` object instead. + * + * @export + * @param {{space, coords} | Color | string} color + * @param {*} [options={}] Options to be passed to serialize() + * @param {ColorSpace | string} [options.space = defaults.display_space] Color space to use for serialization if default is not supported + * @returns {String} String object containing the serialized color with a color property containing the converted color (or the original, if no conversion was necessary) + */ +function display (color, {space = defaults.display_space, ...options} = {}) { + let ret = serialize(color, options); + + if (typeof CSS === "undefined" || CSS.supports("color", ret) || !defaults.display_space) { + ret = new String(ret); + ret.color = color; + } + else { + // If we're here, what we were about to output is not supported + let fallbackColor = color; + + // First, check if the culprit is none values + let hasNone = color.coords.some(isNone) || isNone(color.alpha); + + if (hasNone) { + // Does the browser support none values? + if (!(supportsNone ??= CSS.supports("color", "hsl(none 50% 50%)"))) { + // Nope, try again without none + fallbackColor = clone(color); + fallbackColor.coords = fallbackColor.coords.map(skipNone); + fallbackColor.alpha = skipNone(fallbackColor.alpha); + + ret = serialize(fallbackColor, options); + + if (CSS.supports("color", ret)) { + // We're done, now it's supported + ret = new String(ret); + ret.color = fallbackColor; + return ret; + } + } + } + + // If we're here, the color function is not supported + // Fall back to fallback space + fallbackColor = to(fallbackColor, space); + ret = new String(serialize(fallbackColor, options)); + ret.color = fallbackColor; + } + + return ret; +} + +function equals (color1, color2) { + color1 = getColor(color1); + color2 = getColor(color2); + + return color1.space === color2.space + && color1.alpha === color2.alpha + && color1.coords.every((c, i) => c === color2.coords[i]); +} + +/** + * Relative luminance + */ + +function getLuminance (color) { + return get(color, [xyz_d65, "y"]); +} + +function setLuminance (color, value) { + set(color, [xyz_d65, "y"], value); +} + +function register$2 (Color) { + Object.defineProperty(Color.prototype, "luminance", { + get () { + return getLuminance(this); + }, + set (value) { + setLuminance(this, value); + } + }); +} + +var luminance = /*#__PURE__*/Object.freeze({ + __proto__: null, + getLuminance: getLuminance, + register: register$2, + setLuminance: setLuminance +}); + +// WCAG 2.0 contrast https://www.w3.org/TR/WCAG20-TECHS/G18.html +// Simple contrast, with fixed 5% viewing flare contribution +// Symmetric, does not matter which is foreground and which is background + + +function contrastWCAG21 (color1, color2) { + color1 = getColor(color1); + color2 = getColor(color2); + + let Y1 = Math.max(getLuminance(color1), 0); + let Y2 = Math.max(getLuminance(color2), 0); + + if (Y2 > Y1) { + [Y1, Y2] = [Y2, Y1]; + } + + return (Y1 + .05) / (Y2 + .05); +} + +// APCA 0.0.98G +// https://github.com/Myndex/apca-w3 +// see also https://github.com/w3c/silver/issues/643 + + +// exponents +const normBG = 0.56; +const normTXT = 0.57; +const revTXT = 0.62; +const revBG = 0.65; + +// clamps +const blkThrs = 0.022; +const blkClmp = 1.414; +const loClip = 0.1; +const deltaYmin = 0.0005; + +// scalers +// see https://github.com/w3c/silver/issues/645 +const scaleBoW = 1.14; +const loBoWoffset = 0.027; +const scaleWoB = 1.14; + +function fclamp (Y) { + if (Y >= blkThrs) { + return Y; + } + return Y + (blkThrs - Y) ** blkClmp; +} + +function linearize (val) { + let sign = val < 0 ? -1 : 1; + let abs = Math.abs(val); + return sign * Math.pow(abs, 2.4); +} + +// Not symmetric, requires a foreground (text) color, and a background color +function contrastAPCA (background, foreground) { + foreground = getColor(foreground); + background = getColor(background); + + let S; + let C; + let Sapc; + + // Myndex as-published, assumes sRGB inputs + let R, G, B; + + foreground = to(foreground, "srgb"); + // Should these be clamped to in-gamut values? + + // Calculates "screen luminance" with non-standard simple gamma EOTF + // weights should be from CSS Color 4, not the ones here which are via Myndex and copied from Lindbloom + [R, G, B] = foreground.coords; + let lumTxt = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.0721750; + + background = to(background, "srgb"); + [R, G, B] = background.coords; + let lumBg = linearize(R) * 0.2126729 + linearize(G) * 0.7151522 + linearize(B) * 0.0721750; + + // toe clamping of very dark values to account for flare + let Ytxt = fclamp(lumTxt); + let Ybg = fclamp(lumBg); + + // are we "Black on White" (dark on light), or light on dark? + let BoW = Ybg > Ytxt; + + // why is this a delta, when Y is not perceptually uniform? + // Answer: it is a noise gate, see + // https://github.com/LeaVerou/color.js/issues/208 + if (Math.abs(Ybg - Ytxt) < deltaYmin) { + C = 0; + } + else { + if (BoW) { + // dark text on light background + S = Ybg ** normBG - Ytxt ** normTXT; + C = S * scaleBoW; + } + else { + // light text on dark background + S = Ybg ** revBG - Ytxt ** revTXT; + C = S * scaleWoB; + } + } + if (Math.abs(C) < loClip) { + Sapc = 0; + } + else if (C > 0) { + // not clear whether Woffset is loBoWoffset or loWoBoffset + // but they have the same value + Sapc = C - loBoWoffset; + } + else { + Sapc = C + loBoWoffset; + } + + return Sapc * 100; +} + +// Michelson luminance contrast +// the relation between the spread and the sum of the two luminances +// Symmetric, does not matter which is foreground and which is background +// No black level compensation for flare. + + +function contrastMichelson (color1, color2) { + color1 = getColor(color1); + color2 = getColor(color2); + + let Y1 = Math.max(getLuminance(color1), 0); + let Y2 = Math.max(getLuminance(color2), 0); + + if (Y2 > Y1) { + [Y1, Y2] = [Y2, Y1]; + } + + let denom = (Y1 + Y2); + return denom === 0 ? 0 : (Y1 - Y2) / denom; +} + +// Weber luminance contrast +// The difference between the two luminances divided by the lower luminance +// Symmetric, does not matter which is foreground and which is background +// No black level compensation for flare. + + +// the darkest sRGB color above black is #000001 and this produces +// a plain Weber contrast of ~45647. +// So, setting the divide-by-zero result at 50000 is a reasonable +// max clamp for the plain Weber +const max = 50000; + +function contrastWeber (color1, color2) { + color1 = getColor(color1); + color2 = getColor(color2); + + let Y1 = Math.max(getLuminance(color1), 0); + let Y2 = Math.max(getLuminance(color2), 0); + + if (Y2 > Y1) { + [Y1, Y2] = [Y2, Y1]; + } + + return Y2 === 0 ? max : (Y1 - Y2) / Y2; +} + +// CIE Lightness difference, as used by Google Material Design +// Google HCT Tone is the same as CIE Lightness +// https://material.io/blog/science-of-color-design + + +function contrastLstar (color1, color2) { + color1 = getColor(color1); + color2 = getColor(color2); + + let L1 = get(color1, [lab, "l"]); + let L2 = get(color2, [lab, "l"]); + + return Math.abs(L1 - L2); +} + +// κ * ε = 2^3 = 8 +const ε$3 = 216 / 24389; // 6^3/29^3 == (24/116)^3 +const ε3 = 24 / 116; +const κ$2 = 24389 / 27; // 29^3/3^3 + +let white$1 = WHITES.D65; + +var lab_d65 = new ColorSpace({ + id: "lab-d65", + name: "Lab D65", + coords: { + l: { + refRange: [0, 100], + name: "Lightness" + }, + a: { + refRange: [-125, 125] + }, + b: { + refRange: [-125, 125] + } + }, + + // Assuming XYZ is relative to D65, convert to CIE Lab + // from CIE standard, which now defines these as a rational fraction + white: white$1, + + base: xyz_d65, + // Convert D65-adapted XYZ to Lab + // CIE 15.3:2004 section 8.2.1.1 + fromBase (XYZ) { + // compute xyz, which is XYZ scaled relative to reference white + let xyz = XYZ.map((value, i) => value / white$1[i]); + + // now compute f + let f = xyz.map(value => value > ε$3 ? Math.cbrt(value) : (κ$2 * value + 16) / 116); + + return [ + (116 * f[1]) - 16, // L + 500 * (f[0] - f[1]), // a + 200 * (f[1] - f[2]) // b + ]; + }, + // Convert Lab to D65-adapted XYZ + // Same result as CIE 15.3:2004 Appendix D although the derivation is different + // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + toBase (Lab) { + // compute f, starting with the luminance-related term + let f = []; + f[1] = (Lab[0] + 16) / 116; + f[0] = Lab[1] / 500 + f[1]; + f[2] = f[1] - Lab[2] / 200; + + // compute xyz + let xyz = [ + f[0] > ε3 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ$2, + Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ$2, + f[2] > ε3 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ$2 + ]; + + // Compute XYZ by scaling xyz by reference white + return xyz.map((value, i) => value * white$1[i]); + }, + + formats: { + "lab-d65": { + coords: [" | ", " | [-1,1]", " | [-1,1]"], + } + } +}); + +// Delta Phi Star perceptual lightness contrast +// See https://github.com/Myndex/deltaphistar +// The (difference between two Lstars each raised to phi) raised to (1/phi) +// Symmetric, does not matter which is foreground and which is background + + +const phi = Math.pow(5, 0.5) * 0.5 + 0.5; // Math.phi can be used if Math.js + +function contrastDeltaPhi (color1, color2) { + color1 = getColor(color1); + color2 = getColor(color2); + + let Lstr1 = get(color1, [lab_d65, "l"]); + let Lstr2 = get(color2, [lab_d65, "l"]); + + let deltaPhiStar = Math.abs(Math.pow(Lstr1, phi) - Math.pow(Lstr2, phi)); + + let contrast = Math.pow(deltaPhiStar, (1 / phi)) * Math.SQRT2 - 40; + + return (contrast < 7.5) ? 0.0 : contrast ; +} + +var contrastMethods = /*#__PURE__*/Object.freeze({ + __proto__: null, + contrastAPCA: contrastAPCA, + contrastDeltaPhi: contrastDeltaPhi, + contrastLstar: contrastLstar, + contrastMichelson: contrastMichelson, + contrastWCAG21: contrastWCAG21, + contrastWeber: contrastWeber +}); + +function contrast (background, foreground, o = {}) { + if (isString(o)) { + o = {algorithm: o}; + } + + let {algorithm, ...rest} = o; + + if (!algorithm) { + let algorithms = Object.keys(contrastMethods).map(a => a.replace(/^contrast/, "")).join(", "); + throw new TypeError(`contrast() function needs a contrast algorithm. Please specify one of: ${algorithms}`); + } + + background = getColor(background); + foreground = getColor(foreground); + + for (let a in contrastMethods) { + if ("contrast" + algorithm.toLowerCase() === a.toLowerCase()) { + return contrastMethods[a](background, foreground, rest); + } + } + + throw new TypeError(`Unknown contrast algorithm: ${algorithm}`); +} + +// Chromaticity coordinates +function uv (color) { + let [X, Y, Z] = getAll(color, xyz_d65); + let denom = X + 15 * Y + 3 * Z; + return [4 * X / denom, 9 * Y / denom]; +} + +function xy (color) { + let [X, Y, Z] = getAll(color, xyz_d65); + let sum = X + Y + Z; + return [X / sum, Y / sum]; +} + +function register$1 (Color) { + // no setters, as lightness information is lost + // when converting color to chromaticity + Object.defineProperty(Color.prototype, "uv", { + get () { + return uv(this); + } + }); + + Object.defineProperty(Color.prototype, "xy", { + get () { + return xy(this); + } + }); +} + +var chromaticity = /*#__PURE__*/Object.freeze({ + __proto__: null, + register: register$1, + uv: uv, + xy: xy +}); + +function deltaE (c1, c2, o = {}) { + if (isString(o)) { + o = {method: o}; + } + + let {method = defaults.deltaE, ...rest} = o; + + c1 = getColor(c1); + c2 = getColor(c2); + + for (let m in deltaEMethods) { + if ("deltae" + method.toLowerCase() === m.toLowerCase()) { + return deltaEMethods[m](c1, c2, rest); + } + } + + throw new TypeError(`Unknown deltaE method: ${method}`); +} + +function lighten (color, amount = .25) { + let space = ColorSpace.get("oklch", "lch"); + let lightness = [space, "l"]; + return set(color, lightness, l => l * (1 + amount)); +} + +function darken (color, amount = .25) { + let space = ColorSpace.get("oklch", "lch"); + let lightness = [space, "l"]; + return set(color, lightness, l => l * (1 - amount)); +} + +var variations = /*#__PURE__*/Object.freeze({ + __proto__: null, + darken: darken, + lighten: lighten +}); + +/** + * Functions related to color interpolation + */ + +/** + * Return an intermediate color between two colors + * Signatures: mix(c1, c2, p, options) + * mix(c1, c2, options) + * mix(color) + * @param {Color | string} c1 The first color + * @param {Color | string} [c2] The second color + * @param {number} [p=.5] A 0-1 percentage where 0 is c1 and 1 is c2 + * @param {Object} [o={}] + * @return {Color} + */ +function mix (c1, c2, p = .5, o = {}) { + [c1, c2] = [getColor(c1), getColor(c2)]; + + if (type(p) === "object") { + [p, o] = [.5, p]; + } + + let r = range(c1, c2, o); + return r(p); +} + +/** + * + * @param {Color | string | Function} c1 The first color or a range + * @param {Color | string} [c2] The second color if c1 is not a range + * @param {Object} [options={}] + * @return {Color[]} + */ +function steps (c1, c2, options = {}) { + let colorRange; + + if (isRange(c1)) { + // Tweaking existing range + [colorRange, options] = [c1, c2]; + [c1, c2] = colorRange.rangeArgs.colors; + } + + let { + maxDeltaE, deltaEMethod, + steps = 2, maxSteps = 1000, + ...rangeOptions + } = options; + + if (!colorRange) { + [c1, c2] = [getColor(c1), getColor(c2)]; + colorRange = range(c1, c2, rangeOptions); + } + + let totalDelta = deltaE(c1, c2); + let actualSteps = maxDeltaE > 0 ? Math.max(steps, Math.ceil(totalDelta / maxDeltaE) + 1) : steps; + let ret = []; + + if (maxSteps !== undefined) { + actualSteps = Math.min(actualSteps, maxSteps); + } + + if (actualSteps === 1) { + ret = [{p: .5, color: colorRange(.5)}]; + } + else { + let step = 1 / (actualSteps - 1); + ret = Array.from({length: actualSteps}, (_, i) => { + let p = i * step; + return {p, color: colorRange(p)}; + }); + } + + if (maxDeltaE > 0) { + // Iterate over all stops and find max deltaE + let maxDelta = ret.reduce((acc, cur, i) => { + if (i === 0) { + return 0; + } + + let ΔΕ = deltaE(cur.color, ret[i - 1].color, deltaEMethod); + return Math.max(acc, ΔΕ); + }, 0); + + while (maxDelta > maxDeltaE) { + // Insert intermediate stops and measure maxDelta again + // We need to do this for all pairs, otherwise the midpoint shifts + maxDelta = 0; + + for (let i = 1; (i < ret.length) && (ret.length < maxSteps); i++) { + let prev = ret[i - 1]; + let cur = ret[i]; + + let p = (cur.p + prev.p) / 2; + let color = colorRange(p); + maxDelta = Math.max(maxDelta, deltaE(color, prev.color), deltaE(color, cur.color)); + ret.splice(i, 0, {p, color: colorRange(p)}); + i++; + } + } + } + + ret = ret.map(a => a.color); + + return ret; +} + +/** + * Interpolate to color2 and return a function that takes a 0-1 percentage + * @param {Color | string | Function} color1 The first color or an existing range + * @param {Color | string} [color2] If color1 is a color, this is the second color + * @param {Object} [options={}] + * @returns {Function} A function that takes a 0-1 percentage and returns a color + */ +function range (color1, color2, options = {}) { + if (isRange(color1)) { + // Tweaking existing range + let [r, options] = [color1, color2]; + + return range(...r.rangeArgs.colors, {...r.rangeArgs.options, ...options}); + } + + let {space, outputSpace, progression, premultiplied} = options; + + color1 = getColor(color1); + color2 = getColor(color2); + + // Make sure we're working on copies of these colors + color1 = clone(color1); + color2 = clone(color2); + + let rangeArgs = {colors: [color1, color2], options}; + + if (space) { + space = ColorSpace.get(space); + } + else { + space = ColorSpace.registry[defaults.interpolationSpace] || color1.space; + } + + outputSpace = outputSpace ? ColorSpace.get(outputSpace) : space; + + color1 = to(color1, space); + color2 = to(color2, space); + + // Gamut map to avoid areas of flat color + color1 = toGamut(color1); + color2 = toGamut(color2); + + // Handle hue interpolation + // See https://github.com/w3c/csswg-drafts/issues/4735#issuecomment-635741840 + if (space.coords.h && space.coords.h.type === "angle") { + let arc = options.hue = options.hue || "shorter"; + + let hue = [space, "h"]; + let [θ1, θ2] = [get(color1, hue), get(color2, hue)]; + // Undefined hues must be evaluated before hue fix-up to properly + // calculate hue arcs between undefined and defined hues. + // See https://github.com/w3c/csswg-drafts/issues/9436#issuecomment-1746957545 + if (isNaN(θ1) && !isNaN(θ2)) { + θ1 = θ2; + } + else if (isNaN(θ2) && !isNaN(θ1)) { + θ2 = θ1; + } + [θ1, θ2] = adjust(arc, [θ1, θ2]); + set(color1, hue, θ1); + set(color2, hue, θ2); + } + + if (premultiplied) { + // not coping with polar spaces yet + color1.coords = color1.coords.map(c => c * color1.alpha); + color2.coords = color2.coords.map(c => c * color2.alpha); + } + + return Object.assign(p => { + p = progression ? progression(p) : p; + let coords = color1.coords.map((start, i) => { + let end = color2.coords[i]; + return interpolate(start, end, p); + }); + + let alpha = interpolate(color1.alpha, color2.alpha, p); + let ret = {space, coords, alpha}; + + if (premultiplied) { + // undo premultiplication + ret.coords = ret.coords.map(c => c / alpha); + } + + if (outputSpace !== space) { + ret = to(ret, outputSpace); + } + + return ret; + }, { + rangeArgs + }); +} + +function isRange (val) { + return type(val) === "function" && !!val.rangeArgs; +} + +defaults.interpolationSpace = "lab"; + +function register (Color) { + Color.defineFunction("mix", mix, {returns: "color"}); + Color.defineFunction("range", range, {returns: "function"}); + Color.defineFunction("steps", steps, {returns: "array"}); +} + +var interpolation = /*#__PURE__*/Object.freeze({ + __proto__: null, + isRange: isRange, + mix: mix, + range: range, + register: register, + steps: steps +}); + +var HSL = new ColorSpace({ + id: "hsl", + name: "HSL", + coords: { + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + }, + s: { + range: [0, 100], + name: "Saturation" + }, + l: { + range: [0, 100], + name: "Lightness" + } + }, + + base: sRGB, + + // Adapted from https://drafts.csswg.org/css-color-4/better-rgbToHsl.js + fromBase: rgb => { + let max = Math.max(...rgb); + let min = Math.min(...rgb); + let [r, g, b] = rgb; + let [h, s, l] = [NaN, 0, (min + max) / 2]; + let d = max - min; + + if (d !== 0) { + s = (l === 0 || l === 1) ? 0 : (max - l) / Math.min(l, 1 - l); + + switch (max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; + } + + h = h * 60; + } + + // Very out of gamut colors can produce negative saturation + // If so, just rotate the hue by 180 and use a positive saturation + // see https://github.com/w3c/csswg-drafts/issues/9222 + if (s < 0) { + h += 180; + s = Math.abs(s); + } + + if (h >= 360) { + h -= 360; + } + + return [h, s * 100, l * 100]; + }, + + // Adapted from https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative + toBase: hsl => { + let [h, s, l] = hsl; + h = h % 360; + + if (h < 0) { + h += 360; + } + + s /= 100; + l /= 100; + + function f (n) { + let k = (n + h / 30) % 12; + let a = s * Math.min(l, 1 - l); + return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); + } + + return [f(0), f(8), f(4)]; + }, + + formats: { + "hsl": { + coords: [" | ", "", ""], + }, + "hsla": { + coords: [" | ", "", ""], + commas: true, + lastAlpha: true, + } + }, +}); + +// The Hue, Whiteness Blackness (HWB) colorspace +// See https://drafts.csswg.org/css-color-4/#the-hwb-notation +// Note that, like HSL, calculations are done directly on +// gamma-corrected sRGB values rather than linearising them first. + +var HSV = new ColorSpace({ + id: "hsv", + name: "HSV", + coords: { + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + }, + s: { + range: [0, 100], + name: "Saturation" + }, + v: { + range: [0, 100], + name: "Value" + } + }, + + base: HSL, + // https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion + fromBase (hsl) { + let [h, s, l] = hsl; + s /= 100; + l /= 100; + + let v = l + s * Math.min(l, 1 - l); + + return [ + h, // h is the same + v === 0 ? 0 : 200 * (1 - l / v), // s + 100 * v + ]; + }, + // https://en.wikipedia.org/wiki/HSL_and_HSV#Interconversion + toBase (hsv) { + let [h, s, v] = hsv; + + s /= 100; + v /= 100; + + let l = v * (1 - s / 2); + + return [ + h, // h is the same + (l === 0 || l === 1) ? 0 : ((v - l) / Math.min(l, 1 - l)) * 100, + l * 100 + ]; + } +}); + +// The Hue, Whiteness Blackness (HWB) colorspace +// See https://drafts.csswg.org/css-color-4/#the-hwb-notation +// Note that, like HSL, calculations are done directly on +// gamma-corrected sRGB values rather than linearising them first. + +var hwb = new ColorSpace({ + id: "hwb", + name: "HWB", + coords: { + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + }, + w: { + range: [0, 100], + name: "Whiteness" + }, + b: { + range: [0, 100], + name: "Blackness" + } + }, + + base: HSV, + fromBase (hsv) { + let [h, s, v] = hsv; + + return [h, v * (100 - s) / 100, 100 - v]; + }, + toBase (hwb) { + let [h, w, b] = hwb; + + // Now convert percentages to [0..1] + w /= 100; + b /= 100; + + // Achromatic check (white plus black >= 1) + let sum = w + b; + if (sum >= 1) { + let gray = w / sum; + return [h, 0, gray * 100]; + } + + let v = (1 - b); + let s = (v === 0) ? 0 : 1 - w / v; + return [h, s * 100, v * 100]; + }, + + formats: { + "hwb": { + coords: [" | ", "", ""], + } + } +}); + +// convert an array of linear-light a98-rgb values to CIE XYZ +// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html +// has greater numerical precision than section 4.3.5.3 of +// https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf +// but the values below were calculated from first principles +// from the chromaticity coordinates of R G B W +const toXYZ_M$2 = [ + [ 0.5766690429101305, 0.1855582379065463, 0.1882286462349947 ], + [ 0.29734497525053605, 0.6273635662554661, 0.07529145849399788 ], + [ 0.02703136138641234, 0.07068885253582723, 0.9913375368376388 ] +]; + +const fromXYZ_M$2 = [ + [ 2.0415879038107465, -0.5650069742788596, -0.34473135077832956 ], + [ -0.9692436362808795, 1.8759675015077202, 0.04155505740717557 ], + [ 0.013444280632031142, -0.11836239223101838, 1.0151749943912054 ] +]; + +var A98Linear = new RGBColorSpace({ + id: "a98rgb-linear", + name: "Linear Adobe® 98 RGB compatible", + white: "D65", + toXYZ_M: toXYZ_M$2, + fromXYZ_M: fromXYZ_M$2 +}); + +var a98rgb = new RGBColorSpace({ + id: "a98rgb", + name: "Adobe® 98 RGB compatible", + base: A98Linear, + toBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)), + fromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)), + formats: { + color: { + id: "a98-rgb" + } + }, +}); + +// convert an array of prophoto-rgb values to CIE XYZ +// using D50 (so no chromatic adaptation needed afterwards) +// matrix cannot be expressed in rational form, but is calculated to 64 bit accuracy +// see https://github.com/w3c/csswg-drafts/issues/7675 +const toXYZ_M$1 = [ + [ 0.79776664490064230, 0.13518129740053308, 0.03134773412839220 ], + [ 0.28807482881940130, 0.71183523424187300, 0.00008993693872564 ], + [ 0.00000000000000000, 0.00000000000000000, 0.82510460251046020 ] +]; + +const fromXYZ_M$1 = [ + [ 1.34578688164715830, -0.25557208737979464, -0.05110186497554526 ], + [ -0.54463070512490190, 1.50824774284514680, 0.02052744743642139 ], + [ 0.00000000000000000, 0.00000000000000000, 1.21196754563894520 ] +]; + +var ProPhotoLinear = new RGBColorSpace({ + id: "prophoto-linear", + name: "Linear ProPhoto", + white: "D50", + base: XYZ_D50, + toXYZ_M: toXYZ_M$1, + fromXYZ_M: fromXYZ_M$1 +}); + +const Et = 1 / 512; +const Et2 = 16 / 512; + +var prophoto = new RGBColorSpace({ + id: "prophoto", + name: "ProPhoto", + base: ProPhotoLinear, + toBase (RGB) { + // Transfer curve is gamma 1.8 with a small linear portion + return RGB.map(v => v < Et2 ? v / 16 : v ** 1.8); + }, + fromBase (RGB) { + return RGB.map(v => v >= Et ? v ** (1 / 1.8) : 16 * v); + }, + formats: { + color: { + id: "prophoto-rgb" + } + }, +}); + +var oklch = new ColorSpace({ + id: "oklch", + name: "Oklch", + coords: { + l: { + refRange: [0, 1], + name: "Lightness" + }, + c: { + refRange: [0, 0.4], + name: "Chroma" + }, + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + } + }, + white: "D65", + + base: OKLab, + fromBase (oklab) { + // Convert to polar form + let [L, a, b] = oklab; + let h; + const ε = 0.0002; // chromatic components much smaller than a,b + + if (Math.abs(a) < ε && Math.abs(b) < ε) { + h = NaN; + } + else { + h = Math.atan2(b, a) * 180 / Math.PI; + } + + return [ + L, // OKLab L is still L + Math.sqrt(a ** 2 + b ** 2), // Chroma + constrain(h) // Hue, in degrees [0 to 360) + ]; + }, + // Convert from polar form + toBase (oklch) { + let [L, C, h] = oklch; + let a, b; + + // check for NaN hue + if (isNaN(h)) { + a = 0; + b = 0; + } + else { + a = C * Math.cos(h * Math.PI / 180); + b = C * Math.sin(h * Math.PI / 180); + } + + return [ L, a, b ]; + }, + + formats: { + "oklch": { + coords: [" | ", " | [0,1]", " | "], + } + } +}); + +let white = WHITES.D65; + +const ε$2 = 216 / 24389; // 6^3/29^3 == (24/116)^3 +const κ$1 = 24389 / 27; // 29^3/3^3 +const [U_PRIME_WHITE, V_PRIME_WHITE] = uv({space: xyz_d65, coords: white}); + +var Luv = new ColorSpace({ + id: "luv", + name: "Luv", + coords: { + l: { + refRange: [0, 100], + name: "Lightness" + }, + // Reference ranges from https://facelessuser.github.io/coloraide/colors/luv/ + u: { + refRange: [-215, 215] + }, + v: { + refRange: [-215, 215] + } + }, + + white: white, + base: xyz_d65, + + // Convert D65-adapted XYZ to Luv + // https://en.wikipedia.org/wiki/CIELUV#The_forward_transformation + fromBase (XYZ) { + let xyz = [skipNone(XYZ[0]), skipNone(XYZ[1]), skipNone(XYZ[2])]; + let y = xyz[1]; + + let [up, vp] = uv({space: xyz_d65, coords: xyz}); + + // Protect against XYZ of [0, 0, 0] + if (!Number.isFinite(up) || !Number.isFinite(vp)) { + return [0, 0, 0]; + } + + let L = y <= ε$2 ? κ$1 * y : 116 * Math.cbrt(y) - 16; + return [ + L, + 13 * L * (up - U_PRIME_WHITE), + 13 * L * (vp - V_PRIME_WHITE) + ]; + }, + + // Convert Luv to D65-adapted XYZ + // https://en.wikipedia.org/wiki/CIELUV#The_reverse_transformation + toBase (Luv) { + let [L, u, v] = Luv; + + // Protect against division by zero and NaN Lightness + if (L === 0 || isNone(L)) { + return [0, 0, 0]; + } + + u = skipNone(u); + v = skipNone(v); + + let up = (u / (13 * L)) + U_PRIME_WHITE; + let vp = (v / (13 * L)) + V_PRIME_WHITE; + + let y = L <= 8 ? L / κ$1 : Math.pow((L + 16) / 116, 3); + + return [ + y * ((9 * up) / (4 * vp)), + y, + y * ((12 - 3 * up - 20 * vp) / (4 * vp)) + ]; + }, + + formats: { + color: { + id: "--luv", + coords: [" | ", " | [-1,1]", " | [-1,1]"] + } + }, +}); + +var LCHuv = new ColorSpace({ + id: "lchuv", + name: "LChuv", + coords: { + l: { + refRange: [0, 100], + name: "Lightness" + }, + c: { + refRange: [0, 220], + name: "Chroma" + }, + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + } + }, + + base: Luv, + fromBase (Luv) { + // Convert to polar form + let [L, u, v] = Luv; + let hue; + const ε = 0.02; + + if (Math.abs(u) < ε && Math.abs(v) < ε) { + hue = NaN; + } + else { + hue = Math.atan2(v, u) * 180 / Math.PI; + } + + return [ + L, // L is still L + Math.sqrt(u ** 2 + v ** 2), // Chroma + constrain(hue) // Hue, in degrees [0 to 360) + ]; + }, + toBase (LCH) { + // Convert from polar form + let [Lightness, Chroma, Hue] = LCH; + // Clamp any negative Chroma + if (Chroma < 0) { + Chroma = 0; + } + // Deal with NaN Hue + if (isNaN(Hue)) { + Hue = 0; + } + return [ + Lightness, // L is still L + Chroma * Math.cos(Hue * Math.PI / 180), // u + Chroma * Math.sin(Hue * Math.PI / 180) // v + ]; + }, + + formats: { + color: { + id: "--lchuv", + coords: [" | ", " | ", " | "], + } + } +}); + +/* +Adapted from: https://github.com/hsluv/hsluv-javascript/blob/14b49e6cf9a9137916096b8487a5372626b57ba4/src/hsluv.ts + +Copyright (c) 2012-2022 Alexei Boronine + +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. +*/ + + +const ε$1 = 216 / 24389; // 6^3/29^3 == (24/116)^3 +const κ = 24389 / 27; // 29^3/3^3 + +const m_r0 = fromXYZ_M$3[0][0]; +const m_r1 = fromXYZ_M$3[0][1]; +const m_r2 = fromXYZ_M$3[0][2]; +const m_g0 = fromXYZ_M$3[1][0]; +const m_g1 = fromXYZ_M$3[1][1]; +const m_g2 = fromXYZ_M$3[1][2]; +const m_b0 = fromXYZ_M$3[2][0]; +const m_b1 = fromXYZ_M$3[2][1]; +const m_b2 = fromXYZ_M$3[2][2]; + +function distanceFromOriginAngle (slope, intercept, angle) { + const d = intercept / (Math.sin(angle) - slope * Math.cos(angle)); + return d < 0 ? Infinity : d; +} + +function calculateBoundingLines (l) { + const sub1 = Math.pow(l + 16, 3) / 1560896; + const sub2 = sub1 > ε$1 ? sub1 : l / κ; + const s1r = sub2 * (284517 * m_r0 - 94839 * m_r2); + const s2r = sub2 * (838422 * m_r2 + 769860 * m_r1 + 731718 * m_r0); + const s3r = sub2 * (632260 * m_r2 - 126452 * m_r1); + const s1g = sub2 * (284517 * m_g0 - 94839 * m_g2); + const s2g = sub2 * (838422 * m_g2 + 769860 * m_g1 + 731718 * m_g0); + const s3g = sub2 * (632260 * m_g2 - 126452 * m_g1); + const s1b = sub2 * (284517 * m_b0 - 94839 * m_b2); + const s2b = sub2 * (838422 * m_b2 + 769860 * m_b1 + 731718 * m_b0); + const s3b = sub2 * (632260 * m_b2 - 126452 * m_b1); + + return { + r0s: s1r / s3r, + r0i: s2r * l / s3r, + r1s: s1r / (s3r + 126452), + r1i: (s2r - 769860) * l / (s3r + 126452), + g0s: s1g / s3g, + g0i: s2g * l / s3g, + g1s: s1g / (s3g + 126452), + g1i: (s2g - 769860) * l / (s3g + 126452), + b0s: s1b / s3b, + b0i: s2b * l / s3b, + b1s: s1b / (s3b + 126452), + b1i: (s2b - 769860) * l / (s3b + 126452) + }; +} + +function calcMaxChromaHsluv (lines, h) { + const hueRad = h / 360 * Math.PI * 2; + const r0 = distanceFromOriginAngle(lines.r0s, lines.r0i, hueRad); + const r1 = distanceFromOriginAngle(lines.r1s, lines.r1i, hueRad); + const g0 = distanceFromOriginAngle(lines.g0s, lines.g0i, hueRad); + const g1 = distanceFromOriginAngle(lines.g1s, lines.g1i, hueRad); + const b0 = distanceFromOriginAngle(lines.b0s, lines.b0i, hueRad); + const b1 = distanceFromOriginAngle(lines.b1s, lines.b1i, hueRad); + + return Math.min(r0, r1, g0, g1, b0, b1); +} + +var hsluv = new ColorSpace({ + id: "hsluv", + name: "HSLuv", + coords: { + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + }, + s: { + refRange: [0, 100], + name: "Saturation" + }, + l: { + refRange: [0, 100], + name: "Lightness" + } + }, + + base: LCHuv, + gamutSpace: sRGB, + + // Convert LCHuv to HSLuv + fromBase (lch) { + let [l, c, h] = [skipNone(lch[0]), skipNone(lch[1]), skipNone(lch[2])]; + let s; + + if (l > 99.9999999) { + s = 0; + l = 100; + } + else if (l < 0.00000001) { + s = 0; + l = 0; + } + else { + let lines = calculateBoundingLines(l); + let max = calcMaxChromaHsluv(lines, h); + s = c / max * 100; + } + + return [h, s, l]; + }, + + // Convert HSLuv to LCHuv + toBase (hsl) { + let [h, s, l] = [skipNone(hsl[0]), skipNone(hsl[1]), skipNone(hsl[2])]; + let c; + + if (l > 99.9999999) { + l = 100; + c = 0; + } + else if (l < 0.00000001) { + l = 0; + c = 0; + } + else { + let lines = calculateBoundingLines(l); + let max = calcMaxChromaHsluv(lines, h); + c = max / 100 * s; + } + + return [l, c, h]; + }, + + formats: { + color: { + id: "--hsluv", + coords: [" | ", " | ", " | "] + } + }, +}); + +/* +Adapted from: https://github.com/hsluv/hsluv-javascript/blob/14b49e6cf9a9137916096b8487a5372626b57ba4/src/hsluv.ts + +Copyright (c) 2012-2022 Alexei Boronine + +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. +*/ + + +fromXYZ_M$3[0][0]; +fromXYZ_M$3[0][1]; +fromXYZ_M$3[0][2]; +fromXYZ_M$3[1][0]; +fromXYZ_M$3[1][1]; +fromXYZ_M$3[1][2]; +fromXYZ_M$3[2][0]; +fromXYZ_M$3[2][1]; +fromXYZ_M$3[2][2]; + +function distanceFromOrigin (slope, intercept) { + return Math.abs(intercept) / Math.sqrt(Math.pow(slope, 2) + 1); +} + +function calcMaxChromaHpluv (lines) { + let r0 = distanceFromOrigin(lines.r0s, lines.r0i); + let r1 = distanceFromOrigin(lines.r1s, lines.r1i); + let g0 = distanceFromOrigin(lines.g0s, lines.g0i); + let g1 = distanceFromOrigin(lines.g1s, lines.g1i); + let b0 = distanceFromOrigin(lines.b0s, lines.b0i); + let b1 = distanceFromOrigin(lines.b1s, lines.b1i); + + return Math.min(r0, r1, g0, g1, b0, b1); +} + +var hpluv = new ColorSpace({ + id: "hpluv", + name: "HPLuv", + coords: { + h: { + refRange: [0, 360], + type: "angle", + name: "Hue" + }, + s: { + range: [0, 100], + name: "Saturation" + }, + l: { + range: [0, 100], + name: "Lightness" + } + }, + + base: LCHuv, + gamutSpace: "self", + + // Convert LCHuv to HPLuv + fromBase (lch) { + let [l, c, h] = [skipNone(lch[0]), skipNone(lch[1]), skipNone(lch[2])]; + let s; + + if (l > 99.9999999) { + s = 0; + l = 100; + } + else if (l < 0.00000001) { + s = 0; + l = 0; + } + else { + let lines = calculateBoundingLines(l); + let max = calcMaxChromaHpluv(lines); + s = c / max * 100; + } + return [h, s, l]; + }, + + // Convert HPLuv to LCHuv + toBase (hsl) { + let [h, s, l] = [skipNone(hsl[0]), skipNone(hsl[1]), skipNone(hsl[2])]; + let c; + + if (l > 99.9999999) { + l = 100; + c = 0; + } + else if (l < 0.00000001) { + l = 0; + c = 0; + } + else { + let lines = calculateBoundingLines(l); + let max = calcMaxChromaHpluv(lines); + c = max / 100 * s; + } + + return [l, c, h]; + }, + + formats: { + color: { + id: "--hpluv", + coords: [" | ", " | ", " | "] + } + }, +}); + +const Yw = 203; // absolute luminance of media white, cd/m² +const n = 2610 / (2 ** 14); +const ninv = (2 ** 14) / 2610; +const m = 2523 / (2 ** 5); +const minv = (2 ** 5) / 2523; +const c1 = 3424 / (2 ** 12); +const c2 = 2413 / (2 ** 7); +const c3 = 2392 / (2 ** 7); + +var rec2100Pq = new RGBColorSpace({ + id: "rec2100pq", + name: "REC.2100-PQ", + base: REC2020Linear, + toBase (RGB) { + // given PQ encoded component in range [0, 1] + // return media-white relative linear-light + return RGB.map(function (val) { + let x = ((Math.max(((val ** minv) - c1), 0) / (c2 - (c3 * (val ** minv)))) ** ninv); + return (x * 10000 / Yw); // luminance relative to diffuse white, [0, 70 or so]. + }); + }, + fromBase (RGB) { + // given media-white relative linear-light + // returnPQ encoded component in range [0, 1] + return RGB.map(function (val) { + let x = Math.max(val * Yw / 10000, 0); // absolute luminance of peak white is 10,000 cd/m². + let num = (c1 + (c2 * (x ** n))); + let denom = (1 + (c3 * (x ** n))); + + return ((num / denom) ** m); + }); + }, + formats: { + color: { + id: "rec2100-pq" + }, + }, +}); + +// FIXME see https://github.com/LeaVerou/color.js/issues/190 + +const a = 0.17883277; +const b = 0.28466892; // 1 - (4 * a) +const c = 0.55991073; // 0.5 - a * Math.log(4 *a) + +const scale = 3.7743; // Place 18% grey at HLG 0.38, so media white at 0.75 + +var rec2100Hlg = new RGBColorSpace({ + id: "rec2100hlg", + cssId: "rec2100-hlg", + name: "REC.2100-HLG", + referred: "scene", + + base: REC2020Linear, + toBase (RGB) { + // given HLG encoded component in range [0, 1] + // return media-white relative linear-light + return RGB.map(function (val) { + // first the HLG EOTF + // ITU-R BT.2390-10 p.30 section + // 6.3 The hybrid log-gamma electro-optical transfer function (EOTF) + // Then scale by 3 so media white is 1.0 + if (val <= 0.5) { + return (val ** 2) / 3 * scale; + } + return ((Math.exp((val - c) / a) + b) / 12) * scale; + }); + }, + fromBase (RGB) { + // given media-white relative linear-light + // where diffuse white is 1.0, + // return HLG encoded component in range [0, 1] + return RGB.map(function (val) { + // first scale to put linear-light media white at 1/3 + val /= scale; + // now the HLG OETF + // ITU-R BT.2390-10 p.23 + // 6.1 The hybrid log-gamma opto-electronic transfer function (OETF) + if (val <= 1 / 12) { + return Math.sqrt(3 * val); + } + return a * Math.log(12 * val - b) + c; + }); + }, + formats: { + color: { + id: "rec2100-hlg" + }, + }, +}); + +const CATs = {}; + +hooks.add("chromatic-adaptation-start", env => { + if (env.options.method) { + env.M = adapt(env.W1, env.W2, env.options.method); + } +}); + +hooks.add("chromatic-adaptation-end", env => { + if (!env.M) { + env.M = adapt(env.W1, env.W2, env.options.method); + } +}); + +function defineCAT ({id, toCone_M, fromCone_M}) { + // Use id, toCone_M, fromCone_M like variables + CATs[id] = arguments[0]; +} + +function adapt (W1, W2, id = "Bradford") { + // adapt from a source whitepoint or illuminant W1 + // to a destination whitepoint or illuminant W2, + // using the given chromatic adaptation transform (CAT) + // debugger; + let method = CATs[id]; + + let [ρs, γs, βs] = multiplyMatrices(method.toCone_M, W1); + let [ρd, γd, βd] = multiplyMatrices(method.toCone_M, W2); + + // all practical illuminants have non-zero XYZ so no division by zero can occur below + let scale = [ + [ρd / ρs, 0, 0 ], + [0, γd / γs, 0 ], + [0, 0, βd / βs] + ]; + // console.log({scale}); + + let scaled_cone_M = multiplyMatrices(scale, method.toCone_M); + let adapt_M = multiplyMatrices(method.fromCone_M, scaled_cone_M); + // console.log({scaled_cone_M, adapt_M}); + return adapt_M; +} + +defineCAT({ + id: "von Kries", + toCone_M: [ + [ 0.4002400, 0.7076000, -0.0808100 ], + [ -0.2263000, 1.1653200, 0.0457000 ], + [ 0.0000000, 0.0000000, 0.9182200 ] + ], + fromCone_M: [ + [ 1.8599363874558397, -1.1293816185800916, 0.21989740959619328 ], + [ 0.3611914362417676, 0.6388124632850422, -0.000006370596838649899 ], + [ 0, 0, 1.0890636230968613 ] + ] +}); + +defineCAT({ + id: "Bradford", + // Convert an array of XYZ values in the range 0.0 - 1.0 + // to cone fundamentals + toCone_M: [ + [ 0.8951000, 0.2664000, -0.1614000 ], + [ -0.7502000, 1.7135000, 0.0367000 ], + [ 0.0389000, -0.0685000, 1.0296000 ] + ], + // and back + fromCone_M: [ + [ 0.9869929054667121, -0.14705425642099013, 0.15996265166373122 ], + [ 0.4323052697233945, 0.5183602715367774, 0.049291228212855594 ], + [ -0.00852866457517732, 0.04004282165408486, 0.96848669578755 ] + ] +}); + +defineCAT({ + id: "CAT02", + // with complete chromatic adaptation to W2, so D = 1.0 + toCone_M: [ + [ 0.7328000, 0.4296000, -0.1624000 ], + [ -0.7036000, 1.6975000, 0.0061000 ], + [ 0.0030000, 0.0136000, 0.9834000 ] + ], + fromCone_M: [ + [ 1.0961238208355142, -0.27886900021828726, 0.18274517938277307 ], + [ 0.4543690419753592, 0.4735331543074117, 0.07209780371722911 ], + [ -0.009627608738429355, -0.00569803121611342, 1.0153256399545427 ] + ] +}); + +defineCAT({ + id: "CAT16", + toCone_M: [ + [ 0.401288, 0.650173, -0.051461 ], + [ -0.250268, 1.204414, 0.045854 ], + [ -0.002079, 0.048952, 0.953127 ] + ], + // the extra precision is needed to avoid roundtripping errors + fromCone_M: [ + [ 1.862067855087233, -1.0112546305316845, 0.14918677544445172 ], + [ 0.3875265432361372, 0.6214474419314753, -0.008973985167612521 ], + [ -0.01584149884933386, -0.03412293802851557, 1.0499644368778496 ] + ] +}); + +Object.assign(WHITES, { + // whitepoint values from ASTM E308-01 with 10nm spacing, 1931 2 degree observer + // all normalized to Y (luminance) = 1.00000 + // Illuminant A is a tungsten electric light, giving a very warm, orange light. + A: [1.09850, 1.00000, 0.35585], + + // Illuminant C was an early approximation to daylight: illuminant A with a blue filter. + C: [0.98074, 1.000000, 1.18232], + + // The daylight series of illuminants simulate natural daylight. + // The color temperature (in degrees Kelvin/100) ranges from + // cool, overcast daylight (D50) to bright, direct sunlight (D65). + D55: [0.95682, 1.00000, 0.92149], + D75: [0.94972, 1.00000, 1.22638], + + // Equal-energy illuminant, used in two-stage CAT16 + E: [1.00000, 1.00000, 1.00000], + + // The F series of illuminants represent fluorescent lights + F2: [0.99186, 1.00000, 0.67393], + F7: [0.95041, 1.00000, 1.08747], + F11: [1.00962, 1.00000, 0.64350], +}); + +// The ACES whitepoint +// see TB-2018-001 Derivation of the ACES White Point CIE Chromaticity Coordinates +// also https://github.com/ampas/aces-dev/blob/master/documents/python/TB-2018-001/aces_wp.py +// Similar to D60 +WHITES.ACES = [0.32168 / 0.33767, 1.00000, (1.00000 - 0.32168 - 0.33767) / 0.33767]; + +// convert an array of linear-light ACEScc values to CIE XYZ +const toXYZ_M = [ + [ 0.6624541811085053, 0.13400420645643313, 0.1561876870049078 ], + [ 0.27222871678091454, 0.6740817658111484, 0.05368951740793705 ], + [ -0.005574649490394108, 0.004060733528982826, 1.0103391003129971 ] +]; +const fromXYZ_M = [ + [ 1.6410233796943257, -0.32480329418479, -0.23642469523761225 ], + [ -0.6636628587229829, 1.6153315916573379, 0.016756347685530137 ], + [ 0.011721894328375376, -0.008284441996237409, 0.9883948585390215 ] +]; + +var ACEScg = new RGBColorSpace({ + id: "acescg", + name: "ACEScg", + + // ACEScg – A scene-referred, linear-light encoding of ACES Data + // https://docs.acescentral.com/specifications/acescg/ + // uses the AP1 primaries, see section 4.3.1 Color primaries + coords: { + r: { + range: [0, 65504], + name: "Red" + }, + g: { + range: [0, 65504], + name: "Green" + }, + b: { + range: [0, 65504], + name: "Blue" + } + }, + + referred: "scene", + + white: WHITES.ACES, + + toXYZ_M, + fromXYZ_M, + + formats: { + color: {} + }, +}); + +// export default Color; + +const ε = 2 ** -16; + +// the smallest value which, in the 32bit IEEE 754 float encoding, +// decodes as a non-negative value +const ACES_min_nonzero = -0.35828683; + +// brightest encoded value, decodes to 65504 +const ACES_cc_max = (Math.log2(65504) + 9.72) / 17.52; // 1.468 + +var acescc = new RGBColorSpace({ + id: "acescc", + name: "ACEScc", + // see S-2014-003 ACEScc – A Logarithmic Encoding of ACES Data + // https://docs.acescentral.com/specifications/acescc/ + // uses the AP1 primaries, see section 4.3.1 Color primaries + + // Appendix A: "Very small ACES scene referred values below 7 1/4 stops + // below 18% middle gray are encoded as negative ACEScc values. + // These values should be preserved per the encoding in Section 4.4 + // so that all positive ACES values are maintained." + coords: { + r: { + range: [ACES_min_nonzero, ACES_cc_max], + name: "Red" + }, + g: { + range: [ACES_min_nonzero, ACES_cc_max], + name: "Green" + }, + b: { + range: [ACES_min_nonzero, ACES_cc_max], + name: "Blue" + } + }, + referred: "scene", + + base: ACEScg, + // from section 4.4.2 Decoding Function + toBase (RGB) { + const low = (9.72 - 15) / 17.52; // -0.3014 + + return RGB.map(function (val) { + if (val <= low) { + return (2 ** ((val * 17.52) - 9.72) - ε) * 2; // very low values, below -0.3014 + } + else if (val < ACES_cc_max) { + return 2 ** ((val * 17.52) - 9.72); + } + else { // val >= ACES_cc_max + return 65504; + } + }); + }, + + // Non-linear encoding function from S-2014-003, section 4.4.1 Encoding Function + fromBase (RGB) { + return RGB.map(function (val) { + if (val <= 0) { + return (Math.log2(ε) + 9.72) / 17.52; // -0.3584 + } + else if (val < ε) { + return (Math.log2(ε + val * 0.5) + 9.72) / 17.52; + } + else { // val >= ε + return (Math.log2(val) + 9.72) / 17.52; + } + }); + }, + // encoded media white (rgb 1,1,1) => linear [ 222.861, 222.861, 222.861 ] + // encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857] + formats: { + color: {} + } +}); + +var spaces = /*#__PURE__*/Object.freeze({ + __proto__: null, + A98RGB: a98rgb, + A98RGB_Linear: A98Linear, + ACEScc: acescc, + ACEScg: ACEScg, + CAM16_JMh: cam16, + HCT: hct, + HPLuv: hpluv, + HSL: HSL, + HSLuv: hsluv, + HSV: HSV, + HWB: hwb, + ICTCP: ictcp, + JzCzHz: jzczhz, + Jzazbz: Jzazbz, + LCH: lch, + LCHuv: LCHuv, + Lab: lab, + Lab_D65: lab_d65, + Luv: Luv, + OKLCH: oklch, + OKLab: OKLab, + P3: P3, + P3_Linear: P3Linear, + ProPhoto: prophoto, + ProPhoto_Linear: ProPhotoLinear, + REC_2020: REC2020, + REC_2020_Linear: REC2020Linear, + REC_2100_HLG: rec2100Hlg, + REC_2100_PQ: rec2100Pq, + XYZ_ABS_D65: XYZ_Abs_D65, + XYZ_D50: XYZ_D50, + XYZ_D65: xyz_d65, + sRGB: sRGB, + sRGB_Linear: sRGBLinear +}); + +/** + * Class that represents a color + */ +class Color { + /** + * Creates an instance of Color. + * Signatures: + * - `new Color(stringToParse)` + * - `new Color(otherColor)` + * - `new Color({space, coords, alpha})` + * - `new Color(space, coords, alpha)` + * - `new Color(spaceId, coords, alpha)` + */ + constructor (...args) { + let color; + + if (args.length === 1) { + color = getColor(args[0]); + } + + let space, coords, alpha; + + if (color) { + space = color.space || color.spaceId; + coords = color.coords; + alpha = color.alpha; + } + else { + // default signature new Color(ColorSpace, array [, alpha]) + [space, coords, alpha] = args; + } + + Object.defineProperty(this, "space", { + value: ColorSpace.get(space), + writable: false, + enumerable: true, + configurable: true, // see note in https://262.ecma-international.org/8.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver + }); + + this.coords = coords ? coords.slice() : [0, 0, 0]; + + // Clamp alpha to [0, 1] + this.alpha = alpha > 1 || alpha === undefined ? 1 : (alpha < 0 ? 0 : alpha); + + // Convert "NaN" to NaN + for (let i = 0; i < this.coords.length; i++) { + if (this.coords[i] === "NaN") { + this.coords[i] = NaN; + } + } + + // Define getters and setters for each coordinate + for (let id in this.space.coords) { + Object.defineProperty(this, id, { + get: () => this.get(id), + set: value => this.set(id, value), + }); + } + } + + get spaceId () { + return this.space.id; + } + + clone () { + return new Color(this.space, this.coords, this.alpha); + } + + toJSON () { + return { + spaceId: this.spaceId, + coords: this.coords, + alpha: this.alpha + }; + } + + display (...args) { + let ret = display(this, ...args); + + // Convert color object to Color instance + ret.color = new Color(ret.color); + + return ret; + } + + /** + * Get a color from the argument passed + * Basically gets us the same result as new Color(color) but doesn't clone an existing color object + */ + static get (color, ...args) { + if (color instanceof Color) { + return color; + } + + return new Color(color, ...args); + } + + static defineFunction (name, code, o = code) { + let {instance = true, returns} = o; + + let func = function (...args) { + let ret = code(...args); + + if (returns === "color") { + ret = Color.get(ret); + } + else if (returns === "function") { + let f = ret; + ret = function (...args) { + let ret = f(...args); + return Color.get(ret); + }; + // Copy any function metadata + Object.assign(ret, f); + } + else if (returns === "array") { + ret = ret.map(c => Color.get(c)); + } + + return ret; + }; + + if (!(name in Color)) { + Color[name] = func; + } + + if (instance) { + Color.prototype[name] = function (...args) { + return func(this, ...args); + }; + } + } + + static defineFunctions (o) { + for (let name in o) { + Color.defineFunction(name, o[name], o[name]); + } + } + + static extend (exports) { + if (exports.register) { + exports.register(Color); + } + else { + // No register method, just add the module's functions + for (let name in exports) { + Color.defineFunction(name, exports[name]); + } + } + } +} + +Color.defineFunctions({ + get, + getAll, + set, + setAll, + to, + equals, + inGamut, + toGamut, + distance, + toString: serialize, +}); + +Object.assign(Color, { + util, + hooks, + WHITES, + Space: ColorSpace, + spaces: ColorSpace.registry, + parse, + + // Global defaults one may want to configure + defaults +}); + +for (let key of Object.keys(spaces)) { + ColorSpace.register(spaces[key]); +} + +/** + * This plugin defines getters and setters for color[spaceId] + * e.g. color.lch on *any* color gives us the lch coords + */ + +// Add space accessors to existing color spaces +for (let id in ColorSpace.registry) { + addSpaceAccessors(id, ColorSpace.registry[id]); +} + +// Add space accessors to color spaces not yet created +hooks.add("colorspace-init-end", space => { + addSpaceAccessors(space.id, space); + space.aliases?.forEach(alias => { + addSpaceAccessors(alias, space); + }); +}); + +function addSpaceAccessors (id, space) { + let propId = id.replace(/-/g, "_"); + + Object.defineProperty(Color.prototype, propId, { + // Convert coords to coords in another colorspace and return them + // Source colorspace: this.spaceId + // Target colorspace: id + get () { + let ret = this.getAll(id); + + if (typeof Proxy === "undefined") { + // If proxies are not supported, just return a static array + return ret; + } + + // Enable color.spaceId.coordName syntax + return new Proxy(ret, { + has: (obj, property) => { + try { + ColorSpace.resolveCoord([space, property]); + return true; + } + catch (e) {} + + return Reflect.has(obj, property); + }, + get: (obj, property, receiver) => { + if (property && typeof property !== "symbol" && !(property in obj)) { + let {index} = ColorSpace.resolveCoord([space, property]); + + if (index >= 0) { + return obj[index]; + } + } + + return Reflect.get(obj, property, receiver); + }, + set: (obj, property, value, receiver) => { + if (property && typeof property !== "symbol" && !(property in obj) || property >= 0) { + let {index} = ColorSpace.resolveCoord([space, property]); + + if (index >= 0) { + obj[index] = value; + + // Update color.coords + this.setAll(id, obj); + + return true; + } + } + + return Reflect.set(obj, property, value, receiver); + }, + }); + }, + // Convert coords in another colorspace to internal coords and set them + // Target colorspace: this.spaceId + // Source colorspace: id + set (coords) { + this.setAll(id, coords); + }, + configurable: true, + enumerable: true + }); +} + +// Import all modules of Color.js + +Color.extend(deltaEMethods); +Color.extend({deltaE}); +Object.assign(Color, {deltaEMethods}); +Color.extend(variations); +Color.extend({contrast}); +Color.extend(chromaticity); +Color.extend(luminance); +Color.extend(interpolation); +Color.extend(contrastMethods); + +export { Color as default }; +//# sourceMappingURL=color.js.map diff --git a/lib/jspdf/build/cmaps/78-EUC-H.bcmap b/lib/jspdf/build/cmaps/78-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2655fc70ae706c7ba52a5d647cbfdfad6072c697 GIT binary patch literal 2404 zcmW+#SyWV47TvdAJ*r+6RRxF)G8F|XpkSd0DozL*KyfC)0pS@-L>YX5;1pdiNgJS` zL=Y%uFUFQ8f-Z~Eh|{myy!p1b$i=bHX> zys+`=ji%a~OD*o~?c2SXo4wxc?t%-A=Y8%IH=0{~_08^*hPNA=t~NHQExrp`wt~7k z_y6}dyPJH?zNXf1lP7#Wch;suC58JBpV$uq9mEuPwC72IzEbHXNYZPniTj*hqlSv? zy9b^WRK9;h_c*@u*1JTx7ix*U7ZnnF&#SLHey>!|EdL-u&xrn@*&5w$*NfflDK2+= zkrwuXqTL7MnA~22Pf9KA4fr?~%bt+->oAUIcL2r-sbdR_la`KcFv>|sf##T_){a6L zZz>&SFy1nCRKTb(b)1E9TI#5Vab|sosCYJ_)2Z3#X-H=>j7lt*z&MxFxdBF1Os5K? znsnZRp`!DS7QR5yc^Ag{L_fj2D*Kc1G--`L4aVDMe-VreA^uVrKH@))*=&=)9L7b- ze@e40Qn$YnMh&K$tX+cWC8^7XMR$0Y3r1~Bmq(SCsM3`${#?eYt^)$EU{}`}E&L@# zcPxy$knT7b^=rCQu(H|Gy$41^e0MR7M!EYUjH_~YJq!)qEijtU-Ks^sqNeUP7|r3` zf_Y15zzO4;B@hpz)f89@qm2a8VO%!{HsZCz64(smhCPrE<7P-e6ul({j>5RD%CBie zpj>cy2lha%z&qF(Xw_WHRJkwOeAjk=HyD)rrC=oHemQ0;UH2QoOmYvvB&o*&W;XYP zs+JX+-4iZyG9r441ct!gQz6g-rN^f!29ReQNEi0ZYj2)4&qthisov>87Kbo+0Qh$=>`~j8wQ^3-&*x>3Hw9>=- zcY6s*N`t`uwl zJ1hsAweX+N_@Hq1h-oMq>}c3f9AU@ILs^8KkcPH`l}kfA2z!$Z?FFl_4HaUk-ZFGV zbNrNAhJ^G}&Y^0s)A2)B!Ol2`g^y>kAUv%!4GW9Tg$<`_j-OG}u&7jJ9o`OBjbTAg z^$ZKU&W8@yg1sF++y-{RI%3npeois6iZGvTBnqqsQ~4MXj$I-nYr$%j5iuHDe6<}sNk|Fmn#UW714D_*&efd>yQ_i2~OPOauHUkuj&1aB|`CO7Re_m7mPE89T7)~S$Ht^iY1qXPZcOeCQn{%ODQ~p827A}Bq zPhV(7m(#MC48Fs;m;s(|S=^zLZ$3wVhU)l+Zdlw$)+{y>Wyvm9l2ziFj!tF)!oDx|dspKQGU!)^ENB-zje1rJn-dodCW^Ovqk+2Y7)PjD4}- zg_`Z3H071Z9I(Br0)NB&>I!&q+$#-%Z1586YnMv?MJr#&XtsY-`|DQlQpd7*1_xcs k5om7%Ka{$hiq3Rpxm1<^LpLp-6zwQO#)>TPFtC#SKLc+9MgRZ+ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/78-EUC-V.bcmap b/lib/jspdf/build/cmaps/78-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f1ed8538287499647d923d7d8f517a00cdac4e3a GIT binary patch literal 173 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TVQ!)88tSa;k;uAm5#wHeUdFwF voJ@OznOOFQu?X&sb`)LsaBps_Jp&^YN;1fUS!@iAMpy(B8JB)#+{Xj}Q4TH^ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/78-H.bcmap b/lib/jspdf/build/cmaps/78-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..39e89d3339c74cbe06e7e4f76d60bf3556b0d4b6 GIT binary patch literal 2379 zcmW+#`CAjo7Cn_tlXOB7KxC0E6;J^M1G0!Hh@b)rDv093(r8qa#RddiM!%k!=Kz6- zAR+9oPaY$vEGl%>eDkNgKjqcDAL=`OZ&%$q=bl@p|JIdvKX}yBe&=qVJEy3~o0aSJ z7P-rAb+`H4^^bb{e4V}Ss;-;eJrBBj)IQ&>Y+G4Jhx`Bgd)+<0USCiDKgoKZ&z*hf zTvhq0+WJ$3P^#}Vsdh@6et)EU9RIrVD^XsATjF2DgvGz`>igTdVHlSz!$)8= zkl`}TkwdM+YY0@hN4GKOM$Rv%dnytuTKz3?K2= zVJ*kxZ-8-I@?X_#dDQK1f^i2cJ=Re{^sY2&!=^iO)CHqGZq%d7`BWJ#7Ju$x*XU`1 z_i=pmx)xbLF%}P_BWx@IM(3WfRP5wh#!6vyC5~0X=$6NB!+0Q%b;8gv)(4{pWBpo8 zAvKK+!03$}6U_U<15OwZErCQB{ieWP7y~4b0b|e{IEbGPOCT4ULyiuS9%D7Kcim5y<&RNNLKbV5?M_@Ml_!BUD z#Vf07Jx2Gvsu8;#zczp_tCci!d=JC81TT_)OJ7H<^R4ifpq^T6mSw`ilRIqex zcDbemt&GU2V_=zN>O9y1=TsfoLF-f-SXT5@hvqs-6M_UR+Zjv-JLCvvgL&oPaj+a) zumUXC9K1l-VL5mOEFZyU%~ek2U<+6Qg0~4PB*AvViX6dCu;QHHQ?O&w^dYe0@^l_p z37Ia|Top87TGT65rmumWz_bsnj7$saCoz2wtX!Jzz~5)(X$|l5J=23)!YPVS0$7C< zN&-72hdf}X!$KKgXDp!{uu4nlC|DHr(K(@ZSbg@~C1!Y-O;vI(n~X7a%rq?x0HT_!Upz#45c<=E=9 z%$(O8XQ*XHNWbcwX$8BMIP(DPx^q_ecmo^4(Qq!!c)MA}20&B&r zpr?9fgEM}u|Q=Y?I}N%O+r2j=-|&3Tq$UKp&&^B2K--1CiK zy-D+rv2)nG5D(TDwvd9q4&u!r^Fq4jI!6yIWPv@jEeKEg%?r1|2FOAO*x>GkZmbI# zkFaO~dyGY)@`+}zp%IIAu&0TO!joT2i^X8i%!{Si$#X0UiO-`KFR8X#nz7hUvX-Jv zrlkr!)wxtjq@_kemYPWXQmbB*xAYiT*pK~hyec_gfVBZtu00EmY{H4Y7hH0In=Rn7 zrd*^6ZyLeFtZyEITTE}BgIn=d0$03mWtG&?rnd!}Qcs=lqQPy}cWK~u&%11Jhy7h0 zxHIZqi%PBz!oOeLb%}c3^^oNEF~IZy;@=nOo`m-oNZR{OvggAt-GdL=2)xNT171=RQ}dVa*r7lYVOePdNhaj=@g8o(E3NgnKlljVh}#;AzFH6fe85 z+KkXeX|)x6uXEL>T5i(x)jojlgLN%g;C_MWfd3Lw)^auF7L8pKT~4>J-N(|6#5K`| z4C@zBFVpqKt(w|Bc=fOlez!{6v#}_vi9QS%Fz7{Bl|Mq@8>Ux`|+@q$AFw7>C4I6kt^o9ex(7TZee#E)apegrh#KtY~qKu7xj5;lw z6#S@jGZVbnvUyY`9W|KBR2?1kz~)J^XS16qTXwNxbkD&pH%Z*8CD`g9t}QVumaS(b z>br%+eNQ0!zUK>nzTZ%-9qr)9#LdU`tKcO`;H6?hPUuI$%fw)uj0Z2*Y!7Ja50N=- z`_Te^#{A|N;KN^GfuPhQ2Wn*@M_1lcm`)(+ff)A06&+uoraMN ZWxHCHd+DL=OQIb$$lQ?y)&e^@{{yR6zuEu* literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/78-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/78-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e4167cb51f66c60ef7d9500b450303b5da175574 GIT binary patch literal 2398 zcmW+%X4)d#tmFZT%e3CqAV65xJ4VEnS`dH zL7+EQ*O3^3$f82sn)^Iqy?t_}J*`zImsoz3p0` zy|l8@v3sw>QE9Ke(tX)&Z@Sal=kDya*LQu@-E*_MN9}W8DKXb}blCqN-)rx2_qu!f z|99EscH2w#d|vN5biC;h2nIpOpu(y_p41TXQQ54v6J!szwG#WK!8X-8s5t+0hZO($ zz+kTYO|+EuO)`HR#>Q_Njyu22B+1`iFr|FkYf2fiwA+XBVr)ZoByOlliyd0PkQ@3b zai|SHHAq8U_%RKexlu#6p*NO#0li7^mO(!)c@IE8L%g+`#jBXSF6d`v?=k4-4Blqw z%?9rU=wAxnR_Nz5yl&0v^_YhZ&@ZG7+n`^>W;%}}aVdOB!8^{_tuf_R1*&}zMcSMb* zL+{)+nuo2u(r69zu8h$m(7VOatI%(Xqn*$-jP^nA!Dzo0Golzq2cY-HjdK2d(SAPN zEy6>+>9)I`SnL1m2J0X193?}1vjKQ^h7-*f13i6Q!NKQT@i z4cQYGmprkH$P*Q$V4_wf{=Z?hP!;`u1-05hZ6cvDouF}M(0DCw%ww6jPH2KKahuR2 z+r$IVl;}wwmujBO08LArECAhRn&dO23zJ7cGtwrHsp7a|nr!35GqHP8!FR4O&Y=ocE^)T?cgup$`0XR19f&UY;AettCt<2&aSA3E@o8Lt;1=^l((T z5cD%CTnc(b3LgZmCt(+8gE4%V(4#{57?xV3aHEzs=@G)b&oNWD1&b$za64XC2;nZ! zkbJ_T@7*F;%=6J7L<~gogzj5v==m44HJ8?T{t{badoI9A8K<{Fn z4|z|MLrUzt1@wN#Joo2o!#p?lfpNYDTlFq9BR4uc6XU`7c{)Z~bg{-hZ! z%Jk$Gm}GeJ5X^+90+<~4R8-0I&j<~u@e$AcrztMmvqWNgmQQk@l@L5@B<5#Lr2JV6 z$$Fkl(w-{9}^>Jc)-K&c8SHRMYVB2!Q(s{>>N0nfit^7y#=&)+~s5oEWCwbpjk^SGdlB73j zM0(?J$!`u2;f>3%`%S${KK=(=<*M=H3$W}1VD=8M93x@5n*4W9!J7fF{HmoKjCEn@ z62hm1rB<-*wk5YJ{j3x$^#N=LOv_mucXBKMe5Zlsy_)>9r((GbtiZB-0}B^2mT!X< znpTp*iegsms^uR_%8G+$?E+TnITk}+Im&T2QdiCr*Ge}(mtg-7`&`Z+IyCD)J;K{v zV0(nO4lsxGwj8W9>#Y-PulV*7SlRx!Zm@mwYL+VfqF|Ntczg@y)goYCMA2#m=Vga+ z^|B`a;>lTU!*mu|GlNwmu5lyxJJz_R2W)F+RPk3OcI^u9U5UcAeqh7~vYw+^e)Wj! zJm#Qny$GzTZ2cetMcdZ9!K&pA3)m;}MzSjWrW9}3d9D+&8^<-vZyw7=3s?;{xTZ?V zMi*FZ{5!t9pQgS`2XpOsSFV!Z73aGPn)!Fnr|K!Rk#P zVpQ^n;{1@Rng8$8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TX>Oq#ygOX=*YO&pO=jMENuV) literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/78-V.bcmap b/lib/jspdf/build/cmaps/78-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d7af99b5e2ae9a21d534f1965c35a2b572143322 GIT binary patch literal 169 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TVs4@9k;tm3#JJa=mvL_(C)3_w qCYHTnEP{KZ9Yqxr_vW_RGcZD-B!fJd#m3NRgheosQMHtD9}@un{3-|l literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/78ms-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/78ms-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..37077d01e26f9ee2427592f6deebb145d628e731 GIT binary patch literal 2651 zcmW+&>su379)3?IlVlPI_nQO=7v(Aj5fH&R7(l=(3boRT!dN4sTpU0UwHkd20)c>B zl5n?bS84?+7Zv6VTibnh{|&dhz3ubte%bx9{j_KMVV?IlGv{}E-`~tRn)fx1_UpYJ z%}rOjtT}~+w!QmpwnA&krS^+XYi)05m$S9gTG{q#d&l+m4yns|Dce}m(qjF6eW$g< z+3D=){{O>Tr_-9f?}JK5*~!{65ZnhL_eHfB%z{z!J&v^D)zC+!d8NaVwML)61g zL)3t&**cIMWF9CbAp^Cit)DM$7idCtX2BdE5^wI&L^3mynek^WK^AjaN>oayL>`K9 z3MU6XY#>S^b}mCn!Oj&Zd$4nrC~4SfAxb88t`Q|0JMB6phk4w^J5ClJx;W(^c6yA; zVf5WXUoZNJPN_gYh*B*F4=iH93FS0D(1dTR^aE|!iNRKqZr~=Anw&vEspST9p?s(x zJP73s87z@agQ8*30p%lM@C1~zn!!3Kb(+C?D4%eHjZn^62Ay)?pvyRI+UAQPZr(=a-RKi;INDH zN1UAB{Ym1ze#9>dHgPDRKNsV7j2xdfX0MRq=D`-Ot2nexrqu; zOU%Rxi60XU6YS%mao9T{GmHm6X_d`mF3<%1WGbjNV$ueh7(aOoG%0Da2{c)lG7*}> zPel>Bhnq@}O^-x=Dj75l8*M>TnV{(*Q^lYeWU3l8(>zrJnk9!kav7#Bg6_3VwSZ=u zz44&?0=?OwHr{&}G{@*=Z0*;2PZ65Sd(VRA!Fxd##zo%S0Gbc)WkL&xx0%qwKridN zDA9XIju>|Z`BJp~pG@2`o40 z{WWsTgp2dDJSPnP1}vT8{LOfg&-vRxPbT?0L8~>>QJ|-Sr(+2{t)0#$w3eIB13kk{ zA0qT4GA)AE8K)iCY}HR!OZrJsKYf$x$ZQE{OWyL9sj*vZ1xOZj z@z$-KzYN+#=Gjc#jF@l78Y8C{3wqF7SYS=wmIa>}ykG*oV_9JOe5P4o;@;IR9KrSh z?LwJk^0^EPRm8sVA=$eauF))(mYNqU2)9^A$l`etv)Gt*VDT0(pNiDSHi`JpV5LXW z`36Dn9f68$qLOl`To6>P9x5*j(_-x7I;c9s;~P-*n#cE`8t?@NRS5Zlm&nWy@Ug9C z+I8oPD2Mq;I59j)AxTfN37*st#WuEQrKD3nS;A z*&OyS14!bR$H~WEwmIy7sE~x2YN$p5swo+2U?5a;KGdN5F;Ii|Kn<}#4ShhMhReoz z7t{#ja|6^!|G zF)ld>mY81tE8v$-lcuFQhy5#&O-m-ENYPw-H5^6@!s#P-mO^jN#F|SNuwUS{L zgw^8=_ab`rBjQ+XXLdFUzB%Bqf72od{@umB%7nU)du4-a)4$4tniK!Z4s}2O>H^f< zf>%zc2ZXhFN&lmWHCD%?8!)bA01G@a*78|hR%q8Q%EFJX#I+{O#FKR+)co*uCS-wa zok@DoynaUFe-eY&FR|Q(NMG*;hRq-wiL&V@7r(*Q95QcYKrPDMIE1N;T^sFCi-k=S z)WgDNq{RI!W^G!TuN}dgCuP&mF4JZM)FaqroQhGKZBR=>U$fyo8vQyJs$_%p#y8C4nD)&zs1>nqWO#C*RvO+0N#s}2{x(`R{_4tjdlqU{;1-+o z<3U@Y7+@NGkg}D6p>$!ZN+SRIFZ$Xg^3M&7R!Zi7i2JsfBI*eQZu7*l9medF&~E2| zd|TfaYk!wYa^GDh$G+R;uzz=vw0xha5&mc)nw>IP_)TP{phU5F>>kQdD2Lc#h@F0t c-la;q-(1!2s=%@!^LOuZa_4*AVfvHif0(Q+AOHXW literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/78ms-RKSJ-V.bcmap b/lib/jspdf/build/cmaps/78ms-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..acf23231aea22e1a95761f7eafd35f1d42ea6b84 GIT binary patch literal 290 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TZElfUtQ+JV?4|3G$lSPsp*5L- zp*4wtu{9x)to?* z-GEF#OMV%BCslD3bEiU{_ISp9EDQ%Z8TPR=9292Q$H{O|h;bh`!$AqgeS8cDWf=Df PG8~jmWNdF>+$RD6ERIW@ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/83pv-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/83pv-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2359bc529d160857cce4c1d1bfca1322290205c1 GIT binary patch literal 905 zcmaiy;cpXl7{{OI+O^wmYtyl`HDmR3WD>!x+fX(zk2fF27#QYSGOjrry9(r-~(pVo1{Nw?mtLYJ4UUE`k0lkkCo*kO1UE(D(}Ha zIX$MVRMvM&ErC!&C=p47ic-|WsE3L1&Ed_Vp)Ij3En2goQt2?lasb+wwgN2;Lt;6| zwA_i2WgTGY5s;UQrFk$;02m7ZCI-O-t-D+~RMwf^W)!C+rc;Y3P7~9a-6+nSV0x#B z;@u~h&i0`=n`3$}i{kw*rgPg+oO_k&gBcVbb~2ssKyiMW>7z*$A19bDw4u20BGV`1 zC_arcUEGA?Vv6arQ52ttm@dgEF74;u%JB9>6;J2#3n;#bF|D?uSWPosc^1W&VWz81 zD6Sr0`f4AFuf2cP{3zC#>6(h-+M*UPR}ZZ3Otn{i7_C0k7_RpF0@Zzp)zK+0oTa^* zw4u^B0>!txwbtKNy55iCdXee70*deZm~JFd+{iNhFpJ{HZA>?}qPRK3^iu}K&mBy+ z6co26nSPl-@oO8??Kq0t<4kv+!-v;5Y52z#{B2@hzN>;4wmsUkBG4YIH)P39qY?Al z&-;u-#D2+V?9k-9C&B0ku;<`WW7q$+Vyxj_#Xjl|yL;UscaO{N)9#?F&dc}K;$|A` ze8QXqy8u=**sp^X2K#uO6#={Gx8h?Bj%vT*Jnrmp`kY>;$4NTfPM79$M&eedr~f9j zS?YYFb5gPx0b5+mtNTAx&)Lh;5 ZujiWNPKIm#2-aGseD|Rg2PkC##Gk&38VCRY literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/90ms-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/90ms-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..af8293829c90ce63cc4c5eda0318003785ffcba1 GIT binary patch literal 721 zcmW-eTTc^l5XJwq#gw8#R@%k}Gf`{k zMMO~)MNz7F#ryrXv0C+m@CEc;pImvE1P@4ZMh0a$e!5_#hJh!c`*BVy;Neh zTkWo5mpv{y40IUiYAY)$v->KYl_e^qm8H6=e}1|X^yMOVNa&R!*CX^Qk?RA!TI52Y zyG8CW=pK;^oAnw)aZ=<>{nqqplU^rs@wxhDkvt)i10n@xy-}nD=&hzZk)D1k^M|e31e5HzTtO9tf zi|}eE@HH3Vcq#Dse!}Z*z&9L(6AOSR{De1Kfp6IfCvCu!&9pYVV^v4ixO00S@Es@N z)I#8?0O8%;!1sy>@6Q9izmxDmBk)5D;iCfJN2E$w1*a9@=~D-cn9ek)@cWNQhE@3W zR*W>Mt{DX%Gw_p*giq^$pT-HF#ekpJ629;PzX%h)3<1A#6TYqnejOxy(+&K#g7BRT z{H~MmeLL`nQo@gmfIqeoe%cG=pBD)D)}AcI{0gYeAA%j u^{--}Rd*VGj9%#5gucOu!1#H2euZlOd%88>EDV>zJ*#d2{xOGaKc#=yUE^>7 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/90ms-RKSJ-V.bcmap b/lib/jspdf/build/cmaps/90ms-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..780549de19de05b6cbea4ccd4737351bc9ff6104 GIT binary patch literal 290 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TZE28OtQ+JV?4|3G$lSPsp*5L- zp*4wtu{9x)to?* z-GEF#OMV%BCslD3bEiU{_ISp9EDQ%Z8TPR=9292Q$H{O|h;bh`!$AqgeS8cDWf=Df PG8~jmWNdF>+$RD6C)7)p literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/90msp-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/90msp-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bfd3119c62d9976dde9b1e59c572c678cf5811a0 GIT binary patch literal 715 zcmW-eTTc^l5XJw~VoNEO2&Pqmx?BQ85Gy1Kg5&B40vb?if-xX2vLIS5w2cHZ5is;3 zUQoQDs8tjNMNzzg8>r(=1dvVfUk4O5y@0Wb4U-e!1H*~A2RJ`p_EmhUK zs|1K40Wc(gs}%5L55S7NSSf+n3@1T40ZQtSjKh6U6fCovgKDBFc+P4I2F&J=F+qf^ zjh0Zdd1J_~mn)$$R9BDTOt6QW6CGiHq9bDMk|H@Nw#a^17jYkvhNEA18d6O*i_N*t zY3nuEb+qf~Y|2Q9qDB-#>D2`>}yh(Xyh zBIC#a@D(JyS^<2upYU2Q@bw*pqou&3KEfMb;G4ySV}-zDX9#a~0^iOfypscbr;YG# zEATxh;dnam_;JGfO~4QAgcE7N6ODuq8-O3#2p?O4AJ`z>C7g2s&v^;od4S&+63!O@&vz1jXb1k7L-e=3qL;^Px1}0SA^g5iYfXXF1DY`JMrWSXGZ@Ro2m> pIdngIFSLC^+oeaK|2#XMub5T`8{&0BcPR@0tE+*R*O2w6;V*K+;HLlp literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/90msp-RKSJ-V.bcmap b/lib/jspdf/build/cmaps/90msp-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..25ef14ab4af42f4b70ccac76cddac8f3b22d8813 GIT binary patch literal 291 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|TV`-3ET%a4|9qgs+k;vS*f}u5; zfuS{tfw46qk*(2@aj!owG3?DvWNLI~IN-y;a3IK0v~kS= zzs90gM@9w+lw^69KH^V^*#(jJY2W1%d Q2{Ig%O=N6uVB9AH0G^~w2LJ#7 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/90pv-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/90pv-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..02f713bb838a8cd46f5b262c934d0edc8c6e8fe9 GIT binary patch literal 982 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Add-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/Add-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a3065e441a0e1f1a65e9109ec9bc4f826fccac24 GIT binary patch literal 2413 zcmW+&Yg<#t7JgTDc9NYyAOwPxTexVs69h$s#!VxNsHort6_ss`c;R9I;draTQz>^5 zB-}yKw$@sywYJqgd*Ivo8$RvnH=n29&!;oze3<>NJu~k+Yt~xN%$Pnj1Uj$X=(^l` zsmEJVQQ<4x>ho22t1on(4|*GKboT_?yS@85zUb__*4d@?1TPfXtJ~VV|DWIO?Fx1W zyL$iE*%%CZi;55I3)Iv%)_~9tqJGt=0zKYE^g(@B;gL7U}%yTf_E$7&sr%ouPqC<9T}qydj;K6ArB9ZcM_-~V+gdA@G8C4Sv)OB{4u z_6}ynI0tu=Yq0T%_p6on<)%1`Q*oxb(wu!Jk1##LOgoVhlj5w&PRx$0HVv)}2JzSN zQ1svv=U^*%l69~TdPB(&pf}P`DflNC+7A7wb!Z3lV>DD9iXKvJLjmZ=twRUFlQDE0 z`U%re6L^Ygs2TbxX{ZJI>6D?Mm>RYZo1ix*4LhNq!Ei40vt`5i(9g-k8hEN}_!9IM zY50~V4XYTwD^@*^su2oB4~Oj|e&`o0BX!V&@<;>pi`gS5p|>g{ccEYMjM|}J-ZYx2 z$s?*VS}B-U;2zy0@G84aeD1G1$MURD}9&~}3tu@a#Q3Iv5M$O zJ6L5#P#irE@kEvn2MPoShY0M3Kl4uX$!?oshCX$ z+bzweg4M{gnP7V?v$%d<}SB-25@H^Xc=K z!7kVq?4jss6$@@+LHmM`Xr%?Qp-Z%|8SJvMAbh_PwNMInHFlvoUaZsPh-zItBz)_Fcdl88sIc}ZlZkCxiN{^3~?b$kQMRV{XI5?o@L1T7Pm%NSb#gtCY1@-Ts(Dhc*=LS`-4+SEBY}OH z0Cu;74B7)jih*Ia!jSJtFf8In(WIIGfEV5qnJel6FAgd5s&h3ShTXQB4Z{(&S_JNk zU#)@>jnxJ*9Ja4E!f=9@l&!YFhymZa`Dr3}sq3j_@0!2!dQ2P3h+07jA+PS(r|v*2atiEq1C2VUOq z1K$x+R>JuHE_lWM7lN8+}oo?e^C7|Zd2S3l@#;CAu9i& zh0+CEa& z_S2@dK8#}NwGW2R`g$9T zlFhIEFiK-z2f=swUiWFz$GsQ;aQ~)gH?)+$RR7O8l=^ckee%X)^1aC-=bK}J*f$rb z;7u>dzhu$5U-Bsats_wI)=RN(>uJl|a}@WhmDFF81O8u|ss6WQD){Ycp#1kuB>#Sd z@_s)-(eEUReHTZ?@3I5M?~au$E;rrIsR73IE0M@*l19U hBiJ~FjYe!VVdI#~IGtd0&_=Ch`g=^e-y*oZ{{`ID*(m@3 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Add-RKSJ-V.bcmap b/lib/jspdf/build/cmaps/Add-RKSJ-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..040014cfc0880371c20a89212942727c5dc30a78 GIT binary patch literal 287 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T<(QJ98{{4ArR$N%-RQ`;*Pnsm zfDaG{aWn1>~Fdm56S{nsR6Mn5Gw+)3Jb$Qmev}EgS-IcxJ}{! literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Add-V.bcmap b/lib/jspdf/build/cmaps/Add-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2f816d320f08b8671498299c4d00e4564d2ece6c GIT binary patch literal 282 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T>X?$E>ygNGht``8&6_OUQ99OMMjtU#KJf$^YlAa{AfKF&6QHh#7?i8gWe mHX)Wa;Wmy$_VR4TgR($XYCxDx8|p%l=LmHM8lDo74dk4_$_P(g(w!-Hg>R!685l< z1014^3aY5#2*)_VDe5@GIWEvZ6D?e#jSjAGjT_wJ4)^Hd0grgXGhWccE8ft@07Hy0 T#ycjM;sc-f!Z&`z(oFmT7oB|o literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-CNS1-1.bcmap b/lib/jspdf/build/cmaps/Adobe-CNS1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..03a501477c91d8156723f0c274a37d397ed65bad GIT binary patch literal 371 zcmW;IQAa~@7{~FmUG^&eZ(!@RyK_0)E=Ic8c?GTgwb(lAe~#GII?0+zl4K@HGLs}p zW|AaHlF3YxOp+u?l9{CMiRbhDcsy4>e>V}aa(Oi|o_55LVd#O7t{WnpvXWAmdE1d$ zTf`^FES0m=s3TLsfp8`x{{L;Eq%GC7cQmCG!NK8pBsOBkd_GNc=L=I&qQJ~z4n>qu z#sU_xgk`K?6%|ymhIMRU6I-aEj&1B<7kk*p0S?hX6Gu442~Kf_b6nsOSGYzCH)x}S qTioFu59s0%Pk6=)Uh#%^eBcvb_(l(X{NNYvjJLc7T(1JRsQm#8LY3P9 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-CNS1-2.bcmap b/lib/jspdf/build/cmaps/Adobe-CNS1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2aa95141f9f5802818e34b0aa626e34e7cfee805 GIT binary patch literal 376 zcmW;I(MLmJ7{~FmF8eFqf1vHu-MQP$xfto9^A}WmtyrDyJxAWRfH^ z$xM>WB$*^hCP|WHk|gPS;`uy39?#XUt34QZGdVSu8udl5WtlyFrfG>-(jAt<$$7pU z_e5f1#8nwr4f!$|?vAC?;{V?hN_tXF21iFq5svgH;`V@JheC#-XY*N`$TL%z#te#> z!#ozSh$SqegcYn}4eQvzCbqDRGIp?wJ?!HE6;yGEBh*mGF-~xbGc?e|IWBOC7OrrO s8{Fa!_h{n*k9fi}Uhs-HyrY8;eBuk=_`xr9Ay`2JI;cR?K~xuwKLRC}r~m)} literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-CNS1-3.bcmap b/lib/jspdf/build/cmaps/Adobe-CNS1-3.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..86d8b8c79cfa3907281aa3f25a46f178b87aedfa GIT binary patch literal 401 zcmW;IK`TU26u|K}mcGN({Q|~g_m$`K@18oH)xWONo(l2>)7#w>sV2{J8=76$Q^{=5sg+*{Bi$FO zOn+Bk@`34ybT(0+%;nVoeW;8MwHdTaUu%_UY|W(7ZGJiya~zo}4zw_eykU%>gi(xP z921yC8Pk}-Eaote1uS9-%UHoG*07EZY+?)B*ugILu#W>A;t0n$!70vgjtgAk3fH*7 zE$(oS2UPHgDr$JbGhXnDH@xEmpZLNze((z!vY#y=Hi6g%Vk3yHAU1>84nl~yl$}3x CU7_Cq literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-CNS1-4.bcmap b/lib/jspdf/build/cmaps/Adobe-CNS1-4.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f50fc6c14e67a228c4ba9a61b1357c16410e8228 GIT binary patch literal 405 zcmW;IK`TU26u|K}mexMN{Q|~g_m#NRlK?k|s%# zBuSDaNs^>Vk|arzB>7);fA`estp0Vij%1K8n7*FgNHu$&+t}i|o=RkbF0K4R80r2{ zrE}eZ$p@x0(wTUDBAZqJ_n|U6)Mn5weXUizsV$vMwfm`9%yDG8IMB){@`f>jQH)_6 z6PUylN+@FnvzWs?7O;pVETe)ItYQsStYZV4*upk;u!}wH;{b;^!ZA*8iZh(!0++bL zHEwW=JJfKG2Rz~l&v?Nr-tdkOeBuk=_`xq^$bPnf*aTu5h>ak&g4hgVJBSS-C8t5k F&L0K8qip~H literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-CNS1-5.bcmap b/lib/jspdf/build/cmaps/Adobe-CNS1-5.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6caf4a83146a60a2db652647b9cfed5fb71bd97c GIT binary patch literal 406 zcmW;IK`TU26u|K}mNve^{Q|~g_mN!#-X5)|zBpQ#PGx_A`luPwPmMBxy;KBx#c*Ns=T< zk|arzv`LaANs=W0qwepXI-RF~O|>;06pCSYXIE?*JkPCbbY0J+azVQ_eldz|Ph_&a z9YI(K!nWAvlC`OP-u&N3CbW?a`*rDCYm)WN*>tAG&m-sM?B#fFL=cp-tmD?eBm2E_=ODUrv*e4h&B+7AX-5*gJ=iQ5JCxG%FZ9F CgrqG1 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-CNS1-UCS2.bcmap b/lib/jspdf/build/cmaps/Adobe-CNS1-UCS2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..69d79a2c2c2b00207ab27b68ebf4404aa17c6f2c GIT binary patch literal 41193 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 R!5J=ag&W-A0Z)>CkuT=vPT>Fm literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-GB1-1.bcmap b/lib/jspdf/build/cmaps/Adobe-GB1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..707bb1065c76d69551c287141cb258519132ef8e GIT binary patch literal 250 zcmW;C!HPjq0LJmd(o>ur8(emGDOo64xKA)R4P{);y(uf1rfHfqO`0Z2k|asfBuSDa zNgD6qQRYv5zs=X*d(Fh{N?jKp3$BcqrV)%9hACrtJFBEscU<-4$YeQZ>x!)(T$K;` zVx^M2_m0%cQMz_JEu~~AoJz(MX)EFJ2ytmt{X#Sw>=`e3#T(wy!UsOl#uvWPK^Hyr kF~ATbj4{C!GyLEeb1bmL3Ttez#SVKMaKs5`(G2{Fe=CDsrT_o{ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-GB1-2.bcmap b/lib/jspdf/build/cmaps/Adobe-GB1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f7648cc3ff02c44e9594ccbd71deec742e253c2f GIT binary patch literal 465 zcmW;IK`TU26u|K}mOjP(0>)!E%W0a$lq|f3HRgsI^TvBGHLGzXNs=TL-VlZ{f>DfN z921zt6s9qQS&{5KST4 dLNtbG4bdE;Jw$_u77-d=%W0a$lq7Fsi@BkOH{N@xS&bt}k|arzBx%w#BuSDa zNs=TU}~*Hl|me!dX&bah9j!F3aLjfsS7l3BmQ8m|yWwl_4H zzD_^L`$2nTv+>$wE@%GlLlfB01_QeEtTplarc5f`?4@Hd$C0&Se;cF78^SO~Fp4pZ zV*-4l~8|5gz6Tq;Wr6vm{3v&eie4&Qnn@L%5OOhl>k|arzBuSDaNs=T< zlB5Yqk|arzT(^3E?^93D>MAPKr?QAtrsV)XL*F@Qk~ zVHhJA#Tdphfk{kZ8Z(&19OkirMJ!<%D_F%E*0F(2Y+)Na*u@_9aezY{;TR`4#Tm|V zflFNB8aKE_0e5)7BcAY#7rf#P@A$wczVMA7{6c;HTtH4BH;^O9732(Z2RVdXLQWyK zkYmU-4m-=_tMvz_6R8WHFJ2IRbyaP#C_M$ZFh@BuSDaNs=TCWD$wYeo5lqC}J;_`Sr5mYp#8^R#fo5_alnIPHG zn2tKrQGGUSDk-XHYYYDGGeHz)!l>KJR2T*&r8UXQs@halK|w60mt0p5BggB<00uFH zVT@oDV;IK-CNYI+%wQICn8yMZv4mx;U=?dv#|AdBg>CF$7kk*p0S|+(wQg*OBwcedIuLAvuxUNRA{|k~7Jj ijwRQUbIHBrU~(}zncPf{rl(l7o@0OOeg}^L literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-GB1-UCS2.bcmap b/lib/jspdf/build/cmaps/Adobe-GB1-UCS2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7586525936cc5398b86d3752a4eb45b15825b25c GIT binary patch literal 33974 zcmbSyg#^~;Dq`SLCNL%sw+i2N{zNG!^ z$?Yk$5++TC7EIHnbl@j zL>j^%M!o;^j0oPervI<+6Q?2wVGh2R4+reFD~3GkG$FYsWlU|O`ryo7Cx}AGcZY)y zxsPa^R$VF>bccxgAnSh6i^M5Kw40o9+-AI+wOSW<^;T!D3K)+#RruRmSh72~5X)V# z-T|%ochcM4uxZZv7+gyHqKeh!_-lLDY)7n!H8Eo%`FO!4GknRxko>LUi&DGoCuy}s zfAX&z;xJptdPg7;|?<=Zs- znM9ir8jGLO2K){r-Ozd>nt4A?g zlM(Vbk|{oJLa=XV{LRK8tzHA77?akx>58?KiL!3{8tsAHL;kyru_^u}qty~6qGoG) zWXmSP3#+77PeXmua`g*Ic&)V06D^fD7WKFdv4ydxV^_L|0EtGDStAtM!rM) zw#F6Kfq-AL>LhWDj{$=xvV_GEMI6d}Gy~g$_r#&qw%QZfXF_Z2urmU;TqlcaopB}x zha?9LCiBL;rmQbUU`nrDeOKPU0jQbTA&yOk|IWQpw$vFXTp`M=VVz4RI@NGW_m#p% zSIPaRCj^8O&bWTne-wsl#y!PTPE8W;)v-Sp0~Cy;)&;z&JS>mnG1%yEKpy*i`p3d?YxKWwJqxHWdtrs5x!9#vjH{k`K)eT>ep )hMjqg! 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 U103N5XSl!>Zg7VOJW1|FzIH}ZoB#j- literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Japan1-1.bcmap b/lib/jspdf/build/cmaps/Adobe-Japan1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..dad42c5ad7dad57954fc9a051ee7e222e83bee45 GIT binary patch literal 226 zcmW;C(F(y(0LJk%m!9Idac9QeF4x+{N-pdPuoG%*&RJ?#Ymy{Mk|arzBuSDai8t{m zKI;43eEnmeg6?_&uT`o(&8Vu9$|{OVHQOyQY6Ze)bwSNW+2x+gi$1gExaK(Y-wVo_ zV7&D^Eyk#v&Y8NAw+u-lghV0Mh7NS02Ynd85JoVD2~1%Ib6CI`GD7x@CoEK=wI literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Japan1-2.bcmap b/lib/jspdf/build/cmaps/Adobe-Japan1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..090819a064533f20aa68f562275556397683ae81 GIT binary patch literal 233 zcmW;C!HPjq0LJmd(q>-alr^r|-KAuqWZ^!6;WQL3=iZc+NRl*3(xgd}BuSbiNs@RE zkK#{#zs=X*`$$FYa!u#IbFK`VrV;ow3{yt3_Lq`Y&2d%Hk?~T-)@56#U6l>`B87r{ z_m0%cQM&p%Eu~~Il!!-TNh{{@2yw4h{6aM9tce!d=%9-pe$dANLyYi?G5#>Y6f?}R Zz!EF0vB4Jq*kO+YjyU0r3$EhhCY~ULRonmo literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Japan1-3.bcmap b/lib/jspdf/build/cmaps/Adobe-Japan1-3.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..087dfc155860e65d2dc828dd432ffe88239fde23 GIT binary patch literal 242 zcmW;C!Ab&A0EOW@?&>M-#%1H=ZkB`0VnAFpPf*Pzg~>bJ83I>gL_|b{h=@pth)9G) zNJNB)MCe=iDE;OXBS?d4* literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Japan1-4.bcmap b/lib/jspdf/build/cmaps/Adobe-Japan1-4.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..46aa9bffe576e9a8b714646aed7f9e1a4e99dfe2 GIT binary patch literal 337 zcmW;CQAa~z0LJlmyWFREzd-BM-MQ#uW*1|2(fI_`UM;qr?LEiX)ig;aNs=U)B$;HA zWRlEGW+pQ;NhZlmk|cH4fARco9)Is(HfX1FdTBB4$|=({CZ-L;l!2H%ucVc8T$OZW zIJIEww5{h{74!Q7iG=*`9jTS0bas4NN=g4@BpeJyt&qnf#BV+`BgAr^6|jO;tf7c? zY+w^x*v1Zav4?#epoBvl;TR_<;}mD8;2amY#1*Qz#tm*!Lmds=p@|mSxJL(F^w7rx a9`S?$p7DZL3^BqR-tmD?eBoPIKjIHvDu)yR literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Japan1-5.bcmap b/lib/jspdf/build/cmaps/Adobe-Japan1-5.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..5b4b65cc6292a5ba7d89e976565bf08814bb88b6 GIT binary patch literal 430 zcmW;IK`TU26u|K}mOjP(0>)!E%W0a$lq7F!gSnxGH{N@xS&bt}k|ar*hNMZ7BuSDa zNs=TU}~*Hl|me!dX&bah9jA(3$F8eKPGl3BmQ8m|yWwl_4H zzD_^L`$2nTv+>$wE@%GlLlfB01_QeEtTplarc5f`?4@Hd$C3GBe+#3?8^SO~Fp4pZ zV*-o?x9UIuh7Phg2UF=~W2ROtLj&XuhoZ%c7xWpB% zaf4gjp^AGv;1N%F#tUBYhIf466JPko4}Kwo`e^~t1fmT@BZyWI%^=!AG=yjg(G;RB OL}Q57kdo6TW#IUmUh0u{Q}0Yo8>gkVoDZfX@$9=hCA+^)U3u|k|arzBuSDaX&RCw zNs=TF0|AGX#{mv;gkzlG6lXZc z1uk)gYuw-#ceuv`9`S@{yx5fKp)5fBlPB1NPWyY|V< zc$mZiah|nmt+sV;Z5?{;Tx$nw=fT?E+tJSccGM2Hz3=nC@AJI>FVSSLJ@3!jXYaMw zUh7cr z0r8EI`1Jwe*GA&ku>{G!Eg*iZAm}*+kNBmQ_+=6GOEx1Q?kA41e<=v$vVWQUOTP4% zMZh9}c$kqB4z|D(<d~kIkZB+o5?~3cfJTZ0e`1(;l;EbKY{E?N z38$EFP9<&=#II8cM|cWUMgD3@1NuQGh~=?-0XzXv5J>*5XK!;j6xZk!L4OMSel9zJJ&mnn%h&_#)21g_z$M?0>?Iy=B_0bQC@O_u zGa~Yz#6GZRkp)x|;zOZ5k`LAhJd|IwO2S4=B+R5en4nh@gDto{9ti_W2^VvBDOlvL;z_Zmwet;g0@wy~61H&> za@McQes0Q@Ce$~_W$3SGh;_xZ&aUaML=Dv&$~=Xgf?HXy^7`}K{4EOTTRB{3Pl2`u z_+SF;PVh=L<-ozIuT65#7?9hO?Rrm12Wcm-rQY6HzCEa>0tE^!}G@R&T8bIa=PlxOt`pw zzoL+M6L~z52r3Itet7+yOVa6?F^)q zs(t#+le}tYqcckml-DG3=RqTIA;F#G6nTmfiLyOhgPq$ZgDQx^+{$sua=I!}I<&gP z4h5=5g)WJ`cF<}WpBY80-LxGEEGcm~?qmIr@OY)Yv>wC*Q)q_NS zAGuAUuu~m^1G#N^-N_EKokII(w-xSI@7A{!9GSPL%uDUk?_2RgDI8ekPGM~8YT%U| zILhg7v2LyDS2Q}6o|fKXyRN64PIXy(%&u1Wt^$5YL)}wcmd;`{=hr0E!szxkJuKO0 zBBf~am{T_B=facop;rpK{PrioiGR=KQSHGMh3 zB^cDC)1`JI0!X(6iS1=}%B5SQ8PfHdyv?8i1uCcUEp`)X%VI`?KlLZ5W)yd6nf)169}#8u+dv}@b>t^{W@lZlQj^(5-| zic$XYDyZtMg!=9L-pXMKUBBOmHgTLyT^3~aG`E?YIxn94(AchNS9tQ)Wi$0V>mSbB z6y4gc@+5cHb)+$>9(0~ngb2p4R#`AO=*9Ufo|R;c4hCBcV}Nn641Iq3u>=G zkLIHz(`a)!OcTGPev3fAd#&BCD?O%>kZy|ye(V1 zlqjEW{G{SWlQ#$DI%}PJdyB`0_D%$~L$2vn>`H$m_bX{z)k!OQbUt0;R(Z?u*8f(` z!?}(!I1t{w@?!R(39pQ#li*_|42ON42FxfpoPxHk*pvm84y!Y9Q0Yiv#6fPnH1`XJ zlZP_0RzX09~hEw%hGNE_w*?I2psi2TxZ?SCM+V@ z&iccKDILWw@udd`5;m5tr+Tv(%TNkkvsSsG>0oVV@n$aC;@8GUx{Zd7l69q*%Rkhk zho-lOBI|}?WOWuETX;_AYT8wKSSjnMvCEu%cS4y5uj}>#cXC?>YOs@bYg)gxZ#HTh zi&U;^SK}eAr(unNDRfEu&3mcmvQahsxS*f!&AOmHAn(;UqoI4;2Wh`fgV!w^lWveC+o)u`wDD4-qG) z{+#GcefRz!Ye3vbz`GIlk^yU9qMe}ma7oqCiU#IEjMhxASXaMR;K+fm7q}>7m%`N%gQ;H0TGOFyx6RcsRC&Danc&TdaCzAg z9?G5DukEuqo8(0>6Lg33{_~-Zz$vWEr zwMEVt*PHtCIt*LX!&lwcNq){ww1%>d0h!E^^JlTwT`%B zoDc8c7rcdYY%;iweWfSnzc>fVP{I1rfg+UU%55*MLiu3uG}B`{6y9{E&|BziTx07r z!_ag%qd=rREv&X*>!=!N6~Xz)m-y>zuT;T%;of3U>RoW&$kd6;Y zP0)O08LXT9looR<$vGP~8cxl&HytlH*!}p8bOhJm?C1NCLp4<*w zT8{x5=lA<^tgLND?pD}G9JM?T%()Jc_HM^q~#8@b*MUsrIRCnP)(VEduw4ldU zIF$~Qu`7Nct%D0`?-#vML0h&5922NLx!K?cjdra)(XQSW`*2=KpSev99b;iA)voGH z@W|<5~ccc&N+RX^Yp;DL5Uhqg` zo3-1xUh%8QQ-C1wun5i;!1|TfWw1LCUgg4D6E7+@&(WcjO%(3XHW_mI@8+s63vQ*s zE75pkRS(G=w*I0|E8m|8kK}i9@vPq)v!%SN7P__2F~QO7FybvNpU&--ttoXCoi9P9 z4#PlAcVUOPXl>$VO*;!ca$ldK4^J2V>uKv+1`6TCScmlMk*?CU#Cp6JR_#=ED7wpE ztJ;NktK~PFhW+8`5%7uz{t?dZnS$&}G!WRTw_-70`D?{j6Wtyx=4=XT}U zt9FoA)No@83=@Es4(B_hgN8L(JM`UI{d%vUFJoKb_M%&}*UlSA0`vCr{qn0bQ0|rt z*c|g^3T%s}`G>O^QCm_+i?gb?<|E22cX2o9oSEyB;M9siRXg`olcQv_8GfAK!AJbg z*0p)=v?Nd>U0O9r+|BlsP7O3{*0g1`<+xh6)zkczHO(E8ByTPh^<=jtd1bvev}@v% z+UJr^Pv|cn;=fATgRw7_-NsT?MJt?0&mw{wR^!mw>m z%uvOZRM-_WSo)5?Q{k=xSL;5`_Y>ikT`H6b_;Ec_4Hsr@2}4q(+upKK-D7%H*^vW% zaUTcn74_!Bo?MjbF(Ep1eK}qX3q0h>j3@Qm7r&kA&e~oF8z+Nv>{sbsW&JJSlHv8Z zjqJ`$cNn~t?PY^}7k@o}v-Q!8ZOZm+I@hDVIn#hO7!NmY4DcA%C7)qA#Gp+pZ&!D4 zxpa%W*^!0}?WHb!SnJ@@TBx%ftKGU9ndp&idWYrW(l_{>DK4#ynUiN|t#lX~+!iSEoZQ5&q+3GmMLB)>Zgwn&~1dt^331)qe#hUsvH3-&o5O=(fMLb#RyKaX#}uQLgrEAFqlvFwrYa9RU9XTe$R7Ynz9 zfqUXr3G}yY;=&&PTO*E^wCUj~3w%8TK2{wHTvGx=_pi^oR?$|rDaqReUlgOQi}$G3 zQn07>#@wAM2*>jN7U|Rej{E=dfRpGH*i(+=?lr*UF;CV#xoC&Re*Z4f3G1WMu99jb zKUO|Crfo57S=eKA+o0D9?nr#3Ok7{v)qHC{^cA<)zS)9ytT?XjwxTK*-)%mrXO=(S z8ufUwI|Dgb!v$W;v2wa-xYTL+s2-jd!t+Htq-#fP8GUq&>w!ZgynKIqHC=VGypQZ{ z*iqhRvJ-gOQ|``&ZQ+}#wycAO0rgd5ZzjSTlpU4rt2+d}s=n1{Cms#}cmBSWD(G5@ z=o;vX9WJ_=v|WcD9t~$xzaIHs`KQJqE?T?5l>$%5PMgujz_t>57NV59@&~gVnXaOq z7WJBX$hJ2-vbPp?<##r%Ykg|kRjdsg2kUaNbbO_vz2F4lsCN|{DtG3?^M2X1p+BjQ zOIO*eou-nqw#>C$x^`<8-RQD8L|x@he4yPVa4X$p7k7P%qX~{jUMPeE6Aol{lnh%K z&E}*w{TBYOg>Y@rMFp%M4<0S_r^6R`95o(&M?5&jBFUAcH5o5g!*I;wt56Aes@6rl zR0KDdpRC$bj3p=8n$#Y_@m5!%I|Gi6?kzcA-L2ThKdV{xc&tbBN-G+gyC;7zby)4K z`$}7|KL?(jdny~&&!T19#15Ig!I8CV>Y)T=anyTK+ldldw7#`hytQO752SRQ@`kmx+rGvFEN5RmPfy%8Us_Mz;OF3J%F%O>i zpVO{z5MB9pvq$gHvFja$-3h4LWr7BWc8yftZQf9~rp{aLGB_-Bs@v#R+s*D&Ced9m znBP^68$B@&w5|e|q_@(O++$#1l(@QV0#>7CqbfUjjRgl(of5ivyV)r(A86^UMD8fm zEk}JZ9*$SkFFz>tlKaYgTiR0JPKBSRe4K0_^PK-$dGCG4%* zc%l_Ri=Mpia>9{hl>b@|JUQ`F4ZM&5-$s3x{?jaaI_x*TAN7W4&jaf#VQ2xgRi0h7 zPX$cCTFLbmdvkx|FY>{9cro^gP?)iKu_p&gp3yv|`M~T=+ntEogWoOh9QEye*BW20 zF8r{1$PAxy26Ep|gY6Hx63#YmXzensYxQLIkZ^g%Yt`^}DGbj!75d^7G$??tCk>iD zrOuSWwMqN4zcjpCg*>Z!CU=;IvOY*Y*7%GWF3ozc37GK@SA8ejlG7t%tXm~;a>{oN zPh`U7VD^F19hR387#VyLv}QbB#*^&aVQZV&ZKKmY`u1{Kvra*eVPJVc`2C~0Q%><+ z)Ib@CAY+Z{#BzB2zCB^I#(`zjhMwxJ8Zg)YxTb-ylOsWyjhI4-;dRD26q8nzfa;xf6h1{-C;VJ)abW}^*-@Z{Km>VMVQ3%65zNJlU(W1r-euX+44$B;R`CrYzJQ|iWF7^#vf$PvcuoxM!n3QH zk&=L%ElP?qvx7)KgGd!_)`DhsKItD>tQASdMTycTo78v+ezFl#Dp(TCs3pm{O65qS za3Vd6w&she`4QhY?DOavxFY#UgRAOy;L&{3MHK%Gqpz z$im~Zfg`D(nMe2&VnRv44kJ!oHM3Sr_8a>{c>;XFL`m#3x8ds-KemQZNIGU7Vzgy}RuGUL#}8J@gMpZ4j24-> z6DiYpD<_c=2dZWV@Z%!bicw$^+2Y0*#W6DiO|z4Pd5!V(2s*(qm9h%d6{4)kX=O3i zF=laO>$sFr?BvN{Aiq$3F^BXMlm{$r;w1V@jiExLM9fk8^GTjqK#^RNOvL8%*%T?@ za~u&4gOmvhd~i-qG+$)}(|t3NrBa11LLkslN+v3>r%NrQ1D~906$rqo2gd_Kj+`Uq zi1<8}ByrbjQ0%N#>C;0Yg7FKyRuttQE{oP=6-;6L13xJ$6PKiuiXdTDsEUflF}LQ4 z*s?^J3|6_APYN|$CQQnmSHTrgB(+PuD_lU?v@$Mm#^tBR=PE|U_=$`Y(gR1)?fEPq8B#2N9iv(X%PA7t~uF-Gdl%QC) zErb^-mhj19E@KE%E?g=R2Fs&3!RZ;ih|E!fNRgFF=CF$v2&qubcSYaLweWOYe;J4E zyJ`)xmHD&9B8rl5Nk$knqimu=%@5>@^#V}{lOI%EHqZs>PuE&AuUuN$qD4o zEdpvhRXt4*FMxz76|JJfKol6BzqD|qztIT695Ce15+se5WK@7QdA>rYrnBw-ns_ja zMKkF{6vNSSCsif~hLNF3vBkmPq%)GB!)5#2HS(rq9FADPOW?+(u*Hmj(7B2+Z1Rlm z3{S}plnK}d0gijQ%?oQ5aOHA2C8Wdx2?w}A?^S$BI0?crlL#OJ2}dm+*^SDCQRN~0 zz$CVa2@m?Vasj2(@dZMmo}Uq@4&jJHleq#k31w3vK4}(-8KF$JCJD|2Yl37!Y?YY| zU?5x;x!4n5H!mukogf@rR=cuxMfIWre>Pvf)DW2Ft@1pWGtQ(KlL(n8ut=&Gr$#2n zOE{z4`L3lP1R}-?2E>U#)bi$qAmxHEf3-*#1!+^m=gEPb8?UM(BXRG?pmNTb#IU%$ z$fXU-6K9q3*covk_Ddf@YGc&LrXNe!O%{(uA~a6r7m$)CwOYp7W%dyPA;~Zj3KwP1 zN)e-CG(NKQKFC@HNTIYem+*r4i*NKg(;Vos5R1?nww+I zTsV^eXQC|Z1DOY=z|kr=I>QgIu|hnXfhYT9sU6RKDP9eDc)AG~iR{az4^wQC%a`)S zas^xL2hXbD(lTaoFuNv9!fpssh|MxZymefxEQM29I6l@IWnMrj{L=KXnyQ;cH{(LI z!U>6-N&a9eSrD8uu}b7oc_u(*VhF@&Q|2qP!lM#n!>T69A`ILXAb=GEmgq@iKnyI9 z&6=MPq@PVE(32DJVLGZ5XAL(*F-^fWwOz)fDJXp*meME61-M*T3vlqw^>iqkgH@!V z90_~GNMuI-2LGwmR4I%FMI?tZD8^O=n?`Xhyyzlwgeg)vB8iQrqgaRtF>j z2|~G0SUOVcR}z}S19@cmWWQLc(FO&uT%+UWkLT-yWd2&YP$}XGl$1=tXX7VG7W_$l z249gV<+24buAHw8&`=yHSIzhb|62b82ij&ryEshiFER=J{VdEVx&OwiaDc7jh{Zes z8jA72^9Nad$iPSGi;NU4=AH1Gr}4(@`0Ns+&_^0-_erAU!X zsTSDvc7MB+o(7W9+Ti4HlQx8(9>SNzawPn8VVEsQCu56sY(pyEqlBDnzDy^DfeaX! z#N`7&M6&84At$tW1R=QhnFOB^geaReY%~FtN~r+3KAcg6=$n^7UnTU-lW=7!4#m-> zj1s8W!q>Q0R#A8t<$zyETJtqhf>(J8*QFqYc=Ux#K*;n5)TS_{H4m171Wza;pd?Zi z#z06&$pbZHu}~DH;zWpe6^&)VGHQ(0B+sGdv!MYdisTcysljoDTq?vIs#OJPgb`}7 zh##&JNt6n`Bt#M{lCkjyf#KvC{iT8*EI))|n-{L!&l(WYAQ;D01ZxV%1!e>bCg@9o z=T}B0r-X)RwZTzHi^eDlr^ah?_#*$Lpb;5-3nwBaDwZ^5q|Wi@N<)R>!r%Zg2H{rg zst9a*B1ZF3&biWa3qYt~x3=SLgF_04KoaF)xMUnPe!RJiOcAzvu|~?p5*lADW%DF* zN)#d{57aUKiczaC$=C`$B^A7Hdq0*V5-|yiw1-rDk;zZxCl`=>N+4r%1iq$Lm7)eXOEs%;n_?R>?L5g*VLsAqa(2)wE!oueB_F@hzc= z5mlsLSUOvTEGRONGbU$t;X+7ck56Q)0!$&XeoThqHQHfNhftxg81e(C@H%X9lpmJ@ z@|2n5iUo7ZA-GySLz{p*IRzSMr9A}7fTy)5)3ITpK(5xuPZ1xInI?s7Dz(B@Y99GADxl$Pw=BKxXl7Up9F_1e_ zlP3%0#&RP-z_!dKv&LxzG5%^1R=-W*jVnwHr_?6|C+1j2=-DBaR8%o1f{6;<>=v(T z;p5do&8MRD5-cb4xe_BUb(Xjmcxr<%F-8(&lB>dj6?(z_3L_4E)_pBe;vX0))rvWi zl4&AF9r~tcA{8Vg^$URF;7H5@yjk)|315PjE4&;~xbRP&HyCB;ubz(;T$#?_PeqC~ zGHXyMSsB3&w(-b}fJnxoRC?D*(j*~fjX0F2uq`1C@w`%@Zbg;9NTNGbdsxWV#ad(( zTZmUtO{fA(`;?pnmNL6-fRQL?v?q%=SUw^73aOkFi~RTypj_DAM~os83D~`ofIVuw zP3g!8EU;;@0ARy&JBY9`p~}V%0Z+`KE;L_Q3H~4=K_lRjN^`ECpF!pqtcnCIDR*2a zxP*nIm<;9GPKnAECgd7bm(*elJ5nbX zs(B)R3FQ}IRfsuqo}ZG(!;%;yR=(G@f#OO@u}#Jk^YI20tzksUuet-d@{yXrkVF-m z3v6ao7}+gu2r-iasYobJgA4 zvSL6Q8zTvnn1q5fZesW-EO(M&OMCl>Ok8|^f0~R(>Uh8oJ3oN;5Nv2C5BtZ!b36|BDC?-I^u7!kNy>y2M?}d40tq7v z`(TZYB>hD?E@nRJiA6ow1W+Et55PmB!hT${0dD}tls+`>n`nF% zwDJl@@{9tB#4nWzRD}*Uuxt1vU&*Fyq*)-r)`uWfnbzv?YA+{9Qjgbvyz3D{k{~1` zs7Vu^Lw*=sArZhtsIu1n#FHq4r_^ZWN*;$2ngW%6Vv1tpbq^>?&Q+0&NVR<3M-o3u zz!Pv~T9S{ee{g*iSApjvo4_Yd+(06cLPQcu%7mMgW6^2^-fkq!7}e1F_t|8m0xW>f zESc;OX@EZ|4fM~8#_O@l6r&GJ6o^zL6!WbxKu-2n#%~o&soPh z_-yvm;o~GohJ9nH2@iYt92>Sn}8#JxVq@=@0j55 zA9MA4vbJQwP3dzSIKtb^-JA|*OpcMTIpV8o*z|x?_+7@;!mW`%ueu$-xfEWI(=2rW zZsaXSua?xc9Lsz*4|Z43hokA2utX2%B6im9B)=jKOV$*e<()AP#hzLI`E)p7+q4MU zS9RF7H59*(Yncq67~t02XHw1^J}uu_{eJYfiD*aMjePpbH2QKBZXyvkVP}HWW4ccJ zZtN}>;mf-7X^$m+67$2DXXIJ}!GlcA49qj_qrX^3bsE ztAOhUxE%7Tw0(?o%HsvyQu<0Au+{VrYYF;v1M#B_cgu;p6#y)?Yo>=L)ox6^OrVu` ztMbksix)RkN&wazVY}We!ds5>GgmX-Rx%=WPw_mr#9iK|MM?HVNW*t6dXyHnCKXq* z@oMh%7YOvvZ`Dkkdee&M?9~#nquG_~tb+am==P&)lIcQSguBXPg%oV%sR6As9oqon zE8tp`X)gww*HVlHR1->C0FOn&$-1ukAL4J5jT%(mE`?l3@Yd30j6nUOCKX#4!!u3T zuK0}njQ?*o#iaV(+w<@;7p(pqUud7p@L4!pQ%O>!`#r=+BB;MVJk0orP_zS^<~)rK}e$!Cm247to3CN&P9# zk!F1Qiztj=LtOGBF7b&3ynNvg6Bbbx|LjWOJ_t)fNnTWHWlRvcveY7>#Z{xUBo5pB!4o5E0hTQ0$jIe zRK#uTM$(=~JTr!Xrzrv)EUpMIt$QZ2U84wO!kZ%p+goF6c7ixmPaIu9!kWP#G)uDthYE0N4bem_@qKXWvOD2MoLY-R zjlk9{k6cZ_Qi6@6>WO?J9Y?K*97i0N5RW~GJqqAby8!X z+P@CU$4^Pg$(xT=mQxvG!;Wd;39tG(Jt|6E1?ya<)kKeW(a$LJv;t{NKYDzMU@ zHqmd518mzMF2>jvpcH|YeyNgvaRDQZ+~MZYMfRjjAd5_C^ht_7F&B~w9Hrc3$e<4w z()&jOKk|w0#RSw4^mZ{pZySMS5mb%^Wf3Eae5Qvh^)C_lX=Q<3JFYA2OUP~u-5<7Yv!+h+;}ildrdhfp#AJME zAa#$bPY_?v!x6`bsdpkCV;KmPizA*OX5a{p?l|jZ0;b`m4YKYQJwsI7$$3_N@@~~^Hz%+k4=bKdaw~Os@jv^L|&jOb23R%Pmb+1RPV1Kic zo@>uDu~>o#d^V9pY5rH!A*%3i(;=$dHyxs?{=4ZAh3-rTLDZA~J{bai? zMiBMlUy+P@_YWkazPXEJ)VKGLjJkCf$*Aw|AsO}KT_mG^`U{eJ;x3YU);%Qk?7K+n zse4H3xjrPpU(aK`a)${5mx5>y!b-Ujl6L965Esda+f@#hJ^}ANaYQ_@^kaxq4v{_; zpNQj#F~sog+qYZ)r*8^;$q(L3KK-Yxe+sYh*XP`+Y!qPuoCW{2()WIUqg{9D)%T+R z*FPSXejaYaH-u5dC>L8_e6K|-_LIBwhyAwh1w2>>;mdU=uhkcQ<{|e(oPL#l;av=d zamJRrWAX)8pT=LUzOU88zR(|E*D<*o|G(Yp`}%9@urJ}x*BzApsOC;xt#BHr-!0<{ z-Oc$&2&4Aky*~c`6E!bx;}6u@en;g$q1K60|B4!r`gOPhu$TAF)o;Kd3-Q}u*X`Qh zg09;&zXgf^t1zCk-`?rG#l?yy{}6|w*}sWH(Uead!l{9Oh*Htg-$beCAfG4&RJ7TW zjwLVrVZ_l1e_c@p(V2fxY13PmwYaXcbyV@1<`}ECgu=G zj(A(On*-V`9kV-f+QXmSd2=kzyJhxK!a1LK-$uMWmViM%0S^Z;90NAmw|p8j7A>%XbT!5Uff+t5dD z{$uDPcm8$gf|1AnJoG;%-pJSfHt|M&_UDPm_!|k!*YI+g-L~D zma+La=#3Bm0lo3jzd>)j_@ALSe)u=&jX(Sw^Z_ve6(9aP?r?>Gk9i(!cki2p@Wi}c z3i=n(tQa*$0OKDM;ln>hgDH%EOr#J07%iqS{xKtb_{U(W&WC?Yln?(HJ*F`JG0{H! zV+@$W_{WU&;U9xJ@54VP#)p552~!yVm{=eFF=k9*{A1#L_{aEG>i@_1$N07v-g5H^Wknv!4$^bG~S21DHT)yk8wAx{S9~1bARA&dgX7pn?Cu^xW`g|!#!5}2YT!{OkvPtQ+%Muj>i-RJvP+`dh7&DVbEjKe4xip#1sZS zHr)q$>?BNK&|_^r&|@cK3WFY-;R8K(3Z^jVv6(*5W2a&YgC3jZ13h*crv4v;9=qc= z&|}~H1N7K;{|0*OxBnS*bKu`VH%I*&=wkD@{|R*1Ip?u-*`?()%RH6HCGg4KoE3kS zATgao6cDp8JtLAJo+TYD^GvJ*iz5~>e&)RRbC*_M(oWC5B)nL!6go)rJYpG6TXt6% zrrG8Nmf4m@8G;O@qR9rdD)#59E)RWie4%{y%}@m3dU z?yzD@z@t_{IJWimUw{vkNhvR4A zOpjW&ST5j9kKNW#-p1;F^*Y0rO>OBs;euo2Z+~dHTf8xN~zjNUF9S*$n zC-C0=odX}<;lM|K=fI6S9Qf>a4&3}32R{Fu17FqbhYhKNHqI=Kxx32q6a=qVr9Ya63ZdB0kVbT`^ zM>ZUIW9U#{^@amy9(w2@)}^EH=uhT@lzjr6*#}>Q zw5Q_B;9!~+H<5X+feqp~o4$sCp(w(s!V3W3r};jmAXx0vtMT0wb6^ZYF<5vME?m*-}2sXJAkBiL=>8k^AzF%sP_$@Bh2& z*v|2cAnsz+W?U~e^>vi69MOyWT_5VZnhJye4Y%&oETq0UHuu@2WxfWB3;ZWY>CSArb4nKaz>Gfh&!PK`bpKL%T@<}86a73L{hXtl zYM>7i^ucLH%ajr5RX%!Ul|Oy1j6OGqe#SsQGmhRQr-v8VD^LrXPQR2vzYt76Qr%NZ zpPNW;2!oec@IpQ8;9L*K_xhcx9Yrt$ZpXvXtczLj)m+qXdvXzMpLR?F1BsVLw>7>X zhMQ3XRhz8ty0!5zB!S}-;8Q+)jBkSzUl5zRnDfjHLCqYM9wxEu4yij|H%6;fV>brgB^Tqb+dKAF%Jg`V&9c*a~gJ9dqG; z>E9N`D-0X1shg{hAoxza_jfD-Cs8@XKiIW{^9R@g;F05_{Ek zKuR4}$hWsbCQV@5&1{d-9!}eE4C#N1|@;qQ7gkQL@0`GZ6jP+peRH{fg=mQ zxg(a&!dK9Zo+RuFp9f|~T{+b8^*jNcRFiLZXF6=q>fq!1?VS3=8g(%r6}9C^FSI=Q zfEvHD$@=;GVjmF<-AwZuODLsquXZhg(ow2RKvekLD9p7UswHH(VGYR zWHftp|JB9Urup`SWBBbD?9qb@k_o$!*j`GLqt{=Z{&q6KVnRm`b>G?`c9`MWShzll zw&%d@i7;FXYb)U8?1!hmrhxvrR|3(O!Sql8z9W1*8-9M^Cu(2n<+<=~D0o{@Bks#l zJcfOEaK{!;B0kI_c9#(SQXGB!YWmydjA--;FAIi4;3bVS6?HFJgWb#|aCmh`w!O}t zKA3?sUcm6N8O`X6wQ=XO>@BY5VTmgZ-g^MPsXY^LXu^$rL|33*IlR1pCcA5gHSgxZ zg_&*5o|({QhMlvIi&$N)@JKPsWnqDHx)1J8ag9P?jlQws2~2&4u^Pq*++0*exGM?R z=L7zqxYGul0b5b z%3<7_$?ySpV-j45!0(D+!DCB%YL5!n#d>nF`!_3*kMpkpDp6P*N<3Xm>@^UZ>Tqj>W)8BQ)W^u#FeT~=cBOWc?VlRin$s7sOF5sYksVS4d2hEr(H;Z$_vHUq&~NQ z2%{ab*k-gN2A*QEJlJR^G56|>w|-@Wi8H$i?0Vm?L0)WFjKzRfcu0F99G;wV9(9(mVb7?&)pJUU%YM!bf<62yfyYS^}AK? zu6jlSgV8KlvHm`c&o>y@7YG%G`@6jJ#ET?xun>3sr>nEyUd<>Hf9}qL?epQCY3MWQ zDai*9mON2U@6M$^#V>^uu+YcV^zr8HD(KbS@d$KJ{r{T#@_;C=tlxWYR~JQ56lGhs zZQHhO+ae*P(;@*xM1%$!L}UjM6;Tm!S487}t65y5<-SDCzD;IEv&ZcFGTGNoMlqQr zGf5_yB$JrMO!WPlBs24U@B6+t^YZ?9YFT~Hy><6{?m6e4b8h&n((ti{@UeyAJ6FAj zVaw1XQ+ki{n2Z7C&l2t?%ix%i@NGi~-zgJr3$qLt=KU5D{_K378JFR{EazPAbD2-| zH=4SKZm!iwmZc~`Tj+G-`L+Ly*4vUDF5S3 z{-;_s+<=T{qdym*rgPSNQCbNZ8MWxsSQxrL8H*zIy-=^tSi0dO(gi*3FQ*aytpv@~ z*o;-id;EzS{#0&Q=0%+g_=TYc%EM4(aP-h|^WqGnCqoR|c)u>%y~KE_pYe)6yr46S z2h%qNN{oGTje|~DNkWx&aA8WC(a%_-f$)zq0{{4f%zhndKHbAv#&33?COz2z9EUF7 zKyzTmiG8;jmElaI*)Mlc*;oZlZo^g{Ryr#!-I=A(nF)wtOUBcYdA(@PQ-7O+MoSsL z+w1~kbrI_nbAPc*!z(ZE1 zEs47_vuZYh7ld*^Bb1_T;9*3NmjaPl36Y@Q>L*d1*AnQwLgk5Nl0vAby74qXJ4DZH zs=HuI@xo-OJj6uV74+-PcAlx~X8+8N20=|JbUJOG98FT{a{_kg>X?qqty8xc0acnU z`?yQVo6a%?k*iEn7O8&K%VRUIpYDK3NhOqPp>LauvRhHo(9AnvO6im&w`vdh^cY>U zOMYmjrU`+DtZdny=FUWI-k9m)IUcW;n%S0!zL6x}um~16xu%x+$*egpO%XKbY`tFb zHY;AInUHyY_6J^3^9l_)sp6^zwk*fg$0W4OwAt$m3j@xaB(YLzWn3v>DII3qm=Ud0 zQv}JD>&TK}ZaQ#GYU|%{mc~dPx-T8-U@q2z+G0Fy=qj1``gC^{<^fw=hOlZ59#h$N zN|%~tkH>Ax>j=8DgG|cKlx%LLMPxQ}*qFr&{*o>VndOR-xk{4lz9o&kO%NM1-I7=; zifK+5P{>>zvup8P7zYtLck3}yPL%2HQ)m}3R(WW{bxR^*b-)u)oq<5EUll4does^* zLRl`q*rmSLD;HRTsBru@!fa>F5*mf*F?;+c8LTsZKRjg|}87 zlV$IC0x>x#ZV`H|#Ei`vx^kKBPwKFVUO0BkN?sK}SIx%stwgDeBr_+%BEkZ`gUzXF z&&s)ctIl!+m%Ch69WJ|F@dysROmLg7tlHI2a^mpWk`=EeO4(UutXcHPx|F6mq0VoI zvRGF8+BcDpNSr8p&AR?JIm;`HnOJ*S-RqvqmQ@#we@fHrQmUvJwK}SNaKlVAsDZe! z{$xx;HS3xU=MtgQ&k|XoM=Vz*b7r$04?)wpsD828XMxvZ*X3pNCS)J({5VL}*%PebIeRaH_IoOP-zLF%z=R_uQGA zgmPfxpf1y-7B3gZCTw~Z1Ff-Yv)@?9=8>9n6%R0%Jz13&Ym0 zWH+^{DKZr61iz+wa@1tCr8-x%`O~E=A(WNPr<<;^6+50x6}|RKKNlS$Q@lYrB`76D z>m&=6Zkwr&U2NWFYf(gdt}f}K>fw22;@Azl&NQetHAjbWZA12OzvlM~-jJT0taQo^ z0@JiiE)=HJ=19;M8hbr}EWy-v5`jf^DZM~MMi96v)65?G&f(>91MH;TqFoT2 z=>n9{-44aj*GuWJ2yzvAMVDsRa#ceS#dakRD=1lIFc|k}Vw&hQo|yAtU6^LOfT1x% zvWL`q$Tii3KfDmctqT#uqV&J%%J$Cp?M~_(xz%B88)_WS+m+Vot~Z_<5#BbPzdV3{ zSZiE0uv1P6!@=Z>SzGGEF8J6=*`u%O(zk{l1m&Kc6Dd7&o?ElWFTV*q&3tlT6uBS5 zCF~B_!N{c3k8>%z;KC2Y_-!?wI>NutBv&kj?)gMw>|I56Pe!^)k-5F&kVRSH9J057 zbi2vUH1hN$#8gF!dt>=U*>&HpCX&E=p#n?7ZRF$_#;w4mowLY89fVIHColccr?4=A z#0qoKleN%h$RvhDj3V?pPbEXyQW!KueG1n@$rS=@X3QgeEeVf<9kHK0uq3Qze;Jq< zI7D_pap<3(+OCKGBcLxb3VW(g!)U#{>l=tlg>myCed9UofpMfqFgwPrpl?8!79Q1; z*qxCn%1Mkb>`Cq(o7q*{RUs#J1-tSq_=p8_W&40uQB(ax2LBXdv-^TwZ9T&iRd<=2 z7xle5#nizgnC_aBX_K564;kXC9y-AI||!7{Bme2L)^>x;vK!%4ZbL^dQlZPJML zid7aqsN>R+;bq2XQ99f3)yyy(_c{BBeSmY3%Xz~(GH|<{ z^b-cKVdQU#WGFFm%=nym)&@OC)nyX|50h-%lH>9MYmjtP&Kc%CAj7x7ob5oNXLBA{ z^1wiIOwOf0HGauYE&uWTKQ@?W{Bv`;HD^J<^5bY@p-c#?IZyq9(NV^a?;9P^qau5a>&Z~9MTr@uV=BJO&{~I6W4(O{T%XMA!5ZN($cYLn<-}(BopT5rR>&P(8E$ss& z=2rdKv-ght`Oe(`E#4-D*EM!5(6e_Tcr`u}4YO&IX6E~5#7|FDcSZkaIt=Vde@ z_`ffs=@Tk{=`u3zPD|05k!LG6nhM%tnseA+3%*M7bGW;;g>t#F48Q8Nu-a6c%jJ7eVy!^&|w~osoi5i_EwQch$e*P<6~C%iB%e%Z31 zP-ys!G==4+rj#3QMa=Z_tPF=w*d5c!%!yJO+7(8!j zq~^5BrMzXUeoeR!)VUYQy`U{Q_Vm2fks27(TJzRi{u+n~2evr_>iT&bBel_eIFGM> z0ViBZpst;y1uQaYM&#y5-RY}MJ#Wj}h4y60-pbRfOM~gWq^l8r!Bd&xOZH)E#N=JY zK{+@S=9+Teqg|;Nd0Lab$>n*_K+k)jTSMfFk;YSBnellqbvtshbt4>Sg#GYg06kx$ zd#tf3M>bX?)#=Ez-cA(LyEzqXULu%hPcrN$;D5>IZZT@JyOcbc+f$=Szlt>Vu0&Uy z4F!pDs100&iF4A=7d9LMszvDynTq+4c*o7orC3V0QYYC^ZV_- zwjp{2 z;`9_>HJ9=yTsen@vrvOY*jy{I*}B6te`2Kd^iFQgFFo=n@D8xl@sKbiWBC=31#ISG zKKc)REr4f*;veAkfM3H|{*fD$e@pob2yI1ZDYxWrD}N0&`eGSFlOYJpy~3jMD!cT?MTI!*bPNMu8K@JGZ`(uy0Ql7!HuL20{Suk z#z@|&7-V}>L=(Ii$v<7d zaV~OU5Dt^0wRkU*-@BJo z@R-63$DAXb8d0s8^pxayumiXlMt>EIjX;Ly5WFJ$Mu8;p*UszHDjya;KV6wgD$6C@@NVwR2?ZeBa#llYtvuk+g97$@}eY<$JB!} z8?JGQl9a|Y-KzLpnSL1@F{ItW6_LWzk8u|4n7WU^tyXaLR58|t>%EP?CK$uueuSYp6g<%Q48Ays&^tiLrV>0nO|+#A5j-m2JDl%b0#}<0`Cd$y z;Ej=@Gj1*hZ_4-qm#2U<+y}jZeNnYOtbyQf5DN)h@VC=mCNjb&5I$$d1#g@7zQp&f zP;7jEcDBy48yWW0kwb13*kB!p5}@X6^v5FO#C5&kv$ z~fvq;G)$oPVPow*-7Nwhc40`e%l#MAGZ zLkljQ{eBw1WjMbjSK_zi^INJDz3vp3O)e7z#isLLt>d=_1yu}aY4#ZY>*BDbpbRv{ zW2BjEKvgPQ+RXTZ>XtQ{)4^aNYx4VZ$Oz z$G07kNvDA6NIY`9ycNri;MA&MEueEutzcd2XjM=|0oMAr!+COx;FO&*zoUu^1v^`> zgk(V>>rttFNd7+IZ9KN%K4@D$(*>i=}xR>Dta;K3GA@H;?fBlUA_zXJ85A@A5I{w{b0@C#8L%YrxCen7fN zqzofY3*MR^htO$+#+h*iz4Hh1`)2X`wKQiUB(SNN_XQtC%6bo=A3vV|fF+Y9qQ_O# zpbRlzLn^(&R13aYFv;mnk@!RL@P{iTC-H}7@`r5>EWSc(Wb$dkl|peLA%)CXL&7Ss zTsDTn%~CNvLA8d3LilJtolA^m#6l*S@rBNXzY=68%>5E&Ps;jH{PDs3@mx*|FJ3g+ z>{sYtRA=W;#PKIu6CIG5@BvQdVs?iIYrAlKWb&EyW?W(J;!23X%H*=~vW-785Z_K( z{1M{IBIT#{LC`dL@!wFiExP*`Rz=EjKpIzAy(CM+Bz$%j|D7&MsvEPga0cR@we&5a zn!jY_FEvV9k{vNTQqg-6w-k0RTZQQY%CfKrkn2(Wre(ij9{zGZf4P>wJc;pFbj6`_ zsc>&jnDAHH$Y7+$Zh+tG2!AyNUml56p4w+R3a?te)UDY>QA?C%Ia&6mj#jvLq~OvE zv6~d$6RGT-WGaRCw(pW4#FAXhlFl%$g-=8(&(xx4o@_sd&{GI4M$bIG!h@cH$l}eB zfIb(gI%VgB3SV52i&0lG$8#`78uJn!xfBn!p9myRktGlZyD;0(r_6?mM*STn!3l** z_*?nN=P!|}UO3w-{H&utLVral17&^LF#;(QNfh=CU~TB>Z^uKI@~uUHoC9PlI^g?` z;^-d#7MlHb3XV1G(CE_hEbiHq25qJ5mcO#X^9xAR`lALU#{W1NPbmgd!#2%| z)<^12L2Vk9-?-*ACc0&xz5wnk;Uf>_ToI}3^@GfJp$E;iHz4^gK$;nlBQ4su_HmT3 zAAm;@IKyHfEpHfKA=fk;JbW0w3>|+rfjVb#vu>8k)$n7{%48#{F)@|w=uGih3hcPBF7z(U}d8*%MuUt20^j z1(UKcc+uF;ak9JKj4%3P;}dRA=_r|hHJG1OF6CcM<6pH1Ad8C5N2Y+3jxV~v$MLV` z^Ru~d94zs(<@{_BKiih-Vm_n_DUpU#r#TJ9^Y;-_5&D>0LJ9m6@I1goAsY^G7bCtu zjLm6CN9Z(Xp#jFAD7hXQ2o}?g^bR8%SUDDu!GP2Q;tF_KDM_!V6sCHUWE#)Z@-qVch2#_726N<_<5Vl&(AMJBW85IiWE)Y zcIWW8(9F(1^$iQd1kJ_HSs3N@Hcr8Vy*#ueGWEG zk!!o|$3z!QImElpFv)H6IIy~qU~8oDbUa$Tt$R##3l3d@Fl_WfJGyhR&;^o<`NqtF zq5a(_n3Fk0X2-=J(~K?$oaMO~b852SRPg=ro@F4wSm?G$qIF{gG*>AifGc(DMkYiPJMaPVh{`IQ4%=xI$*m2dt=kfDBIXF0uMw> zp|>N`&Hycke!m%d=%G^x4M*9hH-mWW`|ce;D$Rt@yPKO!6_-cJ^%>g-7~8!zW^5m3 zY|o4K&F7Knr@JuPUu+qch!ZTGCyy)52_fQdk?9aA#D#v?D#xiVkFhh~FeQgyw{co5 zZyOV)#c`48XKqJG*)}fBisKP_kia2cal*C&jFgH!1eGt=BQs9j!()mEY}<{6s1Re% zd^`(Cd(@ppu`4p;^i{}X$hI#Kaz|$LVgVNq-5wiVu*{3LJacqiltX+0sK^HegX7;{`6f<|8icY=aSqPuw{fcMr{2G*; zlUxijO7u8O26w|4?vup66Xk&$keU^*fr3IYfg{D@b>=5g83dfVG^0eZ*w~eaYTGg2 zanb|$CcrmwrFiSE4QNP|7K$!jJ0@_HzDt3uf)yW*H1|SgfZUGk`UWB`R(uSQrDPiN zyLxv8)?M_7laU6*+=!Tiqy?jQ^X^U2=>xW%ry$}the0TWaF)IQKY#m_?V zA{`a`-M;Lo2(|cmgf}Dhg?$D>FCqlPkm8s29YW~k$gDG|sMssTe2ZkKWU3gZrkF1tk+%KacRyZ0*MK}mnwzYoXBO7WlfKj@SM zQFHq=g&B83zpeP2$edF<(I@8)i~t_XCR{>G(8(nvGUxP*TrQyp?q)iMNrV6wYyu== zNyNB&aM)6k5Si2aIV-m;;Iw4m!BM7CGWa0e5rcLSQotg>Atx;v8EHB7q}i_|>EP!Y z@QNmTe5&0zd5Ljfy>Z{fpZ_mK$}y3a-esn(BodiQ$G9R#y*bp99viQpC=)6MXm^F$ZL5I|0vH_!&Y>3P~1Jj+7jYs++6ppl> zx)h<#(#H|%LdeOjCEZ7$efLN{o+aoROyrWSi206iY+WVWk1R*ycOL0XQnLn#qTM44 z#$#iQ$Ax~ni)SO3t0SRa2e*`5b95sLP6p)qNb8wx`1FRO4=>llBFI=3vngx;--Q^cP5Z$FXS$-3bL9hMev?HZR&7K<)+PHhg>1f9sL5ErC7R zo80^JxOZ;@E^I9CtTr7bPnAJcKj84f6Ob=8z#Zy(pOBQ|7IQQaLNyo#ud&zg2EwJV{l(PN!4S%T&9REO{hd;ljlJRqp_e zr9hd$GjULLDNh53?MwG+0!p=~C6x=z?SxW;>cPQ3bEu|m;@H|0O-xjpQWZ~BlZHdF4XfKmffS%F{ z;mI*ws8q#O$^PclyhJ;W?z2RjfL&+ev$H-nm5I;KwnZ=9)m7$mB&DP7zn^`pvP`Ik zqE1S)kZrTc%w=Sw<)5|O4t_7$ol_0k#{nmMmAL*fWXnsJf;KD{u?My!PFER}_3t67FCZPfyv)Sxmu)MrZrixUNfrzCqcp6n~lhwRK%IjQINa=W<52H%o;w&FAUmp-v}nQlwL*@nXNJgtziIFjU) zBr~q`?e&)`&T36FI^l=?+K^uX$E z+&U?Szl$XuoG+QYD4w;Eqy}r?+R>S99I1l=+NG5!NY*PP<+R z-4#=tl-_ex(mgiMYQYQ42`_(%+%ldpZU zb7>xpwK&q?pME&G(bY}HIC>wn-5&nlOgfsh(-d37bMI_f>V5>%aH%4MOW$6M?yMV1sr&*dWYih1^@hl@my@H+-F5{)?;Wp5`U5ohofVKb$cY-B-&WtNFr|0v+4%`n= z-q9`LG*jkRUzCXWDe7ke&SMoq8)TWaCK*Uu2Bm0-;-7Re#uy3D7?AT3-$N8{IL|E zhJa1x>!}8ctn6tBeI}YC%AQ%4!(UvtZ#@5`JUknYA+s}KUm@YFsgWz2%59yF&OAOH zIhE6Hc%EzGA)Y-uCmeKzy0ZtiFEetH)nCA!95v(1KI^K0&n&(+v8;PhYuL6a2}++k z*C4^)K&)n)O4$$F+FaaYWEy+>8;3)#w->~xGe> zZvHUkk+|JOPmBEf{@=FVJb*u!XdEke!Ev|y;(ZHxhwwX;>(}#_F5}0S?YF;{ap0nx zW8c&}tuLjzj9Y7Z(mTtq4TZPH!c-@G`~2{!+;C*R@u~gyfqP0&Ze67QOewcauHR%K zca@Ru$}pQeHL6YoEuBm=b@B{yau`P+Y>ZE~JM{FqlB#9#v2goobz4=%YV*Kxy=aZ) z`Ha`u!|->^oIipYJHH_8*EpTLd&INIXx}f*Xu#xWM?6dT=2%N%A8(aO#t7|X1#5@5 zqAVA`BTAU`{S`p0_A^eTlkk@-!nAx4$tR^3G*oDtG(l9G`MNJ?f8y3pl z^Y4U0m4#Ht@<(Uvmdh^&Qh2lH!utR2pQ)4=Pj5HAon*Y1c67{3K|cMCnTLw*So?L` z=EeLtG_uNT0&4;j&DiqV%AT$!{$@4rUcRIL>w&j8PtLY+#QV&F!?fa&z^zdm z^omDeW&KIux*l5b7_6(Kw)4+!rWKC|?#8dTV3_=LkEP-Xgl-I+2>co6qB|b$d=r^p zap9|ne)!Xc^<9>Vr(tUi+j+vzoX12a?{KKuA-mt<^WR3z+fmqafm4CMp|Iy+`TS+z z85HmW4DP=S{3iM#;$Qr!GB5qTGB5vAWnTFYm3j4ltjrt#b!FcAr^>wjQ)Pbt_sX35 zM`bvxI1MdGtlNq+0TzJMOf$9Oyz=%CZs98rS;6FBeP*pUmfH z2b3z3nNT^UY`?!&f%9b%Qpa>S;5OCDw#k(qT~JjO-lGIrPBoRvb(5cr%348c2@Yt# z531Z+ei?*M5~S@4{>ore+$_pi;%*&lRv!=M>pS<0$_PZpu1STkfFTDF z`XHtFHYzgD!eN0AoRExsTo92%&dek;wrWi63YU^D`W*23ZK*1%>(|G#467=wOHT5+ zC5W6QT+t)5L0*=aV^5N#$<;2=>Gep^97?EKT)&OjENfN+zdYoaiN%~o{9@X1BPyo z-X`H>nWj=bbjF9GEQ)T;?)0gesa9XowA2A-<`@BKud-*2;MGm7dVJF#1kjR_uHzO2 zyBNf!OHy^!%&n*ugg!zGMiINB8DBkf=4W1*sVHI!vx{mjXVpuaZ)b{mN%hL+7t&R) zq9%)(DiZ}=(P4kUltdBc5;-X)X*hY3Se^~HHV7=qu5z*ZhS_I{-Qq=cbxbO?`ox@k zaEn=K@N2G0L8fq8{a8ypYWHM|T>*#awraBIRFiD+0?K`>bI!^zWIFaqk`y@B)ga;IaRmrL_gQC*2~d74xn8XofSlj;%b!EkL?QdJ>;}R z&2J{u44Svbo0#Gd+L(|D$~-BBi#5q@hv6yM&k8Y?vZ>T$&X3I&^b|>VqAgw|2+hBV zh{A#>`Hck0H8l(T4!4-@aQQtf4caR@^QofZT%cAiDiZ00^uxDZoUvzt4 zjiR+;_mQ}bbaKa$Qk>61KYB+=AszHEOkdhrT)CtQ7y#2fA{VUeg9l5k2TqQL=-8bHs00&X}>ahu1Id;wQp`1pJ_{VuoTgzifT@&2>Y7a zk2Zo^V`7e$xX2|*>9An&dc<@M3ggKxRkhnwG%Uutczzbh BxW^%pYjuN-9#jwV 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Korea1-0.bcmap b/lib/jspdf/build/cmaps/Adobe-Korea1-0.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..cef1a9985191f53c4a8a35811d1caeecdd1a1820 GIT binary patch literal 241 zcmW;CK}*750LJlm9s3mT#ba}M+i{E?2I0Ydf^;t$thU~bV5eb3M1+Wlh=_;<6+}yI|M2!7c7^j|X(nMGt)pFvJLB jOfba^k9fi}Uhs-HyyF9NeBuk=Sl|as{9=Vak*&o)>2O)q literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Korea1-1.bcmap b/lib/jspdf/build/cmaps/Adobe-Korea1-1.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..11ffa36df8404ab970df2a24b2d80b1dc6348436 GIT binary patch literal 386 zcmW;IVMjwz7{KwnUhY$zFR*p%-F-PT8QF{OC#ZI;vURs}uh^?~l4MqrBuSDalO#zd zNs=Ts!7SO2zVPu$BF)nH~I5FL(VM>=iW5wWz_Cxu(|1DW$h za=719c~A8QG93-avRUze?+Yb;sYcAwl~P38yOZ%m%1wkqmZhgkg)T;kH->RcU=n3i zFpU|^Vh;0Iz#^8gj1{b64eQuI6`RR!J?x`~103QA$2h?$&Tx(kT;dAXxWO&% wP)7szXyO5nc)~MUc)=^)@Qx3B;tSvS!7ucv`Ah+A5@^#vn+Tc;L%L%90TF_m@Bjb+ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Adobe-Korea1-2.bcmap b/lib/jspdf/build/cmaps/Adobe-Korea1-2.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3172308c79d57147cdbe05930228043faa48ca54 GIT binary patch literal 391 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 f42+FTOpJ|eK+FZid_XJ }}!1;lb046pnFxKb%J literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/B5pc-H.bcmap b/lib/jspdf/build/cmaps/B5pc-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ce0013167f852a873b639e301088c094d468a750 GIT binary patch literal 1099 zcmW-g`%~0q6vodN6a}qhlS>5pun5Mq5J!##vdM@Bf}@NT7m;gd^fxrqTR%L%JoC!)l4};NoKa|MO+K-CAa~m;Yy` zTdjJ8G1Z)yv?e_XG;o5ZH6}Pa2(*7(bPX13xi0#9ng;QCPDf*cZvnXeZG=E4V1^R` zoRvxy;O4Ai+72k&S1{ECpkGb4=2BAudTmq=)uyA=8JOxyQ9dy;?RWuYM=I0Kr6@a# zm_A*FvdfKWmj&gsAg0|K%I*ZFJ®2-Ds;%-*{dpuU>v^DLBo-c0)(C|^V~)q7$@ z{aT1<0Hy{bN<#_Lm#HZG=P~UsLiy@7rUPy$2a=c$2B93xXF8OCa!B3vwV)jKXF9wU zz5g(KznM_BQqZ}<``gR@4u?0-WN-(%F9AX;RGaa9ga(p$@iBOaih3t7U8K5x( z!cJ~LIW>#vR6fe-K&I2xDBlrNlRvsQZG!Zs_nFSbV(6JFfF>(MH3zZYoCyKVmFUyr z4bWm#ih#tHNcL)R05n%X$XO4Rvr$av7NDFerWB1l#fLaIWt>s{7^F{x*Fn~56 z2yaUP&$bGt^X|C*e2VhQ!L5A}Q~MH>b_>(@D^V_JOc!!cE-L@xHk2RYm@d77a%lro zM+{2GM@&B|SeF&7%L>*{3f2_`>xzPPRl&NdVEwFMT~n~GS#W7*5I}bZEbB~TQ!#G>3#<@hBFz@ zM%>t20?@00cFW9kYcD~&Idml6XmW^`%Ri^t@ zD8IkS^uQbCftv9!8s(v#>5sK2k6vPWv<0=k*I`qik>BW_2Xp&XCjAQLV+HeZA^Qy^ zL(o7zrVY9Q^hLn@K~;vq0(@&o6}_Kf@lX!aP&LjSCde30VR{mP<|o+zV++AB63jGW zLK&%Kucw&+!>b_VX)%V5E(93JgQ!tr9Q_dHjClb}%IsOxnO}JO%^D zQz35L#>*$dzIW`GnjFD7QmDR{H8-t vrdKjO(@~zOJ)g&;Jm1DKe{F<0GX}&NKY$rerFbPXc+3#E&b*VWK6&oH7Gi0w literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/B5pc-V.bcmap b/lib/jspdf/build/cmaps/B5pc-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..73b99ff2fbca40e7ca5501f61e3f2f29c1fc1af6 GIT binary patch literal 144 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=44ustm~1;v(TI2l^-9&YkfwB h*M71;l(nECj@2Kr98sav2P-`~e{wDhU7p literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/CNS-EUC-H.bcmap b/lib/jspdf/build/cmaps/CNS-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..61d1d0cb001dd484630e52eb7e47eaabbdee62cd GIT binary patch literal 1780 zcmeIy+gDU&9LDkA-kV{N7%VIoIuhGKu~2XrO+`8pQjuoF2qrneFl_OF49p-n=(4rp z-2+WBSyWb*wJk$C%#4~H6s;_^QahLCDe_RpU(xgP!rQ!QtuDIxto6R@z54FG9(lO3 z)ZZEktY})^t`-&*IrCjkXOUXc=x@+ecPQAdtq!W?Ek1vs)gSP-YmEh|CC$z1)%QU) zpar!+2Vc51O)Z$dpuDtfp}UME(n(RGrfKT?Jl%&K*Oa8ISE@wWBNg?MT02tVv+_HS zPj`6q65WyCovl}Tx*ygZ^LwUBa!;r3%Pa+^P)YbG<|i>x5{)Dr6l*1sLt+_;5XII=qKm{NMXV<=Sutdab&!!vB3Cj} zBqL20Q)DAu5_uHsRE!ETsz^*zjA|13$wm#uQx(HY@w6mEqqt2mR#Lb+XpfpZOiOq% zg=;C?Ac+EN*hg`f9A2gLc2FWi?(ItI-H_5}p~M(UWGa25DKX9xNuga$)<`-DCq?XX zL{<97k|`G=D!S4IO9+lYu-d_s#&IKQ2G9BQSW&+^53h;da_#us134VMK{FDoRPGTCsFZY6z zw=(O&sT%O>9B_Ip(+BSGeC5?)Mk^<&5Nct^c?LZLa_74z$_-g%xPCUH1lfi~k>h>l%Q+0o(|0 ALjV8( literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/CNS-EUC-V.bcmap b/lib/jspdf/build/cmaps/CNS-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1a393a51e079d1b5e7898423463fac5e87170da2 GIT binary patch literal 1920 zcmeIy`%_eP7{~GFoWo_^SS+j^bOnx!Vxi!&+J)#M5fy1jtYA?KEX#@)WZ7K=7a5uZ z-?Pvrt3_pHS%)&T%d&RQ=w_*1?0&x)S(fcz(dXG8`k9%gnSN;Inb*wu&hyjz%sk3W zeU-mE9NgTosYfjDp%s%u@69_ddT88nTiQ(_(^a+T4!l$f6$HPPXY%xE?V2SsgiR8_{TB+8Vr z0`s0Cd3<}w5;G1NG`*6>chK}IX*`_1*CX$%pyRD{GDqIOQ<@+;Fh`nn(kY8q!}d`_ z70%%nw{U58w_XM!bD3>mWDOX-2;7;;ptL($1@2nJ+yQpE!B_=|&1d?+?gp@DCAj-M z#t-hnzj2Q*1NY8hI>3F^;Qm6eS7KVg16P6vZA=(Ev;pk97(6_W34lk|f&C@m(Q}y1 z;IZq0u>?#gj0Ze^HFzSA*$EEZ3ZA?aOkTi*z`>irp%vgM3$qnGT?3w33Z6}8yqdi@ zUO9B4!5#0!_tcFbaUnRI!L)UUWP%#P@7xMc6WB24|Xx8 zY35Ho20e9rXrB%2sdE||WmzF8D zqL^bn7bOfE!Cp|rMG$>}M-|Zz=*<^{kS$U~2(ra_!hozx5jVl=kGhX&4r>6cYhaBq zY<5~<$ojc8p`_*^SH@F|d8s=ED-Ot&L#{$uDTQ36BV7PL#+>OAKp&*tJgq9L2LW4^ z)#{?PI-Z$}x*9atYlF-!*gM8D3CBi=Z+5`1VfbCfx0cv8z)m6C^}`=msN=MzqCYvL zV~{Eot%Ox7nIcj>#7YBk&nYp8bSH6NliVd9=)`IV@vu^|Ks@Rr*4l{2`y~-#ohH#U zO~jKz$r$mpi+EN;Y%s|X@%$w5!YxS8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=Ij@2sOyo)qo~91%8!qshLNF; gfw7T^iLsFlh`E564~T_;SPY1zfLN|EgW;7w0IZHEdH?_b literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/CNS2-H.bcmap b/lib/jspdf/build/cmaps/CNS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c89b3527fe57ad3b32061f36b73c756ead3fb071 GIT binary patch literal 504 zcmW;IX)8ow0L5`6Ns=T<(sPF-F)m3)lCgy(%}A1wWv;C;ce;0)jHG-a`#Sc0-}im& z!>4eLH@_FB^Xebsx0I?buh!Gm?H1W4lbo3&%O+vAtL=)gdUdzbr;93QhpM?$twYNk~HkIwOJ&|HsTmI*hZ_tSQ;1)BX%%R z0wx6+0#nUkx&X|?6AzfJ2Xi@KKAJdzuLdlngT-*t36{#hvH`3FkruF82-XrvKUi-7 z8@XUJhPc31E!fTgI}xNC>{fui6tEvcTERgPI7}o1;HVKC=Yf-0qJh&oaApMOk)#(~ zRD#P?a1~10!F4gXNg{*bwh7$jgZnt*1`ihSD1)ac!hX-}_riXD_VcsfEBn2%-y8eA dv)>2%eX`#t`+c$BH~R(HFTj33=$HJP{s+tZ#wGv& literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/CNS2-V.bcmap b/lib/jspdf/build/cmaps/CNS2-V.bcmap new file mode 100644 index 0000000..7588cec --- /dev/null +++ b/lib/jspdf/build/cmaps/CNS2-V.bcmap @@ -0,0 +1,3 @@ +RCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSECNS2-H \ No newline at end of file diff --git a/lib/jspdf/build/cmaps/ETHK-B5-H.bcmap b/lib/jspdf/build/cmaps/ETHK-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..cb29415de4f5a669c1b47e34ab889b5fdee6e428 GIT binary patch literal 4426 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 VUn5lgC0;DLe}&hDRI?#j{~y^L&k+Cs literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/ETHK-B5-V.bcmap b/lib/jspdf/build/cmaps/ETHK-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f09aec6318dbec88491e3e488526882eaa930f37 GIT binary patch literal 158 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=^EnUt?Oi}>ygN@FqW~AiHWh1 w4T!mbm=B1BfLIKOrGQv2k!7Jb!z({NhS&Ox46h9v*%)5=Co&#;!uU=Q09TwZ8~^|S literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/ETen-B5-H.bcmap b/lib/jspdf/build/cmaps/ETen-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c2d77462d298cdb261f5e2eed5218fcba35cbe4e GIT binary patch literal 1125 zcmW-g`&ZOe6vfY1bQH7_;w1qNhb4%_41%&6h$BY=Az6ZfV9H5>nS>Pr!NhA>tPy-< zY6h8_Y2qsc1xeEk6EqM_%``zCBG1qU{U5sZ!~SKjv(CMDfA*a=@?LCVQAKgyrd+Fj zvB?w~5*8Y2(zCfR+oDgcD6v{Lm*^77PG;L^Yiup&zI(^f#)x{RsX2feB@wQ1F5HlUhRlx;3d+lo-O8<}>zg0drtY3Cx8oq0^3uRz(Q zW7=g#`NE%Rw}!GihG~y4${u0b8-!!;IuV3&BA1;{#sk!+LGa17D5s_~ zoytZz?ZQJ6V>x;>xdSvAl?)Ku z6v}Q*R)EGb2t4bAayE?V++37%$xO{5=u=$@o;CA8Hx&-h;tIY~kxWzXqrC8BdQpmD zFPG*!Hs=G>SV7-h3N9_4=-m>mW<4OJB>|jU%9zeO;+pdb$}0t3t1naQ0+d!W(~rwh zE@(^_HlSQo{>3dQKSeQJnul^}Ez{))l*^wm{j7LiQ9Q3Gp1&xbZHi}`;(1l^ysCKq zs(4;gJg=E?QM*4tXBsSSPi9kx2GC^!hmI(e4poxtJ}B2SnQla)+)(BDEd!%FRTk~5 zz_(Ln-D$-cUEz??rQUec1?A>yrfwsy>n;H3)i~KTFsEPjr9TJX9#9{lmtp?E2Bv{3 zoHa<0HkiQl#0L|fWCD!1g3C|<(~t>esGQxNrUMMFfWW8u7&Pn((3b^a!^AlJG0Yrs z0~p%~E+Z_$7eu=kfZbUs SS}75n>;w+>cVXen+8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=^B!nr|V>@>ygN@FqW~AiHWh1 w4T!mbm=B1BfLIKOrGQv2k!7Jb!z({NhS&Ox46h9v*%)5=Co&#;!uU=Q0BE@{TmS$7 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/ETenms-B5-H.bcmap b/lib/jspdf/build/cmaps/ETenms-B5-H.bcmap new file mode 100644 index 0000000..a7d69db --- /dev/null +++ b/lib/jspdf/build/cmaps/ETenms-B5-H.bcmap @@ -0,0 +1,3 @@ +RCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSE ETen-B5-H` ^ \ No newline at end of file diff --git a/lib/jspdf/build/cmaps/ETenms-B5-V.bcmap b/lib/jspdf/build/cmaps/ETenms-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..adc5d618d6912cb3a67e4745b63764120f93d17f GIT binary patch literal 172 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T?HZDrms_msWUA}o$hOe?l^;Xn zWoOQ25yqxk#>Oidj7*6<3u74@nV1+G*?^b}i1~n62#CdiSPF>cfS5@MD9-?tKV{GO GP7na4qA}0_ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/EUC-H.bcmap b/lib/jspdf/build/cmaps/EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e92ea5b3b99b1f20d31c9760481de0472e72685b GIT binary patch literal 578 zcmW;HX-^Yj6b0a!LR#wJkfLdA#QItYF__k&#-$pgwHAR0XbY(^j9ToQiYX4xOdvHz z^BOzU4fhQfs9HsF!Cm{wpW;vPT)#Xy_vC!JuD|J|F9gk~~n5M;9B5#aw zmMK{_pRicpnUjV&X_z^i=c6kU#UlH^x0uN-Zcb5|;haS`AM8t}1~Vy1mV_j`W*7F< z5~8j%Sz0d&CuDX^6mmYamwIXm{c=f!SC+Gir_7t&NfCV zHDQ96hrp{Ss5KL(!Rub|rV}hS5@X=)UhpnNoCixs!TTNHgP*X$$29n)fn}8_g3tZn n%SQ0kP2|D1ec(GIE`T4S;O9>8YYj04eh-UqLp>(Re@6cS^@+ph literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/EUC-V.bcmap b/lib/jspdf/build/cmaps/EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7a7c183228dfdc5c236b7914ca68298520ac60a1 GIT binary patch literal 170 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T>Kf{->ygO1a1rBPe_qDDft*Zx sgPB`_!~OsLz3v`wueYcFuf=+=*PWVn zy}YQTs=kB}N|oa#DU8z6zYh`Dt1F6VfA!-q5nkI&;jcpi!e4uo({-;al$3^_qm|^) zpL@-rqgJKNJsRh9j~0)l6(|pYkpM&wCn{pWa4BL&Oo~`DavB&;fOTYGM8>P9z^ftP zH8J5eBol4NarS)Pwc{KmJzCY15S0o}^}IenEh9v&mPkqq{?N;I55=e#YOQnhK90nI z(Ltzn>0^LeuOB-H^@eHeJk$mJP$LCDb2vV~tQ7$=Ge8-qeq^LcNtR z#tYpJ9(Tyr3>q*_p*G>D9BOms_!+1zVdE0iRx); zF*d@N2=$J^R}A%TfUg3om-yzjubVmrb%0DIK^-(q zoyB*%X(|Kikaa2_>eGNJUi6uMss`$F$#|XyPc?8Ze}i?Zo#P8!nCh3Exm1|uZGLH) zE&zitT>(bIrW>%+0j=dz?8@|tBm^BdQjGeX0 z!bK{~o&gIIX0yS9GiM74JE5N)Bz^W1%~=#)7bEXMfO4Hj#9n*io^z4ge}%M@=*z-Y|dQZP|`%eTe} z^H##*jq{;|oz~CC%8o*6oR0%b#6g#Hp3_PSn!f;+Oy;Y>&N$}lz|NZI+rUy>^BuDD z3XNPKV5yFU7_c<^LMoWYxNs3H-Lg;&mSI?^A?%!S;YYA6EHul`B5GV{0n5h1J;HLx zLOWr(_JvNc{PczAU>Ed@XgTE|&Hff_)#&~0*v{7byTGc9{$4rgDvk1UORIHDput@(BBZEL{d`v@8|ju+y|uE!#_}X^D%z=~!w7`zdPaG1x7~GI#Jc_PLu)x@B%o zbKr8kY%im_WnQVpyqpWxie*ku5|_DAZMNlhuscD^17LT}D;7DhoMPn!VP4Bh2-tmW zW*IJ&OSD* zR><~i6sz1?*|=H@*5h7n1nZ4neTw6AhP808KGRw(-lZAV5@qLgdS)#J?1^QKThVV= zy9YKv);hojPp)-ik82phx(Vzl*15!IvbB;1u3N#LN3C;1{-#^c2YX>yzl7sV`#RV6 z(zSj=vQ*Ke^>&i7;nL|gij_FWMj6p>G!nAWM8Y>(mCDQw{+(S*K*BqZM5?o~J0KaW zu0ca8(TH*in%)V`V1j0pg<2Ze@_&X0vS;L$g~q>!3M;H(Mlfa}d4+$#sK@n>{4veF(5PfbjR(iWvF6 zhQz<`BoV)!P(=KiN~(VK5bFmhV$%nkBI-UoBsV{F@!!Tj%82EonGY8+esn8h=*QC} z_~Rww`B*PmZt(k@${@5rE+I%MfEHX0?ZikrG}mxGw3Ak7AjJb$Y*oYmz_?WlElSvGlyuFx@OS3J_fm4+rcGOIoY+4v^Xs=` z$jR*-61QDN%-g++SiAk4SbnQkM8j`Ck(}RJ$;nUQ#PrFdh{C7yME|Kscl}ejWNNN~ z7CkINi%~M5#h!=e4#9Djk_n9(h$hNH8x?j!pvC9!P)v7Wry2fQ{Z1>iQ;r?4WV%BW zclrSBG|am(91}Pu0=^rF-OZ4NyEJr{w>{Ci`v@Diqjq^ulFXlZy=3QSw-n~3p`Shc z)EVG&ImfdQK40UQf}GDkC}RBY4n9dm&hMFuc;)vFK1qZA%U>rvFn!75m=5cg0!0k| zQo$z~Fn(#~cn&#Vyc{zj?8V4JJH=ii-aN7FC1c%a+slTQ6}49kpF3`^O%@(f-F^U; zW5~V*TDEK74lT#C9|!HcW4}Qb9?`)4yU=oz_WLp6Fda~6d5(i*X!)jtJc)EvVm?`N zbkH*gS4hM`HxUl4e1s_C*+VypI;>$oV9vai(3ljX*M8dvClG9(a6tU>*Z4&m4 zNko6%BJ*#j@=&4f@8HO9H=DLc41D)&i~6 z@a++_vdC{Trg*~2&EK68k!jQSFxk>Wt>62hRoIXCi*n6*6pYaUXxHP9;xV2i992l< z`7^xgmdMj=OqWZxUYd4vgLkeH$;U>HRlsq&Pi*=lK@nYl8cFG&5j=5!^4L}W=dw=t KcNEe6tK@(8IPMSt literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Ext-RKSJ-H.bcmap b/lib/jspdf/build/cmaps/Ext-RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ea4d2d97b8bc1df2abebce0d4f8c58789f723eb1 GIT binary patch literal 2542 zcmW+%X;)NN7TvdA6;-cB=0T=nPzDtX5fCBe!vY12s1PG2Dm-I}D1#3WM2!~ODn&st zR~56t*b*ZU8B}=pcCV!WNRsZ(&}(&n=}-NwZ}*3{_FebhbIv|zpLee2$2wQXt-j8d z=Ih<|{E`yK{(}xjiM{-4#}&7|zOSp>-PUEVZvUdA^HxWv-0i-aXDn}Rwg3Nqm%Y>7 z^$Aa7`RCBqJ*}yAK1(LC&n_C`o^=`G223sXfef2zu`4ny*zY&ajCK+0pi%lUW@iFoV=9%aGwxVK-yle@r^KHw?Q<0)i)zZW}2gYhSK zitCb9fyAn5Mw@zA2ve&FQBTX{*#mqpD3*am47j15wGA|5J3VaR4%E7QFQC>7-U6tf z=)H%bo+I9J#pIO?UKi9)Meix7=QZ92s13w>k*F60Zxhtdle})l;`JB@HBc`m3|gUH z!ge*(%ZCQ{LT!v6l%Y0}!Fy0;3_g(cgAxWG@<>;Z;v>Mi44p3xc$JD6U$zoG=+XL| zP`}XnDxh8s^VL9g6JH%x^EJM6P_JeBErTTEcXC}AGGfynF=T_<5wJ

75+cDMEZB&av3deI|b?)VpDR?)#qLKLhoCq@UCO(&TS}`k>6;qlm+jIKpfF&^Y1*g*Z|JO5#V( zVdau$q(iX`d(0!9pc>sMKm}n`52`I1HG}FRM=Ln zF%sG13n6(agOhWB-K0F$KCwyJ8*nfTrpvvq0@JlMc|dl*tpI>FJZrpc&$niO@{lR2-pu zgsD`;G$!e$GC;Gj*>0QK3z`!#RR)?%rcQ(IwNBN6?o%ShJcg+&p!*$Dt)O|pM%{K;kr4DKXX9z9O1{6f}Hm;1aE-4jKNmCC`=FDQKBX! zgc3n3gitbQr7n~XdOR$Y1A0Oq$_K5|hmL?&laLFvMjJX#=t&`T3M-BJP@R%6;SoYS z!YMW&Nb2pFYn8xB%;P6UWbxG<}QX=g`ksm8eNi*i0E?WchQXHQp|F>u9Ml_ zpe^DoZ;Tt}*#gj;WVRf%)iPV5h*KVEmJ8Qrn2QE&H_h=PcO=hoac^noYGi#t!rW<2 zPl0akEXPjR=NdS6A!_cf5)<%<^H%H>Xy+3^yY=&_cz(b!&jZ~y&hw)6Xy>ni_L6zt z3U^}WJFw0x(}x8;=v^%E4DTsoPzql#f!T#J&@LRs&LQnWrECg%3=1{H zx$p_uzZk92ELK!l7psV{*g(kQC6ch%wC~U&pSSZ_$a?OON$4C_d*!g87xdv#Fys+N zj)Ms{Fs&X;r-;*1;`0WuFvIiPV0z8-hhPSLC4h+$U+H8r?YaL|oFdLh)}?4LqhTo% z%oM$p2WB=eRe)KrR40>}pAqbptur3uQaveLY9uKyVoAb_B3I&zGbHUr8_|4iBZ*%} zk=m~v#Pkv_=Swq5dwG&vc-ii9{;^8d&-lQsMPRo61hDWuU=c}Rk*C3;`t!k}72~`I zEXMfC02XU}6%Aij@+&)7T;waBR=nd?y-XJW4c|jKd_l@s))HYkhnSc1fZ23}Ete7F zvWsAuOBcEh-SSz|yxib&ej|~hZ}^}OwISwpG0AvcOAN2OWZlA5ummmGt~9Vj9x>@r z30QIye?cD|m-!p&e0^ULfAmCtTMCw9`^Hq&nWZaf7-`4KWrWTOE8KRsb;T{~f0nXWy1CUJ7*pT>HcgW@Zu2r%8%_F?s3wA(w>i~1;-xh-9r@VE79n`(O3|3J5)(v(@ zTu)KNze`xp#@KD+dM*}p=5?-AVbXd9e0J^n6@KhVTW`ip3fVA%6-94Yz=|Ck8DNL4 z8|P%*FH-o%RUW$pIU7B|kQHPzO)>rA(QWcON35HN)19mQ5Fm=w3w4ptudj<@o$_;-n5u08JxW%8Tke0Nc? z{^rrX=X({o@41eZ;qOm@9XGz`)+e;@Z-P}NzE|Mq-BoS)V3W!3lJi5nV*K5c`{6uT zjb)qv11D|Ukr?25eVn_vq-`B*T{(8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T!*Pnsm zfDaG{u`(P80Mh>aOnZZwSoVei*^xjT0>t4!9L6BHH`-C6vHO580~>>ooOEMRt0N-= n1WGc8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T>RM5v>ygN#sKmI}pMl|k4-f~j zG8_m1(*FERdxM!+_J#r3kw6>*#Nj|3#vr&i+EGF=`+zS48-q}zgLHFIt0N-=1WGc< ggIR10jYd!*Mh1jnBC~2K<36T-PyT%@0*w1a03e<=y#N3J literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GB-EUC-H.bcmap b/lib/jspdf/build/cmaps/GB-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e39908b9844939a3c6d6baccced5771b8c1b1b2d GIT binary patch literal 549 zcmW;HX-^Yj6b0bvh=x@^fcgdPo2C^bbR!B*V$ecRss^bX`N|ESR}dF ziYT(U;(|CJ$SNud2>cj-3g`OeNzTp5Nv`@Y)R0Q|8Qq;-8R6G7pS#-U(?lSVit8fW zXJ+&VrU>?Qq>OaRh-LJIr!bIAivN967`mw&y?hMoy6|{!1{)fi!;OkfA;o61EZUXA zrr7tLQB^4WPDMWP#3Gg@qg3suI<?M`$=f?v}^3bnaxfB>#NYMU^7k zeoSNs$ZOA)=ecs1NV}1XlOHqWu#XgvM&(EqIpotqrVET-1<#z|xynSrSRHs#&h&%v z2$-k=lVywnrf!3m7?rPznS0=M6L@n5yv<|c;N2B4eVQ2r@7uwLi{Rr4CIdc&z>E)k zKFTD)>~-+vEU@sWv=U&h9?T1JMCOO6LVj&UT(|%hOPPn@+byu<2FpcEH(0p_R$XB2 z5EBFIm%;Z_%mCPE13zlP&*O{KFoB0odEc2XC8swyI@Z{ E08&E2d;kCd literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GB-EUC-V.bcmap b/lib/jspdf/build/cmaps/GB-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d5be5446aa40898742183202ce0624b8acee5234 GIT binary patch literal 179 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T;qIjC8tSa;ktnio5kreT14D}) z8$(MN1LGbEAUm9ex5dqlVUJX^5<`m<8)J(L6GMwFBf}nPZpIb|AT7hl(Bdr3utyfi TmIJaQq#0U5fOIGW!yb76lc_S5 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GB-H.bcmap b/lib/jspdf/build/cmaps/GB-H.bcmap new file mode 100644 index 0000000..39189c5 --- /dev/null +++ b/lib/jspdf/build/cmaps/GB-H.bcmap @@ -0,0 +1,4 @@ +RCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSE!!]aX!!]`21> p z$]"Rd-U7* 4%+ Z {/%<9Kb1]." `],"] +"]h"]F"]$"]"]`"]>"]"]z"]X"]6"]"]r"]P"]."] "]j"]H"]&"]"]b"]@"]"]|"]Z"]8"]"]t"]R"]0"]"]l"]J"]("]"]d"]B"] "X~']W"]5"]"]q"]O"]-"] "]i"]G"]%"]"]a"]?"]"]{"]Y"]7"]"]s"]Q"]/"] "]k"]I"]'"]"]c"]A"]"]}"]["]9 \ No newline at end of file diff --git a/lib/jspdf/build/cmaps/GB-V.bcmap b/lib/jspdf/build/cmaps/GB-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..310834512ffe49cbb7ca903abc2dc1aaa934e6f4 GIT binary patch literal 175 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T;_jsDktm|5#L!~Tz|dmH#?TVR zz_>>O$PQ=WZE>?>*dx^plyqWaY;j>?Xt8Bv*dxu&*x~@BWf&P+oTVA|$O74NKz4*Q OLrVyd4rO52BM$&=>M(}@ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBK-EUC-H.bcmap b/lib/jspdf/build/cmaps/GBK-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..05fff7e8254c995031783fb3b4892d58a6b176ac GIT binary patch literal 14692 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 U$d&`LBcvHxLV$EA1H&G90L*YQ;Q#;t literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBK2K-H.bcmap b/lib/jspdf/build/cmaps/GBK2K-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..46f6ba5967cdfb381f001eb1193f17b43d943962 GIT binary patch literal 19662 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 BHq8J4 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBKp-EUC-H.bcmap b/lib/jspdf/build/cmaps/GBKp-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..5cb0af687ee20a10ecc367892ae49d7b1e74acd1 GIT binary patch literal 14686 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBKp-EUC-V.bcmap b/lib/jspdf/build/cmaps/GBKp-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bca93b8efbb18a13e15025ad41d23db8267d2577 GIT binary patch literal 181 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|Tof+Gg1Hm literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBT-EUC-H.bcmap b/lib/jspdf/build/cmaps/GBT-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..4b4e2d32294538b5093ed3870bb9de37abf21599 GIT binary patch literal 7290 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBT-EUC-V.bcmap b/lib/jspdf/build/cmaps/GBT-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..38f706699f395dcdad5c6ad93d1a9b6fe9f66c78 GIT binary patch literal 180 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T>FyMw>l*5;>yaq3a1ld`Jp)6F z9UDVS7z5)T2_QS1g}24cj$w~fvl2s#6B}cT3ll?&EhEDoX>P_A2OurO$k5^}&9Fxn U$d&`LBcvHxLV$EA1H&G90MDZ`>Hq)$ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBT-H.bcmap b/lib/jspdf/build/cmaps/GBT-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..8437ac33771536813228e3f9c1cb6c35af3acc72 GIT binary patch literal 7269 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 WM;6GI1F|Ee8CpVsbSMME9(e#*4Ku$0 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/GBpc-EUC-H.bcmap b/lib/jspdf/build/cmaps/GBpc-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c9edf67cf6d640607080ad2775c14760df77dd96 GIT binary patch literal 557 zcmW;JSx*yT6b9g#5sk8Wp~4N)&xVRox)HTbV$ezus|KWvvDSQMS~>x=+B(ya0BUlu z6%kOt4Hc2GF1UglxbS2ABPP6unKL6=RYgKy|sm^&HD=; z+9wK$t)ehQepj)s%u_r}`l(`yg7UVH+^&(zQA3V2kz3v=XL`Ztad5W*jA@Jk##_Kd z9Ww~-#lii9U~)TSfvGcK8b{@WO6C%Hcmh1y4IY;=1Zf!{oti z6ubz4xoRc@UY-Q=dw_$U(n*6?$3RJtJ6^g;jq>$5#5V`P+ilD>@U9aqc)|M$rVo5* z2OmA)(*`C9J|6*Jb}~a?@jO@xfv-Cl8+_{m-~Hf66>}N8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|To({Gim?; literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/H.bcmap b/lib/jspdf/build/cmaps/H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7b24ea4629d0d4cc9f0cd5852edde324156ef0b1 GIT binary patch literal 553 zcmW;HTTc^F6a`>fNJ|+U1WZdKHfIVU1k*BRx(Q8g4%)hO%E=p&pZ zbEd^7Ox8PjMK`8&BW>|axS~6oW&igkGq}l(87h;Uvv6yFZ!CT`8Fx4oMHIF4enru4 z=0tE`J|(&Hyxf(akmS7OcH5<8CAK8mJa(nqZ+l&STNO*h{HDE1f!7`2 zO)W7E7S4gi5O^yQV7GO1K*p$4;PUEKTm>RjJOVd4}m{N!QVP! Q2JBoE!O~)+#IZZH2g5hHiU0rr literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKdla-B5-H.bcmap b/lib/jspdf/build/cmaps/HKdla-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7d30c0500520d563d0e5891c8f4781c61ddcca5e GIT binary patch literal 2654 zcmW-fc~p~E8piLJgoLoDV1iVG#EWdQB!Dska^Z@KEGiKJt6VieWR+b7OJVMpTBmj!JFV@ww9{?uR9m&JOC9YvJu_$KuQ_Vzd^3MM|2*fO=e_Uydjxkk zm-X}x_qVsU4JvaA3e;J-YIT7UxAZjWl(oYHgStHf%8Kshp8npRe(j*HB|8Flbt(V< zen8o;8_@Od`=42>(l)3 z5_3C7W8#28sxAh9N4WMd$)m11OH42hj!JPI28xLDHX45P6A}5PLQrD$ZsAaCQO6I=ddkoZXMn>rz{cbfRZ!j3W zu@jQ>ynlWKk~fPmdh0nz-r9=M+xd{Zy%(c*cv$c9u-@fi{ho()froX0hxHy0>pdRU zA9z^r^RV7;fy+Kf0^rgXkn_PNTyT*A;Bo;FUMzy-BHw@y6CnAp5u=X^A^C`J#vdDC z@g;uI4>p3um-s_o8iZk&^FYJpLX57&LUKie(Nz`PcC{OTs|;X1uE6NyDo8$w!03}U zNdA6O5 z0B)Cq)E~NF`W+bn-)ceb9faYXJ|MX(2jKoL5PO%u&s{Z6y*CGdAA5lOUOrrMuNoBH z>%q(KX8`GaEhP6laq^E9ApXZ*IRAkZfP39w-GcZ1 z*f5LIpX{hHKy!>);gx&0*sJYz)=EPI+r=(0R|)l5F2!`8f6%JZ59>$tNqY5!E~K=V zTNiLc`YkgW!xod`NL;gnjCYK`5N+346rMbn+FWm6XX(^4292RReV((`ImqQXdXJC!_bHv5U)?UWD{U!X6n!SL9x#vjlBPtFQT9el&rG6k#4*p2 zVM%hYG&OLW9L%vcu6bNb7avMKw0NTN)YxRx^79mE#^|#4E2O?df~~r zN72z%SG_l%O*s***ZJU~hG4y=V6w<5*5p4e{YT;HQ7>~yHd$itVWUh5&NyeUUgcjg zHDYY!P_WhC@4@audUp~1d7ro0v_>$!VWqRup*^ zG@Ihd^E7$(dgswfeU?6DwPBq(r-$EW#d>|WVUMBLH*9DQ=F*rwmMp76AmBzPvbd-{ z`UrM~p(|U+_DhVN?C5m+jKa9nsh~~nM}8Y+vHUq*G^_qfnlDpw%s&fU+I_IhwQob9(!YiX*+$GL+{kvchE<} z^e2(Xw3o|tByvl+PEE9o$X%aUSIvD*hb200lQ$u^I7Yvj*DvsL4eUVM?hyZ#(=BF%-SwbR>N z&sWihQu=VtVs{Pwr<{I1472&JDDSx02)CG12S|>J&OGMUP#zv#oHbA4y zGWT3_lx-`u4pUoGg+)V)G$p^3{yIv_sW>Xes3s zwsnSZw^U`GPd}`nA4dhof&%eiyF|0&m(Z^(U;j;DwQFggC@3`47%D;?LXj}sD4(ti zcNRKxWYQ>SyyJzCa;`Aet#zgz9t}6{rI#i2vO?llg%s9G57Rn6dPL&Nx9<#=imudM z=}HXZU?xq@4;0PRICnY~GtxkuE8VWU6LUuv0Pg(B4VEzHMpni?XO1z5^;Kp?5W}fz z{VJQ(u}0#kHH?}wgXMvgnRNSzYt_tfFe(@w7}BK8mOh<7UKvcDIY4EBy)$d5dc4Y~ zz92oNpc!euF>KQJvkPfwgd|KF>rA(&POqm~(*?A~FB1yG4pyG2^=~b6L?3R`GP7;W zlTM9%wu5q`u2ycqlQ)&=UrSdy)2<4y3Y-a(rH1YXM|+ge*&EKL$7^J>p(~rOFP~CR zCHb=1N`I@T(Ssv=g{EQ?@)i5CeTlZ!_8no|3O@Qx=3l!t>u2Alzg?jZo08a;+tQ7T z&ZV7>v}M}Xu;GqP&TdO8C-a2~d`(=Dc`2JD@GgoJc%#Bu#H!fkbd2trO7{*er=qDG zuOQ!B;;uI?vTkIX&3(pjM!LhBo?^ QxJF!^-VRzcnd;s4Uw8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T<>8%@lc?)ts_T)+v(TI2l^-9& lYkfwB*M71;l(nECj@2Kr98sav2P-`~ljyD=Pp1 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKdlb-B5-H.bcmap b/lib/jspdf/build/cmaps/HKdlb-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d829a231015161e107123e211d4a78110daab6bf GIT binary patch literal 2414 zcmW;KX;hO}8VB$j_OQsJG{|PSK#(=aRsp%;$|5LKBC^T_S%M&IO_arj-Z$Gz_5=fj z1VX@Cs}=3EQ`_lc+tJ!qJ5D>*+SPSz$IhI7m~(pO%=EPL&V2ZPdCq(8z3=n;d)?bp zHZnSKsQ*BpLb#={Fgr6RJG)Sbdq%os!ukohLN+89Ru6ZN92y-t)Txm5WCh~ELE-B;W z>=~{S^;T8=(q_#RJ5FO4i>c5VZ75m`ou9Nf8*`oVGS$>tnzf9nTkfR7MP!W81!^;V zwykXOG^!MuZoU8P5p}fETA5h1wR5Hhvv7sxWE7|U9cf4}_ ze82Ocr+9vyre9N~sWy9gv+J$tb5(N_svvFbeELE5|e?s^WIqqRpM|qx_izCj;nF%}(a1GS}GZNHzEwqh1&}Ri!&HKhz|Z zSW2ntIPEd7cLmYNA-B*NV3L@MPPUkeXu4bCiB^?qTB~$2O@K_U${6xr95Dx2kGzzx z&oLd-$5U7OjoRs~)mD0`w|~v|VxCoQNpg1wdB%Oc)&4F?uvugq-leYhSMR4EAEnp* zV$=<)M!IQfi?rS1`DId7YR)Iz@*=7gD^ur4noDzY5u5$HD)gD)`w`{X+w}(%ssS~B~R?k00w8Sw; zu|1#ONT5IXFnu}+D`Gc=vwK{Tt|CN`JYGcT%;$g0I zv-OML1bO-_y^KD`|Ftpp1dHwMrbs$z$TLU+)M8r%*XS~OJ%N7Ita*02nF(hHmqD&v z77sF_W1e)nV=>2_NuxEPj8_ZOd#;fQI!`P$OZ(Zw?%LIW9-6D#peJ;YKAz~La!+Yg zH}L*Z3=$}Sdnp8fj&m6UeslsO20+3{FjB_BXk{DEOF2dXQq@DEj=)Gg3W-LHkv0Sp zZ4E|j8YFB#M$w!d{h>?K@iJ=rDV>~2Af|02hwwWdYuuWlPZi2+}6h;;W zB-UJvY~e7=RtK_X07f%nNM?pHI#~mWJqROvKP0o8F`Dy(WUd0E`9w(OyD)N;LgL`g zS|E@(V=;10LgFgKXi)&kVk1UNd5|p0F>*^GSq{T!c^Ha3nV`VafYC}YBrCfxT1|yy zwGW4%sszBZ7o?wRhU9r4jGpg;7u!0bz6|7V^*R1NCQmF?z8GroK1*>Na1_Y?r<#9XpK*|}^Sc}@Yq*)fpvQXnKR(Qe2tekADiD5Q45N#D*l@9mn;ijuFUMo_axx?@_h9t9?U1~} z!|0U`NM7aUuO5Ts_r(~!wh@xonlZXm0Li7p7`@J6y}@CQVMkyjMZ_i8R^x>|(M2N95bAjRmK7`9#;2H+YG@II`@=)+x*d=!Y$ zM}3fdoPyDHUr4T(V{`*Ta-$QYPb83hass12wLx+-2BVu3ko8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T<>8%@lceips_T)+v(TI2l^-9& lYkfwB*M71;l(nECj@2Kr98sav2P-`~lkWD=Yv2 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKgccs-B5-H.bcmap b/lib/jspdf/build/cmaps/HKgccs-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..971a4f23f791f75d4e604ad717735ee55529eda5 GIT binary patch literal 2292 zcmW+&3s{t87Cz_yhk+4LK)HmV!xluLDa-%_0}!{Q89xgv!bn_%)-tr4wyp+MR&IvNCGYw6h3((wIh9R8} zvURRQ=(1v9R}@;ik`TL!a#Z(9^u8U0 zgKvl1;C2j_+>Vvvj+y-LWSA!0DMa5MFGiq@?uo?Uo(%HoDZ!AQN{s4x5>0m_G3YKy zue*=n#Jf{S-L02?_X^PWUK!f%t)Nl&2jj&1NmAUeqQqZfG3FN~#joC^e$AB0y`wbf zUBFm47J5s3p|{iwy^8fR9ec}l=(QvCRv`8+w)<{L6UHVVnrUpxDnX;oPXnWEFqgA! z$iNXWa0H@mv<2xbg$x{_1GX?3wc}c^LkBO=xcU~zd~k+?4raE*fG>En91Vd`%pO11 z%rJ;wNnm0f+3&-r9e1A7TxRLNv)yGuPOvacFpE!oaKS*R9d})V4~E(C#VWYD!k)gX z3|%1sx+_f6ToD?&Mk2VP2wa5dvT3?&H0v=MxMDSL*EkcnlF;l**1IQ*?08$Od;h=gnkWrnKzNb7v2f4%>%n?LppLuwh(6yYa-H zw6MjdCb0mc~m!j6(Xn<%bB-I)uMQbgoP4QB+`IBnP zm11)&sm;r!_)Qk6EoLdURFe9wO^TtEwE){TNb$RQq@E3t z;@JjLzvn647D#d1@*!?JNU=Sh)b>?U{2`arbG}kMx17`;$4c?Mnbh+cQtYsi+EF3J z3u&ZY;JbDzQoACg*tM3_i>XrV4kfjFt`sjNlX|IMia!;QdO1Lfmsio4J>wx|Pq7qx z{YdSdEyXJ_q+VGj17FPq*i!`KUY$>BpGk^+6{KE^lH#=ur2Z_V*dIZb{UuPie~A>Y zPo|jHn*jDZAn|}rS`W;H$OCIA^k4|U!FWa-q#sO>!3P@v4m3ja8-qx_ktoHR0i@o{ zlj6|$R%tm@4baj6)qz}&iWKiXMC!fyQoNr+>is9A_<)=BAvfzoZq{G9Ss!t; zKH_G5%+30koAozt)+gMoPbw+)s14vm5llFmCsU6hz{yn5kMT-5#uM;qB&knJr8qvB z)N!7Szt5v-C-{RNodY9Ia3N1Lkk`p1n0Ior6rTl=`m8{TQ}ML$)GB~e{N?;SM~cs9 zllo$i6kjYO^^a&NzVssXbp8A{+& zDOYP`a{D;2wA)FwSIN=WavWXjJA!TVMa(XDWRTY-#ej2swrOMrfBR!b8ck6#XZ%bRP# zX|>~?1^R#E?G?NC>F#`99!0z$ikav0LRrAPkWpencPTH3GF}vm7!_=*)J$#%$F49% zxmO~3hDh=RGAC=`NkQ;TG=panbE=M>$;?w3yevI}&@&x1kJQk^OUIMRayIA8W;vJr zb6Cz}Uq0tOhPtPS?ekgZ_u(mJR$8d1oO2r4zm|EO)I1wd@6!!r16b%Gfwd3d0ynk%qAp{S2oUCK%2jX)&DX{IlkK6wz=N;1I)E zhyjLkG5Q$J1`0KtPqCvp7)Kk;p=dFhr*TMgmh>^2=V7wZyomCRmSFTXT9(L%jTZh7 eV6=`zFQYYve2mt3Of*_2X?{j)l{Um^UGsmAm(QgD literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKgccs-B5-V.bcmap b/lib/jspdf/build/cmaps/HKgccs-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d353ca256b54236a4acefafdbc08e5b719892014 GIT binary patch literal 149 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T?ctrCoLsEyWUA|t$g|L!;gugB m!)tv;hS!D+jEzi8jE!tS%mu`JKr95rVn8ef#Bv!7ulxZLvn!hb literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKm314-B5-H.bcmap b/lib/jspdf/build/cmaps/HKm314-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..576dc01112bd7f28c30804661f546ece203c53d8 GIT binary patch literal 1772 zcmW-hX;9Q>62|+_CEy8y9C8dzGJu2|ML=I^i69Frj-ce=RRZ<=ems{ZVz@n00OLs6mXL4yS)n(eWt+g{b8nYHPhBhV` zV~s&}MupK|AES5C?@aXe(gzPD%ZWYP%&}bo&G9<5Xj3W82dfrZw7-Togc}@{-JWu7 zce0!suUp)3Nabr8nU|gmbTq$cUTuyws~vn)ihy3niMSzcSCUz+KiC@68g0lk?AJ@h za;+}3ccrOb^gJ)gEm0~D%SBnvXkD!LvKuThq?$G~d6{cYDP`!Y8Qgg?O0Q~MI<&j3 zWZ6MN93R;%yHT`+! zWVu+bG87HI+*#~p^c3-5M0_JTTK@HOFq|re2r#5W94vrsV60Xttx3ODFEG|GHYRLK z8~pu{o1L9&S9w=`cTV>qTbt(U>S6aTKe?bMZ#c+M))Cgfsx`&FHMJ?dBl3j%2}P4% zr&^b;wzU?B8R-DeqQORPa#k(3mi)5ojjf$==A_QUo%OwmW#+BA!tui4Ej_lKFP~k~ zRoD%SCOlL=){%dvtdP^Y)-F62+*3ECv3=oahH-Vr^2y-Iph>0Kf3S3{cywQTWLv1N zPPuMi?Lg|lMzxLgQ|a+akRJP~oUE7TqZ-RPv>iFkRA1A!-B6--uzn%7DFk@DQ@mx% zUVwiyfO&fn*rRf@UVBo~Q{(2`AK4$&?%YB04u4aHIc`FERBhyqPL0YVTlzAMp8MUc zkEGvRM7|t;wud#O@0??=h#hC-(I^l^v6QKYT9uPLM8C)i6h@Ex9?PoU&?*KSV`VpIa z9{FTGv3EBje@`Oz-Y(?t3;+E?$UjIV_MsQ@4__ko(Hi6*RTKMzpv%XCE*}fJ{87;5 zoS@4&L6=ViT|N30u;xjL70l&-Q^Dk@B{z?qwTuC7IxhwL|Rm3b2_==?rz#@TUO(SMa zM}F0r*wrHBUjz~R(jNJjFB1C-k$KhBe@rJm`4MCrqf<8Bk$op0b1m4QS%-aqC z*TZ4aZ9%WwdvM(yf#n+n{&#i}yK@*F?=r}~yP4SczL@rXF2IxyiI-h}Qi56<9Fqia6^HFzX_;UMLNmXBpVe{_ekxKy8fx literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKm314-B5-V.bcmap b/lib/jspdf/build/cmaps/HKm314-B5-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..0e96d0e228e0608f77f035655140c6a235d4ea56 GIT binary patch literal 149 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T?ctqkY-pnEWUA|t$g|L!;gugB m!)tv;hS!D+jEzi8jE!tS%mu`JKr95rVn8ef#Bv!7ulxb;p(_9Y literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/HKm471-B5-H.bcmap b/lib/jspdf/build/cmaps/HKm471-B5-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..11d170c75ed8696f0705f9fb9f5afcf3b0aff4c9 GIT binary patch literal 2171 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 W3S-b|;bUNIW?^7zv1XQNu>%0E(j#{O literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSC-EUC-H.bcmap b/lib/jspdf/build/cmaps/KSC-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a45c65f008e7d6ff34edaf53af15ea471d4f6d90 GIT binary patch literal 1848 zcmW-i`CC-i8OOixy)y#?3=?IQ2uv?U1Z7bx1Vjvs#IU1aP?TlFfka8h8Nemd^tlqE zY0{)i(l!C)+;eVZ(YZ5oO(85Me?Xr;PnRG1OMmDOZIdqcZ|Ir+a6jjH&vMW5e&6?1 z{(8DH>z9aSZHI+weYU+K>S3_5VzP>wC)4?~Vd~I)yg(5dXk-&8DYE@eE zYf=pZr-eS649DE_8slzhYA6a`Kh#!yh# zPV0XC#L&G|T|0VjoXY3+>6&}a?{v>~rR2>Gq~^_q^n?C)Q}o8}cRTbW>U;rVzKBxh zi>YhAOxK3yXLRk{dwqK4`TGa-3g7)%ukS(O{pz6yO>*%4{Yktn@#6~;AJj^Gn4LsK z;wQZlA5}?woRP#eiJ!hI@v{RGKX)W?MdBAPOMFt4#H_@pgA%`dN#a+zNlZ)p`kcgP zH4>j^&Phz_TGc{3z_Q_3xC1N>!@KYf~RQ{cH^jl>Rs=Mg*TK?ST%UH z!j6I;13ON<7Q8-O_D2J(mUx50>Qvqc?gwiCKdrJ8;IF2!QxL@pYbWtNh*GdFhd2On z7_6H_rBl=>q7JNw#7Twql4u6&gYZMh^Y%mZtKu~hmmo$}c3u^;WD?j#GF2xV3^e`8 z7-FMRAVw2l3?rM%7h?xOJYUyTUI2L^IOL7wePm~eY)8?<<=f`+8EKqBmdKE8Cu)RG z*UH6N;BgJ|#9i8FW=S`gl@ed1C-H`^l{`8FtQMp2(RJWa1NN=BaP^Y>Z7;A^E5BR1wr8!54zIOIBLe5zOHI(c4R(IO z`Ij%SJ$$blJ9TqS*gW*085;rp5VqRGd4D%DqE`@&P&7om%^3}YcOZI;c$X`B8@wkq z`Xlf@SgGLsu-xG16)O#VK(jo=2O<4v)qr0P*Z#u*A0g`qcz~>9;8z^haqu9l28B<+ zl3u^2SdGN5E7mFSkjrWTdl^<6@i1BKV9hS86MR~+`oL$%dJX(0Sr@=s$QlH{1?w{S zZL)^I-v++}eizmV_$;hZ;_tw&CMy6zu*M)1`9x%0g;2qy>|TL24&iiI6XB9?4Tu!g znuJIt>js1yA{|yF>2~2EYYHOMW6eN#5mT`{p~f5#dmyruSSmygV(AdMh-Hw-qnHPx zAT8#F*ssP4APNyHf++IFiV-b!#j3-e?~K-1Er~O(*epbwl&&MLLUbUWn$%!i?%hf8 zG>ERS`=5q0o&nLT#`i*;EsEzt^p(etKC9i|IrD%mfu$sus0J}tXF3de-=fli` zT>vx3VZTUbzGC}eN^?KiCB!bf?NXRUF6kZ9M|LetjqI0TexK|HGD|&nBbjBe+hJCy zc1OVd+)&KQ4?SQb@3p|F)BP~=yf7-#U`)?|%^l||SZ2R6r$vNa)7#a4(iw_W7k&Y_C! yV!7M4%-TEI$l7s`XGdn5p&eNauv8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=^gB>>l*5;>yaq1a1rCa3Py%~ zRSXOV8JL*%RRh^|EZqC*bs6?^H=8o-=V4>q&&$NHpP!LozW_JuenDx5{o+8j1Q1I~ IGw+uI04wP+sQ>@~ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSC-H.bcmap b/lib/jspdf/build/cmaps/KSC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b9b22b67879d4043c75b617a24f96b0bd47cf4ca GIT binary patch literal 1831 zcmW-i`Cn648pfaZ-Xstpq{U(4L1XORb!_ZPeu>guX1 zE>>69d7H-P?uESmXY&i8*?Diaa zWmRWeOKZ2kmB{DQ4+Ft#K3^cDYuEJ_{Yv0Ps;*spF+pX^r*zG^++uewccpli2U0!D zbNbnqZ&UP!?r%Hv3+hTfVWp5#R*I-=rBv4fD~r0;_nlv_xb^akUhaLls3t;!n0D?n(UlGl{m8S0;@K7)-O=bdYi7Lua5xhgXmqK*0npY8-Ul1P&RUd)G>*DSCG2yLGDwfC~usdX^b~YGn^!oyAR0?FX5!f6?HkU8P&VqQJuBkj9@IxPdH@A=^$=3$Lz~iJQRNYIwwRI%Q-@Hy9NX|4vWhfvy$5xdCh!q2SFl z@TMN8ww!XCtzx>pC1s{=1K1is<+e?>izwK>M9%G-x;D6dSN^sa*r}1<6J0y8Q%mP} z+N2SIedjT-JByqhshghNlYkjU#;(*<`tF<@=||)4b2+mWAHA)Y=Xl$pYyNj-l=|-1 zda)zw0Nz!iKPsI+Fb*p(Xdf!U;qZ%Y9Mvv2V*lK$ChP_Eb2w-ZdqTd9=siRu6rCg9 zW{-x!I}m+Byvq@N3f_|%{RZ3*GZnlarW5>@Vy1x)Xr_z!AfzA7YVe_O&4dqpgv<-z zK{79a-?N#Q!9y_X6+Q`5dVNYU8;DOU<~8s+huIAF8O%1~VKUpnnjB^)_<~~k!57K= z68tflx51jp90Y#?a|rw?nE~*xz@LFXhdBbi1ap-5*RZO{3_=jhF$hII5t-u^5^UTs$e|mZF+75UFH7f^b5l!;B=|E?i{JLu9(lMF=-yDvl@Bm<{3tM3xdu zg~&lH9U>R83=$rSxghe>Vs41jYAhe30I@=dLU*hP(Go|jD(t%NYmL>AxZ#K`L9|Kf z+Ttoi2jZzo4aVi(ofJ=l=n6X@`0Vivh+Z{*65?iIJQu=W7Qc*Ne&vXdgfpgmMezy5 zrnQ6vBIrt#felci7Gg|I)Io%hxC${5&YSiriAIR~lxTvOLPCbj4A||=#B~x6k&r?3 zNJ+>D3Pa2*i2)J|YGM%L2_=RV@l@*EmKcS2UXlofOJ;mFD;Fg_ux zo{SQg)j&omtacdXs?`y6&iWLi;zt+Q$al@ytkqkv>2YJTJPn%*E8SR~Xu(>;ax>N^ zgSOd+*qQvk8}G&%5KaGK5nH3d(%DbitR8Z|m(`%|eHma4Lwi3aL*yq%65|s8Y1Xxm z_q=pvuYuIPr@H3eTcXZ=naS<@cjStGwC>B4`qOE+f0juh@bhI^C=Rj+2NS^l7*Y-< zWvV!sqs&7GIS+HF{IE#wb||y=~ivf-csQK7Np5q&`=XgZdQa)Uz L{tvCv`X&E=BnB!` literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSC-Johab-H.bcmap b/lib/jspdf/build/cmaps/KSC-Johab-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..2531ffcf41acc01338f781c845c7f50f62fcc84a GIT binary patch literal 16791 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSC-Johab-V.bcmap b/lib/jspdf/build/cmaps/KSC-Johab-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..367ceb226ab1e33624b30512716a3b65feb5a100 GIT binary patch literal 166 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T?H%l_>y@98n565GC~(t=abE=^ z!@ep8hJy@DO#7;V>^c_ief7Ew`?(uU8TRwAG4AJOV%X2m$gp34n{~gSG{b&zAX@^6 KC3TtiO923;%QA`p literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSC-V.bcmap b/lib/jspdf/build/cmaps/KSC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6ae2f0b6b7238adc67bd9231668d9853ea3c8e1e GIT binary patch literal 160 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T>K*K?>yap+sKmIhf{|fg6$8UT z1}3I`)j)O~3-`WyU55SK&87_ddDs~D^D;5)=VxTtFTl;ZUr?H1zc`RB0mPEh%=@JP DC895z literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSCms-UHC-H.bcmap b/lib/jspdf/build/cmaps/KSCms-UHC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a8d4240e6adb3ac1db859085b769a0715be03c72 GIT binary patch literal 2787 zcmW;Odt6jy9tQB|of%$07>Q8uMPbHa5m6D;MM44N5E&|>0^to|#F4y(!zDF2TQ7)r z_kLI6%z3B0BnM_{H81t|R%@GGwwrBk7cEP-+A>SC{T=_{IiK&D!<@_Wo_Aiy#U&MO zo42*EYkjEGJFU35Aa8m>L9w@dP21{#w{}}cXJAu@x9Z`Rw)V|!?f%ZdnyDkoH*WOa zIljZ&9_R?PKVt8!4FtSX^A}WAR4%No1cL-)vRvLQ^)h%^GxM%u{yCvgV?g@ulNEAy zV^5s)P48LDa(jjJ#rIak#P?Rmru8<&rS-PSi4{9yWy!)F^W`*WUphlyCX4O!u1*uklD;K7Yh_;jt_gCIcUO0kcX!6F{Knm7^x>Xyc05Y4cPYibnH2j++0jmMU=hVH zr&9bX(T?>LzkYz?Hxnp+>#}1t#qaK=_Ofmr(qrfa0$s zdnqcGH@k%KduQYJ|m7pg6*~Z1I@mzm3OB3hEb8&t) z*U#5$;1Z;$2T z?Lw}^O}zUU7w-wKzc)h@7p8G>VLsO{1T^t}3m5O}T>p2PCO#O= z#RvIZ|DZ|}7w2+u(a-gZ+coi@ZCreq!u1dHH1W}7E%dBe>q+gUwOFrs+j9v)oSAF#aw*7f$RT^ z(Zn}SF22d&`Zq=X&7pGfZ6O!m)^N|a>!ep)r|-R<#XZ+cZP3MD-@-lLB@@1*C-B{T zLV$3C9_tMc_uMG9L0#SG;GXZ@gzxjX_x;R_^(U5q_ff zf0|9Gw?U&yKAyxq^6^}ve7wqbi*4Pu%pl7mvRr(}L2^$5xhLCpPo?c9+uLmS3UcoZ za&Pq=(<7EUV#zzk+ulLd$sH?fciHZvAtC$n$$eFKypFunN#2=ZduOTb2HQc~yOPPf zCX;tn-f_V8W8~e!_U>Zx?poWMZ0~WC_vDcGl;5%6_IC2#(YE(epK>o1D)-ur%6(L+ z+((_teRipGAGIp?QLS>n-K*SB#mfEEtlV!`D-Te&@&J`94^X?w^1!lS{Hq}h2t2WV z)Id6A>OejYbteqm4%oi%|s*RRp7ksZxirh^cZIwNMpMbiH*@ zbx!plQ!AjFokqP=b+a&ov5bYCF~)L#+3TT3qnT#&P#F+fg;6F=Z^lG0bBy#k&2-QW z!9{mO_d`3gXxoe$lP1Dcvx_hnDJqe+3s9iE(wD0i15XzqO>Ji)oI-PEIFI7V1UuGA zU)ED|fg>JdJhcIMY8J%dcskADEVlG8{U$h%065%$sYhJ2?Lx+p87%(DV(D9cWCeZg zBH-vu`r9IX$w!OWl%rLIcElWg1UR+{qmR-gUvunkzzQPq82tbw9BZRb>QHuUI~`ex zyPlp!*YWgx>8m}S%i@mfGK&v#;P_P34bn{g*2jpB@yA?v5~o-7EX0|j-ZGq=yt^DH z{Bkl*%?qY|5=tCgjlp&{*v8DNn86^-`54^7%xXTk6=qG`;A1drVa36$gB1_6-eHY^ z+2FI>%v=uY(JFwsGC1>62xb$rror?xYX;2KE~^k`0M;yr*$RtVU+=I=n7P4W&4Jm* zEe*!Ku&S6DWY#0T6vzEi$0&6AAt;}kK`6$e7Ft@{M zg4qqLnVG*pG@n_1C6QR z0IS`uUAdXn0X5QXbwMRz$ceM9&LJ06GE|CVC=O~gh7zDsF_g$u8XIy$rH>d&f*R)> zN{7n8P$pDn(vSy(*?cHJ=>9ZRIW&{0xqPS_s)~lLYuE`jAH#9>7#yZ^FJQwXpsIuM zpM_$E6QLG4hwp}3oH?8dRhv6ph!=j&hns?lS3;iQwHVsqi*P8vJCX~dfkld-TAYz$ zr~o3RP-}x@J`Xt}Wl#^XNIBGcMCg^-2xIBU$bC#bj0n9%n;j8)gMv^Ujz|MjozBQ| zs4XnA%AvN>ICn*wp|)p70>SJrLat~6!W`i^7QGAM5zgq{u*z6C5ylD@O+`4FMaLkV zf@nIzqg~OlEIh^$^&(6h$D&!xSQ#J9MmUpGJ7F)2&P3S9qW2*DGZvl2!rAU<2@B^S zIuGGV&ggu9{MC>noVVW%qiLsxP?4-aC@l%0Nh1*I>|2O~Yb$W5q*p_KtKW6?8jiN^ zS%~8;B^XTD*M-B){+z4fs%Q;MdWM#6#n0pd(N*w0(?YMvv)qm~6o1pCZ|n&#n|-2$ zIZterzN8b~Y{5xdcEy}rM*mTV%9FJId3GFj@wq};)tyRVIJFiy*@Dd~p`j?kh)9Zt!zDF6)eGX? z_I_33%z3B0BnM_{H80h_Tdi$&*>1MEU9>FSYRfFm_ILb)=X}0r4s$Ngd)|2+7Zz2t zZ`{(cw)KH7@6_Vr{G4g|`NiJy)$OZVytP|8yIMAMdaE96ZtvLG-r?_RS)DtgeEoXw z?c+PW9W9+L9S_+%Yg<~pxp{M|Dk|sIR)Rr-Fh8F3& zM^?z04Lvc^H?3z4%kCA@=kBeDa`)Cmr}Wmvr1ZASi51(UWy!ql)pDw{FO{J$okjO~ zSWRD+^fmN#OW&d$wK8YP&IxjocjvYQ@2<3+c@4YD=)>LP?0A@B&r*uLg%tZn+tER> ze*wkgxfH*Ovtu2_ukWMy%>;_yy6jj*@w>YzexGi~Hi|#gQ~dERia#aW(M9p+MHGL@ zr}*p0UW)b7mwR9iV2pVtKslQ74V*49` z{(3CvZ}RiB!iji4JNp@)U*UJka`E?WE?!FD`b*jVhMscqauyda zmvjB)<(hb985gf~a{V9inm8NF#o0`*pPi+NS4+8gwT|nr1~l={b}n9XbN#gpO`IFg z#krYWKet2^uh(+%`UbAQ5v_?gqqum}!}T|dHStyv7jG@(`de+9_}5x4-ga{R?KDli zGnR{Y3b_8xd`-Mt!^OL;Tz`*g;=M|caPd(h*FVb9#K)7l__&hmA2({^lLjt6*~Ilv zM`_|>0v8vvxqh)i6PL=lxU`(>m%26aStl2t$8-JjEKOX_oE`CcbrY@ogH{zb*1_43>-U3b^=gKKFdLR(i!X`rd09+;gqe23_p6P2BVSD8l#j z1ir5(v=FY-W4-R-p6kUnsH^Lp-19>`;fEY9ewa=06Mke|{5Y0-ek`!DgwW1CH{669 z*<9SHAT-#}xwx6aJvXNkZqk+BY~!Avq6k0H?f*23u*?QM(_4w$b1R2%i;B9{$~`|b z!q3$H&oc>2Y|yBZk0o%Ad@P$NAFHz6Y+JW2)5x-jEEnE(fZP*H?#Z;>Q)#==_7>Z{ zg4{cu+*@)wzpGta{F@I-M0H^NXWiCa$nVLuO;trl6R!p-cf41&UV1| z&Qau@lgT?PZ@b0zqvTz}_O4>`u3Fn0Z10XI@6ICcF28NR?XBcJNw)V;pK=csD)-op z%Dq&n+)JIxy>_W`FSRQ7Qmt~I-K*S3#marutlVc;EB8~kazB+T_fxy0VH7#d5||Y* zX2871Y0QLq-w0zCl*eJrVQM^7CX5=FngBHg#yqBSqEx;^6~UO#RH?&Qz*ISmTBr&r zy57Z5i=FCzrj|oBIgKSwwT*=sjAbn3j56x|Wp4xA-4E@|pluW8n=}z7o85%jNK|pOor`?smA-7X5O_KtDQYVdp+uT9Lpc;r z#@ew~`ZAuH4IK6$?Ws24sTmN5+;o~l8Eokx`b}^i25_hjxrbe}?MB++>CAn2q4d=s zUQS=T060=ef19Ll)R7`K#V9+v zm5!{$9Z%1o>v+0a`f875vzTML%;19@IF^gWgEUjW{Rtvt{88th#Hp1%^KiPTw+tsH z?<&V}znqMda{?)!2IB@-VX%V@wllLTYA^t^8iSjdS;Gf6!<-*8_$bU;STQgc!*au1 z;;=@*tn*p%%&Z6XXywCP5h%PEgxScfsWAP_nhtZ7%PN4`0&9lDY=uRwuX9)>%xrU5 zvtYJ!OM`JYtSV*(m^BARIk)D*>~dJOFuR#`Kg@@iwG@WNta_N6V6A|;nOO}mABMRF z=2lpZFt@>KV&)@=<(2VaS8QOg@wsi2p2DIaJ8hY(BINs)~lLYuE`@jo}!33=Y$|=d$4u zP&EPf=fSAqIH(2A;X9!grVl4W)n*SD;DulE;l@DR<)CMH4Tjo$VGiYw4`;)uW8osG zW@oq?^vN4Sou zE@!wNY7+~ubg0cV&RyXqsI8gdmO$p0L02ReA&yWCi`;?G2xsI@SY<2}2V*&lBqKD6 zMaCeMh)60zNv_CP78>J-co8CwW04GItZ+v%5lZLOPRPq5g$VgrshG}9~cEVpAd#osjP8++W# zW*#qL&f}Yj;kg1@)tyXaIJpKm(TwPm ztu$4fY-b}+appdi#3r5c(AiGW66^G6B%XG$_|r7gG@PcD8_uLL?Tm}1oS98~&NND2 P^z)@`@$;3W7gGNZsUm@q literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSCms-UHC-HW-V.bcmap b/lib/jspdf/build/cmaps/KSCms-UHC-HW-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b655dbcfb123ed06c7eeb87dfc96ecf6759363dd GIT binary patch literal 169 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=N;^vTdW)E;jHTsuIrH~uy7IM zz6wT$eN_w$2N{@{_EiJfbu8Tb>UA0Rb2pnZ?B`))+|SFzu%DliVZQ)3>wZCLhW+9| NwgeDMN;B`50suw^GhF}x literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSCms-UHC-V.bcmap b/lib/jspdf/build/cmaps/KSCms-UHC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..21f97f65b4a61adfa13f55d5a096ceab45eb485b GIT binary patch literal 166 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T?H%l#TdW)E;jHVCD6nu5x=3`|5QW_H#FzGVJGJW8BZn#IT>Akzv08H|u^uX@>pcK(+)B KOG-2EmjVE*uriJS literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSCpc-EUC-H.bcmap b/lib/jspdf/build/cmaps/KSCpc-EUC-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e06f361eb6d429290806b9f9cd7a0aebce22be4d GIT binary patch literal 2024 zcmW-i*H27iO?oT*=I*WEh>y zWZwfw)x9+eYFE?kLGTF?ZkWX&sp}x1yUFzOj=XcJL{@hkG za{2n`g`xA~u00hMC53xSN-A8{=SKQ{uJ-F=KpToUWs(J`+TmV;>Nm~+UE9J5L641UahVi1pSv>ge>ZlTsm4xiL@ zUR92$HR^%xThXer_tqfgPo=AheX7Q4pK6Lqo$8EEof=W|YCeim-OV30sC(q;48pXN zqNcN`X*yR`x~C^prS0Q(weZC4ooa#W_GE(VPUh|6?mJat@RRKk+z|NoDS=PR1U^fO zU{v5ctpeXI68K(R1Q!Lqe@x&9I|Y7diJ)KLM~4M|?2KSi;3r)IKix0zvy=$N1%BQp z@QV_GU&c=f4691fOg*3_!7_6lnC(Hr%m7Pp@|W`a?N=-A$JDlSJ!h)XdoRZZ$n^{es8+ zT#}v752-uc&wFI&i*4fNMWr0`;%c*HL&}ghqK>#XVrBcrG0C>kCRsO5OSI8jo4(=o zxHoRf&X@aJ<6m}q+%E@Z=c{aWN9ik%+US0DMRvX}?TC5Z=5fF7mYr`hI^{PNkTyqa z+;0xbDQ|8R#BXldVcB%myEk*P6E^$T%kk{2-~L-2^Xa&IF=;+SFlD|Nvy-v&??TIV z&A0h8ey8u99|KE)<|b_?SSo3GR+a{>0D(M-Il&ZYyJVIPZ8umhv_fJ9(2BrzOIk5l zv83$HjCKe-OVa9z?*Pw%)@0#3 z!FNMzCSGXeB@!=()$LY1y#wucNAF2Lgu|oz`aVO-?xix?q}1f`yvwL z1pxOuQM6zY?F2FxO3A)(TvfUj&WO*p0*hthxvDB#7Rzb(Vx2HXVO_ieJa`Yui$dBh z54HlPA8`+a>|-B{h>;FdJ-8`m*5aLqmEs%^8&swJQ9eaK`j(n)3)p~1Md%1Py!6Mv zAe`p4{^@h9_S|a5)AFe*EbqEgjVE4p7gp;1sejeu0{sY#QecEwoi*SGYe3*Cu_jyK z8dyto;6t!>n9*PzFzsL`Br^uAQ!yRHx*+^$mVll0m;Fr#>m_p!n3v2_uzriV56lO% zQes0eh1V}irkmI$$vgx$VlzF^4#TV?<|nfrTD8q=1RIykcCZODPl8<`^At1>nO$I4 zVV(uMMrJqI4Y2EAH(~aIO~ULW_5s4hWO~5~<^Z@Pei51Hz-4GccJIO*1h-nuA%FJQ zI(U?94ueONc^TXe9t(3c;&$#Ja|}G*VNQT2ASh#PNDf-Sw}2-~!D#Sg1Y^Nd5R4<9 zNg$PYdy zg*u6k%b_mts}$;y_%)$(OQ;Y0W=_cG&-u4*3CF^)!HA~tJ1}D8@K%^rWW+%`L*Wz{ zTPU0cBN5>Y7|E9KHZszrunUGTw^KNqw6peb4h*MFc*k&2xD19u;r%eaLE%a=avWhd z8Mz48!zhr$4PN_OT`~$kb3p6;*aN*>t%07J0KFgv`uKD+W(I38>z?vpZpdqS`yVV0 zebS6a18xLjKb^q+K5y<@qb}S+36Dj=s(73agnOVo9uOh&g)M?}0>AR8%C;viI`G6z z@{?<-lJI1b8ka?}u`Zt$D>_iSEVBL=+mZ04NDAFw?i00aC6TZ)2rLgEYGp{Iij@(H zU$v2aHJJ)lv&3$zqOd$oLgG^kIi8A4)BRM`E39RbXU#&XYez-TTCb`^Jv&Gp&uWGB LRYsqvzytpSc&T|h literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/KSCpc-EUC-V.bcmap b/lib/jspdf/build/cmaps/KSCpc-EUC-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f3c9113fcf0b02e1deea8246bfd27408becc8401 GIT binary patch literal 166 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T?H%k~kgV$(>a6RLD6nu5x=3`|5QW_H#FzGVJGJW8BZn#IT>Akzv08H|u^uX@>pcK(+)B KOG-2EmjVE${4#z3 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/Katakana.bcmap b/lib/jspdf/build/cmaps/Katakana.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..524303c4f0c20e6cd19aa1d35805e98c2c05cb7c GIT binary patch literal 100 zcmZR25agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe y$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC8-WN55UU{bJea$}HdW(NS2fFFMV literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/LICENSE b/lib/jspdf/build/cmaps/LICENSE new file mode 100644 index 0000000..b1ad168 --- /dev/null +++ b/lib/jspdf/build/cmaps/LICENSE @@ -0,0 +1,36 @@ +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- diff --git a/lib/jspdf/build/cmaps/NWP-H.bcmap b/lib/jspdf/build/cmaps/NWP-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..afc5e4b05ee6f4be4f17eb616742b59aee4c5ac1 GIT binary patch literal 2765 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 K#KF2yhX4S!xj~o! literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/RKSJ-H.bcmap b/lib/jspdf/build/cmaps/RKSJ-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..fb8d298e9bb8e090139bbc5e958f11a237672825 GIT binary patch literal 534 zcmW-dVM|kS6vlV1!_6jlIAtre^(Q4FZ7qdzD5oo@Ra#hW!6IgQZI@-tuH22r;(#pN zc3YNZS(fEYv$QPBvQ!BADC=#XqScEBemwl(fk!HbNFU1>Bk}7gaWoL{A8z;i1EMFU z4{IWvNv5>Xr0BhQO*h7LLrrNh->#lSLj3oW!qAeMaqC|h)->Tea;}$x{o$YmELjUc zR{7a&frS$QWo5ftfMs7cJ_O=wHmj={)2+bMHwYicfu9^8oM{H0876!>2>i@TINJz3dxh|M1o(xUaIPMBE=2h9Jn$=- zaNYqt-$(7G(`^H#%Fe=N;MX3)#RlNTFyYb#;5Saf(o zt}4K*<3p7z@0?PlvV!j!_(PZ4@LR#PPT;jP;l~v4rw+n(Kk&Lv_&EXmrIm2wAn-<< p@M{eCTQlLN0NxxV{2m4V(MY(p8+a>1xP1xs@6@aCX9<2q{{oKurl8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T7UUi5rR$N%+UUr**PoYhZy+br u-e4w{y8J;XlZGnYh++xso>knU|bjRFGekSdyBe u$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC8-WN55UU{r`}Oa}lMG#?cJ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniCNS-UCS2-H.bcmap b/lib/jspdf/build/cmaps/UniCNS-UCS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..d5db27c5cf1f5b0e66e16f6314d042a4ef707222 GIT binary patch literal 48280 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 Jqc2`({U4}20Ez$r literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniCNS-UCS2-V.bcmap b/lib/jspdf/build/cmaps/UniCNS-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1dc9b7a21bc59b6540d55b3d8933e5a6ba9f8947 GIT binary patch literal 156 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�ksTLal!IJ% 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniCNS-UTF8-V.bcmap b/lib/jspdf/build/cmaps/UniCNS-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..22a27e4ddbe26664c57f778a864b6872f6c2ba03 GIT binary patch literal 157 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 Uyk~SGTv&9{NH!N6NOao&1LeutHUIzs literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniGB-UCS2-V.bcmap b/lib/jspdf/build/cmaps/UniGB-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..53c534b7fecfd84e465c8943fe3adf500a4444f4 GIT binary patch literal 193 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T6PlOl?xY*)9BicPk;tzg!q5^X z$j}nrT*t6SW_C0~i#-EFiybR_iw6T^OAsT&9w{L02E+l)b2AxQoY)v!T$mVIY=JV; k+>9*_j-3Bx_sB55H!Wak%8eoOCt*p0P(FjU;qFB literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniGB-UTF16-H.bcmap b/lib/jspdf/build/cmaps/UniGB-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..b95045b400a77419292cab245f9f66f6298dbb5d GIT binary patch literal 44086 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniGB-UTF16-V.bcmap b/lib/jspdf/build/cmaps/UniGB-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..51f023e0d609798e72d46bf41309e092d72ccb07 GIT binary patch literal 178 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 M|Id0?+kYqj4{W+_`v3p{ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniGB-UTF32-V.bcmap b/lib/jspdf/build/cmaps/UniGB-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ce9c30a98541e23244876fef9dc67c2639fdd746 GIT binary patch literal 182 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 W-NpY7&VvC#?^62*GzIJ*TmK)sASzq{ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniGB-UTF8-V.bcmap b/lib/jspdf/build/cmaps/UniGB-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..f78020dd4028d56497c44b7afa94985f0d18f8ce GIT binary patch literal 181 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T6PlOl?xY(U;%1@i;UxH|VM5Yq4M+!U_+G%+;v&G<;s5}C8#>Vd literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UCS2-H.bcmap b/lib/jspdf/build/cmaps/UniJIS-UCS2-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7daf56afabf65a4707d7bb06d829f56b247c9e80 GIT binary patch literal 25439 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UCS2-HW-H.bcmap b/lib/jspdf/build/cmaps/UniJIS-UCS2-HW-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..ac9975c585ede6958758980ade161f687d40d58b GIT binary patch literal 119 zcmZR25agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T8=9BtKtsO>ygO9pkUpY R&cJYlpFy!nMUA0J8303WB^dw! literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UCS2-HW-V.bcmap b/lib/jspdf/build/cmaps/UniJIS-UCS2-HW-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3da0a1c62f19f720590b54fc1de7b027af100945 GIT binary patch literal 680 zcmZY4T~8B16b9gTW_C-zEKrO{Xki;z^rld0f@uiR4Ix@Y5SLOB2rjVUBlNpUP=hJZ zdv1(>g-o)Woy5N}MSq0Xx}bOFeWi!YTCQwVdLmXyM5o#>UP7ff4B)v+t$V>7V@)mi{{+VJB9MW zeBMkKX3fd;b1MvOy0r&Plg#y)x zX}a?kEYdC`e%><$20DDP28u4w=~n3;YfUN!NqxPZvI05?&-otvW_;5=!}nylUyt%< zl+mDX_+Nh*P#INNtw$dr{1ChXUIIS?FN4>>tKfC;b;>uvHz-@HZAgi;yP{& zWD?FQJ`$vs2>#XphHs|;qU{Wr(w_ML#!@oBh)Y#C<^_Wo0+Cb8kt`GOtNE+q)oMTu zssZYjYJJ(5D(B#;5O*QMkP8rfkc&*df=E%h0uh2pKo%j_;C90e5xD^|3b(hWWz&#b zRBl6zLD~>8BKP4&Aj^y3Hq)$ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UCS2-V.bcmap b/lib/jspdf/build/cmaps/UniJIS-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c50b9ddfde9da7ebb2f67eba68d58fa2cdee902a GIT binary patch literal 664 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 UUp1g87AoR8lAx!|poMAw7d?}<%>V!Z literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UTF16-V.bcmap b/lib/jspdf/build/cmaps/UniJIS-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..70bf90c0efb66da2a7aa19a820d766cfe3ef3183 GIT binary patch literal 643 zcmZXOTTc^F5XWcEIeWU@mZfZql}p1S79^z5N>bApgDXKP7qONqiI&*X4WK}=trCdA zkfrgJ7Xyht_z`$)Hfb#%WUGFXdH~!%YTOcem-5?-7jsfZ&dVHA`y+;jYbo? zQ7Gn3J-uJ9nA>GNxwBR*?G{V9idh&}jIAyGYQC(O%(7Yfcv(!FranHgker@*nx6Ti zW_C8`lIcih`Ee{BnKjtpNi`1=Fpvzl?yF}Q1*S5f*3?k}2)KY49L}4IKaqoG`Qku< zr2IqQT9x53c5B3YqmOC9#u%lIM~wufsbJV^KOvOJf`NbW4wool)bNDEc2OJ?65`;c zpP)ef6jJW+L;J(!l8eaH(1-h*q3fqC44xbu@4*4W;1a^M^}xVY#=%>S0%g^S|2rMo zWBMgv;0XDp85sT1o=4jFCtG%qf;F2tH(%3e%$v{Ku(x8K?N{7}7y(CCw>vVo9 z6cU=DzJBn720cg2BSyO~0?>^#LgnI-v}~-6~Uex?ZdBe ztS?FK`WnG{_A@qTSFu5??_F4bl~bcPvGuOHj!xVoIWwF(&yYCF9G%yUIC+ZBhD@9a nq0Syd=MzEakYUSZoypkR&at6$Y_Fabu${D4-0ek>+ADtn7bS_K literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UTF32-H.bcmap b/lib/jspdf/build/cmaps/UniJIS-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7a83d53ae70ca3d81cda827cc224ec8c5efa4f17 GIT binary patch literal 40539 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 TSv}^!0%Bau4|_Jjy$rZ_2%S+!ysBd@ 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UTF32-V.bcmap b/lib/jspdf/build/cmaps/UniJIS-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..7a8713539491f51c52ba3a1525d181efd32c1f0f GIT binary patch literal 677 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 Zk@2$oe=xv)=QA%Cm7k5@(*(V9{{Wi~yy*Y{ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS-UTF8-V.bcmap b/lib/jspdf/build/cmaps/UniJIS-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..808a94f0fd9c3b3cb0267e5cfe4dced2e65ecb1c GIT binary patch literal 678 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 E-=u#IHvj+t literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS2004-UTF16-V.bcmap b/lib/jspdf/build/cmaps/UniJIS2004-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..3d5bf6fb4ef94b452ed1ef0df926fc2bee55e973 GIT binary patch literal 647 zcmZXOTTc^F5XWcEoITxcODS8ha%o(|f`kCAn3~2ITnS3Kh_zHn6k?$pK!IXgB@lxl zOXDjq1`>VnBk)KzX@w86RX<5RfNy5yQNzGM`wl2!b8QOsDDF*H1#8XJF_8ULea zH`gXp87XylFgy1+o*0}kdG}#u2^8RTl(-T{8I&ws6x>*3k}QSDJJNt6yp{mv6cOqJaD7jFxN7$?&gjXDK+OiIXu z7k-$4LIi1V^r7?NV#&i)GL7D@v&hv`Hii#(54K?!p?enL%G%+^WhTI1i2?D-@c*5r zg#-H1YGNPzrJET0(U?m6M(A8WojiSc`a&qGB3Nz1)JIxtN{bFn6wsRVX6RsHQthLu z(MUvUMmoD71Uj_ubDtb-J8y+H3@RNIhg%{b7{-+#YC_?<=vV!H{q~XnJ!)ofBB&Rx&Ty_M)@* zHG$Px#amrwSY7yxXA_H9WA^tJtiH+xV%M?$uCjt|!l$_7g4}1w+&O{nYtGyyLU&bV oZkdt0&C&hD(B0!$_t?iO);Dsz=L8#z$9Zg|?0Iiv29(D9Ur3XRZ2$lO literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS2004-UTF32-H.bcmap b/lib/jspdf/build/cmaps/UniJIS2004-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..09eee10d4fb4b9fe1e70a1ee56825a207ae8034a GIT binary patch literal 40630 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS2004-UTF32-V.bcmap b/lib/jspdf/build/cmaps/UniJIS2004-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6c546001331cf4f2f68563229f994b55730dfdb1 GIT binary patch literal 681 zcmZXSTTc@~6vxk*GdtZbrIZD%TpAX!R6>9P2GbaWxIrlwF)r063Q^h(pg^&$5{SW& zrSX*)1BpKP5qKn`1s-L7z!8bGc&6%9b|D2f&{eEudws-UEt7}DLB$0>@j>h8& zV=|jtu?=gtP_#D-Msh2Y%WvoMZ;N(zNSoZ)Fs||oM&2&i`A>DHW!uKk@LbZIdTLGm z(NkONGf7KI-5pFVJ{}t#oHjW?&rxXw6yTtkegGp>PH_Sr zg1l$QyhVZDYtFnCLT^oFUXhWv!_oW9(A(!&^*JXhRyQ;9qx7C)ZTTdNwWO2w*XBW~ GrT+p)28xXU literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS2004-UTF8-H.bcmap b/lib/jspdf/build/cmaps/UniJIS2004-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1b1a64f50d204b03ef0c5575233687830a1b053a GIT binary patch literal 41779 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 z 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 StUu@Nr1Glp*C4U(!~X!6rxDoz literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJIS2004-UTF8-V.bcmap b/lib/jspdf/build/cmaps/UniJIS2004-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..994aa9ef9f50495a3ac558630b0234680be23c2f GIT binary patch literal 682 zcmXwz-%b-j6voe)ncZ&xP+*Hz(8|Ubkr1F5gEq#HZUa&TftD%;Q7LTz1&VEjKn!## z=uIJ*lt3aE-gw`5MK)VT^@u_4q(qZw=&r4_igcOe^qVeVGV=x+(Iywja zzTPLn-aqxB#km20(1^O*9vbVr-`?-VAGzX?%=C|Y+hO2<0VkXF)LuTsC@?z%y0f7~ zfPe{z%;~A`#ZeG^0V(#gN*vo=5JBP^5)md8@17Nw74BHt?5T3U13;5)R)_2tZgHi*Ph2gGDy7G|gsSPOPV z=E20<%{DMJ?9j6*R6T&|J%fh^4-C8pJx)~L2t=JkqP{i=8H^jOD1KDe)4!H6Kg^l) z(**OA=?yIQZ(hd&$^9M0{6yGZP90+D?ZFIc-BwQP<*7D;L>uE#d%=hnrl`#ds3jF2 o)m9j49|&se3`?fmseq-0Fw=K)Sb3Q)N3i1Gy<)Bm0aqFS2j0}QeHI+_hb#t%0 z^sD3GC; zUAp1EhZJd*5WDP|h6FltwGN67(3xiOfz+ImO_Kb2J8i252+IbZ1!e;?0WU)R-Fv-F+$BYGcZ0(sh`VKz#}v0Q zb1)ruSMix3xkT`{1~KwyQW0&XA<3=D|8HzL{fl^1fook!;KLwddO4Djcz>% literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJISPro-UCS2-V.bcmap b/lib/jspdf/build/cmaps/UniJISPro-UCS2-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..c148f67f5e9fe4a108519eeaace89e708a51f8f5 GIT binary patch literal 689 zcmZY4-%b-j6bA5bW_FiuTM!Bnkyf_RMQ;j~CYXj0-H=905X4dtf#3ogfzW^3DnSeh zf!=dtd<`$jB)jQ6$SnF0UgLt^nUi16nQtbO9QO0=Os#(8?tR>C8Bg>1Y-S>x%^TKE zZObuAN6nT~X&S}qcFnEVT)XA$j76=31LO96({P=p<9@ygOO9iVjn5Tl3iGAHukLbn zZ?;&+XyjjiqN$83 ztkG*eBzzyd23`R_0Iz~K!0X^H_!{LK;Omrs054Hq24AB5olVSX$`2QH^9BEO^J^E4 zurMqVeq!sRNpw;`XE^jAlsqHo^j&NcZ$Z_)?eH)U;%(UEF~wEF8pFA)5# zA&lHk8shCNn9?5q|Hf9bzll#(c%^d&@c=|lF2-_9Braz!S1y+|HKJuo$7=?5odWhVG zAA_ty)*%KV8xSeTeMpze7Gx7*n8`y36Y?0o0zX0ISNL5JeMFwXk0YQ6Gz5$UVR+Bh za>oebKoAQ>LpmUov+oh&ty%hY%B!SO;r^-NB>IuS(5Vu$=ykj^N1_(Fz8@6+0LGcP AI{*Lx literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJISPro-UTF8-V.bcmap b/lib/jspdf/build/cmaps/UniJISPro-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..1849d809a679e56414f4e18dce8ca3c41109e84e GIT binary patch literal 726 zcmXxgT~8B16b9gTW_Js1`H(_H0)?8W@dl_~pp7wxk}41c(hm@UAPXCT&=0m1f*8^Y zB{3-mlad&NSH?>dZcLhy-E{PKOwsKR;4io!X7Xgtyl3WIjPyG^kW6jr%P*HQzB_?{ zzx%G=AMo`rCRNQB*-U4&c-l9VSV-!rq&}a~7JFR%tE;|?`)Qx9r8Ry1Jd9|Xucvop zXdpBi3H_;$C63r${xUo$uOdTF-gd2JtbyKP`36C@+uU_ zP=XCs_N(z6k~^P(XMem85@^@%6ewyyb6dIiRVlB_L1OJ4p7yB@tC%G$0K)Fs9@-w* z`fZQGtyZzXo=}O_+PW_H+YUvdvZPVf^yT&uQ_6j zDNbX-K8=DHv-Xptw>b3#+p5_kV*;-Ua`R&Z|5h7va~Gupb$LG|Ip6!gm77A>WlNQ- zJKu>(6&R5Z1K^z?qA%>O7IwI&G+df2O*oWV#X-%u-drubS40S=0^S1df*1jBh8UH^ zIQVrcqTo*O4v0yJDVU8gokYxl-+Y&3?q?y^A=2ROlGp&h39$uJhUp>V4a^$wCL*?B)}caCaiAiRiXC249o79G zsMG-!x6Ng90$e^8gT$B)I?ql%8*#7K{tj<$x&zJdplw%n2kF^Kp*%udL2`ETsS^4N DWh&!c literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJISX0213-UTF32-H.bcmap b/lib/jspdf/build/cmaps/UniJISX0213-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..a83a677c56df6f1ac395d2ba71e60a08b0985e97 GIT binary patch literal 40517 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

ry6~E0z8>XD9~7$zzTJUQY|Ybl zQEm&$r@T#>j>5#v_#DY7uZ`Stu-ZniQR|$L?<86yEHEroO%wV0q7_B&`MB_3F!*R}}ZDRaflm@~mVVH-y zT=b(vkD~5i5sDMbQJmRMdA$KcaBdk|R_`hLU1H&w^>f>F_+o~J4%9D5#OFO2jQSKY z0q4$$zSQTPL2(@KJMW5_XkgP&7%`*`E{yR8_dparSoi#VXaXs1j$mK@~Wk#K+weWi&-F@i`mnS{NiR*a&dP8uJ($nW5cNFqHFO4$}jE7;qX9Zpf|6t;j2*Q?q?il z-{7j~Am!H#7_w{T7!+Q9j9&|I#?=@+cx@c$=UOz{eQgRB(zR*Gh{msFz))~)6>7M) z8!x)HFB?TcDvDDOocMKTj@qvKVw$dpV5qN0?nW^Ur)^x12;>-ojtQWWjyN>GV;)BrJ2KJej^%ME)|gO04B;J{`54AK z_TwcThe3`V1;vq+cZOjWJ0n1Jos$K@BgPiRLRS=vI95dGYD`V%dVU<`em(_XoIzJ_ z8aepDO>fNuWdx@5<^;UvW;B?`%_);n#By(xi_nUji^V-lFuXU@w=#Zng&^gdXE5en zIvW;c*EIB}YZltymADo~3WqM#wL(J+yC8V;u0tHP!3NKW6%NJ96D|7*h zNPiR)1tYw*zzTkQ>xhPzb?Z)`5ZtNT8^hA=ix+l>S@ja{UVy5*7jckm_bNfX-Mg$f z(BZZbI}^X{i{ZXKW^ze4XBotFL%>L~RjN$ENvr(*Ck7CCLJacdnyB?j#o!FzW2oDs3 zr0<;)#Tf|jyw?}q>J3KKz2SJMHxjhc8*N>LG97f>yBsX4cMYbhH#-i+mN^XBzKd|R zcLR!}i73vXhCV4Bh4T@3HGY~wN7mDkt#o7~9oa)iAWh~-BfIFo;M}>*Iq+=!tfw}J zlO?cC7N1dkOT1Lyk{C5!OI|>2sX1^!{JfcdnPdIe$-W{Af5tKtg~P5=>(Z;svFEV!WbF6r!{jK!IXgX&?qe zj>cDB3?%yCpWq|8q)kcqH?HbmQm5dX*?e|3Gqc~Boh<+T+|2Fn=Qr0kibgzcFf zVhLj=n_IIDYrjymw+lvcCzH$X=JIcgc6Lmi+1fI$@(V`ZF4+0Krqi-*V{CjeY0f^i zX8(kjcQ)sfRysBjpB!CIJ(`>toihbM-${85BoH8(3V;!*q(B4(aA*1`3k-a~Oio#s zwGwb(Rv4iFTfI0qB5n-@ZgdMxua0nDeOOI!Zs`C60rxTEOd)#z**mhtnc!v%MF-p* z6(b=k*xbiC@Gu95F^DiAH0t~TVTGPgUG!`ssWRhQK=kw<;&tJ%rBFU_}ZEEE0s7mb`wDO?Z zs;2R9lJZL$m-Fq1t@&KTlAnp?PiF?Eh zF|DKfPGRl}GWQL!Or(jDAKk;RQ&?G&{FMyD%F1V~&8=dUIp5o{@+uRg$KS;I`|>(^ zQ!SD=D|7D|GA|{g_gXM-jia}rFt5nCR}$!bV(1+TtoxiZ1?$@x`YQcDv9WrV#YWOe L`x{R{YNY=HNrj7y literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniJISX02132004-UTF32-H.bcmap b/lib/jspdf/build/cmaps/UniJISX02132004-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..e1a988dc9e80be9a0803e22d021b1e81fdcc5b94 GIT binary patch literal 40608 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 WYzZKilxEs5#lWzyu91adzbpV2cs2|G literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniKS-UTF16-H.bcmap b/lib/jspdf/build/cmaps/UniKS-UTF16-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..fd4e66e81f3507b190fb2986a26a45c1c380e302 GIT binary patch literal 26327 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 literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniKS-UTF16-V.bcmap b/lib/jspdf/build/cmaps/UniKS-UTF16-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..075efb7054901b1022af68e723647769cbe1d556 GIT binary patch literal 164 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T8=9Bt9jqG~;$~>3>*2_)AhxfT zk9~fwLi5~Q1}+vx1|1$o21W)s^F|h%M0N#X#(mZEa~StkuyXEaWMbS`-#oX7aX+sB L>wZCNru|X?)N3(k literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniKS-UTF32-H.bcmap b/lib/jspdf/build/cmaps/UniKS-UTF32-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..769d2142c03b10680800b3b6ae883e27fe04c5a2 GIT binary patch literal 26451 zcmZs@S8!FyvM88YRcmd(<-HIxNC~kbzNCdUp8C48k||bWyUT1TS~aM+?WJ(sxlzbW z$@HS6{C3e7UE7w$>$v$nl zXS)RPkO1-J8vxiZzt?_kILtY-U5P1BnQuwv%3|AIbAjtLsA!UEkW`r*^d=p0daOa% zYEEHg4CF1kIF=u8FV~r`A!kfwIR{zD<=v{)iI$sMD*zW(9k3+JbFf^jG&d#LuNXF! z6Q(n_|Hu0vS=N{hK$8Z>)XQmYEI_W_syW095_a<3xDvi5Wj9|PmtVevDl)Arn2y#h zpXn$~VHu!i2@v=9G=XI>wK}1~+GsG*w9y32NPQEM)ut%m>^9BjI;B@Ay+_3+8W~L* zLKfdH0auywfa@7TmT4dIOj8EvKoISu@(fUwX8~-2_q(|%3rle)mOfpt4qQ*@}$4`UpHrOj6P=)5FFj@n_KR2 z%#wtC419H9c@3{1coW*Pp)Cg@htO3Ahq+~=u&skY26JXZN3OD|H+^{bpuNz1VBFw% zZK@kOyLi=Cw`Qs0kHM7wR)7BJGpz;Qynj8pXR2A5$Yy>w$|OuTO;NX0rXq9U6>d(p zrI$<8)qmb|4Y8mrpM42X zLnH^58|cpCGY054LiiPJ+tIT)nZ!o~vot}!2CR3n>kWjS2saob8^znp()R}V`4mo{ zmc4JFe>GY)(qawv9EQo4V16ury@-7k;BMv2(LoR7Q729plciUZUJ`&o8H92rOcVff=#fn6TfYTZ^xiF0sBhW3;3Q3 zi&ZdsRAo8EM`I=TK5&;Z-(B|U3^S*KV-L<(%Q8eZ!SF`#r9npySa0y)8=M0^p9_`? zFre1DbQog%LkraM`9f*@sOqQ95IGKG&u}mu22~Ka1|}UW++VR6Crqo+z851q&~b|J z*_SK5*RzQn7~cW@W)Z2Q-octoeAb=CJK}jyE;v)6Edkmd>I0=x_a^W?W?fm#eT7fv zbMrk2zd^?_99;unR^ik^oUg#owcy@{;W7+oqw~1vX~c;P_Wl7*HAHvsf%i;uZG!oW z>bF|d_TrU)-iuEv$vx8IZP4^NA%`X;E2KSD-2%3 zsdH@NCVF41d^fr42%E0KFA3QGlACqlY~r6zGpiQ5D$%naKWD+mTX+SBkHdH&emo9y zH{dc76VDOXh0fZ9;Rg`t3gB*K}~zgX0B8uBd)0 z5Rn>{`4n%vEca{%Q%men2?XB=(^GI|q9Y%B@5wzn*;d2fWkc^CVcLKl4|w=CEM)M{ zMZ8xln{&|-Bembw{qz*O&T`8k2t5MFBNo_;qcQBFdPb`c@lIoOPlvjqSpY67|>};V%^{ z(VnB}d;%T&q+9az4zwI#6Q^+O3XE{D<{GV;(0d=c&#}eT#`$#k>mBhg`_Z=&f)a#d znXQn0yu*fHvbHp!KHO zZ})>M2Nsi5UkkZ;8yiZ3HVxRGz-YYesK&t~qN^6$wcG`&Kr@(+iOx4{vYI*1s2uyz zc8Ys;@L#t>;3U|easM0sP7CjJYM-9FcY$pe3#Nl3O3X&X)B|vq$9})Sz8f%d3CCYz zcprA`Nl-Mb9q2UVYs3Ey>~sVrQE;VNuf zDSI-pXCw5k;qEmO9mx>^A2)!x4$Nmc{e7Pd3p(g5gTV~^UIf3b2m3zgJ)*D*{{!u8 z9{h(C{znCTSqT$QaP&Obcf$KTpb_V?!K&7Ltw;A+>`jL-NaHtI6;29O*9$Rl7d&xD zTkh=>?0?3)lcdqDxNt!Jc}Jpi7YRgfUtwrBc5rF*J`82RVjb(dA^9Il)+hLD3x-?c zMmKXmGDkeTmE>>7!~qe$$6R}$H=kMc-24JUx+LpkKKqJ&Z55wd;E%1`o1?O|YU*(` z33^`3V^7icSm$7|-5b%H$|H}}U7Mv;97<+AR9>l6^1uyL#St1$*;g z_6+`%4Ay4`M+^9p!E_nTTj5_HX#O=Cdr}~f3*knv>d+=9egmAksPE2@{JU__z!pey zK^Que+*=E6t5nV%?AI4sMJ+FzGZO9m0A$xY= zM6=Y}qH-AxV@>Rr3*5U)-4jD|VAI#IGcIcSy4sTro_lIKPr5JjfjG7u#}0{IB(@Do zXiAaa-&OlAim4p7pw-U35OdGbSt>pkF#jRuSqB~!e$0Rm2~oe?Vn5%+pRRG!UH%~r zT`|IPR{mTe^&ODfje*`W+aw?19EiWC^uCx`&A6Q5(CGvr-pm0H0=k} z6D4R{0p5J|yaAjlv3OsMG|GNGI7--JBkMBq;A!kXEPsn;wtd(ahXc3S`=j8=6&c{J z5^b+#*Hs9=B-KV^N`bak7=MKpZOq_H@ue8rZh)td(Ykl+!=894SSOtOaGpqfD~u&! z5WsqenNlQow%iU&`dI^x z-)7Civ4;(8Vm){1+z@^l=FVepGI-Ak^Ifn-5h22d=jx9SaK0H`8!_+_ZI?AY*O}ua zuR@Cs&3g>KGjb@4^)vce3^^(Y?{C>2hw;th1BO zlL{T6cHT*+?KGT$?n}aRgLx|ALsvzxkbSO9`?-Rf8*u6=bgj_*oE|q8m0-HUoV)d| z-4MCLetiZr0*zo>k3E;MeJgY{K!%>p* zBRd*k{2YErf-h&Wjg;4XuuIU@0t;GbPeR87=-7pxLKwRw*|xz*7LLT?phh-VGV>wU zM*408*iMm748eNrJPi2|AuUDpM6+P7q#1YZ=aF!ptt&zmbKD(SJ=fvpezE^DvPYwNR%T zJ&7dx4n7l}JnRxUScvlvh&Tzcd}K3*b|v@jmj_p>?Dus8Brr*|Ez!4LGjv9Z8~|GZ zv(~ZC#Eny6^bH0}48a@dxSD0-(Ds7+ZYM_`GDkY|rzX9VIO)Tt^~_O+qh%_~7K6!% zok!4j1?&}3wzYy}q0n==?GjiESY#!b4Xo!TEH=Z!5wPxIk!UvZkS%P7u|p8n!ALc; zXr3ApY$J`?gP-C}r(Q z%)C{Q7$~Euj4fti2Z?Eg5-EaH+5GKgTqsfbTEPAW`s!dhLo&zmz)ES9Br8&oqa;TY zGworX{d_DHECsyp8I0aW`+fMiUhUc}&jO3A0na7&_AvbQkTg%i!$oPKS@dneb=VsR zb9%64VdM==KV%(6+_qT`B!WqgKQ*d)4smyhSa^)zck3(?{!)y@YRz|4j$-&J7A?ux zRV%m0bK*Os-uUi=BN4nCpsNT*8<>4BgbWgCqJa~vyMc|<+BbtMnNMuT_8K;N1wN|a z<2gQ62|Z`PRVs*cxk!KAFS=@Q{3>)t%Y&<6E(x61xHnfG(cT67ar)N1Blx?Dy693+?L%+;Nu=z7pSGLq|DuUI6zlX03)uJ_;a119) z*4%!TeIJe&YrcRw7AMk}e-(7RhQSnL7ikDl7*1zXf(@7p4a~$d(z3eFv)*%Hx`lJ=;F}DNZL%#1 zXCJF(QZbj!ZU^5wu$8mF68)*zhgddVjD2^dsb^qD>8EH2#IfK@2yRjZ9`oK*<>>Xw zY~Ts^J|bI;t4TAO#z;x=Xh@TT@MR3$;`2LrUoP+2!#yZSmv-)jKQ2KV4H5&9eW~u_ zy7`TK`Z#>424ef}1bkP^CYoU&O}6X>dlLq3pl=nJwt#mn`W}Pz91N}Fzn3Y!y}gKz zCiS~gK6D<3GNJu6`<6tO8`Z}H;J6LW3oy7t8oCVQnK1Pj?P?5^N#4^UF=6Bt3+0O7 zIcAcXJCB(ULw6K^$HbTG@a>jN)al&7hHB7~0f9Ztw?FEvRLA`hfnx&a-9VyI5o z4ud;|bb98v0qf9n8LXtBXMtii+J_Sx6}@=m1eZorB{+){EIZJ>TDVT5>oxSp ziMDL1{h?-PJ4~+9yVTr&FU5XU9hXLLYb_59BP-PNcVT!n_?SGX&&9|VK6xyzt611~Nr5`ql?A`;htKQS}$zEKnf14KPwBhWFt@8JPBB zXAwB!CG%eHKM#u+&|Zdb&kH-_<#bR;&YNgSMel0p+{$_@F#Lk`zJj+WaBwegKLO6y ztZ$dHv$~?tbAkCEf+dc7E)$xiz$$1;n50a3+hk zbet-NzGx9RgBAw;tPX zH1w6gSuj0=p*0XZg){rv*a2ui#d~GweU6S@FmncGPNSt-6HI0Q0pVX;AyEt_pmjI+ zSBOXv^yEXU2-UN|b^KVWcD`Y~#hh49gk-qAV(1z6K4osL)RTx^8nD#k*UkE2&KzmX zLyR?9CF=M2MJab^XyXMrbs$&&J#B#|oH@Wu4E-taE;;6X5`0T!E)0|0SjKz zecsFLb*vIR0%msN=mQ85btXc;N&xFP7Z`PWbf&IG>2l+fuk0ryoP00VglP*Q?2M$JCBh>R;cWzkyq~Y5bS@EGfIK z?B|uz+p`#s$G#Q_trcMo9Y=&a8ap?`;(2(Dy=rtcg1NxpC2Jky)+ThPp!KF`t6{zA zcphd8Fsv3n0~yKX(JGjIAa(1x3FJ^3I7k3#5Y{r4yArze{9^n>r8=}tZz{pIW^IQ- z-E$0viwTSP%|N;{jF<7Ld#F%>QS?VMOCkm;$zTWm7OA@cf8Gf8<8;)fnHwbUAsD=_ zUP#B8J+k+#)UigM+bR8g0K=Io(o??B`B%x_pGvAH=`z}W7H1o9Hiz||RCy1|&O2z< z^TA6P$QRZo(z39(9z$DW+U~NkB5>b=(PPa2LjL%QPsg&+gYpQsN6rT4^N8u8bMWUVv~9>ReV z@E-=t5wHmul)!SGx0R?|Z$vNw9P3!*HFp&AU^awaqx~i8eFm>|=0x=Fl&r;3y+z<5 zVf8GFT*Tq$EO-$6n%KKrgnZuh7$(S&7L6D28MAMI!Iuz@k?oaHi-qvZy|kIzvhN=H zIhxl+xn4zgZf3S!;1yEfF!o#nODrr(x{wy_$-;CL#|l~3L1vZ|HuKjF@F`FA?l6uW zW2U{V{Skh=$GzD+e4N=ILhu4}ZG)aT7!+tG-jNgOMNfHL2?>BrKq# zSqiRVoj1Uy0(-P%^Em zC{BaP+we;nP>@CGa_g1&E!V=48%Y zxWLDbGEWk|y$#*PV5@-sJ1|OC2+l`j{%#GZ<&KvsdzC!+%;0>$eE$qyutG{Em9)t*J$Sw3@$ z_f>Ll?VOBNz*GOdLcy|m;t024y`;wTi6sr%OE)cv%Wxfj~4A^K{AjLYhbDc&Tj1069RS$Tn`Fv2WoMwNoz--R0jN zv);Afd68*t5?{B8zdd8^CDFDF?A(X5+ce%H9MsCcJjLl|)l8+Tr@bOjvc4aH&v(@s7}*8>%jnF+OUzX$*{kq}BwEC0ZY&^$`Tlk#K?@5*QL- z_%3TlAd`1k3uN9gt;F$MF_#S8mC#XuliQ#_OZJs%+Ad(b0f!plX9j&KV115$vQh7V z5XWwTsHoXT%$>&kZ zzg%TqbO!8@oG6^@u;U!KE7;E)z`Y&6Hp_D<273u8g;pYsa#gdyN>2VZl=F&PQjfw4h_|Sa9A|^%Uab zMfmFz`FjkSb?p1OR7<(e79%Ftv5qScS$o zwanU(^x-a_*bANA@nG#}qcY>LG_N`*3T$R2z0fgV(CF>#%_kO+=sgLjpJ3xMzz)!a$h zQzyAHz`TQ*i{X6={Dq{XEzlK%j$Aqb*vMVsy{Ml)D(uzhIIR122|}l!`!R;j#akQ6 zVZlfp^6z1mb=dV%vN1mV6sXOYgV4svSEI62g6}E3t(HC~z^9#T@HmA6bu-~?Mq3Mn z6EIvF<60-Ww~5IYY;X;G-++!2vZs*+6VbT=Y`1Wxku6k#cZH#XIrBw`cHID0SDs=mA~en0}a%vVgW+m`;Yk zJ#@z?X5LTNz+8dv*Wi4j=53v>lPM~uD^X?It(jEux9hnnNAwhfcO8aru--)WNyW{l zb#q&JTO|u`nvUV@W(+jKAo*}lK_5|; zB)*ojGT!l$*&3mP#KvtfUksu3!d3;&2Vmc-4xI%%LyLe(qWj&91Z-a+54ONyj_N}* zkYk4wl(*L*lBtQb7%bJyaTh+8aSB`+i$&8a9z4p1vSIiI^hU9FTDEvfvhFrgP)z6^ z@4usdw~CLY;n*!rn+`l>eD(;0UgAUzG_uJebkxF!ljv7L|4lHuVW+W&~^ZQ71C&>G~EiW>#TbZnu(Ok$+4#OCSnbA8PuLt6o8;It%cEK_=AM* zEcUKK?c2jf?nocAHJwc?bb`C%nDab#tJ$msrj4c)&w8A^g}=Rs8QIMT>$&e3%(upS zvtZ!``+O3|PNAJKcO}kd;#{rH@{C!Nu=gR3)nZ$z6xuF%PV&$ysrxGLjHTmO-F->= zw2w@#d^(<+o^m@1&qf3s*ucX((58Xu+nV+kidKMOt{RKS_E)6;tG`}llh3)e0J>|D zJTWuRVSEEK-(!=EkM0tV91H<;+=?GwEsZ5IXT98&fnT$@lRVWK{E5zAf|dt#&{F(K zG!e#Z8TOt6_e%;Wl1QqWJ^+1Xq7}TG$WjcQ57CjJL=-vdG;hxdhrmCII0X&9PiDPE zoP1Vo`vobJ7M0?Q?^a9pqw2_ZPRIS(8~u3j`8$T`|mYf&aWw ze0w11tn-$Doy^^jVDT_H77am;)0;>EQwP!0)pni&D+G~7dlfp?C=yTa8}?2u94ECyyRbi7 z_zT!@BYYL`wF%7Rxya}4*RpTDcC1AnuHfEUw3VU5NHRP2Jz?Ivl8sDELVCLnW^Th< zj^iigadHK1RV2^f4M-}X`IIo7Rrl_P&Rs}ug`s5p7^VKb3}z0(LG?r_Ogx6UQXJFC z*2}_Mh2F9l+XbzMW8{$P4;A=NqyG%_r*qd8jI5Q~kLzvM&`RMQP25u=lhw}~$EF&v zyH4s|2Y=bkzQr&SHOJDSgQERb;LvTH-@^wt0@;p6D)IdZn0N|-8gxI3v1EaD6LwUA zB@4%!IJudAkB6VmD;6?m9Sq07T$RQZqZ{1?zhpA^O&B__#3OYTKwASh6&YSf_hz%c zC~kX%&UiLf2Aw&IC37$nEG@EimpsJKL2FHZ>|Iy~oq3sGuJR9B9@uLb%!Pqy9%)f^ zHQ|s}vR&id7vyOJxU~=}jyc39Uh|Jy@cP_fRDoU zwxX*_P^3g4LF$Qz#W>0I97%?nZGcElDk-Q_`^1NHa`#O!P^s%qH@Hgq+kMja&G<^*Be6Fqf8a$RLXvh3wEQYJ^wkRux>k7557 z=8eUv798Hp?X_y_>lnuabTvugGF2!k-uwvPkhzhO^)6h5{vEt0jf~Rhyo&B-xmN?e zjp#aSaBe0GHV$n;uUZ;u79Tf=vHMb2x@LHb=vfJ$nqjJzxgRCEZn8>Mmlo#^vqiG0 zc;{6JTw=}(I&-C>F4=d)1~3g^}pL%DPksK0I&eOJ+&$rqlAZ?f8r(UAh|xPfHd za~p*XqI_gWEJj`sYLTvarQ)du%HF}qguHHpQSk`EO%u@^<} zF&H|)M-C!I?K;WpbAda^u9X54Cq;N88(l3d7qG)1-fh$bQ=s#>)K!#oWvwCo#o@JS%|d!^%!}I?i|^r)tZw9x#Y(;YkIb* zyH4TvZ7}ghL^7eRRu?`b+G2IR_b`;pd^e>2i)^eaweJC)taJpb0^9V~VkCpeKpOLH zgz;wn3%OR0anEKJ$kPt(Rk_!b6I%6=tDIMvznZytjO}prA1|ZFDtUjY!oj>0<7N;Y zQ8;)GhaRE5KseX4YM}Vp55;WIh}Jh~Il}uD)seP{!cs>mHYN*)Ht{dpz|CxN_v6ze$< zO|}Zwu@4rH;=5|ub_09sWcNk%oIr9n*dE|)IxKF1iD(==$oqG)nd7qMq3p_p@IC0r zle?F~TKxCOH-%=Ib(5AH%L1>Cgk)@cAtuO%AH(JiK=BGe$?_@5e`TQ!b{;;PpE zM()|b`wpob`C>8whEB6D7j?fq!e1KsVkw4eMR&RE(R0h5#QrKVaG1QFhA(xx_qQnQ zKsfH}DH7a%lD*pn?rSjf54HpeEo0xFvC*BP?+&_%=OwFM6^dYL7vxPL2O-Q?fm;tB z%3-2Ho=E|h8cha@h7l7oH>Zg<4$c(_tm_JRwu_z<(7uP;(>eKYKWs7%MdQ#O=E~dA zmJEYQva6N7-HH=?gjGv61sJ#uJ`K6yqXt`q}f$h#Wojl$GJ7sB9i>^sIR#W>iggbY#K@W*myI}0u{ykz1ig&M~z z5v3&W1}Oxm6->LKkHXWNv@;E4&jQmmw(yiqY~!I;j9g`dItrE-u2N=t4rGRpyo9eD zzmXPt0)INJxXXu55X8)N6x#MF!QFm}DXYc)J<`H8ZoUncYM9ZmsT=G8T5dqk9rVW{ zc`ySiq-zWvB$6G01u~o+RvaQ7_mr(|yCB>vad0EI9_H=m)o-KWXNh?!y7Dv*l#AXo z@M|)BzRbHGvfv}N?U{P)Oq?^Dyn1qYzi7Lt8n06IzY(3AqdL{hevMDOG5A(W<3=%g zDsgxx*ptDz3Op^)`2zZHbBMC#%M%p&bO$5J>ao*E*80fa}}Wb4k_u-u?Z$O!gLb3Cy=ZkbV-~CMVS4JQQ};Y(t_#x8X8iRT zpFPCq=uS&DZ&zub!5<|seUJr?3wtZ?e5o;l`Lfo?hPG)eXW-|<@VQL->4EqtV0crp z>9!awQ`?ex`(7T_sQVcYrUBXZEOaPrlARPyk_X`x?0d78qQ{AZM@XdK0UZ~ZkDQ=8 z6;o#KE2;e!bKSyma=2fGk6U5!nP}UlvT1?rMYh$@9*<)J{x~YpeXXf$%)SEp4&tl~ zmK=FNC%;XU+jUZZ8YlYwjCF~B2`lGYn)OM_p7S@8l2<}MnoS2e5n-86l z-(SJ+b$q^x2QTa}lNYxDhgqySgYmerR}`|rJe!eZfR0UC(i;L<&~a6ClB9c8@mBPm z5q*u)w=2-M37zY?i-PKP!dxhMO0m006)~hMico%#wl!pr=@P%T!&(#z6{BC;#Vh=Gen~^7*KYL-hvo6o0sC zn5@8_EZN)?Jy8|&Ym)FZOY^1ByFu+Gvrz;7^h)*HZPoWv`0Y9S?JG~e`o~U1wQ-_M7>l**`KtFO{9Xznk-JlQFviU+eqSB7$3i4|HmJRc};4WP& z&~#lB-StwWB)+{igB+^9YD4dK-GGL5<)?b<^iz7nr(N8%a@CiYtTO>UNo?|Dlr>r3 zw@2MxrwdV-r_o?fFc~OLttXA#jhb*G*tTOt8*AY)j$>MT3r58bo=f=m&Pnh#DES8{amu6zM&UHFA zd>?{oQqOI%a9Q77k!o%{8n?sV3gBB2E3J0SnA&G=|N~7bA)Cv7lQ=OhlsfDapb9z!M`M=j0sYLrv&q`aP zQE3+^VkxiGs+Za(2?jc~^5#nFO)X?0$x3fVtxT=bj0Nv!(;F+PZ=^n= zwfXAhG4(>}f%=uzLIp`Ql8#bkrg37qHO)|_NEygp8lB#j;}hkj-Z|Z?6tGsEq(De; zN736fHnm%ZN=vPDkh9dARw%PqpjXB>F3miS-cMVqO;hUymD1dmkrcfB=!0&D%899h zp5wH;WTRerpMkXWygW-~#3g(#!KTzMmD2^wWjGX!EkU@1SEV%mANW>!TgHO|iFOH- z%Q#J2S~U(w2`&Y`IBguPrcw3OUPXN?^Da`JMfTre(2G2RYk76zsAhR3wUk@NkCDd8 zqbI_I_RqRF%Im3Sd2N?x6Ah{VnEQ|U{lMJvoAMHL3RJ446;?)3=w><1*Z+7j8YQ8u zRa&%uX>4U(l+l&dGRgvSXdQmgUjg;;V}*XuBh70G=NuHOQs$ukJG602SXM?~hFHnv z6NP~Sixwe)VyKtjil$Z7!`da>>eXqnNieH+m)B6? zM$7G&Y2?R~lI9!pgtCwR32WLP98RfU#<2pY0@sh4WvnYyySyX*e0v#l3jbQ}Q@hl= zf~jSCOdt&YXuS-d!sC?^L3mJRuh5~w-~N76beyJ(`6pET(eAhe{v;dF3Y%A_=PfS1xIwQ{5|(4 zoJueMjOXQ@uLk2k+Ar@R<$Nb9T>AU}!!egy(-r6?eEbRd5)b*O8T^9}5S?;rt+f1e zPnE9*m`nbTuM?72tX*HB)~03X^~Tt=yjbF^$|)HguclqF{TM<@ep)8NaT6;#jj+B- zDOOm%B-2aT`=1!&SFGLtkS0vqublYv;{WiU_ERny;BDoxeM=kVpT+pQB zlFOTAS*=dXu4-0#J8sgZt)+3Y>9t()YmEHoR%M9X-AhB!DjI2a`=8S)P)7>ai%qV2 zqO?$+5RRBcQG?P;G)=E;Y1U`cvZ-^^(ir8Nfx^cBx5A>cG{ma3j1}v*Ur3{&D8Du> zUwMxvoB{cV?S<`qa`TA%hy)Vge z>E%%Xzu^Dgs$SZ?2}*5t)$`@o((>|4jPV2?U4{QO{D0&sv%h89ma=N&38g`Ftb)r2 zrm~cL<+A(t|MFiG%5wmIANjv35j6TJBf&#cT3@23|6-HVR^{(j&`*#LOt5+!K>tv+p4t;yJA+OKq3o(b?j{@4HZc>jHclBmO2gtCVU&_!32L6=rZ z>1{c4Vi~~Y>D8L3E1Fwg5fNEAeH!E6{vVTRkJ6Or<({cfK~UPNDifobE_J2ML0xUq zD@3V$!r?#vVX{Z7wF-SJC{O^ZHAO3Jx1Ut-Tb>2*Ki@Yw8)K7|`O}nXtV_#yPg(AG z88s=ZifCqO`DyD@@~9+##oFU00xpfHL{GbLdks+-QNX{$P`v%##|uBj{maJR$!too z-u3os%QegPay8Y)&*$sO;VA3!!L&Z58dBxN+B7OZH{4*p*ZsQt#jOH$dxfti(qcJ0 zRWT8@bCL}nwG{N+=xH%Ma>~wK=9N8#wqrfT7P)*4z4vwVzrSg{CC{b*SO z<||iee?VpfUbQ}^%zLySw$(>l&Y*0$rHZyRp=^Z;$?+0aIys~`SA8kRdmJA!d_*Az zk2yB#NIyP8x6e&AXuBtKvg>LrM`VqqJP}Rn5KS9QY*77=vBwdT98^mZ# z4JtIfiX^b>lBSj6lXWNTwT4rUyq#OkH*k$5DacI}OW*yVy8N~1-k68(tp?^UJ zXGJ!8vMIk>P1marqGy{HJw>VLAv}2YsnAnSw@Qvs*->h9g3?pubURCR=Q(;Bve0vl z${V%Jb6*J0L(a%EAw16odclZZfy^tHFfR!fUL&G6n$lP;dI<;KbgIjsYci{{k*=Mf zcb$rSs3*|7Cl9^*sQ$onqyT>Oo~QB#D!WSg8K3tD!s*o{tvaM}+5Vpyw+Leb=euo0Pvx?VBkj;`2SpM&BzV`tbz%^?B$| zqwA0gxFKt4sFeM8N~85>k9D26E_L zU!aI0HTNKWv_lqw{Y(TZ1qN!g7^tQ4GgMwDW1zkeDRd44*Hjp|Nk(kKa^Nogn&|lf zwP~R?Phwc$MK%i(We4Rl3`Q9-7?+2^B#Qi|0fQMT3}zQ&FuxFk1yol=bvr5D%UQ6D z%%uk?Uxh4KEs^(}@`T(VAvZ|K4PK!4FKSuvN;U=wxxq%NyF+EOfXbWzrniXoAQ zA=!u_trkN>QlV(ZL$MNu5|M?HWelZLT_)wTDW6OEHF+Ymm0_re+7=7CIZSnXsE$Z1 zbb#^)DPKkT8pheA3=;yv zaas%~QGSI?_e|)QormE(3Bzk-7G6hnTM)wqIt&*w4DXOwm=F@)OZj~z7$#~9S5p4) zISe1CcTQ5@XXu@C6&Sus{oJ7X+s`pfa|l19=Ql=-a4kku6soI17SRh9iJ~-?;z1G+ zBebm}Y4l8UiDXhfmu_3GO~c40rbHF+NP#3riX@B>Yl-aFGKwL=$PvNm))7W(Iggx* z!pM2*r=H3$$}Dn)`oBTr-KF-;)bB&;_i-vlUeNO!Ew*tZwy7x9$@IAca~#5UUQZ7(^ty^*jTjo40~!Dy$?dbJy~u|0;K6FF;7pQ&H-ia9anJnHCEXUsV(Vs=cUju;yRRG@0N zwj@}!`=-Qw@9lor-TAn+^|s!d=k5+slBg&mNhOG6WKh`O`Ox?LLwBDJ|I~fX>B~Gb zw75T$W#;hQqs7d(ECTme^ZFgH9Q*qmd%hHo`@2}z9^gK;{r+Ky`$sfSJ|KLW@R`N9 zPcwg?X8!)wT}Tx{NY!qn2CPKtpa`UL{8NXA@e2m};?!|OCh=wTDHb1U6P^W`%E3>i z+NUl7AJ{JD>otTae5o5WQa2Oc&d(nX@*2Gfsb^W?CBiYAkftKIP0X*;J-mh}kv2>t zZG;~PvLFVa>MUmK1zYG2xBmfQY4 z(hd{KN5}KjFcodA)crifQa@ zJm6qHSWI|1d8^1cwo5;p=fcC~e0SaFQki32f^T@M%;~(&aUpXNuV3@sy={bdLuOuc$wwG2 z9?U*^Z1lfU=` zewn~D+`=y-zr`=1Zu~MiZr8BCu85!S|JM+nI`)_0Q4G{a&BNcu#GSz7;3as>km&J* zvEuQN(Re&9F4B6uJwf>Y?VxiP-(&pGQU@3lXZ`P{sJr`JuIXX;^~CKH>esEN^*nyP z2>g24vVOf1gkKqVW&t|O(khEaDU0z|)*$$24UsAi>^OwrHw2a zz%1Hq6Alo0vrfy~j`&rooi4TRy z_DU-|Osj0_WcDPcsj#!@fU@TamCf)z`)kscLuapKp7n&cGVNfV-K_I4`KOrodrM}Y zWu2FZQ!lfx!=2+2DklH~at6T887+{*x^t#L=S;WkoVkRTGA)NEXC-+%ft=k^h@Z_C=$`=s%jEVCDp!0)-$RAAFP}Tb#B!4a3`J05w-%DN; zdC{aDBg}T?Q<3t2WV%ZDhVXx);C&J-@MNMbpG>pGlUWFTGMD%^h$lOspX}D^$zg>j zCoSso3In877_4O>9b=)FcqrV3qYz%mIV_~i z6;kF3w^(-J9_FXRD?9?b@VG)DmA&vHX;*;4t3nrE*Q!XvQ`8T-Xe7KvoU-U(`BTwZ%hO~Pqz_1j)70lLX}z&r7Tw(2)neuQl%W%QU;!-qoGS9 zAWNq(&kTW52A-w!EUR>(R;ARt($%hkr5i{;O!^U_OOM%B=~?2Gg;L5wX^gg>35jQP zNzeSDpY_v=o(&Rswu$%_OFr8{{$BDA5kE}+QLUbxf#=ypc%J*Yf}e9u_nhHt@>aw9oc(`(8IjMaOE0ECyqE^{B2vf~bK!fj5Z)IYn-^D@u0g-JDMXou zugqVdjGGH(Q-m&?X4z$PAj%lKlr4iU`$qVeeM^|~UAB|>9<9ovng1m5)5Oo(qU=Wt zWwaq>*P&m!w0h|$@G=O2FZ)a1%aMdBKQB2hFIQ^oz0Xcd&}iW%^)n5ksN5_l_? zD^anZ`J>3E-dCJOP{jq|dqey7hHZE=4)&XgO1+s$cs|o2;!CCdX0^hbO_ud$ixzKo zTjI@r@(z&~P2TtLzPSWZNqwjs1WzS(v~nU7ZGGi*pmGlEO4`Uu&RZpQqjD8#>oB^K zGF{1_qVkeuRbFwU3JO(H$ttBqRRB;GBv3`0UFCtU8cbR!X^i8l!Vyq424kzH6W&JJ z4$G?AZCh1bW>+00eq89PlUh|>AWqq=x(d7Mh7#2_P)+@-?uU@-VB+HlPjt!ZDOy$2 zc2v(pP&H-0dM!NFn|P&MR?{w4e^26 z61rv)yfrJx=lIkdL_p19s2cj=8jep5=e*_`P%EXX)dIEsAZml4YX?}PYq|KTe$x0CB&C$Rkv25jwT^AAJ4KvvNZk*_FKborf~e;nS3U1n-w(2WAXNPjh5Aq>>qlu>Kh{D$ z<)?l!`O}!6TOakjUp?M{A-sWUGXmW@pS{s>usbSH7+E5iS{+F zB7U5_lf+NkvhkuV8W{^T-Vpepg!RFe_&~Y%K)LuZfV82)`@sv}2X483*iQORX?@`M zemEr5hr`5AFr7x^hqDN2VvN-^A81-=SxrlXXj%c)#QQaU2i>&ZWjE0mHSL3^iMFVT zvfOkN;-i56sD%H=e(-(_5%@TRw692;EyTw~P#>4V^N}&l$DQOKAnz(BedL%nPZVgL z4$&MbW%F$5-^@NXuVA8`YF-0(^G5RNJDM41G#}Ke`2_K^wrr+PZ~jrC`5JjQpj)6- z3;jh)Fht7$pk)wbONbUNBP`KE``j`bc1r~OTNwMc&?dHU9o({<^lw=9cPzV6iIyFf zY}vyy2Uv!-w&e(U$CYlOt!-gHTVfPiZurYqDbPweZ>8L|_S34BKC;ydcPn+db(~bK z>{BcI)Ji>Wokjj);_Oo^``@~n_$J~zi0_hCE92DG!^AoMt*6L8L->+Vtv~Y0c%{t+ z-NwVu+uT4~pi8zf#%mi$`e4$BYSrc=PW#hF`D>f(C)>Eu)5bAuTL`OdNw8>JMR*N) z-?97_*lmp4+URTB4oKM+f7u?Sbh`(#eHc`G zC`9{crU-c2=@Z&1=k1H7)xONO+E){&ooT1fYTwMVoU?Yu3GI}TcE)1uXM}1$2X8xd zs)N3>W015uhWd$)ky3Sp!|oWbR7WH{9dm{1SWEs!rY+DN+qLRAz%oY=+;I%5gX7Y{ zap~kS>zz`oPB%QA{h>QY!`sPm@1&3Gr0jIAvFy%Ggm*E~4|g7byYnddv>%hUnJN-2-@KeBI4> zt();ucO(SQB7DD5zkZv_v>HLbF^>D~ zf*kzYC09TX*LyufA$q*fJ)uJMj1jVDoJ7wgrF*8?Ru64o59h0gcBzMUsfV$A&wBE< zK=$m0uV=r&XFzHX?!s8M2c@lBT*XOSZuMq0<7Uts^f8Im- ze&#zym~r>#a|rnS1AJd-qrb51m$A@a#%uLu27l=hqe*Y z+}Z&$_F$m7b;yA(IgD%Y7$aGW31JDoLN1J<)inGQ2xWNK7g2W3nBO75n6)fswzC4W z*MVr2jA0094C4V~uCYWcy|amBC}(16_f0GX&BP96zF4ZQiRB!a*ztnUH26#`!$T9x zU2qdigKlDXIu$VVF|nLO6MI4sJ?+qbaA+|OjSkDi-XtxKA%KYs)*jvOFz7nD}Aj#*g5Q;>U7e<0-2q zelfGef8%7K+cEKn99lHTApR5wF`i+$iRV0<_#Yj{RZdibAR|GuL;`~tlMrNCCSibO zn*`?`33T`-A)J{L#tMIv!1caKnC;N!Ij*3|(;WQci?p2sXXL=H;BPNjnsY!GyO>`SkWOGCr&38c9f z$y)9?YH)A9!&vGtmN}WfacJMMRrfZtRrhGr4bOEHCW%`OCdtvuBuAN&9BE2&q$$bg z(C8ct-x(*3ZrLQ!FPkI=gNEna@nn7=plleS_FzGsJ$r6DkSrJWUG+>gw%);l4wn-kTNSolGTtb=TNQX9ygPqK% z!0-b<()h^FB(G)l$=oq8$s3(o9KB3-rBcj>PN~tr)Fm~Qnot`N6b>V$~Gy{{}1@vwo?EA literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniKS-UTF32-V.bcmap b/lib/jspdf/build/cmaps/UniKS-UTF32-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..bdab208b69d287128195eccbd084c8cf4ca658c3 GIT binary patch literal 168 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T8=9Bt9jqG~;%025>*37Jz@Q+u zua=K}ey&3E+*}4O7Dfgg9!3U6208Oa7Mo;tpu8~SzUuiojQc8BIrlR%G488xo?FDY OpI3l&zo0eKeklND@-b-u literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniKS-UTF8-H.bcmap b/lib/jspdf/build/cmaps/UniKS-UTF8-H.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..6ff8674af772af896d7d33c7addc37c57822f8a2 GIT binary patch literal 27790 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

    UjdU>!C<8eSfmt; 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 XDie!M@tP=Qo=5R?GKGx`n-c&3T8mO+ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/UniKS-UTF8-V.bcmap b/lib/jspdf/build/cmaps/UniKS-UTF8-V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..8dfa76a58eb720dd1992c2cc9abf1dd4b39c5a66 GIT binary patch literal 169 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T6PlOl9jqG~;%1@i;l%x@VcNc0 zKKADSxe6P;=Q41yFf!=yFfuSQG{%{?u-GKAKWdoFxUahTe-7im3Rcejj7*IC>Nk8Z RV%*Owz`9?sv6^YW6ad@#ITio_ literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/V.bcmap b/lib/jspdf/build/cmaps/V.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..fdec9906621904180f42bd5c91f377397fd6cf95 GIT binary patch literal 166 zcmZR65agU+P+63jo>8J;XlZGnYh++xso>knU|bjRFGekSdyBe z$K{xlqX1T4tWcC%oLW={5)4jFRnXJ-@pN|e3wC|T=#j{(sKmI}pOXoN*Dkx{jjaUT-^bqy(L literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/cmaps/WP-Symbol.bcmap b/lib/jspdf/build/cmaps/WP-Symbol.bcmap new file mode 100644 index 0000000000000000000000000000000000000000..46729bbf30f3b2f176492d907fb8ca3f6a1e3026 GIT binary patch literal 179 zcmW;C-wMG{90&04*(h8{xuKNv0%qLpa><2~3lnNLW=^QFb+%;wBoDUVIgjE|#O#wbv3o&3S`2gr-Jo93r6xVAssnXnw1B!ZT0%WQ!k{%%Po}{NAH@>d0EGtm W&}LiN6j32_>FyT<6+0XN literal 0 HcmV?d00001 diff --git a/lib/jspdf/build/pdf.mjs b/lib/jspdf/build/pdf.mjs new file mode 100644 index 0000000..0eefce5 --- /dev/null +++ b/lib/jspdf/build/pdf.mjs @@ -0,0 +1,18151 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2023 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +/******/ var __webpack_modules__ = ({ + +/***/ 640: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AnnotationLayer: () => (/* binding */ AnnotationLayer), + FreeTextAnnotationElement: () => (/* binding */ FreeTextAnnotationElement), + InkAnnotationElement: () => (/* binding */ InkAnnotationElement), + StampAnnotationElement: () => (/* binding */ StampAnnotationElement) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +// EXTERNAL MODULE: ./src/display/annotation_storage.js +var annotation_storage = __webpack_require__(780); +;// CONCATENATED MODULE: ./src/shared/scripting_utils.js +function makeColorComp(n) { + return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); +} +function scaleAndClamp(x) { + return Math.max(0, Math.min(255, 255 * x)); +} +class ColorConverters { + static CMYK_G([c, y, m, k]) { + return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; + } + static G_CMYK([g]) { + return ["CMYK", 0, 0, 0, 1 - g]; + } + static G_RGB([g]) { + return ["RGB", g, g, g]; + } + static G_rgb([g]) { + g = scaleAndClamp(g); + return [g, g, g]; + } + static G_HTML([g]) { + const G = makeColorComp(g); + return `#${G}${G}${G}`; + } + static RGB_G([r, g, b]) { + return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; + } + static RGB_rgb(color) { + return color.map(scaleAndClamp); + } + static RGB_HTML(color) { + return `#${color.map(makeColorComp).join("")}`; + } + static T_HTML() { + return "#00000000"; + } + static T_rgb() { + return [null]; + } + static CMYK_RGB([c, y, m, k]) { + return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; + } + static CMYK_rgb([c, y, m, k]) { + return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; + } + static CMYK_HTML(components) { + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); + } + static RGB_CMYK([r, g, b]) { + const c = 1 - r; + const m = 1 - g; + const y = 1 - b; + const k = Math.min(c, m, y); + return ["CMYK", c, m, y, k]; + } +} + +// EXTERNAL MODULE: ./src/display/xfa_layer.js +var xfa_layer = __webpack_require__(160); +;// CONCATENATED MODULE: ./src/display/annotation_layer.js + + + + + +const DEFAULT_TAB_INDEX = 1000; +const DEFAULT_FONT_SIZE = 9; +const GetElementsByNameSet = new WeakSet(); +function getRectDims(rect) { + return { + width: rect[2] - rect[0], + height: rect[3] - rect[1] + }; +} +class AnnotationElementFactory { + static create(parameters) { + const subtype = parameters.data.annotationType; + switch (subtype) { + case util.AnnotationType.LINK: + return new LinkAnnotationElement(parameters); + case util.AnnotationType.TEXT: + return new TextAnnotationElement(parameters); + case util.AnnotationType.WIDGET: + const fieldType = parameters.data.fieldType; + switch (fieldType) { + case "Tx": + return new TextWidgetAnnotationElement(parameters); + case "Btn": + if (parameters.data.radioButton) { + return new RadioButtonWidgetAnnotationElement(parameters); + } else if (parameters.data.checkBox) { + return new CheckboxWidgetAnnotationElement(parameters); + } + return new PushButtonWidgetAnnotationElement(parameters); + case "Ch": + return new ChoiceWidgetAnnotationElement(parameters); + case "Sig": + return new SignatureWidgetAnnotationElement(parameters); + } + return new WidgetAnnotationElement(parameters); + case util.AnnotationType.POPUP: + return new PopupAnnotationElement(parameters); + case util.AnnotationType.FREETEXT: + return new FreeTextAnnotationElement(parameters); + case util.AnnotationType.LINE: + return new LineAnnotationElement(parameters); + case util.AnnotationType.SQUARE: + return new SquareAnnotationElement(parameters); + case util.AnnotationType.CIRCLE: + return new CircleAnnotationElement(parameters); + case util.AnnotationType.POLYLINE: + return new PolylineAnnotationElement(parameters); + case util.AnnotationType.CARET: + return new CaretAnnotationElement(parameters); + case util.AnnotationType.INK: + return new InkAnnotationElement(parameters); + case util.AnnotationType.POLYGON: + return new PolygonAnnotationElement(parameters); + case util.AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case util.AnnotationType.UNDERLINE: + return new UnderlineAnnotationElement(parameters); + case util.AnnotationType.SQUIGGLY: + return new SquigglyAnnotationElement(parameters); + case util.AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + case util.AnnotationType.STAMP: + return new StampAnnotationElement(parameters); + case util.AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: + return new AnnotationElement(parameters); + } + } +} +class AnnotationElement { + #hasBorder = false; + constructor(parameters, { + isRenderable = false, + ignoreBorder = false, + createQuadrilaterals = false + } = {}) { + this.isRenderable = isRenderable; + this.data = parameters.data; + this.layer = parameters.layer; + this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; + this.imageResourcesPath = parameters.imageResourcesPath; + this.renderForms = parameters.renderForms; + this.svgFactory = parameters.svgFactory; + this.annotationStorage = parameters.annotationStorage; + this.enableScripting = parameters.enableScripting; + this.hasJSActions = parameters.hasJSActions; + this._fieldObjects = parameters.fieldObjects; + this.parent = parameters.parent; + if (isRenderable) { + this.container = this._createContainer(ignoreBorder); + } + if (createQuadrilaterals) { + this._createQuadrilaterals(); + } + } + static _hasPopupData({ + titleObj, + contentsObj, + richText + }) { + return !!(titleObj?.str || contentsObj?.str || richText?.str); + } + get hasPopupData() { + return AnnotationElement._hasPopupData(this.data); + } + _createContainer(ignoreBorder) { + const { + data, + parent: { + page, + viewport + } + } = this; + const container = document.createElement("section"); + container.setAttribute("data-annotation-id", data.id); + if (!(this instanceof WidgetAnnotationElement)) { + container.tabIndex = DEFAULT_TAB_INDEX; + } + container.style.zIndex = this.parent.zIndex++; + if (this.data.popupRef) { + container.setAttribute("aria-haspopup", "dialog"); + } + if (data.noRotate) { + container.classList.add("norotate"); + } + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + if (!data.rect || this instanceof PopupAnnotationElement) { + const { + rotation + } = data; + if (!data.hasOwnCanvas && rotation !== 0) { + this.setRotation(rotation, container); + } + return container; + } + const { + width, + height + } = getRectDims(data.rect); + const rect = util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); + if (!ignoreBorder && data.borderStyle.width > 0) { + container.style.borderWidth = `${data.borderStyle.width}px`; + const horizontalRadius = data.borderStyle.horizontalCornerRadius; + const verticalRadius = data.borderStyle.verticalCornerRadius; + if (horizontalRadius > 0 || verticalRadius > 0) { + const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; + container.style.borderRadius = radius; + } else if (this instanceof RadioButtonWidgetAnnotationElement) { + const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; + container.style.borderRadius = radius; + } + switch (data.borderStyle.style) { + case util.AnnotationBorderStyleType.SOLID: + container.style.borderStyle = "solid"; + break; + case util.AnnotationBorderStyleType.DASHED: + container.style.borderStyle = "dashed"; + break; + case util.AnnotationBorderStyleType.BEVELED: + (0,util.warn)("Unimplemented border style: beveled"); + break; + case util.AnnotationBorderStyleType.INSET: + (0,util.warn)("Unimplemented border style: inset"); + break; + case util.AnnotationBorderStyleType.UNDERLINE: + container.style.borderBottomStyle = "solid"; + break; + default: + break; + } + const borderColor = data.borderColor || null; + if (borderColor) { + this.#hasBorder = true; + container.style.borderColor = util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); + } else { + container.style.borderWidth = 0; + } + } + container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; + const { + rotation + } = data; + if (data.hasOwnCanvas || rotation === 0) { + container.style.width = `${100 * width / pageWidth}%`; + container.style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation, container); + } + return container; + } + setRotation(angle, container = this.container) { + if (!this.data.rect) { + return; + } + const { + pageWidth, + pageHeight + } = this.parent.viewport.rawDims; + const { + width, + height + } = getRectDims(this.data.rect); + let elementWidth, elementHeight; + if (angle % 180 === 0) { + elementWidth = 100 * width / pageWidth; + elementHeight = 100 * height / pageHeight; + } else { + elementWidth = 100 * height / pageWidth; + elementHeight = 100 * width / pageHeight; + } + container.style.width = `${elementWidth}%`; + container.style.height = `${elementHeight}%`; + container.setAttribute("data-main-rotation", (360 - angle) % 360); + } + get _commonActions() { + const setColor = (jsName, styleName, event) => { + const color = event.detail[jsName]; + const colorType = color[0]; + const colorArray = color.slice(1); + event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); + this.annotationStorage.setValue(this.data.id, { + [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) + }); + }; + return (0,util.shadow)(this, "_commonActions", { + display: event => { + const { + display + } = event.detail; + const hidden = display % 2 === 1; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noView: hidden, + noPrint: display === 1 || display === 2 + }); + }, + print: event => { + this.annotationStorage.setValue(this.data.id, { + noPrint: !event.detail.print + }); + }, + hidden: event => { + const { + hidden + } = event.detail; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noPrint: hidden, + noView: hidden + }); + }, + focus: event => { + setTimeout(() => event.target.focus({ + preventScroll: false + }), 0); + }, + userName: event => { + event.target.title = event.detail.userName; + }, + readonly: event => { + event.target.disabled = event.detail.readonly; + }, + required: event => { + this._setRequired(event.target, event.detail.required); + }, + bgColor: event => { + setColor("bgColor", "backgroundColor", event); + }, + fillColor: event => { + setColor("fillColor", "backgroundColor", event); + }, + fgColor: event => { + setColor("fgColor", "color", event); + }, + textColor: event => { + setColor("textColor", "color", event); + }, + borderColor: event => { + setColor("borderColor", "borderColor", event); + }, + strokeColor: event => { + setColor("strokeColor", "borderColor", event); + }, + rotation: event => { + const angle = event.detail.rotation; + this.setRotation(angle); + this.annotationStorage.setValue(this.data.id, { + rotation: angle + }); + } + }); + } + _dispatchEventFromSandbox(actions, jsEvent) { + const commonActions = this._commonActions; + for (const name of Object.keys(jsEvent.detail)) { + const action = actions[name] || commonActions[name]; + action?.(jsEvent); + } + } + _setDefaultPropertiesFromJS(element) { + if (!this.enableScripting) { + return; + } + const storedData = this.annotationStorage.getRawValue(this.data.id); + if (!storedData) { + return; + } + const commonActions = this._commonActions; + for (const [actionName, detail] of Object.entries(storedData)) { + const action = commonActions[actionName]; + if (action) { + const eventProxy = { + detail: { + [actionName]: detail + }, + target: element + }; + action(eventProxy); + delete storedData[actionName]; + } + } + } + _createQuadrilaterals() { + if (!this.container) { + return; + } + const { + quadPoints + } = this.data; + if (!quadPoints) { + return; + } + const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect; + if (quadPoints.length === 1) { + const [, { + x: trX, + y: trY + }, { + x: blX, + y: blY + }] = quadPoints[0]; + if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { + return; + } + } + const { + style + } = this.container; + let svgBuffer; + if (this.#hasBorder) { + const { + borderColor, + borderWidth + } = style; + style.borderWidth = 0; + svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; + this.container.classList.add("hasBorder"); + } + const width = rectTrX - rectBlX; + const height = rectTrY - rectBlY; + const { + svgFactory + } = this; + const svg = svgFactory.createElement("svg"); + svg.classList.add("quadrilateralsContainer"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const clipPath = svgFactory.createElement("clipPath"); + const id = `clippath_${this.data.id}`; + clipPath.setAttribute("id", id); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + defs.append(clipPath); + for (const [, { + x: trX, + y: trY + }, { + x: blX, + y: blY + }] of quadPoints) { + const rect = svgFactory.createElement("rect"); + const x = (blX - rectBlX) / width; + const y = (rectTrY - trY) / height; + const rectWidth = (trX - blX) / width; + const rectHeight = (trY - blY) / height; + rect.setAttribute("x", x); + rect.setAttribute("y", y); + rect.setAttribute("width", rectWidth); + rect.setAttribute("height", rectHeight); + clipPath.append(rect); + svgBuffer?.push(``); + } + if (this.#hasBorder) { + svgBuffer.push(`')`); + style.backgroundImage = svgBuffer.join(""); + } + this.container.append(svg); + this.container.style.clipPath = `url(#${id})`; + } + _createPopup() { + const { + container, + data + } = this; + container.setAttribute("aria-haspopup", "dialog"); + const popup = new PopupAnnotationElement({ + data: { + color: data.color, + titleObj: data.titleObj, + modificationDate: data.modificationDate, + contentsObj: data.contentsObj, + richText: data.richText, + parentRect: data.rect, + borderStyle: 0, + id: `popup_${data.id}`, + rotation: data.rotation + }, + parent: this.parent, + elements: [this] + }); + this.parent.div.append(popup.render()); + } + render() { + (0,util.unreachable)("Abstract method `AnnotationElement.render` called"); + } + _getElementsByName(name, skipId = null) { + const fields = []; + if (this._fieldObjects) { + const fieldObj = this._fieldObjects[name]; + if (fieldObj) { + for (const { + page, + id, + exportValues + } of fieldObj) { + if (page === -1) { + continue; + } + if (id === skipId) { + continue; + } + const exportValue = typeof exportValues === "string" ? exportValues : null; + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (domElement && !GetElementsByNameSet.has(domElement)) { + (0,util.warn)(`_getElementsByName - element not allowed: ${id}`); + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + } + return fields; + } + for (const domElement of document.getElementsByName(name)) { + const { + exportValue + } = domElement; + const id = domElement.getAttribute("data-element-id"); + if (id === skipId) { + continue; + } + if (!GetElementsByNameSet.has(domElement)) { + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + return fields; + } + show() { + if (this.container) { + this.container.hidden = false; + } + this.popup?.maybeShow(); + } + hide() { + if (this.container) { + this.container.hidden = true; + } + this.popup?.forceHide(); + } + getElementsToTriggerPopup() { + return this.container; + } + addHighlightArea() { + const triggers = this.getElementsToTriggerPopup(); + if (Array.isArray(triggers)) { + for (const element of triggers) { + element.classList.add("highlightArea"); + } + } else { + triggers.classList.add("highlightArea"); + } + } + get _isEditable() { + return false; + } + _editOnDoubleClick() { + if (!this._isEditable) { + return; + } + const { + annotationEditorType: mode, + data: { + id: editId + } + } = this; + this.container.addEventListener("dblclick", () => { + this.linkService.eventBus?.dispatch("switchannotationeditormode", { + source: this, + mode, + editId + }); + }); + } +} +class LinkAnnotationElement extends AnnotationElement { + constructor(parameters, options = null) { + super(parameters, { + isRenderable: true, + ignoreBorder: !!options?.ignoreBorder, + createQuadrilaterals: true + }); + this.isTooltipOnly = parameters.data.isTooltipOnly; + } + render() { + const { + data, + linkService + } = this; + const link = document.createElement("a"); + link.setAttribute("data-element-id", data.id); + let isBound = false; + if (data.url) { + linkService.addLinkAttributes(link, data.url, data.newWindow); + isBound = true; + } else if (data.action) { + this._bindNamedAction(link, data.action); + isBound = true; + } else if (data.attachment) { + this.#bindAttachment(link, data.attachment, data.attachmentDest); + isBound = true; + } else if (data.setOCGState) { + this.#bindSetOCGState(link, data.setOCGState); + isBound = true; + } else if (data.dest) { + this._bindLink(link, data.dest); + isBound = true; + } else { + if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { + this._bindJSAction(link, data); + isBound = true; + } + if (data.resetForm) { + this._bindResetFormAction(link, data.resetForm); + isBound = true; + } else if (this.isTooltipOnly && !isBound) { + this._bindLink(link, ""); + isBound = true; + } + } + this.container.classList.add("linkAnnotation"); + if (isBound) { + this.container.append(link); + } + return this.container; + } + #setInternalLink() { + this.container.setAttribute("data-internal-link", ""); + } + _bindLink(link, destination) { + link.href = this.linkService.getDestinationHash(destination); + link.onclick = () => { + if (destination) { + this.linkService.goToDestination(destination); + } + return false; + }; + if (destination || destination === "") { + this.#setInternalLink(); + } + } + _bindNamedAction(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeNamedAction(action); + return false; + }; + this.#setInternalLink(); + } + #bindAttachment(link, attachment, dest = null) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest); + return false; + }; + this.#setInternalLink(); + } + #bindSetOCGState(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeSetOCGState(action); + return false; + }; + this.#setInternalLink(); + } + _bindJSAction(link, data) { + link.href = this.linkService.getAnchorUrl(""); + const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); + for (const name of Object.keys(data.actions)) { + const jsName = map.get(name); + if (!jsName) { + continue; + } + link[jsName] = () => { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: data.id, + name + } + }); + return false; + }; + } + if (!link.onclick) { + link.onclick = () => false; + } + this.#setInternalLink(); + } + _bindResetFormAction(link, resetForm) { + const otherClickAction = link.onclick; + if (!otherClickAction) { + link.href = this.linkService.getAnchorUrl(""); + } + this.#setInternalLink(); + if (!this._fieldObjects) { + (0,util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); + if (!otherClickAction) { + link.onclick = () => false; + } + return; + } + link.onclick = () => { + otherClickAction?.(); + const { + fields: resetFormFields, + refs: resetFormRefs, + include + } = resetForm; + const allFields = []; + if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { + const fieldIds = new Set(resetFormRefs); + for (const fieldName of resetFormFields) { + const fields = this._fieldObjects[fieldName] || []; + for (const { + id + } of fields) { + fieldIds.add(id); + } + } + for (const fields of Object.values(this._fieldObjects)) { + for (const field of fields) { + if (fieldIds.has(field.id) === include) { + allFields.push(field); + } + } + } + } else { + for (const fields of Object.values(this._fieldObjects)) { + allFields.push(...fields); + } + } + const storage = this.annotationStorage; + const allIds = []; + for (const field of allFields) { + const { + id + } = field; + allIds.push(id); + switch (field.type) { + case "text": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + case "checkbox": + case "radiobutton": + { + const value = field.defaultValue === field.exportValues; + storage.setValue(id, { + value + }); + break; + } + case "combobox": + case "listbox": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + default: + continue; + } + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (!domElement) { + continue; + } else if (!GetElementsByNameSet.has(domElement)) { + (0,util.warn)(`_bindResetFormAction - element not allowed: ${id}`); + continue; + } + domElement.dispatchEvent(new Event("resetform")); + } + if (this.enableScripting) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: "app", + ids: allIds, + name: "ResetForm" + } + }); + } + return false; + }; + } +} +class TextAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + } + render() { + this.container.classList.add("textAnnotation"); + const image = document.createElement("img"); + image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; + image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); + image.setAttribute("data-l10n-args", JSON.stringify({ + type: this.data.name + })); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.append(image); + return this.container; + } +} +class WidgetAnnotationElement extends AnnotationElement { + render() { + if (this.data.alternativeText) { + this.container.title = this.data.alternativeText; + } + return this.container; + } + showElementAndHideCanvas(element) { + if (this.data.hasOwnCanvas) { + if (element.previousSibling?.nodeName === "CANVAS") { + element.previousSibling.hidden = true; + } + element.hidden = false; + } + } + _getKeyModifier(event) { + return util.FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; + } + _setEventListener(element, elementData, baseName, eventName, valueGetter) { + if (baseName.includes("mouse")) { + element.addEventListener(baseName, event => { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event), + shift: event.shiftKey, + modifier: this._getKeyModifier(event) + } + }); + }); + } else { + element.addEventListener(baseName, event => { + if (baseName === "blur") { + if (!elementData.focused || !event.relatedTarget) { + return; + } + elementData.focused = false; + } else if (baseName === "focus") { + if (elementData.focused) { + return; + } + elementData.focused = true; + } + if (!valueGetter) { + return; + } + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event) + } + }); + }); + } + } + _setEventListeners(element, elementData, names, getter) { + for (const [baseName, eventName] of names) { + if (eventName === "Action" || this.data.actions?.[eventName]) { + if (eventName === "Focus" || eventName === "Blur") { + elementData ||= { + focused: false + }; + } + this._setEventListener(element, elementData, baseName, eventName, getter); + if (eventName === "Focus" && !this.data.actions?.Blur) { + this._setEventListener(element, elementData, "blur", "Blur", null); + } else if (eventName === "Blur" && !this.data.actions?.Focus) { + this._setEventListener(element, elementData, "focus", "Focus", null); + } + } + } + } + _setBackgroundColor(element) { + const color = this.data.backgroundColor || null; + element.style.backgroundColor = color === null ? "transparent" : util.Util.makeHexColor(color[0], color[1], color[2]); + } + _setTextStyle(element) { + const TEXT_ALIGNMENT = ["left", "center", "right"]; + const { + fontColor + } = this.data.defaultAppearanceData; + const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; + const style = element.style; + let computedFontSize; + const BORDER_SIZE = 2; + const roundToOneDecimal = x => Math.round(10 * x) / 10; + if (this.data.multiLine) { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + const numberOfLines = Math.round(height / (util.LINE_FACTOR * fontSize)) || 1; + const lineHeight = height / numberOfLines; + computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / util.LINE_FACTOR)); + } else { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + computedFontSize = Math.min(fontSize, roundToOneDecimal(height / util.LINE_FACTOR)); + } + style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; + style.color = util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + if (this.data.textAlignment !== null) { + style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + } + _setRequired(element, isRequired) { + if (isRequired) { + element.setAttribute("required", true); + } else { + element.removeAttribute("required"); + } + element.setAttribute("aria-required", isRequired); + } +} +class TextWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + super(parameters, { + isRenderable + }); + } + setPropertyOnSiblings(base, key, value, keyInStorage) { + const storage = this.annotationStorage; + for (const element of this._getElementsByName(base.name, base.id)) { + if (element.domElement) { + element.domElement[key] = value; + } + storage.setValue(element.id, { + [keyInStorage]: value + }); + } + } + render() { + const storage = this.annotationStorage; + const id = this.data.id; + this.container.classList.add("textWidgetAnnotation"); + let element = null; + if (this.renderForms) { + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + let textContent = storedData.value || ""; + const maxLen = storage.getValue(id, { + charLimit: this.data.maxLen + }).charLimit; + if (maxLen && textContent.length > maxLen) { + textContent = textContent.slice(0, maxLen); + } + let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null; + if (fieldFormattedValues && this.data.comb) { + fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); + } + const elementData = { + userValue: textContent, + formattedValue: fieldFormattedValues, + lastCommittedValue: null, + commitKey: 1, + focused: false + }; + if (this.data.multiLine) { + element = document.createElement("textarea"); + element.textContent = fieldFormattedValues ?? textContent; + if (this.data.doNotScroll) { + element.style.overflowY = "hidden"; + } + } else { + element = document.createElement("input"); + element.type = "text"; + element.setAttribute("value", fieldFormattedValues ?? textContent); + if (this.data.doNotScroll) { + element.style.overflowX = "hidden"; + } + } + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = this.data.readOnly; + element.name = this.data.fieldName; + element.tabIndex = DEFAULT_TAB_INDEX; + this._setRequired(element, this.data.required); + if (maxLen) { + element.maxLength = maxLen; + } + element.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + this.setPropertyOnSiblings(element, "value", event.target.value, "value"); + elementData.formattedValue = null; + }); + element.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue ?? ""; + element.value = elementData.userValue = defaultValue; + elementData.formattedValue = null; + }); + let blurListener = event => { + const { + formattedValue + } = elementData; + if (formattedValue !== null && formattedValue !== undefined) { + event.target.value = formattedValue; + } + event.target.scrollLeft = 0; + }; + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("focus", event => { + if (elementData.focused) { + return; + } + const { + target + } = event; + if (elementData.userValue) { + target.value = elementData.userValue; + } + elementData.lastCommittedValue = target.value; + elementData.commitKey = 1; + if (!this.data.actions?.Focus) { + elementData.focused = true; + } + }); + element.addEventListener("updatefromsandbox", jsEvent => { + this.showElementAndHideCanvas(jsEvent.target); + const actions = { + value(event) { + elementData.userValue = event.detail.value ?? ""; + storage.setValue(id, { + value: elementData.userValue.toString() + }); + event.target.value = elementData.userValue; + }, + formattedValue(event) { + const { + formattedValue + } = event.detail; + elementData.formattedValue = formattedValue; + if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) { + event.target.value = formattedValue; + } + storage.setValue(id, { + formattedValue + }); + }, + selRange(event) { + event.target.setSelectionRange(...event.detail.selRange); + }, + charLimit: event => { + const { + charLimit + } = event.detail; + const { + target + } = event; + if (charLimit === 0) { + target.removeAttribute("maxLength"); + return; + } + target.setAttribute("maxLength", charLimit); + let value = elementData.userValue; + if (!value || value.length <= charLimit) { + return; + } + value = value.slice(0, charLimit); + target.value = elementData.userValue = value; + storage.setValue(id, { + value + }); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: 1, + selStart: target.selectionStart, + selEnd: target.selectionEnd + } + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + element.addEventListener("keydown", event => { + elementData.commitKey = 1; + let commitKey = -1; + if (event.key === "Escape") { + commitKey = 0; + } else if (event.key === "Enter" && !this.data.multiLine) { + commitKey = 2; + } else if (event.key === "Tab") { + elementData.commitKey = 3; + } + if (commitKey === -1) { + return; + } + const { + value + } = event.target; + if (elementData.lastCommittedValue === value) { + return; + } + elementData.lastCommittedValue = value; + elementData.userValue = value; + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + }); + const _blurListener = blurListener; + blurListener = null; + element.addEventListener("blur", event => { + if (!elementData.focused || !event.relatedTarget) { + return; + } + if (!this.data.actions?.Blur) { + elementData.focused = false; + } + const { + value + } = event.target; + elementData.userValue = value; + if (elementData.lastCommittedValue !== value) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: elementData.commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + } + _blurListener(event); + }); + if (this.data.actions?.Keystroke) { + element.addEventListener("beforeinput", event => { + elementData.lastCommittedValue = null; + const { + data, + target + } = event; + const { + value, + selectionStart, + selectionEnd + } = target; + let selStart = selectionStart, + selEnd = selectionEnd; + switch (event.inputType) { + case "deleteWordBackward": + { + const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); + if (match) { + selStart -= match[0].length; + } + break; + } + case "deleteWordForward": + { + const match = value.substring(selectionStart).match(/^[^\w]*\w*/); + if (match) { + selEnd += match[0].length; + } + break; + } + case "deleteContentBackward": + if (selectionStart === selectionEnd) { + selStart -= 1; + } + break; + case "deleteContentForward": + if (selectionStart === selectionEnd) { + selEnd += 1; + } + break; + } + event.preventDefault(); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + change: data || "", + willCommit: false, + selStart, + selEnd + } + }); + }); + } + this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); + } + if (blurListener) { + element.addEventListener("blur", blurListener); + } + if (this.data.comb) { + const fieldWidth = this.data.rect[2] - this.data.rect[0]; + const combWidth = fieldWidth / maxLen; + element.classList.add("comb"); + element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; + } + } else { + element = document.createElement("div"); + element.textContent = this.data.fieldValue; + element.style.verticalAlign = "middle"; + element.style.display = "table-cell"; + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + } + this._setTextStyle(element); + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class SignatureWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: !!parameters.data.hasOwnCanvas + }); + } +} +class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.exportValue === data.fieldValue + }).value; + if (typeof value === "string") { + value = value !== "Off"; + storage.setValue(id, { + value + }); + } + this.container.classList.add("buttonWidgetAnnotation", "checkBox"); + const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = data.readOnly; + this._setRequired(element, this.data.required); + element.type = "checkbox"; + element.name = data.fieldName; + if (value) { + element.setAttribute("checked", true); + } + element.setAttribute("exportValue", data.exportValue); + element.tabIndex = DEFAULT_TAB_INDEX; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const checkbox of this._getElementsByName(name, id)) { + const curChecked = checked && checkbox.exportValue === data.exportValue; + if (checkbox.domElement) { + checkbox.domElement.checked = curChecked; + } + storage.setValue(checkbox.id, { + value: curChecked + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue || "Off"; + event.target.checked = defaultValue === data.exportValue; + }); + if (this.enableScripting && this.hasJSActions) { + element.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value(event) { + event.target.checked = event.detail.value !== "Off"; + storage.setValue(id, { + value: event.target.checked + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); + } + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("buttonWidgetAnnotation", "radioButton"); + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.fieldValue === data.buttonValue + }).value; + if (typeof value === "string") { + value = value !== data.buttonValue; + storage.setValue(id, { + value + }); + } + if (value) { + for (const radio of this._getElementsByName(data.fieldName, id)) { + storage.setValue(radio.id, { + value: false + }); + } + } + const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = data.readOnly; + this._setRequired(element, this.data.required); + element.type = "radio"; + element.name = data.fieldName; + if (value) { + element.setAttribute("checked", true); + } + element.tabIndex = DEFAULT_TAB_INDEX; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const radio of this._getElementsByName(name, id)) { + storage.setValue(radio.id, { + value: false + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue; + event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; + }); + if (this.enableScripting && this.hasJSActions) { + const pdfButtonValue = data.buttonValue; + element.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value: event => { + const checked = pdfButtonValue === event.detail.value; + for (const radio of this._getElementsByName(event.target.name)) { + const curChecked = checked && radio.id === id; + if (radio.domElement) { + radio.domElement.checked = curChecked; + } + storage.setValue(radio.id, { + value: curChecked + }); + } + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); + } + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); + return this.container; + } +} +class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { + constructor(parameters) { + super(parameters, { + ignoreBorder: parameters.data.hasAppearance + }); + } + render() { + const container = super.render(); + container.classList.add("buttonWidgetAnnotation", "pushButton"); + if (this.data.alternativeText) { + container.title = this.data.alternativeText; + } + const linkElement = container.lastChild; + if (this.enableScripting && this.hasJSActions && linkElement) { + this._setDefaultPropertiesFromJS(linkElement); + linkElement.addEventListener("updatefromsandbox", jsEvent => { + this._dispatchEventFromSandbox({}, jsEvent); + }); + } + return container; + } +} +class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("choiceWidgetAnnotation"); + const storage = this.annotationStorage; + const id = this.data.id; + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + const selectElement = document.createElement("select"); + GetElementsByNameSet.add(selectElement); + selectElement.setAttribute("data-element-id", id); + selectElement.disabled = this.data.readOnly; + this._setRequired(selectElement, this.data.required); + selectElement.name = this.data.fieldName; + selectElement.tabIndex = DEFAULT_TAB_INDEX; + let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; + if (!this.data.combo) { + selectElement.size = this.data.options.length; + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + selectElement.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue; + for (const option of selectElement.options) { + option.selected = option.value === defaultValue; + } + }); + for (const option of this.data.options) { + const optionElement = document.createElement("option"); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + if (storedData.value.includes(option.exportValue)) { + optionElement.setAttribute("selected", true); + addAnEmptyEntry = false; + } + selectElement.append(optionElement); + } + let removeEmptyEntry = null; + if (addAnEmptyEntry) { + const noneOptionElement = document.createElement("option"); + noneOptionElement.value = " "; + noneOptionElement.setAttribute("hidden", true); + noneOptionElement.setAttribute("selected", true); + selectElement.prepend(noneOptionElement); + removeEmptyEntry = () => { + noneOptionElement.remove(); + selectElement.removeEventListener("input", removeEmptyEntry); + removeEmptyEntry = null; + }; + selectElement.addEventListener("input", removeEmptyEntry); + } + const getValue = isExport => { + const name = isExport ? "value" : "textContent"; + const { + options, + multiple + } = selectElement; + if (!multiple) { + return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; + } + return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); + }; + let selectedValues = getValue(false); + const getItems = event => { + const options = event.target.options; + return Array.prototype.map.call(options, option => { + return { + displayValue: option.textContent, + exportValue: option.value + }; + }); + }; + if (this.enableScripting && this.hasJSActions) { + selectElement.addEventListener("updatefromsandbox", jsEvent => { + const actions = { + value(event) { + removeEmptyEntry?.(); + const value = event.detail.value; + const values = new Set(Array.isArray(value) ? value : [value]); + for (const option of selectElement.options) { + option.selected = values.has(option.value); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + multipleSelection(event) { + selectElement.multiple = true; + }, + remove(event) { + const options = selectElement.options; + const index = event.detail.remove; + options[index].selected = false; + selectElement.remove(index); + if (options.length > 0) { + const i = Array.prototype.findIndex.call(options, option => option.selected); + if (i === -1) { + options[0].selected = true; + } + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + clear(event) { + while (selectElement.length !== 0) { + selectElement.remove(0); + } + storage.setValue(id, { + value: null, + items: [] + }); + selectedValues = getValue(false); + }, + insert(event) { + const { + index, + displayValue, + exportValue + } = event.detail.insert; + const selectChild = selectElement.children[index]; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + if (selectChild) { + selectChild.before(optionElement); + } else { + selectElement.append(optionElement); + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + items(event) { + const { + items + } = event.detail; + while (selectElement.length !== 0) { + selectElement.remove(0); + } + for (const item of items) { + const { + displayValue, + exportValue + } = item; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + selectElement.append(optionElement); + } + if (selectElement.options.length > 0) { + selectElement.options[0].selected = true; + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + indices(event) { + const indices = new Set(event.detail.indices); + for (const option of event.target.options) { + option.selected = indices.has(option.index); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + editable(event) { + event.target.disabled = !event.detail.editable; + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + selectElement.addEventListener("input", event => { + const exportValue = getValue(true); + storage.setValue(id, { + value: exportValue + }); + event.preventDefault(); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value: selectedValues, + changeEx: exportValue, + willCommit: false, + commitKey: 1, + keyDown: false + } + }); + }); + this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value); + } else { + selectElement.addEventListener("input", function (event) { + storage.setValue(id, { + value: getValue(true) + }); + }); + } + if (this.data.combo) { + this._setTextStyle(selectElement); + } else {} + this._setBackgroundColor(selectElement); + this._setDefaultPropertiesFromJS(selectElement); + this.container.append(selectElement); + return this.container; + } +} +class PopupAnnotationElement extends AnnotationElement { + constructor(parameters) { + const { + data, + elements + } = parameters; + super(parameters, { + isRenderable: AnnotationElement._hasPopupData(data) + }); + this.elements = elements; + } + render() { + this.container.classList.add("popupAnnotation"); + const popup = new PopupElement({ + container: this.container, + color: this.data.color, + titleObj: this.data.titleObj, + modificationDate: this.data.modificationDate, + contentsObj: this.data.contentsObj, + richText: this.data.richText, + rect: this.data.rect, + parentRect: this.data.parentRect || null, + parent: this.parent, + elements: this.elements, + open: this.data.open + }); + const elementIds = []; + for (const element of this.elements) { + element.popup = popup; + elementIds.push(element.data.id); + element.addHighlightArea(); + } + this.container.setAttribute("aria-controls", elementIds.map(id => `${util.AnnotationPrefix}${id}`).join(",")); + return this.container; + } +} +class PopupElement { + #boundKeyDown = this.#keyDown.bind(this); + #boundHide = this.#hide.bind(this); + #boundShow = this.#show.bind(this); + #boundToggle = this.#toggle.bind(this); + #color = null; + #container = null; + #contentsObj = null; + #dateObj = null; + #elements = null; + #parent = null; + #parentRect = null; + #pinned = false; + #popup = null; + #rect = null; + #richText = null; + #titleObj = null; + #wasVisible = false; + constructor({ + container, + color, + elements, + titleObj, + modificationDate, + contentsObj, + richText, + parent, + rect, + parentRect, + open + }) { + this.#container = container; + this.#titleObj = titleObj; + this.#contentsObj = contentsObj; + this.#richText = richText; + this.#parent = parent; + this.#color = color; + this.#rect = rect; + this.#parentRect = parentRect; + this.#elements = elements; + this.#dateObj = display_utils.PDFDateString.toDateObject(modificationDate); + this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); + for (const element of this.trigger) { + element.addEventListener("click", this.#boundToggle); + element.addEventListener("mouseenter", this.#boundShow); + element.addEventListener("mouseleave", this.#boundHide); + element.classList.add("popupTriggerArea"); + } + for (const element of elements) { + element.container?.addEventListener("keydown", this.#boundKeyDown); + } + this.#container.hidden = true; + if (open) { + this.#toggle(); + } + } + render() { + if (this.#popup) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.#parent; + const popup = this.#popup = document.createElement("div"); + popup.className = "popup"; + if (this.#color) { + const baseColor = popup.style.outlineColor = util.Util.makeHexColor(...this.#color); + if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { + popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; + } else { + const BACKGROUND_ENLIGHT = 0.7; + popup.style.backgroundColor = util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); + } + } + const header = document.createElement("span"); + header.className = "header"; + const title = document.createElement("h1"); + header.append(title); + ({ + dir: title.dir, + str: title.textContent + } = this.#titleObj); + popup.append(header); + if (this.#dateObj) { + const modificationDate = document.createElement("span"); + modificationDate.classList.add("popupDate"); + modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-string"); + modificationDate.setAttribute("data-l10n-args", JSON.stringify({ + date: this.#dateObj.toLocaleDateString(), + time: this.#dateObj.toLocaleTimeString() + })); + header.append(modificationDate); + } + const contentsObj = this.#contentsObj; + const richText = this.#richText; + if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { + xfa_layer.XfaLayer.render({ + xfaHtml: richText.html, + intent: "richText", + div: popup + }); + popup.lastChild.classList.add("richText", "popupContent"); + } else { + const contents = this._formatContents(contentsObj); + popup.append(contents); + } + let useParentRect = !!this.#parentRect; + let rect = useParentRect ? this.#parentRect : this.#rect; + for (const element of this.#elements) { + if (!rect || util.Util.intersect(element.data.rect, rect) !== null) { + rect = element.data.rect; + useParentRect = true; + break; + } + } + const normalizedRect = util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); + const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; + const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; + const popupLeft = normalizedRect[0] + parentWidth; + const popupTop = normalizedRect[1]; + const { + style + } = this.#container; + style.left = `${100 * (popupLeft - pageX) / pageWidth}%`; + style.top = `${100 * (popupTop - pageY) / pageHeight}%`; + this.#container.append(popup); + } + _formatContents({ + str, + dir + }) { + const p = document.createElement("p"); + p.classList.add("popupContent"); + p.dir = dir; + const lines = str.split(/(?:\r\n?|\n)/); + for (let i = 0, ii = lines.length; i < ii; ++i) { + const line = lines[i]; + p.append(document.createTextNode(line)); + if (i < ii - 1) { + p.append(document.createElement("br")); + } + } + return p; + } + #keyDown(event) { + if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { + return; + } + if (event.key === "Enter" || event.key === "Escape" && this.#pinned) { + this.#toggle(); + } + } + #toggle() { + this.#pinned = !this.#pinned; + if (this.#pinned) { + this.#show(); + this.#container.addEventListener("click", this.#boundToggle); + this.#container.addEventListener("keydown", this.#boundKeyDown); + } else { + this.#hide(); + this.#container.removeEventListener("click", this.#boundToggle); + this.#container.removeEventListener("keydown", this.#boundKeyDown); + } + } + #show() { + if (!this.#popup) { + this.render(); + } + if (!this.isVisible) { + this.#container.hidden = false; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; + } else if (this.#pinned) { + this.#container.classList.add("focused"); + } + } + #hide() { + this.#container.classList.remove("focused"); + if (this.#pinned || !this.isVisible) { + return; + } + this.#container.hidden = true; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; + } + forceHide() { + this.#wasVisible = this.isVisible; + if (!this.#wasVisible) { + return; + } + this.#container.hidden = true; + } + maybeShow() { + if (!this.#wasVisible) { + return; + } + this.#wasVisible = false; + this.#container.hidden = false; + } + get isVisible() { + return this.#container.hidden === false; + } +} +class FreeTextAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.textContent = parameters.data.textContent; + this.textPosition = parameters.data.textPosition; + this.annotationEditorType = util.AnnotationEditorType.FREETEXT; + } + render() { + this.container.classList.add("freeTextAnnotation"); + if (this.textContent) { + const content = document.createElement("div"); + content.classList.add("annotationTextContent"); + content.setAttribute("role", "comment"); + for (const line of this.textContent) { + const lineSpan = document.createElement("span"); + lineSpan.textContent = line; + content.append(lineSpan); + } + this.container.append(content); + } + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this._editOnDoubleClick(); + return this.container; + } + get _isEditable() { + return this.data.hasOwnCanvas; + } +} +class LineAnnotationElement extends AnnotationElement { + #line = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("lineAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const line = this.#line = this.svgFactory.createElement("svg:line"); + line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); + line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); + line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); + line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); + line.setAttribute("stroke-width", data.borderStyle.width || 1); + line.setAttribute("stroke", "transparent"); + line.setAttribute("fill", "transparent"); + svg.append(line); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#line; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class SquareAnnotationElement extends AnnotationElement { + #square = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("squareAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const square = this.#square = this.svgFactory.createElement("svg:rect"); + square.setAttribute("x", borderWidth / 2); + square.setAttribute("y", borderWidth / 2); + square.setAttribute("width", width - borderWidth); + square.setAttribute("height", height - borderWidth); + square.setAttribute("stroke-width", borderWidth || 1); + square.setAttribute("stroke", "transparent"); + square.setAttribute("fill", "transparent"); + svg.append(square); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#square; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class CircleAnnotationElement extends AnnotationElement { + #circle = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("circleAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const circle = this.#circle = this.svgFactory.createElement("svg:ellipse"); + circle.setAttribute("cx", width / 2); + circle.setAttribute("cy", height / 2); + circle.setAttribute("rx", width / 2 - borderWidth / 2); + circle.setAttribute("ry", height / 2 - borderWidth / 2); + circle.setAttribute("stroke-width", borderWidth || 1); + circle.setAttribute("stroke", "transparent"); + circle.setAttribute("fill", "transparent"); + svg.append(circle); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#circle; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolylineAnnotationElement extends AnnotationElement { + #polyline = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "polylineAnnotation"; + this.svgElementName = "svg:polyline"; + } + render() { + this.container.classList.add(this.containerClassName); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + let points = []; + for (const coordinate of data.vertices) { + const x = coordinate.x - data.rect[0]; + const y = data.rect[3] - coordinate.y; + points.push(x + "," + y); + } + points = points.join(" "); + const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", data.borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + svg.append(polyline); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return this.#polyline; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolygonAnnotationElement extends PolylineAnnotationElement { + constructor(parameters) { + super(parameters); + this.containerClassName = "polygonAnnotation"; + this.svgElementName = "svg:polygon"; + } +} +class CaretAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("caretAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } +} +class InkAnnotationElement extends AnnotationElement { + #polylines = []; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "inkAnnotation"; + this.svgElementName = "svg:polyline"; + this.annotationEditorType = util.AnnotationEditorType.INK; + } + render() { + this.container.classList.add(this.containerClassName); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + for (const inkList of data.inkLists) { + let points = []; + for (const coordinate of inkList) { + const x = coordinate.x - data.rect[0]; + const y = data.rect[3] - coordinate.y; + points.push(`${x},${y}`); + } + points = points.join(" "); + const polyline = this.svgFactory.createElement(this.svgElementName); + this.#polylines.push(polyline); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", data.borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + svg.append(polyline); + } + this.container.append(svg); + return this.container; + } + getElementsToTriggerPopup() { + return this.#polylines; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class HighlightAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("highlightAnnotation"); + return this.container; + } +} +class UnderlineAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("underlineAnnotation"); + return this.container; + } +} +class SquigglyAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("squigglyAnnotation"); + return this.container; + } +} +class StrikeOutAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("strikeoutAnnotation"); + return this.container; + } +} +class StampAnnotationElement extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("stampAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } +} +class FileAttachmentAnnotationElement extends AnnotationElement { + #trigger = null; + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + const { + filename, + content + } = this.data.file; + this.filename = (0,display_utils.getFilenameFromUrl)(filename, true); + this.content = content; + this.linkService.eventBus?.dispatch("fileattachmentannotation", { + source: this, + filename, + content + }); + } + render() { + this.container.classList.add("fileAttachmentAnnotation"); + const { + container, + data + } = this; + let trigger; + if (data.hasAppearance || data.fillAlpha === 0) { + trigger = document.createElement("div"); + } else { + trigger = document.createElement("img"); + trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; + if (data.fillAlpha && data.fillAlpha < 1) { + trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; + } + } + trigger.addEventListener("dblclick", this.#download.bind(this)); + this.#trigger = trigger; + const { + isMac + } = util.FeatureTest.platform; + container.addEventListener("keydown", evt => { + if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { + this.#download(); + } + }); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } else { + trigger.classList.add("popupTriggerArea"); + } + container.append(trigger); + return container; + } + getElementsToTriggerPopup() { + return this.#trigger; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } + #download() { + this.downloadManager?.openOrDownloadData(this.content, this.filename); + } +} +class AnnotationLayer { + #accessibilityManager = null; + #annotationCanvasMap = null; + #editableAnnotations = new Map(); + constructor({ + div, + accessibilityManager, + annotationCanvasMap, + page, + viewport + }) { + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationCanvasMap = annotationCanvasMap; + this.page = page; + this.viewport = viewport; + this.zIndex = 0; + } + #appendElement(element, id) { + const contentElement = element.firstChild || element; + contentElement.id = `${util.AnnotationPrefix}${id}`; + this.div.append(element); + this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); + } + async render(params) { + const { + annotations + } = params; + const layer = this.div; + (0,display_utils.setLayerDimensions)(layer, this.viewport); + const popupToElements = new Map(); + const elementParams = { + data: null, + layer, + linkService: params.linkService, + downloadManager: params.downloadManager, + imageResourcesPath: params.imageResourcesPath || "", + renderForms: params.renderForms !== false, + svgFactory: new display_utils.DOMSVGFactory(), + annotationStorage: params.annotationStorage || new annotation_storage.AnnotationStorage(), + enableScripting: params.enableScripting === true, + hasJSActions: params.hasJSActions, + fieldObjects: params.fieldObjects, + parent: this, + elements: null + }; + for (const data of annotations) { + if (data.noHTML) { + continue; + } + const isPopupAnnotation = data.annotationType === util.AnnotationType.POPUP; + if (!isPopupAnnotation) { + const { + width, + height + } = getRectDims(data.rect); + if (width <= 0 || height <= 0) { + continue; + } + } else { + const elements = popupToElements.get(data.id); + if (!elements) { + continue; + } + elementParams.elements = elements; + } + elementParams.data = data; + const element = AnnotationElementFactory.create(elementParams); + if (!element.isRenderable) { + continue; + } + if (!isPopupAnnotation && data.popupRef) { + const elements = popupToElements.get(data.popupRef); + if (!elements) { + popupToElements.set(data.popupRef, [element]); + } else { + elements.push(element); + } + } + if (element.annotationEditorType > 0) { + this.#editableAnnotations.set(element.data.id, element); + } + const rendered = element.render(); + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + this.#appendElement(rendered, data.id); + } + this.#setAnnotationCanvasMap(); + } + update({ + viewport + }) { + const layer = this.div; + this.viewport = viewport; + (0,display_utils.setLayerDimensions)(layer, { + rotation: viewport.rotation + }); + this.#setAnnotationCanvasMap(); + layer.hidden = false; + } + #setAnnotationCanvasMap() { + if (!this.#annotationCanvasMap) { + return; + } + const layer = this.div; + for (const [id, canvas] of this.#annotationCanvasMap) { + const element = layer.querySelector(`[data-annotation-id="${id}"]`); + if (!element) { + continue; + } + const { + firstChild + } = element; + if (!firstChild) { + element.append(canvas); + } else if (firstChild.nodeName === "CANVAS") { + firstChild.replaceWith(canvas); + } else { + firstChild.before(canvas); + } + } + this.#annotationCanvasMap.clear(); + } + getEditableAnnotations() { + return Array.from(this.#editableAnnotations.values()); + } + getEditableAnnotation(id) { + return this.#editableAnnotations.get(id); + } +} + + +/***/ }), + +/***/ 780: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AnnotationStorage: () => (/* binding */ AnnotationStorage), +/* harmony export */ PrintAnnotationStorage: () => (/* binding */ PrintAnnotationStorage), +/* harmony export */ SerializableEmpty: () => (/* binding */ SerializableEmpty) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(115); +/* harmony import */ var _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(825); + + + +const SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfer: undefined +}); +class AnnotationStorage { + #modified = false; + #storage = new Map(); + constructor() { + this.onSetModified = null; + this.onResetModified = null; + this.onAnnotationEditor = null; + } + getValue(key, defaultValue) { + const value = this.#storage.get(key); + if (value === undefined) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return this.#storage.get(key); + } + remove(key) { + this.#storage.delete(key); + if (this.#storage.size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of this.#storage.values()) { + if (value instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } + } + setValue(key, value) { + const obj = this.#storage.get(key); + let modified = false; + if (obj !== undefined) { + for (const [entry, val] of Object.entries(value)) { + if (obj[entry] !== val) { + modified = true; + obj[entry] = val; + } + } + } else { + modified = true; + this.#storage.set(key, value); + } + if (modified) { + this.#setModified(); + } + if (value instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor && typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); + } + } + has(key) { + return this.#storage.has(key); + } + getAll() { + return this.#storage.size > 0 ? (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#storage) : null; + } + setAll(obj) { + for (const [key, val] of Object.entries(obj)) { + this.setValue(key, val); + } + } + get size() { + return this.#storage.size; + } + #setModified() { + if (!this.#modified) { + this.#modified = true; + if (typeof this.onSetModified === "function") { + this.onSetModified(); + } + } + } + resetModified() { + if (this.#modified) { + this.#modified = false; + if (typeof this.onResetModified === "function") { + this.onResetModified(); + } + } + } + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (this.#storage.size === 0) { + return SerializableEmpty; + } + const map = new Map(), + hash = new _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_2__.MurmurHash3_64(), + transfer = []; + const context = Object.create(null); + let hasBitmap = false; + for (const [key, val] of this.#storage) { + const serialized = val instanceof _editor_editor_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationEditor ? val.serialize(false, context) : val; + if (serialized) { + map.set(key, serialized); + hash.update(`${key}:${JSON.stringify(serialized)}`); + hasBitmap ||= !!serialized.bitmap; + } + } + if (hasBitmap) { + for (const value of map.values()) { + if (value.bitmap) { + transfer.push(value.bitmap); + } + } + } + return map.size > 0 ? { + map, + hash: hash.hexdigest(), + transfer + } : SerializableEmpty; + } +} +class PrintAnnotationStorage extends AnnotationStorage { + #serializable; + constructor(parent) { + super(); + const { + map, + hash, + transfer + } = parent.serializable; + const clone = structuredClone(map, transfer ? { + transfer + } : null); + this.#serializable = { + map: clone, + hash, + transfer + }; + } + get print() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return this.#serializable; + } +} + + +/***/ }), + +/***/ 406: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFDataRangeTransport: () => (/* binding */ PDFDataRangeTransport), +/* harmony export */ PDFWorker: () => (/* binding */ PDFWorker), +/* harmony export */ build: () => (/* binding */ build), +/* harmony export */ getDocument: () => (/* binding */ getDocument), +/* harmony export */ version: () => (/* binding */ version) +/* harmony export */ }); +/* unused harmony exports DefaultCanvasFactory, DefaultCMapReaderFactory, DefaultFilterFactory, DefaultStandardFontDataFactory, LoopbackPort, PDFDocumentLoadingTask, PDFDocumentProxy, PDFPageProxy, PDFWorkerUtil, RenderTask */ +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(780); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); +/* harmony import */ var _font_loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(742); +/* harmony import */ var display_node_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(738); +/* harmony import */ var _canvas_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(250); +/* harmony import */ var _worker_options_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(368); +/* harmony import */ var _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(694); +/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(472); +/* harmony import */ var _optional_content_config_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(890); +/* harmony import */ var _transport_stream_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(92); +/* harmony import */ var display_fetch_stream__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(171); +/* harmony import */ var display_network__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(474); +/* harmony import */ var display_node_stream__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(498); +/* harmony import */ var _xfa_text_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(521); +var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([display_node_utils__WEBPACK_IMPORTED_MODULE_4__, display_node_stream__WEBPACK_IMPORTED_MODULE_13__]); +([display_node_utils__WEBPACK_IMPORTED_MODULE_4__, display_node_stream__WEBPACK_IMPORTED_MODULE_13__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__); + + + + + + + + + + + + + + + +const DEFAULT_RANGE_CHUNK_SIZE = 65536; +const RENDERING_CANCELLED_TIMEOUT = 100; +const DELAYED_CLEANUP_TIMEOUT = 5000; +const DefaultCanvasFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeCanvasFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCanvasFactory; +const DefaultCMapReaderFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeCMapReaderFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCMapReaderFactory; +const DefaultFilterFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeFilterFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMFilterFactory; +const DefaultStandardFontDataFactory = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS ? display_node_utils__WEBPACK_IMPORTED_MODULE_4__.NodeStandardFontDataFactory : _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMStandardFontDataFactory; +function getDocument(src) { + if (typeof src === "string" || src instanceof URL) { + src = { + url: src + }; + } else if ((0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(src)) { + src = { + data: src + }; + } + if (typeof src !== "object") { + throw new Error("Invalid parameter in getDocument, need parameter object."); + } + if (!src.url && !src.data && !src.range) { + throw new Error("Invalid parameter object: need either .data, .range or .url"); + } + const task = new PDFDocumentLoadingTask(); + const { + docId + } = task; + const url = src.url ? getUrlProp(src.url) : null; + const data = src.data ? getDataProp(src.data) : null; + const httpHeaders = src.httpHeaders || null; + const withCredentials = src.withCredentials === true; + const password = src.password ?? null; + const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; + const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; + let worker = src.worker instanceof PDFWorker ? src.worker : null; + const verbosity = src.verbosity; + const docBaseUrl = typeof src.docBaseUrl === "string" && !(0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null; + const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; + const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; + const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; + const ignoreErrors = src.stopAtErrors !== true; + const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; + const isEvalSupported = src.isEvalSupported !== false; + const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS; + const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; + const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS; + const fontExtraProperties = src.fontExtraProperties === true; + const enableXfa = src.enableXfa === true; + const ownerDocument = src.ownerDocument || globalThis.document; + const disableRange = src.disableRange === true; + const disableStream = src.disableStream === true; + const disableAutoFetch = src.disableAutoFetch === true; + const pdfBug = src.pdfBug === true; + const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; + const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && !disableFontFace; + const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(cMapUrl, document.baseURI) && (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(standardFontDataUrl, document.baseURI); + const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ + ownerDocument + }); + const filterFactory = src.filterFactory || new DefaultFilterFactory({ + docId, + ownerDocument + }); + const styleElement = null; + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.setVerbosityLevel)(verbosity); + const transportFactory = { + canvasFactory, + filterFactory + }; + if (!useWorkerFetch) { + transportFactory.cMapReaderFactory = new CMapReaderFactory({ + baseUrl: cMapUrl, + isCompressed: cMapPacked + }); + transportFactory.standardFontDataFactory = new StandardFontDataFactory({ + baseUrl: standardFontDataUrl + }); + } + if (!worker) { + const workerParams = { + verbosity, + port: _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerPort + }; + worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); + task._worker = worker; + } + const fetchDocParams = { + docId, + apiVersion: '4.0.379', + data, + password, + disableAutoFetch, + rangeChunkSize, + length, + docBaseUrl, + enableXfa, + evaluatorOptions: { + maxImageSize, + disableFontFace, + ignoreErrors, + isEvalSupported, + isOffscreenCanvasSupported, + canvasMaxAreaInBytes, + fontExtraProperties, + useSystemFonts, + cMapUrl: useWorkerFetch ? cMapUrl : null, + standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null + } + }; + const transportParams = { + ignoreErrors, + isEvalSupported, + disableFontFace, + fontExtraProperties, + enableXfa, + ownerDocument, + disableAutoFetch, + pdfBug, + styleElement + }; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + const workerIdPromise = _fetchDocument(worker, fetchDocParams); + const networkStreamPromise = new Promise(function (resolve) { + let networkStream; + if (rangeTransport) { + networkStream = new _transport_stream_js__WEBPACK_IMPORTED_MODULE_10__.PDFDataTransportStream({ + length, + initialData: rangeTransport.initialData, + progressiveDone: rangeTransport.progressiveDone, + contentDispositionFilename: rangeTransport.contentDispositionFilename, + disableRange, + disableStream + }, rangeTransport); + } else if (!data) { + const createPDFNetworkStream = params => { + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + return new display_node_stream__WEBPACK_IMPORTED_MODULE_13__.PDFNodeStream(params); + } + return (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isValidFetchUrl)(params.url) ? new display_fetch_stream__WEBPACK_IMPORTED_MODULE_11__.PDFFetchStream(params) : new display_network__WEBPACK_IMPORTED_MODULE_12__.PDFNetworkStream(params); + }; + networkStream = createPDFNetworkStream({ + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream + }); + } + resolve(networkStream); + }); + return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); + task._transport = transport; + messageHandler.send("Ready", null); + }); + }).catch(task._capability.reject); + return task; +} +async function _fetchDocument(worker, source) { + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null); + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + return workerId; +} +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; + } + try { + return new URL(val, window.location).href; + } catch { + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && typeof val === "string") { + return val; + } + } + throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); +} +function getDataProp(val) { + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { + throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); + } + if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { + return val; + } + if (typeof val === "string") { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.stringToBytes)(val); + } + if (typeof val === "object" && !isNaN(val?.length) || (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(val)) { + return new Uint8Array(val); + } + throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); +} +class PDFDocumentLoadingTask { + static #docId = 0; + constructor() { + this._capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._transport = null; + this._worker = null; + this.docId = `d${PDFDocumentLoadingTask.#docId++}`; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + } + get promise() { + return this._capability.promise; + } + async destroy() { + this.destroyed = true; + try { + if (this._worker?.port) { + this._worker._pendingDestroy = true; + } + await this._transport?.destroy(); + } catch (ex) { + if (this._worker?.port) { + delete this._worker._pendingDestroy; + } + throw ex; + } + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; + } + } +} +class PDFDataRangeTransport { + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._progressiveDoneListeners = []; + this._readyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + } + addRangeListener(listener) { + this._rangeListeners.push(listener); + } + addProgressListener(listener) { + this._progressListeners.push(listener); + } + addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + } + addProgressiveDoneListener(listener) { + this._progressiveDoneListeners.push(listener); + } + onDataRange(begin, chunk) { + for (const listener of this._rangeListeners) { + listener(begin, chunk); + } + } + onDataProgress(loaded, total) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressListeners) { + listener(loaded, total); + } + }); + } + onDataProgressiveRead(chunk) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveReadListeners) { + listener(chunk); + } + }); + } + onDataProgressiveDone() { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveDoneListeners) { + listener(); + } + }); + } + transportReady() { + this._readyCapability.resolve(); + } + requestDataRange(begin, end) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); + } + abort() {} +} +class PDFDocumentProxy { + constructor(pdfInfo, transport) { + this._pdfInfo = pdfInfo; + this._transport = transport; + } + get annotationStorage() { + return this._transport.annotationStorage; + } + get filterFactory() { + return this._transport.filterFactory; + } + get numPages() { + return this._pdfInfo.numPages; + } + get fingerprints() { + return this._pdfInfo.fingerprints; + } + get isPureXfa() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); + } + get allXfaHtml() { + return this._transport._htmlForXfa; + } + getPage(pageNumber) { + return this._transport.getPage(pageNumber); + } + getPageIndex(ref) { + return this._transport.getPageIndex(ref); + } + getDestinations() { + return this._transport.getDestinations(); + } + getDestination(id) { + return this._transport.getDestination(id); + } + getPageLabels() { + return this._transport.getPageLabels(); + } + getPageLayout() { + return this._transport.getPageLayout(); + } + getPageMode() { + return this._transport.getPageMode(); + } + getViewerPreferences() { + return this._transport.getViewerPreferences(); + } + getOpenAction() { + return this._transport.getOpenAction(); + } + getAttachments() { + return this._transport.getAttachments(); + } + getJSActions() { + return this._transport.getDocJSActions(); + } + getOutline() { + return this._transport.getOutline(); + } + getOptionalContentConfig() { + return this._transport.getOptionalContentConfig(); + } + getPermissions() { + return this._transport.getPermissions(); + } + getMetadata() { + return this._transport.getMetadata(); + } + getMarkInfo() { + return this._transport.getMarkInfo(); + } + getData() { + return this._transport.getData(); + } + saveDocument() { + return this._transport.saveDocument(); + } + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; + } + cleanup(keepLoadedFonts = false) { + return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); + } + destroy() { + return this.loadingTask.destroy(); + } + get loadingParams() { + return this._transport.loadingParams; + } + get loadingTask() { + return this._transport.loadingTask; + } + getFieldObjects() { + return this._transport.getFieldObjects(); + } + hasJSActions() { + return this._transport.hasJSActions(); + } + getCalculationOrderIds() { + return this._transport.getCalculationOrderIds(); + } +} +class PDFPageProxy { + #delayedCleanupTimeout = null; + #pendingCleanup = false; + constructor(pageIndex, pageInfo, transport, pdfBug = false) { + this._pageIndex = pageIndex; + this._pageInfo = pageInfo; + this._transport = transport; + this._stats = pdfBug ? new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.StatTimer() : null; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this._maybeCleanupAfterRender = false; + this._intentStates = new Map(); + this.destroyed = false; + } + get pageNumber() { + return this._pageIndex + 1; + } + get rotate() { + return this._pageInfo.rotate; + } + get ref() { + return this._pageInfo.ref; + } + get userUnit() { + return this._pageInfo.userUnit; + } + get view() { + return this._pageInfo.view; + } + getViewport({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PageViewport({ + viewBox: this.view, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + getAnnotations({ + intent = "display" + } = {}) { + const intentArgs = this._transport.getRenderingIntent(intent); + return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); + } + getJSActions() { + return this._transport.getPageJSActions(this._pageIndex); + } + get filterFactory() { + return this._transport.filterFactory; + } + get isPureXfa() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); + } + async getXfa() { + return this._transport._htmlForXfa?.children[this._pageIndex] || null; + } + render({ + canvasContext, + viewport, + intent = "display", + annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null + }) { + this._stats?.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); + if (!optionalContentConfigPromise) { + optionalContentConfigPromise = this._transport.getOptionalContentConfig(); + } + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + const intentPrint = !!(intentArgs.renderingIntent & _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT); + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + const complete = error => { + intentState.renderTasks.delete(internalRenderTask); + if (this._maybeCleanupAfterRender || intentPrint) { + this.#pendingCleanup = true; + } + this.#tryCleanup(!intentPrint); + if (error) { + internalRenderTask.capability.reject(error); + this._abortOperatorList({ + intentState, + reason: error instanceof Error ? error : new Error(error) + }); + } else { + internalRenderTask.capability.resolve(); + } + this._stats?.timeEnd("Rendering"); + this._stats?.timeEnd("Overall"); + }; + const internalRenderTask = new InternalRenderTask({ + callback: complete, + params: { + canvasContext, + viewport, + transform, + background + }, + objs: this.objs, + commonObjs: this.commonObjs, + annotationCanvasMap, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: this._transport.canvasFactory, + filterFactory: this._transport.filterFactory, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors + }); + (intentState.renderTasks ||= new Set()).add(internalRenderTask); + const renderTask = internalRenderTask.task; + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { + if (this.destroyed) { + complete(); + return; + } + this._stats?.time("Rendering"); + internalRenderTask.initializeGraphics({ + transparency, + optionalContentConfig + }); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + } + getOperatorList({ + intent = "display", + annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, + printAnnotationStorage = null + } = {}) { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks.delete(opListTask); + } + } + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + let opListTask; + if (!intentState.opListReadCapability) { + opListTask = Object.create(null); + opListTask.operatorListChanged = operatorListChanged; + intentState.opListReadCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + (intentState.renderTasks ||= new Set()).add(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + return intentState.opListReadCapability.promise; + } + streamTextContent({ + includeMarkedContent = false, + disableNormalization = false + } = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + includeMarkedContent: includeMarkedContent === true, + disableNormalization: disableNormalization === true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + size(textContent) { + return textContent.items.length; + } + }); + } + getTextContent(params = {}) { + if (this._transport._htmlForXfa) { + return this.getXfa().then(xfa => { + return _xfa_text_js__WEBPACK_IMPORTED_MODULE_14__.XfaText.textContent(xfa); + }); + } + const readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function ({ + value, + done + }) { + if (done) { + resolve(textContent); + return; + } + Object.assign(textContent.styles, value.styles); + textContent.items.push(...value.items); + pump(); + }, reject); + } + const reader = readableStream.getReader(); + const textContent = { + items: [], + styles: Object.create(null) + }; + pump(); + }); + } + getStructTree() { + return this._transport.getStructTree(this._pageIndex); + } + _destroy() { + this.destroyed = true; + const waitOn = []; + for (const intentState of this._intentStates.values()) { + this._abortOperatorList({ + intentState, + reason: new Error("Page was destroyed."), + force: true + }); + if (intentState.opListReadCapability) { + continue; + } + for (const internalRenderTask of intentState.renderTasks) { + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + } + this.objs.clear(); + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); + return Promise.all(waitOn); + } + cleanup(resetStats = false) { + this.#pendingCleanup = true; + const success = this.#tryCleanup(false); + if (resetStats && success) { + this._stats &&= new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.StatTimer(); + } + return success; + } + #tryCleanup(delayed = false) { + this.#abortDelayedCleanup(); + if (!this.#pendingCleanup || this.destroyed) { + return false; + } + if (delayed) { + this.#delayedCleanupTimeout = setTimeout(() => { + this.#delayedCleanupTimeout = null; + this.#tryCleanup(false); + }, DELAYED_CLEANUP_TIMEOUT); + return false; + } + for (const { + renderTasks, + operatorList + } of this._intentStates.values()) { + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; + } + } + this._intentStates.clear(); + this.objs.clear(); + this.#pendingCleanup = false; + return true; + } + #abortDelayedCleanup() { + if (this.#delayedCleanupTimeout) { + clearTimeout(this.#delayedCleanupTimeout); + this.#delayedCleanupTimeout = null; + } + } + _startRenderPage(transparency, cacheKey) { + const intentState = this._intentStates.get(cacheKey); + if (!intentState) { + return; + } + this._stats?.timeEnd("Page Request"); + intentState.displayReadyCapability?.resolve(transparency); + } + _renderPageChunk(operatorListChunk, intentState) { + for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + this.#tryCleanup(true); + } + } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageSerializable + }) { + const { + map, + transfer + } = annotationStorageSerializable; + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: map + }, transfer); + const reader = readableStream.getReader(); + const intentState = this._intentStates.get(cacheKey); + intentState.streamReader = reader; + const pump = () => { + reader.read().then(({ + value, + done + }) => { + if (done) { + intentState.streamReader = null; + return; + } + if (this._transport.destroyed) { + return; + } + this._renderPageChunk(value, intentState); + pump(); + }, reason => { + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + this.#tryCleanup(true); + } + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + pump(); + } + _abortOperatorList({ + intentState, + reason, + force = false + }) { + if (!intentState.streamReader) { + return; + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + if (!force) { + if (intentState.renderTasks.size > 0) { + return; + } + if (reason instanceof _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException) { + let delay = RENDERING_CANCELLED_TIMEOUT; + if (reason.extraDelay > 0 && reason.extraDelay < 1000) { + delay += reason.extraDelay; + } + intentState.streamReaderCancelTimeout = setTimeout(() => { + intentState.streamReaderCancelTimeout = null; + this._abortOperatorList({ + intentState, + reason, + force: true + }); + }, delay); + return; + } + } + intentState.streamReader.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException(reason.message)).catch(() => {}); + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + for (const [curCacheKey, curIntentState] of this._intentStates) { + if (curIntentState === intentState) { + this._intentStates.delete(curCacheKey); + break; + } + } + this.cleanup(); + } + get stats() { + return this._stats; + } +} +class LoopbackPort { + #listeners = new Set(); + #deferred = Promise.resolve(); + postMessage(obj, transfer) { + const event = { + data: structuredClone(obj, transfer ? { + transfer + } : null) + }; + this.#deferred.then(() => { + for (const listener of this.#listeners) { + listener.call(this, event); + } + }); + } + addEventListener(name, listener) { + this.#listeners.add(listener); + } + removeEventListener(name, listener) { + this.#listeners.delete(listener); + } + terminate() { + this.#listeners.clear(); + } +} +const PDFWorkerUtil = { + isWorkerDisabled: false, + fakeWorkerId: 0 +}; +{ + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + PDFWorkerUtil.isWorkerDisabled = true; + _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs"; + } + PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { + let base; + try { + base = new URL(baseUrl); + if (!base.origin || base.origin === "null") { + return false; + } + } catch { + return false; + } + const other = new URL(otherUrl, base); + return base.origin === other.origin; + }; + PDFWorkerUtil.createCDNWrapper = function (url) { + const wrapper = `await import("${url}");`; + return URL.createObjectURL(new Blob([wrapper], { + type: "text/javascript" + })); + }; +} +class PDFWorker { + static #workerPorts; + constructor({ + name = null, + port = null, + verbosity = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.getVerbosityLevel)() + } = {}) { + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + this._readyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + if (PDFWorker.#workerPorts?.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + } + (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); + this._initializeFromPort(port); + return; + } + this._initialize(); + } + get promise() { + return this._readyCapability.promise; + } + get port() { + return this._port; + } + get messageHandler() { + return this._messageHandler; + } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler("main", "worker", port); + this._messageHandler.on("ready", function () {}); + this._readyCapability.resolve(); + this._messageHandler.send("configure", { + verbosity: this.verbosity + }); + } + _initialize() { + if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker.#mainThreadWorkerMessageHandler) { + let { + workerSrc + } = PDFWorker; + try { + if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { + workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc, { + type: "module" + }); + const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler("main", "worker", worker); + const terminateEarly = () => { + worker.removeEventListener("error", onWorkerError); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); + } + }; + const onWorkerError = () => { + if (!this._webWorker) { + terminateEarly(); + } + }; + worker.addEventListener("error", onWorkerError); + messageHandler.on("test", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + if (data) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + } else { + this._setupFakeWorker(); + messageHandler.destroy(); + worker.terminate(); + } + }); + messageHandler.on("ready", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.info)("The worker has been disabled."); + } + } + this._setupFakeWorker(); + } + _setupFakeWorker() { + if (!PDFWorkerUtil.isWorkerDisabled) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Setting up fake worker."); + PDFWorkerUtil.isWorkerDisabled = true; + } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this._port = port; + const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; + const workerHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + const messageHandler = new _shared_message_handler_js__WEBPACK_IMPORTED_MODULE_7__.MessageHandler(id, id + "_worker", port); + this._messageHandler = messageHandler; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + }).catch(reason => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + PDFWorker.#workerPorts?.delete(this._port); + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + static fromPort(params) { + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + const cachedPort = this.#workerPorts?.get(params.port); + if (cachedPort) { + if (cachedPort._pendingDestroy) { + throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); + } + return cachedPort; + } + return new PDFWorker(params); + } + static get workerSrc() { + if (_worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc) { + return _worker_options_js__WEBPACK_IMPORTED_MODULE_6__.GlobalWorkerOptions.workerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + static get #mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch { + return null; + } + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + if (this.#mainThreadWorkerMessageHandler) { + return this.#mainThreadWorkerMessageHandler; + } + const worker = await import(/* webpackIgnore: true */ this.workerSrc); + return worker.WorkerMessageHandler; + }; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_setupFakeWorkerGlobal", loader()); + } +} +class WorkerTransport { + #methodPromises = new Map(); + #pageCache = new Map(); + #pagePromises = new Map(); + #passwordCapability = null; + constructor(messageHandler, loadingTask, networkStream, params, factory) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new _font_loader_js__WEBPACK_IMPORTED_MODULE_3__.FontLoader({ + ownerDocument: params.ownerDocument, + styleElement: params.styleElement + }); + this._params = params; + this.canvasFactory = factory.canvasFactory; + this.filterFactory = factory.filterFactory; + this.cMapReaderFactory = factory.cMapReaderFactory; + this.standardFontDataFactory = factory.standardFontDataFactory; + this.destroyed = false; + this.destroyCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.downloadInfoCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.setupMessageHandler(); + } + #cacheSimpleMethod(name, data = null) { + const cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + this.#methodPromises.set(name, promise); + return promise; + } + get annotationStorage() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "annotationStorage", new _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.AnnotationStorage()); + } + getRenderingIntent(intent, annotationMode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) { + let renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.DISPLAY; + let annotationStorageSerializable = _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.SerializableEmpty; + switch (intent) { + case "any": + renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANY; + break; + case "display": + break; + case "print": + renderingIntent = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT; + break; + default: + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getRenderingIntent - invalid intent: ${intent}`); + } + switch (annotationMode) { + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.DISABLE: + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_DISABLE; + break; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE: + break; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE_FORMS: + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_FORMS; + break; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode.ENABLE_STORAGE: + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.ANNOTATIONS_STORAGE; + const annotationStorage = renderingIntent & _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage_js__WEBPACK_IMPORTED_MODULE_1__.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + annotationStorageSerializable = annotationStorage.serializable; + break; + default: + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + } + if (isOpList) { + renderingIntent += _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.RenderingIntentFlag.OPLIST; + } + return { + renderingIntent, + cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, + annotationStorageSerializable + }; + } + destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); + const waitOn = []; + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); + } + this.#pageCache.clear(); + this.#pagePromises.clear(); + if (this.hasOwnProperty("annotationStorage")) { + this.annotationStorage.resetModified(); + } + const terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + this.commonObjs.clear(); + this.fontLoader.clear(); + this.#methodPromises.clear(); + this.filterFactory.destroy(); + this._networkStream?.cancelAllRequests(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("Worker was terminated.")); + if (this.messageHandler) { + this.messageHandler.destroy(); + this.messageHandler = null; + } + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + } + setupMessageHandler() { + const { + messageHandler, + loadingTask + } = this; + messageHandler.on("GetReader", (data, sink) => { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); + this._fullReader = this._networkStream.getFullReader(); + this._fullReader.onProgress = evt => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + sink.onPull = () => { + this._fullReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + this._fullReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", data => { + const headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + const fullReader = this._fullReader; + fullReader.headersReady.then(() => { + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (this._lastProgress) { + loadingTask.onProgress?.(this._lastProgress); + } + fullReader.onProgress = evt => { + loadingTask.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + }; + } + headersCapability.resolve({ + isStreamingSupported: fullReader.isStreamingSupported, + isRangeSupported: fullReader.isRangeSupported, + contentLength: fullReader.contentLength + }); + }, headersCapability.reject); + return headersCapability.promise; + }); + messageHandler.on("GetRangeReader", (data, sink) => { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + if (!rangeReader) { + sink.close(); + return; + } + sink.onPull = () => { + rangeReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + }; + sink.onCancel = reason => { + rangeReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", ({ + pdfInfo + }) => { + this._numPages = pdfInfo.numPages; + this._htmlForXfa = pdfInfo.htmlForXfa; + delete pdfInfo.htmlForXfa; + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); + }); + messageHandler.on("DocException", function (ex) { + let reason; + switch (ex.name) { + case "PasswordException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(ex.message, ex.code); + break; + case "InvalidPDFException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.InvalidPDFException(ex.message); + break; + case "MissingPDFException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(ex.message); + break; + case "UnexpectedResponseException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException(ex.message, ex.status); + break; + case "UnknownErrorException": + reason = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(ex.message, ex.details); + break; + default: + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("DocException - expected a valid Error."); + } + loadingTask._capability.reject(reason); + }); + messageHandler.on("PasswordRequest", exception => { + this.#passwordCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + if (loadingTask.onPassword) { + const updatePassword = password => { + if (password instanceof Error) { + this.#passwordCapability.reject(password); + } else { + this.#passwordCapability.resolve({ + password + }); + } + }; + try { + loadingTask.onPassword(updatePassword, exception.code); + } catch (ex) { + this.#passwordCapability.reject(ex); + } + } else { + this.#passwordCapability.reject(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(exception.message, exception.code)); + } + return this.#passwordCapability.promise; + }); + messageHandler.on("DataLoaded", data => { + loadingTask.onProgress?.({ + loaded: data.length, + total: data.length + }); + this.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", data => { + if (this.destroyed) { + return; + } + const page = this.#pageCache.get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + if (this.destroyed) { + return null; + } + if (this.commonObjs.has(id)) { + return null; + } + switch (type) { + case "Font": + const params = this._params; + if ("error" in exportedData) { + const exportedError = exportedData.error; + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Error during font loading: ${exportedError}`); + this.commonObjs.resolve(id, exportedError); + break; + } + const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; + const font = new _font_loader_js__WEBPACK_IMPORTED_MODULE_3__.FontFaceObject(exportedData, { + isEvalSupported: params.isEvalSupported, + disableFontFace: params.disableFontFace, + ignoreErrors: params.ignoreErrors, + inspectFont + }); + this.fontLoader.bind(font).catch(reason => { + return messageHandler.sendWithPromise("FontFallback", { + id + }); + }).finally(() => { + if (!params.fontExtraProperties && font.data) { + font.data = null; + } + this.commonObjs.resolve(id, font); + }); + break; + case "CopyLocalImage": + const { + imageRef + } = exportedData; + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(imageRef, "The imageRef must be defined."); + for (const pageProxy of this.#pageCache.values()) { + for (const [, data] of pageProxy.objs) { + if (data.ref !== imageRef) { + continue; + } + if (!data.dataLen) { + return null; + } + this.commonObjs.resolve(id, structuredClone(data)); + return data.dataLen; + } + } + break; + case "FontPath": + case "Image": + case "Pattern": + this.commonObjs.resolve(id, exportedData); + break; + default: + throw new Error(`Got unknown common object type ${type}`); + } + return null; + }); + messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { + if (this.destroyed) { + return; + } + const pageProxy = this.#pageCache.get(pageIndex); + if (pageProxy.objs.has(id)) { + return; + } + if (pageProxy._intentStates.size === 0) { + imageData?.bitmap?.close(); + return; + } + switch (type) { + case "Image": + pageProxy.objs.resolve(id, imageData); + if (imageData?.dataLen > _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MAX_IMAGE_SIZE_TO_CACHE) { + pageProxy._maybeCleanupAfterRender = true; + } + break; + case "Pattern": + pageProxy.objs.resolve(id, imageData); + break; + default: + throw new Error(`Got unknown object type ${type}`); + } + }); + messageHandler.on("DocProgress", data => { + if (this.destroyed) { + return; + } + loadingTask.onProgress?.({ + loaded: data.loaded, + total: data.total + }); + }); + messageHandler.on("FetchBuiltInCMap", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.cMapReaderFactory) { + return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.cMapReaderFactory.fetch(data); + }); + messageHandler.on("FetchStandardFontData", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.standardFontDataFactory) { + return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.standardFontDataFactory.fetch(data); + }); + } + getData() { + return this.messageHandler.sendWithPromise("GetData", null); + } + saveDocument() { + if (this.annotationStorage.size <= 0) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); + } + const { + map, + transfer + } = this.annotationStorage.serializable; + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: map, + filename: this._fullReader?.filename ?? null + }, transfer).finally(() => { + this.annotationStorage.resetModified(); + }); + } + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request.")); + } + const pageIndex = pageNumber - 1, + cachedPromise = this.#pagePromises.get(pageIndex); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex + }).then(pageInfo => { + if (this.destroyed) { + throw new Error("Transport destroyed"); + } + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); + return page; + }); + this.#pagePromises.set(pageIndex, promise); + return promise; + } + getPageIndex(ref) { + if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { + return Promise.reject(new Error("Invalid pageIndex request.")); + } + return this.messageHandler.sendWithPromise("GetPageIndex", { + num: ref.num, + gen: ref.gen + }); + } + getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex, + intent + }); + } + getFieldObjects() { + return this.#cacheSimpleMethod("GetFieldObjects"); + } + hasJSActions() { + return this.#cacheSimpleMethod("HasJSActions"); + } + getCalculationOrderIds() { + return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); + } + getDestinations() { + return this.messageHandler.sendWithPromise("GetDestinations", null); + } + getDestination(id) { + if (typeof id !== "string") { + return Promise.reject(new Error("Invalid destination request.")); + } + return this.messageHandler.sendWithPromise("GetDestination", { + id + }); + } + getPageLabels() { + return this.messageHandler.sendWithPromise("GetPageLabels", null); + } + getPageLayout() { + return this.messageHandler.sendWithPromise("GetPageLayout", null); + } + getPageMode() { + return this.messageHandler.sendWithPromise("GetPageMode", null); + } + getViewerPreferences() { + return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + } + getOpenAction() { + return this.messageHandler.sendWithPromise("GetOpenAction", null); + } + getAttachments() { + return this.messageHandler.sendWithPromise("GetAttachments", null); + } + getDocJSActions() { + return this.#cacheSimpleMethod("GetDocJSActions"); + } + getPageJSActions(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageJSActions", { + pageIndex + }); + } + getStructTree(pageIndex) { + return this.messageHandler.sendWithPromise("GetStructTree", { + pageIndex + }); + } + getOutline() { + return this.messageHandler.sendWithPromise("GetOutline", null); + } + getOptionalContentConfig() { + return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { + return new _optional_content_config_js__WEBPACK_IMPORTED_MODULE_9__.OptionalContentConfig(results); + }); + } + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); + } + getMetadata() { + const name = "GetMetadata", + cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, null).then(results => { + return { + info: results[0], + metadata: results[1] ? new _metadata_js__WEBPACK_IMPORTED_MODULE_8__.Metadata(results[1]) : null, + contentDispositionFilename: this._fullReader?.filename ?? null, + contentLength: this._fullReader?.contentLength ?? null + }; + }); + this.#methodPromises.set(name, promise); + return promise; + } + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + async startCleanup(keepLoadedFonts = false) { + if (this.destroyed) { + return; + } + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of this.#pageCache.values()) { + const cleanupSuccessful = page.cleanup(); + if (!cleanupSuccessful) { + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); + } + } + this.commonObjs.clear(); + if (!keepLoadedFonts) { + this.fontLoader.clear(); + } + this.#methodPromises.clear(); + this.filterFactory.destroy(true); + } + get loadingParams() { + const { + disableAutoFetch, + enableXfa + } = this._params; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "loadingParams", { + disableAutoFetch, + enableXfa + }); + } +} +class PDFObjects { + #objs = Object.create(null); + #ensureObj(objId) { + return this.#objs[objId] ||= { + capability: new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(), + data: null + }; + } + get(objId, callback = null) { + if (callback) { + const obj = this.#ensureObj(objId); + obj.capability.promise.then(() => callback(obj.data)); + return null; + } + const obj = this.#objs[objId]; + if (!obj?.capability.settled) { + throw new Error(`Requesting object that isn't resolved yet ${objId}.`); + } + return obj.data; + } + has(objId) { + const obj = this.#objs[objId]; + return obj?.capability.settled ?? false; + } + resolve(objId, data = null) { + const obj = this.#ensureObj(objId); + obj.data = data; + obj.capability.resolve(); + } + clear() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + data?.bitmap?.close(); + } + this.#objs = Object.create(null); + } + *[Symbol.iterator]() { + for (const objId in this.#objs) { + const { + capability, + data + } = this.#objs[objId]; + if (!capability.settled) { + continue; + } + yield [objId, data]; + } + } +} +class RenderTask { + #internalRenderTask = null; + constructor(internalRenderTask) { + this.#internalRenderTask = internalRenderTask; + this.onContinue = null; + } + get promise() { + return this.#internalRenderTask.capability.promise; + } + cancel(extraDelay = 0) { + this.#internalRenderTask.cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = this.#internalRenderTask.operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = this.#internalRenderTask; + return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; + } +} +class InternalRenderTask { + static #canvasInUse = new WeakSet(); + constructor({ + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + filterFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = null + }) { + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; + } + get completed() { + return this.capability.promise.catch(function () {}); + } + initializeGraphics({ + transparency = false, + optionalContentConfig + }) { + if (this.cancelled) { + return; + } + if (this._canvas) { + if (InternalRenderTask.#canvasInUse.has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); + } + InternalRenderTask.#canvasInUse.add(this._canvas); + } + if (this._pdfBug && globalThis.StepperManager?.enabled) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + const { + canvasContext, + viewport, + transform, + background + } = this.params; + this.gfx = new _canvas_js__WEBPACK_IMPORTED_MODULE_5__.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig + }, this.annotationCanvasMap, this.pageColors); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + this.graphicsReadyCallback?.(); + } + cancel(error = null, extraDelay = 0) { + this.running = false; + this.cancelled = true; + this.gfx?.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(error || new _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); + } + operatorListChanged() { + if (!this.graphicsReady) { + this.graphicsReadyCallback ||= this._continueBound; + return; + } + this.stepper?.updateOperatorList(this.operatorList); + if (this.running) { + return; + } + this._continue(); + } + _continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + } + _scheduleNext() { + if (this._useRequestAnimationFrame) { + window.requestAnimationFrame(() => { + this._nextBound().catch(this._cancelBound); + }); + } else { + Promise.resolve().then(this._nextBound).catch(this._cancelBound); + } + } + async _next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(); + } + } + } +} +const version = '4.0.379'; +const build = '9e14d04fd'; + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }); + +/***/ }), + +/***/ 822: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseCMapReaderFactory: () => (/* binding */ BaseCMapReaderFactory), +/* harmony export */ BaseCanvasFactory: () => (/* binding */ BaseCanvasFactory), +/* harmony export */ BaseFilterFactory: () => (/* binding */ BaseFilterFactory), +/* harmony export */ BaseSVGFactory: () => (/* binding */ BaseSVGFactory), +/* harmony export */ BaseStandardFontDataFactory: () => (/* binding */ BaseStandardFontDataFactory) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +class BaseFilterFactory { + constructor() { + if (this.constructor === BaseFilterFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseFilterFactory."); + } + } + addFilter(maps) { + return "none"; + } + addHCMFilter(fgColor, bgColor) { + return "none"; + } + addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { + return "none"; + } + destroy(keepHCM = false) {} +} +class BaseCanvasFactory { + constructor() { + if (this.constructor === BaseCanvasFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseCanvasFactory."); + } + } + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + const canvas = this._createCanvas(width, height); + return { + canvas, + context: canvas.getContext("2d") + }; + } + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; + } + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; + } + _createCanvas(width, height) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_createCanvas` called."); + } +} +class BaseCMapReaderFactory { + constructor({ + baseUrl = null, + isCompressed = true + }) { + if (this.constructor === BaseCMapReaderFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseCMapReaderFactory."); + } + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; + } + async fetch({ + name + }) { + if (!this.baseUrl) { + throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); + } + if (!name) { + throw new Error("CMap name must be specified."); + } + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + const compressionType = this.isCompressed ? _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType.BINARY : _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType.NONE; + return this._fetchData(url, compressionType).catch(reason => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + }); + } + _fetchData(url, compressionType) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_fetchData` called."); + } +} +class BaseStandardFontDataFactory { + constructor({ + baseUrl = null + }) { + if (this.constructor === BaseStandardFontDataFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseStandardFontDataFactory."); + } + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + if (!this.baseUrl) { + throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); + } + if (!filename) { + throw new Error("Font filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetchData(url).catch(reason => { + throw new Error(`Unable to load font data at: ${url}`); + }); + } + _fetchData(url) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_fetchData` called."); + } +} +class BaseSVGFactory { + constructor() { + if (this.constructor === BaseSVGFactory) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Cannot initialize BaseSVGFactory."); + } + } + create(width, height, skipDimensions = false) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); + } + const svg = this._createSVG("svg:svg"); + svg.setAttribute("version", "1.1"); + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + } + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); + } + return this._createSVG(type); + } + _createSVG(type) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Abstract method `_createSVG` called."); + } +} + + +/***/ }), + +/***/ 250: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + CanvasGraphics: () => (/* binding */ CanvasGraphics) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/pattern_helper.js + + +const PathType = { + FILL: "Fill", + STROKE: "Stroke", + SHADING: "Shading" +}; +function applyBoundingBox(ctx, bbox) { + if (!bbox) { + return; + } + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + const region = new Path2D(); + region.rect(bbox[0], bbox[1], width, height); + ctx.clip(region); +} +class BaseShadingPattern { + constructor() { + if (this.constructor === BaseShadingPattern) { + (0,util.unreachable)("Cannot initialize BaseShadingPattern."); + } + } + getPattern() { + (0,util.unreachable)("Abstract method `getPattern` called."); + } +} +class RadialAxialShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._type = IR[1]; + this._bbox = IR[2]; + this._colorStops = IR[3]; + this._p0 = IR[4]; + this._p1 = IR[5]; + this._r0 = IR[6]; + this._r1 = IR[7]; + this.matrix = null; + } + _createGradient(ctx) { + let grad; + if (this._type === "axial") { + grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); + } else if (this._type === "radial") { + grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); + } + for (const colorStop of this._colorStops) { + grad.addColorStop(colorStop[0], colorStop[1]); + } + return grad; + } + getPattern(ctx, owner, inverse, pathType) { + let pattern; + if (pathType === PathType.STROKE || pathType === PathType.FILL) { + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0,display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0]; + const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; + const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); + const tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.beginPath(); + tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); + inverse = util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + tmpCtx.transform(...owner.baseTransform); + if (this.matrix) { + tmpCtx.transform(...this.matrix); + } + applyBoundingBox(tmpCtx, this._bbox); + tmpCtx.fillStyle = this._createGradient(tmpCtx); + tmpCtx.fill(); + pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); + const domMatrix = new DOMMatrix(inverse); + pattern.setTransform(domMatrix); + } else { + applyBoundingBox(ctx, this._bbox); + pattern = this._createGradient(ctx); + } + return pattern; + } +} +function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + const coords = context.coords, + colors = context.colors; + const bytes = data.data, + rowSize = data.width * 4; + let tmp; + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; + p2 = p3; + p3 = tmp; + tmp = c2; + c2 = c3; + c3 = tmp; + } + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + const x1 = (coords[p1] + context.offsetX) * context.scaleX; + const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + const x2 = (coords[p2] + context.offsetX) * context.scaleX; + const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + const x3 = (coords[p3] + context.offsetX) * context.scaleX; + const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + if (y1 >= y3) { + return; + } + const c1r = colors[c1], + c1g = colors[c1 + 1], + c1b = colors[c1 + 2]; + const c2r = colors[c2], + c2g = colors[c2 + 1], + c2b = colors[c2 + 2]; + const c3r = colors[c3], + c3g = colors[c3 + 1], + c3b = colors[c3 + 2]; + const minY = Math.round(y1), + maxY = Math.round(y3); + let xa, car, cag, cab; + let xb, cbr, cbg, cbb; + for (let y = minY; y <= maxY; y++) { + if (y < y2) { + const k = y < y1 ? 0 : (y1 - y) / (y1 - y2); + xa = x1 - (x1 - x2) * k; + car = c1r - (c1r - c2r) * k; + cag = c1g - (c1g - c2g) * k; + cab = c1b - (c1b - c2b) * k; + } else { + let k; + if (y > y3) { + k = 1; + } else if (y2 === y3) { + k = 0; + } else { + k = (y2 - y) / (y2 - y3); + } + xa = x2 - (x2 - x3) * k; + car = c2r - (c2r - c3r) * k; + cag = c2g - (c2g - c3g) * k; + cab = c2b - (c2b - c3b) * k; + } + let k; + if (y < y1) { + k = 0; + } else if (y > y3) { + k = 1; + } else { + k = (y1 - y) / (y1 - y3); + } + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + const x1_ = Math.round(Math.min(xa, xb)); + const x2_ = Math.round(Math.max(xa, xb)); + let j = rowSize * y + x1_ * 4; + for (let x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + if (k < 0) { + k = 0; + } else if (k > 1) { + k = 1; + } + bytes[j++] = car - (car - cbr) * k | 0; + bytes[j++] = cag - (cag - cbg) * k | 0; + bytes[j++] = cab - (cab - cbb) * k | 0; + bytes[j++] = 255; + } + } +} +function drawFigure(data, figure, context) { + const ps = figure.coords; + const cs = figure.colors; + let i, ii; + switch (figure.type) { + case "lattice": + const verticesPerRow = figure.verticesPerRow; + const rows = Math.floor(ps.length / verticesPerRow) - 1; + const cols = verticesPerRow - 1; + for (i = 0; i < rows; i++) { + let q = i * verticesPerRow; + for (let j = 0; j < cols; j++, q++) { + drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + break; + case "triangles": + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); + } + break; + default: + throw new Error("illegal figure"); + } +} +class MeshShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._coords = IR[2]; + this._colors = IR[3]; + this._figures = IR[4]; + this._bounds = IR[5]; + this._bbox = IR[7]; + this._background = IR[8]; + this.matrix = null; + } + _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { + const EXPECTED_SCALE = 1.1; + const MAX_PATTERN_SIZE = 3000; + const BORDER_SIZE = 2; + const offsetX = Math.floor(this._bounds[0]); + const offsetY = Math.floor(this._bounds[1]); + const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; + const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; + const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const scaleX = boundsWidth / width; + const scaleY = boundsHeight / height; + const context = { + coords: this._coords, + colors: this._colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + const paddedWidth = width + BORDER_SIZE * 2; + const paddedHeight = height + BORDER_SIZE * 2; + const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); + const tmpCtx = tmpCanvas.context; + const data = tmpCtx.createImageData(width, height); + if (backgroundColor) { + const bytes = data.data; + for (let i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + for (const figure of this._figures) { + drawFigure(data, figure, context); + } + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + const canvas = tmpCanvas.canvas; + return { + canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX, + scaleY + }; + } + getPattern(ctx, owner, inverse, pathType) { + applyBoundingBox(ctx, this._bbox); + let scale; + if (pathType === PathType.SHADING) { + scale = util.Util.singularValueDecompose2dScale((0,display_utils.getCurrentTransform)(ctx)); + } else { + scale = util.Util.singularValueDecompose2dScale(owner.baseTransform); + if (this.matrix) { + const matrixScale = util.Util.singularValueDecompose2dScale(this.matrix); + scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; + } + } + const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + if (pathType !== PathType.SHADING) { + ctx.setTransform(...owner.baseTransform); + if (this.matrix) { + ctx.transform(...this.matrix); + } + } + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + } +} +class DummyShadingPattern extends BaseShadingPattern { + getPattern() { + return "hotpink"; + } +} +function getShadingPattern(IR) { + switch (IR[0]) { + case "RadialAxial": + return new RadialAxialShadingPattern(IR); + case "Mesh": + return new MeshShadingPattern(IR); + case "Dummy": + return new DummyShadingPattern(); + } + throw new Error(`Unknown IR type: ${IR[0]}`); +} +const PaintType = { + COLORED: 1, + UNCOLORED: 2 +}; +class TilingPattern { + static MAX_PATTERN_SIZE = 3000; + constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { + this.operatorList = IR[2]; + this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.color = color; + this.ctx = ctx; + this.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + } + createPatternCanvas(owner) { + const operatorList = this.operatorList; + const bbox = this.bbox; + const xstep = this.xstep; + const ystep = this.ystep; + const paintType = this.paintType; + const tilingType = this.tilingType; + const color = this.color; + const canvasGraphicsFactory = this.canvasGraphicsFactory; + (0,util.info)("TilingType: " + tilingType); + const x0 = bbox[0], + y0 = bbox[1], + x1 = bbox[2], + y1 = bbox[3]; + const matrixScale = util.Util.singularValueDecompose2dScale(this.matrix); + const curMatrixScale = util.Util.singularValueDecompose2dScale(this.baseTransform); + const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; + const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); + const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); + const tmpCtx = tmpCanvas.context; + const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); + graphics.groupLevel = owner.groupLevel; + this.setFillAndStrokeStyleToContext(graphics, paintType, color); + let adjustedX0 = x0; + let adjustedY0 = y0; + let adjustedX1 = x1; + let adjustedY1 = y1; + if (x0 < 0) { + adjustedX0 = 0; + adjustedX1 += Math.abs(x0); + } + if (y0 < 0) { + adjustedY0 = 0; + adjustedY1 += Math.abs(y0); + } + tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); + graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); + tmpCtx.save(); + this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); + graphics.baseTransform = (0,display_utils.getCurrentTransform)(graphics.ctx); + graphics.executeOperatorList(operatorList); + graphics.endDrawing(); + return { + canvas: tmpCanvas.canvas, + scaleX: dimx.scale, + scaleY: dimy.scale, + offsetX: adjustedX0, + offsetY: adjustedY0 + }; + } + getSizeAndScale(step, realOutputSize, scale) { + step = Math.abs(step); + const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); + let size = Math.ceil(step * scale); + if (size >= maxSize) { + size = maxSize; + } else { + scale = size / step; + } + return { + scale, + size + }; + } + clipBbox(graphics, x0, y0, x1, y1) { + const bboxWidth = x1 - x0; + const bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.current.updateRectMinMax((0,display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]); + graphics.clip(); + graphics.endPath(); + } + setFillAndStrokeStyleToContext(graphics, paintType, color) { + const context = graphics.ctx, + current = graphics.current; + switch (paintType) { + case PaintType.COLORED: + const ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + current.fillColor = ctx.fillStyle; + current.strokeColor = ctx.strokeStyle; + break; + case PaintType.UNCOLORED: + const cssColor = util.Util.makeHexColor(color[0], color[1], color[2]); + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + current.fillColor = cssColor; + current.strokeColor = cssColor; + break; + default: + throw new util.FormatError(`Unsupported paint type: ${paintType}`); + } + } + getPattern(ctx, owner, inverse, pathType) { + let matrix = inverse; + if (pathType !== PathType.SHADING) { + matrix = util.Util.transform(matrix, owner.baseTransform); + if (this.matrix) { + matrix = util.Util.transform(matrix, this.matrix); + } + } + const temporaryPatternCanvas = this.createPatternCanvas(owner); + let domMatrix = new DOMMatrix(matrix); + domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); + const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); + pattern.setTransform(domMatrix); + return pattern; + } +} + +;// CONCATENATED MODULE: ./src/shared/image_utils.js + +function convertToRGBA(params) { + switch (params.kind) { + case ImageKind.GRAYSCALE_1BPP: + return convertBlackAndWhiteToRGBA(params); + case ImageKind.RGB_24BPP: + return convertRGBToRGBA(params); + } + return null; +} +function convertBlackAndWhiteToRGBA({ + src, + srcPos = 0, + dest, + width, + height, + nonBlackColor = 0xffffffff, + inverseDecode = false +}) { + const black = util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + let destPos = 0; + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + } + if (widthRemainder === 0) { + continue; + } + const elem = srcPos < srcLength ? src[srcPos++] : 255; + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + return { + srcPos, + destPos + }; +} +function convertRGBToRGBA({ + src, + srcPos = 0, + dest, + destPos = 0, + width, + height +}) { + let i = 0; + const len32 = src.length >> 2; + const src32 = new Uint32Array(src.buffer, srcPos, len32); + if (FeatureTest.isLittleEndian) { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff000000; + dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; + dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; + dest[destPos + 3] = s3 >>> 8 | 0xff000000; + } + for (let j = i * 4, jj = src.length; j < jj; j += 3) { + dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; + } + } else { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff; + dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; + dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; + dest[destPos + 3] = s3 << 8 | 0xff; + } + for (let j = i * 4, jj = src.length; j < jj; j += 3) { + dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; + } + } + return { + srcPos, + destPos + }; +} +function grayToRGBA(src, dest) { + if (FeatureTest.isLittleEndian) { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x10101 | 0xff000000; + } + } else { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x1010100 | 0x000000ff; + } + } +} + +;// CONCATENATED MODULE: ./src/display/canvas.js + + + + +const MIN_FONT_SIZE = 16; +const MAX_FONT_SIZE = 100; +const MAX_GROUP_SIZE = 4096; +const EXECUTION_TIME = 15; +const EXECUTION_STEPS = 10; +const MAX_SIZE_TO_COMPILE = 1000; +const FULL_CHUNK_HEIGHT = 16; +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); + } + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + }; + ctx.save = function ctxSave() { + destCtx.save(); + this.__originalSave(); + }; + ctx.restore = function ctxRestore() { + destCtx.restore(); + this.__originalRestore(); + }; + ctx.translate = function ctxTranslate(x, y) { + destCtx.translate(x, y); + this.__originalTranslate(x, y); + }; + ctx.scale = function ctxScale(x, y) { + destCtx.scale(x, y); + this.__originalScale(x, y); + }; + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + destCtx.transform(a, b, c, d, e, f); + this.__originalTransform(a, b, c, d, e, f); + }; + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + destCtx.setTransform(a, b, c, d, e, f); + this.__originalSetTransform(a, b, c, d, e, f); + }; + ctx.resetTransform = function ctxResetTransform() { + destCtx.resetTransform(); + this.__originalResetTransform(); + }; + ctx.rotate = function ctxRotate(angle) { + destCtx.rotate(angle); + this.__originalRotate(angle); + }; + ctx.clip = function ctxRotate(rule) { + destCtx.clip(rule); + this.__originalClip(rule); + }; + ctx.moveTo = function (x, y) { + destCtx.moveTo(x, y); + this.__originalMoveTo(x, y); + }; + ctx.lineTo = function (x, y) { + destCtx.lineTo(x, y); + this.__originalLineTo(x, y); + }; + ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + }; + ctx.rect = function (x, y, width, height) { + destCtx.rect(x, y, width, height); + this.__originalRect(x, y, width, height); + }; + ctx.closePath = function () { + destCtx.closePath(); + this.__originalClosePath(); + }; + ctx.beginPath = function () { + destCtx.beginPath(); + this.__originalBeginPath(); + }; +} +class CachedCanvases { + constructor(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = Object.create(null); + } + getCanvas(id, width, height) { + let canvasEntry; + if (this.cache[id] !== undefined) { + canvasEntry = this.cache[id]; + this.canvasFactory.reset(canvasEntry, width, height); + } else { + canvasEntry = this.canvasFactory.create(width, height); + this.cache[id] = canvasEntry; + } + return canvasEntry; + } + delete(id) { + delete this.cache[id]; + } + clear() { + for (const id in this.cache) { + const canvasEntry = this.cache[id]; + this.canvasFactory.destroy(canvasEntry); + delete this.cache[id]; + } + } +} +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = (0,display_utils.getCurrentTransform)(ctx); + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; + } + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; + } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +} +function compileType3Glyph(imgData) { + const { + width, + height + } = imgData; + if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { + return null; + } + const POINT_TO_PROCESS_LIMIT = 1000; + const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + const width1 = width + 1; + let points = new Uint8Array(width1 * (height + 1)); + let i, j, j0; + const lineSize = width + 7 & ~7; + let data = new Uint8Array(lineSize * height), + pos = 0; + for (const elem of imgData.data) { + let mask = 128; + while (mask > 0) { + data[pos++] = elem & mask ? 0 : 255; + mask >>= 1; + } + } + let count = 0; + pos = 0; + if (data[pos] !== 0) { + points[0] = 1; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + } + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; + } + let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + pos++; + } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + } + pos = lineSize * (height - 1); + j0 = i * width1; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); + const path = new Path2D(); + for (i = 0; count && i <= height; i++) { + let p = i * width1; + const end = p + width; + while (p < end && !points[p]) { + p++; + } + if (p === end) { + continue; + } + path.moveTo(p % width1, i); + const p0 = p; + let type = points[p]; + do { + const step = steps[type]; + do { + p += step; + } while (!points[p]); + const pp = points[p]; + if (pp !== 5 && pp !== 10) { + type = pp; + points[p] = 0; + } else { + type = pp & 0x33 * type >> 4; + points[p] &= type >> 2 | type << 2; + } + path.lineTo(p % width1, p / width1 | 0); + if (!points[p]) { + --count; + } + } while (p0 !== p); + --i; + } + data = null; + points = null; + const drawOutline = function (c) { + c.save(); + c.scale(1 / width, -1 / height); + c.translate(0, -height); + c.fill(path); + c.beginPath(); + c.restore(); + }; + return drawOutline; +} +class CanvasExtraState { + constructor(width, height) { + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = util.IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = util.FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = util.TextRenderingMode.FILL; + this.textRise = 0; + this.fillColor = "#000000"; + this.strokeColor = "#000000"; + this.patternFill = false; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; + this.transferMaps = "none"; + this.startNewPathAndClipBox([0, 0, width, height]); + } + clone() { + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + return clone; + } + setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + updatePathMinMax(transform, x, y) { + [x, y] = util.Util.applyTransform([x, y], transform); + this.minX = Math.min(this.minX, x); + this.minY = Math.min(this.minY, y); + this.maxX = Math.max(this.maxX, x); + this.maxY = Math.max(this.maxY, y); + } + updateRectMinMax(transform, rect) { + const p1 = util.Util.applyTransform(rect, transform); + const p2 = util.Util.applyTransform(rect.slice(2), transform); + const p3 = util.Util.applyTransform([rect[0], rect[3]], transform); + const p4 = util.Util.applyTransform([rect[2], rect[1]], transform); + this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); + this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); + this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); + this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); + } + updateScalingPathMinMax(transform, minMax) { + util.Util.scaleMinMax(transform, minMax); + this.minX = Math.min(this.minX, minMax[0]); + this.maxX = Math.max(this.maxX, minMax[1]); + this.minY = Math.min(this.minY, minMax[2]); + this.maxY = Math.max(this.maxY, minMax[3]); + } + updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + const box = util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); + if (minMax) { + minMax[0] = Math.min(minMax[0], box[0], box[2]); + minMax[1] = Math.max(minMax[1], box[0], box[2]); + minMax[2] = Math.min(minMax[2], box[1], box[3]); + minMax[3] = Math.max(minMax[3], box[1], box[3]); + return; + } + this.updateRectMinMax(transform, box); + } + getPathBoundingBox(pathType = PathType.FILL, transform = null) { + const box = [this.minX, this.minY, this.maxX, this.maxY]; + if (pathType === PathType.STROKE) { + if (!transform) { + (0,util.unreachable)("Stroke bounding box must include transform."); + } + const scale = util.Util.singularValueDecompose2dScale(transform); + const xStrokePad = scale[0] * this.lineWidth / 2; + const yStrokePad = scale[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; + } + return box; + } + updateClipFromPath() { + const intersect = util.Util.intersect(this.clipBox, this.getPathBoundingBox()); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + } + isEmptyClip() { + return this.minX === Infinity; + } + startNewPathAndClipBox(box) { + this.clipBox = box; + this.minX = Infinity; + this.minY = Infinity; + this.maxX = 0; + this.maxY = 0; + } + getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { + return util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + } +} +function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, + destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === util.ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + const white = 0xffffffff; + const black = util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === util.ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === util.ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = convertBlackAndWhiteToRGBA({ + src, + srcPos, + dest, + width, + height: thisChunkHeight, + nonBlackColor: 0 + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; + for (const property of properties) { + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} +function resetCtxToDefault(ctx) { + ctx.strokeStyle = ctx.fillStyle = "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } + if (!util.isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } +} +function composeSMaskBackdrop(bytes, r0, g0, b0) { + const length = bytes.length; + for (let i = 3; i < length; i += 4) { + const alpha = bytes[i]; + if (alpha === 0) { + bytes[i - 3] = r0; + bytes[i - 2] = g0; + bytes[i - 1] = b0; + } else if (alpha < 255) { + const alpha_ = 255 - alpha; + bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; + bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; + bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; + } + } +} +function composeSMaskAlpha(maskData, layerData, transferMap) { + const length = maskData.length; + const scale = 1 / 255; + for (let i = 3; i < length; i += 4) { + const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; + layerData[i] = layerData[i] * alpha * scale | 0; + } +} +function composeSMaskLuminosity(maskData, layerData, transferMap) { + const length = maskData.length; + for (let i = 3; i < length; i += 4) { + const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; + layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; + } +} +function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + const hasBackdrop = !!backdrop; + const r0 = hasBackdrop ? backdrop[0] : 0; + const g0 = hasBackdrop ? backdrop[1] : 0; + const b0 = hasBackdrop ? backdrop[2] : 0; + const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha; + const PIXELS_TO_PROCESS = 1048576; + const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + for (let row = 0; row < height; row += chunkSize) { + const chunkHeight = Math.min(chunkSize, height - row); + const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); + const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); + } + composeFn(maskData.data, layerData.data, transferMap); + layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); + } +} +function composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + if (layerWidth === 0 || layerHeight === 0) { + return; + } + genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); +} +function getImageSmoothingEnabled(transform, interpolate) { + const scale = util.Util.singularValueDecompose2dScale(transform); + scale[0] = Math.fround(scale[0]); + scale[1] = Math.fround(scale[1]); + const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + if (interpolate !== undefined) { + return interpolate; + } else if (scale[0] <= actualScale || scale[1] <= actualScale) { + return true; + } + return false; +} +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const NORMAL_CLIP = {}; +const EO_CLIP = {}; +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { + optionalContentConfig, + markedContentStack = null + }, annotationCanvasMap, pageColors) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = markedContentStack || []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.pageColors = pageColors; + this._cachedScaleForStroking = [-1, 0]; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = new Map(); + } + getObject(data, fallback = null) { + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const savedFillStyle = this.ctx.fillStyle; + this.ctx.fillStyle = background || "#ffffff"; + this.ctx.fillRect(0, 0, width, height); + this.ctx.fillStyle = savedFillStyle; + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform(...(0,display_utils.getCurrentTransform)(this.compositeCtx)); + } + this.ctx.save(); + resetCtxToDefault(this.ctx); + if (transform) { + this.ctx.transform(...transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + this.ctx.transform(...viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = (0,display_utils.getCurrentTransform)(this.ctx); + } + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId; + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + fnId = fnArray[i]; + if (fnId !== util.OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + for (const depObjId of argsArray[i]) { + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + i++; + if (i === argsArrayLen) { + return i; + } + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + } + } + #restoreInitialState() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); + } + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } + } + endDrawing() { + this.#restoreInitialState(); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } + } + cache.clear(); + } + this._cachedBitmapsMap.clear(); + this.#drawFilter(); + } + #drawFilter() { + if (this.pageColors) { + const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); + if (hcmFilterId !== "none") { + const savedFilter = this.ctx.filter; + this.ctx.filter = hcmFilterId; + this.ctx.drawImage(this.ctx.canvas, 0, 0); + this.ctx.filter = savedFilter; + } + } + } + _scaleImage(img, inverseTransform) { + const width = img.width; + const height = img.height; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, + paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, + newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + return { + img, + paintWidth, + paintHeight + }; + } + _createMaskCanvas(img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = (0,display_utils.getCurrentTransform)(ctx); + let cache, cacheKey, scaled, maskCanvas; + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + if (!cache) { + cache = new Map(); + this._cachedBitmapsMap.set(mainKey, cache); + } + const cachedImage = cache.get(cacheKey); + if (cachedImage && !isPatternFill) { + const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + return { + canvas: cachedImage, + offsetX, + offsetY + }; + } + scaled = cachedImage; + } + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + putBinaryImageMask(maskCanvas.context, img); + } + let maskToCanvas = util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + maskToCanvas = util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + const [minX, minY, maxX, maxY] = util.Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); + const drawnWidth = Math.round(maxX - minX) || 1; + const drawnHeight = Math.round(maxY - minY) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); + const fillCtx = fillCanvas.context; + const offsetX = minX; + const offsetY = minY; + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform(...maskToCanvas); + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, (0,display_utils.getCurrentTransformInverse)(fillCtx)); + scaled = scaled.img; + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0,display_utils.getCurrentTransform)(fillCtx), img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + const inverse = util.Util.transform((0,display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; + fillCtx.fillRect(0, 0, width, height); + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + setLineWidth(width) { + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking[0] = -1; + } + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(limit) { + this.ctx.miterLimit = limit; + } + setDash(dashArray, dashPhase) { + const ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + setRenderingIntent(intent) {} + setFlatness(flatness) {} + setGState(states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(value); + break; + case "LC": + this.setLineCap(value); + break; + case "LJ": + this.setLineJoin(value); + break; + case "ML": + this.setMiterLimit(value); + break; + case "D": + this.setDash(value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(value); + break; + case "FL": + this.setFlatness(value); + break; + case "Font": + this.setFont(value[0], value[1]); + break; + case "CA": + this.current.strokeAlpha = value; + break; + case "ca": + this.current.fillAlpha = value; + this.ctx.globalAlpha = value; + break; + case "BM": + this.ctx.globalCompositeOperation = value; + break; + case "SMask": + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + case "TR": + this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); + break; + } + } + } + get inSMaskMode() { + return !!this.suspendedCtx; + } + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + beginSMaskMode() { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + this.suspendedCtx = this.ctx; + this.ctx = scratchCanvas.context; + const ctx = this.ctx; + ctx.setTransform(...(0,display_utils.getCurrentTransform)(this.suspendedCtx)); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + } + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + this.ctx._removeMirroring(); + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + save() { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + this.suspendedCtx.save(); + } else { + this.ctx.save(); + } + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + } + restore() { + if (this.stateStack.length === 0 && this.inSMaskMode) { + this.endSMaskMode(); + } + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + if (this.inSMaskMode) { + this.suspendedCtx.restore(); + copyCtxState(this.suspendedCtx, this.ctx); + } else { + this.ctx.restore(); + } + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + } + transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + constructPath(ops, args, minMax) { + const ctx = this.ctx; + const current = this.current; + let x = current.x, + y = current.y; + let startX, startY; + const currentTransform = (0,display_utils.getCurrentTransform)(ctx); + const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; + const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case util.OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + ctx.moveTo(x, y); + if (width === 0 || height === 0) { + ctx.lineTo(xw, yh); + } else { + ctx.lineTo(xw, y); + ctx.lineTo(xw, yh); + ctx.lineTo(x, yh); + } + if (!isScalingMatrix) { + current.updateRectMinMax(currentTransform, [x, y, xw, yh]); + } + ctx.closePath(); + break; + case util.OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case util.OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case util.OPS.curveTo: + startX = x; + startY = y; + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); + j += 6; + break; + case util.OPS.curveTo2: + startX = x; + startY = y; + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case util.OPS.curveTo3: + startX = x; + startY = y; + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); + j += 4; + break; + case util.OPS.closePath: + ctx.closePath(); + break; + } + } + if (isScalingMatrix) { + current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + } + current.setCurrentPoint(x, y); + } + closePath() { + this.ctx.closePath(); + } + stroke(consumePath = true) { + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + if (this.contentVisible) { + if (typeof strokeColor === "object" && strokeColor?.getPattern) { + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.STROKE); + this.rescaleAndStroke(false); + ctx.restore(); + } else { + this.rescaleAndStroke(true); + } + } + if (consumePath) { + this.consumePath(this.current.getClippedPathBoundingBox()); + } + ctx.globalAlpha = this.current.fillAlpha; + } + closeStroke() { + this.closePath(); + this.stroke(); + } + fill(consumePath = true) { + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL); + needRestore = true; + } + const intersect = this.current.getClippedPathBoundingBox(); + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(); + } + } + if (needRestore) { + ctx.restore(); + } + if (consumePath) { + this.consumePath(intersect); + } + } + eoFill() { + this.pendingEOFill = true; + this.fill(); + } + fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + } + eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + } + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + } + endPath() { + this.consumePath(); + } + clip() { + this.pendingClip = NORMAL_CLIP; + } + eoClip() { + this.pendingClip = EO_CLIP; + } + beginText() { + this.current.textMatrix = util.IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + endText() { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + if (paths === undefined) { + ctx.beginPath(); + return; + } + ctx.save(); + ctx.beginPath(); + for (const path of paths) { + ctx.setTransform(...path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + } + setCharSpacing(spacing) { + this.current.charSpacing = spacing; + } + setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + } + setHScale(scale) { + this.current.textHScale = scale / 100; + } + setLeading(leading) { + this.current.leading = -leading; + } + setFont(fontRefName, size) { + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + current.fontMatrix = fontObj.fontMatrix || util.FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + (0,util.warn)("Invalid font matrix for font " + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + const name = fontObj.loadedName || "sans-serif"; + const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + let browserFontSize = size; + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + } + setTextRise(rise) { + this.current.textRise = rise; + } + moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.hypot(a, b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + nextLine() { + this.moveText(0, this.current.leading); + } + paintChar(character, x, y, patternTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & util.TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & util.TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + let addToPath; + if (font.disableFontFace || isAddToPathSet || patternFill) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + if (font.disableFontFace || patternFill) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (patternTransform) { + ctx.setTransform(...patternTransform); + } + if (fillStrokeMode === util.TextRenderingMode.FILL || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === util.TextRenderingMode.FILL || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + const paths = this.pendingTextPaths ||= []; + paths.push({ + transform: (0,display_utils.getCurrentTransform)(ctx), + x, + y, + fontSize, + addToPath + }); + } + } + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return (0,util.shadow)(this, "isFontSubpixelAAEnabled", enabled); + } + showText(glyphs) { + const current = this.current; + const font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + const fontSize = current.fontSize; + if (fontSize === 0) { + return undefined; + } + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + let patternTransform; + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL); + patternTransform = (0,display_utils.getCurrentTransform)(ctx); + ctx.restore(); + ctx.fillStyle = pattern; + } + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & util.TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === util.TextRenderingMode.STROKE || fillStrokeMode === util.TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + if (font.isInvalidPDFjsFont) { + const chars = []; + let width = 0; + for (const glyph of glyphs) { + chars.push(glyph.unicode); + width += glyph.width; + } + ctx.fillText(chars.join(""), 0, 0); + current.x += width * widthAdvanceScale * textHScale; + ctx.restore(); + this.compose(); + return undefined; + } + let x = 0, + i; + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (font.remeasure && width > 0) { + const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY, patternTransform); + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); + } + } + } + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + ctx.restore(); + this.compose(); + return undefined; + } + showType3Text(glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || util.FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === util.TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + (0,util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); + continue; + } + if (this.contentVisible) { + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform(...fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + const transformed = util.Util.applyTransform([glyph.width, 0], fontMatrix); + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + } + setCharWidth(xWidth, yWidth) {} + setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(); + this.endPath(); + } + getColorN_Pattern(IR) { + let pattern; + if (IR[0] === "TilingPattern") { + const color = IR[1]; + const baseTransform = this.baseTransform || (0,display_utils.getCurrentTransform)(this.ctx); + const canvasGraphicsFactory = { + createCanvasGraphics: ctx => { + return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig: this.optionalContentConfig, + markedContentStack: this.markedContentStack + }); + } + }; + pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(IR[1], IR[2]); + } + return pattern; + } + setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + } + setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + } + setStrokeRGBColor(r, g, b) { + const color = util.Util.makeHexColor(r, g, b); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + } + setFillRGBColor(r, g, b) { + const color = util.Util.makeHexColor(r, g, b); + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + } + _getPattern(objId, matrix = null) { + let pattern; + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = getShadingPattern(this.getObject(objId)); + this.cachedPatterns.set(objId, pattern); + } + if (matrix) { + pattern.matrix = matrix; + } + return pattern; + } + shadingFill(objId) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + this.save(); + const pattern = this._getPattern(objId); + ctx.fillStyle = pattern.getPattern(ctx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.SHADING); + const inv = (0,display_utils.getCurrentTransformInverse)(ctx); + if (inv) { + const { + width, + height + } = ctx.canvas; + const [x0, y0, x1, y1] = util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(); + } + beginInlineImage() { + (0,util.unreachable)("Should not call beginInlineImage"); + } + beginImageData() { + (0,util.unreachable)("Should not call beginImageData"); + } + paintFormXObjectBegin(matrix, bbox) { + if (!this.contentVisible) { + return; + } + this.save(); + this.baseTransformStack.push(this.baseTransform); + if (Array.isArray(matrix) && matrix.length === 6) { + this.transform(...matrix); + } + this.baseTransform = (0,display_utils.getCurrentTransform)(this.ctx); + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.current.updateRectMinMax((0,display_utils.getCurrentTransform)(this.ctx), bbox); + this.clip(); + this.endPath(); + } + } + paintFormXObjectEnd() { + if (!this.contentVisible) { + return; + } + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + } + beginGroup(group) { + if (!this.contentVisible) { + return; + } + this.save(); + if (this.inSMaskMode) { + this.endSMaskMode(); + this.current.activeSMask = null; + } + const currentCtx = this.ctx; + if (!group.isolated) { + (0,util.info)("TODO: Support non-isolated groups."); + } + if (group.knockout) { + (0,util.warn)("Knockout groups not supported."); + } + const currentTransform = (0,display_utils.getCurrentTransform)(currentCtx); + if (group.matrix) { + currentCtx.transform(...group.matrix); + } + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + let bounds = util.Util.getAxialAlignedBoundingBox(group.bbox, (0,display_utils.getCurrentTransform)(currentCtx)); + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + let scaleX = 1, + scaleY = 1; + if (drawnWidth > MAX_GROUP_SIZE) { + scaleX = drawnWidth / MAX_GROUP_SIZE; + drawnWidth = MAX_GROUP_SIZE; + } + if (drawnHeight > MAX_GROUP_SIZE) { + scaleY = drawnHeight / MAX_GROUP_SIZE; + drawnHeight = MAX_GROUP_SIZE; + } + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + const groupCtx = scratchCanvas.context; + groupCtx.scale(1 / scaleX, 1 / scaleY); + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform(...currentTransform); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + scaleX, + scaleY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.scale(scaleX, scaleY); + currentCtx.save(); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + endGroup(group) { + if (!this.contentVisible) { + return; + } + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + this.restore(); + } else { + this.ctx.restore(); + const currentMtx = (0,display_utils.getCurrentTransform)(this.ctx); + this.restore(); + this.ctx.save(); + this.ctx.setTransform(...currentMtx); + const dirtyBox = util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); + } + } + beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { + this.#restoreInitialState(); + resetCtxToDefault(this.ctx); + this.ctx.save(); + this.save(); + if (this.baseTransform) { + this.ctx.setTransform(...this.baseTransform); + } + if (Array.isArray(rect) && rect.length === 4) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + const [scaleX, scaleY] = util.Util.singularValueDecompose2dScale((0,display_utils.getCurrentTransform)(this.ctx)); + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + this.ctx.save(); + this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); + resetCtxToDefault(this.ctx); + } else { + resetCtxToDefault(this.ctx); + this.ctx.rect(rect[0], rect[1], width, height); + this.ctx.clip(); + this.endPath(); + } + } + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform(...transform); + this.transform(...matrix); + } + endAnnotation() { + if (this.annotationCanvas) { + this.ctx.restore(); + this.#drawFilter(); + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; + } + } + paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + const count = img.count; + img = this.getObject(img.data, img); + img.count = count; + const ctx = this.ctx; + const glyph = this.processingType3; + if (glyph) { + if (glyph.compiled === undefined) { + glyph.compiled = compileType3Glyph(img); + } + if (glyph.compiled) { + glyph.compiled(ctx); + return; + } + } + const mask = this._createMaskCanvas(img); + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { + if (!this.contentVisible) { + return; + } + img = this.getObject(img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = (0,display_utils.getCurrentTransform)(ctx); + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + const mask = this._createMaskCanvas(img); + ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + const [x, y] = util.Util.applyTransform([0, 0], trans); + ctx.drawImage(mask.canvas, x, y); + } + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectGroup(images) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0,display_utils.getCurrentTransformInverse)(ctx), PathType.FILL) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform(...transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintImageXObject(objId) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + (0,util.warn)("Dependent image isn't ready yet"); + return; + } + this.paintInlineImageXObject(imgData); + } + paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + (0,util.warn)("Dependent image isn't ready yet"); + return; + } + const width = imgData.width; + const height = imgData.height; + const map = []; + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(imgData, map); + } + applyTransferMapsToCanvas(ctx) { + if (this.current.transferMaps !== "none") { + ctx.filter = this.current.transferMaps; + ctx.drawImage(ctx.canvas, 0, 0); + ctx.filter = "none"; + } + return ctx.canvas; + } + applyTransferMapsToBitmap(imgData) { + if (this.current.transferMaps === "none") { + return imgData.bitmap; + } + const { + bitmap, + width, + height + } = imgData; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.filter = this.current.transferMaps; + tmpCtx.drawImage(bitmap, 0, 0); + tmpCtx.filter = "none"; + return tmpCanvas.canvas; + } + paintInlineImageXObject(imgData) { + if (!this.contentVisible) { + return; + } + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(); + if (!util.isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } + ctx.scale(1 / width, -1 / height); + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = this.applyTransferMapsToBitmap(imgData); + } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + const scaled = this._scaleImage(imgToPaint, (0,display_utils.getCurrentTransformInverse)(ctx)); + ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0,display_utils.getCurrentTransform)(ctx), imgData.interpolate); + drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + this.compose(); + this.restore(); + } + paintInlineImageXObjectGroup(imgData, map) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = imgData.bitmap; + } else { + const w = imgData.width; + const h = imgData.height; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + for (const entry of map) { + ctx.save(); + ctx.transform(...entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + markPoint(tag) {} + markPointProps(tag, properties) {} + beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + } + beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + this.contentVisible = this.isContentVisible(); + } + endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + beginCompat() {} + endCompat() {} + consumePath(clipBox) { + const isEmpty = this.current.isEmptyClip(); + if (this.pendingClip) { + this.current.updateClipFromPath(); + } + if (!this.pendingClip) { + this.compose(clipBox); + } + const ctx = this.ctx; + if (this.pendingClip) { + if (!isEmpty) { + if (this.pendingClip === EO_CLIP) { + ctx.clip("evenodd"); + } else { + ctx.clip(); + } + } + this.pendingClip = null; + } + this.current.startNewPathAndClipBox(this.current.clipBox); + ctx.beginPath(); + } + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = (0,display_utils.getCurrentTransform)(this.ctx); + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + return this._cachedGetSinglePixelWidth; + } + getScaleForStroking() { + if (this._cachedScaleForStroking[0] === -1) { + const { + lineWidth + } = this.current; + const { + a, + b, + c, + d + } = this.ctx.getTransform(); + let scaleX, scaleY; + if (b === 0 && c === 0) { + const normX = Math.abs(a); + const normY = Math.abs(d); + if (normX === normY) { + if (lineWidth === 0) { + scaleX = scaleY = 1 / normX; + } else { + const scaledLineWidth = normX * lineWidth; + scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; + } + } else if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(a * d - b * c); + const normX = Math.hypot(a, b); + const normY = Math.hypot(c, d); + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + this._cachedScaleForStroking[0] = scaleX; + this._cachedScaleForStroking[1] = scaleY; + } + return this._cachedScaleForStroking; + } + rescaleAndStroke(saveRestore) { + const { + ctx + } = this; + const { + lineWidth + } = this.current; + const [scaleX, scaleY] = this.getScaleForStroking(); + ctx.lineWidth = lineWidth || 1; + if (scaleX === 1 && scaleY === 1) { + ctx.stroke(); + return; + } + const dashes = ctx.getLineDash(); + if (saveRestore) { + ctx.save(); + } + ctx.scale(scaleX, scaleY); + if (dashes.length > 0) { + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(dashes.map(x => x / scale)); + ctx.lineDashOffset /= scale; + } + ctx.stroke(); + if (saveRestore) { + ctx.restore(); + } + } + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + return true; + } +} +for (const op in util.OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { + CanvasGraphics.prototype[util.OPS[op]] = CanvasGraphics.prototype[op]; + } +} + + +/***/ }), + +/***/ 473: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DOMCMapReaderFactory: () => (/* binding */ DOMCMapReaderFactory), +/* harmony export */ DOMCanvasFactory: () => (/* binding */ DOMCanvasFactory), +/* harmony export */ DOMFilterFactory: () => (/* binding */ DOMFilterFactory), +/* harmony export */ DOMSVGFactory: () => (/* binding */ DOMSVGFactory), +/* harmony export */ DOMStandardFontDataFactory: () => (/* binding */ DOMStandardFontDataFactory), +/* harmony export */ PDFDateString: () => (/* binding */ PDFDateString), +/* harmony export */ PageViewport: () => (/* binding */ PageViewport), +/* harmony export */ PixelsPerInch: () => (/* binding */ PixelsPerInch), +/* harmony export */ RenderingCancelledException: () => (/* binding */ RenderingCancelledException), +/* harmony export */ StatTimer: () => (/* binding */ StatTimer), +/* harmony export */ fetchData: () => (/* binding */ fetchData), +/* harmony export */ getColorValues: () => (/* binding */ getColorValues), +/* harmony export */ getCurrentTransform: () => (/* binding */ getCurrentTransform), +/* harmony export */ getCurrentTransformInverse: () => (/* binding */ getCurrentTransformInverse), +/* harmony export */ getFilenameFromUrl: () => (/* binding */ getFilenameFromUrl), +/* harmony export */ getPdfFilenameFromUrl: () => (/* binding */ getPdfFilenameFromUrl), +/* harmony export */ getRGB: () => (/* binding */ getRGB), +/* harmony export */ getXfaPageViewport: () => (/* binding */ getXfaPageViewport), +/* harmony export */ isDataScheme: () => (/* binding */ isDataScheme), +/* harmony export */ isPdfFile: () => (/* binding */ isPdfFile), +/* harmony export */ isValidFetchUrl: () => (/* binding */ isValidFetchUrl), +/* harmony export */ noContextMenu: () => (/* binding */ noContextMenu), +/* harmony export */ setLayerDimensions: () => (/* binding */ setLayerDimensions) +/* harmony export */ }); +/* unused harmony export deprecated */ +/* harmony import */ var _base_factory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(822); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); + + +const SVG_NS = "http://www.w3.org/2000/svg"; +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +} +class DOMFilterFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseFilterFactory { + #_cache; + #_defs; + #docId; + #document; + #hcmFilter; + #hcmKey; + #hcmUrl; + #hcmHighlightFilter; + #hcmHighlightKey; + #hcmHighlightUrl; + #id = 0; + constructor({ + docId, + ownerDocument = globalThis.document + } = {}) { + super(); + this.#docId = docId; + this.#document = ownerDocument; + } + get #cache() { + return this.#_cache ||= new Map(); + } + get #defs() { + if (!this.#_defs) { + const div = this.#document.createElement("div"); + const { + style + } = div; + style.visibility = "hidden"; + style.contain = "strict"; + style.width = style.height = 0; + style.position = "absolute"; + style.top = style.left = 0; + style.zIndex = -1; + const svg = this.#document.createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); + div.append(svg); + svg.append(this.#_defs); + this.#document.body.append(div); + } + return this.#_defs; + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = this.#cache.get(maps); + if (value) { + return value; + } + let tableR, tableG, tableB, key; + if (maps.length === 1) { + const mapR = maps[0]; + const buffer = new Array(256); + for (let i = 0; i < 256; i++) { + buffer[i] = mapR[i] / 255; + } + key = tableR = tableG = tableB = buffer.join(","); + } else { + const [mapR, mapG, mapB] = maps; + const bufferR = new Array(256); + const bufferG = new Array(256); + const bufferB = new Array(256); + for (let i = 0; i < 256; i++) { + bufferR[i] = mapR[i] / 255; + bufferG[i] = mapG[i] / 255; + bufferB[i] = mapB[i] / 255; + } + tableR = bufferR.join(","); + tableG = bufferG.join(","); + tableB = bufferB.join(","); + key = `${tableR}${tableG}${tableB}`; + } + value = this.#cache.get(key); + if (value) { + this.#cache.set(maps, value); + return value; + } + const id = `g_${this.#docId}_transfer_map_${this.#id++}`; + const url = `url(#${id})`; + this.#cache.set(maps, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapConversion(tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + const key = `${fgColor}-${bgColor}`; + if (this.#hcmKey === key) { + return this.#hcmUrl; + } + this.#hcmKey = key; + this.#hcmUrl = "none"; + this.#hcmFilter?.remove(); + if (!fgColor || !bgColor) { + return this.#hcmUrl; + } + const fgRGB = this.#getRGB(fgColor); + fgColor = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.makeHexColor(...fgRGB); + const bgRGB = this.#getRGB(bgColor); + bgColor = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.makeHexColor(...bgRGB); + this.#defs.style.color = ""; + if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { + return this.#hcmUrl; + } + const map = new Array(256); + for (let i = 0; i <= 255; i++) { + const x = i / 255; + map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + } + const table = map.join(","); + const id = `g_${this.#docId}_hcm_filter`; + const filter = this.#hcmHighlightFilter = this.#createFilter(id); + this.#addTransferMapConversion(table, table, table, filter); + this.#addGrayConversion(filter); + const getSteps = (c, n) => { + const start = fgRGB[c] / 255; + const end = bgRGB[c] / 255; + const arr = new Array(n + 1); + for (let i = 0; i <= n; i++) { + arr[i] = start + i / n * (end - start); + } + return arr.join(","); + }; + this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + this.#hcmUrl = `url(#${id})`; + return this.#hcmUrl; + } + addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + if (this.#hcmHighlightKey === key) { + return this.#hcmHighlightUrl; + } + this.#hcmHighlightKey = key; + this.#hcmHighlightUrl = "none"; + this.#hcmHighlightFilter?.remove(); + if (!fgColor || !bgColor) { + return this.#hcmHighlightUrl; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); + let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); + let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); + let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + this.#defs.style.color = ""; + const getSteps = (fg, bg, n) => { + const arr = new Array(256); + const step = (bgGray - fgGray) / n; + const newStart = fg / 255; + const newStep = (bg - fg) / (255 * n); + let prev = 0; + for (let i = 0; i <= n; i++) { + const k = Math.round(fgGray + i * step); + const value = newStart + i * newStep; + for (let j = prev; j <= k; j++) { + arr[j] = value; + } + prev = k + 1; + } + for (let i = prev; i < 256; i++) { + arr[i] = arr[prev - 1]; + } + return arr.join(","); + }; + const id = `g_${this.#docId}_hcm_highlight_filter`; + const filter = this.#hcmHighlightFilter = this.#createFilter(id); + this.#addGrayConversion(filter); + this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + this.#hcmHighlightUrl = `url(#${id})`; + return this.#hcmHighlightUrl; + } + destroy(keepHCM = false) { + if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) { + return; + } + if (this.#_defs) { + this.#_defs.parentNode.parentNode.remove(); + this.#_defs = null; + } + if (this.#_cache) { + this.#_cache.clear(); + this.#_cache = null; + } + this.#id = 0; + } + #addGrayConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); + filter.append(feColorMatrix); + } + #createFilter(id) { + const filter = this.#document.createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + this.#defs.append(filter); + return filter; + } + #appendFeFunc(feComponentTransfer, func, table) { + const feFunc = this.#document.createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); + } + #addTransferMapConversion(rTable, gTable, bTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); + this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); + this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); + } + #getRGB(color) { + this.#defs.style.color = color; + return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); + } +} +class DOMCanvasFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCanvasFactory { + constructor({ + ownerDocument = globalThis.document + } = {}) { + super(); + this._document = ownerDocument; + } + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } +} +async function fetchData(url, type = "text") { + if (isValidFetchUrl(url, document.baseURI)) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + switch (type) { + case "arraybuffer": + return response.arrayBuffer(); + case "blob": + return response.blob(); + case "json": + return response.json(); + } + return response.text(); + } + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = type; + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + if (request.status === 200 || request.status === 0) { + let data; + switch (type) { + case "arraybuffer": + case "blob": + case "json": + data = request.response; + break; + default: + data = request.responseText; + break; + } + if (data) { + resolve(data); + return; + } + } + reject(new Error(request.statusText)); + }; + request.send(null); + }); +} +class DOMCMapReaderFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then(data => { + return { + cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.stringToBytes)(data), + compressionType + }; + }); + } +} +class DOMStandardFontDataFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url, "arraybuffer").then(data => { + return new Uint8Array(data); + }); + } +} +class DOMSVGFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); + } +} +class PageViewport { + constructor({ + viewBox, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + }) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + let offsetCanvasX, offsetCanvasY; + let width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = (viewBox[3] - viewBox[1]) * scale; + height = (viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = (viewBox[2] - viewBox[0]) * scale; + height = (viewBox[3] - viewBox[1]) * scale; + } + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; + } + get rawDims() { + const { + viewBox + } = this; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "rawDims", { + pageWidth: viewBox[2] - viewBox[0], + pageHeight: viewBox[3] - viewBox[1], + pageX: viewBox[0], + pageY: viewBox[1] + }); + } + clone({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.viewBox.slice(), + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + convertToViewportPoint(x, y) { + return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([x, y], this.transform); + } + convertToViewportRectangle(rect) { + const topLeft = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([rect[0], rect[1]], this.transform); + const bottomRight = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyTransform([rect[2], rect[3]], this.transform); + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; + } + convertToPdfPoint(x, y) { + return _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.Util.applyInverseTransform([x, y], this.transform); + } +} +class RenderingCancelledException extends _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.BaseException { + constructor(msg, extraDelay = 0) { + super(msg, "RenderingCancelledException"); + this.extraDelay = extraDelay; + } +} +function isDataScheme(url) { + const ii = url.length; + let i = 0; + while (i < ii && url[i].trim() === "") { + i++; + } + return url.substring(i, i + 5).toLowerCase() === "data:"; +} +function isPdfFile(filename) { + return typeof filename === "string" && /\.pdf$/i.test(filename); +} +function getFilenameFromUrl(url, onlyStripPath = false) { + if (!onlyStripPath) { + [url] = url.split(/[#?]/, 1); + } + return url.substring(url.lastIndexOf("/") + 1); +} +function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + if (typeof url !== "string") { + return defaultFilename; + } + if (isDataScheme(url)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; + } + const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + const splitURI = reURI.exec(url); + let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.includes("%")) { + try { + suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch {} + } + } + return suggestedFilename || defaultFilename; +} +class StatTimer { + started = Object.create(null); + times = []; + time(name) { + if (name in this.started) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Timer is already running for ${name}`); + } + this.started[name] = Date.now(); + } + timeEnd(name) { + if (!(name in this.started)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Timer has not been started for ${name}`); + } + this.times.push({ + name, + start: this.started[name], + end: Date.now() + }); + delete this.started[name]; + } + toString() { + const outBuf = []; + let longest = 0; + for (const { + name + } of this.times) { + longest = Math.max(name.length, longest); + } + for (const { + name, + start, + end + } of this.times) { + outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); + } + return outBuf.join(""); + } +} +function isValidFetchUrl(url, baseUrl) { + try { + const { + protocol + } = baseUrl ? new URL(url, baseUrl) : new URL(url); + return protocol === "http:" || protocol === "https:"; + } catch { + return false; + } +} +function noContextMenu(e) { + e.preventDefault(); +} +function deprecated(details) { + console.log("Deprecated API usage: " + details); +} +let pdfDateStringRegex; +class PDFDateString { + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; + } + pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); + const matches = pdfDateStringRegex.exec(input); + if (!matches) { + return null; + } + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; + } + return new Date(Date.UTC(year, month, day, hour, minute, second)); + } +} +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + scale, + rotation + }); +} +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; + } + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map(x => parseInt(x)); + } + if (color.startsWith("rgba(")) { + return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.warn)(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +} +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + document.body.append(span); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); + } + span.remove(); +} +function getCurrentTransform(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform(); + return [a, b, c, d, e, f]; +} +function getCurrentTransformInverse(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform().invertSelf(); + return [a, b, c, d, e, f]; +} +function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { + if (viewport instanceof PageViewport) { + const { + pageWidth, + pageHeight + } = viewport.rawDims; + const { + style + } = div; + const useRound = _shared_util_js__WEBPACK_IMPORTED_MODULE_1__.FeatureTest.isCSSRoundSupported; + const w = `var(--scale-factor) * ${pageWidth}px`, + h = `var(--scale-factor) * ${pageHeight}px`; + const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, + heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; + if (!mustFlip || viewport.rotation % 180 === 0) { + style.width = widthStr; + style.height = heightStr; + } else { + style.width = heightStr; + style.height = widthStr; + } + } + if (mustRotate) { + div.setAttribute("data-main-rotation", viewport.rotation); + } +} + + +/***/ }), + +/***/ 423: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DrawLayer: () => (/* binding */ DrawLayer) +/* harmony export */ }); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(473); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); + + +class DrawLayer { + #parent = null; + #id = 0; + #mapping = new Map(); + constructor({ + pageIndex + }) { + this.pageIndex = pageIndex; + } + setParent(parent) { + if (!this.#parent) { + this.#parent = parent; + return; + } + if (this.#parent !== parent) { + if (this.#mapping.size > 0) { + for (const root of this.#mapping.values()) { + root.remove(); + parent.append(root); + } + } + this.#parent = parent; + } + } + static get _svgFactory() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.shadow)(this, "_svgFactory", new _display_utils_js__WEBPACK_IMPORTED_MODULE_0__.DOMSVGFactory()); + } + static #setBox(element, { + x, + y, + width, + height + }) { + const { + style + } = element; + style.top = `${100 * y}%`; + style.left = `${100 * x}%`; + style.width = `${100 * width}%`; + style.height = `${100 * height}%`; + } + #createSVG(box) { + const svg = DrawLayer._svgFactory.create(1, 1, true); + this.#parent.append(svg); + DrawLayer.#setBox(svg, box); + return svg; + } + highlight({ + outlines, + box + }, color, opacity) { + const id = this.#id++; + const root = this.#createSVG(box); + root.classList.add("highlight"); + const defs = DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("d", DrawLayer.#extractPathFromHighlightOutlines(outlines)); + const clipPath = DrawLayer._svgFactory.createElement("clipPath"); + defs.append(clipPath); + const clipPathId = `clip_${pathId}`; + clipPath.setAttribute("id", clipPathId); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + const clipPathUse = DrawLayer._svgFactory.createElement("use"); + clipPath.append(clipPathUse); + clipPathUse.setAttribute("href", `#${pathId}`); + clipPathUse.classList.add("clip"); + const use = DrawLayer._svgFactory.createElement("use"); + root.append(use); + root.setAttribute("fill", color); + root.setAttribute("fill-opacity", opacity); + use.setAttribute("href", `#${pathId}`); + this.#mapping.set(id, root); + return { + id, + clipPathId: `url(#${clipPathId})` + }; + } + highlightOutline({ + outlines, + box + }) { + const id = this.#id++; + const root = this.#createSVG(box); + root.classList.add("highlightOutline"); + const defs = DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("d", DrawLayer.#extractPathFromHighlightOutlines(outlines)); + path.setAttribute("vector-effect", "non-scaling-stroke"); + const use1 = DrawLayer._svgFactory.createElement("use"); + root.append(use1); + use1.setAttribute("href", `#${pathId}`); + const use2 = use1.cloneNode(); + root.append(use2); + use1.classList.add("mainOutline"); + use2.classList.add("secondaryOutline"); + this.#mapping.set(id, root); + return id; + } + static #extractPathFromHighlightOutlines(polygons) { + const buffer = []; + for (const polygon of polygons) { + let [prevX, prevY] = polygon; + buffer.push(`M${prevX} ${prevY}`); + for (let i = 2; i < polygon.length; i += 2) { + const x = polygon[i]; + const y = polygon[i + 1]; + if (x === prevX) { + buffer.push(`V${y}`); + prevY = y; + } else if (y === prevY) { + buffer.push(`H${x}`); + prevX = x; + } + } + buffer.push("Z"); + } + return buffer.join(" "); + } + updateBox(id, box) { + DrawLayer.#setBox(this.#mapping.get(id), box); + } + rotate(id, angle) { + this.#mapping.get(id).setAttribute("data-main-rotation", angle); + } + changeColor(id, color) { + this.#mapping.get(id).setAttribute("fill", color); + } + changeOpacity(id, opacity) { + this.#mapping.get(id).setAttribute("fill-opacity", opacity); + } + addClass(id, className) { + this.#mapping.get(id).classList.add(className); + } + removeClass(id, className) { + this.#mapping.get(id).classList.remove(className); + } + remove(id) { + if (this.#parent === null) { + return; + } + this.#mapping.get(id).remove(); + this.#mapping.delete(id); + } + destroy() { + this.#parent = null; + for (const root of this.#mapping.values()) { + root.remove(); + } + this.#mapping.clear(); + } +} + + +/***/ }), + +/***/ 629: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AnnotationEditorLayer: () => (/* binding */ AnnotationEditorLayer) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/editor/editor.js + 2 modules +var editor_editor = __webpack_require__(115); +// EXTERNAL MODULE: ./src/display/editor/tools.js +var tools = __webpack_require__(812); +// EXTERNAL MODULE: ./src/display/annotation_layer.js + 1 modules +var annotation_layer = __webpack_require__(640); +;// CONCATENATED MODULE: ./src/display/editor/freetext.js + + + + +class FreeTextEditor extends editor_editor.AnnotationEditor { + #boundEditorDivBlur = this.editorDivBlur.bind(this); + #boundEditorDivFocus = this.editorDivFocus.bind(this); + #boundEditorDivInput = this.editorDivInput.bind(this); + #boundEditorDivKeydown = this.editorDivKeydown.bind(this); + #color; + #content = ""; + #editorDivId = `${this.id}-editor`; + #fontSize; + #initialData = null; + static _freeTextDefaultContent = ""; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + static get _keyboardManager() { + const proto = FreeTextEditor.prototype; + const arrowChecker = self => self.isEmpty(); + const small = tools.AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = tools.AnnotationEditorUIManager.TRANSLATE_BIG; + return (0,util.shadow)(this, "_keyboardManager", new tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { + bubbles: true + }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { + args: [0, big], + checker: arrowChecker + }]])); + } + static _type = "freetext"; + static _editorType = util.AnnotationEditorType.FREETEXT; + constructor(params) { + super({ + ...params, + name: "freeTextEditor" + }); + this.#color = params.color || FreeTextEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor; + this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n, { + strings: ["pdfjs-free-text-default-content"] + }); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + } + static updateDefaultParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.FREETEXT_SIZE: + FreeTextEditor._defaultFontSize = value; + break; + case util.AnnotationEditorParamsType.FREETEXT_COLOR: + FreeTextEditor._defaultColor = value; + break; + } + } + updateParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.FREETEXT_SIZE: + this.#updateFontSize(value); + break; + case util.AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; + } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parentScale); + this.#fontSize = size; + this.#setEditorDimensions(); + }; + const savedFontsize = this.#fontSize; + this.addCommands({ + cmd: () => { + setFontsize(fontSize); + }, + undo: () => { + setFontsize(savedFontsize); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateColor(color) { + const savedColor = this.#color; + this.addCommands({ + cmd: () => { + this.#color = this.editorDiv.style.color = color; + }, + undo: () => { + this.#color = this.editorDiv.style.color = savedColor; + }, + mustExec: true, + type: util.AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + enableEditMode() { + if (this.isInEditMode()) { + return; + } + this.parent.setEditingState(false); + this.parent.updateToolbar(util.AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this._isDraggable = false; + this.div.removeAttribute("aria-activedescendant"); + this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.addEventListener("input", this.#boundEditorDivInput); + } + disableEditMode() { + if (!this.isInEditMode()) { + return; + } + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", this.#editorDivId); + this._isDraggable = true; + this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freetextEditing"); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } + } + onceAdded() { + if (this.width) { + this.#cheatInitialRect(); + return; + } + this.enableEditMode(); + this.editorDiv.focus(); + if (this._initialOptions?.isCentered) { + this.center(); + } + this._initialOptions = null; + } + isEmpty() { + return !this.editorDiv || this.editorDiv.innerText.trim() === ""; + } + remove() { + this.isEditing = false; + if (this.parent) { + this.parent.setEditingState(true); + this.parent.div.classList.add("freetextEditing"); + } + super.remove(); + } + #extractText() { + const divs = this.editorDiv.getElementsByTagName("div"); + if (divs.length === 0) { + return this.editorDiv.innerText; + } + const buffer = []; + for (const div of divs) { + buffer.push(div.innerText.replace(/\r\n?|\n/, "")); + } + return buffer.join("\n"); + } + #setEditorDimensions() { + const [parentWidth, parentHeight] = this.parentDimensions; + let rect; + if (this.isAttachedToDOM) { + rect = this.div.getBoundingClientRect(); + } else { + const { + currentLayer, + div + } = this; + const savedDisplay = div.style.display; + div.style.display = "hidden"; + currentLayer.div.append(this.div); + rect = div.getBoundingClientRect(); + div.remove(); + div.style.display = savedDisplay; + } + if (this.rotation % 180 === this.parentRotation % 180) { + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + } else { + this.width = rect.height / parentWidth; + this.height = rect.width / parentHeight; + } + this.fixAndSetPosition(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = this.#content; + const newText = this.#content = this.#extractText().trimEnd(); + if (savedText === newText) { + return; + } + const setText = text => { + this.#content = text; + if (!text) { + this.remove(); + return; + } + this.#setContent(); + this._uiManager.rebuild(this); + this.#setEditorDimensions(); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + this.#setEditorDimensions(); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + dblclick(event) { + this.enterInEditMode(); + } + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enterInEditMode(); + event.preventDefault(); + } + } + editorDivKeydown(event) { + FreeTextEditor._keyboardManager.exec(this, event); + } + editorDivFocus(event) { + this.isEditing = true; + } + editorDivBlur(event) { + this.isEditing = false; + } + editorDivInput(event) { + this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); + } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + } + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", this.#editorDivId); + this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); + this.enableEditing(); + editor_editor.AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; + style.color = this.#color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + (0,tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.annotationElementId) { + const { + position + } = this.#initialData; + let [tx, ty] = this.getInitialTranslation(); + [tx, ty] = this.pageTranslationToScreen(tx, ty); + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + let posX, posY; + switch (this.rotation) { + case 0: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY + this.height - (position[1] - pageY) / pageHeight; + break; + case 90: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [ty, -tx]; + break; + case 180: + posX = baseX - this.width + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [-tx, -ty]; + break; + case 270: + posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; + posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; + [tx, ty] = [-ty, tx]; + break; + } + this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); + } else { + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + this.#setContent(); + this._isDraggable = true; + this.editorDiv.contentEditable = false; + } else { + this._isDraggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + #setContent() { + this.editorDiv.replaceChildren(); + if (!this.#content) { + return; + } + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } + } + get contentDiv() { + return this.editorDiv; + } + static deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof annotation_layer.FreeTextAnnotationElement) { + const { + data: { + defaultAppearanceData: { + fontSize, + fontColor + }, + rect, + rotation, + id + }, + textContent, + textPosition, + parent: { + page: { + pageNumber + } + } + } = data; + if (!textContent || textContent.length === 0) { + return null; + } + initialData = data = { + annotationType: util.AnnotationEditorType.FREETEXT, + color: Array.from(fontColor), + fontSize, + value: textContent.join("\n"), + position: textPosition, + pageIndex: pageNumber - 1, + rect, + rotation, + id, + deleted: false + }; + } + const editor = super.deserialize(data, parent, uiManager); + editor.#fontSize = data.fontSize; + editor.#color = util.Util.makeHexColor(...data.color); + editor.#content = data.value; + editor.annotationElementId = data.id || null; + editor.#initialData = initialData; + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return { + pageIndex: this.pageIndex, + id: this.annotationElementId, + deleted: true + }; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + const rect = this.getRect(padding, padding); + const color = editor_editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); + const serialized = { + annotationType: util.AnnotationEditorType.FREETEXT, + color, + fontSize: this.#fontSize, + value: this.#content, + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + value, + fontSize, + color, + rect, + pageIndex + } = this.#initialData; + return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; + } + #cheatInitialRect(delayed = false) { + if (!this.annotationElementId) { + return; + } + this.#setEditorDimensions(); + if (!delayed && (this.width === 0 || this.height === 0)) { + setTimeout(() => this.#cheatInitialRect(true), 0); + return; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + this.#initialData.rect = this.getRect(padding, padding); + } +} + +// EXTERNAL MODULE: ./src/display/editor/color_picker.js +var color_picker = __webpack_require__(97); +// EXTERNAL MODULE: ./src/display/editor/outliner.js +var editor_outliner = __webpack_require__(405); +;// CONCATENATED MODULE: ./src/display/editor/highlight.js + + + + + +class HighlightEditor extends editor_editor.AnnotationEditor { + #boxes; + #clipPathId = null; + #colorPicker = null; + #focusOutlines = null; + #highlightDiv = null; + #highlightOutlines = null; + #id = null; + #lastPoint = null; + #opacity; + #outlineId = null; + static _defaultColor = null; + static _defaultOpacity = 1; + static _l10nPromise; + static _type = "highlight"; + static _editorType = util.AnnotationEditorType.HIGHLIGHT; + constructor(params) { + super({ + ...params, + name: "highlightEditor" + }); + HighlightEditor._defaultColor ||= this._uiManager.highlightColors?.values().next().value || "#fff066"; + this.color = params.color || HighlightEditor._defaultColor; + this.#opacity = params.opacity || HighlightEditor._defaultOpacity; + this.#boxes = params.boxes || null; + this._isDraggable = false; + this.#createOutlines(); + this.#addToDrawLayer(); + this.rotate(this.rotation); + } + #createOutlines() { + const outliner = new editor_outliner.Outliner(this.#boxes, 0.001); + this.#highlightOutlines = outliner.getOutlines(); + ({ + x: this.x, + y: this.y, + width: this.width, + height: this.height + } = this.#highlightOutlines.box); + const outlinerForOutline = new editor_outliner.Outliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === "ltr"); + this.#focusOutlines = outlinerForOutline.getOutlines(); + const { + lastPoint + } = this.#focusOutlines.box; + this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n); + } + static updateDefaultParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + HighlightEditor._defaultColor = value; + break; + } + } + get toolbarPosition() { + return this.#lastPoint; + } + updateParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.HIGHLIGHT_COLOR: + this.#updateColor(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[util.AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, HighlightEditor._defaultColor]]; + } + get propertiesToUpdate() { + return [[util.AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor]]; + } + #updateColor(color) { + const savedColor = this.color; + this.addCommands({ + cmd: () => { + this.color = color; + this.parent.drawLayer.changeColor(this.#id, color); + this.#colorPicker?.updateColor(color); + }, + undo: () => { + this.color = savedColor; + this.parent.drawLayer.changeColor(this.#id, savedColor); + this.#colorPicker?.updateColor(savedColor); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.HIGHLIGHT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + async addEditToolbar() { + const toolbar = await super.addEditToolbar(); + if (!toolbar) { + return null; + } + if (this._uiManager.highlightColors) { + this.#colorPicker = new color_picker.ColorPicker({ + editor: this + }); + toolbar.addColorPicker(this.#colorPicker); + } + return toolbar; + } + disableEditing() { + super.disableEditing(); + this.div.classList.toggle("disabled", true); + } + enableEditing() { + super.enableEditing(); + this.div.classList.toggle("disabled", false); + } + fixAndSetPosition() { + return super.fixAndSetPosition(0); + } + getRect(tx, ty) { + return super.getRect(tx, ty, 0); + } + onceAdded() { + this.parent.addUndoableEditor(this); + this.div.focus(); + } + remove() { + super.remove(); + this.#cleanDrawLayer(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + this.#addToDrawLayer(); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + let mustBeSelected = false; + if (this.parent && !parent) { + this.#cleanDrawLayer(); + } else if (parent) { + this.#addToDrawLayer(parent); + mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor"); + } + super.setParent(parent); + if (mustBeSelected) { + this.select(); + } + } + #cleanDrawLayer() { + if (this.#id === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(this.#id); + this.#id = null; + this.parent.drawLayer.remove(this.#outlineId); + this.#outlineId = null; + } + #addToDrawLayer(parent = this.parent) { + if (this.#id !== null) { + return; + } + ({ + id: this.#id, + clipPathId: this.#clipPathId + } = parent.drawLayer.highlight(this.#highlightOutlines, this.color, this.#opacity)); + if (this.#highlightDiv) { + this.#highlightDiv.style.clipPath = this.#clipPathId; + } + this.#outlineId = parent.drawLayer.highlightOutline(this.#focusOutlines); + } + static #rotateBbox({ + x, + y, + width, + height + }, angle) { + switch (angle) { + case 90: + return { + x: 1 - y - height, + y: x, + width: height, + height: width + }; + case 180: + return { + x: 1 - x - width, + y: 1 - y - height, + width, + height + }; + case 270: + return { + x: y, + y: 1 - x - width, + width: height, + height: width + }; + } + return { + x, + y, + width, + height + }; + } + rotate(angle) { + const { + drawLayer + } = this.parent; + drawLayer.rotate(this.#id, angle); + drawLayer.rotate(this.#outlineId, angle); + drawLayer.updateBox(this.#id, HighlightEditor.#rotateBbox(this, angle)); + drawLayer.updateBox(this.#outlineId, HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle)); + } + render() { + if (this.div) { + return this.div; + } + const div = super.render(); + const highlightDiv = this.#highlightDiv = document.createElement("div"); + div.append(highlightDiv); + highlightDiv.className = "internal"; + highlightDiv.style.clipPath = this.#clipPathId; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + (0,tools.bindEvents)(this, this.#highlightDiv, ["pointerover", "pointerleave"]); + this.enableEditing(); + return div; + } + pointerover() { + this.parent.drawLayer.addClass(this.#outlineId, "hovered"); + } + pointerleave() { + this.parent.drawLayer.removeClass(this.#outlineId, "hovered"); + } + select() { + super.select(); + this.parent?.drawLayer.removeClass(this.#outlineId, "hovered"); + this.parent?.drawLayer.addClass(this.#outlineId, "selected"); + } + unselect() { + super.unselect(); + this.parent?.drawLayer.removeClass(this.#outlineId, "selected"); + } + #serializeBoxes() { + const [pageWidth, pageHeight] = this.pageDimensions; + const boxes = this.#boxes; + const quadPoints = new Array(boxes.length * 8); + let i = 0; + for (const { + x, + y, + width, + height + } of boxes) { + const sx = x * pageWidth; + const sy = (1 - y - height) * pageHeight; + quadPoints[i] = quadPoints[i + 4] = sx; + quadPoints[i + 1] = quadPoints[i + 3] = sy; + quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth; + quadPoints[i + 5] = quadPoints[i + 7] = sy + height * pageHeight; + i += 8; + } + return quadPoints; + } + #serializeOutlines() { + const [pageWidth, pageHeight] = this.pageDimensions; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + const tx = this.x * pageWidth; + const ty = (1 - this.y - this.height) * pageHeight; + const outlines = []; + for (const outline of this.#highlightOutlines.outlines) { + const points = new Array(outline.length); + for (let i = 0; i < outline.length; i += 2) { + points[i] = tx + outline[i] * width; + points[i + 1] = ty + (1 - outline[i + 1]) * height; + } + outlines.push(points); + } + return outlines; + } + static deserialize(data, parent, uiManager) { + const editor = super.deserialize(data, parent, uiManager); + const { + rect, + color, + quadPoints + } = data; + editor.color = util.Util.makeHexColor(...color); + editor.#opacity = data.opacity; + const [pageWidth, pageHeight] = editor.pageDimensions; + editor.width = (rect[2] - rect[0]) / pageWidth; + editor.height = (rect[3] - rect[1]) / pageHeight; + const boxes = editor.#boxes = []; + for (let i = 0; i < quadPoints.length; i += 8) { + boxes.push({ + x: quadPoints[4] / pageWidth, + y: 1 - quadPoints[i + 5] / pageHeight, + width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth, + height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight + }); + } + editor.#createOutlines(); + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty() || isForCopying) { + return null; + } + const rect = this.getRect(0, 0); + const color = editor_editor.AnnotationEditor._colorManager.convert(this.color); + return { + annotationType: util.AnnotationEditorType.HIGHLIGHT, + color, + opacity: this.#opacity, + quadPoints: this.#serializeBoxes(), + outlines: this.#serializeOutlines(), + pageIndex: this.pageIndex, + rect, + rotation: 0, + structTreeParentId: this._structTreeParentId + }; + } + static canCreateNewEmptyEditor() { + return false; + } +} + +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/editor/ink.js + + + + + +class InkEditor extends editor_editor.AnnotationEditor { + #baseHeight = 0; + #baseWidth = 0; + #boundCanvasPointermove = this.canvasPointermove.bind(this); + #boundCanvasPointerleave = this.canvasPointerleave.bind(this); + #boundCanvasPointerup = this.canvasPointerup.bind(this); + #boundCanvasPointerdown = this.canvasPointerdown.bind(this); + #canvasContextMenuTimeoutId = null; + #currentPath2D = new Path2D(); + #disableEditing = false; + #hasSomethingToDraw = false; + #isCanvasInitialized = false; + #observer = null; + #realWidth = 0; + #realHeight = 0; + #requestFrameCallback = null; + static _defaultColor = null; + static _defaultOpacity = 1; + static _defaultThickness = 1; + static _type = "ink"; + static _editorType = util.AnnotationEditorType.INK; + constructor(params) { + super({ + ...params, + name: "inkEditor" + }); + this.color = params.color || null; + this.thickness = params.thickness || null; + this.opacity = params.opacity || null; + this.paths = []; + this.bezierPath2D = []; + this.allRawPaths = []; + this.currentPath = []; + this.scaleFactor = 1; + this.translationX = this.translationY = 0; + this.x = 0; + this.y = 0; + this._willKeepAspectRatio = true; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n); + } + static updateDefaultParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.INK_THICKNESS: + InkEditor._defaultThickness = value; + break; + case util.AnnotationEditorParamsType.INK_COLOR: + InkEditor._defaultColor = value; + break; + case util.AnnotationEditorParamsType.INK_OPACITY: + InkEditor._defaultOpacity = value / 100; + break; + } + } + updateParams(type, value) { + switch (type) { + case util.AnnotationEditorParamsType.INK_THICKNESS: + this.#updateThickness(value); + break; + case util.AnnotationEditorParamsType.INK_COLOR: + this.#updateColor(value); + break; + case util.AnnotationEditorParamsType.INK_OPACITY: + this.#updateOpacity(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor], [util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]]; + } + get propertiesToUpdate() { + return [[util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor], [util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]]; + } + #updateThickness(thickness) { + const savedThickness = this.thickness; + this.addCommands({ + cmd: () => { + this.thickness = thickness; + this.#fitToContent(); + }, + undo: () => { + this.thickness = savedThickness; + this.#fitToContent(); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateColor(color) { + const savedColor = this.color; + this.addCommands({ + cmd: () => { + this.color = color; + this.#redraw(); + }, + undo: () => { + this.color = savedColor; + this.#redraw(); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.INK_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateOpacity(opacity) { + opacity /= 100; + const savedOpacity = this.opacity; + this.addCommands({ + cmd: () => { + this.opacity = opacity; + this.#redraw(); + }, + undo: () => { + this.opacity = savedOpacity; + this.#redraw(); + }, + mustExec: true, + type: util.AnnotationEditorParamsType.INK_OPACITY, + overwriteIfSameType: true, + keepUndo: true + }); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + this.#setCanvasDims(); + } + this.#fitToContent(); + } + remove() { + if (this.canvas === null) { + return; + } + if (!this.isEmpty()) { + this.commit(); + } + this.canvas.width = this.canvas.height = 0; + this.canvas.remove(); + this.canvas = null; + if (this.#canvasContextMenuTimeoutId) { + clearTimeout(this.#canvasContextMenuTimeoutId); + this.#canvasContextMenuTimeoutId = null; + } + this.#observer.disconnect(); + this.#observer = null; + super.remove(); + } + setParent(parent) { + if (!this.parent && parent) { + this._uiManager.removeShouldRescale(this); + } else if (this.parent && parent === null) { + this._uiManager.addShouldRescale(this); + } + super.setParent(parent); + } + onScaleChanging() { + const [parentWidth, parentHeight] = this.parentDimensions; + const width = this.width * parentWidth; + const height = this.height * parentHeight; + this.setDimensions(width, height); + } + enableEditMode() { + if (this.#disableEditing || this.canvas === null) { + return; + } + super.enableEditMode(); + this._isDraggable = false; + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + } + disableEditMode() { + if (!this.isInEditMode() || this.canvas === null) { + return; + } + super.disableEditMode(); + this._isDraggable = !this.isEmpty(); + this.div.classList.remove("editing"); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + } + onceAdded() { + this._isDraggable = !this.isEmpty(); + } + isEmpty() { + return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; + } + #getInitialBBox() { + const { + parentRotation, + parentDimensions: [width, height] + } = this; + switch (parentRotation) { + case 90: + return [0, height, height, width]; + case 180: + return [width, height, width, height]; + case 270: + return [width, 0, height, width]; + default: + return [0, 0, width, height]; + } + } + #setStroke() { + const { + ctx, + color, + opacity, + thickness, + parentScale, + scaleFactor + } = this; + ctx.lineWidth = thickness * parentScale / scaleFactor; + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.miterLimit = 10; + ctx.strokeStyle = `${color}${(0,tools.opacityToHex)(opacity)}`; + } + #startDrawing(x, y) { + this.canvas.addEventListener("contextmenu", display_utils.noContextMenu); + this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); + this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + this.isEditing = true; + if (!this.#isCanvasInitialized) { + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.thickness ||= InkEditor._defaultThickness; + this.color ||= InkEditor._defaultColor || editor_editor.AnnotationEditor._defaultLineColor; + this.opacity ??= InkEditor._defaultOpacity; + } + this.currentPath.push([x, y]); + this.#hasSomethingToDraw = false; + this.#setStroke(); + this.#requestFrameCallback = () => { + this.#drawPoints(); + if (this.#requestFrameCallback) { + window.requestAnimationFrame(this.#requestFrameCallback); + } + }; + window.requestAnimationFrame(this.#requestFrameCallback); + } + #draw(x, y) { + const [lastX, lastY] = this.currentPath.at(-1); + if (this.currentPath.length > 1 && x === lastX && y === lastY) { + return; + } + const currentPath = this.currentPath; + let path2D = this.#currentPath2D; + currentPath.push([x, y]); + this.#hasSomethingToDraw = true; + if (currentPath.length <= 2) { + path2D.moveTo(...currentPath[0]); + path2D.lineTo(x, y); + return; + } + if (currentPath.length === 3) { + this.#currentPath2D = path2D = new Path2D(); + path2D.moveTo(...currentPath[0]); + } + this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); + } + #endPath() { + if (this.currentPath.length === 0) { + return; + } + const lastPoint = this.currentPath.at(-1); + this.#currentPath2D.lineTo(...lastPoint); + } + #stopDrawing(x, y) { + this.#requestFrameCallback = null; + x = Math.min(Math.max(x, 0), this.canvas.width); + y = Math.min(Math.max(y, 0), this.canvas.height); + this.#draw(x, y); + this.#endPath(); + let bezier; + if (this.currentPath.length !== 1) { + bezier = this.#generateBezierPoints(); + } else { + const xy = [x, y]; + bezier = [[xy, xy.slice(), xy.slice(), xy]]; + } + const path2D = this.#currentPath2D; + const currentPath = this.currentPath; + this.currentPath = []; + this.#currentPath2D = new Path2D(); + const cmd = () => { + this.allRawPaths.push(currentPath); + this.paths.push(bezier); + this.bezierPath2D.push(path2D); + this.rebuild(); + }; + const undo = () => { + this.allRawPaths.pop(); + this.paths.pop(); + this.bezierPath2D.pop(); + if (this.paths.length === 0) { + this.remove(); + } else { + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + } + this.#fitToContent(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + #drawPoints() { + if (!this.#hasSomethingToDraw) { + return; + } + this.#hasSomethingToDraw = false; + const thickness = Math.ceil(this.thickness * this.parentScale); + const lastPoints = this.currentPath.slice(-3); + const x = lastPoints.map(xy => xy[0]); + const y = lastPoints.map(xy => xy[1]); + const xMin = Math.min(...x) - thickness; + const xMax = Math.max(...x) + thickness; + const yMin = Math.min(...y) - thickness; + const yMax = Math.max(...y) + thickness; + const { + ctx + } = this; + ctx.save(); + ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + ctx.stroke(this.#currentPath2D); + ctx.restore(); + } + #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) { + const prevX = (x0 + x1) / 2; + const prevY = (y0 + y1) / 2; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); + } + #generateBezierPoints() { + const path = this.currentPath; + if (path.length <= 2) { + return [[path[0], path[0], path.at(-1), path.at(-1)]]; + } + const bezierPoints = []; + let i; + let [x0, y0] = path[0]; + for (i = 1; i < path.length - 2; i++) { + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]); + [x0, y0] = [x3, y3]; + } + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); + return bezierPoints; + } + #redraw() { + if (this.isEmpty()) { + this.#updateTransform(); + return; + } + this.#setStroke(); + const { + canvas, + ctx + } = this; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.clearRect(0, 0, canvas.width, canvas.height); + this.#updateTransform(); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + } + commit() { + if (this.#disableEditing) { + return; + } + super.commit(); + this.isEditing = false; + this.disableEditMode(); + this.setInForeground(); + this.#disableEditing = true; + this.div.classList.add("disabled"); + this.#fitToContent(true); + this.select(); + this.parent.addInkEditorIfNeeded(true); + this.moveInDOM(); + this.div.focus({ + preventScroll: true + }); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + this.enableEditMode(); + } + canvasPointerdown(event) { + if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) { + return; + } + this.setInForeground(); + event.preventDefault(); + if (!this.div.contains(document.activeElement)) { + this.div.focus({ + preventScroll: true + }); + } + this.#startDrawing(event.offsetX, event.offsetY); + } + canvasPointermove(event) { + event.preventDefault(); + this.#draw(event.offsetX, event.offsetY); + } + canvasPointerup(event) { + event.preventDefault(); + this.#endDrawing(event); + } + canvasPointerleave(event) { + this.#endDrawing(event); + } + #endDrawing(event) { + this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); + this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + if (this.#canvasContextMenuTimeoutId) { + clearTimeout(this.#canvasContextMenuTimeoutId); + } + this.#canvasContextMenuTimeoutId = setTimeout(() => { + this.#canvasContextMenuTimeoutId = null; + this.canvas.removeEventListener("contextmenu", display_utils.noContextMenu); + }, 10); + this.#stopDrawing(event.offsetX, event.offsetY); + this.addToAnnotationStorage(); + this.setInBackground(); + } + #createCanvas() { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.canvas.height = 0; + this.canvas.className = "inkEditorCanvas"; + this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); + this.div.append(this.canvas); + this.ctx = this.canvas.getContext("2d"); + } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.setDimensions(rect.width, rect.height); + } + }); + this.#observer.observe(this.div); + } + get isResizable() { + return !this.isEmpty() && this.#disableEditing; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.setAttribute("data-l10n-id", "pdfjs-ink"); + const [x, y, w, h] = this.#getInitialBBox(); + this.setAt(x, y, 0, 0); + this.setDims(w, h); + this.#createCanvas(); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.setDims(this.width * parentWidth, this.height * parentHeight); + this.#redraw(); + this.div.classList.add("disabled"); + } else { + this.div.classList.add("editing"); + this.enableEditMode(); + } + this.#createObserver(); + return this.div; + } + #setCanvasDims() { + if (!this.#isCanvasInitialized) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.canvas.width = Math.ceil(this.width * parentWidth); + this.canvas.height = Math.ceil(this.height * parentHeight); + this.#updateTransform(); + } + setDimensions(width, height) { + const roundedWidth = Math.round(width); + const roundedHeight = Math.round(height); + if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) { + return; + } + this.#realWidth = roundedWidth; + this.#realHeight = roundedHeight; + this.canvas.style.visibility = "hidden"; + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.fixAndSetPosition(); + if (this.#disableEditing) { + this.#setScaleFactor(width, height); + } + this.#setCanvasDims(); + this.#redraw(); + this.canvas.style.visibility = "visible"; + this.fixDims(); + } + #setScaleFactor(width, height) { + const padding = this.#getPadding(); + const scaleFactorW = (width - padding) / this.#baseWidth; + const scaleFactorH = (height - padding) / this.#baseHeight; + this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); + } + #updateTransform() { + const padding = this.#getPadding() / 2; + this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); + } + static #buildPath2D(bezier) { + const path2D = new Path2D(); + for (let i = 0, ii = bezier.length; i < ii; i++) { + const [first, control1, control2, second] = bezier[i]; + if (i === 0) { + path2D.moveTo(...first); + } + path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); + } + return path2D; + } + static #toPDFCoordinates(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] += blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] + blX; + points[i + 1] = x + blY; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] += blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trX - points[i + 1]; + points[i + 1] = trY - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; + } + static #fromPDFCoordinates(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] -= blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] - blY; + points[i + 1] = x - blX; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] -= blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trY - points[i + 1]; + points[i + 1] = trX - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; + } + #serializePaths(s, tx, ty, rect) { + const paths = []; + const padding = this.thickness / 2; + const shiftX = s * tx + padding; + const shiftY = s * ty + padding; + for (const bezier of this.paths) { + const buffer = []; + const points = []; + for (let j = 0, jj = bezier.length; j < jj; j++) { + const [first, control1, control2, second] = bezier[j]; + const p10 = s * first[0] + shiftX; + const p11 = s * first[1] + shiftY; + const p20 = s * control1[0] + shiftX; + const p21 = s * control1[1] + shiftY; + const p30 = s * control2[0] + shiftX; + const p31 = s * control2[1] + shiftY; + const p40 = s * second[0] + shiftX; + const p41 = s * second[1] + shiftY; + if (j === 0) { + buffer.push(p10, p11); + points.push(p10, p11); + } + buffer.push(p20, p21, p30, p31, p40, p41); + points.push(p20, p21); + if (j === jj - 1) { + points.push(p40, p41); + } + } + paths.push({ + bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation), + points: InkEditor.#toPDFCoordinates(points, rect, this.rotation) + }); + } + return paths; + } + #getBbox() { + let xMin = Infinity; + let xMax = -Infinity; + let yMin = Infinity; + let yMax = -Infinity; + for (const path of this.paths) { + for (const [first, control1, control2, second] of path) { + const bbox = util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); + xMin = Math.min(xMin, bbox[0]); + yMin = Math.min(yMin, bbox[1]); + xMax = Math.max(xMax, bbox[2]); + yMax = Math.max(yMax, bbox[3]); + } + } + return [xMin, yMin, xMax, yMax]; + } + #getPadding() { + return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0; + } + #fitToContent(firstTime = false) { + if (this.isEmpty()) { + return; + } + if (!this.#disableEditing) { + this.#redraw(); + return; + } + const bbox = this.#getBbox(); + const padding = this.#getPadding(); + this.#baseWidth = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + this.#baseHeight = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); + const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setAspectRatio(width, height); + const prevTranslationX = this.translationX; + const prevTranslationY = this.translationY; + this.translationX = -bbox[0]; + this.translationY = -bbox[1]; + this.#setCanvasDims(); + this.#redraw(); + this.#realWidth = width; + this.#realHeight = height; + this.setDims(width, height); + const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; + this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); + } + static deserialize(data, parent, uiManager) { + if (data instanceof annotation_layer.InkAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + editor.thickness = data.thickness; + editor.color = util.Util.makeHexColor(...data.color); + editor.opacity = data.opacity; + const [pageWidth, pageHeight] = editor.pageDimensions; + const width = editor.width * pageWidth; + const height = editor.height * pageHeight; + const scaleFactor = editor.parentScale; + const padding = data.thickness / 2; + editor.#disableEditing = true; + editor.#realWidth = Math.round(width); + editor.#realHeight = Math.round(height); + const { + paths, + rect, + rotation + } = data; + for (let { + bezier + } of paths) { + bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation); + const path = []; + editor.paths.push(path); + let p0 = scaleFactor * (bezier[0] - padding); + let p1 = scaleFactor * (bezier[1] - padding); + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const p10 = scaleFactor * (bezier[i] - padding); + const p11 = scaleFactor * (bezier[i + 1] - padding); + const p20 = scaleFactor * (bezier[i + 2] - padding); + const p21 = scaleFactor * (bezier[i + 3] - padding); + const p30 = scaleFactor * (bezier[i + 4] - padding); + const p31 = scaleFactor * (bezier[i + 5] - padding); + path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); + p0 = p30; + p1 = p31; + } + const path2D = this.#buildPath2D(path); + editor.bezierPath2D.push(path2D); + } + const bbox = editor.#getBbox(); + editor.#baseWidth = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + editor.#baseHeight = Math.max(editor_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + editor.#setScaleFactor(width, height); + return editor; + } + serialize() { + if (this.isEmpty()) { + return null; + } + const rect = this.getRect(0, 0); + const color = editor_editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); + return { + annotationType: util.AnnotationEditorType.INK, + color, + thickness: this.thickness, + opacity: this.opacity, + paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/stamp.js + + + + +class StampEditor extends editor_editor.AnnotationEditor { + #bitmap = null; + #bitmapId = null; + #bitmapPromise = null; + #bitmapUrl = null; + #bitmapFile = null; + #bitmapFileName = ""; + #canvas = null; + #observer = null; + #resizeTimeoutId = null; + #isSvg = false; + #hasBeenAddedInUndoStack = false; + static _type = "stamp"; + static _editorType = util.AnnotationEditorType.STAMP; + constructor(params) { + super({ + ...params, + name: "stampEditor" + }); + this.#bitmapUrl = params.bitmapUrl; + this.#bitmapFile = params.bitmapFile; + } + static initialize(l10n) { + editor_editor.AnnotationEditor.initialize(l10n); + } + static get supportedTypes() { + const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; + return (0,util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`)); + } + static get supportedTypesStr() { + return (0,util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(",")); + } + static isHandlingMimeForPasting(mime) { + return this.supportedTypes.includes(mime); + } + static paste(item, parent) { + parent.pasteEditor(util.AnnotationEditorType.STAMP, { + bitmapFile: item.getAsFile() + }); + } + #getBitmapFetched(data, fromId = false) { + if (!data) { + this.remove(); + return; + } + this.#bitmap = data.bitmap; + if (!fromId) { + this.#bitmapId = data.id; + this.#isSvg = data.isSvg; + } + if (data.file) { + this.#bitmapFileName = data.file.name; + } + this.#createCanvas(); + } + #getBitmapDone() { + this.#bitmapPromise = null; + this._uiManager.enableWaiting(false); + if (this.#canvas) { + this.div.focus(); + } + } + #getBitmap() { + if (this.#bitmapId) { + this._uiManager.enableWaiting(true); + this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapUrl) { + const url = this.#bitmapUrl; + this.#bitmapUrl = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapFile) { + const file = this.#bitmapFile; + this.#bitmapFile = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + const input = document.createElement("input"); + input.type = "file"; + input.accept = StampEditor.supportedTypesStr; + this.#bitmapPromise = new Promise(resolve => { + input.addEventListener("change", async () => { + if (!input.files || input.files.length === 0) { + this.remove(); + } else { + this._uiManager.enableWaiting(true); + const data = await this._uiManager.imageManager.getFromFile(input.files[0]); + this.#getBitmapFetched(data); + } + resolve(); + }); + input.addEventListener("cancel", () => { + this.remove(); + resolve(); + }); + }).finally(() => this.#getBitmapDone()); + input.click(); + } + remove() { + if (this.#bitmapId) { + this.#bitmap = null; + this._uiManager.imageManager.deleteId(this.#bitmapId); + this.#canvas?.remove(); + this.#canvas = null; + this.#observer?.disconnect(); + this.#observer = null; + if (this.#resizeTimeoutId) { + clearTimeout(this.#resizeTimeoutId); + this.#resizeTimeoutId = null; + } + } + super.remove(); + } + rebuild() { + if (!this.parent) { + if (this.#bitmapId) { + this.#getBitmap(); + } + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (this.#bitmapId) { + this.#getBitmap(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + onceAdded() { + this._isDraggable = true; + this.div.focus(); + } + isEmpty() { + return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile); + } + get isResizable() { + return true; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.hidden = true; + if (this.#bitmap) { + this.#createCanvas(); + } else { + this.#getBitmap(); + } + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + return this.div; + } + #createCanvas() { + const { + div + } = this; + let { + width, + height + } = this.#bitmap; + const [pageWidth, pageHeight] = this.pageDimensions; + const MAX_RATIO = 0.75; + if (this.width) { + width = this.width * pageWidth; + height = this.height * pageHeight; + } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { + const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); + width *= factor; + height *= factor; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); + this._uiManager.enableWaiting(false); + const canvas = this.#canvas = document.createElement("canvas"); + div.append(canvas); + div.hidden = false; + this.#drawBitmap(width, height); + this.#createObserver(); + if (!this.#hasBeenAddedInUndoStack) { + this.parent.addUndoableEditor(this); + this.#hasBeenAddedInUndoStack = true; + } + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + subtype: this.editorType, + data: { + action: "inserted_image" + } + } + }); + this.addAltTextButton(); + if (this.#bitmapFileName) { + canvas.setAttribute("aria-label", this.#bitmapFileName); + } + } + #setDimensions(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setDims(width, height); + if (this._initialOptions?.isCentered) { + this.center(); + } else { + this.fixAndSetPosition(); + } + this._initialOptions = null; + if (this.#resizeTimeoutId !== null) { + clearTimeout(this.#resizeTimeoutId); + } + const TIME_TO_WAIT = 200; + this.#resizeTimeoutId = setTimeout(() => { + this.#resizeTimeoutId = null; + this.#drawBitmap(width, height); + }, TIME_TO_WAIT); + } + #scaleBitmap(width, height) { + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + let newWidth = bitmapWidth; + let newHeight = bitmapHeight; + let bitmap = this.#bitmap; + while (newWidth > 2 * width || newHeight > 2 * height) { + const prevWidth = newWidth; + const prevHeight = newHeight; + if (newWidth > 2 * width) { + newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); + } + if (newHeight > 2 * height) { + newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); + } + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); + bitmap = offscreen.transferToImageBitmap(); + } + return bitmap; + } + #drawBitmap(width, height) { + width = Math.ceil(width); + height = Math.ceil(height); + const canvas = this.#canvas; + if (!canvas || canvas.width === width && canvas.height === height) { + return; + } + canvas.width = width; + canvas.height = height; + const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height); + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); + } + getImageForAltText() { + return this.#canvas; + } + #serializeBitmap(toUrl) { + if (toUrl) { + if (this.#isSvg) { + const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); + if (url) { + return url; + } + } + const canvas = document.createElement("canvas"); + ({ + width: canvas.width, + height: canvas.height + } = this.#bitmap); + const ctx = canvas.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0); + return canvas.toDataURL(); + } + if (this.#isSvg) { + const [pageWidth, pageHeight] = this.pageDimensions; + const width = Math.round(this.width * pageWidth * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const height = Math.round(this.height * pageHeight * display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); + return offscreen.transferToImageBitmap(); + } + return structuredClone(this.#bitmap); + } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.#setDimensions(rect.width, rect.height); + } + }); + this.#observer.observe(this.div); + } + static deserialize(data, parent, uiManager) { + if (data instanceof annotation_layer.StampAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + const { + rect, + bitmapUrl, + bitmapId, + isSvg, + accessibilityData + } = data; + if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { + editor.#bitmapId = bitmapId; + } else { + editor.#bitmapUrl = bitmapUrl; + } + editor.#isSvg = isSvg; + const [parentWidth, parentHeight] = editor.pageDimensions; + editor.width = (rect[2] - rect[0]) / parentWidth; + editor.height = (rect[3] - rect[1]) / parentHeight; + if (accessibilityData) { + editor.altTextData = accessibilityData; + } + return editor; + } + serialize(isForCopying = false, context = null) { + if (this.isEmpty()) { + return null; + } + const serialized = { + annotationType: util.AnnotationEditorType.STAMP, + bitmapId: this.#bitmapId, + pageIndex: this.pageIndex, + rect: this.getRect(0, 0), + rotation: this.rotation, + isSvg: this.#isSvg, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + serialized.bitmapUrl = this.#serializeBitmap(true); + serialized.accessibilityData = this.altTextData; + return serialized; + } + const { + decorative, + altText + } = this.altTextData; + if (!decorative && altText) { + serialized.accessibilityData = { + type: "Figure", + alt: altText + }; + } + if (context === null) { + return serialized; + } + context.stamps ||= new Map(); + const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; + if (!context.stamps.has(this.#bitmapId)) { + context.stamps.set(this.#bitmapId, { + area, + serialized + }); + serialized.bitmap = this.#serializeBitmap(false); + } else if (this.#isSvg) { + const prevData = context.stamps.get(this.#bitmapId); + if (area > prevData.area) { + prevData.area = area; + prevData.serialized.bitmap.close(); + prevData.serialized.bitmap = this.#serializeBitmap(false); + } + } + return serialized; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/annotation_editor_layer.js + + + + + + + +class AnnotationEditorLayer { + #accessibilityManager; + #allowClick = false; + #annotationLayer = null; + #boundPointerup = this.pointerup.bind(this); + #boundPointerUpAfterSelection = this.pointerUpAfterSelection.bind(this); + #boundPointerdown = this.pointerdown.bind(this); + #editorFocusTimeoutId = null; + #boundSelectionStart = this.selectionStart.bind(this); + #editors = new Map(); + #hadPointerDown = false; + #isCleaningUp = false; + #isDisabling = false; + #textLayer = null; + #uiManager; + static _initialized = false; + static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map(type => [type._editorType, type])); + constructor({ + uiManager, + pageIndex, + div, + accessibilityManager, + annotationLayer, + drawLayer, + textLayer, + viewport, + l10n + }) { + const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()]; + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n); + } + } + uiManager.registerEditorTypes(editorTypes); + this.#uiManager = uiManager; + this.pageIndex = pageIndex; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationLayer = annotationLayer; + this.viewport = viewport; + this.#textLayer = textLayer; + this.drawLayer = drawLayer; + this.#uiManager.addLayer(this); + } + get isEmpty() { + return this.#editors.size === 0; + } + updateToolbar(mode) { + this.#uiManager.updateToolbar(mode); + } + updateMode(mode = this.#uiManager.getMode()) { + this.#cleanup(); + switch (mode) { + case util.AnnotationEditorType.NONE: + this.disableTextSelection(); + this.togglePointerEvents(false); + this.disableClick(); + break; + case util.AnnotationEditorType.INK: + this.addInkEditorIfNeeded(false); + this.disableTextSelection(); + this.togglePointerEvents(true); + this.disableClick(); + break; + case util.AnnotationEditorType.HIGHLIGHT: + this.enableTextSelection(); + this.togglePointerEvents(false); + this.disableClick(); + break; + default: + this.disableTextSelection(); + this.togglePointerEvents(true); + this.enableClick(); + } + if (mode !== util.AnnotationEditorType.NONE) { + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); + } + this.div.hidden = false; + } + } + addInkEditorIfNeeded(isCommitting) { + if (this.#uiManager.getMode() !== util.AnnotationEditorType.INK) { + return; + } + if (!isCommitting) { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.setInBackground(); + return; + } + } + } + const editor = this.#createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }, false); + editor.setInBackground(); + } + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + } + addCommands(params) { + this.#uiManager.addCommands(params); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + enable() { + this.togglePointerEvents(true); + const annotationElementIds = new Set(); + for (const editor of this.#editors.values()) { + editor.enableEditing(); + if (editor.annotationElementId) { + annotationElementIds.add(editor.annotationElementId); + } + } + if (!this.#annotationLayer) { + return; + } + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + editable.hide(); + if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { + continue; + } + if (annotationElementIds.has(editable.data.id)) { + continue; + } + const editor = this.deserialize(editable); + if (!editor) { + continue; + } + this.addOrRebuild(editor); + editor.enableEditing(); + } + } + disable() { + this.#isDisabling = true; + this.togglePointerEvents(false); + const hiddenAnnotationIds = new Set(); + for (const editor of this.#editors.values()) { + editor.disableEditing(); + if (!editor.annotationElementId || editor.serialize() !== null) { + hiddenAnnotationIds.add(editor.annotationElementId); + continue; + } + this.getEditableAnnotation(editor.annotationElementId)?.show(); + editor.remove(); + } + if (this.#annotationLayer) { + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) { + continue; + } + editable.show(); + } + } + this.#cleanup(); + if (this.isEmpty) { + this.div.hidden = true; + } + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.remove(`${editorType._type}Editing`); + } + this.disableTextSelection(); + this.#isDisabling = false; + } + getEditableAnnotation(id) { + return this.#annotationLayer?.getEditableAnnotation(id) || null; + } + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive(); + if (currentActive === editor) { + return; + } + this.#uiManager.setActiveEditor(editor); + } + enableTextSelection() { + if (this.#textLayer?.div) { + document.addEventListener("selectstart", this.#boundSelectionStart); + } + } + disableTextSelection() { + if (this.#textLayer?.div) { + document.removeEventListener("selectstart", this.#boundSelectionStart); + } + } + enableClick() { + this.div.addEventListener("pointerdown", this.#boundPointerdown); + this.div.addEventListener("pointerup", this.#boundPointerup); + } + disableClick() { + this.div.removeEventListener("pointerdown", this.#boundPointerdown); + this.div.removeEventListener("pointerup", this.#boundPointerup); + } + attach(editor) { + this.#editors.set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { + this.#uiManager.removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + this.#editors.delete(editor.id); + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + if (!this.#isDisabling && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + this.#uiManager.removeEditor(editor); + editor.div.remove(); + editor.isAttachedToDOM = false; + if (!this.#isCleaningUp) { + this.addInkEditorIfNeeded(false); + } + } + changeParent(editor) { + if (editor.parent === this) { + return; + } + if (editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); + editor_editor.AnnotationEditor.deleteAnnotationElement(editor); + editor.annotationElementId = null; + } + this.attach(editor); + editor.parent?.detach(editor); + editor.setParent(this); + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } + } + add(editor) { + this.changeParent(editor); + this.#uiManager.addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + editor.fixAndSetPosition(); + editor.onceAdded(); + this.#uiManager.addToAnnotationStorage(editor); + } + moveEditorInDOM(editor) { + if (!editor.isAttachedToDOM) { + return; + } + const { + activeElement + } = document; + if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) { + editor._focusEventsAllowed = false; + this.#editorFocusTimeoutId = setTimeout(() => { + this.#editorFocusTimeoutId = null; + if (!editor.div.contains(document.activeElement)) { + editor.div.addEventListener("focusin", () => { + editor._focusEventsAllowed = true; + }, { + once: true + }); + activeElement.focus(); + } else { + editor._focusEventsAllowed = true; + } + }, 0); + } + editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); + } + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.parent ||= this; + editor.rebuild(); + } else { + this.add(editor); + } + } + addUndoableEditor(editor) { + const cmd = () => editor._uiManager.rebuild(editor); + const undo = () => { + editor.remove(); + }; + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + getNextId() { + return this.#uiManager.getId(); + } + get #currentEditorType() { + return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode()); + } + #createNewEditor(params) { + const editorType = this.#currentEditorType; + return editorType ? new editorType.prototype.constructor(params) : null; + } + canCreateNewEmptyEditor() { + return this.#currentEditorType?.canCreateNewEmptyEditor(); + } + pasteEditor(mode, params) { + this.#uiManager.updateToolbar(mode); + this.#uiManager.updateMode(mode); + const { + offsetX, + offsetY + } = this.#getCenterPoint(); + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: offsetX, + y: offsetY, + uiManager: this.#uiManager, + isCentered: true, + ...params + }); + if (editor) { + this.add(editor); + } + } + deserialize(data) { + return AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager) || null; + } + #createAndAddNewEditor(event, isCentered, data = {}) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: this.#uiManager, + isCentered, + ...data + }); + if (editor) { + this.add(editor); + } + return editor; + } + #getCenterPoint() { + const { + x, + y, + width, + height + } = this.div.getBoundingClientRect(); + const tlX = Math.max(0, x); + const tlY = Math.max(0, y); + const brX = Math.min(window.innerWidth, x + width); + const brY = Math.min(window.innerHeight, y + height); + const centerX = (tlX + brX) / 2 - x; + const centerY = (tlY + brY) / 2 - y; + const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; + return { + offsetX, + offsetY + }; + } + addNewEditor() { + this.#createAndAddNewEditor(this.#getCenterPoint(), true); + } + setSelected(editor) { + this.#uiManager.setSelected(editor); + } + toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + } + isSelected(editor) { + return this.#uiManager.isSelected(editor); + } + unselect(editor) { + this.#uiManager.unselect(editor); + } + selectionStart(_event) { + this.#textLayer?.div.addEventListener("pointerup", this.#boundPointerUpAfterSelection, { + once: true + }); + } + pointerUpAfterSelection(event) { + const selection = document.getSelection(); + if (selection.rangeCount === 0) { + return; + } + const range = selection.getRangeAt(0); + if (range.collapsed) { + return; + } + if (!this.#textLayer?.div.contains(range.commonAncestorContainer)) { + return; + } + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = this.#textLayer.div.getBoundingClientRect(); + const bboxes = range.getClientRects(); + let rotator; + switch (this.viewport.rotation) { + case 90: + rotator = (x, y, w, h) => ({ + x: (y - layerY) / parentHeight, + y: 1 - (x + w - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); + break; + case 180: + rotator = (x, y, w, h) => ({ + x: 1 - (x + w - layerX) / parentWidth, + y: 1 - (y + h - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; + case 270: + rotator = (x, y, w, h) => ({ + x: 1 - (y + h - layerY) / parentHeight, + y: (x - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); + break; + default: + rotator = (x, y, w, h) => ({ + x: (x - layerX) / parentWidth, + y: (y - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; + } + const boxes = []; + for (const { + x, + y, + width, + height + } of bboxes) { + if (width === 0 || height === 0) { + continue; + } + boxes.push(rotator(x, y, width, height)); + } + if (boxes.length !== 0) { + this.#createAndAddNewEditor(event, false, { + boxes + }); + } + selection.empty(); + } + pointerup(event) { + const { + isMac + } = util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!this.#hadPointerDown) { + return; + } + this.#hadPointerDown = false; + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + if (this.#uiManager.getMode() === util.AnnotationEditorType.STAMP) { + this.#uiManager.unselectAll(); + return; + } + this.#createAndAddNewEditor(event, false); + } + pointerdown(event) { + if (this.#uiManager.getMode() === util.AnnotationEditorType.HIGHLIGHT) { + this.enableTextSelection(); + } + if (this.#hadPointerDown) { + this.#hadPointerDown = false; + return; + } + const { + isMac + } = util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + this.#hadPointerDown = true; + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + } + findNewParent(editor, x, y) { + const layer = this.#uiManager.findParent(x, y); + if (layer === null || layer === this) { + return false; + } + layer.changeParent(editor); + return true; + } + destroy() { + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.commitOrRemove(); + this.#uiManager.setActiveEditor(null); + } + if (this.#editorFocusTimeoutId) { + clearTimeout(this.#editorFocusTimeoutId); + this.#editorFocusTimeoutId = null; + } + for (const editor of this.#editors.values()) { + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + this.#editors.clear(); + this.#uiManager.removeLayer(this); + } + #cleanup() { + this.#isCleaningUp = true; + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + this.#isCleaningUp = false; + } + render({ + viewport + }) { + this.viewport = viewport; + (0,display_utils.setLayerDimensions)(this.div, viewport); + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + } + this.updateMode(); + } + update({ + viewport + }) { + this.#uiManager.commitOrRemove(); + const oldRotation = this.viewport.rotation; + const rotation = viewport.rotation; + this.viewport = viewport; + (0,display_utils.setLayerDimensions)(this.div, { + rotation + }); + if (oldRotation !== rotation) { + for (const editor of this.#editors.values()) { + editor.rotate(rotation); + } + } + this.updateMode(); + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } +} + + +/***/ }), + +/***/ 97: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ColorPicker: () => (/* binding */ ColorPicker) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _tools_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(812); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); + + + +class ColorPicker { + #boundKeyDown = this.#keyDown.bind(this); + #button = null; + #buttonSwatch = null; + #defaultColor; + #dropdown = null; + #dropdownWasFromKeyboard = false; + #isMainColorPicker = false; + #eventBus; + #uiManager = null; + static get _keyboardManager() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_keyboardManager", new _tools_js__WEBPACK_IMPORTED_MODULE_1__.KeyboardManager([[["Escape", "mac+Escape"], ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], ColorPicker.prototype._moveToEnd]])); + } + constructor({ + editor = null, + uiManager = null + }) { + this.#isMainColorPicker = !editor; + this.#uiManager = editor?._uiManager || uiManager; + this.#eventBus = this.#uiManager._eventBus; + this.#defaultColor = editor?.color || this.#uiManager?.highlightColors.values().next().value || "#FFFF98"; + } + renderButton() { + const button = this.#button = document.createElement("button"); + button.className = "colorPicker"; + button.tabIndex = "0"; + button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"); + button.setAttribute("aria-haspopup", true); + button.addEventListener("click", this.#openDropdown.bind(this)); + const swatch = this.#buttonSwatch = document.createElement("span"); + swatch.className = "swatch"; + swatch.style.backgroundColor = this.#defaultColor; + button.append(swatch); + return button; + } + renderMainDropdown() { + const dropdown = this.#dropdown = this.#getDropdownRoot(_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR); + dropdown.setAttribute("aria-orientation", "horizontal"); + dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel"); + return dropdown; + } + #getDropdownRoot(paramType) { + const div = document.createElement("div"); + div.addEventListener("contextmenu", _display_utils_js__WEBPACK_IMPORTED_MODULE_2__.noContextMenu); + div.className = "dropdown"; + div.role = "listbox"; + div.setAttribute("aria-multiselectable", false); + div.setAttribute("aria-orientation", "vertical"); + div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"); + for (const [name, color] of this.#uiManager.highlightColors) { + const button = document.createElement("button"); + button.tabIndex = "0"; + button.role = "option"; + button.setAttribute("data-color", color); + button.title = name; + button.setAttribute("data-l10n-id", `pdfjs-editor-colorpicker-${name}`); + const swatch = document.createElement("span"); + button.append(swatch); + swatch.className = "swatch"; + swatch.style.backgroundColor = color; + button.setAttribute("aria-selected", color === this.#defaultColor); + button.addEventListener("click", this.#colorSelect.bind(this, paramType, color)); + div.append(button); + } + div.addEventListener("keydown", this.#boundKeyDown); + return div; + } + #colorSelect(type, color, event) { + event.stopPropagation(); + this.#eventBus.dispatch("switchannotationeditorparams", { + source: this, + type, + value: color + }); + } + _colorSelectFromKeyboard(event) { + const color = event.target.getAttribute("data-color"); + if (!color) { + return; + } + this.#colorSelect(color, event); + } + _moveToNext(event) { + if (event.target === this.#button) { + this.#dropdown.firstChild?.focus(); + return; + } + event.target.nextSibling?.focus(); + } + _moveToPrevious(event) { + event.target.previousSibling?.focus(); + } + _moveToBeginning() { + this.#dropdown.firstChild?.focus(); + } + _moveToEnd() { + this.#dropdown.lastChild?.focus(); + } + #keyDown(event) { + ColorPicker._keyboardManager.exec(this, event); + } + #openDropdown(event) { + if (this.#dropdown && !this.#dropdown.classList.contains("hidden")) { + this.hideDropdown(); + return; + } + this.#button.addEventListener("keydown", this.#boundKeyDown); + this.#dropdownWasFromKeyboard = event.detail === 0; + if (this.#dropdown) { + this.#dropdown.classList.remove("hidden"); + return; + } + const root = this.#dropdown = this.#getDropdownRoot(_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType.HIGHLIGHT_COLOR); + this.#button.append(root); + } + hideDropdown() { + this.#dropdown?.classList.add("hidden"); + } + _hideDropdownFromKeyboard() { + if (this.#isMainColorPicker || !this.#dropdown || this.#dropdown.classList.contains("hidden")) { + return; + } + this.hideDropdown(); + this.#button.removeEventListener("keydown", this.#boundKeyDown); + this.#button.focus({ + preventScroll: true, + focusVisible: this.#dropdownWasFromKeyboard + }); + } + updateColor(color) { + if (this.#buttonSwatch) { + this.#buttonSwatch.style.backgroundColor = color; + } + if (!this.#dropdown) { + return; + } + const i = this.#uiManager.highlightColors.values(); + for (const child of this.#dropdown.children) { + child.setAttribute("aria-selected", i.next().value === color); + } + } + destroy() { + this.#button?.remove(); + this.#button = null; + this.#buttonSwatch = null; + this.#dropdown?.remove(); + this.#dropdown = null; + } +} + + +/***/ }), + +/***/ 115: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + AnnotationEditor: () => (/* binding */ AnnotationEditor) +}); + +// EXTERNAL MODULE: ./src/display/editor/tools.js +var tools = __webpack_require__(812); +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/editor/alt_text.js + +class AltText { + #altText = ""; + #altTextDecorative = false; + #altTextButton = null; + #altTextTooltip = null; + #altTextTooltipTimeout = null; + #altTextWasFromKeyBoard = false; + #editor = null; + static _l10nPromise = null; + constructor(editor) { + this.#editor = editor; + } + static initialize(l10nPromise) { + AltText._l10nPromise ||= l10nPromise; + } + async render() { + const altText = this.#altTextButton = document.createElement("button"); + altText.className = "altText"; + const msg = await AltText._l10nPromise.get("pdfjs-editor-alt-text-button-label"); + altText.textContent = msg; + altText.setAttribute("aria-label", msg); + altText.tabIndex = "0"; + altText.addEventListener("contextmenu", display_utils.noContextMenu); + altText.addEventListener("pointerdown", event => event.stopPropagation()); + const onClick = event => { + event.preventDefault(); + this.#editor._uiManager.editAltText(this.#editor); + }; + altText.addEventListener("click", onClick, { + capture: true + }); + altText.addEventListener("keydown", event => { + if (event.target === altText && event.key === "Enter") { + this.#altTextWasFromKeyBoard = true; + onClick(event); + } + }); + await this.#setState(); + return altText; + } + finish() { + if (!this.#altTextButton) { + return; + } + this.#altTextButton.focus({ + focusVisible: this.#altTextWasFromKeyBoard + }); + this.#altTextWasFromKeyBoard = false; + } + get data() { + return { + altText: this.#altText, + decorative: this.#altTextDecorative + }; + } + set data({ + altText, + decorative + }) { + if (this.#altText === altText && this.#altTextDecorative === decorative) { + return; + } + this.#altText = altText; + this.#altTextDecorative = decorative; + this.#setState(); + } + toggle(enabled = false) { + if (!this.#altTextButton) { + return; + } + if (!enabled && this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextButton.disabled = !enabled; + } + destroy() { + this.#altTextButton?.remove(); + this.#altTextButton = null; + this.#altTextTooltip = null; + } + async #setState() { + const button = this.#altTextButton; + if (!button) { + return; + } + if (!this.#altText && !this.#altTextDecorative) { + button.classList.remove("done"); + this.#altTextTooltip?.remove(); + return; + } + button.classList.add("done"); + AltText._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then(msg => { + button.setAttribute("aria-label", msg); + }); + let tooltip = this.#altTextTooltip; + if (!tooltip) { + this.#altTextTooltip = tooltip = document.createElement("span"); + tooltip.className = "tooltip"; + tooltip.setAttribute("role", "tooltip"); + const id = tooltip.id = `alt-text-tooltip-${this.#editor.id}`; + button.setAttribute("aria-describedby", id); + const DELAY_TO_SHOW_TOOLTIP = 100; + button.addEventListener("mouseenter", () => { + this.#altTextTooltipTimeout = setTimeout(() => { + this.#altTextTooltipTimeout = null; + this.#altTextTooltip.classList.add("show"); + this.#editor._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + subtype: this.#editor.editorType, + data: { + action: "alt_text_tooltip" + } + } + }); + }, DELAY_TO_SHOW_TOOLTIP); + }); + button.addEventListener("mouseleave", () => { + if (this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextTooltip?.classList.remove("show"); + }); + } + tooltip.innerText = this.#altTextDecorative ? await AltText._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : this.#altText; + if (!tooltip.parentNode) { + button.append(tooltip); + } + const element = this.#editor.getImageForAltText(); + element?.setAttribute("aria-describedby", tooltip.id); + } +} + +;// CONCATENATED MODULE: ./src/display/editor/toolbar.js + +class EditorToolbar { + #toolbar = null; + #colorPicker = null; + #editor; + #buttons = null; + constructor(editor) { + this.#editor = editor; + } + render() { + const editToolbar = this.#toolbar = document.createElement("div"); + editToolbar.className = "editToolbar"; + editToolbar.addEventListener("contextmenu", display_utils.noContextMenu); + editToolbar.addEventListener("pointerdown", EditorToolbar.#pointerDown); + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + const position = this.#editor.toolbarPosition; + if (position) { + const { + style + } = editToolbar; + const x = this.#editor._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; + } + this.#addDeleteButton(); + return editToolbar; + } + static #pointerDown(e) { + e.stopPropagation(); + } + #focusIn(e) { + this.#editor._focusEventsAllowed = false; + e.preventDefault(); + e.stopPropagation(); + } + #focusOut(e) { + this.#editor._focusEventsAllowed = true; + e.preventDefault(); + e.stopPropagation(); + } + #addListenersToElement(element) { + element.addEventListener("focusin", this.#focusIn.bind(this), { + capture: true + }); + element.addEventListener("focusout", this.#focusOut.bind(this), { + capture: true + }); + element.addEventListener("contextmenu", display_utils.noContextMenu); + } + hide() { + this.#toolbar.classList.add("hidden"); + this.#colorPicker?.hideDropdown(); + } + show() { + this.#toolbar.classList.remove("hidden"); + } + #addDeleteButton() { + const button = document.createElement("button"); + button.className = "delete"; + button.tabIndex = 0; + button.setAttribute("data-l10n-id", `pdfjs-editor-remove-${this.#editor.editorType}-button`); + this.#addListenersToElement(button); + button.addEventListener("click", e => { + this.#editor._uiManager.delete(); + }); + this.#buttons.append(button); + } + get #divider() { + const divider = document.createElement("div"); + divider.className = "divider"; + return divider; + } + addAltTextButton(button) { + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); + } + addColorPicker(colorPicker) { + this.#colorPicker = colorPicker; + const button = colorPicker.renderButton(); + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); + } + remove() { + this.#toolbar.remove(); + this.#colorPicker?.destroy(); + this.#colorPicker = null; + } +} + +;// CONCATENATED MODULE: ./src/display/editor/editor.js + + + + + +class AnnotationEditor { + #allResizerDivs = null; + #altText = null; + #keepAspectRatio = false; + #resizersDiv = null; + #savedDimensions = null; + #boundFocusin = this.focusin.bind(this); + #boundFocusout = this.focusout.bind(this); + #editToolbar = null; + #focusedResizerName = ""; + #hasBeenClicked = false; + #isEditing = false; + #isInEditMode = false; + #isResizerEnabledForKeyboard = false; + #moveInDOMTimeout = null; + _initialOptions = Object.create(null); + _uiManager = null; + _focusEventsAllowed = true; + _l10nPromise = null; + #isDraggable = false; + #zIndex = AnnotationEditor._zIndex++; + static _borderLineWidth = -1; + static _colorManager = new tools.ColorManager(); + static _zIndex = 1; + static get _resizerKeyboardManager() { + const resize = AnnotationEditor.prototype._resizeWithKeyboard; + const small = tools.AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = tools.AnnotationEditorUIManager.TRANSLATE_BIG; + return (0,util.shadow)(this, "_resizerKeyboardManager", new tools.KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { + args: [-small, 0] + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { + args: [-big, 0] + }], [["ArrowRight", "mac+ArrowRight"], resize, { + args: [small, 0] + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { + args: [big, 0] + }], [["ArrowUp", "mac+ArrowUp"], resize, { + args: [0, -small] + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { + args: [0, -big] + }], [["ArrowDown", "mac+ArrowDown"], resize, { + args: [0, small] + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { + args: [0, big] + }], [["Escape", "mac+Escape"], AnnotationEditor.prototype._stopResizingWithKeyboard]])); + } + constructor(parameters) { + if (this.constructor === AnnotationEditor) { + (0,util.unreachable)("Cannot initialize AnnotationEditor."); + } + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + this._uiManager = parameters.uiManager; + this.annotationElementId = null; + this._willKeepAspectRatio = false; + this._initialOptions.isCentered = parameters.isCentered; + this._structTreeParentId = null; + const { + rotation, + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = this.parent.viewport; + this.rotation = rotation; + this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; + this.pageDimensions = [pageWidth, pageHeight]; + this.pageTranslation = [pageX, pageY]; + const [width, height] = this.parentDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.isAttachedToDOM = false; + this.deleted = false; + } + get editorType() { + return Object.getPrototypeOf(this).constructor._type; + } + static get _defaultLineColor() { + return (0,util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + } + static deleteAnnotationElement(editor) { + const fakeEditor = new FakeEditor({ + id: editor.parent.getNextId(), + parent: editor.parent, + uiManager: editor._uiManager + }); + fakeEditor.annotationElementId = editor.annotationElementId; + fakeEditor.deleted = true; + fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); + } + static initialize(l10n, options = null) { + AnnotationEditor._l10nPromise ||= new Map(["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-resizer-label-topLeft", "pdfjs-editor-resizer-label-topMiddle", "pdfjs-editor-resizer-label-topRight", "pdfjs-editor-resizer-label-middleRight", "pdfjs-editor-resizer-label-bottomRight", "pdfjs-editor-resizer-label-bottomMiddle", "pdfjs-editor-resizer-label-bottomLeft", "pdfjs-editor-resizer-label-middleLeft"].map(str => [str, l10n.get(str.replaceAll(/([A-Z])/g, c => `-${c.toLowerCase()}`))])); + if (options?.strings) { + for (const str of options.strings) { + AnnotationEditor._l10nPromise.set(str, l10n.get(str)); + } + } + if (AnnotationEditor._borderLineWidth !== -1) { + return; + } + const style = getComputedStyle(document.documentElement); + AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; + } + static updateDefaultParams(_type, _value) {} + static get defaultPropertiesToUpdate() { + return []; + } + static isHandlingMimeForPasting(mime) { + return false; + } + static paste(item, parent) { + (0,util.unreachable)("Not implemented"); + } + get propertiesToUpdate() { + return []; + } + get _isDraggable() { + return this.#isDraggable; + } + set _isDraggable(value) { + this.#isDraggable = value; + this.div?.classList.toggle("draggable", value); + } + get isEnterHandled() { + return true; + } + center() { + const [pageWidth, pageHeight] = this.pageDimensions; + switch (this.parentRotation) { + case 90: + this.x -= this.height * pageHeight / (pageWidth * 2); + this.y += this.width * pageWidth / (pageHeight * 2); + break; + case 180: + this.x += this.width / 2; + this.y += this.height / 2; + break; + case 270: + this.x += this.height * pageHeight / (pageWidth * 2); + this.y -= this.width * pageWidth / (pageHeight * 2); + break; + default: + this.x -= this.width / 2; + this.y -= this.height / 2; + break; + } + this.fixAndSetPosition(); + } + addCommands(params) { + this._uiManager.addCommands(params); + } + get currentLayer() { + return this._uiManager.currentLayer; + } + setInBackground() { + this.div.style.zIndex = 0; + } + setInForeground() { + this.div.style.zIndex = this.#zIndex; + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } else { + this.#stopResizing(); + } + this.parent = parent; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.#hasBeenClicked) { + this.parent.setSelected(this); + } else { + this.#hasBeenClicked = false; + } + } + focusout(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.isAttachedToDOM) { + return; + } + const target = event.relatedTarget; + if (target?.closest(`#${this.id}`)) { + return; + } + event.preventDefault(); + if (!this.parent?.isMultipleSelection) { + this.commitOrRemove(); + } + } + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + } + commit() { + this.addToAnnotationStorage(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.fixAndSetPosition(); + } + #translate([width, height], x, y) { + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this.fixAndSetPosition(); + } + translate(x, y) { + this.#translate(this.parentDimensions, x, y); + } + translateInPage(x, y) { + this.#translate(this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + drag(tx, ty) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.x += tx / parentWidth; + this.y += ty / parentHeight; + if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { + const { + x, + y + } = this.div.getBoundingClientRect(); + if (this.parent.findNewParent(this, x, y)) { + this.x -= Math.floor(this.x); + this.y -= Math.floor(this.y); + } + } + let { + x, + y + } = this; + const [bx, by] = this.#getBaseTranslation(); + x += bx; + y += by; + this.div.style.left = `${(100 * x).toFixed(2)}%`; + this.div.style.top = `${(100 * y).toFixed(2)}%`; + this.div.scrollIntoView({ + block: "nearest" + }); + } + #getBaseTranslation() { + const [parentWidth, parentHeight] = this.parentDimensions; + const { + _borderLineWidth + } = AnnotationEditor; + const x = _borderLineWidth / parentWidth; + const y = _borderLineWidth / parentHeight; + switch (this.rotation) { + case 90: + return [-x, y]; + case 180: + return [x, y]; + case 270: + return [x, -y]; + default: + return [-x, -y]; + } + } + fixAndSetPosition(rotation = this.rotation) { + const [pageWidth, pageHeight] = this.pageDimensions; + let { + x, + y, + width, + height + } = this; + width *= pageWidth; + height *= pageHeight; + x *= pageWidth; + y *= pageHeight; + switch (rotation) { + case 0: + x = Math.max(0, Math.min(pageWidth - width, x)); + y = Math.max(0, Math.min(pageHeight - height, y)); + break; + case 90: + x = Math.max(0, Math.min(pageWidth - height, x)); + y = Math.min(pageHeight, Math.max(width, y)); + break; + case 180: + x = Math.min(pageWidth, Math.max(width, x)); + y = Math.min(pageHeight, Math.max(height, y)); + break; + case 270: + x = Math.min(pageWidth, Math.max(height, x)); + y = Math.max(0, Math.min(pageHeight - width, y)); + break; + } + this.x = x /= pageWidth; + this.y = y /= pageHeight; + const [bx, by] = this.#getBaseTranslation(); + x += bx; + y += by; + const { + style + } = this.div; + style.left = `${(100 * x).toFixed(2)}%`; + style.top = `${(100 * y).toFixed(2)}%`; + this.moveInDOM(); + } + static #rotatePoint(x, y, angle) { + switch (angle) { + case 90: + return [y, -x]; + case 180: + return [-x, -y]; + case 270: + return [-y, x]; + default: + return [x, y]; + } + } + screenToPageTranslation(x, y) { + return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); + } + pageTranslationToScreen(x, y) { + return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); + } + #getRotationMatrix(rotation) { + switch (rotation) { + case 90: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; + } + case 180: + return [-1, 0, 0, -1]; + case 270: + { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; + } + default: + return [1, 0, 0, 1]; + } + } + get parentScale() { + return this._uiManager.viewParameters.realScale; + } + get parentRotation() { + return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; + } + get parentDimensions() { + const { + parentScale, + pageDimensions: [pageWidth, pageHeight] + } = this; + const scaledWidth = pageWidth * parentScale; + const scaledHeight = pageHeight * parentScale; + return util.FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; + } + setDims(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; + if (!this.#keepAspectRatio) { + this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; + } + } + fixDims() { + const { + style + } = this.div; + const { + height, + width + } = style; + const widthPercent = width.endsWith("%"); + const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); + if (widthPercent && heightPercent) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + if (!widthPercent) { + style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; + } + if (!this.#keepAspectRatio && !heightPercent) { + style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; + } + } + getInitialTranslation() { + return [0, 0]; + } + #createResizers() { + if (this.#resizersDiv) { + return; + } + this.#resizersDiv = document.createElement("div"); + this.#resizersDiv.classList.add("resizers"); + const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; + for (const name of classes) { + const div = document.createElement("div"); + this.#resizersDiv.append(div); + div.classList.add("resizer", name); + div.setAttribute("data-resizer-name", name); + div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name)); + div.addEventListener("contextmenu", display_utils.noContextMenu); + div.tabIndex = -1; + } + this.div.prepend(this.#resizersDiv); + } + #resizerPointerdown(name, event) { + event.preventDefault(); + const { + isMac + } = util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#altText?.toggle(false); + const boundResizerPointermove = this.#resizerPointermove.bind(this, name); + const savedDraggable = this._isDraggable; + this._isDraggable = false; + const pointerMoveOptions = { + passive: true, + capture: true + }; + this.parent.togglePointerEvents(false); + window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const savedParentCursor = this.parent.div.style.cursor; + const savedCursor = this.div.style.cursor; + this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; + const pointerUpCallback = () => { + this.parent.togglePointerEvents(true); + this.#altText?.toggle(true); + this._isDraggable = savedDraggable; + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("blur", pointerUpCallback); + window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + this.parent.div.style.cursor = savedParentCursor; + this.div.style.cursor = savedCursor; + this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight); + }; + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("blur", pointerUpCallback); + } + #addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight) { + const newX = this.x; + const newY = this.y; + const newWidth = this.width; + const newHeight = this.height; + if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { + return; + } + this.addCommands({ + cmd: () => { + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + }, + undo: () => { + this.width = savedWidth; + this.height = savedHeight; + this.x = savedX; + this.y = savedY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); + this.fixAndSetPosition(); + }, + mustExec: true + }); + } + #resizerPointermove(name, event) { + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; + const round = x => Math.round(x * 10000) / 10000; + const rotationMatrix = this.#getRotationMatrix(this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation); + const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; + let getPoint; + let getOpposite; + let isDiagonal = false; + let isHorizontal = false; + switch (name) { + case "topLeft": + isDiagonal = true; + getPoint = (w, h) => [0, 0]; + getOpposite = (w, h) => [w, h]; + break; + case "topMiddle": + getPoint = (w, h) => [w / 2, 0]; + getOpposite = (w, h) => [w / 2, h]; + break; + case "topRight": + isDiagonal = true; + getPoint = (w, h) => [w, 0]; + getOpposite = (w, h) => [0, h]; + break; + case "middleRight": + isHorizontal = true; + getPoint = (w, h) => [w, h / 2]; + getOpposite = (w, h) => [0, h / 2]; + break; + case "bottomRight": + isDiagonal = true; + getPoint = (w, h) => [w, h]; + getOpposite = (w, h) => [0, 0]; + break; + case "bottomMiddle": + getPoint = (w, h) => [w / 2, h]; + getOpposite = (w, h) => [w / 2, 0]; + break; + case "bottomLeft": + isDiagonal = true; + getPoint = (w, h) => [0, h]; + getOpposite = (w, h) => [w, 0]; + break; + case "middleLeft": + isHorizontal = true; + getPoint = (w, h) => [0, h / 2]; + getOpposite = (w, h) => [w, h / 2]; + break; + } + const point = getPoint(savedWidth, savedHeight); + const oppositePoint = getOpposite(savedWidth, savedHeight); + let transfOppositePoint = transf(...oppositePoint); + const oppositeX = round(savedX + transfOppositePoint[0]); + const oppositeY = round(savedY + transfOppositePoint[1]); + let ratioX = 1; + let ratioY = 1; + let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); + [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); + if (isDiagonal) { + const oldDiag = Math.hypot(savedWidth, savedHeight); + ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + } else if (isHorizontal) { + ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; + } else { + ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; + } + const newWidth = round(savedWidth * ratioX); + const newHeight = round(savedHeight * ratioY); + transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); + const newX = oppositeX - transfOppositePoint[0]; + const newY = oppositeY - transfOppositePoint[1]; + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + } + altTextFinish() { + this.#altText?.finish(); + } + async addEditToolbar() { + if (this.#editToolbar || this.#isInEditMode) { + return this.#editToolbar; + } + this.#editToolbar = new EditorToolbar(this); + this.div.append(this.#editToolbar.render()); + if (this.#altText) { + this.#editToolbar.addAltTextButton(await this.#altText.render()); + } + return this.#editToolbar; + } + removeEditToolbar() { + if (!this.#editToolbar) { + return; + } + this.#editToolbar.remove(); + this.#editToolbar = null; + this.#altText?.destroy(); + } + getClientDimensions() { + return this.div.getBoundingClientRect(); + } + async addAltTextButton() { + if (this.#altText) { + return; + } + AltText.initialize(AnnotationEditor._l10nPromise); + this.#altText = new AltText(this); + await this.addEditToolbar(); + } + get altTextData() { + return this.#altText?.data; + } + set altTextData(data) { + if (!this.#altText) { + return; + } + this.#altText.data = data; + } + render() { + this.div = document.createElement("div"); + this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + this.div.className = this.name; + this.div.setAttribute("id", this.id); + this.div.setAttribute("tabIndex", 0); + this.setInForeground(); + this.div.addEventListener("focusin", this.#boundFocusin); + this.div.addEventListener("focusout", this.#boundFocusout); + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.parentRotation % 180 !== 0) { + this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; + this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + } + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + (0,tools.bindEvents)(this, this.div, ["pointerdown"]); + return this.div; + } + pointerdown(event) { + const { + isMac + } = util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + this.#hasBeenClicked = true; + if (this._isDraggable) { + this.#setUpDragSession(event); + return; + } + this.#selectOnPointerEvent(event); + } + #selectOnPointerEvent(event) { + const { + isMac + } = util.FeatureTest.platform; + if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); + } + } + #setUpDragSession(event) { + const isSelected = this._uiManager.isSelected(this); + this._uiManager.setUpDragSession(); + let pointerMoveOptions, pointerMoveCallback; + if (isSelected) { + pointerMoveOptions = { + passive: true, + capture: true + }; + pointerMoveCallback = e => { + const [tx, ty] = this.screenToPageTranslation(e.movementX, e.movementY); + this._uiManager.dragSelectedEditors(tx, ty); + }; + window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); + } + const pointerUpCallback = () => { + window.removeEventListener("pointerup", pointerUpCallback); + window.removeEventListener("blur", pointerUpCallback); + if (isSelected) { + window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); + } + this.#hasBeenClicked = false; + if (!this._uiManager.endDragSession()) { + this.#selectOnPointerEvent(event); + } + }; + window.addEventListener("pointerup", pointerUpCallback); + window.addEventListener("blur", pointerUpCallback); + } + moveInDOM() { + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + } + this.#moveInDOMTimeout = setTimeout(() => { + this.#moveInDOMTimeout = null; + this.parent?.moveEditorInDOM(this); + }, 0); + } + _setParentAndPosition(parent, x, y) { + parent.changeParent(this); + this.x = x; + this.y = y; + this.fixAndSetPosition(); + } + getRect(tx, ty, rotation = this.rotation) { + const scale = this.parentScale; + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const shiftX = tx / scale; + const shiftY = ty / scale; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + switch (rotation) { + case 0: + return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; + case 90: + return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; + case 180: + return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; + case 270: + return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; + default: + throw new Error("Invalid rotation"); + } + } + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1; + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height]; + case 90: + return [x1, pageHeight - y1, height, width]; + case 180: + return [x2, pageHeight - y1, width, height]; + case 270: + return [x2, pageHeight - y2, height, width]; + default: + throw new Error("Invalid rotation"); + } + } + onceAdded() {} + isEmpty() { + return false; + } + enableEditMode() { + this.#isInEditMode = true; + } + disableEditMode() { + this.#isInEditMode = false; + } + isInEditMode() { + return this.#isInEditMode; + } + shouldGetKeyboardEvents() { + return this.#isResizerEnabledForKeyboard; + } + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + } + rebuild() { + this.div?.addEventListener("focusin", this.#boundFocusin); + this.div?.addEventListener("focusout", this.#boundFocusout); + } + rotate(_angle) {} + serialize(isForCopying = false, context = null) { + (0,util.unreachable)("An editor must be serializable"); + } + static deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager + }); + editor.rotation = data.rotation; + const [pageWidth, pageHeight] = editor.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + } + remove() { + this.div.removeEventListener("focusin", this.#boundFocusin); + this.div.removeEventListener("focusout", this.#boundFocusout); + if (!this.isEmpty()) { + this.commit(); + } + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + this.#moveInDOMTimeout = null; + } + this.#stopResizing(); + this.removeEditToolbar(); + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + this.#createResizers(); + this.#resizersDiv.classList.remove("hidden"); + (0,tools.bindEvents)(this, this.div, ["keydown"]); + } + } + get toolbarPosition() { + return null; + } + keydown(event) { + if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { + return; + } + this._uiManager.setSelected(this); + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + const children = this.#resizersDiv.children; + if (!this.#allResizerDivs) { + this.#allResizerDivs = Array.from(children); + const boundResizerKeydown = this.#resizerKeydown.bind(this); + const boundResizerBlur = this.#resizerBlur.bind(this); + for (const div of this.#allResizerDivs) { + const name = div.getAttribute("data-resizer-name"); + div.setAttribute("role", "spinbutton"); + div.addEventListener("keydown", boundResizerKeydown); + div.addEventListener("blur", boundResizerBlur); + div.addEventListener("focus", this.#resizerFocus.bind(this, name)); + AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => div.setAttribute("aria-label", msg)); + } + } + const first = this.#allResizerDivs[0]; + let firstPosition = 0; + for (const div of children) { + if (div === first) { + break; + } + firstPosition++; + } + const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4); + if (nextFirstPosition !== firstPosition) { + if (nextFirstPosition < firstPosition) { + for (let i = 0; i < firstPosition - nextFirstPosition; i++) { + this.#resizersDiv.append(this.#resizersDiv.firstChild); + } + } else if (nextFirstPosition > firstPosition) { + for (let i = 0; i < nextFirstPosition - firstPosition; i++) { + this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild); + } + } + let i = 0; + for (const child of children) { + const div = this.#allResizerDivs[i++]; + const name = div.getAttribute("data-resizer-name"); + AnnotationEditor._l10nPromise.get(`pdfjs-editor-resizer-label-${name}`).then(msg => child.setAttribute("aria-label", msg)); + } + } + this.#setResizerTabIndex(0); + this.#isResizerEnabledForKeyboard = true; + this.#resizersDiv.firstChild.focus({ + focusVisible: true + }); + event.preventDefault(); + event.stopImmediatePropagation(); + } + #resizerKeydown(event) { + AnnotationEditor._resizerKeyboardManager.exec(this, event); + } + #resizerBlur(event) { + if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) { + this.#stopResizing(); + } + } + #resizerFocus(name) { + this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : ""; + } + #setResizerTabIndex(value) { + if (!this.#allResizerDivs) { + return; + } + for (const div of this.#allResizerDivs) { + div.tabIndex = value; + } + } + _resizeWithKeyboard(x, y) { + if (!this.#isResizerEnabledForKeyboard) { + return; + } + this.#resizerPointermove(this.#focusedResizerName, { + movementX: x, + movementY: y + }); + } + #stopResizing() { + this.#isResizerEnabledForKeyboard = false; + this.#setResizerTabIndex(-1); + if (this.#savedDimensions) { + const { + savedX, + savedY, + savedWidth, + savedHeight + } = this.#savedDimensions; + this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight); + this.#savedDimensions = null; + } + } + _stopResizingWithKeyboard() { + this.#stopResizing(); + this.div.focus(); + } + select() { + this.makeResizable(); + this.div?.classList.add("selectedEditor"); + if (!this.#editToolbar) { + this.addEditToolbar().then(() => { + if (this.div?.classList.contains("selectedEditor")) { + this.#editToolbar?.show(); + } + }); + return; + } + this.#editToolbar?.show(); + } + unselect() { + this.#resizersDiv?.classList.add("hidden"); + this.div?.classList.remove("selectedEditor"); + if (this.div?.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus(); + } + this.#editToolbar?.hide(); + } + updateParams(type, value) {} + disableEditing() {} + enableEditing() {} + enterInEditMode() {} + getImageForAltText() { + return null; + } + get contentDiv() { + return this.div; + } + get isEditing() { + return this.#isEditing; + } + set isEditing(value) { + this.#isEditing = value; + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + setAspectRatio(width, height) { + this.#keepAspectRatio = true; + const aspectRatio = width / height; + const { + style + } = this.div; + style.aspectRatio = aspectRatio; + style.height = "auto"; + } + static get MIN_SIZE() { + return 16; + } + static canCreateNewEmptyEditor() { + return true; + } +} +class FakeEditor extends AnnotationEditor { + constructor(params) { + super(params); + this.annotationElementId = params.annotationElementId; + this.deleted = true; + } + serialize() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex + }; + } +} + + +/***/ }), + +/***/ 405: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Outliner: () => (/* binding */ Outliner) +/* harmony export */ }); +class Outliner { + #box; + #verticalEdges = []; + #intervals = []; + constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { + let minX = Infinity; + let maxX = -Infinity; + let minY = Infinity; + let maxY = -Infinity; + const NUMBER_OF_DIGITS = 4; + const EPSILON = 10 ** -NUMBER_OF_DIGITS; + for (const { + x, + y, + width, + height + } of boxes) { + const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON; + const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON; + const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON; + const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON; + const left = [x1, y1, y2, true]; + const right = [x2, y1, y2, false]; + this.#verticalEdges.push(left, right); + minX = Math.min(minX, x1); + maxX = Math.max(maxX, x2); + minY = Math.min(minY, y1); + maxY = Math.max(maxY, y2); + } + const bboxWidth = maxX - minX + 2 * innerMargin; + const bboxHeight = maxY - minY + 2 * innerMargin; + const shiftedMinX = minX - innerMargin; + const shiftedMinY = minY - innerMargin; + const lastEdge = this.#verticalEdges.at(isLTR ? -1 : -2); + const lastPoint = [lastEdge[0], lastEdge[2]]; + for (const edge of this.#verticalEdges) { + const [x, y1, y2] = edge; + edge[0] = (x - shiftedMinX) / bboxWidth; + edge[1] = (y1 - shiftedMinY) / bboxHeight; + edge[2] = (y2 - shiftedMinY) / bboxHeight; + } + this.#box = { + x: shiftedMinX, + y: shiftedMinY, + width: bboxWidth, + height: bboxHeight, + lastPoint + }; + } + getOutlines() { + this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); + const outlineVerticalEdges = []; + for (const edge of this.#verticalEdges) { + if (edge[3]) { + outlineVerticalEdges.push(...this.#breakEdge(edge)); + this.#insert(edge); + } else { + this.#remove(edge); + outlineVerticalEdges.push(...this.#breakEdge(edge)); + } + } + return this.#getOutlines(outlineVerticalEdges); + } + #getOutlines(outlineVerticalEdges) { + const edges = []; + const allEdges = new Set(); + for (const edge of outlineVerticalEdges) { + const [x, y1, y2] = edge; + edges.push([x, y1, edge], [x, y2, edge]); + } + edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]); + for (let i = 0, ii = edges.length; i < ii; i += 2) { + const edge1 = edges[i][2]; + const edge2 = edges[i + 1][2]; + edge1.push(edge2); + edge2.push(edge1); + allEdges.add(edge1); + allEdges.add(edge2); + } + const outlines = []; + let outline; + while (allEdges.size > 0) { + const edge = allEdges.values().next().value; + let [x, y1, y2, edge1, edge2] = edge; + allEdges.delete(edge); + let lastPointX = x; + let lastPointY = y1; + outline = [x, y2]; + outlines.push(outline); + while (true) { + let e; + if (allEdges.has(edge1)) { + e = edge1; + } else if (allEdges.has(edge2)) { + e = edge2; + } else { + break; + } + allEdges.delete(e); + [x, y1, y2, edge1, edge2] = e; + if (lastPointX !== x) { + outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2); + lastPointX = x; + } + lastPointY = lastPointY === y1 ? y2 : y1; + } + outline.push(lastPointX, lastPointY); + } + return { + outlines, + box: this.#box + }; + } + #binarySearch(y) { + const array = this.#intervals; + let start = 0; + let end = array.length - 1; + while (start <= end) { + const middle = start + end >> 1; + const y1 = array[middle][0]; + if (y1 === y) { + return middle; + } + if (y1 < y) { + start = middle + 1; + } else { + end = middle - 1; + } + } + return end + 1; + } + #insert([, y1, y2]) { + const index = this.#binarySearch(y1); + this.#intervals.splice(index, 0, [y1, y2]); + } + #remove([, y1, y2]) { + const index = this.#binarySearch(y1); + for (let i = index; i < this.#intervals.length; i++) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + for (let i = index - 1; i >= 0; i--) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + } + #breakEdge(edge) { + const [x, y1, y2] = edge; + const results = [[x, y1, y2]]; + const index = this.#binarySearch(y2); + for (let i = 0; i < index; i++) { + const [start, end] = this.#intervals[i]; + for (let j = 0, jj = results.length; j < jj; j++) { + const [, y3, y4] = results[j]; + if (end <= y3 || y4 <= start) { + continue; + } + if (y3 >= start) { + if (y4 > end) { + results[j][1] = end; + } else { + if (jj === 1) { + return []; + } + results.splice(j, 1); + j--; + jj--; + } + continue; + } + results[j][2] = start; + if (y4 > end) { + results.push([x, end, y4]); + } + } + } + return results; + } +} + + +/***/ }), + +/***/ 812: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AnnotationEditorUIManager: () => (/* binding */ AnnotationEditorUIManager), +/* harmony export */ ColorManager: () => (/* binding */ ColorManager), +/* harmony export */ KeyboardManager: () => (/* binding */ KeyboardManager), +/* harmony export */ bindEvents: () => (/* binding */ bindEvents), +/* harmony export */ opacityToHex: () => (/* binding */ opacityToHex) +/* harmony export */ }); +/* unused harmony export CommandManager */ +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(473); + + +function bindEvents(obj, element, names) { + for (const name of names) { + element.addEventListener(name, obj[name].bind(obj)); + } +} +function opacityToHex(opacity) { + return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); +} +class IdManager { + #id = 0; + getId() { + return `${_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorPrefix}${this.#id++}`; + } +} +class ImageManager { + #baseId = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.getUuid)(); + #id = 0; + #cache = null; + static get _isSVGFittingCanvas() { + const svg = `data:image/svg+xml;charset=UTF-8,`; + const canvas = new OffscreenCanvas(1, 3); + const ctx = canvas.getContext("2d"); + const image = new Image(); + image.src = svg; + const promise = image.decode().then(() => { + ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); + return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; + }); + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_isSVGFittingCanvas", promise); + } + async #get(key, rawData) { + this.#cache ||= new Map(); + let data = this.#cache.get(key); + if (data === null) { + return null; + } + if (data?.bitmap) { + data.refCounter += 1; + return data; + } + try { + data ||= { + bitmap: null, + id: `image_${this.#baseId}_${this.#id++}`, + refCounter: 0, + isSvg: false + }; + let image; + if (typeof rawData === "string") { + data.url = rawData; + image = await (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.fetchData)(rawData, "blob"); + } else { + image = data.file = rawData; + } + if (image.type === "image/svg+xml") { + const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas; + const fileReader = new FileReader(); + const imageElement = new Image(); + const imagePromise = new Promise((resolve, reject) => { + imageElement.onload = () => { + data.bitmap = imageElement; + data.isSvg = true; + resolve(); + }; + fileReader.onload = async () => { + const url = data.svgUrl = fileReader.result; + imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url; + }; + imageElement.onerror = fileReader.onerror = reject; + }); + fileReader.readAsDataURL(image); + await imagePromise; + } else { + data.bitmap = await createImageBitmap(image); + } + data.refCounter = 1; + } catch (e) { + console.error(e); + data = null; + } + this.#cache.set(key, data); + if (data) { + this.#cache.set(data.id, data); + } + return data; + } + async getFromFile(file) { + const { + lastModified, + name, + size, + type + } = file; + return this.#get(`${lastModified}_${name}_${size}_${type}`, file); + } + async getFromUrl(url) { + return this.#get(url, url); + } + async getFromId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return null; + } + if (data.bitmap) { + data.refCounter += 1; + return data; + } + if (data.file) { + return this.getFromFile(data.file); + } + return this.getFromUrl(data.url); + } + getSvgUrl(id) { + const data = this.#cache.get(id); + if (!data?.isSvg) { + return null; + } + return data.svgUrl; + } + deleteId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return; + } + data.refCounter -= 1; + if (data.refCounter !== 0) { + return; + } + data.bitmap = null; + } + isValidId(id) { + return id.startsWith(`image_${this.#baseId}_`); + } +} +class CommandManager { + #commands = []; + #locked = false; + #maxSize; + #position = -1; + constructor(maxSize = 128) { + this.#maxSize = maxSize; + } + add({ + cmd, + undo, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + }) { + if (mustExec) { + cmd(); + } + if (this.#locked) { + return; + } + const save = { + cmd, + undo, + type + }; + if (this.#position === -1) { + if (this.#commands.length > 0) { + this.#commands.length = 0; + } + this.#position = 0; + this.#commands.push(save); + return; + } + if (overwriteIfSameType && this.#commands[this.#position].type === type) { + if (keepUndo) { + save.undo = this.#commands[this.#position].undo; + } + this.#commands[this.#position] = save; + return; + } + const next = this.#position + 1; + if (next === this.#maxSize) { + this.#commands.splice(0, 1); + } else { + this.#position = next; + if (next < this.#commands.length) { + this.#commands.splice(next); + } + } + this.#commands.push(save); + } + undo() { + if (this.#position === -1) { + return; + } + this.#locked = true; + this.#commands[this.#position].undo(); + this.#locked = false; + this.#position -= 1; + } + redo() { + if (this.#position < this.#commands.length - 1) { + this.#position += 1; + this.#locked = true; + this.#commands[this.#position].cmd(); + this.#locked = false; + } + } + hasSomethingToUndo() { + return this.#position !== -1; + } + hasSomethingToRedo() { + return this.#position < this.#commands.length - 1; + } + destroy() { + this.#commands = null; + } +} +class KeyboardManager { + constructor(callbacks) { + this.buffer = []; + this.callbacks = new Map(); + this.allKeys = new Set(); + const { + isMac + } = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest.platform; + for (const [keys, callback, options = {}] of callbacks) { + for (const key of keys) { + const isMacKey = key.startsWith("mac+"); + if (isMac && isMacKey) { + this.callbacks.set(key.slice(4), { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } else if (!isMac && !isMacKey) { + this.callbacks.set(key, { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } + } + } + } + #serialize(event) { + if (event.altKey) { + this.buffer.push("alt"); + } + if (event.ctrlKey) { + this.buffer.push("ctrl"); + } + if (event.metaKey) { + this.buffer.push("meta"); + } + if (event.shiftKey) { + this.buffer.push("shift"); + } + this.buffer.push(event.key); + const str = this.buffer.join("+"); + this.buffer.length = 0; + return str; + } + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + const info = this.callbacks.get(this.#serialize(event)); + if (!info) { + return; + } + const { + callback, + options: { + bubbles = false, + args = [], + checker = null + } + } = info; + if (checker && !checker(self, event)) { + return; + } + callback.bind(self, ...args, event)(); + if (!bubbles) { + event.stopPropagation(); + event.preventDefault(); + } + } +} +class ColorManager { + static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); + get _colors() { + const colors = new Map([["CanvasText", null], ["Canvas", null]]); + (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.getColorValues)(colors); + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_colors", colors); + } + convert(color) { + const rgb = (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.getRGB)(color); + if (!window.matchMedia("(forced-colors: active)").matches) { + return rgb; + } + for (const [name, RGB] of this._colors) { + if (RGB.every((x, i) => x === rgb[i])) { + return ColorManager._colorsMapping.get(name); + } + } + return rgb; + } + getHexCode(name) { + const rgb = this._colors.get(name); + if (!rgb) { + return name; + } + return _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.Util.makeHexColor(...rgb); + } +} +class AnnotationEditorUIManager { + #activeEditor = null; + #allEditors = new Map(); + #allLayers = new Map(); + #altTextManager = null; + #annotationStorage = null; + #commandManager = new CommandManager(); + #currentPageIndex = 0; + #deletedAnnotationsElementIds = new Set(); + #draggingEditors = null; + #editorTypes = null; + #editorsToRescale = new Set(); + #filterFactory = null; + #focusMainContainerTimeoutId = null; + #highlightColors = null; + #idManager = new IdManager(); + #isEnabled = false; + #isWaiting = false; + #lastActiveElement = null; + #mainHighlightColorPicker = null; + #mode = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE; + #selectedEditors = new Set(); + #pageColors = null; + #boundBlur = this.blur.bind(this); + #boundFocus = this.focus.bind(this); + #boundCopy = this.copy.bind(this); + #boundCut = this.cut.bind(this); + #boundPaste = this.paste.bind(this); + #boundKeydown = this.keydown.bind(this); + #boundOnEditingAction = this.onEditingAction.bind(this); + #boundOnPageChanging = this.onPageChanging.bind(this); + #boundOnScaleChanging = this.onScaleChanging.bind(this); + #boundOnRotationChanging = this.onRotationChanging.bind(this); + #previousStates = { + isEditing: false, + isEmpty: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false + }; + #translation = [0, 0]; + #translationTimeoutId = null; + #container = null; + #viewer = null; + static TRANSLATE_SMALL = 1; + static TRANSLATE_BIG = 10; + static get _keyboardManager() { + const proto = AnnotationEditorUIManager.prototype; + const arrowChecker = self => { + return self.#container.contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); + }; + const textInputChecker = (_self, { + target: el + }) => { + if (el instanceof HTMLInputElement) { + const { + type + } = el; + return type !== "text" && type !== "number"; + } + return true; + }; + const small = this.TRANSLATE_SMALL; + const big = this.TRANSLATE_BIG; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { + checker: textInputChecker + }], [["ctrl+z", "mac+meta+z"], proto.undo, { + checker: textInputChecker + }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { + checker: textInputChecker + }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { + checker: textInputChecker + }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled + }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { + checker: self => self.#container.contains(document.activeElement) + }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { + args: [0, big], + checker: arrowChecker + }]])); + } + constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors) { + this.#container = container; + this.#viewer = viewer; + this.#altTextManager = altTextManager; + this._eventBus = eventBus; + this._eventBus._on("editingaction", this.#boundOnEditingAction); + this._eventBus._on("pagechanging", this.#boundOnPageChanging); + this._eventBus._on("scalechanging", this.#boundOnScaleChanging); + this._eventBus._on("rotationchanging", this.#boundOnRotationChanging); + this.#annotationStorage = pdfDocument.annotationStorage; + this.#filterFactory = pdfDocument.filterFactory; + this.#pageColors = pageColors; + this.#highlightColors = highlightColors || null; + this.viewParameters = { + realScale: _display_utils_js__WEBPACK_IMPORTED_MODULE_1__.PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: 0 + }; + } + destroy() { + this.#removeKeyboardManager(); + this.#removeFocusManager(); + this._eventBus._off("editingaction", this.#boundOnEditingAction); + this._eventBus._off("pagechanging", this.#boundOnPageChanging); + this._eventBus._off("scalechanging", this.#boundOnScaleChanging); + this._eventBus._off("rotationchanging", this.#boundOnRotationChanging); + for (const layer of this.#allLayers.values()) { + layer.destroy(); + } + this.#allLayers.clear(); + this.#allEditors.clear(); + this.#editorsToRescale.clear(); + this.#activeEditor = null; + this.#selectedEditors.clear(); + this.#commandManager.destroy(); + this.#altTextManager?.destroy(); + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + this.#focusMainContainerTimeoutId = null; + } + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + this.#translationTimeoutId = null; + } + } + get hcmFilter() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); + } + get direction() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "direction", getComputedStyle(this.#container).direction); + } + get highlightColors() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "highlightColors", this.#highlightColors ? new Map(this.#highlightColors.split(",").map(pair => pair.split("=").map(x => x.trim()))) : null); + } + setMainHighlightColorPicker(colorPicker) { + this.#mainHighlightColorPicker = colorPicker; + } + editAltText(editor) { + this.#altTextManager?.editAltText(this, editor); + } + onPageChanging({ + pageNumber + }) { + this.#currentPageIndex = pageNumber - 1; + } + focusMainContainer() { + this.#container.focus(); + } + findParent(x, y) { + for (const layer of this.#allLayers.values()) { + const { + x: layerX, + y: layerY, + width, + height + } = layer.div.getBoundingClientRect(); + if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) { + return layer; + } + } + return null; + } + disableUserSelect(value = false) { + this.#viewer.classList.toggle("noUserSelect", value); + } + addShouldRescale(editor) { + this.#editorsToRescale.add(editor); + } + removeShouldRescale(editor) { + this.#editorsToRescale.delete(editor); + } + onScaleChanging({ + scale + }) { + this.commitOrRemove(); + this.viewParameters.realScale = scale * _display_utils_js__WEBPACK_IMPORTED_MODULE_1__.PixelsPerInch.PDF_TO_CSS_UNITS; + for (const editor of this.#editorsToRescale) { + editor.onScaleChanging(); + } + } + onRotationChanging({ + pagesRotation + }) { + this.commitOrRemove(); + this.viewParameters.rotation = pagesRotation; + } + addToAnnotationStorage(editor) { + if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { + this.#annotationStorage.setValue(editor.id, editor); + } + } + #addFocusManager() { + window.addEventListener("focus", this.#boundFocus); + window.addEventListener("blur", this.#boundBlur); + } + #removeFocusManager() { + window.removeEventListener("focus", this.#boundFocus); + window.removeEventListener("blur", this.#boundBlur); + } + blur() { + if (!this.hasSelection) { + return; + } + const { + activeElement + } = document; + for (const editor of this.#selectedEditors) { + if (editor.div.contains(activeElement)) { + this.#lastActiveElement = [editor, activeElement]; + editor._focusEventsAllowed = false; + break; + } + } + } + focus() { + if (!this.#lastActiveElement) { + return; + } + const [lastEditor, lastActiveElement] = this.#lastActiveElement; + this.#lastActiveElement = null; + lastActiveElement.addEventListener("focusin", () => { + lastEditor._focusEventsAllowed = true; + }, { + once: true + }); + lastActiveElement.focus(); + } + #addKeyboardManager() { + window.addEventListener("keydown", this.#boundKeydown); + } + #removeKeyboardManager() { + window.removeEventListener("keydown", this.#boundKeydown); + } + #addCopyPasteListeners() { + document.addEventListener("copy", this.#boundCopy); + document.addEventListener("cut", this.#boundCut); + document.addEventListener("paste", this.#boundPaste); + } + #removeCopyPasteListeners() { + document.removeEventListener("copy", this.#boundCopy); + document.removeEventListener("cut", this.#boundCut); + document.removeEventListener("paste", this.#boundPaste); + } + addEditListeners() { + this.#addKeyboardManager(); + this.#addCopyPasteListeners(); + } + removeEditListeners() { + this.#removeKeyboardManager(); + this.#removeCopyPasteListeners(); + } + copy(event) { + event.preventDefault(); + this.#activeEditor?.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = []; + for (const editor of this.#selectedEditors) { + const serialized = editor.serialize(true); + if (serialized) { + editors.push(serialized); + } + } + if (editors.length === 0) { + return; + } + event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); + } + cut(event) { + this.copy(event); + this.delete(); + } + paste(event) { + event.preventDefault(); + const { + clipboardData + } = event; + for (const item of clipboardData.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + return; + } + } + } + let data = clipboardData.getData("application/pdfjs"); + if (!data) { + return; + } + try { + data = JSON.parse(data); + } catch (ex) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`paste: "${ex.message}".`); + return; + } + if (!Array.isArray(data)) { + return; + } + this.unselectAll(); + const layer = this.currentLayer; + try { + const newEditors = []; + for (const editor of data) { + const deserializedEditor = layer.deserialize(editor); + if (!deserializedEditor) { + return; + } + newEditors.push(deserializedEditor); + } + const cmd = () => { + for (const editor of newEditors) { + this.#addEditorToLayer(editor); + } + this.#selectEditors(newEditors); + }; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } catch (ex) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`paste: "${ex.message}".`); + } + } + keydown(event) { + if (!this.isEditorHandlingKeyboard) { + AnnotationEditorUIManager._keyboardManager.exec(this, event); + } + } + onEditingAction(details) { + if (["undo", "redo", "delete", "selectAll"].includes(details.name)) { + this[details.name](); + } + } + #dispatchUpdateStates(details) { + const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value); + if (hasChanged) { + this._eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(this.#previousStates, details) + }); + } + } + #dispatchUpdateUI(details) { + this._eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); + } + setEditingState(isEditing) { + if (isEditing) { + this.#addFocusManager(); + this.#addKeyboardManager(); + this.#addCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: this.#mode !== _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE, + isEmpty: this.#isEmpty(), + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + hasSelectedEditor: false + }); + } else { + this.#removeFocusManager(); + this.#removeKeyboardManager(); + this.#removeCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: false + }); + this.disableUserSelect(false); + } + } + registerEditorTypes(types) { + if (this.#editorTypes) { + return; + } + this.#editorTypes = types; + for (const editorType of this.#editorTypes) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + } + getId() { + return this.#idManager.getId(); + } + get currentLayer() { + return this.#allLayers.get(this.#currentPageIndex); + } + getLayer(pageIndex) { + return this.#allLayers.get(pageIndex); + } + get currentPageIndex() { + return this.#currentPageIndex; + } + addLayer(layer) { + this.#allLayers.set(layer.pageIndex, layer); + if (this.#isEnabled) { + layer.enable(); + } else { + layer.disable(); + } + } + removeLayer(layer) { + this.#allLayers.delete(layer.pageIndex); + } + updateMode(mode, editId = null, isFromKeyboard = false) { + if (this.#mode === mode) { + return; + } + this.#mode = mode; + if (mode === _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE) { + this.setEditingState(false); + this.#disableAll(); + return; + } + this.setEditingState(true); + this.#enableAll(); + this.unselectAll(); + for (const layer of this.#allLayers.values()) { + layer.updateMode(mode); + } + if (!editId && isFromKeyboard) { + this.addNewEditorFromKeyboard(); + return; + } + if (!editId) { + return; + } + for (const editor of this.#allEditors.values()) { + if (editor.annotationElementId === editId) { + this.setSelected(editor); + editor.enterInEditMode(); + break; + } + } + } + addNewEditorFromKeyboard() { + if (this.currentLayer.canCreateNewEmptyEditor()) { + this.currentLayer.addNewEditor(); + } + } + updateToolbar(mode) { + if (mode === this.#mode) { + return; + } + this._eventBus.dispatch("switchannotationeditormode", { + source: this, + mode + }); + } + updateParams(type, value) { + if (!this.#editorTypes) { + return; + } + switch (type) { + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType.CREATE: + this.currentLayer.addNewEditor(); + return; + case _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + this.#mainHighlightColorPicker?.updateColor(value); + break; + } + for (const editor of this.#selectedEditors) { + editor.updateParams(type, value); + } + for (const editorType of this.#editorTypes) { + editorType.updateDefaultParams(type, value); + } + } + enableWaiting(mustWait = false) { + if (this.#isWaiting === mustWait) { + return; + } + this.#isWaiting = mustWait; + for (const layer of this.#allLayers.values()) { + if (mustWait) { + layer.disableClick(); + } else { + layer.enableClick(); + } + layer.div.classList.toggle("waiting", mustWait); + } + } + #enableAll() { + if (!this.#isEnabled) { + this.#isEnabled = true; + for (const layer of this.#allLayers.values()) { + layer.enable(); + } + } + } + #disableAll() { + this.unselectAll(); + if (this.#isEnabled) { + this.#isEnabled = false; + for (const layer of this.#allLayers.values()) { + layer.disable(); + } + } + } + getEditors(pageIndex) { + const editors = []; + for (const editor of this.#allEditors.values()) { + if (editor.pageIndex === pageIndex) { + editors.push(editor); + } + } + return editors; + } + getEditor(id) { + return this.#allEditors.get(id); + } + addEditor(editor) { + this.#allEditors.set(editor.id, editor); + } + removeEditor(editor) { + if (editor.div.contains(document.activeElement)) { + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + } + this.#focusMainContainerTimeoutId = setTimeout(() => { + this.focusMainContainer(); + this.#focusMainContainerTimeoutId = null; + }, 0); + } + this.#allEditors.delete(editor.id); + this.unselect(editor); + if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { + this.#annotationStorage?.remove(editor.id); + } + } + addDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.add(editor.annotationElementId); + editor.deleted = true; + } + isDeletedAnnotationElement(annotationElementId) { + return this.#deletedAnnotationsElementIds.has(annotationElementId); + } + removeDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); + editor.deleted = false; + } + #addEditorToLayer(editor) { + const layer = this.#allLayers.get(editor.pageIndex); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + } + } + setActiveEditor(editor) { + if (this.#activeEditor === editor) { + return; + } + this.#activeEditor = editor; + if (editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + toggleSelected(editor) { + if (this.#selectedEditors.has(editor)) { + this.#selectedEditors.delete(editor); + editor.unselect(); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + return; + } + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + setSelected(editor) { + for (const ed of this.#selectedEditors) { + if (ed !== editor) { + ed.unselect(); + } + } + this.#selectedEditors.clear(); + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + isSelected(editor) { + return this.#selectedEditors.has(editor); + } + get firstSelectedEditor() { + return this.#selectedEditors.values().next().value; + } + unselect(editor) { + editor.unselect(); + this.#selectedEditors.delete(editor); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + get hasSelection() { + return this.#selectedEditors.size !== 0; + } + get isEnterHandled() { + return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled; + } + undo() { + this.#commandManager.undo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: this.#isEmpty() + }); + } + redo() { + this.#commandManager.redo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + isEmpty: this.#isEmpty() + }); + } + addCommands(params) { + this.#commandManager.add(params); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: this.#isEmpty() + }); + } + #isEmpty() { + if (this.#allEditors.size === 0) { + return true; + } + if (this.#allEditors.size === 1) { + for (const editor of this.#allEditors.values()) { + return editor.isEmpty(); + } + } + return false; + } + delete() { + this.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = [...this.#selectedEditors]; + const cmd = () => { + for (const editor of editors) { + editor.remove(); + } + }; + const undo = () => { + for (const editor of editors) { + this.#addEditorToLayer(editor); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + commitOrRemove() { + this.#activeEditor?.commitOrRemove(); + } + hasSomethingToControl() { + return this.#activeEditor || this.hasSelection; + } + #selectEditors(editors) { + this.#selectedEditors.clear(); + for (const editor of editors) { + if (editor.isEmpty()) { + continue; + } + this.#selectedEditors.add(editor); + editor.select(); + } + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + selectAll() { + for (const editor of this.#selectedEditors) { + editor.commit(); + } + this.#selectEditors(this.#allEditors.values()); + } + unselectAll() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + if (this.#mode !== _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType.NONE) { + return; + } + } + if (!this.hasSelection) { + return; + } + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + this.#dispatchUpdateStates({ + hasSelectedEditor: false + }); + } + translateSelectedEditors(x, y, noCommit = false) { + if (!noCommit) { + this.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + this.#translation[0] += x; + this.#translation[1] += y; + const [totalX, totalY] = this.#translation; + const editors = [...this.#selectedEditors]; + const TIME_TO_WAIT = 1000; + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + } + this.#translationTimeoutId = setTimeout(() => { + this.#translationTimeoutId = null; + this.#translation[0] = this.#translation[1] = 0; + this.addCommands({ + cmd: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(totalX, totalY); + } + } + }, + undo: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(-totalX, -totalY); + } + } + }, + mustExec: false + }); + }, TIME_TO_WAIT); + for (const editor of editors) { + editor.translateInPage(x, y); + } + } + setUpDragSession() { + if (!this.hasSelection) { + return; + } + this.disableUserSelect(true); + this.#draggingEditors = new Map(); + for (const editor of this.#selectedEditors) { + this.#draggingEditors.set(editor, { + savedX: editor.x, + savedY: editor.y, + savedPageIndex: editor.pageIndex, + newX: 0, + newY: 0, + newPageIndex: -1 + }); + } + } + endDragSession() { + if (!this.#draggingEditors) { + return false; + } + this.disableUserSelect(false); + const map = this.#draggingEditors; + this.#draggingEditors = null; + let mustBeAddedInUndoStack = false; + for (const [{ + x, + y, + pageIndex + }, value] of map) { + value.newX = x; + value.newY = y; + value.newPageIndex = pageIndex; + mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex; + } + if (!mustBeAddedInUndoStack) { + return false; + } + const move = (editor, x, y, pageIndex) => { + if (this.#allEditors.has(editor.id)) { + const parent = this.#allLayers.get(pageIndex); + if (parent) { + editor._setParentAndPosition(parent, x, y); + } else { + editor.pageIndex = pageIndex; + editor.x = x; + editor.y = y; + } + } + }; + this.addCommands({ + cmd: () => { + for (const [editor, { + newX, + newY, + newPageIndex + }] of map) { + move(editor, newX, newY, newPageIndex); + } + }, + undo: () => { + for (const [editor, { + savedX, + savedY, + savedPageIndex + }] of map) { + move(editor, savedX, savedY, savedPageIndex); + } + }, + mustExec: true + }); + return true; + } + dragSelectedEditors(tx, ty) { + if (!this.#draggingEditors) { + return; + } + for (const editor of this.#draggingEditors.keys()) { + editor.drag(tx, ty); + } + } + rebuild(editor) { + if (editor.parent === null) { + const parent = this.getLayer(editor.pageIndex); + if (parent) { + parent.changeParent(editor); + parent.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + editor.rebuild(); + } + } else { + editor.parent.addOrRebuild(editor); + } + } + get isEditorHandlingKeyboard() { + return this.getActive()?.shouldGetKeyboardEvents() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); + } + isActive(editor) { + return this.#activeEditor === editor; + } + getActive() { + return this.#activeEditor; + } + getMode() { + return this.#mode; + } + get imageManager() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "imageManager", new ImageManager()); + } +} + + +/***/ }), + +/***/ 171: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFFetchStream: () => (/* binding */ PDFFetchStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _network_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253); + + +; +function createFetchOptions(headers, withCredentials, abortController) { + return { + method: "GET", + headers, + signal: abortController.signal, + mode: "cors", + credentials: withCredentials ? "include" : "same-origin", + redirect: "follow" + }; +} +function createHeaders(httpHeaders) { + const headers = new Headers(); + for (const property in httpHeaders) { + const value = httpHeaders[property]; + if (value === undefined) { + continue; + } + headers.append(property, value); + } + return headers; +} +function getArrayBuffer(val) { + if (val instanceof Uint8Array) { + return val.buffer; + } + if (val instanceof ArrayBuffer) { + return val; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getArrayBuffer - unexpected data format: ${val}`); + return new Uint8Array(val).buffer; +} +class PDFFetchStream { + constructor(source) { + this.source = source; + this.isHttp = /^https?:/i.test(source.url); + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFFetchStreamReader(this); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFFetchStreamRangeReader(this, begin, end); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFFetchStreamReader { + constructor(stream) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + this._filename = null; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._contentLength = source.length; + this._headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._abortController = new AbortController(); + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._headers = createHeaders(this._stream.httpHeaders); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!(0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateResponseStatus)(response.status)) { + throw (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(response.status, url); + } + this._reader = response.body.getReader(); + this._headersCapability.resolve(); + const getResponseHeader = name => { + return response.headers.get(name); + }; + const { + allowRangeRequests, + suggestedLength + } = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: this._stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.extractFilenameFromHeader)(getResponseHeader); + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("Streaming is disabled.")); + } + }).catch(this._headersCapability.reject); + this.onProgress = null; + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._headersCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} +class PDFFetchStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._isStreamingSupported = !source.disableStream; + this._abortController = new AbortController(); + this._headers = createHeaders(this._stream.httpHeaders); + this._headers.append("Range", `bytes=${begin}-${end - 1}`); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!(0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateResponseStatus)(response.status)) { + throw (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(response.status, url); + } + this._readCapability.resolve(); + this._reader = response.body.getReader(); + }).catch(this._readCapability.reject); + this.onProgress = null; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} + + +/***/ }), + +/***/ 742: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FontFaceObject: () => (/* binding */ FontFaceObject), +/* harmony export */ FontLoader: () => (/* binding */ FontLoader) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +class FontLoader { + #systemFonts = new Set(); + constructor({ + ownerDocument = globalThis.document, + styleElement = null + }) { + this._document = ownerDocument; + this.nativeFontFaces = new Set(); + this.styleElement = null; + this.loadingRequests = []; + this.loadTestFontId = 0; + } + addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.add(nativeFontFace); + this._document.fonts.add(nativeFontFace); + } + removeNativeFontFace(nativeFontFace) { + this.nativeFontFaces.delete(nativeFontFace); + this._document.fonts.delete(nativeFontFace); + } + insertRule(rule) { + if (!this.styleElement) { + this.styleElement = this._document.createElement("style"); + this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); + } + const styleSheet = this.styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + } + clear() { + for (const nativeFontFace of this.nativeFontFaces) { + this._document.fonts.delete(nativeFontFace); + } + this.nativeFontFaces.clear(); + this.#systemFonts.clear(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; + } + } + async loadSystemFont({ + systemFontInfo: info, + _inspectFont + }) { + if (!info || this.#systemFonts.has(info.loadedName)) { + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); + if (this.isFontLoadingAPISupported) { + const { + loadedName, + src, + style + } = info; + const fontFace = new FontFace(loadedName, src, style); + this.addNativeFontFace(fontFace); + try { + await fontFace.load(); + this.#systemFonts.add(loadedName); + _inspectFont?.(info); + } catch { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); + this.removeNativeFontFace(fontFace); + } + return; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Not implemented: loadSystemFont without the Font Loading API."); + } + async bind(font) { + if (font.attached || font.missingFile && !font.systemFontInfo) { + return; + } + font.attached = true; + if (font.systemFontInfo) { + await this.loadSystemFont(font); + return; + } + if (this.isFontLoadingAPISupported) { + const nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace); + try { + await nativeFontFace.loaded; + } catch (ex) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + font.disableFontFace = true; + throw ex; + } + } + return; + } + const rule = font.createFontFaceRule(); + if (rule) { + this.insertRule(rule); + if (this.isSyncFontLoadingSupported) { + return; + } + await new Promise(resolve => { + const request = this._queueLoadingCallback(resolve); + this._prepareFontLoadEvent(font, request); + }); + } + } + get isFontLoadingAPISupported() { + const hasFonts = !!this._document?.fonts; + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isFontLoadingAPISupported", hasFonts); + } + get isSyncFontLoadingSupported() { + let supported = false; + if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + supported = true; + } else if (typeof navigator !== "undefined" && typeof navigator?.userAgent === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { + supported = true; + } + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "isSyncFontLoadingSupported", supported); + } + _queueLoadingCallback(callback) { + function completeRequest() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!request.done, "completeRequest() cannot be called twice."); + request.done = true; + while (loadingRequests.length > 0 && loadingRequests[0].done) { + const otherRequest = loadingRequests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + const { + loadingRequests + } = this; + const request = { + done: false, + complete: completeRequest, + callback + }; + loadingRequests.push(request); + return request; + } + get _loadTestFont() { + const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow)(this, "_loadTestFont", testFont); + } + _prepareFontLoadEvent(font, request) { + function int32(data, offset) { + return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; + } + function spliceString(s, offset, remove, insert) { + const chunk1 = s.substring(0, offset); + const chunk2 = s.substring(offset + remove); + return chunk1 + insert + chunk2; + } + let i, ii; + const canvas = this._document.createElement("canvas"); + canvas.width = 1; + canvas.height = 1; + const ctx = canvas.getContext("2d"); + let called = 0; + function isFontReady(name, callback) { + if (++called > 30) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Load test font never loaded."); + callback(); + return; + } + ctx.font = "30px " + name; + ctx.fillText(".", 0, 20); + const imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; + let data = this._loadTestFont; + const COMMENT_OFFSET = 976; + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); + const CFF_CHECKSUM_OFFSET = 16; + const XXXX_VALUE = 0x58585858; + let checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; + } + if (i < loadTestFontId.length) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.string32)(checksum)); + const url = `url(data:font/opentype;base64,${btoa(data)});`; + const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; + this.insertRule(rule); + const div = this._document.createElement("div"); + div.style.visibility = "hidden"; + div.style.width = div.style.height = "10px"; + div.style.position = "absolute"; + div.style.top = div.style.left = "0px"; + for (const name of [font.loadedName, loadTestFontId]) { + const span = this._document.createElement("span"); + span.textContent = "Hi"; + span.style.fontFamily = name; + div.append(span); + } + this._document.body.append(div); + isFontReady(loadTestFontId, () => { + div.remove(); + request.complete(); + }); + } +} +class FontFaceObject { + constructor(translatedData, { + isEvalSupported = true, + disableFontFace = false, + ignoreErrors = false, + inspectFont = null + }) { + this.compiledGlyphs = Object.create(null); + for (const i in translatedData) { + this[i] = translatedData[i]; + } + this.isEvalSupported = isEvalSupported !== false; + this.disableFontFace = disableFontFace === true; + this.ignoreErrors = ignoreErrors === true; + this._inspectFont = inspectFont; + } + createNativeFontFace() { + if (!this.data || this.disableFontFace) { + return null; + } + let nativeFontFace; + if (!this.cssFontInfo) { + nativeFontFace = new FontFace(this.loadedName, this.data, {}); + } else { + const css = { + weight: this.cssFontInfo.fontWeight + }; + if (this.cssFontInfo.italicAngle) { + css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; + } + nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); + } + this._inspectFont?.(this); + return nativeFontFace; + } + createFontFaceRule() { + if (!this.data || this.disableFontFace) { + return null; + } + const data = (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.bytesToString)(this.data); + const url = `url(data:${this.mimetype};base64,${btoa(data)});`; + let rule; + if (!this.cssFontInfo) { + rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + } else { + let css = `font-weight: ${this.cssFontInfo.fontWeight};`; + if (this.cssFontInfo.italicAngle) { + css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; + } + rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; + } + this._inspectFont?.(this, url); + return rule; + } + getPathGenerator(objs, character) { + if (this.compiledGlyphs[character] !== undefined) { + return this.compiledGlyphs[character]; + } + let cmds; + try { + cmds = objs.get(this.loadedName + "_path_" + character); + } catch (ex) { + if (!this.ignoreErrors) { + throw ex; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`getPathGenerator - ignoring character: "${ex}".`); + return this.compiledGlyphs[character] = function (c, size) {}; + } + if (this.isEvalSupported && _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest.isEvalSupported) { + const jsBuf = []; + for (const current of cmds) { + const args = current.args !== undefined ? current.args.join(",") : ""; + jsBuf.push("c.", current.cmd, "(", args, ");\n"); + } + return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); + } + return this.compiledGlyphs[character] = function (c, size) { + for (const current of cmds) { + if (current.cmd === "scale") { + current.args = [size, -size]; + } + c[current.cmd].apply(c, current.args); + } + }; + } +} + + +/***/ }), + +/***/ 472: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Metadata: () => (/* binding */ Metadata) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +class Metadata { + #metadataMap; + #data; + constructor({ + parsedData, + rawData + }) { + this.#metadataMap = parsedData; + this.#data = rawData; + } + getRaw() { + return this.#data; + } + get(name) { + return this.#metadataMap.get(name) ?? null; + } + getAll() { + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#metadataMap); + } + has(name) { + return this.#metadataMap.has(name); + } +} + + +/***/ }), + +/***/ 474: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFNetworkStream: () => (/* binding */ PDFNetworkStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _network_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253); + + +; +const OK_RESPONSE = 200; +const PARTIAL_CONTENT_RESPONSE = 206; +function getArrayBuffer(xhr) { + const data = xhr.response; + if (typeof data !== "string") { + return data; + } + return (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.stringToBytes)(data).buffer; +} +class NetworkManager { + constructor(url, args = {}) { + this.url = url; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null); + this.withCredentials = args.withCredentials || false; + this.currXhrId = 0; + this.pendingRequests = Object.create(null); + } + requestRange(begin, end, listeners) { + const args = { + begin, + end + }; + for (const prop in listeners) { + args[prop] = listeners[prop]; + } + return this.request(args); + } + requestFull(listeners) { + return this.request(listeners); + } + request(args) { + const xhr = new XMLHttpRequest(); + const xhrId = this.currXhrId++; + const pendingRequest = this.pendingRequests[xhrId] = { + xhr + }; + xhr.open("GET", this.url); + xhr.withCredentials = this.withCredentials; + for (const property in this.httpHeaders) { + const value = this.httpHeaders[property]; + if (value === undefined) { + continue; + } + xhr.setRequestHeader(property, value); + } + if (this.isHttp && "begin" in args && "end" in args) { + xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); + pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; + } else { + pendingRequest.expectedStatus = OK_RESPONSE; + } + xhr.responseType = "arraybuffer"; + if (args.onError) { + xhr.onerror = function (evt) { + args.onError(xhr.status); + }; + } + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + xhr.send(null); + return xhrId; + } + onProgress(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + pendingRequest.onProgress?.(evt); + } + onStateChange(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + const xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + if (xhr.readyState !== 4) { + return; + } + if (!(xhrId in this.pendingRequests)) { + return; + } + delete this.pendingRequests[xhrId]; + if (xhr.status === 0 && this.isHttp) { + pendingRequest.onError?.(xhr.status); + return; + } + const xhrStatus = xhr.status || OK_RESPONSE; + const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { + pendingRequest.onError?.(xhr.status); + return; + } + const chunk = getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + const rangeHeader = xhr.getResponseHeader("Content-Range"); + const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + pendingRequest.onDone({ + begin: parseInt(matches[1], 10), + chunk + }); + } else if (chunk) { + pendingRequest.onDone({ + begin: 0, + chunk + }); + } else { + pendingRequest.onError?.(xhr.status); + } + } + getRequestXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + } + isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + } + abortRequest(xhrId) { + const xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } +} +class PDFNetworkStream { + constructor(source) { + this._source = source; + this._manager = new NetworkManager(source.url, { + httpHeaders: source.httpHeaders, + withCredentials: source.withCredentials + }); + this._rangeChunkSize = source.rangeChunkSize; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + _onRangeRequestReaderClosed(reader) { + const i = this._rangeRequestReaders.indexOf(reader); + if (i >= 0) { + this._rangeRequestReaders.splice(i, 1); + } + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); + reader.onClosed = this._onRangeRequestReaderClosed.bind(this); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class PDFNetworkStreamFullRequestReader { + constructor(manager, source) { + this._manager = manager; + const args = { + onHeadersReceived: this._onHeadersReceived.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = source.url; + this._fullRequestId = manager.requestFull(args); + this._headersReceivedCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._disableRange = source.disableRange || false; + this._contentLength = source.length; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = false; + this._isRangeSupported = false; + this._cachedChunks = []; + this._requests = []; + this._done = false; + this._storedError = undefined; + this._filename = null; + this.onProgress = null; + } + _onHeadersReceived() { + const fullRequestXhrId = this._fullRequestId; + const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); + const getResponseHeader = name => { + return fullRequestXhr.getResponseHeader(name); + }; + const { + allowRangeRequests, + suggestedLength + } = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: this._manager.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + if (allowRangeRequests) { + this._isRangeSupported = true; + } + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.extractFilenameFromHeader)(getResponseHeader); + if (this._isRangeSupported) { + this._manager.abortRequest(fullRequestXhrId); + } + this._headersReceivedCapability.resolve(); + } + _onDone(data) { + if (data) { + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: data.chunk, + done: false + }); + } else { + this._cachedChunks.push(data.chunk); + } + } + this._done = true; + if (this._cachedChunks.length > 0) { + return; + } + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + _onError(status) { + this._storedError = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(status, this._url); + this._headersReceivedCapability.reject(this._storedError); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._cachedChunks.length = 0; + } + _onProgress(evt) { + this.onProgress?.({ + loaded: evt.loaded, + total: evt.lengthComputable ? evt.total : this._contentLength + }); + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + get contentLength() { + return this._contentLength; + } + get headersReady() { + return this._headersReceivedCapability.promise; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._cachedChunks.length > 0) { + const chunk = this._cachedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + this._headersReceivedCapability.reject(reason); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._fullRequestId)) { + this._manager.abortRequest(this._fullRequestId); + } + this._fullRequestReader = null; + } +} +class PDFNetworkStreamRangeRequestReader { + constructor(manager, begin, end) { + this._manager = manager; + const args = { + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = manager.url; + this._requestId = manager.requestRange(begin, end, args); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this._storedError = undefined; + this.onProgress = null; + this.onClosed = null; + } + _close() { + this.onClosed?.(this); + } + _onDone(data) { + const chunk = data.chunk; + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunk = chunk; + } + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._close(); + } + _onError(status) { + this._storedError = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.createResponseStatusError)(status, this._url); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._queuedChunk = null; + } + _onProgress(evt) { + if (!this.isStreamingSupported) { + this.onProgress?.({ + loaded: evt.loaded + }); + } + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._queuedChunk !== null) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + this._close(); + } +} + + +/***/ }), + +/***/ 253: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + createResponseStatusError: () => (/* binding */ createResponseStatusError), + extractFilenameFromHeader: () => (/* binding */ extractFilenameFromHeader), + validateRangeRequestCapabilities: () => (/* binding */ validateRangeRequestCapabilities), + validateResponseStatus: () => (/* binding */ validateResponseStatus) +}); + +// EXTERNAL MODULE: ./src/shared/util.js +var util = __webpack_require__(266); +;// CONCATENATED MODULE: ./src/display/content_disposition.js + +function getFilenameFromContentDispositionHeader(contentDisposition) { + let needsEncodingFixup = true; + let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = unescape(filename); + filename = rfc5987decode(filename); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + tmp = rfc2231getparam(contentDisposition); + if (tmp) { + const filename = rfc2047decode(tmp); + return fixupEncoding(filename); + } + tmp = toParamRegExp("filename", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + function toParamRegExp(attributePattern, flags) { + return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); + } + function textdecode(encoding, value) { + if (encoding) { + if (!/^[\x00-\xFF]+$/.test(value)) { + return value; + } + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = (0,util.stringToBytes)(value); + value = decoder.decode(buffer); + needsEncodingFixup = false; + } catch {} + } + return value; + } + function fixupEncoding(value) { + if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { + value = textdecode("utf-8", value); + if (needsEncodingFixup) { + value = textdecode("iso-8859-1", value); + } + } + return value; + } + function rfc2231getparam(contentDispositionStr) { + const matches = []; + let match; + const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); + while ((match = iter.exec(contentDispositionStr)) !== null) { + let [, n, quot, part] = match; + n = parseInt(n, 10); + if (n in matches) { + if (n === 0) { + break; + } + continue; + } + matches[n] = [quot, part]; + } + const parts = []; + for (let n = 0; n < matches.length; ++n) { + if (!(n in matches)) { + break; + } + let [quot, part] = matches[n]; + part = rfc2616unquote(part); + if (quot) { + part = unescape(part); + if (n === 0) { + part = rfc5987decode(part); + } + } + parts.push(part); + } + return parts.join(""); + } + function rfc2616unquote(value) { + if (value.startsWith('"')) { + const parts = value.slice(1).split('\\"'); + for (let i = 0; i < parts.length; ++i) { + const quotindex = parts[i].indexOf('"'); + if (quotindex !== -1) { + parts[i] = parts[i].slice(0, quotindex); + parts.length = i + 1; + } + parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); + } + value = parts.join('"'); + } + return value; + } + function rfc5987decode(extvalue) { + const encodingend = extvalue.indexOf("'"); + if (encodingend === -1) { + return extvalue; + } + const encoding = extvalue.slice(0, encodingend); + const langvalue = extvalue.slice(encodingend + 1); + const value = langvalue.replace(/^[^']*'/, ""); + return textdecode(encoding, value); + } + function rfc2047decode(value) { + if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { + return value; + } + return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { + if (encoding === "q" || encoding === "Q") { + text = text.replaceAll("_", " "); + text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) { + return String.fromCharCode(parseInt(hex, 16)); + }); + return textdecode(charset, text); + } + try { + text = atob(text); + } catch {} + return textdecode(charset, text); + }); + } + return ""; +} + +// EXTERNAL MODULE: ./src/display/display_utils.js +var display_utils = __webpack_require__(473); +;// CONCATENATED MODULE: ./src/display/network_utils.js + + + +function validateRangeRequestCapabilities({ + getResponseHeader, + isHttp, + rangeChunkSize, + disableRange +}) { + const returnValues = { + allowRangeRequests: false, + suggestedLength: undefined + }; + const length = parseInt(getResponseHeader("Content-Length"), 10); + if (!Number.isInteger(length)) { + return returnValues; + } + returnValues.suggestedLength = length; + if (length <= 2 * rangeChunkSize) { + return returnValues; + } + if (disableRange || !isHttp) { + return returnValues; + } + if (getResponseHeader("Accept-Ranges") !== "bytes") { + return returnValues; + } + const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; + if (contentEncoding !== "identity") { + return returnValues; + } + returnValues.allowRangeRequests = true; + return returnValues; +} +function extractFilenameFromHeader(getResponseHeader) { + const contentDisposition = getResponseHeader("Content-Disposition"); + if (contentDisposition) { + let filename = getFilenameFromContentDispositionHeader(contentDisposition); + if (filename.includes("%")) { + try { + filename = decodeURIComponent(filename); + } catch {} + } + if ((0,display_utils.isPdfFile)(filename)) { + return filename; + } + } + return null; +} +function createResponseStatusError(status, url) { + if (status === 404 || status === 0 && url.startsWith("file:")) { + return new util.MissingPDFException('Missing PDF "' + url + '".'); + } + return new util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); +} +function validateResponseStatus(status) { + return status === 200 || status === 206; +} + + +/***/ }), + +/***/ 498: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFNodeStream: () => (/* binding */ PDFNodeStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _network_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253); + + +; +let fs, http, https, url; +if (_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.isNodeJS) { + fs = await import(/* webpackIgnore: true */ "fs"); + http = await import(/* webpackIgnore: true */ "http"); + https = await import(/* webpackIgnore: true */ "https"); + url = await import(/* webpackIgnore: true */ "url"); +} +const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; +function parseUrl(sourceUrl) { + const parsedUrl = url.parse(sourceUrl); + if (parsedUrl.protocol === "file:" || parsedUrl.host) { + return parsedUrl; + } + if (/^[a-z]:[/\\]/i.test(sourceUrl)) { + return url.parse(`file:///${sourceUrl}`); + } + if (!parsedUrl.host) { + parsedUrl.protocol = "file:"; + } + return parsedUrl; +} +class PDFNodeStream { + constructor(source) { + this.source = source; + this.url = parseUrl(source.url); + this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; + this.isFsUrl = this.url.protocol === "file:"; + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); + this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); + return this._fullRequestReader; + } + getRangeReader(start, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); + this._rangeRequestReaders.push(rangeReader); + return rangeReader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +class BaseFullReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + const source = stream.source; + this._contentLength = source.length; + this._loaded = 0; + this._filename = null; + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._readableStream = null; + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._headersCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (!this._isStreamingSupported && this._isRangeSupported) { + this._error(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("streaming is disabled")); + } + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +class BaseRangeReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + this._loaded = 0; + this._readableStream = null; + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + const source = stream.source; + this._isStreamingSupported = !source.disableStream; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +function createRequestOptions(parsedUrl, headers) { + return { + protocol: parsedUrl.protocol, + auth: parsedUrl.auth, + host: parsedUrl.hostname, + port: parsedUrl.port, + path: parsedUrl.path, + method: "GET", + headers + }; +} +class PDFNodeStreamFullReader extends BaseFullReader { + constructor(stream) { + super(stream); + const handleResponse = response => { + if (response.statusCode === 404) { + const error = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._headersCapability.resolve(); + this._setReadableStream(response); + const getResponseHeader = name => { + return this._readableStream.headers[name.toLowerCase()]; + }; + const { + allowRangeRequests, + suggestedLength + } = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0,_network_utils_js__WEBPACK_IMPORTED_MODULE_1__.extractFilenameFromHeader)(getResponseHeader); + }; + this._request = null; + if (this._url.protocol === "http:") { + this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); + } else { + this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); + } + this._request.on("error", reason => { + this._storedError = reason; + this._headersCapability.reject(reason); + }); + this._request.end(); + } +} +class PDFNodeStreamRangeReader extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + this._httpHeaders = {}; + for (const property in stream.httpHeaders) { + const value = stream.httpHeaders[property]; + if (value === undefined) { + continue; + } + this._httpHeaders[property] = value; + } + this._httpHeaders.Range = `bytes=${start}-${end - 1}`; + const handleResponse = response => { + if (response.statusCode === 404) { + const error = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + return; + } + this._setReadableStream(response); + }; + this._request = null; + if (this._url.protocol === "http:") { + this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); + } else { + this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); + } + this._request.on("error", reason => { + this._storedError = reason; + }); + this._request.end(); + } +} +class PDFNodeStreamFsFullReader extends BaseFullReader { + constructor(stream) { + super(stream); + let path = decodeURIComponent(this._url.path); + if (fileUriRegex.test(this._url.href)) { + path = path.replace(/^\//, ""); + } + fs.lstat(path, (error, stat) => { + if (error) { + if (error.code === "ENOENT") { + error = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(`Missing PDF "${path}".`); + } + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._contentLength = stat.size; + this._setReadableStream(fs.createReadStream(path)); + this._headersCapability.resolve(); + }); + } +} +class PDFNodeStreamFsRangeReader extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + let path = decodeURIComponent(this._url.path); + if (fileUriRegex.test(this._url.href)) { + path = path.replace(/^\//, ""); + } + this._setReadableStream(fs.createReadStream(path, { + start, + end: end - 1 + })); + } +} + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }, 1); + +/***/ }), + +/***/ 738: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NodeCMapReaderFactory: () => (/* binding */ NodeCMapReaderFactory), +/* harmony export */ NodeCanvasFactory: () => (/* binding */ NodeCanvasFactory), +/* harmony export */ NodeFilterFactory: () => (/* binding */ NodeFilterFactory), +/* harmony export */ NodeStandardFontDataFactory: () => (/* binding */ NodeStandardFontDataFactory) +/* harmony export */ }); +/* harmony import */ var _base_factory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(822); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(266); + + +; +let fs, canvas, path2d_polyfill; +if (_shared_util_js__WEBPACK_IMPORTED_MODULE_1__.isNodeJS) { + fs = await import(/* webpackIgnore: true */ "fs"); + try { + canvas = await import(/* webpackIgnore: true */ "canvas"); + } catch {} + try { + path2d_polyfill = await import(/* webpackIgnore: true */ "path2d-polyfill"); + } catch {} +} +; +const fetchData = function (url) { + return new Promise((resolve, reject) => { + fs.readFile(url, (error, data) => { + if (error || !data) { + reject(new Error(error)); + return; + } + resolve(new Uint8Array(data)); + }); + }); +}; +class NodeFilterFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseFilterFactory {} +class NodeCanvasFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCanvasFactory { + _createCanvas(width, height) { + return canvas.createCanvas(width, height); + } +} +class NodeCMapReaderFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url).then(data => { + return { + cMapData: data, + compressionType + }; + }); + } +} +class NodeStandardFontDataFactory extends _base_factory_js__WEBPACK_IMPORTED_MODULE_0__.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url); + } +} + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }, 1); + +/***/ }), + +/***/ 890: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ OptionalContentConfig: () => (/* binding */ OptionalContentConfig) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(825); + + +const INTERNAL = Symbol("INTERNAL"); +class OptionalContentGroup { + #visible = true; + constructor(name, intent) { + this.name = name; + this.intent = intent; + } + get visible() { + return this.#visible; + } + _setVisible(internal, visible) { + if (internal !== INTERNAL) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)("Internal method `_setVisible` called."); + } + this.#visible = visible; + } +} +class OptionalContentConfig { + #cachedGetHash = null; + #groups = new Map(); + #initialHash = null; + #order = null; + constructor(data) { + this.name = null; + this.creator = null; + if (data === null) { + return; + } + this.name = data.name; + this.creator = data.creator; + this.#order = data.order; + for (const group of data.groups) { + this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); + } + if (data.baseState === "OFF") { + for (const group of this.#groups.values()) { + group._setVisible(INTERNAL, false); + } + } + for (const on of data.on) { + this.#groups.get(on)._setVisible(INTERNAL, true); + } + for (const off of data.off) { + this.#groups.get(off)._setVisible(INTERNAL, false); + } + this.#initialHash = this.getHash(); + } + #evaluateVisibilityExpression(array) { + const length = array.length; + if (length < 2) { + return true; + } + const operator = array[0]; + for (let i = 1; i < length; i++) { + const element = array[i]; + let state; + if (Array.isArray(element)) { + state = this.#evaluateVisibilityExpression(element); + } else if (this.#groups.has(element)) { + state = this.#groups.get(element).visible; + } else { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${element}`); + return true; + } + switch (operator) { + case "And": + if (!state) { + return false; + } + break; + case "Or": + if (state) { + return true; + } + break; + case "Not": + return !state; + default: + return true; + } + } + return operator === "And"; + } + isVisible(group) { + if (this.#groups.size === 0) { + return true; + } + if (!group) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)("Optional content group not defined."); + return true; + } + if (group.type === "OCG") { + if (!this.#groups.has(group.id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${group.id}`); + return true; + } + return this.#groups.get(group.id).visible; + } else if (group.type === "OCMD") { + if (group.expression) { + return this.#evaluateVisibilityExpression(group.expression); + } + if (!group.policy || group.policy === "AnyOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return false; + } + } + return true; + } else if (group.policy === "AnyOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return false; + } + } + return true; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Unknown optional content policy ${group.policy}.`); + return true; + } + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Unknown group type ${group.type}.`); + return true; + } + setVisibility(id, visible = true) { + if (!this.#groups.has(id)) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.warn)(`Optional content group not found: ${id}`); + return; + } + this.#groups.get(id)._setVisible(INTERNAL, !!visible); + this.#cachedGetHash = null; + } + get hasInitialVisibility() { + return this.#initialHash === null || this.getHash() === this.#initialHash; + } + getOrder() { + if (!this.#groups.size) { + return null; + } + if (this.#order) { + return this.#order.slice(); + } + return [...this.#groups.keys()]; + } + getGroups() { + return this.#groups.size > 0 ? (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.objectFromMap)(this.#groups) : null; + } + getGroup(id) { + return this.#groups.get(id) || null; + } + getHash() { + if (this.#cachedGetHash !== null) { + return this.#cachedGetHash; + } + const hash = new _shared_murmurhash3_js__WEBPACK_IMPORTED_MODULE_1__.MurmurHash3_64(); + for (const [id, group] of this.#groups) { + hash.update(`${id}:${group.visible}`); + } + return this.#cachedGetHash = hash.hexdigest(); + } +} + + +/***/ }), + +/***/ 739: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ renderTextLayer: () => (/* binding */ renderTextLayer), +/* harmony export */ updateTextLayer: () => (/* binding */ updateTextLayer) +/* harmony export */ }); +/* unused harmony export TextLayerRenderTask */ +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(473); + + +const MAX_TEXT_DIVS_TO_RENDER = 100000; +const DEFAULT_FONT_SIZE = 30; +const DEFAULT_FONT_ASCENT = 0.8; +const ascentCache = new Map(); +function getCtx(size, isOffscreenCanvasSupported) { + let ctx; + if (isOffscreenCanvasSupported && _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest.isOffscreenCanvasSupported) { + ctx = new OffscreenCanvas(size, size).getContext("2d", { + alpha: false + }); + } else { + const canvas = document.createElement("canvas"); + canvas.width = canvas.height = size; + ctx = canvas.getContext("2d", { + alpha: false + }); + } + return ctx; +} +function getAscent(fontFamily, isOffscreenCanvasSupported) { + const cachedAscent = ascentCache.get(fontFamily); + if (cachedAscent) { + return cachedAscent; + } + const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported); + ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; + const metrics = ctx.measureText(""); + let ascent = metrics.fontBoundingBoxAscent; + let descent = Math.abs(metrics.fontBoundingBoxDescent); + if (ascent) { + const ratio = ascent / (ascent + descent); + ascentCache.set(fontFamily, ratio); + ctx.canvas.width = ctx.canvas.height = 0; + return ratio; + } + ctx.strokeStyle = "red"; + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("g", 0, 0); + let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + descent = 0; + for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { + if (pixels[i] > 0) { + descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); + pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + ascent = 0; + for (let i = 0, ii = pixels.length; i < ii; i += 4) { + if (pixels[i] > 0) { + ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.canvas.width = ctx.canvas.height = 0; + if (ascent) { + const ratio = ascent / (ascent + descent); + ascentCache.set(fontFamily, ratio); + return ratio; + } + ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); + return DEFAULT_FONT_ASCENT; +} +function appendText(task, geom, styles) { + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + task._textDivs.push(textDiv); + const tx = _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.Util.transform(task._transform, geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = styles[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + const fontFamily = task._fontInspectorEnabled && style.fontSubstitution || style.fontFamily; + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * getAscent(fontFamily, task._isOffscreenCanvasSupported); + let left, top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + const scaleFactorStr = "calc(var(--scale-factor)*"; + const divStyle = textDiv.style; + if (task._container === task._rootContainer) { + divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`; + divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`; + divStyle.fontFamily = fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (task._fontInspectorEnabled) { + textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + let shouldScaleText = false; + if (geom.str.length > 1) { + shouldScaleText = true; + } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { + const absScaleX = Math.abs(geom.transform[0]), + absScaleY = Math.abs(geom.transform[3]); + if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { + shouldScaleText = true; + } + } + if (shouldScaleText) { + textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; + } + task._textDivProperties.set(textDiv, textDivProperties); + if (task._isReadableStream) { + task._layoutText(textDiv); + } +} +function layout(params) { + const { + div, + scale, + properties, + ctx, + prevFontSize, + prevFontFamily + } = params; + const { + style + } = div; + let transform = ""; + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { + ctx.font = `${fontSize * scale}px ${fontFamily}`; + params.prevFontSize = fontSize; + params.prevFontFamily = fontFamily; + } + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * scale / width})`; + } + } + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; + } +} +function render(task) { + if (task._canceled) { + return; + } + const textDivs = task._textDivs; + const capability = task._capability; + const textDivsLength = textDivs.length; + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + capability.resolve(); + return; + } + if (!task._isReadableStream) { + for (const textDiv of textDivs) { + task._layoutText(textDiv); + } + } + capability.resolve(); +} +class TextLayerRenderTask { + constructor({ + textContentSource, + container, + viewport, + textDivs, + textDivProperties, + textContentItemsStr, + isOffscreenCanvasSupported + }) { + this._textContentSource = textContentSource; + this._isReadableStream = textContentSource instanceof ReadableStream; + this._container = this._rootContainer = container; + this._textDivs = textDivs || []; + this._textContentItemsStr = textContentItemsStr || []; + this._isOffscreenCanvasSupported = isOffscreenCanvasSupported; + this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; + this._reader = null; + this._textDivProperties = textDivProperties || new WeakMap(); + this._canceled = false; + this._capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._layoutTextParams = { + prevFontSize: null, + prevFontFamily: null, + div: null, + scale: viewport.scale * (globalThis.devicePixelRatio || 1), + properties: null, + ctx: getCtx(0, isOffscreenCanvasSupported) + }; + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; + this._pageWidth = pageWidth; + this._pageHeight = pageHeight; + (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.setLayerDimensions)(container, viewport); + this._capability.promise.finally(() => { + this._layoutTextParams = null; + }).catch(() => {}); + } + get promise() { + return this._capability.promise; + } + cancel() { + this._canceled = true; + if (this._reader) { + this._reader.cancel(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("TextLayer task cancelled.")).catch(() => {}); + this._reader = null; + } + this._capability.reject(new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException("TextLayer task cancelled.")); + } + _processItems(items, styleCache) { + for (const item of items) { + if (item.str === undefined) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = this._container; + this._container = document.createElement("span"); + this._container.classList.add("markedContent"); + if (item.id !== null) { + this._container.setAttribute("id", `${item.id}`); + } + parent.append(this._container); + } else if (item.type === "endMarkedContent") { + this._container = this._container.parentNode; + } + continue; + } + this._textContentItemsStr.push(item.str); + appendText(this, item, styleCache); + } + } + _layoutText(textDiv) { + const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv); + this._layoutTextParams.div = textDiv; + layout(this._layoutTextParams); + if (textDivProperties.hasText) { + this._container.append(textDiv); + } + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + this._container.append(br); + } + } + _render() { + const capability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + let styleCache = Object.create(null); + if (this._isReadableStream) { + const pump = () => { + this._reader.read().then(({ + value, + done + }) => { + if (done) { + capability.resolve(); + return; + } + Object.assign(styleCache, value.styles); + this._processItems(value.items, styleCache); + pump(); + }, capability.reject); + }; + this._reader = this._textContentSource.getReader(); + pump(); + } else if (this._textContentSource) { + const { + items, + styles + } = this._textContentSource; + this._processItems(items, styles); + capability.resolve(); + } else { + throw new Error('No "textContentSource" parameter specified.'); + } + capability.promise.then(() => { + styleCache = null; + render(this); + }, this._capability.reject); + } +} +function renderTextLayer(params) { + const task = new TextLayerRenderTask(params); + task._render(); + return task; +} +function updateTextLayer({ + container, + viewport, + textDivs, + textDivProperties, + isOffscreenCanvasSupported, + mustRotate = true, + mustRescale = true +}) { + if (mustRotate) { + (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.setLayerDimensions)(container, { + rotation: viewport.rotation + }); + } + if (mustRescale) { + const ctx = getCtx(0, isOffscreenCanvasSupported); + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const params = { + prevFontSize: null, + prevFontFamily: null, + div: null, + scale, + properties: null, + ctx + }; + for (const div of textDivs) { + params.properties = textDivProperties.get(div); + params.div = div; + layout(params); + } + } +} + + +/***/ }), + +/***/ 92: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PDFDataTransportStream: () => (/* binding */ PDFDataTransportStream) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(473); + + +class PDFDataTransportStream { + constructor({ + length, + initialData, + progressiveDone = false, + contentDispositionFilename = null, + disableRange = false, + disableStream = false + }, pdfDataRangeTransport) { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + this._queuedChunks = []; + this._progressiveDone = progressiveDone; + this._contentDispositionFilename = contentDispositionFilename; + if (initialData?.length > 0) { + const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; + this._queuedChunks.push(buffer); + } + this._pdfDataRangeTransport = pdfDataRangeTransport; + this._isStreamingSupported = !disableStream; + this._isRangeSupported = !disableRange; + this._contentLength = length; + this._fullRequestReader = null; + this._rangeReaders = []; + this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { + this._onReceiveData({ + begin, + chunk + }); + }); + this._pdfDataRangeTransport.addProgressListener((loaded, total) => { + this._onProgress({ + loaded, + total + }); + }); + this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { + this._onReceiveData({ + chunk + }); + }); + this._pdfDataRangeTransport.addProgressiveDoneListener(() => { + this._onProgressiveDone(); + }); + this._pdfDataRangeTransport.transportReady(); + } + _onReceiveData({ + begin, + chunk + }) { + const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; + if (begin === undefined) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(buffer); + } else { + this._queuedChunks.push(buffer); + } + } else { + const found = this._rangeReaders.some(function (rangeReader) { + if (rangeReader._begin !== begin) { + return false; + } + rangeReader._enqueue(buffer); + return true; + }); + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + } + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + _onProgress(evt) { + if (evt.total === undefined) { + this._rangeReaders[0]?.onProgress?.({ + loaded: evt.loaded + }); + } else { + this._fullRequestReader?.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + } + } + _onProgressiveDone() { + this._fullRequestReader?.progressiveDone(); + this._progressiveDone = true; + } + _removeRangeReader(reader) { + const i = this._rangeReaders.indexOf(reader); + if (i >= 0) { + this._rangeReaders.splice(i, 1); + } + } + getFullReader() { + (0,_shared_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); + const queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFDataTransportStreamRangeReader(this, begin, end); + this._pdfDataRangeTransport.requestDataRange(begin, end); + this._rangeReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeReaders.slice(0)) { + reader.cancel(reason); + } + this._pdfDataRangeTransport.abort(); + } +} +class PDFDataTransportStreamReader { + constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { + this._stream = stream; + this._done = progressiveDone || false; + this._filename = (0,_display_utils_js__WEBPACK_IMPORTED_MODULE_1__.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; + this._queuedChunks = queuedChunks || []; + this._loaded = 0; + for (const chunk of this._queuedChunks) { + this._loaded += chunk.byteLength; + } + this._requests = []; + this._headersReady = Promise.resolve(); + stream._fullRequestReader = this; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunks.push(chunk); + } + this._loaded += chunk.byteLength; + } + get headersReady() { + return this._headersReady; + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._stream._isRangeSupported; + } + get isStreamingSupported() { + return this._stream._isStreamingSupported; + } + get contentLength() { + return this._stream._contentLength; + } + async read() { + if (this._queuedChunks.length > 0) { + const chunk = this._queuedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + progressiveDone() { + if (this._done) { + return; + } + this._done = true; + } +} +class PDFDataTransportStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._begin = begin; + this._end = end; + this._queuedChunk = null; + this._requests = []; + this._done = false; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + const requestsCapability = this._requests.shift(); + requestsCapability.resolve({ + value: chunk, + done: false + }); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + this._done = true; + this._stream._removeRangeReader(this); + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._queuedChunk) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._stream._removeRangeReader(this); + } +} + + +/***/ }), + +/***/ 368: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GlobalWorkerOptions: () => (/* binding */ GlobalWorkerOptions) +/* harmony export */ }); +const GlobalWorkerOptions = Object.create(null); +GlobalWorkerOptions.workerPort = null; +GlobalWorkerOptions.workerSrc = ""; + + +/***/ }), + +/***/ 160: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XfaLayer: () => (/* binding */ XfaLayer) +/* harmony export */ }); +/* harmony import */ var _xfa_text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(521); + +class XfaLayer { + static setupStorage(html, id, element, storage, intent) { + const storedData = storage.getValue(id, { + value: null + }); + switch (element.name) { + case "textarea": + if (storedData.value !== null) { + html.textContent = storedData.value; + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + break; + case "input": + if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { + if (storedData.value === element.attributes.xfaOn) { + html.setAttribute("checked", true); + } else if (storedData.value === element.attributes.xfaOff) { + html.removeAttribute("checked"); + } + if (intent === "print") { + break; + } + html.addEventListener("change", event => { + storage.setValue(id, { + value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") + }); + }); + } else { + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + storage.setValue(id, { + value: event.target.value + }); + }); + } + break; + case "select": + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + for (const option of element.children) { + if (option.attributes.value === storedData.value) { + option.attributes.selected = true; + } else if (option.attributes.hasOwnProperty("selected")) { + delete option.attributes.selected; + } + } + } + html.addEventListener("input", event => { + const options = event.target.options; + const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; + storage.setValue(id, { + value + }); + }); + break; + } + } + static setAttributes({ + html, + element, + storage = null, + intent, + linkService + }) { + const { + attributes + } = element; + const isHTMLAnchorElement = html instanceof HTMLAnchorElement; + if (attributes.type === "radio") { + attributes.name = `${attributes.name}-${intent}`; + } + for (const [key, value] of Object.entries(attributes)) { + if (value === null || value === undefined) { + continue; + } + switch (key) { + case "class": + if (value.length) { + html.setAttribute(key, value.join(" ")); + } + break; + case "dataId": + break; + case "id": + html.setAttribute("data-element-id", value); + break; + case "style": + Object.assign(html.style, value); + break; + case "textContent": + html.textContent = value; + break; + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); + } + } + } + if (isHTMLAnchorElement) { + linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); + } + if (storage && attributes.dataId) { + this.setupStorage(html, attributes.dataId, element, storage); + } + } + static render(parameters) { + const storage = parameters.annotationStorage; + const linkService = parameters.linkService; + const root = parameters.xfaHtml; + const intent = parameters.intent || "display"; + const rootHtml = document.createElement(root.name); + if (root.attributes) { + this.setAttributes({ + html: rootHtml, + element: root, + intent, + linkService + }); + } + const isNotForRichText = intent !== "richText"; + const rootDiv = parameters.div; + rootDiv.append(rootHtml); + if (parameters.viewport) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + rootDiv.style.transform = transform; + } + if (isNotForRichText) { + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + } + const textDivs = []; + if (root.children.length === 0) { + if (root.value) { + const node = document.createTextNode(root.value); + rootHtml.append(node); + if (isNotForRichText && _xfa_text_js__WEBPACK_IMPORTED_MODULE_0__.XfaText.shouldBuildText(root.name)) { + textDivs.push(node); + } + } + return { + textDivs + }; + } + const stack = [[root, -1, rootHtml]]; + while (stack.length > 0) { + const [parent, i, html] = stack.at(-1); + if (i + 1 === parent.children.length) { + stack.pop(); + continue; + } + const child = parent.children[++stack.at(-1)[1]]; + if (child === null) { + continue; + } + const { + name + } = child; + if (name === "#text") { + const node = document.createTextNode(child.value); + textDivs.push(node); + html.append(node); + continue; + } + const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); + html.append(childHtml); + if (child.attributes) { + this.setAttributes({ + html: childHtml, + element: child, + storage, + intent, + linkService + }); + } + if (child.children?.length > 0) { + stack.push([child, -1, childHtml]); + } else if (child.value) { + const node = document.createTextNode(child.value); + if (isNotForRichText && _xfa_text_js__WEBPACK_IMPORTED_MODULE_0__.XfaText.shouldBuildText(name)) { + textDivs.push(node); + } + childHtml.append(node); + } + } + for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { + el.setAttribute("readOnly", true); + } + return { + textDivs + }; + } + static update(parameters) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + parameters.div.style.transform = transform; + parameters.div.hidden = false; + } +} + + +/***/ }), + +/***/ 521: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ XfaText: () => (/* binding */ XfaText) +/* harmony export */ }); +class XfaText { + static textContent(xfa) { + const items = []; + const output = { + items, + styles: Object.create(null) + }; + function walk(node) { + if (!node) { + return; + } + let str = null; + const name = node.name; + if (name === "#text") { + str = node.value; + } else if (!XfaText.shouldBuildText(name)) { + return; + } else if (node?.attributes?.textContent) { + str = node.attributes.textContent; + } else if (node.value) { + str = node.value; + } + if (str !== null) { + items.push({ + str + }); + } + if (!node.children) { + return; + } + for (const child of node.children) { + walk(child); + } + } + walk(xfa); + return output; + } + static shouldBuildText(name) { + return !(name === "textarea" || name === "input" || name === "option" || name === "select"); + } +} + + +/***/ }), + +/***/ 907: +/***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AbortException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException), +/* harmony export */ AnnotationEditorLayer: () => (/* reexport safe */ _display_editor_annotation_editor_layer_js__WEBPACK_IMPORTED_MODULE_4__.AnnotationEditorLayer), +/* harmony export */ AnnotationEditorParamsType: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorParamsType), +/* harmony export */ AnnotationEditorType: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationEditorType), +/* harmony export */ AnnotationEditorUIManager: () => (/* reexport safe */ _display_editor_tools_js__WEBPACK_IMPORTED_MODULE_5__.AnnotationEditorUIManager), +/* harmony export */ AnnotationLayer: () => (/* reexport safe */ _display_annotation_layer_js__WEBPACK_IMPORTED_MODULE_6__.AnnotationLayer), +/* harmony export */ AnnotationMode: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.AnnotationMode), +/* harmony export */ CMapCompressionType: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.CMapCompressionType), +/* harmony export */ ColorPicker: () => (/* reexport safe */ _display_editor_color_picker_js__WEBPACK_IMPORTED_MODULE_7__.ColorPicker), +/* harmony export */ DOMSVGFactory: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.DOMSVGFactory), +/* harmony export */ DrawLayer: () => (/* reexport safe */ _display_draw_layer_js__WEBPACK_IMPORTED_MODULE_8__.DrawLayer), +/* harmony export */ FeatureTest: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.FeatureTest), +/* harmony export */ GlobalWorkerOptions: () => (/* reexport safe */ _display_worker_options_js__WEBPACK_IMPORTED_MODULE_9__.GlobalWorkerOptions), +/* harmony export */ ImageKind: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.ImageKind), +/* harmony export */ InvalidPDFException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.InvalidPDFException), +/* harmony export */ MissingPDFException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException), +/* harmony export */ OPS: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.OPS), +/* harmony export */ Outliner: () => (/* reexport safe */ _display_editor_outliner_js__WEBPACK_IMPORTED_MODULE_10__.Outliner), +/* harmony export */ PDFDataRangeTransport: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.PDFDataRangeTransport), +/* harmony export */ PDFDateString: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PDFDateString), +/* harmony export */ PDFWorker: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.PDFWorker), +/* harmony export */ PasswordResponses: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordResponses), +/* harmony export */ PermissionFlag: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PermissionFlag), +/* harmony export */ PixelsPerInch: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.PixelsPerInch), +/* harmony export */ PromiseCapability: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability), +/* harmony export */ RenderingCancelledException: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.RenderingCancelledException), +/* harmony export */ UnexpectedResponseException: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException), +/* harmony export */ Util: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.Util), +/* harmony export */ VerbosityLevel: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.VerbosityLevel), +/* harmony export */ XfaLayer: () => (/* reexport safe */ _display_xfa_layer_js__WEBPACK_IMPORTED_MODULE_11__.XfaLayer), +/* harmony export */ build: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.build), +/* harmony export */ createValidAbsoluteUrl: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.createValidAbsoluteUrl), +/* harmony export */ fetchData: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.fetchData), +/* harmony export */ getDocument: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.getDocument), +/* harmony export */ getFilenameFromUrl: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.getFilenameFromUrl), +/* harmony export */ getPdfFilenameFromUrl: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.getPdfFilenameFromUrl), +/* harmony export */ getXfaPageViewport: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.getXfaPageViewport), +/* harmony export */ isDataScheme: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isDataScheme), +/* harmony export */ isPdfFile: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.isPdfFile), +/* harmony export */ noContextMenu: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.noContextMenu), +/* harmony export */ normalizeUnicode: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeUnicode), +/* harmony export */ renderTextLayer: () => (/* reexport safe */ _display_text_layer_js__WEBPACK_IMPORTED_MODULE_3__.renderTextLayer), +/* harmony export */ setLayerDimensions: () => (/* reexport safe */ _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__.setLayerDimensions), +/* harmony export */ shadow: () => (/* reexport safe */ _shared_util_js__WEBPACK_IMPORTED_MODULE_0__.shadow), +/* harmony export */ updateTextLayer: () => (/* reexport safe */ _display_text_layer_js__WEBPACK_IMPORTED_MODULE_3__.updateTextLayer), +/* harmony export */ version: () => (/* reexport safe */ _display_api_js__WEBPACK_IMPORTED_MODULE_1__.version) +/* harmony export */ }); +/* harmony import */ var _shared_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); +/* harmony import */ var _display_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(406); +/* harmony import */ var _display_display_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(473); +/* harmony import */ var _display_text_layer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(739); +/* harmony import */ var _display_editor_annotation_editor_layer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(629); +/* harmony import */ var _display_editor_tools_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(812); +/* harmony import */ var _display_annotation_layer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(640); +/* harmony import */ var _display_editor_color_picker_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(97); +/* harmony import */ var _display_draw_layer_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(423); +/* harmony import */ var _display_worker_options_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(368); +/* harmony import */ var _display_editor_outliner_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(405); +/* harmony import */ var _display_xfa_layer_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(160); +var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_display_api_js__WEBPACK_IMPORTED_MODULE_1__]); +_display_api_js__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0]; + + + + + + + + + + + + +const pdfjsVersion = '4.0.379'; +const pdfjsBuild = '9e14d04fd'; + +__webpack_async_result__(); +} catch(e) { __webpack_async_result__(e); } }); + +/***/ }), + +/***/ 694: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MessageHandler: () => (/* binding */ MessageHandler) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +const CallbackKind = { + UNKNOWN: 0, + DATA: 1, + ERROR: 2 +}; +const StreamKind = { + UNKNOWN: 0, + CANCEL: 1, + CANCEL_COMPLETE: 2, + CLOSE: 3, + ENQUEUE: 4, + ERROR: 5, + PULL: 6, + PULL_COMPLETE: 7, + START_COMPLETE: 8 +}; +function wrapReason(reason) { + if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + } + switch (reason.name) { + case "AbortException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.AbortException(reason.message); + case "MissingPDFException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.MissingPDFException(reason.message); + case "PasswordException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.PasswordException(reason.message, reason.code); + case "UnexpectedResponseException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.UnexpectedResponseException(reason.message, reason.status); + case "UnknownErrorException": + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(reason.message, reason.details); + default: + return new _util_js__WEBPACK_IMPORTED_MODULE_0__.UnknownErrorException(reason.message, reason.toString()); + } +} +class MessageHandler { + constructor(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = Object.create(null); + this.streamControllers = Object.create(null); + this.callbackCapabilities = Object.create(null); + this.actionHandler = Object.create(null); + this._onComObjOnMessage = event => { + const data = event.data; + if (data.targetName !== this.sourceName) { + return; + } + if (data.stream) { + this.#processStreamMessage(data); + return; + } + if (data.callback) { + const callbackId = data.callbackId; + const capability = this.callbackCapabilities[callbackId]; + if (!capability) { + throw new Error(`Cannot resolve callback ${callbackId}`); + } + delete this.callbackCapabilities[callbackId]; + if (data.callback === CallbackKind.DATA) { + capability.resolve(data.data); + } else if (data.callback === CallbackKind.ERROR) { + capability.reject(wrapReason(data.reason)); + } else { + throw new Error("Unexpected callback case"); + } + return; + } + const action = this.actionHandler[data.action]; + if (!action) { + throw new Error(`Unknown action from worker: ${data.action}`); + } + if (data.callbackId) { + const cbSourceName = this.sourceName; + const cbTargetName = data.sourceName; + new Promise(function (resolve) { + resolve(action(data.data)); + }).then(function (result) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.DATA, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.ERROR, + callbackId: data.callbackId, + reason: wrapReason(reason) + }); + }); + return; + } + if (data.streamId) { + this.#createStreamSink(data); + return; + } + action(data.data); + }; + comObj.addEventListener("message", this._onComObjOnMessage); + } + on(actionName, handler) { + const ah = this.actionHandler; + if (ah[actionName]) { + throw new Error(`There is already an actionName called "${actionName}"`); + } + ah[actionName] = handler; + } + send(actionName, data, transfers) { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data + }, transfers); + } + sendWithPromise(actionName, data, transfers) { + const callbackId = this.callbackId++; + const capability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.callbackCapabilities[callbackId] = capability; + try { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + callbackId, + data + }, transfers); + } catch (ex) { + capability.reject(ex); + } + return capability.promise; + } + sendWithStream(actionName, data, queueingStrategy, transfers) { + const streamId = this.streamId++, + sourceName = this.sourceName, + targetName = this.targetName, + comObj = this.comObj; + return new ReadableStream({ + start: controller => { + const startCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.streamControllers[streamId] = { + controller, + startCall: startCapability, + pullCall: null, + cancelCall: null, + isClosed: false + }; + comObj.postMessage({ + sourceName, + targetName, + action: actionName, + streamId, + data, + desiredSize: controller.desiredSize + }, transfers); + return startCapability.promise; + }, + pull: controller => { + const pullCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.streamControllers[streamId].pullCall = pullCapability; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL, + streamId, + desiredSize: controller.desiredSize + }); + return pullCapability.promise; + }, + cancel: reason => { + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.streamControllers[streamId].cancelCall = cancelCapability; + this.streamControllers[streamId].isClosed = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL, + streamId, + reason: wrapReason(reason) + }); + return cancelCapability.promise; + } + }, queueingStrategy); + } + #createStreamSink(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const self = this, + action = this.actionHandler[data.action]; + const streamSink = { + enqueue(chunk, size = 1, transfers) { + if (this.isCancelled) { + return; + } + const lastDesiredSize = this.desiredSize; + this.desiredSize -= size; + if (lastDesiredSize > 0 && this.desiredSize <= 0) { + this.sinkCapability = new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(); + this.ready = this.sinkCapability.promise; + } + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ENQUEUE, + streamId, + chunk + }, transfers); + }, + close() { + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CLOSE, + streamId + }); + delete self.streamSinks[streamId]; + }, + error(reason) { + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(reason instanceof Error, "error must have a valid reason"); + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ERROR, + streamId, + reason: wrapReason(reason) + }); + }, + sinkCapability: new _util_js__WEBPACK_IMPORTED_MODULE_0__.PromiseCapability(), + onPull: null, + onCancel: null, + isCancelled: false, + desiredSize: data.desiredSize, + ready: null + }; + streamSink.sinkCapability.resolve(); + streamSink.ready = streamSink.sinkCapability.promise; + this.streamSinks[streamId] = streamSink; + new Promise(function (resolve) { + resolve(action(data.data, streamSink)); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + } + #processStreamMessage(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const streamController = this.streamControllers[streamId], + streamSink = this.streamSinks[streamId]; + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + streamController.startCall.resolve(); + } else { + streamController.startCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL_COMPLETE: + if (data.success) { + streamController.pullCall.resolve(); + } else { + streamController.pullCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL: + if (!streamSink) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + break; + } + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); + } + streamSink.desiredSize = data.desiredSize; + new Promise(function (resolve) { + resolve(streamSink.onPull?.()); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + break; + case StreamKind.ENQUEUE: + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(streamController, "enqueue should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.controller.enqueue(data.chunk); + break; + case StreamKind.CLOSE: + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(streamController, "close should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.isClosed = true; + streamController.controller.close(); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.ERROR: + (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.assert)(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + } + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL: + if (!streamSink) { + break; + } + new Promise(function (resolve) { + resolve(streamSink.onCancel?.(wrapReason(data.reason))); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.isCancelled = true; + delete this.streamSinks[streamId]; + break; + default: + throw new Error("Unexpected stream case"); + } + } + async #deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); + delete this.streamControllers[streamId]; + } + destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); + } +} + + +/***/ }), + +/***/ 825: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MurmurHash3_64: () => (/* binding */ MurmurHash3_64) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(266); + +const SEED = 0xc3d2e1f0; +const MASK_HIGH = 0xffff0000; +const MASK_LOW = 0xffff; +class MurmurHash3_64 { + constructor(seed) { + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + update(input) { + let data, length; + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0; + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if ((0,_util_js__WEBPACK_IMPORTED_MODULE_0__.isArrayBuffer)(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); + } + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, + k2 = 0; + let h1 = this.h1, + h2 = this.h2; + const C1 = 0xcc9e2d51, + C2 = 0x1b873593; + const C1_LOW = C1 & MASK_LOW, + C2_LOW = C2 & MASK_LOW; + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + k1 = 0; + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + this.h1 = h1; + this.h2 = h2; + } + hexdigest() { + let h1 = this.h1, + h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); + } +} + + +/***/ }), + +/***/ 266: +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AbortException: () => (/* binding */ AbortException), +/* harmony export */ AnnotationBorderStyleType: () => (/* binding */ AnnotationBorderStyleType), +/* harmony export */ AnnotationEditorParamsType: () => (/* binding */ AnnotationEditorParamsType), +/* harmony export */ AnnotationEditorPrefix: () => (/* binding */ AnnotationEditorPrefix), +/* harmony export */ AnnotationEditorType: () => (/* binding */ AnnotationEditorType), +/* harmony export */ AnnotationMode: () => (/* binding */ AnnotationMode), +/* harmony export */ AnnotationPrefix: () => (/* binding */ AnnotationPrefix), +/* harmony export */ AnnotationType: () => (/* binding */ AnnotationType), +/* harmony export */ BaseException: () => (/* binding */ BaseException), +/* harmony export */ CMapCompressionType: () => (/* binding */ CMapCompressionType), +/* harmony export */ FONT_IDENTITY_MATRIX: () => (/* binding */ FONT_IDENTITY_MATRIX), +/* harmony export */ FeatureTest: () => (/* binding */ FeatureTest), +/* harmony export */ FormatError: () => (/* binding */ FormatError), +/* harmony export */ IDENTITY_MATRIX: () => (/* binding */ IDENTITY_MATRIX), +/* harmony export */ ImageKind: () => (/* binding */ ImageKind), +/* harmony export */ InvalidPDFException: () => (/* binding */ InvalidPDFException), +/* harmony export */ LINE_FACTOR: () => (/* binding */ LINE_FACTOR), +/* harmony export */ MAX_IMAGE_SIZE_TO_CACHE: () => (/* binding */ MAX_IMAGE_SIZE_TO_CACHE), +/* harmony export */ MissingPDFException: () => (/* binding */ MissingPDFException), +/* harmony export */ OPS: () => (/* binding */ OPS), +/* harmony export */ PasswordException: () => (/* binding */ PasswordException), +/* harmony export */ PasswordResponses: () => (/* binding */ PasswordResponses), +/* harmony export */ PermissionFlag: () => (/* binding */ PermissionFlag), +/* harmony export */ PromiseCapability: () => (/* binding */ PromiseCapability), +/* harmony export */ RenderingIntentFlag: () => (/* binding */ RenderingIntentFlag), +/* harmony export */ TextRenderingMode: () => (/* binding */ TextRenderingMode), +/* harmony export */ UnexpectedResponseException: () => (/* binding */ UnexpectedResponseException), +/* harmony export */ UnknownErrorException: () => (/* binding */ UnknownErrorException), +/* harmony export */ Util: () => (/* binding */ Util), +/* harmony export */ VerbosityLevel: () => (/* binding */ VerbosityLevel), +/* harmony export */ assert: () => (/* binding */ assert), +/* harmony export */ bytesToString: () => (/* binding */ bytesToString), +/* harmony export */ createValidAbsoluteUrl: () => (/* binding */ createValidAbsoluteUrl), +/* harmony export */ getUuid: () => (/* binding */ getUuid), +/* harmony export */ getVerbosityLevel: () => (/* binding */ getVerbosityLevel), +/* harmony export */ info: () => (/* binding */ info), +/* harmony export */ isArrayBuffer: () => (/* binding */ isArrayBuffer), +/* harmony export */ isNodeJS: () => (/* binding */ isNodeJS), +/* harmony export */ normalizeUnicode: () => (/* binding */ normalizeUnicode), +/* harmony export */ objectFromMap: () => (/* binding */ objectFromMap), +/* harmony export */ setVerbosityLevel: () => (/* binding */ setVerbosityLevel), +/* harmony export */ shadow: () => (/* binding */ shadow), +/* harmony export */ string32: () => (/* binding */ string32), +/* harmony export */ stringToBytes: () => (/* binding */ stringToBytes), +/* harmony export */ unreachable: () => (/* binding */ unreachable), +/* harmony export */ warn: () => (/* binding */ warn) +/* harmony export */ }); +/* unused harmony exports AnnotationActionEventType, AnnotationFieldFlag, AnnotationFlag, AnnotationReplyType, BASELINE_FACTOR, DocumentActionEventType, getModificationDate, isArrayEqual, LINE_DESCENT_FACTOR, objectSize, PageActionEventType, stringToPDFString, stringToUTF8String, utf8StringToString */ +const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; +const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; +const MAX_IMAGE_SIZE_TO_CACHE = 10e6; +const LINE_FACTOR = 1.35; +const LINE_DESCENT_FACTOR = 0.35; +const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; +const RenderingIntentFlag = { + ANY: 0x01, + DISPLAY: 0x02, + PRINT: 0x04, + SAVE: 0x08, + ANNOTATIONS_FORMS: 0x10, + ANNOTATIONS_STORAGE: 0x20, + ANNOTATIONS_DISABLE: 0x40, + OPLIST: 0x100 +}; +const AnnotationMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_FORMS: 2, + ENABLE_STORAGE: 3 +}; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + HIGHLIGHT: 9, + STAMP: 13, + INK: 15 +}; +const AnnotationEditorParamsType = { + RESIZE: 1, + CREATE: 2, + FREETEXT_SIZE: 11, + FREETEXT_COLOR: 12, + FREETEXT_OPACITY: 13, + INK_COLOR: 21, + INK_THICKNESS: 22, + INK_OPACITY: 23, + HIGHLIGHT_COLOR: 31, + HIGHLIGHT_DEFAULT_COLOR: 32 +}; +const PermissionFlag = { + PRINT: 0x04, + MODIFY_CONTENTS: 0x08, + COPY: 0x10, + MODIFY_ANNOTATIONS: 0x20, + FILL_INTERACTIVE_FORMS: 0x100, + COPY_FOR_ACCESSIBILITY: 0x200, + ASSEMBLE: 0x400, + PRINT_HIGH_QUALITY: 0x800 +}; +const TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; +const ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; +const AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 +}; +const AnnotationReplyType = { + GROUP: "Group", + REPLY: "R" +}; +const AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; +const AnnotationFieldFlag = { + READONLY: 0x0000001, + REQUIRED: 0x0000002, + NOEXPORT: 0x0000004, + MULTILINE: 0x0001000, + PASSWORD: 0x0002000, + NOTOGGLETOOFF: 0x0004000, + RADIO: 0x0008000, + PUSHBUTTON: 0x0010000, + COMBO: 0x0020000, + EDIT: 0x0040000, + SORT: 0x0080000, + FILESELECT: 0x0100000, + MULTISELECT: 0x0200000, + DONOTSPELLCHECK: 0x0400000, + DONOTSCROLL: 0x0800000, + COMB: 0x1000000, + RICHTEXT: 0x2000000, + RADIOSINUNISON: 0x2000000, + COMMITONSELCHANGE: 0x4000000 +}; +const AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 +}; +const AnnotationActionEventType = { + E: "Mouse Enter", + X: "Mouse Exit", + D: "Mouse Down", + U: "Mouse Up", + Fo: "Focus", + Bl: "Blur", + PO: "PageOpen", + PC: "PageClose", + PV: "PageVisible", + PI: "PageInvisible", + K: "Keystroke", + F: "Format", + V: "Validate", + C: "Calculate" +}; +const DocumentActionEventType = { + WC: "WillClose", + WS: "WillSave", + DS: "DidSave", + WP: "WillPrint", + DP: "DidPrint" +}; +const PageActionEventType = { + O: "PageOpen", + C: "PageClose" +}; +const VerbosityLevel = { + ERRORS: 0, + WARNINGS: 1, + INFOS: 5 +}; +const CMapCompressionType = { + NONE: 0, + BINARY: 1 +}; +const OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotation: 80, + endAnnotation: 81, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 +}; +const PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; +let verbosity = VerbosityLevel.WARNINGS; +function setVerbosityLevel(level) { + if (Number.isInteger(level)) { + verbosity = level; + } +} +function getVerbosityLevel() { + return verbosity; +} +function info(msg) { + if (verbosity >= VerbosityLevel.INFOS) { + console.log(`Info: ${msg}`); + } +} +function warn(msg) { + if (verbosity >= VerbosityLevel.WARNINGS) { + console.log(`Warning: ${msg}`); + } +} +function unreachable(msg) { + throw new Error(msg); +} +function assert(cond, msg) { + if (!cond) { + unreachable(msg); + } +} +function _isValidProtocol(url) { + switch (url?.protocol) { + case "http:": + case "https:": + case "ftp:": + case "mailto:": + case "tel:": + return true; + default: + return false; + } +} +function createValidAbsoluteUrl(url, baseUrl = null, options = null) { + if (!url) { + return null; + } + try { + if (options && typeof url === "string") { + if (options.addDefaultProtocol && url.startsWith("www.")) { + const dots = url.match(/\./g); + if (dots?.length >= 2) { + url = `http://${url}`; + } + } + if (options.tryConvertEncoding) { + try { + url = stringToUTF8String(url); + } catch {} + } + } + const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); + if (_isValidProtocol(absoluteUrl)) { + return absoluteUrl; + } + } catch {} + return null; +} +function shadow(obj, prop, value, nonSerializable = false) { + Object.defineProperty(obj, prop, { + value, + enumerable: !nonSerializable, + configurable: true, + writable: false + }); + return value; +} +const BaseException = function BaseExceptionClosure() { + function BaseException(message, name) { + if (this.constructor === BaseException) { + unreachable("Cannot initialize BaseException."); + } + this.message = message; + this.name = name; + } + BaseException.prototype = new Error(); + BaseException.constructor = BaseException; + return BaseException; +}(); +class PasswordException extends BaseException { + constructor(msg, code) { + super(msg, "PasswordException"); + this.code = code; + } +} +class UnknownErrorException extends BaseException { + constructor(msg, details) { + super(msg, "UnknownErrorException"); + this.details = details; + } +} +class InvalidPDFException extends BaseException { + constructor(msg) { + super(msg, "InvalidPDFException"); + } +} +class MissingPDFException extends BaseException { + constructor(msg) { + super(msg, "MissingPDFException"); + } +} +class UnexpectedResponseException extends BaseException { + constructor(msg, status) { + super(msg, "UnexpectedResponseException"); + this.status = status; + } +} +class FormatError extends BaseException { + constructor(msg) { + super(msg, "FormatError"); + } +} +class AbortException extends BaseException { + constructor(msg) { + super(msg, "AbortException"); + } +} +function bytesToString(bytes) { + if (typeof bytes !== "object" || bytes?.length === undefined) { + unreachable("Invalid argument for bytesToString"); + } + const length = bytes.length; + const MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + const strBuf = []; + for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + const chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(""); +} +function stringToBytes(str) { + if (typeof str !== "string") { + unreachable("Invalid argument for stringToBytes"); + } + const length = str.length; + const bytes = new Uint8Array(length); + for (let i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xff; + } + return bytes; +} +function string32(value) { + return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); +} +function objectSize(obj) { + return Object.keys(obj).length; +} +function objectFromMap(map) { + const obj = Object.create(null); + for (const [key, value] of map) { + obj[key] = value; + } + return obj; +} +function isLittleEndian() { + const buffer8 = new Uint8Array(4); + buffer8[0] = 1; + const view32 = new Uint32Array(buffer8.buffer, 0, 1); + return view32[0] === 1; +} +function isEvalSupported() { + try { + new Function(""); + return true; + } catch { + return false; + } +} +class FeatureTest { + static get isLittleEndian() { + return shadow(this, "isLittleEndian", isLittleEndian()); + } + static get isEvalSupported() { + return shadow(this, "isEvalSupported", isEvalSupported()); + } + static get isOffscreenCanvasSupported() { + return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); + } + static get platform() { + if (typeof navigator !== "undefined" && typeof navigator?.platform === "string") { + return shadow(this, "platform", { + isMac: navigator.platform.includes("Mac") + }); + } + return shadow(this, "platform", { + isMac: false + }); + } + static get isCSSRoundSupported() { + return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)")); + } +} +const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); +class Util { + static makeHexColor(r, g, b) { + return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; + } + static scaleMinMax(transform, minMax) { + let temp; + if (transform[0]) { + if (transform[0] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + minMax[0] *= transform[0]; + minMax[1] *= transform[0]; + if (transform[3] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + minMax[2] *= transform[3]; + minMax[3] *= transform[3]; + } else { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + if (transform[1] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + minMax[2] *= transform[1]; + minMax[3] *= transform[1]; + if (transform[2] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + minMax[0] *= transform[2]; + minMax[1] *= transform[2]; + } + minMax[0] += transform[4]; + minMax[1] += transform[4]; + minMax[2] += transform[5]; + minMax[3] += transform[5]; + } + static transform(m1, m2) { + return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; + } + static applyTransform(p, m) { + const xt = p[0] * m[0] + p[1] * m[2] + m[4]; + const yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + } + static applyInverseTransform(p, m) { + const d = m[0] * m[3] - m[1] * m[2]; + const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + } + static getAxialAlignedBoundingBox(r, m) { + const p1 = this.applyTransform(r, m); + const p2 = this.applyTransform(r.slice(2, 4), m); + const p3 = this.applyTransform([r[0], r[3]], m); + const p4 = this.applyTransform([r[2], r[1]], m); + return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; + } + static inverseTransform(m) { + const d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + } + static singularValueDecompose2dScale(m) { + const transpose = [m[0], m[2], m[1], m[3]]; + const a = m[0] * transpose[0] + m[1] * transpose[2]; + const b = m[0] * transpose[1] + m[1] * transpose[3]; + const c = m[2] * transpose[0] + m[3] * transpose[2]; + const d = m[2] * transpose[1] + m[3] * transpose[3]; + const first = (a + d) / 2; + const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; + const sx = first + second || 1; + const sy = first - second || 1; + return [Math.sqrt(sx), Math.sqrt(sy)]; + } + static normalizeRect(rect) { + const r = rect.slice(0); + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + } + static intersect(rect1, rect2) { + const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); + const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); + if (xLow > xHigh) { + return null; + } + const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); + const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); + if (yLow > yHigh) { + return null; + } + return [xLow, yLow, xHigh, yHigh]; + } + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { + const tvalues = [], + bounds = [[], []]; + let a, b, c, t, t1, t2, b2ac, sqrtb2ac; + for (let i = 0; i < 2; ++i) { + if (i === 0) { + b = 6 * x0 - 12 * x1 + 6 * x2; + a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; + c = 3 * x1 - 3 * x0; + } else { + b = 6 * y0 - 12 * y1 + 6 * y2; + a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; + c = 3 * y1 - 3 * y0; + } + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) < 1e-12) { + continue; + } + t = -c / b; + if (0 < t && t < 1) { + tvalues.push(t); + } + continue; + } + b2ac = b * b - 4 * c * a; + sqrtb2ac = Math.sqrt(b2ac); + if (b2ac < 0) { + continue; + } + t1 = (-b + sqrtb2ac) / (2 * a); + if (0 < t1 && t1 < 1) { + tvalues.push(t1); + } + t2 = (-b - sqrtb2ac) / (2 * a); + if (0 < t2 && t2 < 1) { + tvalues.push(t2); + } + } + let j = tvalues.length, + mt; + const jlen = j; + while (j--) { + t = tvalues[j]; + mt = 1 - t; + bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; + bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; + } + bounds[0][jlen] = x0; + bounds[1][jlen] = y0; + bounds[0][jlen + 1] = x3; + bounds[1][jlen + 1] = y3; + bounds[0].length = bounds[1].length = jlen + 2; + return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; + } +} +const PDFStringTranslateTable = (/* unused pure expression or super */ null && ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac])); +function stringToPDFString(str) { + if (str[0] >= "\xEF") { + let encoding; + if (str[0] === "\xFE" && str[1] === "\xFF") { + encoding = "utf-16be"; + if (str.length % 2 === 1) { + str = str.slice(0, -1); + } + } else if (str[0] === "\xFF" && str[1] === "\xFE") { + encoding = "utf-16le"; + if (str.length % 2 === 1) { + str = str.slice(0, -1); + } + } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { + encoding = "utf-8"; + } + if (encoding) { + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(str); + const decoded = decoder.decode(buffer); + if (!decoded.includes("\x1b")) { + return decoded; + } + return decoded.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g, ""); + } catch (ex) { + warn(`stringToPDFString: "${ex}".`); + } + } + } + const strBuf = []; + for (let i = 0, ii = str.length; i < ii; i++) { + const charCode = str.charCodeAt(i); + if (charCode === 0x1b) { + while (++i < ii && str.charCodeAt(i) !== 0x1b) {} + continue; + } + const code = PDFStringTranslateTable[charCode]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + return strBuf.join(""); +} +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} +function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); +} +function isArrayBuffer(v) { + return typeof v === "object" && v?.byteLength !== undefined; +} +function isArrayEqual(arr1, arr2) { + if (arr1.length !== arr2.length) { + return false; + } + for (let i = 0, ii = arr1.length; i < ii; i++) { + if (arr1[i] !== arr2[i]) { + return false; + } + } + return true; +} +function getModificationDate(date = new Date()) { + const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; + return buffer.join(""); +} +class PromiseCapability { + #settled = false; + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = data => { + this.#settled = true; + resolve(data); + }; + this.reject = reason => { + this.#settled = true; + reject(reason); + }; + }); + } + get settled() { + return this.#settled; + } +} +let NormalizeRegex = null; +let NormalizationMap = null; +function normalizeUnicode(str) { + if (!NormalizeRegex) { + NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; + NormalizationMap = new Map([["ſt", "ſt"]]); + } + return str.replaceAll(NormalizeRegex, (_, p1, p2) => { + return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2); + }); +} +function getUuid() { + if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") { + return crypto.randomUUID(); + } + const buf = new Uint8Array(32); + if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") { + crypto.getRandomValues(buf); + } else { + for (let i = 0; i < 32; i++) { + buf[i] = Math.floor(Math.random() * 255); + } + } + return bytesToString(buf); +} +const AnnotationPrefix = "pdfjs_internal_id_"; + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/async module */ +/******/ (() => { +/******/ var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__"; +/******/ var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "__webpack_exports__"; +/******/ var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__"; +/******/ var resolveQueue = (queue) => { +/******/ if(queue && queue.d < 1) { +/******/ queue.d = 1; +/******/ queue.forEach((fn) => (fn.r--)); +/******/ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn())); +/******/ } +/******/ } +/******/ var wrapDeps = (deps) => (deps.map((dep) => { +/******/ if(dep !== null && typeof dep === "object") { +/******/ if(dep[webpackQueues]) return dep; +/******/ if(dep.then) { +/******/ var queue = []; +/******/ queue.d = 0; +/******/ dep.then((r) => { +/******/ obj[webpackExports] = r; +/******/ resolveQueue(queue); +/******/ }, (e) => { +/******/ obj[webpackError] = e; +/******/ resolveQueue(queue); +/******/ }); +/******/ var obj = {}; +/******/ obj[webpackQueues] = (fn) => (fn(queue)); +/******/ return obj; +/******/ } +/******/ } +/******/ var ret = {}; +/******/ ret[webpackQueues] = x => {}; +/******/ ret[webpackExports] = dep; +/******/ return ret; +/******/ })); +/******/ __webpack_require__.a = (module, body, hasAwait) => { +/******/ var queue; +/******/ hasAwait && ((queue = []).d = -1); +/******/ var depQueues = new Set(); +/******/ var exports = module.exports; +/******/ var currentDeps; +/******/ var outerResolve; +/******/ var reject; +/******/ var promise = new Promise((resolve, rej) => { +/******/ reject = rej; +/******/ outerResolve = resolve; +/******/ }); +/******/ promise[webpackExports] = exports; +/******/ promise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise["catch"](x => {})); +/******/ module.exports = promise; +/******/ body((deps) => { +/******/ currentDeps = wrapDeps(deps); +/******/ var fn; +/******/ var getResult = () => (currentDeps.map((d) => { +/******/ if(d[webpackError]) throw d[webpackError]; +/******/ return d[webpackExports]; +/******/ })) +/******/ var promise = new Promise((resolve) => { +/******/ fn = () => (resolve(getResult)); +/******/ fn.r = 0; +/******/ var fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))); +/******/ currentDeps.map((dep) => (dep[webpackQueues](fnQueue))); +/******/ }); +/******/ return fn.r ? promise : getResult(); +/******/ }, (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue))); +/******/ queue && queue.d < 0 && (queue.d = 0); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(907); +/******/ __webpack_exports__ = globalThis.pdfjsLib = await (globalThis.pdfjsLibPromise = __webpack_exports__); +/******/ var __webpack_exports__AbortException = __webpack_exports__.AbortException; +/******/ var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer; +/******/ var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType; +/******/ var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType; +/******/ var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager; +/******/ var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer; +/******/ var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode; +/******/ var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType; +/******/ var __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker; +/******/ var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory; +/******/ var __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer; +/******/ var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest; +/******/ var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions; +/******/ var __webpack_exports__ImageKind = __webpack_exports__.ImageKind; +/******/ var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException; +/******/ var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException; +/******/ var __webpack_exports__OPS = __webpack_exports__.OPS; +/******/ var __webpack_exports__Outliner = __webpack_exports__.Outliner; +/******/ var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport; +/******/ var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString; +/******/ var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker; +/******/ var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses; +/******/ var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag; +/******/ var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch; +/******/ var __webpack_exports__PromiseCapability = __webpack_exports__.PromiseCapability; +/******/ var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException; +/******/ var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException; +/******/ var __webpack_exports__Util = __webpack_exports__.Util; +/******/ var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel; +/******/ var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer; +/******/ var __webpack_exports__build = __webpack_exports__.build; +/******/ var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl; +/******/ var __webpack_exports__fetchData = __webpack_exports__.fetchData; +/******/ var __webpack_exports__getDocument = __webpack_exports__.getDocument; +/******/ var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl; +/******/ var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl; +/******/ var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport; +/******/ var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme; +/******/ var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile; +/******/ var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu; +/******/ var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode; +/******/ var __webpack_exports__renderTextLayer = __webpack_exports__.renderTextLayer; +/******/ var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions; +/******/ var __webpack_exports__shadow = __webpack_exports__.shadow; +/******/ var __webpack_exports__updateTextLayer = __webpack_exports__.updateTextLayer; +/******/ var __webpack_exports__version = __webpack_exports__.version; +/******/ export { __webpack_exports__AbortException as AbortException, __webpack_exports__AnnotationEditorLayer as AnnotationEditorLayer, __webpack_exports__AnnotationEditorParamsType as AnnotationEditorParamsType, __webpack_exports__AnnotationEditorType as AnnotationEditorType, __webpack_exports__AnnotationEditorUIManager as AnnotationEditorUIManager, __webpack_exports__AnnotationLayer as AnnotationLayer, __webpack_exports__AnnotationMode as AnnotationMode, __webpack_exports__CMapCompressionType as CMapCompressionType, __webpack_exports__ColorPicker as ColorPicker, __webpack_exports__DOMSVGFactory as DOMSVGFactory, __webpack_exports__DrawLayer as DrawLayer, __webpack_exports__FeatureTest as FeatureTest, __webpack_exports__GlobalWorkerOptions as GlobalWorkerOptions, __webpack_exports__ImageKind as ImageKind, __webpack_exports__InvalidPDFException as InvalidPDFException, __webpack_exports__MissingPDFException as MissingPDFException, __webpack_exports__OPS as OPS, __webpack_exports__Outliner as Outliner, __webpack_exports__PDFDataRangeTransport as PDFDataRangeTransport, __webpack_exports__PDFDateString as PDFDateString, __webpack_exports__PDFWorker as PDFWorker, __webpack_exports__PasswordResponses as PasswordResponses, __webpack_exports__PermissionFlag as PermissionFlag, __webpack_exports__PixelsPerInch as PixelsPerInch, __webpack_exports__PromiseCapability as PromiseCapability, __webpack_exports__RenderingCancelledException as RenderingCancelledException, __webpack_exports__UnexpectedResponseException as UnexpectedResponseException, __webpack_exports__Util as Util, __webpack_exports__VerbosityLevel as VerbosityLevel, __webpack_exports__XfaLayer as XfaLayer, __webpack_exports__build as build, __webpack_exports__createValidAbsoluteUrl as createValidAbsoluteUrl, __webpack_exports__fetchData as fetchData, __webpack_exports__getDocument as getDocument, __webpack_exports__getFilenameFromUrl as getFilenameFromUrl, __webpack_exports__getPdfFilenameFromUrl as getPdfFilenameFromUrl, __webpack_exports__getXfaPageViewport as getXfaPageViewport, __webpack_exports__isDataScheme as isDataScheme, __webpack_exports__isPdfFile as isPdfFile, __webpack_exports__noContextMenu as noContextMenu, __webpack_exports__normalizeUnicode as normalizeUnicode, __webpack_exports__renderTextLayer as renderTextLayer, __webpack_exports__setLayerDimensions as setLayerDimensions, __webpack_exports__shadow as shadow, __webpack_exports__updateTextLayer as updateTextLayer, __webpack_exports__version as version }; +/******/ + +//# sourceMappingURL=pdf.mjs.map \ No newline at end of file diff --git a/lib/jspdf/build/pdf.mjs.map b/lib/jspdf/build/pdf.mjs.map new file mode 100644 index 0000000..f2ad858 --- /dev/null +++ b/lib/jspdf/build/pdf.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pdf.mjs","mappings":"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","sources":["webpack://pdf.js/src/shared/scripting_utils.js","webpack://pdf.js/src/display/annotation_layer.js","webpack://pdf.js/src/display/annotation_storage.js","webpack://pdf.js/src/display/api.js","webpack://pdf.js/src/display/base_factory.js","webpack://pdf.js/src/display/pattern_helper.js","webpack://pdf.js/src/shared/image_utils.js","webpack://pdf.js/src/display/canvas.js","webpack://pdf.js/src/display/display_utils.js","webpack://pdf.js/src/display/draw_layer.js","webpack://pdf.js/src/display/editor/freetext.js","webpack://pdf.js/src/display/editor/highlight.js","webpack://pdf.js/src/display/editor/ink.js","webpack://pdf.js/src/display/editor/stamp.js","webpack://pdf.js/src/display/editor/annotation_editor_layer.js","webpack://pdf.js/src/display/editor/color_picker.js","webpack://pdf.js/src/display/editor/alt_text.js","webpack://pdf.js/src/display/editor/toolbar.js","webpack://pdf.js/src/display/editor/editor.js","webpack://pdf.js/src/display/editor/outliner.js","webpack://pdf.js/src/display/editor/tools.js","webpack://pdf.js/src/display/fetch_stream.js","webpack://pdf.js/src/display/font_loader.js","webpack://pdf.js/src/display/metadata.js","webpack://pdf.js/src/display/network.js","webpack://pdf.js/src/display/content_disposition.js","webpack://pdf.js/src/display/network_utils.js","webpack://pdf.js/src/display/node_stream.js","webpack://pdf.js/src/display/node_utils.js","webpack://pdf.js/src/display/optional_content_config.js","webpack://pdf.js/src/display/text_layer.js","webpack://pdf.js/src/display/transport_stream.js","webpack://pdf.js/src/display/worker_options.js","webpack://pdf.js/src/display/xfa_layer.js","webpack://pdf.js/src/display/xfa_text.js","webpack://pdf.js/src/pdf.js","webpack://pdf.js/src/shared/message_handler.js","webpack://pdf.js/src/shared/murmurhash3.js","webpack://pdf.js/src/shared/util.js","webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/async module","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/webpack/before-startup","webpack://pdf.js/webpack/startup","webpack://pdf.js/webpack/after-startup"],"sourcesContent":["/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * PLEASE NOTE: This file is currently imported in both the `../display/` and\n * `../scripting_api/` folders, hence be EXTREMELY careful about\n * introducing any dependencies here since that can lead to an\n * unexpected/unnecessary size increase of the *built* files.\n */\n\nfunction makeColorComp(n) {\n return Math.floor(Math.max(0, Math.min(1, n)) * 255)\n .toString(16)\n .padStart(2, \"0\");\n}\n\nfunction scaleAndClamp(x) {\n return Math.max(0, Math.min(255, 255 * x));\n}\n\n// PDF specifications section 10.3\nclass ColorConverters {\n static CMYK_G([c, y, m, k]) {\n return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\n }\n\n static G_CMYK([g]) {\n return [\"CMYK\", 0, 0, 0, 1 - g];\n }\n\n static G_RGB([g]) {\n return [\"RGB\", g, g, g];\n }\n\n static G_rgb([g]) {\n g = scaleAndClamp(g);\n return [g, g, g];\n }\n\n static G_HTML([g]) {\n const G = makeColorComp(g);\n return `#${G}${G}${G}`;\n }\n\n static RGB_G([r, g, b]) {\n return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\n }\n\n static RGB_rgb(color) {\n return color.map(scaleAndClamp);\n }\n\n static RGB_HTML(color) {\n return `#${color.map(makeColorComp).join(\"\")}`;\n }\n\n static T_HTML() {\n return \"#00000000\";\n }\n\n static T_rgb() {\n return [null];\n }\n\n static CMYK_RGB([c, y, m, k]) {\n return [\n \"RGB\",\n 1 - Math.min(1, c + k),\n 1 - Math.min(1, m + k),\n 1 - Math.min(1, y + k),\n ];\n }\n\n static CMYK_rgb([c, y, m, k]) {\n return [\n scaleAndClamp(1 - Math.min(1, c + k)),\n scaleAndClamp(1 - Math.min(1, m + k)),\n scaleAndClamp(1 - Math.min(1, y + k)),\n ];\n }\n\n static CMYK_HTML(components) {\n const rgb = this.CMYK_RGB(components).slice(1);\n return this.RGB_HTML(rgb);\n }\n\n static RGB_CMYK([r, g, b]) {\n const c = 1 - r;\n const m = 1 - g;\n const y = 1 - b;\n const k = Math.min(c, m, y);\n return [\"CMYK\", c, m, y, k];\n }\n}\n\nexport { ColorConverters };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").PDFPageProxy} PDFPageProxy */\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../../web/interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"../../web/interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport {\n AnnotationBorderStyleType,\n AnnotationEditorType,\n AnnotationPrefix,\n AnnotationType,\n FeatureTest,\n LINE_FACTOR,\n shadow,\n unreachable,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport {\n DOMSVGFactory,\n getFilenameFromUrl,\n PDFDateString,\n setLayerDimensions,\n} from \"./display_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { ColorConverters } from \"../shared/scripting_utils.js\";\nimport { XfaLayer } from \"./xfa_layer.js\";\n\nconst DEFAULT_TAB_INDEX = 1000;\nconst DEFAULT_FONT_SIZE = 9;\nconst GetElementsByNameSet = new WeakSet();\n\nfunction getRectDims(rect) {\n return {\n width: rect[2] - rect[0],\n height: rect[3] - rect[1],\n };\n}\n\n/**\n * @typedef {Object} AnnotationElementParameters\n * @property {Object} data\n * @property {HTMLDivElement} layer\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} [downloadManager]\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {Object} svgFactory\n * @property {boolean} [enableScripting]\n * @property {boolean} [hasJSActions]\n * @property {Object} [fieldObjects]\n */\n\nclass AnnotationElementFactory {\n /**\n * @param {AnnotationElementParameters} parameters\n * @returns {AnnotationElement}\n */\n static create(parameters) {\n const subtype = parameters.data.annotationType;\n\n switch (subtype) {\n case AnnotationType.LINK:\n return new LinkAnnotationElement(parameters);\n\n case AnnotationType.TEXT:\n return new TextAnnotationElement(parameters);\n\n case AnnotationType.WIDGET:\n const fieldType = parameters.data.fieldType;\n\n switch (fieldType) {\n case \"Tx\":\n return new TextWidgetAnnotationElement(parameters);\n case \"Btn\":\n if (parameters.data.radioButton) {\n return new RadioButtonWidgetAnnotationElement(parameters);\n } else if (parameters.data.checkBox) {\n return new CheckboxWidgetAnnotationElement(parameters);\n }\n return new PushButtonWidgetAnnotationElement(parameters);\n case \"Ch\":\n return new ChoiceWidgetAnnotationElement(parameters);\n case \"Sig\":\n return new SignatureWidgetAnnotationElement(parameters);\n }\n return new WidgetAnnotationElement(parameters);\n\n case AnnotationType.POPUP:\n return new PopupAnnotationElement(parameters);\n\n case AnnotationType.FREETEXT:\n return new FreeTextAnnotationElement(parameters);\n\n case AnnotationType.LINE:\n return new LineAnnotationElement(parameters);\n\n case AnnotationType.SQUARE:\n return new SquareAnnotationElement(parameters);\n\n case AnnotationType.CIRCLE:\n return new CircleAnnotationElement(parameters);\n\n case AnnotationType.POLYLINE:\n return new PolylineAnnotationElement(parameters);\n\n case AnnotationType.CARET:\n return new CaretAnnotationElement(parameters);\n\n case AnnotationType.INK:\n return new InkAnnotationElement(parameters);\n\n case AnnotationType.POLYGON:\n return new PolygonAnnotationElement(parameters);\n\n case AnnotationType.HIGHLIGHT:\n return new HighlightAnnotationElement(parameters);\n\n case AnnotationType.UNDERLINE:\n return new UnderlineAnnotationElement(parameters);\n\n case AnnotationType.SQUIGGLY:\n return new SquigglyAnnotationElement(parameters);\n\n case AnnotationType.STRIKEOUT:\n return new StrikeOutAnnotationElement(parameters);\n\n case AnnotationType.STAMP:\n return new StampAnnotationElement(parameters);\n\n case AnnotationType.FILEATTACHMENT:\n return new FileAttachmentAnnotationElement(parameters);\n\n default:\n return new AnnotationElement(parameters);\n }\n }\n}\n\nclass AnnotationElement {\n #hasBorder = false;\n\n constructor(\n parameters,\n {\n isRenderable = false,\n ignoreBorder = false,\n createQuadrilaterals = false,\n } = {}\n ) {\n this.isRenderable = isRenderable;\n this.data = parameters.data;\n this.layer = parameters.layer;\n this.linkService = parameters.linkService;\n this.downloadManager = parameters.downloadManager;\n this.imageResourcesPath = parameters.imageResourcesPath;\n this.renderForms = parameters.renderForms;\n this.svgFactory = parameters.svgFactory;\n this.annotationStorage = parameters.annotationStorage;\n this.enableScripting = parameters.enableScripting;\n this.hasJSActions = parameters.hasJSActions;\n this._fieldObjects = parameters.fieldObjects;\n this.parent = parameters.parent;\n\n if (isRenderable) {\n this.container = this._createContainer(ignoreBorder);\n }\n if (createQuadrilaterals) {\n this._createQuadrilaterals();\n }\n }\n\n static _hasPopupData({ titleObj, contentsObj, richText }) {\n return !!(titleObj?.str || contentsObj?.str || richText?.str);\n }\n\n get hasPopupData() {\n return AnnotationElement._hasPopupData(this.data);\n }\n\n /**\n * Create an empty container for the annotation's HTML element.\n *\n * @private\n * @param {boolean} ignoreBorder\n * @memberof AnnotationElement\n * @returns {HTMLElement} A section element.\n */\n _createContainer(ignoreBorder) {\n const {\n data,\n parent: { page, viewport },\n } = this;\n\n const container = document.createElement(\"section\");\n container.setAttribute(\"data-annotation-id\", data.id);\n if (!(this instanceof WidgetAnnotationElement)) {\n container.tabIndex = DEFAULT_TAB_INDEX;\n }\n\n // The accessibility manager will move the annotation in the DOM in\n // order to match the visual ordering.\n // But if an annotation is above an other one, then we must draw it\n // after the other one whatever the order is in the DOM, hence the\n // use of the z-index.\n container.style.zIndex = this.parent.zIndex++;\n\n if (this.data.popupRef) {\n container.setAttribute(\"aria-haspopup\", \"dialog\");\n }\n\n if (data.noRotate) {\n container.classList.add(\"norotate\");\n }\n\n const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n\n if (!data.rect || this instanceof PopupAnnotationElement) {\n const { rotation } = data;\n if (!data.hasOwnCanvas && rotation !== 0) {\n this.setRotation(rotation, container);\n }\n return container;\n }\n\n const { width, height } = getRectDims(data.rect);\n\n // Do *not* modify `data.rect`, since that will corrupt the annotation\n // position on subsequent calls to `_createContainer` (see issue 6804).\n const rect = Util.normalizeRect([\n data.rect[0],\n page.view[3] - data.rect[1] + page.view[1],\n data.rect[2],\n page.view[3] - data.rect[3] + page.view[1],\n ]);\n\n if (!ignoreBorder && data.borderStyle.width > 0) {\n container.style.borderWidth = `${data.borderStyle.width}px`;\n\n const horizontalRadius = data.borderStyle.horizontalCornerRadius;\n const verticalRadius = data.borderStyle.verticalCornerRadius;\n if (horizontalRadius > 0 || verticalRadius > 0) {\n const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`;\n container.style.borderRadius = radius;\n } else if (this instanceof RadioButtonWidgetAnnotationElement) {\n const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`;\n container.style.borderRadius = radius;\n }\n\n switch (data.borderStyle.style) {\n case AnnotationBorderStyleType.SOLID:\n container.style.borderStyle = \"solid\";\n break;\n\n case AnnotationBorderStyleType.DASHED:\n container.style.borderStyle = \"dashed\";\n break;\n\n case AnnotationBorderStyleType.BEVELED:\n warn(\"Unimplemented border style: beveled\");\n break;\n\n case AnnotationBorderStyleType.INSET:\n warn(\"Unimplemented border style: inset\");\n break;\n\n case AnnotationBorderStyleType.UNDERLINE:\n container.style.borderBottomStyle = \"solid\";\n break;\n\n default:\n break;\n }\n\n const borderColor = data.borderColor || null;\n if (borderColor) {\n this.#hasBorder = true;\n container.style.borderColor = Util.makeHexColor(\n borderColor[0] | 0,\n borderColor[1] | 0,\n borderColor[2] | 0\n );\n } else {\n // Transparent (invisible) border, so do not draw it at all.\n container.style.borderWidth = 0;\n }\n }\n\n container.style.left = `${(100 * (rect[0] - pageX)) / pageWidth}%`;\n container.style.top = `${(100 * (rect[1] - pageY)) / pageHeight}%`;\n\n const { rotation } = data;\n if (data.hasOwnCanvas || rotation === 0) {\n container.style.width = `${(100 * width) / pageWidth}%`;\n container.style.height = `${(100 * height) / pageHeight}%`;\n } else {\n this.setRotation(rotation, container);\n }\n\n return container;\n }\n\n setRotation(angle, container = this.container) {\n if (!this.data.rect) {\n return;\n }\n const { pageWidth, pageHeight } = this.parent.viewport.rawDims;\n const { width, height } = getRectDims(this.data.rect);\n\n let elementWidth, elementHeight;\n if (angle % 180 === 0) {\n elementWidth = (100 * width) / pageWidth;\n elementHeight = (100 * height) / pageHeight;\n } else {\n elementWidth = (100 * height) / pageWidth;\n elementHeight = (100 * width) / pageHeight;\n }\n\n container.style.width = `${elementWidth}%`;\n container.style.height = `${elementHeight}%`;\n\n container.setAttribute(\"data-main-rotation\", (360 - angle) % 360);\n }\n\n get _commonActions() {\n const setColor = (jsName, styleName, event) => {\n const color = event.detail[jsName];\n const colorType = color[0];\n const colorArray = color.slice(1);\n event.target.style[styleName] =\n ColorConverters[`${colorType}_HTML`](colorArray);\n this.annotationStorage.setValue(this.data.id, {\n [styleName]: ColorConverters[`${colorType}_rgb`](colorArray),\n });\n };\n\n return shadow(this, \"_commonActions\", {\n display: event => {\n const { display } = event.detail;\n // See scripting/constants.js for the values of `Display`.\n // 0 = visible, 1 = hidden, 2 = noPrint and 3 = noView.\n const hidden = display % 2 === 1;\n this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n this.annotationStorage.setValue(this.data.id, {\n noView: hidden,\n noPrint: display === 1 || display === 2,\n });\n },\n print: event => {\n this.annotationStorage.setValue(this.data.id, {\n noPrint: !event.detail.print,\n });\n },\n hidden: event => {\n const { hidden } = event.detail;\n this.container.style.visibility = hidden ? \"hidden\" : \"visible\";\n this.annotationStorage.setValue(this.data.id, {\n noPrint: hidden,\n noView: hidden,\n });\n },\n focus: event => {\n setTimeout(() => event.target.focus({ preventScroll: false }), 0);\n },\n userName: event => {\n // tooltip\n event.target.title = event.detail.userName;\n },\n readonly: event => {\n event.target.disabled = event.detail.readonly;\n },\n required: event => {\n this._setRequired(event.target, event.detail.required);\n },\n bgColor: event => {\n setColor(\"bgColor\", \"backgroundColor\", event);\n },\n fillColor: event => {\n setColor(\"fillColor\", \"backgroundColor\", event);\n },\n fgColor: event => {\n setColor(\"fgColor\", \"color\", event);\n },\n textColor: event => {\n setColor(\"textColor\", \"color\", event);\n },\n borderColor: event => {\n setColor(\"borderColor\", \"borderColor\", event);\n },\n strokeColor: event => {\n setColor(\"strokeColor\", \"borderColor\", event);\n },\n rotation: event => {\n const angle = event.detail.rotation;\n this.setRotation(angle);\n this.annotationStorage.setValue(this.data.id, {\n rotation: angle,\n });\n },\n });\n }\n\n _dispatchEventFromSandbox(actions, jsEvent) {\n const commonActions = this._commonActions;\n for (const name of Object.keys(jsEvent.detail)) {\n const action = actions[name] || commonActions[name];\n action?.(jsEvent);\n }\n }\n\n _setDefaultPropertiesFromJS(element) {\n if (!this.enableScripting) {\n return;\n }\n\n // Some properties may have been updated thanks to JS.\n const storedData = this.annotationStorage.getRawValue(this.data.id);\n if (!storedData) {\n return;\n }\n\n const commonActions = this._commonActions;\n for (const [actionName, detail] of Object.entries(storedData)) {\n const action = commonActions[actionName];\n if (action) {\n const eventProxy = {\n detail: {\n [actionName]: detail,\n },\n target: element,\n };\n action(eventProxy);\n // The action has been consumed: no need to keep it.\n delete storedData[actionName];\n }\n }\n }\n\n /**\n * Create quadrilaterals from the annotation's quadpoints.\n *\n * @private\n * @memberof AnnotationElement\n */\n _createQuadrilaterals() {\n if (!this.container) {\n return;\n }\n const { quadPoints } = this.data;\n if (!quadPoints) {\n return;\n }\n\n const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect;\n\n if (quadPoints.length === 1) {\n const [, { x: trX, y: trY }, { x: blX, y: blY }] = quadPoints[0];\n if (\n rectTrX === trX &&\n rectTrY === trY &&\n rectBlX === blX &&\n rectBlY === blY\n ) {\n // The quadpoints cover the whole annotation rectangle, so no need to\n // create a quadrilateral.\n return;\n }\n }\n\n const { style } = this.container;\n let svgBuffer;\n if (this.#hasBorder) {\n const { borderColor, borderWidth } = style;\n style.borderWidth = 0;\n svgBuffer = [\n \"url('data:image/svg+xml;utf8,\",\n ``,\n ``,\n ];\n this.container.classList.add(\"hasBorder\");\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n this.container.classList.add(\"hasClipPath\");\n }\n\n const width = rectTrX - rectBlX;\n const height = rectTrY - rectBlY;\n\n const { svgFactory } = this;\n const svg = svgFactory.createElement(\"svg\");\n svg.classList.add(\"quadrilateralsContainer\");\n svg.setAttribute(\"width\", 0);\n svg.setAttribute(\"height\", 0);\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const clipPath = svgFactory.createElement(\"clipPath\");\n const id = `clippath_${this.data.id}`;\n clipPath.setAttribute(\"id\", id);\n clipPath.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n defs.append(clipPath);\n\n for (const [, { x: trX, y: trY }, { x: blX, y: blY }] of quadPoints) {\n const rect = svgFactory.createElement(\"rect\");\n const x = (blX - rectBlX) / width;\n const y = (rectTrY - trY) / height;\n const rectWidth = (trX - blX) / width;\n const rectHeight = (trY - blY) / height;\n rect.setAttribute(\"x\", x);\n rect.setAttribute(\"y\", y);\n rect.setAttribute(\"width\", rectWidth);\n rect.setAttribute(\"height\", rectHeight);\n clipPath.append(rect);\n svgBuffer?.push(\n ``\n );\n }\n\n if (this.#hasBorder) {\n svgBuffer.push(`')`);\n style.backgroundImage = svgBuffer.join(\"\");\n }\n\n this.container.append(svg);\n this.container.style.clipPath = `url(#${id})`;\n }\n\n /**\n * Create a popup for the annotation's HTML element. This is used for\n * annotations that do not have a Popup entry in the dictionary, but\n * are of a type that works with popups (such as Highlight annotations).\n *\n * @private\n * @memberof AnnotationElement\n */\n _createPopup() {\n const { container, data } = this;\n container.setAttribute(\"aria-haspopup\", \"dialog\");\n\n const popup = new PopupAnnotationElement({\n data: {\n color: data.color,\n titleObj: data.titleObj,\n modificationDate: data.modificationDate,\n contentsObj: data.contentsObj,\n richText: data.richText,\n parentRect: data.rect,\n borderStyle: 0,\n id: `popup_${data.id}`,\n rotation: data.rotation,\n },\n parent: this.parent,\n elements: [this],\n });\n this.parent.div.append(popup.render());\n }\n\n /**\n * Render the annotation's HTML element(s).\n *\n * @public\n * @memberof AnnotationElement\n */\n render() {\n unreachable(\"Abstract method `AnnotationElement.render` called\");\n }\n\n /**\n * @private\n * @returns {Array}\n */\n _getElementsByName(name, skipId = null) {\n const fields = [];\n\n if (this._fieldObjects) {\n const fieldObj = this._fieldObjects[name];\n if (fieldObj) {\n for (const { page, id, exportValues } of fieldObj) {\n if (page === -1) {\n continue;\n }\n if (id === skipId) {\n continue;\n }\n const exportValue =\n typeof exportValues === \"string\" ? exportValues : null;\n\n const domElement = document.querySelector(\n `[data-element-id=\"${id}\"]`\n );\n if (domElement && !GetElementsByNameSet.has(domElement)) {\n warn(`_getElementsByName - element not allowed: ${id}`);\n continue;\n }\n fields.push({ id, exportValue, domElement });\n }\n }\n return fields;\n }\n // Fallback to a regular DOM lookup, to ensure that the standalone\n // viewer components won't break.\n for (const domElement of document.getElementsByName(name)) {\n const { exportValue } = domElement;\n const id = domElement.getAttribute(\"data-element-id\");\n if (id === skipId) {\n continue;\n }\n if (!GetElementsByNameSet.has(domElement)) {\n continue;\n }\n fields.push({ id, exportValue, domElement });\n }\n return fields;\n }\n\n show() {\n if (this.container) {\n this.container.hidden = false;\n }\n this.popup?.maybeShow();\n }\n\n hide() {\n if (this.container) {\n this.container.hidden = true;\n }\n this.popup?.forceHide();\n }\n\n /**\n * Get the HTML element(s) which can trigger a popup when clicked or hovered.\n *\n * @public\n * @memberof AnnotationElement\n * @returns {Array|HTMLElement} An array of elements or an\n * element.\n */\n getElementsToTriggerPopup() {\n return this.container;\n }\n\n addHighlightArea() {\n const triggers = this.getElementsToTriggerPopup();\n if (Array.isArray(triggers)) {\n for (const element of triggers) {\n element.classList.add(\"highlightArea\");\n }\n } else {\n triggers.classList.add(\"highlightArea\");\n }\n }\n\n get _isEditable() {\n return false;\n }\n\n _editOnDoubleClick() {\n if (!this._isEditable) {\n return;\n }\n const {\n annotationEditorType: mode,\n data: { id: editId },\n } = this;\n this.container.addEventListener(\"dblclick\", () => {\n this.linkService.eventBus?.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode,\n editId,\n });\n });\n }\n}\n\nclass LinkAnnotationElement extends AnnotationElement {\n constructor(parameters, options = null) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: !!options?.ignoreBorder,\n createQuadrilaterals: true,\n });\n this.isTooltipOnly = parameters.data.isTooltipOnly;\n }\n\n render() {\n const { data, linkService } = this;\n const link = document.createElement(\"a\");\n link.setAttribute(\"data-element-id\", data.id);\n let isBound = false;\n\n if (data.url) {\n linkService.addLinkAttributes(link, data.url, data.newWindow);\n isBound = true;\n } else if (data.action) {\n this._bindNamedAction(link, data.action);\n isBound = true;\n } else if (data.attachment) {\n this.#bindAttachment(link, data.attachment, data.attachmentDest);\n isBound = true;\n } else if (data.setOCGState) {\n this.#bindSetOCGState(link, data.setOCGState);\n isBound = true;\n } else if (data.dest) {\n this._bindLink(link, data.dest);\n isBound = true;\n } else {\n if (\n data.actions &&\n (data.actions.Action ||\n data.actions[\"Mouse Up\"] ||\n data.actions[\"Mouse Down\"]) &&\n this.enableScripting &&\n this.hasJSActions\n ) {\n this._bindJSAction(link, data);\n isBound = true;\n }\n\n if (data.resetForm) {\n this._bindResetFormAction(link, data.resetForm);\n isBound = true;\n } else if (this.isTooltipOnly && !isBound) {\n this._bindLink(link, \"\");\n isBound = true;\n }\n }\n\n this.container.classList.add(\"linkAnnotation\");\n if (isBound) {\n this.container.append(link);\n }\n\n return this.container;\n }\n\n #setInternalLink() {\n this.container.setAttribute(\"data-internal-link\", \"\");\n }\n\n /**\n * Bind internal links to the link element.\n *\n * @private\n * @param {Object} link\n * @param {Object} destination\n * @memberof LinkAnnotationElement\n */\n _bindLink(link, destination) {\n link.href = this.linkService.getDestinationHash(destination);\n link.onclick = () => {\n if (destination) {\n this.linkService.goToDestination(destination);\n }\n return false;\n };\n if (destination || destination === /* isTooltipOnly = */ \"\") {\n this.#setInternalLink();\n }\n }\n\n /**\n * Bind named actions to the link element.\n *\n * @private\n * @param {Object} link\n * @param {Object} action\n * @memberof LinkAnnotationElement\n */\n _bindNamedAction(link, action) {\n link.href = this.linkService.getAnchorUrl(\"\");\n link.onclick = () => {\n this.linkService.executeNamedAction(action);\n return false;\n };\n this.#setInternalLink();\n }\n\n /**\n * Bind attachments to the link element.\n * @param {Object} link\n * @param {Object} attachment\n * @param {str} [dest]\n */\n #bindAttachment(link, attachment, dest = null) {\n link.href = this.linkService.getAnchorUrl(\"\");\n link.onclick = () => {\n this.downloadManager?.openOrDownloadData(\n attachment.content,\n attachment.filename,\n dest\n );\n return false;\n };\n this.#setInternalLink();\n }\n\n /**\n * Bind SetOCGState actions to the link element.\n * @param {Object} link\n * @param {Object} action\n */\n #bindSetOCGState(link, action) {\n link.href = this.linkService.getAnchorUrl(\"\");\n link.onclick = () => {\n this.linkService.executeSetOCGState(action);\n return false;\n };\n this.#setInternalLink();\n }\n\n /**\n * Bind JS actions to the link element.\n *\n * @private\n * @param {Object} link\n * @param {Object} data\n * @memberof LinkAnnotationElement\n */\n _bindJSAction(link, data) {\n link.href = this.linkService.getAnchorUrl(\"\");\n const map = new Map([\n [\"Action\", \"onclick\"],\n [\"Mouse Up\", \"onmouseup\"],\n [\"Mouse Down\", \"onmousedown\"],\n ]);\n for (const name of Object.keys(data.actions)) {\n const jsName = map.get(name);\n if (!jsName) {\n continue;\n }\n link[jsName] = () => {\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: data.id,\n name,\n },\n });\n return false;\n };\n }\n\n if (!link.onclick) {\n link.onclick = () => false;\n }\n this.#setInternalLink();\n }\n\n _bindResetFormAction(link, resetForm) {\n const otherClickAction = link.onclick;\n if (!otherClickAction) {\n link.href = this.linkService.getAnchorUrl(\"\");\n }\n this.#setInternalLink();\n\n if (!this._fieldObjects) {\n warn(\n `_bindResetFormAction - \"resetForm\" action not supported, ` +\n \"ensure that the `fieldObjects` parameter is provided.\"\n );\n if (!otherClickAction) {\n link.onclick = () => false;\n }\n return;\n }\n\n link.onclick = () => {\n otherClickAction?.();\n\n const {\n fields: resetFormFields,\n refs: resetFormRefs,\n include,\n } = resetForm;\n\n const allFields = [];\n if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {\n const fieldIds = new Set(resetFormRefs);\n for (const fieldName of resetFormFields) {\n const fields = this._fieldObjects[fieldName] || [];\n for (const { id } of fields) {\n fieldIds.add(id);\n }\n }\n for (const fields of Object.values(this._fieldObjects)) {\n for (const field of fields) {\n if (fieldIds.has(field.id) === include) {\n allFields.push(field);\n }\n }\n }\n } else {\n for (const fields of Object.values(this._fieldObjects)) {\n allFields.push(...fields);\n }\n }\n\n const storage = this.annotationStorage;\n const allIds = [];\n for (const field of allFields) {\n const { id } = field;\n allIds.push(id);\n switch (field.type) {\n case \"text\": {\n const value = field.defaultValue || \"\";\n storage.setValue(id, { value });\n break;\n }\n case \"checkbox\":\n case \"radiobutton\": {\n const value = field.defaultValue === field.exportValues;\n storage.setValue(id, { value });\n break;\n }\n case \"combobox\":\n case \"listbox\": {\n const value = field.defaultValue || \"\";\n storage.setValue(id, { value });\n break;\n }\n default:\n continue;\n }\n\n const domElement = document.querySelector(`[data-element-id=\"${id}\"]`);\n if (!domElement) {\n continue;\n } else if (!GetElementsByNameSet.has(domElement)) {\n warn(`_bindResetFormAction - element not allowed: ${id}`);\n continue;\n }\n domElement.dispatchEvent(new Event(\"resetform\"));\n }\n\n if (this.enableScripting) {\n // Update the values in the sandbox.\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: \"app\",\n ids: allIds,\n name: \"ResetForm\",\n },\n });\n }\n\n return false;\n };\n }\n}\n\nclass TextAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true });\n }\n\n render() {\n this.container.classList.add(\"textAnnotation\");\n\n const image = document.createElement(\"img\");\n image.src =\n this.imageResourcesPath +\n \"annotation-\" +\n this.data.name.toLowerCase() +\n \".svg\";\n image.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\");\n image.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ type: this.data.name })\n );\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.append(image);\n return this.container;\n }\n}\n\nclass WidgetAnnotationElement extends AnnotationElement {\n render() {\n // Show only the container for unsupported field types.\n if (this.data.alternativeText) {\n this.container.title = this.data.alternativeText;\n }\n\n return this.container;\n }\n\n showElementAndHideCanvas(element) {\n if (this.data.hasOwnCanvas) {\n if (element.previousSibling?.nodeName === \"CANVAS\") {\n element.previousSibling.hidden = true;\n }\n element.hidden = false;\n }\n }\n\n _getKeyModifier(event) {\n return FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;\n }\n\n _setEventListener(element, elementData, baseName, eventName, valueGetter) {\n if (baseName.includes(\"mouse\")) {\n // Mouse events\n element.addEventListener(baseName, event => {\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: this.data.id,\n name: eventName,\n value: valueGetter(event),\n shift: event.shiftKey,\n modifier: this._getKeyModifier(event),\n },\n });\n });\n } else {\n // Non-mouse events\n element.addEventListener(baseName, event => {\n if (baseName === \"blur\") {\n if (!elementData.focused || !event.relatedTarget) {\n return;\n }\n elementData.focused = false;\n } else if (baseName === \"focus\") {\n if (elementData.focused) {\n return;\n }\n elementData.focused = true;\n }\n\n if (!valueGetter) {\n return;\n }\n\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: this.data.id,\n name: eventName,\n value: valueGetter(event),\n },\n });\n });\n }\n }\n\n _setEventListeners(element, elementData, names, getter) {\n for (const [baseName, eventName] of names) {\n if (eventName === \"Action\" || this.data.actions?.[eventName]) {\n if (eventName === \"Focus\" || eventName === \"Blur\") {\n elementData ||= { focused: false };\n }\n this._setEventListener(\n element,\n elementData,\n baseName,\n eventName,\n getter\n );\n if (eventName === \"Focus\" && !this.data.actions?.Blur) {\n // Ensure that elementData will have the correct value.\n this._setEventListener(element, elementData, \"blur\", \"Blur\", null);\n } else if (eventName === \"Blur\" && !this.data.actions?.Focus) {\n this._setEventListener(element, elementData, \"focus\", \"Focus\", null);\n }\n }\n }\n }\n\n _setBackgroundColor(element) {\n const color = this.data.backgroundColor || null;\n element.style.backgroundColor =\n color === null\n ? \"transparent\"\n : Util.makeHexColor(color[0], color[1], color[2]);\n }\n\n /**\n * Apply text styles to the text in the element.\n *\n * @private\n * @param {HTMLDivElement} element\n * @memberof TextWidgetAnnotationElement\n */\n _setTextStyle(element) {\n const TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\n const { fontColor } = this.data.defaultAppearanceData;\n const fontSize =\n this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE;\n\n const style = element.style;\n\n // TODO: If the font-size is zero, calculate it based on the height and\n // width of the element.\n // Not setting `style.fontSize` will use the default font-size for now.\n\n // We don't use the font, as specified in the PDF document, for the \n // element. Hence using the original `fontSize` could look bad, which is why\n // it's instead based on the field height.\n // If the height is \"big\" then it could lead to a too big font size\n // so in this case use the one we've in the pdf (hence the min).\n let computedFontSize;\n const BORDER_SIZE = 2;\n const roundToOneDecimal = x => Math.round(10 * x) / 10;\n if (this.data.multiLine) {\n const height = Math.abs(\n this.data.rect[3] - this.data.rect[1] - BORDER_SIZE\n );\n const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1;\n const lineHeight = height / numberOfLines;\n computedFontSize = Math.min(\n fontSize,\n roundToOneDecimal(lineHeight / LINE_FACTOR)\n );\n } else {\n const height = Math.abs(\n this.data.rect[3] - this.data.rect[1] - BORDER_SIZE\n );\n computedFontSize = Math.min(\n fontSize,\n roundToOneDecimal(height / LINE_FACTOR)\n );\n }\n style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`;\n\n style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);\n\n if (this.data.textAlignment !== null) {\n style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\n }\n }\n\n _setRequired(element, isRequired) {\n if (isRequired) {\n element.setAttribute(\"required\", true);\n } else {\n element.removeAttribute(\"required\");\n }\n element.setAttribute(\"aria-required\", isRequired);\n }\n}\n\nclass TextWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n const isRenderable =\n parameters.renderForms ||\n parameters.data.hasOwnCanvas ||\n (!parameters.data.hasAppearance && !!parameters.data.fieldValue);\n super(parameters, { isRenderable });\n }\n\n setPropertyOnSiblings(base, key, value, keyInStorage) {\n const storage = this.annotationStorage;\n for (const element of this._getElementsByName(\n base.name,\n /* skipId = */ base.id\n )) {\n if (element.domElement) {\n element.domElement[key] = value;\n }\n storage.setValue(element.id, { [keyInStorage]: value });\n }\n }\n\n render() {\n const storage = this.annotationStorage;\n const id = this.data.id;\n\n this.container.classList.add(\"textWidgetAnnotation\");\n\n let element = null;\n if (this.renderForms) {\n // NOTE: We cannot set the values using `element.value` below, since it\n // prevents the AnnotationLayer rasterizer in `test/driver.js`\n // from parsing the elements correctly for the reference tests.\n const storedData = storage.getValue(id, {\n value: this.data.fieldValue,\n });\n let textContent = storedData.value || \"\";\n const maxLen = storage.getValue(id, {\n charLimit: this.data.maxLen,\n }).charLimit;\n if (maxLen && textContent.length > maxLen) {\n textContent = textContent.slice(0, maxLen);\n }\n\n let fieldFormattedValues =\n storedData.formattedValue || this.data.textContent?.join(\"\\n\") || null;\n if (fieldFormattedValues && this.data.comb) {\n fieldFormattedValues = fieldFormattedValues.replaceAll(/\\s+/g, \"\");\n }\n\n const elementData = {\n userValue: textContent,\n formattedValue: fieldFormattedValues,\n lastCommittedValue: null,\n commitKey: 1,\n focused: false,\n };\n\n if (this.data.multiLine) {\n element = document.createElement(\"textarea\");\n element.textContent = fieldFormattedValues ?? textContent;\n if (this.data.doNotScroll) {\n element.style.overflowY = \"hidden\";\n }\n } else {\n element = document.createElement(\"input\");\n element.type = \"text\";\n element.setAttribute(\"value\", fieldFormattedValues ?? textContent);\n if (this.data.doNotScroll) {\n element.style.overflowX = \"hidden\";\n }\n }\n if (this.data.hasOwnCanvas) {\n element.hidden = true;\n }\n GetElementsByNameSet.add(element);\n element.setAttribute(\"data-element-id\", id);\n\n element.disabled = this.data.readOnly;\n element.name = this.data.fieldName;\n element.tabIndex = DEFAULT_TAB_INDEX;\n\n this._setRequired(element, this.data.required);\n\n if (maxLen) {\n element.maxLength = maxLen;\n }\n\n element.addEventListener(\"input\", event => {\n storage.setValue(id, { value: event.target.value });\n this.setPropertyOnSiblings(\n element,\n \"value\",\n event.target.value,\n \"value\"\n );\n elementData.formattedValue = null;\n });\n\n element.addEventListener(\"resetform\", event => {\n const defaultValue = this.data.defaultFieldValue ?? \"\";\n element.value = elementData.userValue = defaultValue;\n elementData.formattedValue = null;\n });\n\n let blurListener = event => {\n const { formattedValue } = elementData;\n if (formattedValue !== null && formattedValue !== undefined) {\n event.target.value = formattedValue;\n }\n // Reset the cursor position to the start of the field (issue 12359).\n event.target.scrollLeft = 0;\n };\n\n if (this.enableScripting && this.hasJSActions) {\n element.addEventListener(\"focus\", event => {\n if (elementData.focused) {\n return;\n }\n const { target } = event;\n if (elementData.userValue) {\n target.value = elementData.userValue;\n }\n elementData.lastCommittedValue = target.value;\n elementData.commitKey = 1;\n if (!this.data.actions?.Focus) {\n elementData.focused = true;\n }\n });\n\n element.addEventListener(\"updatefromsandbox\", jsEvent => {\n this.showElementAndHideCanvas(jsEvent.target);\n const actions = {\n value(event) {\n elementData.userValue = event.detail.value ?? \"\";\n storage.setValue(id, { value: elementData.userValue.toString() });\n event.target.value = elementData.userValue;\n },\n formattedValue(event) {\n const { formattedValue } = event.detail;\n elementData.formattedValue = formattedValue;\n if (\n formattedValue !== null &&\n formattedValue !== undefined &&\n event.target !== document.activeElement\n ) {\n // Input hasn't the focus so display formatted string\n event.target.value = formattedValue;\n }\n storage.setValue(id, {\n formattedValue,\n });\n },\n selRange(event) {\n event.target.setSelectionRange(...event.detail.selRange);\n },\n charLimit: event => {\n const { charLimit } = event.detail;\n const { target } = event;\n if (charLimit === 0) {\n target.removeAttribute(\"maxLength\");\n return;\n }\n\n target.setAttribute(\"maxLength\", charLimit);\n let value = elementData.userValue;\n if (!value || value.length <= charLimit) {\n return;\n }\n value = value.slice(0, charLimit);\n target.value = elementData.userValue = value;\n storage.setValue(id, { value });\n\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n willCommit: true,\n commitKey: 1,\n selStart: target.selectionStart,\n selEnd: target.selectionEnd,\n },\n });\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n // Even if the field hasn't any actions\n // leaving it can still trigger some actions with Calculate\n element.addEventListener(\"keydown\", event => {\n elementData.commitKey = 1;\n // If the key is one of Escape, Enter then the data are committed.\n // If we've a Tab then data will be committed on blur.\n let commitKey = -1;\n if (event.key === \"Escape\") {\n commitKey = 0;\n } else if (event.key === \"Enter\" && !this.data.multiLine) {\n // When we've a multiline field, \"Enter\" key is a key as the other\n // hence we don't commit the data (Acrobat behaves the same way)\n // (see issue #15627).\n commitKey = 2;\n } else if (event.key === \"Tab\") {\n elementData.commitKey = 3;\n }\n if (commitKey === -1) {\n return;\n }\n const { value } = event.target;\n if (elementData.lastCommittedValue === value) {\n return;\n }\n elementData.lastCommittedValue = value;\n // Save the entered value\n elementData.userValue = value;\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n willCommit: true,\n commitKey,\n selStart: event.target.selectionStart,\n selEnd: event.target.selectionEnd,\n },\n });\n });\n const _blurListener = blurListener;\n blurListener = null;\n element.addEventListener(\"blur\", event => {\n if (!elementData.focused || !event.relatedTarget) {\n return;\n }\n if (!this.data.actions?.Blur) {\n elementData.focused = false;\n }\n const { value } = event.target;\n elementData.userValue = value;\n if (elementData.lastCommittedValue !== value) {\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n willCommit: true,\n commitKey: elementData.commitKey,\n selStart: event.target.selectionStart,\n selEnd: event.target.selectionEnd,\n },\n });\n }\n _blurListener(event);\n });\n\n if (this.data.actions?.Keystroke) {\n element.addEventListener(\"beforeinput\", event => {\n elementData.lastCommittedValue = null;\n const { data, target } = event;\n const { value, selectionStart, selectionEnd } = target;\n\n let selStart = selectionStart,\n selEnd = selectionEnd;\n\n switch (event.inputType) {\n // https://rawgit.com/w3c/input-events/v1/index.html#interface-InputEvent-Attributes\n case \"deleteWordBackward\": {\n const match = value\n .substring(0, selectionStart)\n .match(/\\w*[^\\w]*$/);\n if (match) {\n selStart -= match[0].length;\n }\n break;\n }\n case \"deleteWordForward\": {\n const match = value\n .substring(selectionStart)\n .match(/^[^\\w]*\\w*/);\n if (match) {\n selEnd += match[0].length;\n }\n break;\n }\n case \"deleteContentBackward\":\n if (selectionStart === selectionEnd) {\n selStart -= 1;\n }\n break;\n case \"deleteContentForward\":\n if (selectionStart === selectionEnd) {\n selEnd += 1;\n }\n break;\n }\n\n // We handle the event ourselves.\n event.preventDefault();\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value,\n change: data || \"\",\n willCommit: false,\n selStart,\n selEnd,\n },\n });\n });\n }\n\n this._setEventListeners(\n element,\n elementData,\n [\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n ],\n event => event.target.value\n );\n }\n\n if (blurListener) {\n element.addEventListener(\"blur\", blurListener);\n }\n\n if (this.data.comb) {\n const fieldWidth = this.data.rect[2] - this.data.rect[0];\n const combWidth = fieldWidth / maxLen;\n\n element.classList.add(\"comb\");\n element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`;\n }\n } else {\n element = document.createElement(\"div\");\n element.textContent = this.data.fieldValue;\n element.style.verticalAlign = \"middle\";\n element.style.display = \"table-cell\";\n\n if (this.data.hasOwnCanvas) {\n element.hidden = true;\n }\n }\n\n this._setTextStyle(element);\n this._setBackgroundColor(element);\n this._setDefaultPropertiesFromJS(element);\n\n this.container.append(element);\n return this.container;\n }\n}\n\nclass SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: !!parameters.data.hasOwnCanvas });\n }\n}\n\nclass CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: parameters.renderForms });\n }\n\n render() {\n const storage = this.annotationStorage;\n const data = this.data;\n const id = data.id;\n let value = storage.getValue(id, {\n value: data.exportValue === data.fieldValue,\n }).value;\n if (typeof value === \"string\") {\n // The value has been changed through js and set in annotationStorage.\n value = value !== \"Off\";\n storage.setValue(id, { value });\n }\n\n this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n\n const element = document.createElement(\"input\");\n GetElementsByNameSet.add(element);\n element.setAttribute(\"data-element-id\", id);\n\n element.disabled = data.readOnly;\n this._setRequired(element, this.data.required);\n element.type = \"checkbox\";\n element.name = data.fieldName;\n if (value) {\n element.setAttribute(\"checked\", true);\n }\n element.setAttribute(\"exportValue\", data.exportValue);\n element.tabIndex = DEFAULT_TAB_INDEX;\n\n element.addEventListener(\"change\", event => {\n const { name, checked } = event.target;\n for (const checkbox of this._getElementsByName(name, /* skipId = */ id)) {\n const curChecked = checked && checkbox.exportValue === data.exportValue;\n if (checkbox.domElement) {\n checkbox.domElement.checked = curChecked;\n }\n storage.setValue(checkbox.id, { value: curChecked });\n }\n storage.setValue(id, { value: checked });\n });\n\n element.addEventListener(\"resetform\", event => {\n const defaultValue = data.defaultFieldValue || \"Off\";\n event.target.checked = defaultValue === data.exportValue;\n });\n\n if (this.enableScripting && this.hasJSActions) {\n element.addEventListener(\"updatefromsandbox\", jsEvent => {\n const actions = {\n value(event) {\n event.target.checked = event.detail.value !== \"Off\";\n storage.setValue(id, { value: event.target.checked });\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n this._setEventListeners(\n element,\n null,\n [\n [\"change\", \"Validate\"],\n [\"change\", \"Action\"],\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n ],\n event => event.target.checked\n );\n }\n\n this._setBackgroundColor(element);\n this._setDefaultPropertiesFromJS(element);\n\n this.container.append(element);\n return this.container;\n }\n}\n\nclass RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: parameters.renderForms });\n }\n\n render() {\n this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n const storage = this.annotationStorage;\n const data = this.data;\n const id = data.id;\n let value = storage.getValue(id, {\n value: data.fieldValue === data.buttonValue,\n }).value;\n if (typeof value === \"string\") {\n // The value has been changed through js and set in annotationStorage.\n value = value !== data.buttonValue;\n storage.setValue(id, { value });\n }\n\n if (value) {\n // It's possible that multiple radio buttons are checked.\n // So if this one is checked we just reset the other ones.\n // (see bug 1864136). Then when the other ones will be rendered they will\n // unchecked (because of their value in the storage).\n // Consequently, the first checked radio button will be the only checked\n // one.\n for (const radio of this._getElementsByName(\n data.fieldName,\n /* skipId = */ id\n )) {\n storage.setValue(radio.id, { value: false });\n }\n }\n\n const element = document.createElement(\"input\");\n GetElementsByNameSet.add(element);\n element.setAttribute(\"data-element-id\", id);\n\n element.disabled = data.readOnly;\n this._setRequired(element, this.data.required);\n element.type = \"radio\";\n element.name = data.fieldName;\n if (value) {\n element.setAttribute(\"checked\", true);\n }\n element.tabIndex = DEFAULT_TAB_INDEX;\n\n element.addEventListener(\"change\", event => {\n const { name, checked } = event.target;\n for (const radio of this._getElementsByName(name, /* skipId = */ id)) {\n storage.setValue(radio.id, { value: false });\n }\n storage.setValue(id, { value: checked });\n });\n\n element.addEventListener(\"resetform\", event => {\n const defaultValue = data.defaultFieldValue;\n event.target.checked =\n defaultValue !== null &&\n defaultValue !== undefined &&\n defaultValue === data.buttonValue;\n });\n\n if (this.enableScripting && this.hasJSActions) {\n const pdfButtonValue = data.buttonValue;\n element.addEventListener(\"updatefromsandbox\", jsEvent => {\n const actions = {\n value: event => {\n const checked = pdfButtonValue === event.detail.value;\n for (const radio of this._getElementsByName(event.target.name)) {\n const curChecked = checked && radio.id === id;\n if (radio.domElement) {\n radio.domElement.checked = curChecked;\n }\n storage.setValue(radio.id, { value: curChecked });\n }\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n this._setEventListeners(\n element,\n null,\n [\n [\"change\", \"Validate\"],\n [\"change\", \"Action\"],\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n ],\n event => event.target.checked\n );\n }\n\n this._setBackgroundColor(element);\n this._setDefaultPropertiesFromJS(element);\n\n this.container.append(element);\n return this.container;\n }\n}\n\nclass PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\n constructor(parameters) {\n super(parameters, { ignoreBorder: parameters.data.hasAppearance });\n }\n\n render() {\n // The rendering and functionality of a push button widget annotation is\n // equal to that of a link annotation, but may have more functionality, such\n // as performing actions on form fields (resetting, submitting, et cetera).\n const container = super.render();\n container.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n\n if (this.data.alternativeText) {\n container.title = this.data.alternativeText;\n }\n\n const linkElement = container.lastChild;\n if (this.enableScripting && this.hasJSActions && linkElement) {\n this._setDefaultPropertiesFromJS(linkElement);\n\n linkElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n this._dispatchEventFromSandbox({}, jsEvent);\n });\n }\n\n return container;\n }\n}\n\nclass ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: parameters.renderForms });\n }\n\n render() {\n this.container.classList.add(\"choiceWidgetAnnotation\");\n const storage = this.annotationStorage;\n const id = this.data.id;\n\n const storedData = storage.getValue(id, {\n value: this.data.fieldValue,\n });\n\n const selectElement = document.createElement(\"select\");\n GetElementsByNameSet.add(selectElement);\n selectElement.setAttribute(\"data-element-id\", id);\n\n selectElement.disabled = this.data.readOnly;\n this._setRequired(selectElement, this.data.required);\n selectElement.name = this.data.fieldName;\n selectElement.tabIndex = DEFAULT_TAB_INDEX;\n\n let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;\n\n if (!this.data.combo) {\n // List boxes have a size and (optionally) multiple selection.\n selectElement.size = this.data.options.length;\n if (this.data.multiSelect) {\n selectElement.multiple = true;\n }\n }\n\n selectElement.addEventListener(\"resetform\", event => {\n const defaultValue = this.data.defaultFieldValue;\n for (const option of selectElement.options) {\n option.selected = option.value === defaultValue;\n }\n });\n\n // Insert the options into the choice field.\n for (const option of this.data.options) {\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = option.displayValue;\n optionElement.value = option.exportValue;\n if (storedData.value.includes(option.exportValue)) {\n optionElement.setAttribute(\"selected\", true);\n addAnEmptyEntry = false;\n }\n selectElement.append(optionElement);\n }\n\n let removeEmptyEntry = null;\n if (addAnEmptyEntry) {\n const noneOptionElement = document.createElement(\"option\");\n noneOptionElement.value = \" \";\n noneOptionElement.setAttribute(\"hidden\", true);\n noneOptionElement.setAttribute(\"selected\", true);\n selectElement.prepend(noneOptionElement);\n\n removeEmptyEntry = () => {\n noneOptionElement.remove();\n selectElement.removeEventListener(\"input\", removeEmptyEntry);\n removeEmptyEntry = null;\n };\n selectElement.addEventListener(\"input\", removeEmptyEntry);\n }\n\n const getValue = isExport => {\n const name = isExport ? \"value\" : \"textContent\";\n const { options, multiple } = selectElement;\n if (!multiple) {\n return options.selectedIndex === -1\n ? null\n : options[options.selectedIndex][name];\n }\n return Array.prototype.filter\n .call(options, option => option.selected)\n .map(option => option[name]);\n };\n\n let selectedValues = getValue(/* isExport */ false);\n\n const getItems = event => {\n const options = event.target.options;\n return Array.prototype.map.call(options, option => {\n return { displayValue: option.textContent, exportValue: option.value };\n });\n };\n\n if (this.enableScripting && this.hasJSActions) {\n selectElement.addEventListener(\"updatefromsandbox\", jsEvent => {\n const actions = {\n value(event) {\n removeEmptyEntry?.();\n const value = event.detail.value;\n const values = new Set(Array.isArray(value) ? value : [value]);\n for (const option of selectElement.options) {\n option.selected = values.has(option.value);\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n multipleSelection(event) {\n selectElement.multiple = true;\n },\n remove(event) {\n const options = selectElement.options;\n const index = event.detail.remove;\n options[index].selected = false;\n selectElement.remove(index);\n if (options.length > 0) {\n const i = Array.prototype.findIndex.call(\n options,\n option => option.selected\n );\n if (i === -1) {\n options[0].selected = true;\n }\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n items: getItems(event),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n clear(event) {\n while (selectElement.length !== 0) {\n selectElement.remove(0);\n }\n storage.setValue(id, { value: null, items: [] });\n selectedValues = getValue(/* isExport */ false);\n },\n insert(event) {\n const { index, displayValue, exportValue } = event.detail.insert;\n const selectChild = selectElement.children[index];\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = displayValue;\n optionElement.value = exportValue;\n\n if (selectChild) {\n selectChild.before(optionElement);\n } else {\n selectElement.append(optionElement);\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n items: getItems(event),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n items(event) {\n const { items } = event.detail;\n while (selectElement.length !== 0) {\n selectElement.remove(0);\n }\n for (const item of items) {\n const { displayValue, exportValue } = item;\n const optionElement = document.createElement(\"option\");\n optionElement.textContent = displayValue;\n optionElement.value = exportValue;\n selectElement.append(optionElement);\n }\n if (selectElement.options.length > 0) {\n selectElement.options[0].selected = true;\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n items: getItems(event),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n indices(event) {\n const indices = new Set(event.detail.indices);\n for (const option of event.target.options) {\n option.selected = indices.has(option.index);\n }\n storage.setValue(id, {\n value: getValue(/* isExport */ true),\n });\n selectedValues = getValue(/* isExport */ false);\n },\n editable(event) {\n event.target.disabled = !event.detail.editable;\n },\n };\n this._dispatchEventFromSandbox(actions, jsEvent);\n });\n\n selectElement.addEventListener(\"input\", event => {\n const exportValue = getValue(/* isExport */ true);\n storage.setValue(id, { value: exportValue });\n\n event.preventDefault();\n\n this.linkService.eventBus?.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id,\n name: \"Keystroke\",\n value: selectedValues,\n changeEx: exportValue,\n willCommit: false,\n commitKey: 1,\n keyDown: false,\n },\n });\n });\n\n this._setEventListeners(\n selectElement,\n null,\n [\n [\"focus\", \"Focus\"],\n [\"blur\", \"Blur\"],\n [\"mousedown\", \"Mouse Down\"],\n [\"mouseenter\", \"Mouse Enter\"],\n [\"mouseleave\", \"Mouse Exit\"],\n [\"mouseup\", \"Mouse Up\"],\n [\"input\", \"Action\"],\n [\"input\", \"Validate\"],\n ],\n event => event.target.value\n );\n } else {\n selectElement.addEventListener(\"input\", function (event) {\n storage.setValue(id, { value: getValue(/* isExport */ true) });\n });\n }\n\n if (this.data.combo) {\n this._setTextStyle(selectElement);\n } else {\n // Just use the default font size...\n // it's a bit hard to guess what is a good size.\n }\n this._setBackgroundColor(selectElement);\n this._setDefaultPropertiesFromJS(selectElement);\n\n this.container.append(selectElement);\n return this.container;\n }\n}\n\nclass PopupAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n const { data, elements } = parameters;\n super(parameters, { isRenderable: AnnotationElement._hasPopupData(data) });\n this.elements = elements;\n }\n\n render() {\n this.container.classList.add(\"popupAnnotation\");\n\n const popup = new PopupElement({\n container: this.container,\n color: this.data.color,\n titleObj: this.data.titleObj,\n modificationDate: this.data.modificationDate,\n contentsObj: this.data.contentsObj,\n richText: this.data.richText,\n rect: this.data.rect,\n parentRect: this.data.parentRect || null,\n parent: this.parent,\n elements: this.elements,\n open: this.data.open,\n });\n\n const elementIds = [];\n for (const element of this.elements) {\n element.popup = popup;\n elementIds.push(element.data.id);\n element.addHighlightArea();\n }\n\n this.container.setAttribute(\n \"aria-controls\",\n elementIds.map(id => `${AnnotationPrefix}${id}`).join(\",\")\n );\n\n return this.container;\n }\n}\n\nclass PopupElement {\n #boundKeyDown = this.#keyDown.bind(this);\n\n #boundHide = this.#hide.bind(this);\n\n #boundShow = this.#show.bind(this);\n\n #boundToggle = this.#toggle.bind(this);\n\n #color = null;\n\n #container = null;\n\n #contentsObj = null;\n\n #dateObj = null;\n\n #elements = null;\n\n #parent = null;\n\n #parentRect = null;\n\n #pinned = false;\n\n #popup = null;\n\n #rect = null;\n\n #richText = null;\n\n #titleObj = null;\n\n #wasVisible = false;\n\n constructor({\n container,\n color,\n elements,\n titleObj,\n modificationDate,\n contentsObj,\n richText,\n parent,\n rect,\n parentRect,\n open,\n }) {\n this.#container = container;\n this.#titleObj = titleObj;\n this.#contentsObj = contentsObj;\n this.#richText = richText;\n this.#parent = parent;\n this.#color = color;\n this.#rect = rect;\n this.#parentRect = parentRect;\n this.#elements = elements;\n\n // The modification date is shown in the popup instead of the creation\n // date if it is available and can be parsed correctly, which is\n // consistent with other viewers such as Adobe Acrobat.\n this.#dateObj = PDFDateString.toDateObject(modificationDate);\n\n this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());\n // Attach the event listeners to the trigger element.\n for (const element of this.trigger) {\n element.addEventListener(\"click\", this.#boundToggle);\n element.addEventListener(\"mouseenter\", this.#boundShow);\n element.addEventListener(\"mouseleave\", this.#boundHide);\n element.classList.add(\"popupTriggerArea\");\n }\n\n // Attach the event listener to toggle the popup with the keyboard.\n for (const element of elements) {\n element.container?.addEventListener(\"keydown\", this.#boundKeyDown);\n }\n\n this.#container.hidden = true;\n if (open) {\n this.#toggle();\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n // Since the popup is lazily created, we need to ensure that it'll be\n // created and displayed during reference tests.\n this.#parent.popupShow.push(async () => {\n if (this.#container.hidden) {\n this.#show();\n }\n });\n }\n }\n\n render() {\n if (this.#popup) {\n return;\n }\n\n const {\n page: { view },\n viewport: {\n rawDims: { pageWidth, pageHeight, pageX, pageY },\n },\n } = this.#parent;\n const popup = (this.#popup = document.createElement(\"div\"));\n popup.className = \"popup\";\n\n if (this.#color) {\n const baseColor = (popup.style.outlineColor = Util.makeHexColor(\n ...this.#color\n ));\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n CSS.supports(\"background-color\", \"color-mix(in srgb, red 30%, white)\")\n ) {\n popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;\n } else {\n // color-mix isn't supported in some browsers hence this version.\n // See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix#browser_compatibility\n // TODO: Use color-mix when it's supported everywhere.\n // Enlighten the color.\n const BACKGROUND_ENLIGHT = 0.7;\n popup.style.backgroundColor = Util.makeHexColor(\n ...this.#color.map(c =>\n Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c)\n )\n );\n }\n }\n\n const header = document.createElement(\"span\");\n header.className = \"header\";\n const title = document.createElement(\"h1\");\n header.append(title);\n ({ dir: title.dir, str: title.textContent } = this.#titleObj);\n popup.append(header);\n\n if (this.#dateObj) {\n const modificationDate = document.createElement(\"span\");\n modificationDate.classList.add(\"popupDate\");\n modificationDate.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-annotation-date-string\"\n );\n modificationDate.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({\n date: this.#dateObj.toLocaleDateString(),\n time: this.#dateObj.toLocaleTimeString(),\n })\n );\n header.append(modificationDate);\n }\n\n const contentsObj = this.#contentsObj;\n const richText = this.#richText;\n if (\n richText?.str &&\n (!contentsObj?.str || contentsObj.str === richText.str)\n ) {\n XfaLayer.render({\n xfaHtml: richText.html,\n intent: \"richText\",\n div: popup,\n });\n popup.lastChild.classList.add(\"richText\", \"popupContent\");\n } else {\n const contents = this._formatContents(contentsObj);\n popup.append(contents);\n }\n\n let useParentRect = !!this.#parentRect;\n let rect = useParentRect ? this.#parentRect : this.#rect;\n for (const element of this.#elements) {\n if (!rect || Util.intersect(element.data.rect, rect) !== null) {\n rect = element.data.rect;\n useParentRect = true;\n break;\n }\n }\n\n const normalizedRect = Util.normalizeRect([\n rect[0],\n view[3] - rect[1] + view[1],\n rect[2],\n view[3] - rect[3] + view[1],\n ]);\n\n const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;\n const parentWidth = useParentRect\n ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION\n : 0;\n const popupLeft = normalizedRect[0] + parentWidth;\n const popupTop = normalizedRect[1];\n\n const { style } = this.#container;\n style.left = `${(100 * (popupLeft - pageX)) / pageWidth}%`;\n style.top = `${(100 * (popupTop - pageY)) / pageHeight}%`;\n\n this.#container.append(popup);\n }\n\n /**\n * Format the contents of the popup by adding newlines where necessary.\n *\n * @private\n * @param {Object} contentsObj\n * @memberof PopupElement\n * @returns {HTMLParagraphElement}\n */\n _formatContents({ str, dir }) {\n const p = document.createElement(\"p\");\n p.classList.add(\"popupContent\");\n p.dir = dir;\n const lines = str.split(/(?:\\r\\n?|\\n)/);\n for (let i = 0, ii = lines.length; i < ii; ++i) {\n const line = lines[i];\n p.append(document.createTextNode(line));\n if (i < ii - 1) {\n p.append(document.createElement(\"br\"));\n }\n }\n return p;\n }\n\n #keyDown(event) {\n if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n if (event.key === \"Enter\" || (event.key === \"Escape\" && this.#pinned)) {\n this.#toggle();\n }\n }\n\n /**\n * Toggle the visibility of the popup.\n */\n #toggle() {\n this.#pinned = !this.#pinned;\n if (this.#pinned) {\n this.#show();\n this.#container.addEventListener(\"click\", this.#boundToggle);\n this.#container.addEventListener(\"keydown\", this.#boundKeyDown);\n } else {\n this.#hide();\n this.#container.removeEventListener(\"click\", this.#boundToggle);\n this.#container.removeEventListener(\"keydown\", this.#boundKeyDown);\n }\n }\n\n /**\n * Show the popup.\n */\n #show() {\n if (!this.#popup) {\n this.render();\n }\n if (!this.isVisible) {\n this.#container.hidden = false;\n this.#container.style.zIndex =\n parseInt(this.#container.style.zIndex) + 1000;\n } else if (this.#pinned) {\n this.#container.classList.add(\"focused\");\n }\n }\n\n /**\n * Hide the popup.\n */\n #hide() {\n this.#container.classList.remove(\"focused\");\n if (this.#pinned || !this.isVisible) {\n return;\n }\n this.#container.hidden = true;\n this.#container.style.zIndex =\n parseInt(this.#container.style.zIndex) - 1000;\n }\n\n forceHide() {\n this.#wasVisible = this.isVisible;\n if (!this.#wasVisible) {\n return;\n }\n this.#container.hidden = true;\n }\n\n maybeShow() {\n if (!this.#wasVisible) {\n return;\n }\n this.#wasVisible = false;\n this.#container.hidden = false;\n }\n\n get isVisible() {\n return this.#container.hidden === false;\n }\n}\n\nclass FreeTextAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n this.textContent = parameters.data.textContent;\n this.textPosition = parameters.data.textPosition;\n this.annotationEditorType = AnnotationEditorType.FREETEXT;\n }\n\n render() {\n this.container.classList.add(\"freeTextAnnotation\");\n\n if (this.textContent) {\n const content = document.createElement(\"div\");\n content.classList.add(\"annotationTextContent\");\n content.setAttribute(\"role\", \"comment\");\n for (const line of this.textContent) {\n const lineSpan = document.createElement(\"span\");\n lineSpan.textContent = line;\n content.append(lineSpan);\n }\n this.container.append(content);\n }\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this._editOnDoubleClick();\n\n return this.container;\n }\n\n get _isEditable() {\n return this.data.hasOwnCanvas;\n }\n}\n\nclass LineAnnotationElement extends AnnotationElement {\n #line = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"lineAnnotation\");\n\n // Create an invisible line with the same starting and ending coordinates\n // that acts as the trigger for the popup. Only the line itself should\n // trigger the popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // PDF coordinates are calculated from a bottom left origin, so transform\n // the line coordinates to a top left origin for the SVG element.\n const line = (this.#line = this.svgFactory.createElement(\"svg:line\"));\n line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\n line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\n line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\n line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n line.setAttribute(\"stroke\", \"transparent\");\n line.setAttribute(\"fill\", \"transparent\");\n\n svg.append(line);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the line instead\n // of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#line;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass SquareAnnotationElement extends AnnotationElement {\n #square = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"squareAnnotation\");\n\n // Create an invisible square with the same rectangle that acts as the\n // trigger for the popup. Only the square itself should trigger the\n // popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // The browser draws half of the borders inside the square and half of\n // the borders outside the square by default. This behavior cannot be\n // changed programmatically, so correct for that here.\n const borderWidth = data.borderStyle.width;\n const square = (this.#square = this.svgFactory.createElement(\"svg:rect\"));\n square.setAttribute(\"x\", borderWidth / 2);\n square.setAttribute(\"y\", borderWidth / 2);\n square.setAttribute(\"width\", width - borderWidth);\n square.setAttribute(\"height\", height - borderWidth);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n square.setAttribute(\"stroke-width\", borderWidth || 1);\n square.setAttribute(\"stroke\", \"transparent\");\n square.setAttribute(\"fill\", \"transparent\");\n\n svg.append(square);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the square instead\n // of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#square;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass CircleAnnotationElement extends AnnotationElement {\n #circle = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"circleAnnotation\");\n\n // Create an invisible circle with the same ellipse that acts as the\n // trigger for the popup. Only the circle itself should trigger the\n // popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // The browser draws half of the borders inside the circle and half of\n // the borders outside the circle by default. This behavior cannot be\n // changed programmatically, so correct for that here.\n const borderWidth = data.borderStyle.width;\n const circle = (this.#circle =\n this.svgFactory.createElement(\"svg:ellipse\"));\n circle.setAttribute(\"cx\", width / 2);\n circle.setAttribute(\"cy\", height / 2);\n circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\n circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n circle.setAttribute(\"stroke-width\", borderWidth || 1);\n circle.setAttribute(\"stroke\", \"transparent\");\n circle.setAttribute(\"fill\", \"transparent\");\n\n svg.append(circle);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the circle instead\n // of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#circle;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass PolylineAnnotationElement extends AnnotationElement {\n #polyline = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n\n this.containerClassName = \"polylineAnnotation\";\n this.svgElementName = \"svg:polyline\";\n }\n\n render() {\n this.container.classList.add(this.containerClassName);\n\n // Create an invisible polyline with the same points that acts as the\n // trigger for the popup. Only the polyline itself should trigger the\n // popup, not the entire container.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n // Convert the vertices array to a single points string that the SVG\n // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n // calculated from a bottom left origin, so transform the polyline\n // coordinates to a top left origin for the SVG element.\n let points = [];\n for (const coordinate of data.vertices) {\n const x = coordinate.x - data.rect[0];\n const y = data.rect[3] - coordinate.y;\n points.push(x + \",\" + y);\n }\n points = points.join(\" \");\n\n const polyline = (this.#polyline = this.svgFactory.createElement(\n this.svgElementName\n ));\n polyline.setAttribute(\"points\", points);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n polyline.setAttribute(\"stroke\", \"transparent\");\n polyline.setAttribute(\"fill\", \"transparent\");\n\n svg.append(polyline);\n this.container.append(svg);\n\n // Create the popup ourselves so that we can bind it to the polyline\n // instead of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#polyline;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass PolygonAnnotationElement extends PolylineAnnotationElement {\n constructor(parameters) {\n // Polygons are specific forms of polylines, so reuse their logic.\n super(parameters);\n\n this.containerClassName = \"polygonAnnotation\";\n this.svgElementName = \"svg:polygon\";\n }\n}\n\nclass CaretAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"caretAnnotation\");\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n return this.container;\n }\n}\n\nclass InkAnnotationElement extends AnnotationElement {\n #polylines = [];\n\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n\n this.containerClassName = \"inkAnnotation\";\n\n // Use the polyline SVG element since it allows us to use coordinates\n // directly and to draw both straight lines and curves.\n this.svgElementName = \"svg:polyline\";\n this.annotationEditorType = AnnotationEditorType.INK;\n }\n\n render() {\n this.container.classList.add(this.containerClassName);\n\n // Create an invisible polyline with the same points that acts as the\n // trigger for the popup.\n const data = this.data;\n const { width, height } = getRectDims(data.rect);\n const svg = this.svgFactory.create(\n width,\n height,\n /* skipDimensions = */ true\n );\n\n for (const inkList of data.inkLists) {\n // Convert the ink list to a single points string that the SVG\n // polyline element expects (\"x1,y1 x2,y2 ...\"). PDF coordinates are\n // calculated from a bottom left origin, so transform the polyline\n // coordinates to a top left origin for the SVG element.\n let points = [];\n for (const coordinate of inkList) {\n const x = coordinate.x - data.rect[0];\n const y = data.rect[3] - coordinate.y;\n points.push(`${x},${y}`);\n }\n points = points.join(\" \");\n\n const polyline = this.svgFactory.createElement(this.svgElementName);\n this.#polylines.push(polyline);\n polyline.setAttribute(\"points\", points);\n // Ensure that the 'stroke-width' is always non-zero, since otherwise it\n // won't be possible to open/close the popup (note e.g. issue 11122).\n polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\n polyline.setAttribute(\"stroke\", \"transparent\");\n polyline.setAttribute(\"fill\", \"transparent\");\n\n // Create the popup ourselves so that we can bind it to the polyline\n // instead of to the entire container (which is the default).\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n svg.append(polyline);\n }\n\n this.container.append(svg);\n return this.container;\n }\n\n getElementsToTriggerPopup() {\n return this.#polylines;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\n\nclass HighlightAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"highlightAnnotation\");\n return this.container;\n }\n}\n\nclass UnderlineAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"underlineAnnotation\");\n return this.container;\n }\n}\n\nclass SquigglyAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"squigglyAnnotation\");\n return this.container;\n }\n}\n\nclass StrikeOutAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, {\n isRenderable: true,\n ignoreBorder: true,\n createQuadrilaterals: true,\n });\n }\n\n render() {\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n\n this.container.classList.add(\"strikeoutAnnotation\");\n return this.container;\n }\n}\n\nclass StampAnnotationElement extends AnnotationElement {\n constructor(parameters) {\n super(parameters, { isRenderable: true, ignoreBorder: true });\n }\n\n render() {\n this.container.classList.add(\"stampAnnotation\");\n\n if (!this.data.popupRef && this.hasPopupData) {\n this._createPopup();\n }\n return this.container;\n }\n}\n\nclass FileAttachmentAnnotationElement extends AnnotationElement {\n #trigger = null;\n\n constructor(parameters) {\n super(parameters, { isRenderable: true });\n\n const { filename, content } = this.data.file;\n this.filename = getFilenameFromUrl(filename, /* onlyStripPath = */ true);\n this.content = content;\n\n this.linkService.eventBus?.dispatch(\"fileattachmentannotation\", {\n source: this,\n filename,\n content,\n });\n }\n\n render() {\n this.container.classList.add(\"fileAttachmentAnnotation\");\n\n const { container, data } = this;\n let trigger;\n if (data.hasAppearance || data.fillAlpha === 0) {\n trigger = document.createElement(\"div\");\n } else {\n // Unfortunately it seems that it's not clearly specified exactly what\n // names are actually valid, since Table 184 contains:\n // Conforming readers shall provide predefined icon appearances for at\n // least the following standard names: GraphPushPin, PaperclipTag.\n // Additional names may be supported as well. Default value: PushPin.\n trigger = document.createElement(\"img\");\n trigger.src = `${this.imageResourcesPath}annotation-${\n /paperclip/i.test(data.name) ? \"paperclip\" : \"pushpin\"\n }.svg`;\n\n if (data.fillAlpha && data.fillAlpha < 1) {\n trigger.style = `filter: opacity(${Math.round(\n data.fillAlpha * 100\n )}%);`;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n this.container.classList.add(\"hasFillAlpha\");\n }\n }\n }\n trigger.addEventListener(\"dblclick\", this.#download.bind(this));\n this.#trigger = trigger;\n\n const { isMac } = FeatureTest.platform;\n container.addEventListener(\"keydown\", evt => {\n if (evt.key === \"Enter\" && (isMac ? evt.metaKey : evt.ctrlKey)) {\n this.#download();\n }\n });\n\n if (!data.popupRef && this.hasPopupData) {\n this._createPopup();\n } else {\n trigger.classList.add(\"popupTriggerArea\");\n }\n\n container.append(trigger);\n return container;\n }\n\n getElementsToTriggerPopup() {\n return this.#trigger;\n }\n\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n\n /**\n * Download the file attachment associated with this annotation.\n */\n #download() {\n this.downloadManager?.openOrDownloadData(this.content, this.filename);\n }\n}\n\n/**\n * @typedef {Object} AnnotationLayerParameters\n * @property {PageViewport} viewport\n * @property {HTMLDivElement} div\n * @property {Array} annotations\n * @property {PDFPageProxy} page\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} downloadManager\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n * for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {boolean} [enableScripting] - Enable embedded script execution.\n * @property {boolean} [hasJSActions] - Some fields have JS actions.\n * The default value is `false`.\n * @property {Object> | null} [fieldObjects]\n * @property {Map} [annotationCanvasMap]\n * @property {TextAccessibilityManager} [accessibilityManager]\n */\n\n/**\n * Manage the layer containing all the annotations.\n */\nclass AnnotationLayer {\n #accessibilityManager = null;\n\n #annotationCanvasMap = null;\n\n #editableAnnotations = new Map();\n\n constructor({\n div,\n accessibilityManager,\n annotationCanvasMap,\n page,\n viewport,\n }) {\n this.div = div;\n this.#accessibilityManager = accessibilityManager;\n this.#annotationCanvasMap = annotationCanvasMap;\n this.page = page;\n this.viewport = viewport;\n this.zIndex = 0;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"showPopups\", {\n value: async () => {\n for (const show of this.popupShow) {\n await show();\n }\n },\n });\n this.popupShow = [];\n }\n }\n\n #appendElement(element, id) {\n const contentElement = element.firstChild || element;\n contentElement.id = `${AnnotationPrefix}${id}`;\n\n this.div.append(element);\n this.#accessibilityManager?.moveElementInDOM(\n this.div,\n element,\n contentElement,\n /* isRemovable = */ false\n );\n }\n\n /**\n * Render a new annotation layer with all annotation elements.\n *\n * @param {AnnotationLayerParameters} params\n * @memberof AnnotationLayer\n */\n async render(params) {\n const { annotations } = params;\n const layer = this.div;\n setLayerDimensions(layer, this.viewport);\n\n const popupToElements = new Map();\n const elementParams = {\n data: null,\n layer,\n linkService: params.linkService,\n downloadManager: params.downloadManager,\n imageResourcesPath: params.imageResourcesPath || \"\",\n renderForms: params.renderForms !== false,\n svgFactory: new DOMSVGFactory(),\n annotationStorage: params.annotationStorage || new AnnotationStorage(),\n enableScripting: params.enableScripting === true,\n hasJSActions: params.hasJSActions,\n fieldObjects: params.fieldObjects,\n parent: this,\n elements: null,\n };\n\n for (const data of annotations) {\n if (data.noHTML) {\n continue;\n }\n const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;\n if (!isPopupAnnotation) {\n const { width, height } = getRectDims(data.rect);\n if (width <= 0 || height <= 0) {\n continue; // Ignore empty annotations.\n }\n } else {\n const elements = popupToElements.get(data.id);\n if (!elements) {\n // Ignore popup annotations without a corresponding annotation.\n continue;\n }\n elementParams.elements = elements;\n }\n elementParams.data = data;\n const element = AnnotationElementFactory.create(elementParams);\n\n if (!element.isRenderable) {\n continue;\n }\n\n if (!isPopupAnnotation && data.popupRef) {\n const elements = popupToElements.get(data.popupRef);\n if (!elements) {\n popupToElements.set(data.popupRef, [element]);\n } else {\n elements.push(element);\n }\n }\n\n if (element.annotationEditorType > 0) {\n this.#editableAnnotations.set(element.data.id, element);\n }\n\n const rendered = element.render();\n if (data.hidden) {\n rendered.style.visibility = \"hidden\";\n }\n this.#appendElement(rendered, data.id);\n }\n\n this.#setAnnotationCanvasMap();\n }\n\n /**\n * Update the annotation elements on existing annotation layer.\n *\n * @param {AnnotationLayerParameters} viewport\n * @memberof AnnotationLayer\n */\n update({ viewport }) {\n const layer = this.div;\n this.viewport = viewport;\n setLayerDimensions(layer, { rotation: viewport.rotation });\n\n this.#setAnnotationCanvasMap();\n layer.hidden = false;\n }\n\n #setAnnotationCanvasMap() {\n if (!this.#annotationCanvasMap) {\n return;\n }\n const layer = this.div;\n for (const [id, canvas] of this.#annotationCanvasMap) {\n const element = layer.querySelector(`[data-annotation-id=\"${id}\"]`);\n if (!element) {\n continue;\n }\n\n const { firstChild } = element;\n if (!firstChild) {\n element.append(canvas);\n } else if (firstChild.nodeName === \"CANVAS\") {\n firstChild.replaceWith(canvas);\n } else {\n firstChild.before(canvas);\n }\n }\n this.#annotationCanvasMap.clear();\n }\n\n getEditableAnnotations() {\n return Array.from(this.#editableAnnotations.values());\n }\n\n getEditableAnnotation(id) {\n return this.#editableAnnotations.get(id);\n }\n}\n\nexport {\n AnnotationLayer,\n FreeTextAnnotationElement,\n InkAnnotationElement,\n StampAnnotationElement,\n};\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { objectFromMap, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n map: null,\n hash: \"\",\n transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n #modified = false;\n\n #storage = new Map();\n\n constructor() {\n // Callbacks to signal when the modification state is set or reset.\n // This is used by the viewer to only bind on `beforeunload` if forms\n // are actually edited to prevent doing so unconditionally since that\n // can have undesirable effects.\n this.onSetModified = null;\n this.onResetModified = null;\n this.onAnnotationEditor = null;\n }\n\n /**\n * Get the value for a given key if it exists, or return the default value.\n * @param {string} key\n * @param {Object} defaultValue\n * @returns {Object}\n */\n getValue(key, defaultValue) {\n const value = this.#storage.get(key);\n if (value === undefined) {\n return defaultValue;\n }\n\n return Object.assign(defaultValue, value);\n }\n\n /**\n * Get the value for a given key.\n * @param {string} key\n * @returns {Object}\n */\n getRawValue(key) {\n return this.#storage.get(key);\n }\n\n /**\n * Remove a value from the storage.\n * @param {string} key\n */\n remove(key) {\n this.#storage.delete(key);\n\n if (this.#storage.size === 0) {\n this.resetModified();\n }\n\n if (typeof this.onAnnotationEditor === \"function\") {\n for (const value of this.#storage.values()) {\n if (value instanceof AnnotationEditor) {\n return;\n }\n }\n this.onAnnotationEditor(null);\n }\n }\n\n /**\n * Set the value for a given key\n * @param {string} key\n * @param {Object} value\n */\n setValue(key, value) {\n const obj = this.#storage.get(key);\n let modified = false;\n if (obj !== undefined) {\n for (const [entry, val] of Object.entries(value)) {\n if (obj[entry] !== val) {\n modified = true;\n obj[entry] = val;\n }\n }\n } else {\n modified = true;\n this.#storage.set(key, value);\n }\n if (modified) {\n this.#setModified();\n }\n\n if (\n value instanceof AnnotationEditor &&\n typeof this.onAnnotationEditor === \"function\"\n ) {\n this.onAnnotationEditor(value.constructor._type);\n }\n }\n\n /**\n * Check if the storage contains the given key.\n * @param {string} key\n * @returns {boolean}\n */\n has(key) {\n return this.#storage.has(key);\n }\n\n /**\n * @returns {Object | null}\n */\n getAll() {\n return this.#storage.size > 0 ? objectFromMap(this.#storage) : null;\n }\n\n /**\n * @param {Object} obj\n */\n setAll(obj) {\n for (const [key, val] of Object.entries(obj)) {\n this.setValue(key, val);\n }\n }\n\n get size() {\n return this.#storage.size;\n }\n\n #setModified() {\n if (!this.#modified) {\n this.#modified = true;\n if (typeof this.onSetModified === \"function\") {\n this.onSetModified();\n }\n }\n }\n\n resetModified() {\n if (this.#modified) {\n this.#modified = false;\n if (typeof this.onResetModified === \"function\") {\n this.onResetModified();\n }\n }\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n get print() {\n return new PrintAnnotationStorage(this);\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n if (this.#storage.size === 0) {\n return SerializableEmpty;\n }\n const map = new Map(),\n hash = new MurmurHash3_64(),\n transfer = [];\n const context = Object.create(null);\n let hasBitmap = false;\n\n for (const [key, val] of this.#storage) {\n const serialized =\n val instanceof AnnotationEditor\n ? val.serialize(/* isForCopying = */ false, context)\n : val;\n if (serialized) {\n map.set(key, serialized);\n\n hash.update(`${key}:${JSON.stringify(serialized)}`);\n hasBitmap ||= !!serialized.bitmap;\n }\n }\n\n if (hasBitmap) {\n // We must transfer the bitmap data separately, since it can be changed\n // during serialization with SVG images.\n for (const value of map.values()) {\n if (value.bitmap) {\n transfer.push(value.bitmap);\n }\n }\n }\n\n return map.size > 0\n ? { map, hash: hash.hexdigest(), transfer }\n : SerializableEmpty;\n }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n #serializable;\n\n constructor(parent) {\n super();\n const { map, hash, transfer } = parent.serializable;\n // Create a *copy* of the data, since Objects are passed by reference in JS.\n const clone = structuredClone(map, transfer ? { transfer } : null);\n\n this.#serializable = { map: clone, hash, transfer };\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n // eslint-disable-next-line getter-return\n get print() {\n unreachable(\"Should not call PrintAnnotationStorage.print\");\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n return this.#serializable;\n }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n AnnotationMode,\n assert,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isNodeJS,\n MAX_IMAGE_SIZE_TO_CACHE,\n MissingPDFException,\n PasswordException,\n PromiseCapability,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n AnnotationStorage,\n PrintAnnotationStorage,\n SerializableEmpty,\n} from \"./annotation_storage.js\";\nimport {\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMFilterFactory,\n DOMStandardFontDataFactory,\n isDataScheme,\n isValidFetchUrl,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodeStandardFontDataFactory,\n} from \"display-node_utils\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { PDFFetchStream } from \"display-fetch_stream\";\nimport { PDFNetworkStream } from \"display-network\";\nimport { PDFNodeStream } from \"display-node_stream\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\nconst DELAYED_CLEANUP_TIMEOUT = 5000; // ms\n\nconst DefaultCanvasFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory;\nconst DefaultFilterFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeFilterFactory\n : DOMFilterFactory;\nconst DefaultStandardFontDataFactory =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory;\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef { TypedArray | ArrayBuffer | Array | string } BinaryData\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string | URL} [url] - The URL of the PDF.\n * @property {BinaryData} [data] - Binary PDF data.\n * Use TypedArrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n *\n * NOTE: If TypedArrays are used they will generally be transferred to the\n * worker-thread. This will help reduce main-thread memory usage, however\n * it will take ownership of the TypedArrays.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not. The default value is `true`.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files. Providing a custom factory is useful for\n * environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files. Providing a custom factory is useful\n * for environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMStandardFontDataFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory` and `StandardFontDataFactory` options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of font rendering, and\n * when parsing PDF functions. The default value is `true`.\n * @property {boolean} [isOffscreenCanvasSupported] - Determines if we can use\n * `OffscreenCanvas` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {number} [canvasMaxAreaInBytes] - The integer value is used to\n * know when an image must be resized (uses `OffscreenCanvas` in the worker).\n * If it's -1 then a possibly slow algorithm is used to guess the max value.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n * @property {Object} [canvasFactory] - The factory instance that will be used\n * when creating canvases. The default value is {new DOMCanvasFactory()}.\n * @property {Object} [filterFactory] - A factory instance that will be used\n * to create SVG filters when rendering some images on the main canvas.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string | URL | TypedArray | ArrayBuffer | DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (typeof src === \"string\" || src instanceof URL) {\n src = { url: src };\n } else if (isArrayBuffer(src)) {\n src = { data: src };\n }\n }\n if (typeof src !== \"object\") {\n throw new Error(\"Invalid parameter in getDocument, need parameter object.\");\n }\n if (!src.url && !src.data && !src.range) {\n throw new Error(\n \"Invalid parameter object: need either .data, .range or .url\"\n );\n }\n const task = new PDFDocumentLoadingTask();\n const { docId } = task;\n\n const url = src.url ? getUrlProp(src.url) : null;\n const data = src.data ? getDataProp(src.data) : null;\n const httpHeaders = src.httpHeaders || null;\n const withCredentials = src.withCredentials === true;\n const password = src.password ?? null;\n const rangeTransport =\n src.range instanceof PDFDataRangeTransport ? src.range : null;\n const rangeChunkSize =\n Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0\n ? src.rangeChunkSize\n : DEFAULT_RANGE_CHUNK_SIZE;\n let worker = src.worker instanceof PDFWorker ? src.worker : null;\n const verbosity = src.verbosity;\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n const docBaseUrl =\n typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl)\n ? src.docBaseUrl\n : null;\n const cMapUrl = typeof src.cMapUrl === \"string\" ? src.cMapUrl : null;\n const cMapPacked = src.cMapPacked !== false;\n const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;\n const standardFontDataUrl =\n typeof src.standardFontDataUrl === \"string\"\n ? src.standardFontDataUrl\n : null;\n const StandardFontDataFactory =\n src.StandardFontDataFactory || DefaultStandardFontDataFactory;\n const ignoreErrors = src.stopAtErrors !== true;\n const maxImageSize =\n Number.isInteger(src.maxImageSize) && src.maxImageSize > -1\n ? src.maxImageSize\n : -1;\n const isEvalSupported = src.isEvalSupported !== false;\n const isOffscreenCanvasSupported =\n typeof src.isOffscreenCanvasSupported === \"boolean\"\n ? src.isOffscreenCanvasSupported\n : !isNodeJS;\n const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)\n ? src.canvasMaxAreaInBytes\n : -1;\n const disableFontFace =\n typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n const fontExtraProperties = src.fontExtraProperties === true;\n const enableXfa = src.enableXfa === true;\n const ownerDocument = src.ownerDocument || globalThis.document;\n const disableRange = src.disableRange === true;\n const disableStream = src.disableStream === true;\n const disableAutoFetch = src.disableAutoFetch === true;\n const pdfBug = src.pdfBug === true;\n\n // Parameters whose default values depend on other parameters.\n const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;\n const useSystemFonts =\n typeof src.useSystemFonts === \"boolean\"\n ? src.useSystemFonts\n : !isNodeJS && !disableFontFace;\n const useWorkerFetch =\n typeof src.useWorkerFetch === \"boolean\"\n ? src.useWorkerFetch\n : (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (CMapReaderFactory === DOMCMapReaderFactory &&\n StandardFontDataFactory === DOMStandardFontDataFactory &&\n cMapUrl &&\n standardFontDataUrl &&\n isValidFetchUrl(cMapUrl, document.baseURI) &&\n isValidFetchUrl(standardFontDataUrl, document.baseURI));\n const canvasFactory =\n src.canvasFactory || new DefaultCanvasFactory({ ownerDocument });\n const filterFactory =\n src.filterFactory || new DefaultFilterFactory({ docId, ownerDocument });\n\n // Parameters only intended for development/testing purposes.\n const styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? src.styleElement\n : null;\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(verbosity);\n\n // Ensure that the various factories can be initialized, when necessary,\n // since the user may provide *custom* ones.\n const transportFactory = {\n canvasFactory,\n filterFactory,\n };\n if (!useWorkerFetch) {\n transportFactory.cMapReaderFactory = new CMapReaderFactory({\n baseUrl: cMapUrl,\n isCompressed: cMapPacked,\n });\n transportFactory.standardFontDataFactory = new StandardFontDataFactory({\n baseUrl: standardFontDataUrl,\n });\n }\n\n if (!worker) {\n const workerParams = {\n verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n\n const fetchDocParams = {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n data,\n password,\n disableAutoFetch,\n rangeChunkSize,\n length,\n docBaseUrl,\n enableXfa,\n evaluatorOptions: {\n maxImageSize,\n disableFontFace,\n ignoreErrors,\n isEvalSupported,\n isOffscreenCanvasSupported,\n canvasMaxAreaInBytes,\n fontExtraProperties,\n useSystemFonts,\n cMapUrl: useWorkerFetch ? cMapUrl : null,\n standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null,\n },\n };\n const transportParams = {\n ignoreErrors,\n isEvalSupported,\n disableFontFace,\n fontExtraProperties,\n enableXfa,\n ownerDocument,\n disableAutoFetch,\n pdfBug,\n styleElement,\n };\n\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const workerIdPromise = _fetchDocument(worker, fetchDocParams);\n const networkStreamPromise = new Promise(function (resolve) {\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(\n {\n length,\n initialData: rangeTransport.initialData,\n progressiveDone: rangeTransport.progressiveDone,\n contentDispositionFilename:\n rangeTransport.contentDispositionFilename,\n disableRange,\n disableStream,\n },\n rangeTransport\n );\n } else if (!data) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: createPDFNetworkStream\");\n }\n const createPDFNetworkStream = params => {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n return new PDFNodeStream(params);\n }\n return isValidFetchUrl(params.url)\n ? new PDFFetchStream(params)\n : new PDFNetworkStream(params);\n };\n\n networkStream = createPDFNetworkStream({\n url,\n length,\n httpHeaders,\n withCredentials,\n rangeChunkSize,\n disableRange,\n disableStream,\n });\n }\n resolve(networkStream);\n });\n\n return Promise.all([workerIdPromise, networkStreamPromise]).then(\n function ([workerId, networkStream]) {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const messageHandler = new MessageHandler(\n docId,\n workerId,\n worker.port\n );\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n transportParams,\n transportFactory\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n }\n );\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\n/**\n * Starts fetching of specified PDF document/data.\n *\n * @param {PDFWorker} worker\n * @param {Object} source\n * @returns {Promise} A promise that is resolved when the worker ID of\n * the `MessageHandler` is known.\n * @private\n */\nasync function _fetchDocument(worker, source) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n const workerId = await worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n source,\n source.data ? [source.data.buffer] : null\n );\n\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n return workerId;\n}\n\nfunction getUrlProp(val) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return null; // The 'url' is unused with `PDFDataRangeTransport`.\n }\n if (val instanceof URL) {\n return val.href;\n }\n try {\n // The full path is required in the 'url' field.\n return new URL(val, window.location).href;\n } catch {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof val === \"string\"\n ) {\n return val; // Use the url as-is in Node.js environments.\n }\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n}\n\nfunction getDataProp(val) {\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n val instanceof Buffer // eslint-disable-line no-undef\n ) {\n throw new Error(\n \"Please provide binary data as `Uint8Array`, rather than `Buffer`.\"\n );\n }\n if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n // Use the data as-is when it's already a Uint8Array that completely\n // \"utilizes\" its underlying ArrayBuffer, to prevent any possible\n // issues when transferring it to the worker-thread.\n return val;\n }\n if (typeof val === \"string\") {\n return stringToBytes(val);\n }\n if ((typeof val === \"object\" && !isNaN(val?.length)) || isArrayBuffer(val)) {\n return new Uint8Array(val);\n }\n throw new Error(\n \"Invalid PDF binary data: either TypedArray, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static #docId = 0;\n\n constructor() {\n this._capability = new PromiseCapability();\n this._transport = null;\n this._worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n this.docId = `d${PDFDocumentLoadingTask.#docId++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n this.destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n this.onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n this.onProgress = null;\n }\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n try {\n if (this._worker?.port) {\n this._worker._pendingDestroy = true;\n }\n await this._transport?.destroy();\n } catch (ex) {\n if (this._worker?.port) {\n delete this._worker._pendingDestroy;\n }\n throw ex;\n }\n\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n *\n * NOTE: The TypedArrays passed to the constructor and relevant methods below\n * will generally be transferred to the worker-thread. This will help reduce\n * main-thread memory usage, however it will take ownership of the TypedArrays.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array|null} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = new PromiseCapability();\n }\n\n /**\n * @param {function} listener\n */\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n /**\n * @param {number} begin\n * @param {Uint8Array|null} chunk\n */\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n /**\n * @param {number} loaded\n * @param {number|undefined} total\n */\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n /**\n * @param {Uint8Array|null} chunk\n */\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n /**\n * @param {number} begin\n * @param {number} end\n */\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"getXFADatasets\", {\n value: () => {\n return this._transport.getXFADatasets();\n },\n });\n Object.defineProperty(this, \"getXRefPrevValue\", {\n value: () => {\n return this._transport.getXRefPrevValue();\n },\n });\n Object.defineProperty(this, \"getAnnotArray\", {\n value: pageIndex => {\n return this._transport.getAnnotArray(pageIndex);\n },\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to\n * identify the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise | null>} A promise that is resolved with all\n * information of the given named destination, or `null` when the named\n * destination is not present in the PDF file.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree.\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig() {\n return this._transport.getOptionalContentConfig();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the raw data of the PDF document.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument() {\n return this._transport.saveDocument();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are needed in the viewer.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @returns {Promise> | null>} A promise that is\n * resolved with an {Object} containing /AcroForm field data for the JS\n * sandbox, or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} [includeMarkedContent] - When true include marked\n * content items in the items array of TextContent. The default is `false`.\n * @property {boolean} [disableNormalization] - When true the text is *not*\n * normalized in the worker-thread. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of\n * {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n * items are included when includeMarkedContent is true.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n * line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n * 'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n * 'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n * can be 'display' (viewable annotations), 'print' (printable annotations),\n * or 'any' (all annotations). The default value is 'display'.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {CanvasRenderingContext2D} canvasContext - A 2D context of a DOM\n * Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are rendered\n * onto the canvas, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {CanvasGradient | CanvasPattern | string} [background] - Background\n * to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n *\n * NOTE: This option may be partially, or completely, ignored when the\n * `pageColors`-option is used.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n * @property {Map} [annotationCanvasMap] - Map some\n * annotation ids with canvases used to render them.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are included\n * in the operatorList, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array} children - Array of\n * {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n * elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n #delayedCleanupTimeout = null;\n\n #pendingCleanup = false;\n\n constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n /** @type {PDFObjects} */\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this._maybeCleanupAfterRender = false;\n this._intentStates = new Map();\n this.destroyed = false;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {RefProxy | null} The reference that points to this page.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} params - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = \"display\" } = {}) {\n const intentArgs = this._transport.getRenderingIntent(intent);\n\n return this._transport.getAnnotations(\n this._pageIndex,\n intentArgs.renderingIntent\n );\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return this._transport.getPageJSActions(this._pageIndex);\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n async getXfa() {\n return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params - Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n transform = null,\n background = null,\n optionalContentConfigPromise = null,\n annotationCanvasMap = null,\n pageColors = null,\n printAnnotationStorage = null,\n }) {\n this._stats?.time(\"Overall\");\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage\n );\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render...\n this.#pendingCleanup = false;\n // ... and ensure that a delayed cleanup is always aborted.\n this.#abortDelayedCleanup();\n\n if (!optionalContentConfigPromise) {\n optionalContentConfigPromise = this._transport.getOptionalContentConfig();\n }\n\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const intentPrint = !!(\n intentArgs.renderingIntent & RenderingIntentFlag.PRINT\n );\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = new PromiseCapability();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup immediately once rendering has finished.\n if (this._maybeCleanupAfterRender || intentPrint) {\n this.#pendingCleanup = true;\n }\n this.#tryCleanup(/* delayed = */ !intentPrint);\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error instanceof Error ? error : new Error(error),\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n\n this._stats?.timeEnd(\"Rendering\");\n this._stats?.timeEnd(\"Overall\");\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvasContext,\n viewport,\n transform,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n annotationCanvasMap,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: this._transport.canvasFactory,\n filterFactory: this._transport.filterFactory,\n useRequestAnimationFrame: !intentPrint,\n pdfBug: this._pdfBug,\n pageColors,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.destroyed) {\n complete();\n return;\n }\n this._stats?.time(\"Rendering\");\n\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @param {GetOperatorListParameters} params - Page getOperatorList\n * parameters.\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents the page's operator list.\n */\n getOperatorList({\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n printAnnotationStorage = null,\n } = {}) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\"Not implemented: getOperatorList\");\n }\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n /* isOpList = */ true\n );\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = new PromiseCapability();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n includeMarkedContent = false,\n disableNormalization = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n includeMarkedContent: includeMarkedContent === true,\n disableNormalization: disableNormalization === true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n if (this._transport._htmlForXfa) {\n // TODO: We need to revisit this once the XFA foreground patch lands and\n // only do this for non-foreground XFA.\n return this.getXfa().then(xfa => {\n return XfaText.textContent(xfa);\n });\n }\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n };\n pump();\n });\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {@link StructTreeNode} object that represents the page's structure tree,\n * or `null` when no structure tree is present for the current page.\n */\n getStructTree() {\n return this._transport.getStructTree(this._pageIndex);\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n\n const waitOn = [];\n for (const intentState of this._intentStates.values()) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intentState.opListReadCapability) {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this.#pendingCleanup = false;\n this.#abortDelayedCleanup();\n\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.#pendingCleanup = true;\n const success = this.#tryCleanup(/* delayed = */ false);\n\n if (resetStats && success) {\n this._stats &&= new StatTimer();\n }\n return success;\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @param {boolean} [delayed] - Delay the cleanup, to e.g. improve zooming\n * performance in documents with large images.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n #tryCleanup(delayed = false) {\n this.#abortDelayedCleanup();\n\n if (!this.#pendingCleanup || this.destroyed) {\n return false;\n }\n if (delayed) {\n this.#delayedCleanupTimeout = setTimeout(() => {\n this.#delayedCleanupTimeout = null;\n this.#tryCleanup(/* delayed = */ false);\n }, DELAYED_CLEANUP_TIMEOUT);\n\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n this._intentStates.clear();\n this.objs.clear();\n this.#pendingCleanup = false;\n return true;\n }\n\n #abortDelayedCleanup() {\n if (this.#delayedCleanupTimeout) {\n clearTimeout(this.#delayedCleanupTimeout);\n this.#delayedCleanupTimeout = null;\n }\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, cacheKey) {\n const intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n this._stats?.timeEnd(\"Page Request\");\n\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n intentState.displayReadyCapability?.resolve(transparency);\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this.#tryCleanup(/* delayed = */ true);\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList({\n renderingIntent,\n cacheKey,\n annotationStorageSerializable,\n }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(renderingIntent) && renderingIntent > 0,\n '_pumpOperatorList: Expected valid \"renderingIntent\" argument.'\n );\n }\n const { map, transfer } = annotationStorageSerializable;\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n {\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n cacheKey,\n annotationStorage: map,\n },\n transfer\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(cacheKey);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this.#tryCleanup(/* delayed = */ true);\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n reason instanceof Error,\n '_abortOperatorList: Expected valid \"reason\" argument.'\n );\n }\n\n if (!intentState.streamReader) {\n return;\n }\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n let delay = RENDERING_CANCELLED_TIMEOUT;\n if (reason.extraDelay > 0 && reason.extraDelay < /* ms = */ 1000) {\n // Above, we prevent the total delay from becoming arbitrarily large.\n delay += reason.extraDelay;\n }\n\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n intentState.streamReaderCancelTimeout = null;\n this._abortOperatorList({ intentState, reason, force: true });\n }, delay);\n return;\n }\n }\n intentState.streamReader\n .cancel(new AbortException(reason.message))\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [curCacheKey, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(curCacheKey);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {StatTimer | null} Returns page stats, if enabled; returns `null`\n * otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\nclass LoopbackPort {\n #listeners = new Set();\n\n #deferred = Promise.resolve();\n\n postMessage(obj, transfer) {\n const event = {\n data: structuredClone(obj, transfer ? { transfer } : null),\n };\n\n this.#deferred.then(() => {\n for (const listener of this.#listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener) {\n this.#listeners.add(listener);\n }\n\n removeEventListener(name, listener) {\n this.#listeners.delete(listener);\n }\n\n terminate() {\n this.#listeners.clear();\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Worker} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level;\n * the constants from {@link VerbosityLevel} should be used.\n */\n\nconst PDFWorkerUtil = {\n isWorkerDisabled: false,\n fakeWorkerId: 0,\n};\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (isNodeJS) {\n // Workers aren't supported in Node.js, force-disabling them there.\n PDFWorkerUtil.isWorkerDisabled = true;\n\n GlobalWorkerOptions.workerSrc ||= PDFJSDev.test(\"LIB\")\n ? \"../pdf.worker.js\"\n : \"./pdf.worker.mjs\";\n }\n\n // Check if URLs have the same origin. For non-HTTP based URLs, returns false.\n PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) {\n let base;\n try {\n base = new URL(baseUrl);\n if (!base.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n } catch {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n };\n\n PDFWorkerUtil.createCDNWrapper = function (url) {\n // We will rely on blob URL's property to specify origin.\n // We want this function to fail in case if createObjectURL or Blob do not\n // exist or fail for some reason -- our Worker creation will fail anyway.\n const wrapper = `await import(\"${url}\");`;\n return URL.createObjectURL(\n new Blob([wrapper], { type: \"text/javascript\" })\n );\n };\n}\n\n/**\n * PDF.js web worker abstraction that controls the instantiation of PDF\n * documents. Message handlers are used to pass information from the main\n * thread to the worker thread and vice versa. If the creation of a web\n * worker is not possible, a \"fake\" worker will be used instead.\n *\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\nclass PDFWorker {\n static #workerPorts;\n\n constructor({\n name = null,\n port = null,\n verbosity = getVerbosityLevel(),\n } = {}) {\n this.name = name;\n this.destroyed = false;\n this.verbosity = verbosity;\n\n this._readyCapability = new PromiseCapability();\n this._port = null;\n this._webWorker = null;\n this._messageHandler = null;\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n port\n ) {\n if (PDFWorker.#workerPorts?.has(port)) {\n throw new Error(\"Cannot use more than one PDFWorker per port.\");\n }\n (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);\n this._initializeFromPort(port);\n return;\n }\n this._initialize();\n }\n\n /**\n * Promise for worker initialization completion.\n * @type {Promise}\n */\n get promise() {\n return this._readyCapability.promise;\n }\n\n /**\n * The current `workerPort`, when it exists.\n * @type {Worker}\n */\n get port() {\n return this._port;\n }\n\n /**\n * The current MessageHandler-instance.\n * @type {MessageHandler}\n */\n get messageHandler() {\n return this._messageHandler;\n }\n\n _initializeFromPort(port) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _initializeFromPort\");\n }\n this._port = port;\n this._messageHandler = new MessageHandler(\"main\", \"worker\", port);\n this._messageHandler.on(\"ready\", function () {\n // Ignoring \"ready\" event -- MessageHandler should already be initialized\n // and ready to accept messages.\n });\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n this._messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n }\n\n _initialize() {\n // If worker support isn't disabled explicit and the browser has worker\n // support, create a new web worker and test if it/the browser fulfills\n // all requirements to run parts of pdf.js in a web worker.\n // Right now, the requirement is, that an Uint8Array is still an\n // Uint8Array as it arrives on the worker. (Chrome added this with v.15.)\n if (\n !PDFWorkerUtil.isWorkerDisabled &&\n !PDFWorker.#mainThreadWorkerMessageHandler\n ) {\n let { workerSrc } = PDFWorker;\n\n try {\n // Wraps workerSrc path into blob URL, if the former does not belong\n // to the same origin.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n !PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)\n ) {\n workerSrc = PDFWorkerUtil.createCDNWrapper(\n new URL(workerSrc, window.location).href\n );\n }\n\n const worker = new Worker(workerSrc, { type: \"module\" });\n const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n const terminateEarly = () => {\n worker.removeEventListener(\"error\", onWorkerError);\n messageHandler.destroy();\n worker.terminate();\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n } else {\n // Fall back to fake worker if the termination is caused by an\n // error (e.g. NetworkError / SecurityError).\n this._setupFakeWorker();\n }\n };\n\n const onWorkerError = () => {\n if (!this._webWorker) {\n // Worker failed to initialize due to an error. Clean up and fall\n // back to the fake worker.\n terminateEarly();\n }\n };\n worker.addEventListener(\"error\", onWorkerError);\n\n messageHandler.on(\"test\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n if (this.destroyed) {\n terminateEarly();\n return; // worker was destroyed\n }\n if (data) {\n this._messageHandler = messageHandler;\n this._port = worker;\n this._webWorker = worker;\n\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n } else {\n this._setupFakeWorker();\n messageHandler.destroy();\n worker.terminate();\n }\n });\n\n messageHandler.on(\"ready\", data => {\n worker.removeEventListener(\"error\", onWorkerError);\n if (this.destroyed) {\n terminateEarly();\n return; // worker was destroyed\n }\n try {\n sendTest();\n } catch {\n // We need fallback to a faked worker.\n this._setupFakeWorker();\n }\n });\n\n const sendTest = () => {\n const testObj = new Uint8Array();\n // Ensure that we can use `postMessage` transfers.\n messageHandler.send(\"test\", testObj, [testObj.buffer]);\n };\n\n // It might take time for the worker to initialize. We will try to send\n // the \"test\" message immediately, and once the \"ready\" message arrives.\n // The worker shall process only the first received \"test\" message.\n sendTest();\n return;\n } catch {\n info(\"The worker has been disabled.\");\n }\n }\n // Either workers are disabled, not supported or have thrown an exception.\n // Thus, we fallback to a faked worker.\n this._setupFakeWorker();\n }\n\n _setupFakeWorker() {\n if (!PDFWorkerUtil.isWorkerDisabled) {\n warn(\"Setting up fake worker.\");\n PDFWorkerUtil.isWorkerDisabled = true;\n }\n\n PDFWorker._setupFakeWorkerGlobal\n .then(WorkerMessageHandler => {\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n return;\n }\n const port = new LoopbackPort();\n this._port = port;\n\n // All fake workers use the same port, making id unique.\n const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;\n\n // If the main thread is our worker, setup the handling for the\n // messages -- the main thread sends to it self.\n const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n WorkerMessageHandler.setup(workerHandler, port);\n\n const messageHandler = new MessageHandler(id, id + \"_worker\", port);\n this._messageHandler = messageHandler;\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n })\n .catch(reason => {\n this._readyCapability.reject(\n new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n );\n });\n }\n\n /**\n * Destroys the worker instance.\n */\n destroy() {\n this.destroyed = true;\n if (this._webWorker) {\n // We need to terminate only web worker created resource.\n this._webWorker.terminate();\n this._webWorker = null;\n }\n PDFWorker.#workerPorts?.delete(this._port);\n this._port = null;\n if (this._messageHandler) {\n this._messageHandler.destroy();\n this._messageHandler = null;\n }\n }\n\n /**\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\n static fromPort(params) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: fromPort\");\n }\n if (!params?.port) {\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n }\n const cachedPort = this.#workerPorts?.get(params.port);\n if (cachedPort) {\n if (cachedPort._pendingDestroy) {\n throw new Error(\n \"PDFWorker.fromPort - the worker is being destroyed.\\n\" +\n \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\"\n );\n }\n return cachedPort;\n }\n return new PDFWorker(params);\n }\n\n /**\n * The current `workerSrc`, when it exists.\n * @type {string}\n */\n static get workerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n static get #mainThreadWorkerMessageHandler() {\n try {\n return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n } catch {\n return null;\n }\n }\n\n // Loads worker code into the main-thread.\n static get _setupFakeWorkerGlobal() {\n const loader = async () => {\n if (this.#mainThreadWorkerMessageHandler) {\n // The worker was already loaded using e.g. a `"; + var nW = globalObject.open(); + + if (nW !== null) { + nW.document.write(htmlForNewWindow); + } + + return nW; + } else { + throw new Error("The option pdfobjectnewwindow just works in a browser-environment."); + } + + case "pdfjsnewwindow": + if (Object.prototype.toString.call(globalObject) === "[object Window]") { + var pdfJsUrl = options.pdfJsUrl || "examples/PDF.js/web/viewer.html"; + var htmlForPDFjsNewWindow = "" + "" + '' + ""; + var dataURLNewWindow = globalObject.open(); + + if (dataURLNewWindow !== null) { + dataURLNewWindow.document.write(htmlForDataURLNewWindow); + dataURLNewWindow.document.title = options.filename; + } + + if (dataURLNewWindow || typeof safari === "undefined") return dataURLNewWindow; + } else { + throw new Error("The option dataurlnewwindow just works in a browser-environment."); + } + + break; + + case "datauri": + case "dataurl": + return globalObject.document.location.href = this.output("datauristring", options); + + default: + return null; + } + }); + /** + * Used to see if a supplied hotfix was requested when the pdf instance was created. + * @param {string} hotfixName - The name of the hotfix to check. + * @returns {boolean} + */ + + var hasHotfix = function hasHotfix(hotfixName) { + return Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1; + }; + + switch (unit) { + case "pt": + scaleFactor = 1; + break; + + case "mm": + scaleFactor = 72 / 25.4; + break; + + case "cm": + scaleFactor = 72 / 2.54; + break; + + case "in": + scaleFactor = 72; + break; + + case "px": + if (hasHotfix("px_scaling") == true) { + scaleFactor = 72 / 96; + } else { + scaleFactor = 96 / 72; + } + + break; + + case "pc": + scaleFactor = 12; + break; + + case "em": + scaleFactor = 12; + break; + + case "ex": + scaleFactor = 6; + break; + + default: + if (typeof unit === "number") { + scaleFactor = unit; + } else { + throw new Error("Invalid unit: " + unit); + } + + } + + var encryption = null; + setCreationDate(); + setFileId(); + + var getEncryptor = function getEncryptor(objectId) { + if (encryptionOptions !== null) { + return encryption.encryptor(objectId, 0); + } + + return function (data) { + return data; + }; + }; //--------------------------------------- + // Public API + + + var getPageInfo = API.__private__.getPageInfo = API.getPageInfo = function (pageNumberOneBased) { + if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) { + throw new Error("Invalid argument passed to jsPDF.getPageInfo"); + } + + var objId = pagesContext[pageNumberOneBased].objId; + return { + objId: objId, + pageNumber: pageNumberOneBased, + pageContext: pagesContext[pageNumberOneBased] + }; + }; + + var getPageInfoByObjId = API.__private__.getPageInfoByObjId = function (objId) { + if (isNaN(objId) || objId % 1 !== 0) { + throw new Error("Invalid argument passed to jsPDF.getPageInfoByObjId"); + } + + for (var pageNumber in pagesContext) { + if (pagesContext[pageNumber].objId === objId) { + break; + } + } + + return getPageInfo(pageNumber); + }; + + var getCurrentPageInfo = API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function () { + return { + objId: pagesContext[currentPage].objId, + pageNumber: currentPage, + pageContext: pagesContext[currentPage] + }; + }; + /** + * Adds (and transfers the focus to) new page to the PDF document. + * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    + * Default is "a4". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89] + * @param orientation {string} Orientation of the new page. Possible values are "portrait" or "landscape" (or shortcuts "p" (Default), "l"). + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name addPage + */ + + + API.addPage = function () { + _addPage.apply(this, arguments); + + return this; + }; + /** + * Adds (and transfers the focus to) new page to the PDF document. + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name setPage + * @param {number} page Switch the active page to the page number specified (indexed starting at 1). + * @example + * doc = jsPDF() + * doc.addPage() + * doc.addPage() + * doc.text('I am on page 3', 10, 10) + * doc.setPage(1) + * doc.text('I am on page 1', 10, 10) + */ + + + API.setPage = function () { + _setPage.apply(this, arguments); + + setOutputDestination.call(this, pages[currentPage]); + return this; + }; + /** + * @name insertPage + * @memberof jsPDF# + * + * @function + * @instance + * @param {Object} beforePage + * @returns {jsPDF} + */ + + + API.insertPage = function (beforePage) { + this.addPage(); + this.movePage(currentPage, beforePage); + return this; + }; + /** + * @name movePage + * @memberof jsPDF# + * @function + * @instance + * @param {number} targetPage + * @param {number} beforePage + * @returns {jsPDF} + */ + + + API.movePage = function (targetPage, beforePage) { + var tmpPages, tmpPagesContext; + + if (targetPage > beforePage) { + tmpPages = pages[targetPage]; + tmpPagesContext = pagesContext[targetPage]; + + for (var i = targetPage; i > beforePage; i--) { + pages[i] = pages[i - 1]; + pagesContext[i] = pagesContext[i - 1]; + } + + pages[beforePage] = tmpPages; + pagesContext[beforePage] = tmpPagesContext; + this.setPage(beforePage); + } else if (targetPage < beforePage) { + tmpPages = pages[targetPage]; + tmpPagesContext = pagesContext[targetPage]; + + for (var j = targetPage; j < beforePage; j++) { + pages[j] = pages[j + 1]; + pagesContext[j] = pagesContext[j + 1]; + } + + pages[beforePage] = tmpPages; + pagesContext[beforePage] = tmpPagesContext; + this.setPage(beforePage); + } + + return this; + }; + /** + * Deletes a page from the PDF. + * @name deletePage + * @memberof jsPDF# + * @function + * @param {number} targetPage + * @instance + * @returns {jsPDF} + */ + + + API.deletePage = function () { + _deletePage.apply(this, arguments); + + return this; + }; + /** + * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings. + * + * @function + * @instance + * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call. + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page. + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page. + * @param {Object} [options] - Collection of settings signaling how the text must be encoded. + * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify. + * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging + * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree. + * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise. + * @param {number} [options.charSpace=0] - The space between each letter. + * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size. + * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line. + * @param {Object} [options.flags] - Flags for to8bitStream. + * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text. + * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text. + * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split. + * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping. + * @param {boolean} [options.isInputVisual] - Option for the BidiEngine + * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine + * @param {boolean} [options.isInputRtl] - Option for the BidiEngine + * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine + * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine + * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y. + * + * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing + * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this + * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a + * DIFFERENT result. A matrix is only allowed in "advanced" API mode. + * @returns {jsPDF} + * @memberof jsPDF# + * @name text + */ + + + API.__private__.text = API.text = function (text, x, y, options, transform) { + /* + * Inserts something like this into PDF + * BT + * /F1 16 Tf % Font name + size + * 16 TL % How many units down for next line in multiline text + * 0 g % color + * 28.35 813.54 Td % position + * (line one) Tj + * T* (line two) Tj + * T* (line three) Tj + * ET + */ + options = options || {}; + var scope = options.scope || this; + var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale; // Pre-August-2012 the order of arguments was function(x, y, text, flags) + // in effort to make all calls have similar signature like + // function(data, coordinates... , miscellaneous) + // this method had its args flipped. + // code below allows backward compatibility with old arg order. + + if (typeof text === "number" && typeof x === "number" && (typeof y === "string" || Array.isArray(y))) { + var tmp = y; + y = x; + x = text; + text = tmp; + } + + var transformationMatrix; + + if (arguments[3] instanceof Matrix === false) { + flags = arguments[3]; + angle = arguments[4]; + align = arguments[5]; + + if (_typeof(flags) !== "object" || flags === null) { + if (typeof angle === "string") { + align = angle; + angle = null; + } + + if (typeof flags === "string") { + align = flags; + flags = null; + } + + if (typeof flags === "number") { + angle = flags; + flags = null; + } + + options = { + flags: flags, + angle: angle, + align: align + }; + } + } else { + advancedApiModeTrap("The transform parameter of text() with a Matrix value"); + transformationMatrix = transform; + } + + if (isNaN(x) || isNaN(y) || typeof text === "undefined" || text === null) { + throw new Error("Invalid arguments passed to jsPDF.text"); + } + + if (text.length === 0) { + return scope; + } + + var xtra = ""; + var isHex = false; + var lineHeight = typeof options.lineHeightFactor === "number" ? options.lineHeightFactor : lineHeightFactor; + var scaleFactor = scope.internal.scaleFactor; + + function ESC(s) { + s = s.split("\t").join(Array(options.TabLen || 9).join(" ")); + return pdfEscape(s, flags); + } + + function transformTextToSpecialArray(text) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + var da = []; + var len = sa.length; + var curDa; //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + + while (len--) { + curDa = sa.shift(); + + if (typeof curDa === "string") { + da.push(curDa); + } else { + if (Array.isArray(text) && (curDa.length === 1 || curDa[1] === undefined && curDa[2] === undefined)) { + da.push(curDa[0]); + } else { + da.push([curDa[0], curDa[1], curDa[2]]); + } + } + } + + return da; + } + + function processTextByFunction(text, processingFunction) { + var result; + + if (typeof text === "string") { + result = processingFunction(text)[0]; + } else if (Array.isArray(text)) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + var da = []; + var len = sa.length; + var curDa; + var tmpResult; //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + + while (len--) { + curDa = sa.shift(); + + if (typeof curDa === "string") { + da.push(processingFunction(curDa)[0]); + } else if (Array.isArray(curDa) && typeof curDa[0] === "string") { + tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]); + da.push([tmpResult[0], tmpResult[1], tmpResult[2]]); + } + } + + result = da; + } + + return result; + } //Check if text is of type String + + + var textIsOfTypeString = false; + var tmpTextIsOfTypeString = true; + + if (typeof text === "string") { + textIsOfTypeString = true; + } else if (Array.isArray(text)) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + da = []; + var len = sa.length; + var curDa; //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + + while (len--) { + curDa = sa.shift(); + + if (typeof curDa !== "string" || Array.isArray(curDa) && typeof curDa[0] !== "string") { + tmpTextIsOfTypeString = false; + } + } + + textIsOfTypeString = tmpTextIsOfTypeString; + } + + if (textIsOfTypeString === false) { + throw new Error('Type of text must be string or Array. "' + text + '" is not recognized.'); + } //If there are any newlines in text, we assume + //the user wanted to print multiple lines, so break the + //text up into an array. If the text is already an array, + //we assume the user knows what they are doing. + //Convert text into an array anyway to simplify + //later code. + + + if (typeof text === "string") { + if (text.match(/[\r?\n]/)) { + text = text.split(/\r\n|\r|\n/g); + } else { + text = [text]; + } + } //baseline + + + var height = activeFontSize / scope.internal.scaleFactor; + var descent = height * (lineHeight - 1); + + switch (options.baseline) { + case "bottom": + y -= descent; + break; + + case "top": + y += height - descent; + break; + + case "hanging": + y += height - 2 * descent; + break; + + case "middle": + y += height / 2 - descent; + break; + } //multiline + + + maxWidth = options.maxWidth || 0; + + if (maxWidth > 0) { + if (typeof text === "string") { + text = scope.splitTextToSize(text, maxWidth); + } else if (Object.prototype.toString.call(text) === "[object Array]") { + text = text.reduce(function (acc, textLine) { + return acc.concat(scope.splitTextToSize(textLine, maxWidth)); + }, []); + } + } //creating Payload-Object to make text byRef + + + payload = { + text: text, + x: x, + y: y, + options: options, + mutex: { + pdfEscape: pdfEscape, + activeFontKey: activeFontKey, + fonts: fonts, + activeFontSize: activeFontSize + } + }; + events.publish("preProcessText", payload); + text = payload.text; + options = payload.options; //angle + + angle = options.angle; + + if (transformationMatrix instanceof Matrix === false && angle && typeof angle === "number") { + angle *= Math.PI / 180; + + if (options.rotationDirection === 0) { + angle = -angle; + } + + if (apiMode === ApiMode.ADVANCED) { + angle = -angle; + } + + var c = Math.cos(angle); + var s = Math.sin(angle); + transformationMatrix = new Matrix(c, s, -s, c, 0, 0); + } else if (angle && angle instanceof Matrix) { + transformationMatrix = angle; + } + + if (apiMode === ApiMode.ADVANCED && !transformationMatrix) { + transformationMatrix = identityMatrix; + } //charSpace + + + charSpace = options.charSpace || activeCharSpace; + + if (typeof charSpace !== "undefined") { + xtra += hpf(scale(charSpace)) + " Tc\n"; + this.setCharSpace(this.getCharSpace() || 0); + } + + horizontalScale = options.horizontalScale; + + if (typeof horizontalScale !== "undefined") { + xtra += hpf(horizontalScale * 100) + " Tz\n"; + } //lang + + + var lang = options.lang; + + + var renderingMode = -1; + var parmRenderingMode = typeof options.renderingMode !== "undefined" ? options.renderingMode : options.stroke; + var pageContext = scope.internal.getCurrentPageInfo().pageContext; + + switch (parmRenderingMode) { + case 0: + case false: + case "fill": + renderingMode = 0; + break; + + case 1: + case true: + case "stroke": + renderingMode = 1; + break; + + case 2: + case "fillThenStroke": + renderingMode = 2; + break; + + case 3: + case "invisible": + renderingMode = 3; + break; + + case 4: + case "fillAndAddForClipping": + renderingMode = 4; + break; + + case 5: + case "strokeAndAddPathForClipping": + renderingMode = 5; + break; + + case 6: + case "fillThenStrokeAndAddToPathForClipping": + renderingMode = 6; + break; + + case 7: + case "addToPathForClipping": + renderingMode = 7; + break; + } + + var usedRenderingMode = typeof pageContext.usedRenderingMode !== "undefined" ? pageContext.usedRenderingMode : -1; //if the coder wrote it explicitly to use a specific + //renderingMode, then use it + + if (renderingMode !== -1) { + xtra += renderingMode + " Tr\n"; //otherwise check if we used the rendering Mode already + //if so then set the rendering Mode... + } else if (usedRenderingMode !== -1) { + xtra += "0 Tr\n"; + } + + if (renderingMode !== -1) { + pageContext.usedRenderingMode = renderingMode; + } //align + + + align = options.align || "left"; + var leading = activeFontSize * lineHeight; + var pageWidth = scope.internal.pageSize.getWidth(); + var activeFont = fonts[activeFontKey]; + charSpace = options.charSpace || activeCharSpace; + maxWidth = options.maxWidth || 0; + var lineWidths; + flags = Object.assign({ + autoencode: true, + noBOM: true + }, options.flags); + var wordSpacingPerLine = []; + + if (Object.prototype.toString.call(text) === "[object Array]") { + da = transformTextToSpecialArray(text); + var newY; + + if (align !== "left") { + lineWidths = da.map(function (v) { + return scope.getStringUnitWidth(v, { + font: activeFont, + charSpace: charSpace, + fontSize: activeFontSize, + doKerning: false + }) * activeFontSize / scaleFactor; + }); + } //The first line uses the "main" Td setting, + //and the subsequent lines are offset by the + //previous line's x coordinate. + + + var prevWidth = 0; + var newX; + + if (align === "right") { + //The passed in x coordinate defines the + //rightmost point of the text. + x -= lineWidths[0]; + text = []; + len = da.length; + + for (var i = 0; i < len; i++) { + if (i === 0) { + newX = getHorizontalCoordinate(x); + newY = getVerticalCoordinate(y); + } else { + newX = scale(prevWidth - lineWidths[i]); + newY = -leading; + } + + text.push([da[i], newX, newY]); + prevWidth = lineWidths[i]; + } + } else if (align === "center") { + //The passed in x coordinate defines + //the center point. + x -= lineWidths[0] / 2; + text = []; + len = da.length; + + for (var j = 0; j < len; j++) { + if (j === 0) { + newX = getHorizontalCoordinate(x); + newY = getVerticalCoordinate(y); + } else { + newX = scale((prevWidth - lineWidths[j]) / 2); + newY = -leading; + } + + text.push([da[j], newX, newY]); + prevWidth = lineWidths[j]; + } + } else if (align === "left") { + text = []; + len = da.length; + + for (var h = 0; h < len; h++) { + text.push(da[h]); + } + } else if (align === "justify") { + text = []; + len = da.length; + maxWidth = maxWidth !== 0 ? maxWidth : pageWidth; + + for (var l = 0; l < len; l++) { + newY = l === 0 ? getVerticalCoordinate(y) : -leading; + newX = l === 0 ? getHorizontalCoordinate(x) : 0; + + if (l < len - 1) { + wordSpacingPerLine.push(hpf(scale((maxWidth - lineWidths[l]) / (da[l].split(" ").length - 1)))); + } else { + wordSpacingPerLine.push(0); + } + + text.push([da[l], newX, newY]); + } + } else { + throw new Error('Unrecognized alignment option, use "left", "center", "right" or "justify".'); + } + } //R2L + + + var doReversing = typeof options.R2L === "boolean" ? options.R2L : R2L; + + if (doReversing === true) { + text = processTextByFunction(text, function (text, posX, posY) { + return [text.split("").reverse().join(""), posX, posY]; + }); + } //creating Payload-Object to make text byRef + + + payload = { + text: text, + x: x, + y: y, + options: options, + mutex: { + pdfEscape: pdfEscape, + activeFontKey: activeFontKey, + fonts: fonts, + activeFontSize: activeFontSize + } + }; + events.publish("postProcessText", payload); + text = payload.text; + isHex = payload.mutex.isHex || false; //Escaping + + var activeFontEncoding = fonts[activeFontKey].encoding; + + if (activeFontEncoding === "WinAnsiEncoding" || activeFontEncoding === "StandardEncoding") { + text = processTextByFunction(text, function (text, posX, posY) { + return [ESC(text), posX, posY]; + }); + } + + da = transformTextToSpecialArray(text); + text = []; + var STRING = 0; + var ARRAY = 1; + var variant = Array.isArray(da[0]) ? ARRAY : STRING; + var posX; + var posY; + var content; + var wordSpacing = ""; + + var generatePosition = function generatePosition(parmPosX, parmPosY, parmTransformationMatrix) { + var position = ""; + + if (parmTransformationMatrix instanceof Matrix) { + // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y + // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied + // in the coordinate system established by this matrix + if (typeof options.angle === "number") { + parmTransformationMatrix = matrixMult(parmTransformationMatrix, new Matrix(1, 0, 0, 1, parmPosX, parmPosY)); + } else { + parmTransformationMatrix = matrixMult(new Matrix(1, 0, 0, 1, parmPosX, parmPosY), parmTransformationMatrix); + } + + if (apiMode === ApiMode.ADVANCED) { + parmTransformationMatrix = matrixMult(new Matrix(1, 0, 0, -1, 0, 0), parmTransformationMatrix); + } + + position = parmTransformationMatrix.join(" ") + " Tm\n"; + } else { + position = hpf(parmPosX) + " " + hpf(parmPosY) + " Td\n"; + } + + return position; + }; + + for (var lineIndex = 0; lineIndex < da.length; lineIndex++) { + wordSpacing = ""; + + switch (variant) { + case ARRAY: + content = (isHex ? "<" : "(") + da[lineIndex][0] + (isHex ? ">" : ")"); + posX = parseFloat(da[lineIndex][1]); + posY = parseFloat(da[lineIndex][2]); + break; + + case STRING: + content = (isHex ? "<" : "(") + da[lineIndex] + (isHex ? ">" : ")"); + posX = getHorizontalCoordinate(x); + posY = getVerticalCoordinate(y); + break; + } + + if (typeof wordSpacingPerLine !== "undefined" && typeof wordSpacingPerLine[lineIndex] !== "undefined") { + wordSpacing = wordSpacingPerLine[lineIndex] + " Tw\n"; + } + + if (lineIndex === 0) { + text.push(wordSpacing + generatePosition(posX, posY, transformationMatrix) + content); + } else if (variant === STRING) { + text.push(wordSpacing + content); + } else if (variant === ARRAY) { + text.push(wordSpacing + generatePosition(posX, posY, transformationMatrix) + content); + } + } + + text = variant === STRING ? text.join(" Tj\nT* ") : text.join(" Tj\n"); + text += " Tj\n"; + var result = "BT\n/"; + result += activeFontKey + " " + activeFontSize + " Tf\n"; // font face, style, size + + result += hpf(activeFontSize * lineHeight) + " TL\n"; // line spacing + + result += textColor + "\n"; + result += xtra; + result += text; + result += "ET"; + out(result); + usedFonts[activeFontKey] = true; + return scope; + }; // PDF supports these path painting and clip path operators: + // + // S - stroke + // s - close/stroke + // f (F) - fill non-zero + // f* - fill evenodd + // B - fill stroke nonzero + // B* - fill stroke evenodd + // b - close fill stroke nonzero + // b* - close fill stroke evenodd + // n - nothing (consume path) + // W - clip nonzero + // W* - clip evenodd + // + // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close() + // method. + + /** + * + * @name clip + * @function + * @instance + * @param {string} rule Only possible value is 'evenodd' + * @returns {jsPDF} + * @memberof jsPDF# + * @description All .clip() after calling drawing ops with a style argument of null. + */ + + + var clip = API.__private__.clip = API.clip = function (rule) { + // Call .clip() after calling drawing ops with a style argument of null + // W is the PDF clipping op + if ("evenodd" === rule) { + out("W*"); + } else { + out("W"); + } + + return this; + }; + /** + * @name clipEvenOdd + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note + * that this will NOT consume the current path. In order to only use this path for clipping call + * {@link API.discardPath} afterwards. + */ + + + API.clipEvenOdd = function () { + return clip("evenodd"); + }; + /** + * Consumes the current path without any effect. Mainly used in combination with {@link clip} or + * {@link clipEvenOdd}. The PDF "n" operator. + * @name discardPath + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.__private__.discardPath = API.discardPath = function () { + out("n"); + return this; + }; + + var isValidStyle = API.__private__.isValidStyle = function (style) { + var validStyleVariants = [undefined, null, "S", "D", "F", "DF", "FD", "f", "f*", "B", "B*", "n"]; + var result = false; + + if (validStyleVariants.indexOf(style) !== -1) { + result = true; + } + + return result; + }; + + API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function (operator) { + if (isValidStyle(operator)) { + defaultPathOperation = operator; + } + + return this; + }; + + var getStyle = API.__private__.getStyle = API.getStyle = function (style) { + // see path-painting operators in PDF spec + var op = defaultPathOperation; // stroke + + switch (style) { + case "D": + case "S": + op = "S"; // stroke + + break; + + case "F": + op = "f"; // fill + + break; + + case "FD": + case "DF": + op = "B"; + break; + + case "f": + case "f*": + case "B": + case "B*": + /* + Allow direct use of these PDF path-painting operators: + - f fill using nonzero winding number rule + - f* fill using even-odd rule + - B fill then stroke with fill using non-zero winding number rule + - B* fill then stroke with fill using even-odd rule + */ + op = style; + break; + } + + return op; + }; + /** + * Close the current path. The PDF "h" operator. + * @name close + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + var close = API.close = function () { + out("h"); + return this; + }; + /** + * Stroke the path. The PDF "S" operator. + * @name stroke + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.stroke = function () { + out("S"); + return this; + }; + /** + * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled + * with this pattern, otherwise with the current fill color. Equivalent to the PDF "f" operator. + * @name fill + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be filled with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fill = function (pattern) { + fillWithOptionalPattern("f", pattern); + return this; + }; + /** + * Fill the current path using the even-odd rule. The PDF f* operator. + * @see API.fill + * @name fillEvenOdd + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be filled with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fillEvenOdd = function (pattern) { + fillWithOptionalPattern("f*", pattern); + return this; + }; + /** + * Fill using the nonzero winding number rule and then stroke the current Path. The PDF "B" operator. + * @see API.fill + * @name fillStroke + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be stroked with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fillStroke = function (pattern) { + fillWithOptionalPattern("B", pattern); + return this; + }; + /** + * Fill using the even-odd rule and then stroke the current Path. The PDF "B" operator. + * @see API.fill + * @name fillStrokeEvenOdd + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fillStrokeEvenOdd = function (pattern) { + fillWithOptionalPattern("B*", pattern); + return this; + }; + + var fillWithOptionalPattern = function fillWithOptionalPattern(style, pattern) { + if (_typeof(pattern) === "object") { + fillWithPattern(pattern, style); + } else { + out(style); + } + }; + + var putStyle = function putStyle(style) { + if (style === null || apiMode === ApiMode.ADVANCED && style === undefined) { + return; + } + + style = getStyle(style); // stroking / filling / both the path + + out(style); + }; + + function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) { + var clone = new TilingPattern(boundingBox || this.boundingBox, xStep || this.xStep, yStep || this.yStep, this.gState, matrix || this.matrix); + clone.stream = this.stream; + var key = patternKey + "$$" + this.cloneIndex++ + "$$"; + addPattern(key, clone); + return clone; + } + + var fillWithPattern = function fillWithPattern(patternData, style) { + var patternId = patternMap[patternData.key]; + var pattern = patterns[patternId]; + + if (pattern instanceof ShadingPattern) { + out("q"); + out(clipRuleFromStyle(style)); + + if (pattern.gState) { + API.setGState(pattern.gState); + } + + out(patternData.matrix.toString() + " cm"); + out("/" + patternId + " sh"); + out("Q"); + } else if (pattern instanceof TilingPattern) { + // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation, + // so we must flip them + var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight()); + + if (patternData.matrix) { + matrix = matrix.multiply(patternData.matrix || identityMatrix); // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances + // for each use + + patternId = cloneTilingPattern.call(pattern, patternData.key, patternData.boundingBox, patternData.xStep, patternData.yStep, matrix).id; + } + + out("q"); + out("/Pattern cs"); + out("/" + patternId + " scn"); + + if (pattern.gState) { + API.setGState(pattern.gState); + } + + out(style); + out("Q"); + } + }; + + var clipRuleFromStyle = function clipRuleFromStyle(style) { + switch (style) { + case "f": + case "F": + return "W n"; + + case "f*": + return "W* n"; + + case "B": + return "W S"; + + case "B*": + return "W* S"; + // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern + // and "n"/"S" as style would still fill/fill and stroke the path) + + case "S": + return "W S"; + + case "n": + return "W n"; + } + }; + /** + * Begin a new subpath by moving the current point to coordinates (x, y). The PDF "m" operator. + * @param {number} x + * @param {number} y + * @name moveTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + + + var moveTo = API.moveTo = function (x, y) { + out(hpf(scale(x)) + " " + hpf(transformScaleY(y)) + " m"); + return this; + }; + /** + * Append a straight line segment from the current point to the point (x, y). The PDF "l" operator. + * @param {number} x + * @param {number} y + * @memberof jsPDF# + * @name lineTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + + + var lineTo = API.lineTo = function (x, y) { + out(hpf(scale(x)) + " " + hpf(transformScaleY(y)) + " l"); + return this; + }; + /** + * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point + * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3). + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @memberof jsPDF# + * @name curveTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + + + var curveTo = API.curveTo = function (x1, y1, x2, y2, x3, y3) { + out([hpf(scale(x1)), hpf(transformScaleY(y1)), hpf(scale(x2)), hpf(transformScaleY(y2)), hpf(scale(x3)), hpf(transformScaleY(y3)), "c"].join(" ")); + return this; + }; + /** + * Draw a line on the current page. + * + * @name line + * @function + * @instance + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S' + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.__private__.line = API.line = function (x1, y1, x2, y2, style) { + if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.line"); + } + + if (apiMode === ApiMode.COMPAT) { + return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || "S"); + } else { + return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke(); + } + }; + /** + * @typedef {Object} PatternData + * {Matrix|undefined} matrix + * {Number|undefined} xStep + * {Number|undefined} yStep + * {Array.|undefined} boundingBox + */ + + /** + * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates. + * All data points in `lines` are relative to last line origin. + * `x`, `y` become x1,y1 for first line / curve in the set. + * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point. + * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1. + * + * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line + * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves). + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction. + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name lines + */ + + + API.__private__.lines = API.lines = function (lines, x, y, scale, style, closed) { + var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp; // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style) + // in effort to make all calls have similar signature like + // function(content, coordinateX, coordinateY , miscellaneous) + // this method had its args flipped. + // code below allows backward compatibility with old arg order. + + if (typeof lines === "number") { + tmp = y; + y = x; + x = lines; + lines = tmp; + } + + scale = scale || [1, 1]; + closed = closed || false; + + if (isNaN(x) || isNaN(y) || !Array.isArray(lines) || !Array.isArray(scale) || !isValidStyle(style) || typeof closed !== "boolean") { + throw new Error("Invalid arguments passed to jsPDF.lines"); + } // starting point + + + moveTo(x, y); + scalex = scale[0]; + scaley = scale[1]; + l = lines.length; //, x2, y2 // bezier only. In page default measurement "units", *after* scaling + //, x3, y3 // bezier only. In page default measurement "units", *after* scaling + // ending point for all, lines and bezier. . In page default measurement "units", *after* scaling + + x4 = x; // last / ending point = starting point for first item. + + y4 = y; // last / ending point = starting point for first item. + + for (i = 0; i < l; i++) { + leg = lines[i]; + + if (leg.length === 2) { + // simple line + x4 = leg[0] * scalex + x4; // here last x4 was prior ending point + + y4 = leg[1] * scaley + y4; // here last y4 was prior ending point + + lineTo(x4, y4); + } else { + // bezier curve + x2 = leg[0] * scalex + x4; // here last x4 is prior ending point + + y2 = leg[1] * scaley + y4; // here last y4 is prior ending point + + x3 = leg[2] * scalex + x4; // here last x4 is prior ending point + + y3 = leg[3] * scaley + y4; // here last y4 is prior ending point + + x4 = leg[4] * scalex + x4; // here last x4 was prior ending point + + y4 = leg[5] * scaley + y4; // here last y4 was prior ending point + + curveTo(x2, y2, x3, y3, x4, y4); + } + } + + if (closed) { + close(); + } + + putStyle(style); + return this; + }; + /** + * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative. + * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of "m" (move to), "l" (line to) + * "c" (cubic bezier curve) and "h" (close (sub)path)). c is an array of coordinates. "m" and "l" expect two, "c" + * six and "h" an empty array (or undefined). + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name path + */ + + + API.path = function (lines) { + for (var i = 0; i < lines.length; i++) { + var leg = lines[i]; + var coords = leg.c; + + switch (leg.op) { + case "m": + moveTo(coords[0], coords[1]); + break; + + case "l": + lineTo(coords[0], coords[1]); + break; + + case "c": + curveTo.apply(this, coords); + break; + + case "h": + close(); + break; + } + } + + return this; + }; + /** + * Adds a rectangle to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} w Width (in units declared at inception of PDF document) + * @param {number} h Height (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name rect + */ + + + API.__private__.rect = API.rect = function (x, y, w, h, style) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.rect"); + } + + if (apiMode === ApiMode.COMPAT) { + h = -h; + } + + out([hpf(scale(x)), hpf(transformScaleY(y)), hpf(scale(w)), hpf(scale(h)), "re"].join(" ")); + putStyle(style); + return this; + }; + /** + * Adds a triangle to PDF. + * + * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name triangle + */ + + + API.__private__.triangle = API.triangle = function (x1, y1, x2, y2, x3, y3, style) { + if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2) || isNaN(x3) || isNaN(y3) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.triangle"); + } + + this.lines([[x2 - x1, y2 - y1], // vector to point 2 + [x3 - x2, y3 - y2], // vector to point 3 + [x1 - x3, y1 - y3] // closing vector back to point 1 + ], x1, y1, // start of path + [1, 1], style, true); + return this; + }; + /** + * Adds a rectangle with rounded corners to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} w Width (in units declared at inception of PDF document) + * @param {number} h Height (in units declared at inception of PDF document) + * @param {number} rx Radius along x axis (in units declared at inception of PDF document) + * @param {number} ry Radius along y axis (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name roundedRect + */ + + + API.__private__.roundedRect = API.roundedRect = function (x, y, w, h, rx, ry, style) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || isNaN(rx) || isNaN(ry) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.roundedRect"); + } + + var MyArc = 4 / 3 * (Math.SQRT2 - 1); + rx = Math.min(rx, w * 0.5); + ry = Math.min(ry, h * 0.5); + this.lines([[w - 2 * rx, 0], [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry], [0, h - 2 * ry], [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry], [-w + 2 * rx, 0], [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry], [0, -h + 2 * ry], [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]], x + rx, y, // start of path + [1, 1], style, true); + return this; + }; + /** + * Adds an ellipse to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} rx Radius along x axis (in units declared at inception of PDF document) + * @param {number} ry Radius along y axis (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name ellipse + */ + + + API.__private__.ellipse = API.ellipse = function (x, y, rx, ry, style) { + if (isNaN(x) || isNaN(y) || isNaN(rx) || isNaN(ry) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.ellipse"); + } + + var lx = 4 / 3 * (Math.SQRT2 - 1) * rx, + ly = 4 / 3 * (Math.SQRT2 - 1) * ry; + moveTo(x + rx, y); + curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry); + curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y); + curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry); + curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y); + putStyle(style); + return this; + }; + /** + * Adds an circle to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} r Radius (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name circle + */ + + + API.__private__.circle = API.circle = function (x, y, r, style) { + if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.circle"); + } + + return this.ellipse(x, y, r, r, style); + }; + /** + * Sets text font face, variant for upcoming text elements. + * See output of jsPDF.getFontList() for possible font names, styles. + * + * @param {string} fontName Font name or family. Example: "times". + * @param {string} fontStyle Font style or variant. Example: "italic". + * @param {number | string} fontWeight Weight of the Font. Example: "normal" | 400 + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFont + */ + + + API.setFont = function (fontName, fontStyle, fontWeight) { + if (fontWeight) { + fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight); + } + + activeFontKey = getFont(fontName, fontStyle, { + disableWarning: false + }); + return this; + }; + /** + * Gets text font face, variant for upcoming text elements. + * + * @function + * @instance + * @returns {Object} + * @memberof jsPDF# + * @name getFont + */ + + + var getFontEntry = API.__private__.getFont = API.getFont = function () { + return fonts[getFont.apply(API, arguments)]; + }; + /** + * Returns an object - a tree of fontName to fontStyle relationships available to + * active PDF document. + * + * @public + * @function + * @instance + * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... } + * @memberof jsPDF# + * @name getFontList + */ + + + API.__private__.getFontList = API.getFontList = function () { + var list = {}, + fontName, + fontStyle; + + for (fontName in fontmap) { + if (fontmap.hasOwnProperty(fontName)) { + list[fontName] = []; + + for (fontStyle in fontmap[fontName]) { + if (fontmap[fontName].hasOwnProperty(fontStyle)) { + list[fontName].push(fontStyle); + } + } + } + } + + return list; + }; + /** + * Add a custom font to the current instance. + * + * @param {string} postScriptName PDF specification full name for the font. + * @param {string} id PDF-document-instance-specific label assinged to the font. + * @param {string} fontStyle Style of the Font. + * @param {number | string} fontWeight Weight of the Font. + * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping. + * @function + * @instance + * @memberof jsPDF# + * @name addFont + * @returns {string} fontId + */ + + + API.addFont = function (postScriptName, fontName, fontStyle, fontWeight, encoding) { + var encodingOptions = ["StandardEncoding", "MacRomanEncoding", "Identity-H", "WinAnsiEncoding"]; + + if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) { + //IE 11 fix + encoding = arguments[3]; + } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) { + fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight); + } + + encoding = encoding || "Identity-H"; + return addFont.call(this, postScriptName, fontName, fontStyle, encoding); + }; + + var lineWidth = options.lineWidth || 0.200025; // 2mm + + /** + * Gets the line width, default: 0.200025. + * + * @function + * @instance + * @returns {number} lineWidth + * @memberof jsPDF# + * @name getLineWidth + */ + + var getLineWidth = API.__private__.getLineWidth = API.getLineWidth = function () { + return lineWidth; + }; + /** + * Sets line width for upcoming lines. + * + * @param {number} width Line width (in units declared at inception of PDF document). + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineWidth + */ + + + var setLineWidth = API.__private__.setLineWidth = API.setLineWidth = function (width) { + lineWidth = width; + out(hpf(scale(width)) + " w"); + return this; + }; + /** + * Sets the dash pattern for upcoming lines. + * + * To reset the settings simply call the method without any parameters. + * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the + * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered + * to be as long as the dashes. An empty array means solid, unbroken lines. + * @param {number} dashPhase The phase lines start with. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineDashPattern + */ + + + API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function (dashArray, dashPhase) { + dashArray = dashArray || []; + dashPhase = dashPhase || 0; + + if (isNaN(dashPhase) || !Array.isArray(dashArray)) { + throw new Error("Invalid arguments passed to jsPDF.setLineDash"); + } + + dashArray = dashArray.map(function (x) { + return hpf(scale(x)); + }).join(" "); + dashPhase = hpf(scale(dashPhase)); + out("[" + dashArray + "] " + dashPhase + " d"); + return this; + }; + + var lineHeightFactor; + + var getLineHeight = API.__private__.getLineHeight = API.getLineHeight = function () { + return activeFontSize * lineHeightFactor; + }; + + API.__private__.getLineHeight = API.getLineHeight = function () { + return activeFontSize * lineHeightFactor; + }; + /** + * Sets the LineHeightFactor of proportion. + * + * @param {number} value LineHeightFactor value. Default: 1.15. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineHeightFactor + */ + + + var setLineHeightFactor = API.__private__.setLineHeightFactor = API.setLineHeightFactor = function (value) { + value = value || 1.15; + + if (typeof value === "number") { + lineHeightFactor = value; + } + + return this; + }; + /** + * Gets the LineHeightFactor, default: 1.15. + * + * @function + * @instance + * @returns {number} lineHeightFactor + * @memberof jsPDF# + * @name getLineHeightFactor + */ + + + var getLineHeightFactor = API.__private__.getLineHeightFactor = API.getLineHeightFactor = function () { + return lineHeightFactor; + }; + + setLineHeightFactor(options.lineHeight); + + var getHorizontalCoordinate = API.__private__.getHorizontalCoordinate = function (value) { + return scale(value); + }; + + var getVerticalCoordinate = API.__private__.getVerticalCoordinate = function (value) { + if (apiMode === ApiMode.ADVANCED) { + return value; + } else { + var pageHeight = pagesContext[currentPage].mediaBox.topRightY - pagesContext[currentPage].mediaBox.bottomLeftY; + return pageHeight - scale(value); + } + }; + + var getHorizontalCoordinateString = API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function (value) { + return hpf(getHorizontalCoordinate(value)); + }; + + var getVerticalCoordinateString = API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function (value) { + return hpf(getVerticalCoordinate(value)); + }; + + var strokeColor = options.strokeColor || "0 G"; + /** + * Gets the stroke color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getDrawColor + */ + + API.__private__.getStrokeColor = API.getDrawColor = function () { + return decodeColorString(strokeColor); + }; + /** + * Sets the stroke color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setDrawColor + */ + + + API.__private__.setStrokeColor = API.setDrawColor = function (ch1, ch2, ch3, ch4) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "draw", + precision: 2 + }; + strokeColor = encodeColorString(options); + out(strokeColor); + return this; + }; + + var fillColor = options.fillColor || "0 g"; + /** + * Gets the fill color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getFillColor + */ + + API.__private__.getFillColor = API.getFillColor = function () { + return decodeColorString(fillColor); + }; + /** + * Sets the fill color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFillColor + */ + + + API.__private__.setFillColor = API.setFillColor = function (ch1, ch2, ch3, ch4) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "fill", + precision: 2 + }; + fillColor = encodeColorString(options); + out(fillColor); + return this; + }; + + var textColor = options.textColor || "0 g"; + /** + * Gets the text color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getTextColor + */ + + var getTextColor = API.__private__.getTextColor = API.getTextColor = function () { + return decodeColorString(textColor); + }; + /** + * Sets the text color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setTextColor + */ + + + API.__private__.setTextColor = API.setTextColor = function (ch1, ch2, ch3, ch4) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "text", + precision: 3 + }; + textColor = encodeColorString(options); + return this; + }; + + var activeCharSpace = options.charSpace; + /** + * Get global value of CharSpace. + * + * @function + * @instance + * @returns {number} charSpace + * @memberof jsPDF# + * @name getCharSpace + */ + + var getCharSpace = API.__private__.getCharSpace = API.getCharSpace = function () { + return parseFloat(activeCharSpace || 0); + }; + /** + * Set global value of CharSpace. + * + * @param {number} charSpace + * @function + * @instance + * @returns {jsPDF} jsPDF-instance + * @memberof jsPDF# + * @name setCharSpace + */ + + + API.__private__.setCharSpace = API.setCharSpace = function (charSpace) { + if (isNaN(charSpace)) { + throw new Error("Invalid argument passed to jsPDF.setCharSpace"); + } + + activeCharSpace = charSpace; + return this; + }; + + var lineCapID = 0; + /** + * Is an Object providing a mapping from human-readable to + * integer flag values designating the varieties of line cap + * and join styles. + * + * @memberof jsPDF# + * @name CapJoinStyles + */ + + API.CapJoinStyles = { + 0: 0, + butt: 0, + but: 0, + miter: 0, + 1: 1, + round: 1, + rounded: 1, + circle: 1, + 2: 2, + projecting: 2, + project: 2, + square: 2, + bevel: 2 + }; + /** + * Sets the line cap styles. + * See {jsPDF.CapJoinStyles} for variants. + * + * @param {String|Number} style A string or number identifying the type of line cap. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineCap + */ + + API.__private__.setLineCap = API.setLineCap = function (style) { + var id = API.CapJoinStyles[style]; + + if (id === undefined) { + throw new Error("Line cap style of '" + style + "' is not recognized. See or extend .CapJoinStyles property for valid styles"); + } + + lineCapID = id; + out(id + " J"); + return this; + }; + + var lineJoinID = 0; + /** + * Sets the line join styles. + * See {jsPDF.CapJoinStyles} for variants. + * + * @param {String|Number} style A string or number identifying the type of line join. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineJoin + */ + + API.__private__.setLineJoin = API.setLineJoin = function (style) { + var id = API.CapJoinStyles[style]; + + if (id === undefined) { + throw new Error("Line join style of '" + style + "' is not recognized. See or extend .CapJoinStyles property for valid styles"); + } + + lineJoinID = id; + out(id + " j"); + return this; + }; + /** + * Sets the miterLimit property, which effects the maximum miter length. + * + * @param {number} length The length of the miter + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineMiterLimit + */ + + API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function (length) { + length = length || 0; + + if (isNaN(length)) { + throw new Error("Invalid argument passed to jsPDF.setLineMiterLimit"); + } + + out(hpf(scale(length)) + " M"); + return this; + }; + /** + * An object representing a pdf graphics state. + * @class GState + */ + + /** + * + * @param parameters A parameter object that contains all properties this graphics state wants to set. + * Supported are: opacity, stroke-opacity + * @constructor + */ + + + API.GState = GState; + /** + * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}. + * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState + * it will be added before use. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name setGState + */ + + API.setGState = function (gState) { + if (typeof gState === "string") { + gState = gStates[gStatesMap[gState]]; + } else { + gState = addGState(null, gState); + } + + if (!gState.equals(activeGState)) { + out("/" + gState.id + " gs"); + activeGState = gState; + } + }; + /** + * Adds a new Graphics State. Duplicates are automatically eliminated. + * @param {String} key Might also be null, if no later reference to this gState is needed + * @param {Object} gState The gState object + */ + + + var addGState = function addGState(key, gState) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (key && gStatesMap[key]) return; + var duplicate = false; + + for (var s in gStates) { + if (gStates.hasOwnProperty(s)) { + if (gStates[s].equals(gState)) { + duplicate = true; + break; + } + } + } + + if (duplicate) { + gState = gStates[s]; + } else { + var gStateKey = "GS" + (Object.keys(gStates).length + 1).toString(10); + gStates[gStateKey] = gState; + gState.id = gStateKey; + } // several user keys may point to the same GState object + + + key && (gStatesMap[key] = gState.id); + events.publish("addGState", gState); + return gState; + }; + /** + * Adds a new {@link GState} for later use. See {@link setGState}. + * @param {String} key + * @param {GState} gState + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name addGState + */ + + + API.addGState = function (key, gState) { + addGState(key, gState); + return this; + }; + /** + * Saves the current graphics state ("pushes it on the stack"). It can be restored by {@link restoreGraphicsState} + * later. Here, the general pdf graphics state is meant, also including the current transformation matrix, + * fill and stroke colors etc. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name saveGraphicsState + */ + + + API.saveGraphicsState = function () { + out("q"); // as we cannot set font key and size independently we must keep track of both + + fontStateStack.push({ + key: activeFontKey, + size: activeFontSize, + color: textColor + }); + return this; + }; + /** + * Restores a previously saved graphics state saved by {@link saveGraphicsState} ("pops the stack"). + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name restoreGraphicsState + */ + + + API.restoreGraphicsState = function () { + out("Q"); // restore previous font state + + var fontState = fontStateStack.pop(); + activeFontKey = fontState.key; + activeFontSize = fontState.size; + textColor = fontState.color; + activeGState = null; + return this; + }; + /** + * Appends this matrix to the left of all previously applied matrices. + * + * @param {Matrix} matrix + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name setCurrentTransformationMatrix + */ + + + API.setCurrentTransformationMatrix = function (matrix) { + out(matrix.toString() + " cm"); + return this; + }; + /** + * Inserts a debug comment into the generated pdf. + * @function + * @instance + * @param {String} text + * @returns {jsPDF} + * @memberof jsPDF# + * @name comment + */ + + + API.comment = function (text) { + out("#" + text); + return this; + }; + /** + * Point + */ + + + var Point = function Point(x, y) { + var _x = x || 0; + + Object.defineProperty(this, "x", { + enumerable: true, + get: function get() { + return _x; + }, + set: function set(value) { + if (!isNaN(value)) { + _x = parseFloat(value); + } + } + }); + + var _y = y || 0; + + Object.defineProperty(this, "y", { + enumerable: true, + get: function get() { + return _y; + }, + set: function set(value) { + if (!isNaN(value)) { + _y = parseFloat(value); + } + } + }); + var _type = "pt"; + Object.defineProperty(this, "type", { + enumerable: true, + get: function get() { + return _type; + }, + set: function set(value) { + _type = value.toString(); + } + }); + return this; + }; + /** + * Rectangle + */ + + + var Rectangle = function Rectangle(x, y, w, h) { + Point.call(this, x, y); + this.type = "rect"; + + var _w = w || 0; + + Object.defineProperty(this, "w", { + enumerable: true, + get: function get() { + return _w; + }, + set: function set(value) { + if (!isNaN(value)) { + _w = parseFloat(value); + } + } + }); + + var _h = h || 0; + + Object.defineProperty(this, "h", { + enumerable: true, + get: function get() { + return _h; + }, + set: function set(value) { + if (!isNaN(value)) { + _h = parseFloat(value); + } + } + }); + return this; + }; + /** + * FormObject/RenderTarget + */ + + + var RenderTarget = function RenderTarget() { + this.page = page; + this.currentPage = currentPage; + this.pages = pages.slice(0); + this.pagesContext = pagesContext.slice(0); + this.x = pageX; + this.y = pageY; + this.matrix = pageMatrix; + this.width = getPageWidth(currentPage); + this.height = getPageHeight(currentPage); + this.outputDestination = outputDestination; + this.id = ""; // set by endFormObject() + + this.objectNumber = -1; // will be set by putXObject() + }; + + RenderTarget.prototype.restore = function () { + page = this.page; + currentPage = this.currentPage; + pagesContext = this.pagesContext; + pages = this.pages; + pageX = this.x; + pageY = this.y; + pageMatrix = this.matrix; + setPageWidth(currentPage, this.width); + setPageHeight(currentPage, this.height); + outputDestination = this.outputDestination; + }; + + var beginNewRenderTarget = function beginNewRenderTarget(x, y, width, height, matrix) { + // save current state + renderTargetStack.push(new RenderTarget()); // clear pages + + page = currentPage = 0; + pages = []; + pageX = x; + pageY = y; + pageMatrix = matrix; + beginPage([width, height]); + }; + + var endFormObject = function endFormObject(key) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (renderTargetMap[key]) { + renderTargetStack.pop().restore(); + return; + } // save the created xObject + + + var newXObject = new RenderTarget(); + var xObjectId = "Xo" + (Object.keys(renderTargets).length + 1).toString(10); + newXObject.id = xObjectId; + renderTargetMap[key] = xObjectId; + renderTargets[xObjectId] = newXObject; + events.publish("addFormObject", newXObject); // restore state from stack + + renderTargetStack.pop().restore(); + }; + /** + * Starts a new pdf form object, which means that all consequent draw calls target a new independent object + * until {@link endFormObject} is called. The created object can be referenced and drawn later using + * {@link doFormObject}. Nested form objects are possible. + * x, y, width, height set the bounding box that is used to clip the content. + * + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to + * the parent's. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name beginFormObject + */ + + + API.beginFormObject = function (x, y, width, height, matrix) { + // The user can set the output target to a new form object. Nested form objects are possible. + // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as + // the PDF-Spec states: + // "In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which + // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions, + // form XObjects may be independent of the content streams in which they appear, and this is strongly + // recommended although not required" + beginNewRenderTarget(x, y, width, height, matrix); + return this; + }; + /** + * Completes and saves the form object. + * @param {String} key The key by which this form object can be referenced. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name endFormObject + */ + + + API.endFormObject = function (key) { + endFormObject(key); + return this; + }; + /** + * Draws the specified form object by referencing to the respective pdf XObject created with + * {@link API.beginFormObject} and {@link endFormObject}. + * The location is determined by matrix. + * + * @param {String} key The key to the form object. + * @param {Matrix} matrix The matrix applied before drawing the form object. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name doFormObject + */ + + + API.doFormObject = function (key, matrix) { + var xObject = renderTargets[renderTargetMap[key]]; + out("q"); + out(matrix.toString() + " cm"); + out("/" + xObject.id + " Do"); + out("Q"); + return this; + }; + /** + * Returns the form object specified by key. + * @param key {String} + * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}} + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name getFormObject + */ + + + API.getFormObject = function (key) { + var xObject = renderTargets[renderTargetMap[key]]; + return { + x: xObject.x, + y: xObject.y, + width: xObject.width, + height: xObject.height, + matrix: xObject.matrix + }; + }; + /** + * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf'). + * Uses FileSaver.js-method saveAs. + * + * @memberof jsPDF# + * @name save + * @function + * @instance + * @param {string} filename The filename including extension. + * @param {Object} options An Object with additional options, possible options: 'returnPromise'. + * @returns {jsPDF|Promise} jsPDF-instance */ + + + API.save = function (filename, options) { + filename = filename || "generated.pdf"; + options = options || {}; + options.returnPromise = options.returnPromise || false; + + if (options.returnPromise === false) { + saveAs(getBlob(buildDocument()), filename); + + if (typeof saveAs.unload === "function") { + if (globalObject.setTimeout) { + setTimeout(saveAs.unload, 911); + } + } + + return this; + } else { + return new Promise(function (resolve, reject) { + try { + var result = saveAs(getBlob(buildDocument()), filename); + + if (typeof saveAs.unload === "function") { + if (globalObject.setTimeout) { + setTimeout(saveAs.unload, 911); + } + } + + resolve(result); + } catch (e) { + reject(e.message); + } + }); + } + }; // applying plugins (more methods) ON TOP of built-in API. + // this is intentional as we allow plugins to override + // built-ins + + + for (var plugin in jsPDF.API) { + if (jsPDF.API.hasOwnProperty(plugin)) { + if (plugin === "events" && jsPDF.API.events.length) { + (function (events, newEvents) { + // jsPDF.API.events is a JS Array of Arrays + // where each Array is a pair of event name, handler + // Events were added by plugins to the jsPDF instantiator. + // These are always added to the new instance and some ran + // during instantiation. + var eventname, handler_and_args, i; + + for (i = newEvents.length - 1; i !== -1; i--) { + // subscribe takes 3 args: 'topic', function, runonce_flag + // if undefined, runonce is false. + // users can attach callback directly, + // or they can attach an array with [callback, runonce_flag] + // that's what the "apply" magic is for below. + eventname = newEvents[i][0]; + handler_and_args = newEvents[i][1]; + events.subscribe.apply(events, [eventname].concat(typeof handler_and_args === "function" ? [handler_and_args] : handler_and_args)); + } + })(events, jsPDF.API.events); + } else { + API[plugin] = jsPDF.API[plugin]; + } + } + } + + var getPageWidth = API.getPageWidth = function (pageNumber) { + pageNumber = pageNumber || currentPage; + return (pagesContext[pageNumber].mediaBox.topRightX - pagesContext[pageNumber].mediaBox.bottomLeftX) / scaleFactor; + }; + + var setPageWidth = API.setPageWidth = function (pageNumber, value) { + pagesContext[pageNumber].mediaBox.topRightX = value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX; + }; + + var getPageHeight = API.getPageHeight = function (pageNumber) { + pageNumber = pageNumber || currentPage; + return (pagesContext[pageNumber].mediaBox.topRightY - pagesContext[pageNumber].mediaBox.bottomLeftY) / scaleFactor; + }; + + var setPageHeight = API.setPageHeight = function (pageNumber, value) { + pagesContext[pageNumber].mediaBox.topRightY = value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY; + }; + /** + * Object exposing internal API to plugins + * @public + * @ignore + */ + + + API.internal = { + pdfEscape: pdfEscape, + getStyle: getStyle, + getFont: getFontEntry, + getFontSize: getFontSize, + getCharSpace: getCharSpace, + getTextColor: getTextColor, + getLineHeight: getLineHeight, + getLineHeightFactor: getLineHeightFactor, + getLineWidth: getLineWidth, + write: write, + getHorizontalCoordinate: getHorizontalCoordinate, + getVerticalCoordinate: getVerticalCoordinate, + getCoordinateString: getHorizontalCoordinateString, + getVerticalCoordinateString: getVerticalCoordinateString, + collections: {}, + newObject: newObject, + newAdditionalObject: newAdditionalObject, + newObjectDeferred: newObjectDeferred, + newObjectDeferredBegin: newObjectDeferredBegin, + getFilters: getFilters, + putStream: putStream, + events: events, + scaleFactor: scaleFactor, + pageSize: { + getWidth: function getWidth() { + return getPageWidth(currentPage); + }, + setWidth: function setWidth(value) { + setPageWidth(currentPage, value); + }, + getHeight: function getHeight() { + return getPageHeight(currentPage); + }, + setHeight: function setHeight(value) { + setPageHeight(currentPage, value); + } + }, + encryptionOptions: encryptionOptions, + encryption: encryption, + getEncryptor: getEncryptor, + output: output, + getNumberOfPages: getNumberOfPages, + pages: pages, + out: out, + f2: f2, + f3: f3, + getPageInfo: getPageInfo, + getPageInfoByObjId: getPageInfoByObjId, + getCurrentPageInfo: getCurrentPageInfo, + getPDFVersion: getPdfVersion, + Point: Point, + Rectangle: Rectangle, + Matrix: Matrix, + hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them. + + }; + Object.defineProperty(API.internal.pageSize, "width", { + get: function get() { + return getPageWidth(currentPage); + }, + set: function set(value) { + setPageWidth(currentPage, value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(API.internal.pageSize, "height", { + get: function get() { + return getPageHeight(currentPage); + }, + set: function set(value) { + setPageHeight(currentPage, value); + }, + enumerable: true, + configurable: true + }); ////////////////////////////////////////////////////// + // continuing initialization of jsPDF Document object + ////////////////////////////////////////////////////// + // Add the first page automatically + + addFonts.call(API, standardFonts); + activeFontKey = "F1"; + + _addPage(format, orientation); + + events.publish("initialized"); + return API; +} +/** + * jsPDF.API is a STATIC property of jsPDF class. + * jsPDF.API is an object you can add methods and properties to. + * The methods / properties you add will show up in new jsPDF objects. + * + * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics, + * callbacks to this object. These will be reassigned to all new instances of jsPDF. + * + * @static + * @public + * @memberof jsPDF# + * @name API + * + * @example + * jsPDF.API.mymethod = function(){ + * // 'this' will be ref to internal API object. see jsPDF source + * // , so you can refer to built-in methods like so: + * // this.line(....) + * // this.text(....) + * } + * var pdfdoc = new jsPDF() + * pdfdoc.mymethod() // <- !!!!!! + */ + + +jsPDF.API = { + events: [] +}; +/** + * The version of jsPDF. + * @name version + * @type {string} + * @memberof jsPDF# + */ + +jsPDF.version = "2.5.1"; + +var jsPDFAPI = jsPDF.API; +var scaleFactor = 1; + +var pdfEscape = function pdfEscape(value) { + return value.replace(/\\/g, "\\\\").replace(/\(/g, "\\(").replace(/\)/g, "\\)"); +}; + +var pdfUnescape = function pdfUnescape(value) { + return value.replace(/\\\\/g, "\\").replace(/\\\(/g, "(").replace(/\\\)/g, ")"); +}; + +var f2 = function f2(number) { + return number.toFixed(2); // Ie, %.2f +}; + +var f5 = function f5(number) { + return number.toFixed(5); // Ie, %.2f +}; + +jsPDFAPI.__acroform__ = {}; + +var inherit = function inherit(child, parent) { + child.prototype = Object.create(parent.prototype); + child.prototype.constructor = child; +}; + +var scale = function scale(x) { + return x * scaleFactor; +}; + +var createFormXObject = function createFormXObject(formObject) { + var xobj = new AcroFormXObject(); + var height = AcroFormAppearance.internal.getHeight(formObject) || 0; + var width = AcroFormAppearance.internal.getWidth(formObject) || 0; + xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))]; + return xobj; +}; +/** + * Bit-Operations + */ + + +var setBit = jsPDFAPI.__acroform__.setBit = function (number, bitPosition) { + number = number || 0; + bitPosition = bitPosition || 0; + + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBit"); + } + + var bitMask = 1 << bitPosition; + number |= bitMask; + return number; +}; + +var clearBit = jsPDFAPI.__acroform__.clearBit = function (number, bitPosition) { + number = number || 0; + bitPosition = bitPosition || 0; + + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.clearBit"); + } + + var bitMask = 1 << bitPosition; + number &= ~bitMask; + return number; +}; + +var getBit = jsPDFAPI.__acroform__.getBit = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.getBit"); + } + + return (number & 1 << bitPosition) === 0 ? 0 : 1; +}; +/* + * Ff starts counting the bit position at 1 and not like javascript at 0 + */ + + +var getBitForPdf = jsPDFAPI.__acroform__.getBitForPdf = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf"); + } + + return getBit(number, bitPosition - 1); +}; + +var setBitForPdf = jsPDFAPI.__acroform__.setBitForPdf = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf"); + } + + return setBit(number, bitPosition - 1); +}; + +var clearBitForPdf = jsPDFAPI.__acroform__.clearBitForPdf = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf"); + } + + return clearBit(number, bitPosition - 1); +}; + +var calculateCoordinates = jsPDFAPI.__acroform__.calculateCoordinates = function (args, scope) { + var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate; + var getVerticalCoordinate = scope.internal.getVerticalCoordinate; + var x = args[0]; + var y = args[1]; + var w = args[2]; + var h = args[3]; + var coordinates = {}; + coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0; + coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0; + coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0; + coordinates.upperRight_Y = getVerticalCoordinate(y) || 0; + return [Number(f2(coordinates.lowerLeft_X)), Number(f2(coordinates.lowerLeft_Y)), Number(f2(coordinates.upperRight_X)), Number(f2(coordinates.upperRight_Y))]; +}; + +var calculateAppearanceStream = function calculateAppearanceStream(formObject) { + if (formObject.appearanceStreamContent) { + return formObject.appearanceStreamContent; + } + + if (!formObject.V && !formObject.DV) { + return; + } // else calculate it + + + var stream = []; + var text = formObject._V || formObject.DV; + var calcRes = calculateX(formObject, text); + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; //PDF 32000-1:2008, page 444 + + stream.push("/Tx BMC"); + stream.push("q"); + stream.push("BT"); // Begin Text + + stream.push(formObject.scope.__private__.encodeColorString(formObject.color)); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf"); + stream.push("1 0 0 1 0 0 Tm"); // Transformation Matrix + + stream.push(calcRes.text); + stream.push("ET"); // End Text + + stream.push("Q"); + stream.push("EMC"); + var appearanceStreamContent = createFormXObject(formObject); + appearanceStreamContent.scope = formObject.scope; + appearanceStreamContent.stream = stream.join("\n"); + return appearanceStreamContent; +}; + +var calculateX = function calculateX(formObject, text) { + var maxFontSize = formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize; + var returnValue = { + text: "", + fontSize: "" + }; // Remove Brackets + + text = text.substr(0, 1) == "(" ? text.substr(1) : text; + text = text.substr(text.length - 1) == ")" ? text.substr(0, text.length - 1) : text; // split into array of words + + var textSplit = text.split(" "); + + if (formObject.multiline) { + textSplit = textSplit.map(function (word) { + return word.split("\n"); + }); + } else { + textSplit = textSplit.map(function (word) { + return [word]; + }); + } + + var fontSize = maxFontSize; // The Starting fontSize (The Maximum) + + var lineSpacing = 2; + var borderPadding = 2; + var height = AcroFormAppearance.internal.getHeight(formObject) || 0; + height = height < 0 ? -height : height; + var width = AcroFormAppearance.internal.getWidth(formObject) || 0; + width = width < 0 ? -width : width; + + var isSmallerThanWidth = function isSmallerThanWidth(i, lastLine, fontSize) { + if (i + 1 < textSplit.length) { + var tmp = lastLine + " " + textSplit[i + 1][0]; + var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width; + var FieldWidth = width - 2 * borderPadding; + return TextWidth <= FieldWidth; + } else { + return false; + } + }; + + fontSize++; + + FontSize: while (fontSize > 0) { + text = ""; + fontSize--; + var textHeight = calculateFontSpace("3", formObject, fontSize).height; + var startY = formObject.multiline ? height - fontSize : (height - textHeight) / 2; + startY += lineSpacing; + var startX; + var lastY = startY; + var firstWordInLine = 0, + lastWordInLine = 0; + var lastLength; + var currWord = 0; + + if (fontSize <= 0) { + // In case, the Text doesn't fit at all + fontSize = 12; + text = "(...) Tj\n"; + text += "% Width of Text: " + calculateFontSpace(text, formObject, fontSize).width + ", FieldWidth:" + width + "\n"; + break; + } + + var lastLine = ""; + var lineCount = 0; + + Line: for (var i = 0; i < textSplit.length; i++) { + if (textSplit.hasOwnProperty(i)) { + var isWithNewLine = false; + + if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) { + if ((textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > height) { + continue FontSize; + } + + lastLine += textSplit[i][currWord]; + isWithNewLine = true; + lastWordInLine = i; + i--; + } else { + lastLine += textSplit[i][currWord] + " "; + lastLine = lastLine.substr(lastLine.length - 1) == " " ? lastLine.substr(0, lastLine.length - 1) : lastLine; + var key = parseInt(i); + var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize); + var isLastWord = i >= textSplit.length - 1; + + if (nextLineIsSmaller && !isLastWord) { + lastLine += " "; + currWord = 0; + continue; // Line + } else if (!nextLineIsSmaller && !isLastWord) { + if (!formObject.multiline) { + continue FontSize; + } else { + if ((textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > height) { + // If the Text is higher than the + // FieldObject + continue FontSize; + } + + lastWordInLine = key; // go on + } + } else if (isLastWord) { + lastWordInLine = key; + } else { + if (formObject.multiline && (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > height) { + // If the Text is higher than the FieldObject + continue FontSize; + } + } + } // Remove last blank + + + var line = ""; + + for (var x = firstWordInLine; x <= lastWordInLine; x++) { + var currLine = textSplit[x]; + + if (formObject.multiline) { + if (x === lastWordInLine) { + line += currLine[currWord] + " "; + currWord = (currWord + 1) % currLine.length; + continue; + } + + if (x === firstWordInLine) { + line += currLine[currLine.length - 1] + " "; + continue; + } + } + + line += currLine[0] + " "; + } // Remove last blank + + + line = line.substr(line.length - 1) == " " ? line.substr(0, line.length - 1) : line; // lastLength -= blankSpace.width; + + lastLength = calculateFontSpace(line, formObject, fontSize).width; // Calculate startX + + switch (formObject.textAlign) { + case "right": + startX = width - lastLength - borderPadding; + break; + + case "center": + startX = (width - lastLength) / 2; + break; + + case "left": + default: + startX = borderPadding; + break; + } + + text += f2(startX) + " " + f2(lastY) + " Td\n"; + text += "(" + pdfEscape(line) + ") Tj\n"; // reset X in PDF + + text += -f2(startX) + " 0 Td\n"; // After a Line, adjust y position + + lastY = -(fontSize + lineSpacing); // Reset for next iteration step + + lastLength = 0; + firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1; + lineCount++; + lastLine = ""; + continue Line; + } + } + + break; + } + + returnValue.text = text; + returnValue.fontSize = fontSize; + return returnValue; +}; +/** + * Small workaround for calculating the TextMetric approximately. + * + * @param text + * @param fontsize + * @returns {TextMetrics} (Has Height and Width) + */ + + +var calculateFontSpace = function calculateFontSpace(text, formObject, fontSize) { + var font = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle); + var width = formObject.scope.getStringUnitWidth(text, { + font: font, + fontSize: parseFloat(fontSize), + charSpace: 0 + }) * parseFloat(fontSize); + var height = formObject.scope.getStringUnitWidth("3", { + font: font, + fontSize: parseFloat(fontSize), + charSpace: 0 + }) * parseFloat(fontSize) * 1.5; + return { + height: height, + width: width + }; +}; + +var acroformPluginTemplate = { + fields: [], + xForms: [], + + /** + * acroFormDictionaryRoot contains information about the AcroForm + * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has + * 1: The Object ID of the Root + */ + acroFormDictionaryRoot: null, + + /** + * After the PDF gets evaluated, the reference to the root has to be + * reset, this indicates, whether the root has already been printed + * out + */ + printedOut: false, + internal: null, + isInitialized: false +}; + +var annotReferenceCallback = function annotReferenceCallback(scope) { + //set objId to undefined and force it to get a new objId on buildDocument + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined; + var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields; + + for (var i in fields) { + if (fields.hasOwnProperty(i)) { + var formObject = fields[i]; //set objId to undefined and force it to get a new objId on buildDocument + + formObject.objId = undefined; // add Annot Reference! + + if (formObject.hasAnnotation) { + // If theres an Annotation Widget in the Form Object, put the + // Reference in the /Annot array + createAnnotationReference(formObject, scope); + } + } + } +}; + +var putForm = function putForm(formObject) { + if (formObject.scope.internal.acroformPlugin.printedOut) { + formObject.scope.internal.acroformPlugin.printedOut = false; + formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null; + } + + formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(formObject); +}; +/** + * Create the Reference to the widgetAnnotation, so that it gets referenced + * in the Annot[] int the+ (Requires the Annotation Plugin) + */ + + +var createAnnotationReference = function createAnnotationReference(object, scope) { + var options = { + type: "reference", + object: object + }; + + var findEntry = function findEntry(entry) { + return entry.type === options.type && entry.object === options.object; + }; + + if (scope.internal.getPageInfo(object.page).pageContext.annotations.find(findEntry) === undefined) { + scope.internal.getPageInfo(object.page).pageContext.annotations.push(options); + } +}; // Callbacks + + +var putCatalogCallback = function putCatalogCallback(scope) { + // Put reference to AcroForm to DocumentCatalog + if (typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== "undefined") { + // for safety, shouldn't normally be the case + scope.internal.write("/AcroForm " + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId + " " + 0 + " R"); + } else { + throw new Error("putCatalogCallback: Root missing."); + } +}; +/** + * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm + * Dictionary + */ + + +var AcroFormDictionaryCallback = function AcroFormDictionaryCallback(scope) { + // Remove event + scope.internal.events.unsubscribe(scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID); + delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID; + scope.internal.acroformPlugin.printedOut = true; +}; +/** + * Creates the single Fields and writes them into the Document + * + * If fieldArray is set, use the fields that are inside it instead of the + * fields from the AcroRoot (for the FormXObjects...) + */ + + +var createFieldCallback = function createFieldCallback(fieldArray, scope) { + var standardFields = !fieldArray; + + if (!fieldArray) { + // in case there is no fieldArray specified, we want to print out + // the Fields of the AcroForm + // Print out Root + scope.internal.newObjectDeferredBegin(scope.internal.acroformPlugin.acroFormDictionaryRoot.objId, true); + scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream(); + } + + fieldArray = fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids; + + for (var i in fieldArray) { + if (fieldArray.hasOwnProperty(i)) { + var fieldObject = fieldArray[i]; + var keyValueList = []; + var oldRect = fieldObject.Rect; + + if (fieldObject.Rect) { + fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope); + } // Start Writing the Object + + + scope.internal.newObjectDeferredBegin(fieldObject.objId, true); + fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(fieldObject); + + if (_typeof(fieldObject) === "object" && typeof fieldObject.getKeyValueListForStream === "function") { + keyValueList = fieldObject.getKeyValueListForStream(); + } + + fieldObject.Rect = oldRect; + + if (fieldObject.hasAppearanceStream && !fieldObject.appearanceStreamContent) { + // Calculate Appearance + var appearance = calculateAppearanceStream(fieldObject); + keyValueList.push({ + key: "AP", + value: "<>" + }); + scope.internal.acroformPlugin.xForms.push(appearance); + } // Assume AppearanceStreamContent is a Array with N,R,D (at least + // one of them!) + + + if (fieldObject.appearanceStreamContent) { + var appearanceStreamString = ""; // Iterate over N,R and D + + for (var k in fieldObject.appearanceStreamContent) { + if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) { + var value = fieldObject.appearanceStreamContent[k]; + appearanceStreamString += "/" + k + " "; + appearanceStreamString += "<<"; + + if (Object.keys(value).length >= 1 || Array.isArray(value)) { + // appearanceStream is an Array or Object! + for (var i in value) { + if (value.hasOwnProperty(i)) { + var obj = value[i]; + + if (typeof obj === "function") { + // if Function is referenced, call it in order + // to get the FormXObject + obj = obj.call(scope, fieldObject); + } + + appearanceStreamString += "/" + i + " " + obj + " "; // In case the XForm is already used, e.g. OffState + // of CheckBoxes, don't add it + + if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0)) scope.internal.acroformPlugin.xForms.push(obj); + } + } + } else { + obj = value; + + if (typeof obj === "function") { + // if Function is referenced, call it in order to + // get the FormXObject + obj = obj.call(scope, fieldObject); + } + + appearanceStreamString += "/" + i + " " + obj; + if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0)) scope.internal.acroformPlugin.xForms.push(obj); + } + + appearanceStreamString += ">>"; + } + } // appearance stream is a normal Object.. + + + keyValueList.push({ + key: "AP", + value: "<<\n" + appearanceStreamString + ">>" + }); + } + + scope.internal.putStream({ + additionalKeyValues: keyValueList, + objectId: fieldObject.objId + }); + scope.internal.out("endobj"); + } + } + + if (standardFields) { + createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope); + } +}; + +var createXFormObjectCallback = function createXFormObjectCallback(fieldArray, scope) { + for (var i in fieldArray) { + if (fieldArray.hasOwnProperty(i)) { + var key = i; + var fieldObject = fieldArray[i]; // Start Writing the Object + + scope.internal.newObjectDeferredBegin(fieldObject.objId, true); + + if (_typeof(fieldObject) === "object" && typeof fieldObject.putStream === "function") { + fieldObject.putStream(); + } + + delete fieldArray[key]; + } + } +}; + +var initializeAcroForm = function initializeAcroForm(scope, formObject) { + formObject.scope = scope; + + if (scope.internal !== undefined && (scope.internal.acroformPlugin === undefined || scope.internal.acroformPlugin.isInitialized === false)) { + AcroFormField.FieldNum = 0; + scope.internal.acroformPlugin = JSON.parse(JSON.stringify(acroformPluginTemplate)); + + if (scope.internal.acroformPlugin.acroFormDictionaryRoot) { + throw new Error("Exception while creating AcroformDictionary"); + } + + scaleFactor = scope.internal.scaleFactor; // The Object Number of the AcroForm Dictionary + + scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary(); + scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope; // add Callback for creating the AcroForm Dictionary + + scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe("postPutResources", function () { + AcroFormDictionaryCallback(scope); + }); + scope.internal.events.subscribe("buildDocument", function () { + annotReferenceCallback(scope); + }); // buildDocument + // Register event, that is triggered when the DocumentCatalog is + // written, in order to add /AcroForm + + scope.internal.events.subscribe("putCatalog", function () { + putCatalogCallback(scope); + }); // Register event, that creates all Fields + + scope.internal.events.subscribe("postPutPages", function (fieldArray) { + createFieldCallback(fieldArray, scope); + }); + scope.internal.acroformPlugin.isInitialized = true; + } +}; //PDF 32000-1:2008, page 26, 7.3.6 + + +var arrayToPdfArray = jsPDFAPI.__acroform__.arrayToPdfArray = function (array, objId, scope) { + var encryptor = function encryptor(data) { + return data; + }; + + if (Array.isArray(array)) { + var content = "["; + + for (var i = 0; i < array.length; i++) { + if (i !== 0) { + content += " "; + } + + switch (_typeof(array[i])) { + case "boolean": + case "number": + case "object": + content += array[i].toString(); + break; + + case "string": + if (array[i].substr(0, 1) !== "/") { + if (typeof objId !== "undefined" && scope) encryptor = scope.internal.getEncryptor(objId); + content += "(" + pdfEscape(encryptor(array[i].toString())) + ")"; + } else { + content += array[i].toString(); + } + + break; + } + } + + content += "]"; + return content; + } + + throw new Error("Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray"); +}; + +function getMatches(string, regex, index) { + index || (index = 1); // default to the first capturing group + + var matches = []; + var match; + + while (match = regex.exec(string)) { + matches.push(match[index]); + } + + return matches; +} + +var pdfArrayToStringArray = function pdfArrayToStringArray(array) { + var result = []; + + if (typeof array === "string") { + result = getMatches(array, /\((.*?)\)/g); + } + + return result; +}; + +var toPdfString = function toPdfString(string, objId, scope) { + var encryptor = function encryptor(data) { + return data; + }; + + if (typeof objId !== "undefined" && scope) encryptor = scope.internal.getEncryptor(objId); + string = string || ""; + string.toString(); + string = "(" + pdfEscape(encryptor(string)) + ")"; + return string; +}; // ########################## +// Classes +// ########################## + +/** + * @class AcroFormPDFObject + * @classdesc A AcroFormPDFObject + */ + + +var AcroFormPDFObject = function AcroFormPDFObject() { + this._objId = undefined; + this._scope = undefined; + /** + * @name AcroFormPDFObject#objId + * @type {any} + */ + + Object.defineProperty(this, "objId", { + get: function get() { + if (typeof this._objId === "undefined") { + if (typeof this.scope === "undefined") { + return undefined; + } + + this._objId = this.scope.internal.newObjectDeferred(); + } + + return this._objId; + }, + set: function set(value) { + this._objId = value; + } + }); + Object.defineProperty(this, "scope", { + value: this._scope, + writable: true + }); +}; +/** + * @function AcroFormPDFObject.toString + */ + + +AcroFormPDFObject.prototype.toString = function () { + return this.objId + " 0 R"; +}; + +AcroFormPDFObject.prototype.putStream = function () { + var keyValueList = this.getKeyValueListForStream(); + this.scope.internal.putStream({ + data: this.stream, + additionalKeyValues: keyValueList, + objectId: this.objId + }); + this.scope.internal.out("endobj"); +}; +/** + * Returns an key-value-List of all non-configurable Variables from the Object + * + * @name getKeyValueListForStream + * @returns {string} + */ + + +AcroFormPDFObject.prototype.getKeyValueListForStream = function () { + var keyValueList = []; + var keys = Object.getOwnPropertyNames(this).filter(function (key) { + return key != "content" && key != "appearanceStreamContent" && key != "scope" && key != "objId" && key.substring(0, 1) != "_"; + }); + + for (var i in keys) { + if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) { + var key = keys[i]; + var value = this[key]; + + if (value) { + if (Array.isArray(value)) { + keyValueList.push({ + key: key, + value: arrayToPdfArray(value, this.objId, this.scope) + }); + } else if (value instanceof AcroFormPDFObject) { + // In case it is a reference to another PDFObject, + // take the reference number + value.scope = this.scope; + keyValueList.push({ + key: key, + value: value.objId + " 0 R" + }); + } else if (typeof value !== "function") { + keyValueList.push({ + key: key, + value: value + }); + } + } + } + } + + return keyValueList; +}; + +var AcroFormXObject = function AcroFormXObject() { + AcroFormPDFObject.call(this); + Object.defineProperty(this, "Type", { + value: "/XObject", + configurable: false, + writable: true + }); + Object.defineProperty(this, "Subtype", { + value: "/Form", + configurable: false, + writable: true + }); + Object.defineProperty(this, "FormType", { + value: 1, + configurable: false, + writable: true + }); + var _BBox = []; + Object.defineProperty(this, "BBox", { + configurable: false, + get: function get() { + return _BBox; + }, + set: function set(value) { + _BBox = value; + } + }); + Object.defineProperty(this, "Resources", { + value: "2 0 R", + configurable: false, + writable: true + }); + + var _stream; + + Object.defineProperty(this, "stream", { + enumerable: false, + configurable: true, + set: function set(value) { + _stream = value.trim(); + }, + get: function get() { + if (_stream) { + return _stream; + } else { + return null; + } + } + }); +}; + +inherit(AcroFormXObject, AcroFormPDFObject); + +var AcroFormDictionary = function AcroFormDictionary() { + AcroFormPDFObject.call(this); + var _Kids = []; + Object.defineProperty(this, "Kids", { + enumerable: false, + configurable: true, + get: function get() { + if (_Kids.length > 0) { + return _Kids; + } else { + return undefined; + } + } + }); + Object.defineProperty(this, "Fields", { + enumerable: false, + configurable: false, + get: function get() { + return _Kids; + } + }); // Default Appearance + + var _DA; + + Object.defineProperty(this, "DA", { + enumerable: false, + configurable: false, + get: function get() { + if (!_DA) { + return undefined; + } + + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + return "(" + pdfEscape(encryptor(_DA)) + ")"; + }, + set: function set(value) { + _DA = value; + } + }); +}; + +inherit(AcroFormDictionary, AcroFormPDFObject); +/** + * The Field Object contains the Variables, that every Field needs + * + * @class AcroFormField + * @classdesc An AcroForm FieldObject + */ + +var AcroFormField = function AcroFormField() { + AcroFormPDFObject.call(this); //Annotation-Flag See Table 165 + + var _F = 4; + Object.defineProperty(this, "F", { + enumerable: false, + configurable: false, + get: function get() { + return _F; + }, + set: function set(value) { + if (!isNaN(value)) { + _F = value; + } else { + throw new Error('Invalid value "' + value + '" for attribute F supplied.'); + } + } + }); + /** + * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen. + * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page. + * + * @name AcroFormField#showWhenPrinted + * @default true + * @type {boolean} + */ + + Object.defineProperty(this, "showWhenPrinted", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(_F, 3)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.F = setBitForPdf(_F, 3); + } else { + this.F = clearBitForPdf(_F, 3); + } + } + }); + var _Ff = 0; + Object.defineProperty(this, "Ff", { + enumerable: false, + configurable: false, + get: function get() { + return _Ff; + }, + set: function set(value) { + if (!isNaN(value)) { + _Ff = value; + } else { + throw new Error('Invalid value "' + value + '" for attribute Ff supplied.'); + } + } + }); + var _Rect = []; + Object.defineProperty(this, "Rect", { + enumerable: false, + configurable: false, + get: function get() { + if (_Rect.length === 0) { + return undefined; + } + + return _Rect; + }, + set: function set(value) { + if (typeof value !== "undefined") { + _Rect = value; + } else { + _Rect = []; + } + } + }); + /** + * The x-position of the field. + * + * @name AcroFormField#x + * @default null + * @type {number} + */ + + Object.defineProperty(this, "x", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[0])) { + return 0; + } + + return _Rect[0]; + }, + set: function set(value) { + _Rect[0] = value; + } + }); + /** + * The y-position of the field. + * + * @name AcroFormField#y + * @default null + * @type {number} + */ + + Object.defineProperty(this, "y", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[1])) { + return 0; + } + + return _Rect[1]; + }, + set: function set(value) { + _Rect[1] = value; + } + }); + /** + * The width of the field. + * + * @name AcroFormField#width + * @default null + * @type {number} + */ + + Object.defineProperty(this, "width", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[2])) { + return 0; + } + + return _Rect[2]; + }, + set: function set(value) { + _Rect[2] = value; + } + }); + /** + * The height of the field. + * + * @name AcroFormField#height + * @default null + * @type {number} + */ + + Object.defineProperty(this, "height", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[3])) { + return 0; + } + + return _Rect[3]; + }, + set: function set(value) { + _Rect[3] = value; + } + }); + var _FT = ""; + Object.defineProperty(this, "FT", { + enumerable: true, + configurable: false, + get: function get() { + return _FT; + }, + set: function set(value) { + switch (value) { + case "/Btn": + case "/Tx": + case "/Ch": + case "/Sig": + _FT = value; + break; + + default: + throw new Error('Invalid value "' + value + '" for attribute FT supplied.'); + } + } + }); + var _T = null; + Object.defineProperty(this, "T", { + enumerable: true, + configurable: false, + get: function get() { + if (!_T || _T.length < 1) { + // In case of a Child from a Radio´Group, you don't need a FieldName + if (this instanceof AcroFormChildClass) { + return undefined; + } + + _T = "FieldObject" + AcroFormField.FieldNum++; + } + + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + return "(" + pdfEscape(encryptor(_T)) + ")"; + }, + set: function set(value) { + _T = value.toString(); + } + }); + /** + * (Optional) The partial field name (see 12.7.3.2, “Field Names”). + * + * @name AcroFormField#fieldName + * @default null + * @type {string} + */ + + Object.defineProperty(this, "fieldName", { + configurable: true, + enumerable: true, + get: function get() { + return _T; + }, + set: function set(value) { + _T = value; + } + }); + var _fontName = "helvetica"; + /** + * The fontName of the font to be used. + * + * @name AcroFormField#fontName + * @default 'helvetica' + * @type {string} + */ + + Object.defineProperty(this, "fontName", { + enumerable: true, + configurable: true, + get: function get() { + return _fontName; + }, + set: function set(value) { + _fontName = value; + } + }); + var _fontStyle = "normal"; + /** + * The fontStyle of the font to be used. + * + * @name AcroFormField#fontStyle + * @default 'normal' + * @type {string} + */ + + Object.defineProperty(this, "fontStyle", { + enumerable: true, + configurable: true, + get: function get() { + return _fontStyle; + }, + set: function set(value) { + _fontStyle = value; + } + }); + var _fontSize = 0; + /** + * The fontSize of the font to be used. + * + * @name AcroFormField#fontSize + * @default 0 (for auto) + * @type {number} + */ + + Object.defineProperty(this, "fontSize", { + enumerable: true, + configurable: true, + get: function get() { + return _fontSize; + }, + set: function set(value) { + _fontSize = value; + } + }); + var _maxFontSize = undefined; + /** + * The maximum fontSize of the font to be used. + * + * @name AcroFormField#maxFontSize + * @default 0 (for auto) + * @type {number} + */ + + Object.defineProperty(this, "maxFontSize", { + enumerable: true, + configurable: true, + get: function get() { + if (_maxFontSize === undefined) { + // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit) + // ("50" is transformed to the "user space" but then used in "pdf space") + return 50 / scaleFactor; + } else { + return _maxFontSize; + } + }, + set: function set(value) { + _maxFontSize = value; + } + }); + var _color = "black"; + /** + * The color of the text + * + * @name AcroFormField#color + * @default 'black' + * @type {string|rgba} + */ + + Object.defineProperty(this, "color", { + enumerable: true, + configurable: true, + get: function get() { + return _color; + }, + set: function set(value) { + _color = value; + } + }); + var _DA = "/F1 0 Tf 0 g"; // Defines the default appearance (Needed for variable Text) + + Object.defineProperty(this, "DA", { + enumerable: true, + configurable: false, + get: function get() { + if (!_DA || this instanceof AcroFormChildClass || this instanceof AcroFormTextField) { + return undefined; + } + + return toPdfString(_DA, this.objId, this.scope); + }, + set: function set(value) { + value = value.toString(); + _DA = value; + } + }); + var _DV = null; + Object.defineProperty(this, "DV", { + enumerable: false, + configurable: false, + get: function get() { + if (!_DV) { + return undefined; + } + + if (this instanceof AcroFormButton === false) { + return toPdfString(_DV, this.objId, this.scope); + } + + return _DV; + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === false) { + if (value.substr(0, 1) === "(") { + _DV = pdfUnescape(value.substr(1, value.length - 2)); + } else { + _DV = pdfUnescape(value); + } + } else { + _DV = value; + } + } + }); + /** + * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value. + * + * @name AcroFormField#defaultValue + * @default null + * @type {any} + */ + + Object.defineProperty(this, "defaultValue", { + enumerable: true, + configurable: true, + get: function get() { + if (this instanceof AcroFormButton === true) { + return pdfUnescape(_DV.substr(1, _DV.length - 1)); + } else { + return _DV; + } + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === true) { + _DV = "/" + value; + } else { + _DV = value; + } + } + }); + var _V = null; + Object.defineProperty(this, "_V", { + enumerable: false, + configurable: false, + get: function get() { + if (!_V) { + return undefined; + } + + return _V; + }, + set: function set(value) { + this.V = value; + } + }); + Object.defineProperty(this, "V", { + enumerable: false, + configurable: false, + get: function get() { + if (!_V) { + return undefined; + } + + if (this instanceof AcroFormButton === false) { + return toPdfString(_V, this.objId, this.scope); + } + + return _V; + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === false) { + if (value.substr(0, 1) === "(") { + _V = pdfUnescape(value.substr(1, value.length - 2)); + } else { + _V = pdfUnescape(value); + } + } else { + _V = value; + } + } + }); + /** + * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information. + * + * @name AcroFormField#value + * @default null + * @type {any} + */ + + Object.defineProperty(this, "value", { + enumerable: true, + configurable: true, + get: function get() { + if (this instanceof AcroFormButton === true) { + return pdfUnescape(_V.substr(1, _V.length - 1)); + } else { + return _V; + } + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === true) { + _V = "/" + value; + } else { + _V = value; + } + } + }); + /** + * Check if field has annotations + * + * @name AcroFormField#hasAnnotation + * @readonly + * @type {boolean} + */ + + Object.defineProperty(this, "hasAnnotation", { + enumerable: true, + configurable: true, + get: function get() { + return this.Rect; + } + }); + Object.defineProperty(this, "Type", { + enumerable: true, + configurable: false, + get: function get() { + return this.hasAnnotation ? "/Annot" : null; + } + }); + Object.defineProperty(this, "Subtype", { + enumerable: true, + configurable: false, + get: function get() { + return this.hasAnnotation ? "/Widget" : null; + } + }); + var _hasAppearanceStream = false; + /** + * true if field has an appearanceStream + * + * @name AcroFormField#hasAppearanceStream + * @readonly + * @type {boolean} + */ + + Object.defineProperty(this, "hasAppearanceStream", { + enumerable: true, + configurable: true, + get: function get() { + return _hasAppearanceStream; + }, + set: function set(value) { + value = Boolean(value); + _hasAppearanceStream = value; + } + }); + /** + * The page on which the AcroFormField is placed + * + * @name AcroFormField#page + * @type {number} + */ + + var _page; + + Object.defineProperty(this, "page", { + enumerable: true, + configurable: true, + get: function get() { + if (!_page) { + return undefined; + } + + return _page; + }, + set: function set(value) { + _page = value; + } + }); + /** + * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database. + * + * @name AcroFormField#readOnly + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "readOnly", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 1)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 1); + } else { + this.Ff = clearBitForPdf(this.Ff, 1); + } + } + }); + /** + * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”). + * + * @name AcroFormField#required + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "required", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 2)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 2); + } else { + this.Ff = clearBitForPdf(this.Ff, 2); + } + } + }); + /** + * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”) + * + * @name AcroFormField#noExport + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "noExport", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 3)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 3); + } else { + this.Ff = clearBitForPdf(this.Ff, 3); + } + } + }); + var _Q = null; + Object.defineProperty(this, "Q", { + enumerable: true, + configurable: false, + get: function get() { + if (_Q === null) { + return undefined; + } + + return _Q; + }, + set: function set(value) { + if ([0, 1, 2].indexOf(value) !== -1) { + _Q = value; + } else { + throw new Error('Invalid value "' + value + '" for attribute Q supplied.'); + } + } + }); + /** + * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text: + * 'left', 'center', 'right' + * + * @name AcroFormField#textAlign + * @default 'left' + * @type {string} + */ + + Object.defineProperty(this, "textAlign", { + get: function get() { + var result; + + switch (_Q) { + case 0: + default: + result = "left"; + break; + + case 1: + result = "center"; + break; + + case 2: + result = "right"; + break; + } + + return result; + }, + configurable: true, + enumerable: true, + set: function set(value) { + switch (value) { + case "right": + case 2: + _Q = 2; + break; + + case "center": + case 1: + _Q = 1; + break; + + case "left": + case 0: + default: + _Q = 0; + } + } + }); +}; + +inherit(AcroFormField, AcroFormPDFObject); +/** + * @class AcroFormChoiceField + * @extends AcroFormField + */ + +var AcroFormChoiceField = function AcroFormChoiceField() { + AcroFormField.call(this); // Field Type = Choice Field + + this.FT = "/Ch"; // options + + this.V = "()"; + this.fontName = "zapfdingbats"; // Top Index + + var _TI = 0; + Object.defineProperty(this, "TI", { + enumerable: true, + configurable: false, + get: function get() { + return _TI; + }, + set: function set(value) { + _TI = value; + } + }); + /** + * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0. + * + * @name AcroFormChoiceField#topIndex + * @default 0 + * @type {number} + */ + + Object.defineProperty(this, "topIndex", { + enumerable: true, + configurable: true, + get: function get() { + return _TI; + }, + set: function set(value) { + _TI = value; + } + }); + var _Opt = []; + Object.defineProperty(this, "Opt", { + enumerable: true, + configurable: false, + get: function get() { + return arrayToPdfArray(_Opt, this.objId, this.scope); + }, + set: function set(value) { + _Opt = pdfArrayToStringArray(value); + } + }); + /** + * @memberof AcroFormChoiceField + * @name getOptions + * @function + * @instance + * @returns {array} array of Options + */ + + this.getOptions = function () { + return _Opt; + }; + /** + * @memberof AcroFormChoiceField + * @name setOptions + * @function + * @instance + * @param {array} value + */ + + + this.setOptions = function (value) { + _Opt = value; + + if (this.sort) { + _Opt.sort(); + } + }; + /** + * @memberof AcroFormChoiceField + * @name addOption + * @function + * @instance + * @param {string} value + */ + + + this.addOption = function (value) { + value = value || ""; + value = value.toString(); + + _Opt.push(value); + + if (this.sort) { + _Opt.sort(); + } + }; + /** + * @memberof AcroFormChoiceField + * @name removeOption + * @function + * @instance + * @param {string} value + * @param {boolean} allEntries (default: false) + */ + + + this.removeOption = function (value, allEntries) { + allEntries = allEntries || false; + value = value || ""; + value = value.toString(); + + while (_Opt.indexOf(value) !== -1) { + _Opt.splice(_Opt.indexOf(value), 1); + + if (allEntries === false) { + break; + } + } + }; + /** + * If set, the field is a combo box; if clear, the field is a list box. + * + * @name AcroFormChoiceField#combo + * @default false + * @type {boolean} + */ + + + Object.defineProperty(this, "combo", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 18)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 18); + } else { + this.Ff = clearBitForPdf(this.Ff, 18); + } + } + }); + /** + * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set. + * + * @name AcroFormChoiceField#edit + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "edit", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 19)); + }, + set: function set(value) { + //PDF 32000-1:2008, page 444 + if (this.combo === true) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 19); + } else { + this.Ff = clearBitForPdf(this.Ff, 19); + } + } + } + }); + /** + * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231). + * + * @name AcroFormChoiceField#sort + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "sort", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 20)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 20); + + _Opt.sort(); + } else { + this.Ff = clearBitForPdf(this.Ff, 20); + } + } + }); + /** + * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected + * + * @name AcroFormChoiceField#multiSelect + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "multiSelect", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 22)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 22); + } else { + this.Ff = clearBitForPdf(this.Ff, 22); + } + } + }); + /** + * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set. + * + * @name AcroFormChoiceField#doNotSpellCheck + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "doNotSpellCheck", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 23)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 23); + } else { + this.Ff = clearBitForPdf(this.Ff, 23); + } + } + }); + /** + * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step. + * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field. + * + * @name AcroFormChoiceField#commitOnSelChange + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "commitOnSelChange", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 27)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 27); + } else { + this.Ff = clearBitForPdf(this.Ff, 27); + } + } + }); + this.hasAppearanceStream = false; +}; + +inherit(AcroFormChoiceField, AcroFormField); +/** + * @class AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ + +var AcroFormListBox = function AcroFormListBox() { + AcroFormChoiceField.call(this); + this.fontName = "helvetica"; //PDF 32000-1:2008, page 444 + + this.combo = false; +}; + +inherit(AcroFormListBox, AcroFormChoiceField); +/** + * @class AcroFormComboBox + * @extends AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ + +var AcroFormComboBox = function AcroFormComboBox() { + AcroFormListBox.call(this); + this.combo = true; +}; + +inherit(AcroFormComboBox, AcroFormListBox); +/** + * @class AcroFormEditBox + * @extends AcroFormComboBox + * @extends AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ + +var AcroFormEditBox = function AcroFormEditBox() { + AcroFormComboBox.call(this); + this.edit = true; +}; + +inherit(AcroFormEditBox, AcroFormComboBox); +/** + * @class AcroFormButton + * @extends AcroFormField + */ + +var AcroFormButton = function AcroFormButton() { + AcroFormField.call(this); + this.FT = "/Btn"; + /** + * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected. + * + * @name AcroFormButton#noToggleToOff + * @type {boolean} + */ + + Object.defineProperty(this, "noToggleToOff", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 15)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 15); + } else { + this.Ff = clearBitForPdf(this.Ff, 15); + } + } + }); + /** + * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear. + * + * @name AcroFormButton#radio + * @type {boolean} + */ + + Object.defineProperty(this, "radio", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 16)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 16); + } else { + this.Ff = clearBitForPdf(this.Ff, 16); + } + } + }); + /** + * If set, the field is a pushbutton that does not retain a permanent value. + * + * @name AcroFormButton#pushButton + * @type {boolean} + */ + + Object.defineProperty(this, "pushButton", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 17)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 17); + } else { + this.Ff = clearBitForPdf(this.Ff, 17); + } + } + }); + /** + * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons). + * + * @name AcroFormButton#radioIsUnison + * @type {boolean} + */ + + Object.defineProperty(this, "radioIsUnison", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 26)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 26); + } else { + this.Ff = clearBitForPdf(this.Ff, 26); + } + } + }); + var _MK = {}; + Object.defineProperty(this, "MK", { + enumerable: false, + configurable: false, + get: function get() { + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + + if (Object.keys(_MK).length !== 0) { + var result = []; + result.push("<<"); + var key; + + for (key in _MK) { + result.push("/" + key + " (" + pdfEscape(encryptor(_MK[key])) + ")"); + } + + result.push(">>"); + return result.join("\n"); + } + + return undefined; + }, + set: function set(value) { + if (_typeof(value) === "object") { + _MK = value; + } + } + }); + /** + * From the PDF reference: + * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user. + * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, "Button Fields"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, "Button Fields") and radio buttons (Radio Buttons in 12.7.4.2, "Button Fields"). + * + * - '8' = Cross, + * - 'l' = Circle, + * - '' = nothing + * @name AcroFormButton#caption + * @type {string} + */ + + Object.defineProperty(this, "caption", { + enumerable: true, + configurable: true, + get: function get() { + return _MK.CA || ""; + }, + set: function set(value) { + if (typeof value === "string") { + _MK.CA = value; + } + } + }); + + var _AS; + + Object.defineProperty(this, "AS", { + enumerable: false, + configurable: false, + get: function get() { + return _AS; + }, + set: function set(value) { + _AS = value; + } + }); + /** + * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, "Appearance Streams") + * + * @name AcroFormButton#appearanceState + * @type {any} + */ + + Object.defineProperty(this, "appearanceState", { + enumerable: true, + configurable: true, + get: function get() { + return _AS.substr(1, _AS.length - 1); + }, + set: function set(value) { + _AS = "/" + value; + } + }); +}; + +inherit(AcroFormButton, AcroFormField); +/** + * @class AcroFormPushButton + * @extends AcroFormButton + * @extends AcroFormField + */ + +var AcroFormPushButton = function AcroFormPushButton() { + AcroFormButton.call(this); + this.pushButton = true; +}; + +inherit(AcroFormPushButton, AcroFormButton); +/** + * @class AcroFormRadioButton + * @extends AcroFormButton + * @extends AcroFormField + */ + +var AcroFormRadioButton = function AcroFormRadioButton() { + AcroFormButton.call(this); + this.radio = true; + this.pushButton = false; + var _Kids = []; + Object.defineProperty(this, "Kids", { + enumerable: true, + configurable: false, + get: function get() { + return _Kids; + }, + set: function set(value) { + if (typeof value !== "undefined") { + _Kids = value; + } else { + _Kids = []; + } + } + }); +}; + +inherit(AcroFormRadioButton, AcroFormButton); +/** + * The Child class of a RadioButton (the radioGroup) -> The single Buttons + * + * @class AcroFormChildClass + * @extends AcroFormField + * @ignore + */ + +var AcroFormChildClass = function AcroFormChildClass() { + AcroFormField.call(this); + + var _parent; + + Object.defineProperty(this, "Parent", { + enumerable: false, + configurable: false, + get: function get() { + return _parent; + }, + set: function set(value) { + _parent = value; + } + }); + + var _optionName; + + Object.defineProperty(this, "optionName", { + enumerable: false, + configurable: true, + get: function get() { + return _optionName; + }, + set: function set(value) { + _optionName = value; + } + }); + var _MK = {}; + Object.defineProperty(this, "MK", { + enumerable: false, + configurable: false, + get: function get() { + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + var result = []; + result.push("<<"); + var key; + + for (key in _MK) { + result.push("/" + key + " (" + pdfEscape(encryptor(_MK[key])) + ")"); + } + + result.push(">>"); + return result.join("\n"); + }, + set: function set(value) { + if (_typeof(value) === "object") { + _MK = value; + } + } + }); + /** + * From the PDF reference: + * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user. + * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, "Button Fields"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, "Button Fields") and radio buttons (Radio Buttons in 12.7.4.2, "Button Fields"). + * + * - '8' = Cross, + * - 'l' = Circle, + * - '' = nothing + * @name AcroFormButton#caption + * @type {string} + */ + + Object.defineProperty(this, "caption", { + enumerable: true, + configurable: true, + get: function get() { + return _MK.CA || ""; + }, + set: function set(value) { + if (typeof value === "string") { + _MK.CA = value; + } + } + }); + + var _AS; + + Object.defineProperty(this, "AS", { + enumerable: false, + configurable: false, + get: function get() { + return _AS; + }, + set: function set(value) { + _AS = value; + } + }); + /** + * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, "Appearance Streams") + * + * @name AcroFormButton#appearanceState + * @type {any} + */ + + Object.defineProperty(this, "appearanceState", { + enumerable: true, + configurable: true, + get: function get() { + return _AS.substr(1, _AS.length - 1); + }, + set: function set(value) { + _AS = "/" + value; + } + }); + this.caption = "l"; + this.appearanceState = "Off"; // todo: set AppearanceType as variable that can be set from the + // outside... + + this._AppearanceType = AcroFormAppearance.RadioButton.Circle; // The Default appearanceType is the Circle + + this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(this.optionName); +}; + +inherit(AcroFormChildClass, AcroFormField); + +AcroFormRadioButton.prototype.setAppearance = function (appearance) { + if (!("createAppearanceStream" in appearance && "getCA" in appearance)) { + throw new Error("Couldn't assign Appearance to RadioButton. Appearance was Invalid!"); + } + + for (var objId in this.Kids) { + if (this.Kids.hasOwnProperty(objId)) { + var child = this.Kids[objId]; + child.appearanceStreamContent = appearance.createAppearanceStream(child.optionName); + child.caption = appearance.getCA(); + } + } +}; + +AcroFormRadioButton.prototype.createOption = function (name) { + // Create new Child for RadioGroup + var child = new AcroFormChildClass(); + child.Parent = this; + child.optionName = name; // Add to Parent + + this.Kids.push(child); + addField.call(this.scope, child); + return child; +}; +/** + * @class AcroFormCheckBox + * @extends AcroFormButton + * @extends AcroFormField + */ + + +var AcroFormCheckBox = function AcroFormCheckBox() { + AcroFormButton.call(this); + this.fontName = "zapfdingbats"; + this.caption = "3"; + this.appearanceState = "On"; + this.value = "On"; + this.textAlign = "center"; + this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream(); +}; + +inherit(AcroFormCheckBox, AcroFormButton); +/** + * @class AcroFormTextField + * @extends AcroFormField + */ + +var AcroFormTextField = function AcroFormTextField() { + AcroFormField.call(this); + this.FT = "/Tx"; + /** + * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line. + * + * @name AcroFormTextField#multiline + * @type {boolean} + */ + + Object.defineProperty(this, "multiline", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 13)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 13); + } else { + this.Ff = clearBitForPdf(this.Ff, 13); + } + } + }); + /** + * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field. + * + * @name AcroFormTextField#fileSelect + * @type {boolean} + */ + + Object.defineProperty(this, "fileSelect", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 21)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 21); + } else { + this.Ff = clearBitForPdf(this.Ff, 21); + } + } + }); + /** + * (PDF 1.4) If set, text entered in the field shall not be spell-checked. + * + * @name AcroFormTextField#doNotSpellCheck + * @type {boolean} + */ + + Object.defineProperty(this, "doNotSpellCheck", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 23)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 23); + } else { + this.Ff = clearBitForPdf(this.Ff, 23); + } + } + }); + /** + * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area. + * + * @name AcroFormTextField#doNotScroll + * @type {boolean} + */ + + Object.defineProperty(this, "doNotScroll", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 24)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 24); + } else { + this.Ff = clearBitForPdf(this.Ff, 24); + } + } + }); + /** + * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs. + * + * @name AcroFormTextField#comb + * @type {boolean} + */ + + Object.defineProperty(this, "comb", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 25)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 25); + } else { + this.Ff = clearBitForPdf(this.Ff, 25); + } + } + }); + /** + * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string. + * + * @name AcroFormTextField#richText + * @type {boolean} + */ + + Object.defineProperty(this, "richText", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 26)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 26); + } else { + this.Ff = clearBitForPdf(this.Ff, 26); + } + } + }); + var _MaxLen = null; + Object.defineProperty(this, "MaxLen", { + enumerable: true, + configurable: false, + get: function get() { + return _MaxLen; + }, + set: function set(value) { + _MaxLen = value; + } + }); + /** + * (Optional; inheritable) The maximum length of the field’s text, in characters. + * + * @name AcroFormTextField#maxLength + * @type {number} + */ + + Object.defineProperty(this, "maxLength", { + enumerable: true, + configurable: true, + get: function get() { + return _MaxLen; + }, + set: function set(value) { + if (Number.isInteger(value)) { + _MaxLen = value; + } + } + }); + Object.defineProperty(this, "hasAppearanceStream", { + enumerable: true, + configurable: true, + get: function get() { + return this.V || this.DV; + } + }); +}; + +inherit(AcroFormTextField, AcroFormField); +/** + * @class AcroFormPasswordField + * @extends AcroFormTextField + * @extends AcroFormField + */ + +var AcroFormPasswordField = function AcroFormPasswordField() { + AcroFormTextField.call(this); + /** + * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters. + * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set. + * + * @name AcroFormTextField#password + * @type {boolean} + */ + + Object.defineProperty(this, "password", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 14)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 14); + } else { + this.Ff = clearBitForPdf(this.Ff, 14); + } + } + }); + this.password = true; +}; + +inherit(AcroFormPasswordField, AcroFormTextField); // Contains Methods for creating standard appearances + +var AcroFormAppearance = { + CheckBox: { + createAppearanceStream: function createAppearanceStream() { + var appearance = { + N: { + On: AcroFormAppearance.CheckBox.YesNormal + }, + D: { + On: AcroFormAppearance.CheckBox.YesPushDown, + Off: AcroFormAppearance.CheckBox.OffPushDown + } + }; + return appearance; + }, + + /** + * Returns the standard On Appearance for a CheckBox + * + * @returns {AcroFormXObject} + */ + YesPushDown: function YesPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; + + var encodedColor = formObject.scope.__private__.encodeColorString(formObject.color); + + var calcRes = calculateX(formObject, formObject.caption); + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + stream.push("BMC"); + stream.push("q"); + stream.push("0 0 1 rg"); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf " + encodedColor); + stream.push("BT"); + stream.push(calcRes.text); + stream.push("ET"); + stream.push("Q"); + stream.push("EMC"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesNormal: function YesNormal(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; + + var encodedColor = formObject.scope.__private__.encodeColorString(formObject.color); + + var stream = []; + var height = AcroFormAppearance.internal.getHeight(formObject); + var width = AcroFormAppearance.internal.getWidth(formObject); + var calcRes = calculateX(formObject, formObject.caption); + stream.push("1 g"); + stream.push("0 0 " + f2(width) + " " + f2(height) + " re"); + stream.push("f"); + stream.push("q"); + stream.push("0 0 1 rg"); + stream.push("0 0 " + f2(width - 1) + " " + f2(height - 1) + " re"); + stream.push("W"); + stream.push("n"); + stream.push("0 g"); + stream.push("BT"); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf " + encodedColor); + stream.push(calcRes.text); + stream.push("ET"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + + /** + * Returns the standard Off Appearance for a CheckBox + * + * @returns {AcroFormXObject} + */ + OffPushDown: function OffPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + xobj.stream = stream.join("\n"); + return xobj; + } + }, + RadioButton: { + Circle: { + createAppearanceStream: function createAppearanceStream(name) { + var appearanceStreamContent = { + D: { + Off: AcroFormAppearance.RadioButton.Circle.OffPushDown + }, + N: {} + }; + appearanceStreamContent.N[name] = AcroFormAppearance.RadioButton.Circle.YesNormal; + appearanceStreamContent.D[name] = AcroFormAppearance.RadioButton.Circle.YesPushDown; + return appearanceStreamContent; + }, + getCA: function getCA() { + return "l"; + }, + YesNormal: function YesNormal(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; // Make the Radius of the Circle relative to min(height, width) of formObject + + var DotRadius = AcroFormAppearance.internal.getWidth(formObject) <= AcroFormAppearance.internal.getHeight(formObject) ? AcroFormAppearance.internal.getWidth(formObject) / 4 : AcroFormAppearance.internal.getHeight(formObject) / 4; // The Borderpadding... + + DotRadius = Number((DotRadius * 0.9).toFixed(5)); + var c = AcroFormAppearance.internal.Bezier_C; + var DotRadiusBezier = Number((DotRadius * c).toFixed(5)); + /* + * The Following is a Circle created with Bezier-Curves. + */ + + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(DotRadius + " 0 m"); + stream.push(DotRadius + " " + DotRadiusBezier + " " + DotRadiusBezier + " " + DotRadius + " 0 " + DotRadius + " c"); + stream.push("-" + DotRadiusBezier + " " + DotRadius + " -" + DotRadius + " " + DotRadiusBezier + " -" + DotRadius + " 0 c"); + stream.push("-" + DotRadius + " -" + DotRadiusBezier + " -" + DotRadiusBezier + " -" + DotRadius + " 0 -" + DotRadius + " c"); + stream.push(DotRadiusBezier + " -" + DotRadius + " " + DotRadius + " -" + DotRadiusBezier + " " + DotRadius + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesPushDown: function YesPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var DotRadius = AcroFormAppearance.internal.getWidth(formObject) <= AcroFormAppearance.internal.getHeight(formObject) ? AcroFormAppearance.internal.getWidth(formObject) / 4 : AcroFormAppearance.internal.getHeight(formObject) / 4; // The Borderpadding... + + DotRadius = Number((DotRadius * 0.9).toFixed(5)); // Save results for later use; no need to waste + // processor ticks on doing math + + var k = Number((DotRadius * 2).toFixed(5)); + var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + var dc = Number((DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + stream.push("0.749023 g"); + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(k + " 0 m"); + stream.push(k + " " + kc + " " + kc + " " + k + " 0 " + k + " c"); + stream.push("-" + kc + " " + k + " -" + k + " " + kc + " -" + k + " 0 c"); + stream.push("-" + k + " -" + kc + " -" + kc + " -" + k + " 0 -" + k + " c"); + stream.push(kc + " -" + k + " " + k + " -" + kc + " " + k + " 0 c"); + stream.push("f"); + stream.push("Q"); + stream.push("0 g"); + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(DotRadius + " 0 m"); + stream.push("" + DotRadius + " " + dc + " " + dc + " " + DotRadius + " 0 " + DotRadius + " c"); + stream.push("-" + dc + " " + DotRadius + " -" + DotRadius + " " + dc + " -" + DotRadius + " 0 c"); + stream.push("-" + DotRadius + " -" + dc + " -" + dc + " -" + DotRadius + " 0 -" + DotRadius + " c"); + stream.push(dc + " -" + DotRadius + " " + DotRadius + " -" + dc + " " + DotRadius + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + OffPushDown: function OffPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var DotRadius = AcroFormAppearance.internal.getWidth(formObject) <= AcroFormAppearance.internal.getHeight(formObject) ? AcroFormAppearance.internal.getWidth(formObject) / 4 : AcroFormAppearance.internal.getHeight(formObject) / 4; // The Borderpadding... + + DotRadius = Number((DotRadius * 0.9).toFixed(5)); // Save results for later use; no need to waste + // processor ticks on doing math + + var k = Number((DotRadius * 2).toFixed(5)); + var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + stream.push("0.749023 g"); + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(k + " 0 m"); + stream.push(k + " " + kc + " " + kc + " " + k + " 0 " + k + " c"); + stream.push("-" + kc + " " + k + " -" + k + " " + kc + " -" + k + " 0 c"); + stream.push("-" + k + " -" + kc + " -" + kc + " -" + k + " 0 -" + k + " c"); + stream.push(kc + " -" + k + " " + k + " -" + kc + " " + k + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + } + }, + Cross: { + /** + * Creates the Actual AppearanceDictionary-References + * + * @param {string} name + * @returns {Object} + * @ignore + */ + createAppearanceStream: function createAppearanceStream(name) { + var appearanceStreamContent = { + D: { + Off: AcroFormAppearance.RadioButton.Cross.OffPushDown + }, + N: {} + }; + appearanceStreamContent.N[name] = AcroFormAppearance.RadioButton.Cross.YesNormal; + appearanceStreamContent.D[name] = AcroFormAppearance.RadioButton.Cross.YesPushDown; + return appearanceStreamContent; + }, + getCA: function getCA() { + return "8"; + }, + YesNormal: function YesNormal(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var cross = AcroFormAppearance.internal.calculateCross(formObject); + stream.push("q"); + stream.push("1 1 " + f2(AcroFormAppearance.internal.getWidth(formObject) - 2) + " " + f2(AcroFormAppearance.internal.getHeight(formObject) - 2) + " re"); + stream.push("W"); + stream.push("n"); + stream.push(f2(cross.x1.x) + " " + f2(cross.x1.y) + " m"); + stream.push(f2(cross.x2.x) + " " + f2(cross.x2.y) + " l"); + stream.push(f2(cross.x4.x) + " " + f2(cross.x4.y) + " m"); + stream.push(f2(cross.x3.x) + " " + f2(cross.x3.y) + " l"); + stream.push("s"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesPushDown: function YesPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var cross = AcroFormAppearance.internal.calculateCross(formObject); + var stream = []; + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + stream.push("q"); + stream.push("1 1 " + f2(AcroFormAppearance.internal.getWidth(formObject) - 2) + " " + f2(AcroFormAppearance.internal.getHeight(formObject) - 2) + " re"); + stream.push("W"); + stream.push("n"); + stream.push(f2(cross.x1.x) + " " + f2(cross.x1.y) + " m"); + stream.push(f2(cross.x2.x) + " " + f2(cross.x2.y) + " l"); + stream.push(f2(cross.x4.x) + " " + f2(cross.x4.y) + " m"); + stream.push(f2(cross.x3.x) + " " + f2(cross.x3.y) + " l"); + stream.push("s"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + OffPushDown: function OffPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + xobj.stream = stream.join("\n"); + return xobj; + } + } + }, + + /** + * Returns the standard Appearance + * + * @returns {AcroFormXObject} + */ + createDefaultAppearanceStream: function createDefaultAppearanceStream(formObject) { + // Set Helvetica to Standard Font (size: auto) + // Color: Black + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; + + var encodedColor = formObject.scope.__private__.encodeColorString(formObject.color); + + var fontSize = formObject.fontSize; + var result = "/" + fontKey + " " + fontSize + " Tf " + encodedColor; + return result; + } +}; +AcroFormAppearance.internal = { + Bezier_C: 0.551915024494, + calculateCross: function calculateCross(formObject) { + var width = AcroFormAppearance.internal.getWidth(formObject); + var height = AcroFormAppearance.internal.getHeight(formObject); + var a = Math.min(width, height); + var cross = { + x1: { + // upperLeft + x: (width - a) / 2, + y: (height - a) / 2 + a // height - borderPadding + + }, + x2: { + // lowerRight + x: (width - a) / 2 + a, + y: (height - a) / 2 // borderPadding + + }, + x3: { + // lowerLeft + x: (width - a) / 2, + y: (height - a) / 2 // borderPadding + + }, + x4: { + // upperRight + x: (width - a) / 2 + a, + y: (height - a) / 2 + a // height - borderPadding + + } + }; + return cross; + } +}; + +AcroFormAppearance.internal.getWidth = function (formObject) { + var result = 0; + + if (_typeof(formObject) === "object") { + result = scale(formObject.Rect[2]); + } + + return result; +}; + +AcroFormAppearance.internal.getHeight = function (formObject) { + var result = 0; + + if (_typeof(formObject) === "object") { + result = scale(formObject.Rect[3]); + } + + return result; +}; // Public: + +/** + * Add an AcroForm-Field to the jsPDF-instance + * + * @name addField + * @function + * @instance + * @param {Object} fieldObject + * @returns {jsPDF} + */ + + +var addField = jsPDFAPI.addField = function (fieldObject) { + initializeAcroForm(this, fieldObject); + + if (fieldObject instanceof AcroFormField) { + putForm(fieldObject); + } else { + throw new Error("Invalid argument passed to jsPDF.addField."); + } + + fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber; + return this; +}; + +jsPDFAPI.AcroFormChoiceField = AcroFormChoiceField; +jsPDFAPI.AcroFormListBox = AcroFormListBox; +jsPDFAPI.AcroFormComboBox = AcroFormComboBox; +jsPDFAPI.AcroFormEditBox = AcroFormEditBox; +jsPDFAPI.AcroFormButton = AcroFormButton; +jsPDFAPI.AcroFormPushButton = AcroFormPushButton; +jsPDFAPI.AcroFormRadioButton = AcroFormRadioButton; +jsPDFAPI.AcroFormCheckBox = AcroFormCheckBox; +jsPDFAPI.AcroFormTextField = AcroFormTextField; +jsPDFAPI.AcroFormPasswordField = AcroFormPasswordField; +jsPDFAPI.AcroFormAppearance = AcroFormAppearance; +jsPDFAPI.AcroForm = { + ChoiceField: AcroFormChoiceField, + ListBox: AcroFormListBox, + ComboBox: AcroFormComboBox, + EditBox: AcroFormEditBox, + Button: AcroFormButton, + PushButton: AcroFormPushButton, + RadioButton: AcroFormRadioButton, + CheckBox: AcroFormCheckBox, + TextField: AcroFormTextField, + PasswordField: AcroFormPasswordField, + Appearance: AcroFormAppearance +}; +jsPDF.AcroForm = { + ChoiceField: AcroFormChoiceField, + ListBox: AcroFormListBox, + ComboBox: AcroFormComboBox, + EditBox: AcroFormEditBox, + Button: AcroFormButton, + PushButton: AcroFormPushButton, + RadioButton: AcroFormRadioButton, + CheckBox: AcroFormCheckBox, + TextField: AcroFormTextField, + PasswordField: AcroFormPasswordField, + Appearance: AcroFormAppearance +}; +var AcroForm = jsPDF.AcroForm; + +(function (jsPDFAPI) { + + var namespace = "addImage_"; + jsPDFAPI.__addimage__ = {}; + var UNKNOWN = "UNKNOWN"; // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow. + // With too small batch iteration will be slow as more calls are made, + // higher values cause larger and slower garbage collection. + + var ARRAY_APPLY_BATCH = 8192; + var imageFileTypeHeaders = { + PNG: [[0x89, 0x50, 0x4e, 0x47]], + TIFF: [[0x4d, 0x4d, 0x00, 0x2a], //Motorola + [0x49, 0x49, 0x2a, 0x00] //Intel + ], + JPEG: [[0xff, 0xd8, 0xff, 0xe0, undefined, undefined, 0x4a, 0x46, 0x49, 0x46, 0x00], //JFIF + [0xff, 0xd8, 0xff, 0xe1, undefined, undefined, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00], //Exif + [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW + [0xff, 0xd8, 0xff, 0xee] //EXIF RAW + ], + JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]], + GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]], + GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]], + WEBP: [[0x52, 0x49, 0x46, 0x46, undefined, undefined, undefined, undefined, 0x57, 0x45, 0x42, 0x50]], + BMP: [[0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc. + [0x42, 0x41], //BA - OS/2 struct bitmap array + [0x43, 0x49], //CI - OS/2 struct color icon + [0x43, 0x50], //CP - OS/2 const color pointer + [0x49, 0x43], //IC - OS/2 struct icon + [0x50, 0x54] //PT - OS/2 pointer + ] + }; + /** + * Recognize filetype of Image by magic-bytes + * + * https://en.wikipedia.org/wiki/List_of_file_signatures + * + * @name getImageFileTypeByImageData + * @public + * @function + * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer + * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG' + * + * @returns {string} filetype of Image + */ + + var getImageFileTypeByImageData = jsPDFAPI.__addimage__.getImageFileTypeByImageData = function (imageData, fallbackFormat) { + fallbackFormat = fallbackFormat || UNKNOWN; + var i; + var j; + var result = UNKNOWN; + var headerSchemata; + var compareResult; + var fileType; + + if (fallbackFormat === "RGBA" || imageData.data !== undefined && imageData.data instanceof Uint8ClampedArray && "height" in imageData && "width" in imageData) { + return "RGBA"; + } + + if (isArrayBufferView(imageData)) { + for (fileType in imageFileTypeHeaders) { + headerSchemata = imageFileTypeHeaders[fileType]; + + for (i = 0; i < headerSchemata.length; i += 1) { + compareResult = true; + + for (j = 0; j < headerSchemata[i].length; j += 1) { + if (headerSchemata[i][j] === undefined) { + continue; + } + + if (headerSchemata[i][j] !== imageData[j]) { + compareResult = false; + break; + } + } + + if (compareResult === true) { + result = fileType; + break; + } + } + } + } else { + for (fileType in imageFileTypeHeaders) { + headerSchemata = imageFileTypeHeaders[fileType]; + + for (i = 0; i < headerSchemata.length; i += 1) { + compareResult = true; + + for (j = 0; j < headerSchemata[i].length; j += 1) { + if (headerSchemata[i][j] === undefined) { + continue; + } + + if (headerSchemata[i][j] !== imageData.charCodeAt(j)) { + compareResult = false; + break; + } + } + + if (compareResult === true) { + result = fileType; + break; + } + } + } + } + + if (result === UNKNOWN && fallbackFormat !== UNKNOWN) { + result = fallbackFormat; + } + + return result; + }; // Image functionality ported from pdf.js + + + var putImage = function putImage(image) { + var out = this.internal.write; + var putStream = this.internal.putStream; + var getFilters = this.internal.getFilters; + var filter = getFilters(); + + while (filter.indexOf("FlateEncode") !== -1) { + filter.splice(filter.indexOf("FlateEncode"), 1); + } + + image.objectId = this.internal.newObject(); + var additionalKeyValues = []; + additionalKeyValues.push({ + key: "Type", + value: "/XObject" + }); + additionalKeyValues.push({ + key: "Subtype", + value: "/Image" + }); + additionalKeyValues.push({ + key: "Width", + value: image.width + }); + additionalKeyValues.push({ + key: "Height", + value: image.height + }); + + if (image.colorSpace === color_spaces.INDEXED) { + additionalKeyValues.push({ + key: "ColorSpace", + value: "[/Indexed /DeviceRGB " + ( // if an indexed png defines more than one colour with transparency, we've created a sMask + image.palette.length / 3 - 1) + " " + ("sMask" in image && typeof image.sMask !== "undefined" ? image.objectId + 2 : image.objectId + 1) + " 0 R]" + }); + } else { + additionalKeyValues.push({ + key: "ColorSpace", + value: "/" + image.colorSpace + }); + + if (image.colorSpace === color_spaces.DEVICE_CMYK) { + additionalKeyValues.push({ + key: "Decode", + value: "[1 0 1 0 1 0 1 0]" + }); + } + } + + additionalKeyValues.push({ + key: "BitsPerComponent", + value: image.bitsPerComponent + }); + + if ("decodeParameters" in image && typeof image.decodeParameters !== "undefined") { + additionalKeyValues.push({ + key: "DecodeParms", + value: "<<" + image.decodeParameters + ">>" + }); + } + + if ("transparency" in image && Array.isArray(image.transparency)) { + var transparency = "", + i = 0, + len = image.transparency.length; + + for (; i < len; i++) { + transparency += image.transparency[i] + " " + image.transparency[i] + " "; + } + + additionalKeyValues.push({ + key: "Mask", + value: "[" + transparency + "]" + }); + } + + if (typeof image.sMask !== "undefined") { + additionalKeyValues.push({ + key: "SMask", + value: image.objectId + 1 + " 0 R" + }); + } + + var alreadyAppliedFilters = typeof image.filter !== "undefined" ? ["/" + image.filter] : undefined; + putStream({ + data: image.data, + additionalKeyValues: additionalKeyValues, + alreadyAppliedFilters: alreadyAppliedFilters, + objectId: image.objectId + }); + out("endobj"); // Soft mask + + if ("sMask" in image && typeof image.sMask !== "undefined") { + var decodeParameters = "/Predictor " + image.predictor + " /Colors 1 /BitsPerComponent " + image.bitsPerComponent + " /Columns " + image.width; + var sMask = { + width: image.width, + height: image.height, + colorSpace: "DeviceGray", + bitsPerComponent: image.bitsPerComponent, + decodeParameters: decodeParameters, + data: image.sMask + }; + + if ("filter" in image) { + sMask.filter = image.filter; + } + + putImage.call(this, sMask); + } //Palette + + + if (image.colorSpace === color_spaces.INDEXED) { + var objId = this.internal.newObject(); //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); + //putStream(zlib.compress(img['pal'])); + + putStream({ + data: arrayBufferToBinaryString(new Uint8Array(image.palette)), + objectId: objId + }); + out("endobj"); + } + }; + + var putResourcesCallback = function putResourcesCallback() { + var images = this.internal.collections[namespace + "images"]; + + for (var i in images) { + putImage.call(this, images[i]); + } + }; + + var putXObjectsDictCallback = function putXObjectsDictCallback() { + var images = this.internal.collections[namespace + "images"], + out = this.internal.write, + image; + + for (var i in images) { + image = images[i]; + out("/I" + image.index, image.objectId, "0", "R"); + } + }; + + var checkCompressValue = function checkCompressValue(value) { + if (value && typeof value === "string") value = value.toUpperCase(); + return value in jsPDFAPI.image_compression ? value : image_compression.NONE; + }; + + var initialize = function initialize() { + if (!this.internal.collections[namespace + "images"]) { + this.internal.collections[namespace + "images"] = {}; + this.internal.events.subscribe("putResources", putResourcesCallback); + this.internal.events.subscribe("putXobjectDict", putXObjectsDictCallback); + } + }; + + var getImages = function getImages() { + var images = this.internal.collections[namespace + "images"]; + initialize.call(this); + return images; + }; + + var getImageIndex = function getImageIndex() { + return Object.keys(this.internal.collections[namespace + "images"]).length; + }; + + var notDefined = function notDefined(value) { + return typeof value === "undefined" || value === null || value.length === 0; + }; + + var generateAliasFromImageData = function generateAliasFromImageData(imageData) { + if (typeof imageData === "string" || isArrayBufferView(imageData)) { + return sHashCode(imageData); + } else if (isArrayBufferView(imageData.data)) { + return sHashCode(imageData.data); + } + + return null; + }; + + var isImageTypeSupported = function isImageTypeSupported(type) { + return typeof jsPDFAPI["process" + type.toUpperCase()] === "function"; + }; + + var isDOMElement = function isDOMElement(object) { + return _typeof(object) === "object" && object.nodeType === 1; + }; + + var getImageDataFromElement = function getImageDataFromElement(element, format) { + //if element is an image which uses data url definition, just return the dataurl + if (element.nodeName === "IMG" && element.hasAttribute("src")) { + var src = "" + element.getAttribute("src"); //is base64 encoded dataUrl, directly process it + + if (src.indexOf("data:image/") === 0) { + return atob(unescape(src).split("base64,").pop()); + } //it is probably an url, try to load it + + + var tmpImageData = jsPDFAPI.loadFile(src, true); + + if (tmpImageData !== undefined) { + return tmpImageData; + } + } + + if (element.nodeName === "CANVAS") { + if (element.width === 0 || element.height === 0) { + throw new Error("Given canvas must have data. Canvas width: " + element.width + ", height: " + element.height); + } + + var mimeType; + + switch (format) { + case "PNG": + mimeType = "image/png"; + break; + + case "WEBP": + mimeType = "image/webp"; + break; + + case "JPEG": + case "JPG": + default: + mimeType = "image/jpeg"; + break; + } + + return atob(element.toDataURL(mimeType, 1.0).split("base64,").pop()); + } + }; + + var checkImagesForAlias = function checkImagesForAlias(alias) { + var images = this.internal.collections[namespace + "images"]; + + if (images) { + for (var e in images) { + if (alias === images[e].alias) { + return images[e]; + } + } + } + }; + + var determineWidthAndHeight = function determineWidthAndHeight(width, height, image) { + if (!width && !height) { + width = -96; + height = -96; + } + + if (width < 0) { + width = -1 * image.width * 72 / width / this.internal.scaleFactor; + } + + if (height < 0) { + height = -1 * image.height * 72 / height / this.internal.scaleFactor; + } + + if (width === 0) { + width = height * image.width / image.height; + } + + if (height === 0) { + height = width * image.height / image.width; + } + + return [width, height]; + }; + + var writeImageToPDF = function writeImageToPDF(x, y, width, height, image, rotation) { + var dims = determineWidthAndHeight.call(this, width, height, image), + coord = this.internal.getCoordinateString, + vcoord = this.internal.getVerticalCoordinateString; + var images = getImages.call(this); + width = dims[0]; + height = dims[1]; + images[image.index] = image; + + if (rotation) { + rotation *= Math.PI / 180; + var c = Math.cos(rotation); + var s = Math.sin(rotation); //like in pdf Reference do it 4 digits instead of 2 + + var f4 = function f4(number) { + return number.toFixed(4); + }; + + var rotationTransformationMatrix = [f4(c), f4(s), f4(s * -1), f4(c), 0, 0, "cm"]; + } + + this.internal.write("q"); //Save graphics state + + if (rotation) { + this.internal.write([1, "0", "0", 1, coord(x), vcoord(y + height), "cm"].join(" ")); //Translate + + this.internal.write(rotationTransformationMatrix.join(" ")); //Rotate + + this.internal.write([coord(width), "0", "0", coord(height), "0", "0", "cm"].join(" ")); //Scale + } else { + this.internal.write([coord(width), "0", "0", coord(height), coord(x), vcoord(y + height), "cm"].join(" ")); //Translate and Scale + } + + if (this.isAdvancedAPI()) { + // draw image bottom up when in "advanced" API mode + this.internal.write([1, 0, 0, -1, 0, 0, "cm"].join(" ")); + } + + this.internal.write("/I" + image.index + " Do"); //Paint Image + + this.internal.write("Q"); //Restore graphics state + }; + /** + * COLOR SPACES + */ + + + var color_spaces = jsPDFAPI.color_spaces = { + DEVICE_RGB: "DeviceRGB", + DEVICE_GRAY: "DeviceGray", + DEVICE_CMYK: "DeviceCMYK", + CAL_GREY: "CalGray", + CAL_RGB: "CalRGB", + LAB: "Lab", + ICC_BASED: "ICCBased", + INDEXED: "Indexed", + PATTERN: "Pattern", + SEPARATION: "Separation", + DEVICE_N: "DeviceN" + }; + /** + * DECODE METHODS + */ + + jsPDFAPI.decode = { + DCT_DECODE: "DCTDecode", + FLATE_DECODE: "FlateDecode", + LZW_DECODE: "LZWDecode", + JPX_DECODE: "JPXDecode", + JBIG2_DECODE: "JBIG2Decode", + ASCII85_DECODE: "ASCII85Decode", + ASCII_HEX_DECODE: "ASCIIHexDecode", + RUN_LENGTH_DECODE: "RunLengthDecode", + CCITT_FAX_DECODE: "CCITTFaxDecode" + }; + /** + * IMAGE COMPRESSION TYPES + */ + + var image_compression = jsPDFAPI.image_compression = { + NONE: "NONE", + FAST: "FAST", + MEDIUM: "MEDIUM", + SLOW: "SLOW" + }; + /** + * @name sHashCode + * @function + * @param {string} data + * @returns {string} + */ + + var sHashCode = jsPDFAPI.__addimage__.sHashCode = function (data) { + var hash = 0, + i, + len; + + if (typeof data === "string") { + len = data.length; + + for (i = 0; i < len; i++) { + hash = (hash << 5) - hash + data.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + } else if (isArrayBufferView(data)) { + len = data.byteLength / 2; + + for (i = 0; i < len; i++) { + hash = (hash << 5) - hash + data[i]; + hash |= 0; // Convert to 32bit integer + } + } + + return hash; + }; + /** + * Validates if given String is a valid Base64-String + * + * @name validateStringAsBase64 + * @public + * @function + * @param {String} possible Base64-String + * + * @returns {boolean} + */ + + + var validateStringAsBase64 = jsPDFAPI.__addimage__.validateStringAsBase64 = function (possibleBase64String) { + possibleBase64String = possibleBase64String || ""; + possibleBase64String.toString().trim(); + var result = true; + + if (possibleBase64String.length === 0) { + result = false; + } + + if (possibleBase64String.length % 4 !== 0) { + result = false; + } + + if (/^[A-Za-z0-9+/]+$/.test(possibleBase64String.substr(0, possibleBase64String.length - 2)) === false) { + result = false; + } + + if (/^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(possibleBase64String.substr(-2)) === false) { + result = false; + } + + return result; + }; + /** + * Strips out and returns info from a valid base64 data URI + * + * @name extractImageFromDataUrl + * @function + * @param {string} dataUrl a valid data URI of format 'data:[][;base64],' + * @returns {Array}an Array containing the following + * [0] the complete data URI + * [1] + * [2] format - the second part of the mime-type i.e 'png' in 'image/png' + * [4] + */ + + + var extractImageFromDataUrl = jsPDFAPI.__addimage__.extractImageFromDataUrl = function (dataUrl) { + dataUrl = dataUrl || ""; + var dataUrlParts = dataUrl.split("base64,"); + var result = null; + + if (dataUrlParts.length === 2) { + var extractedInfo = /^data:(\w*\/\w*);*(charset=(?!charset=)[\w=-]*)*;*$/.exec(dataUrlParts[0]); + + if (Array.isArray(extractedInfo)) { + result = { + mimeType: extractedInfo[1], + charset: extractedInfo[2], + data: dataUrlParts[1] + }; + } + } + + return result; + }; + /** + * Check to see if ArrayBuffer is supported + * + * @name supportsArrayBuffer + * @function + * @returns {boolean} + */ + + + var supportsArrayBuffer = jsPDFAPI.__addimage__.supportsArrayBuffer = function () { + return typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; + }; + /** + * Tests supplied object to determine if ArrayBuffer + * + * @name isArrayBuffer + * @function + * @param {Object} object an Object + * + * @returns {boolean} + */ + + + jsPDFAPI.__addimage__.isArrayBuffer = function (object) { + return supportsArrayBuffer() && object instanceof ArrayBuffer; + }; + /** + * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface + * + * @name isArrayBufferView + * @function + * @param {Object} object an Object + * @returns {boolean} + */ + + + var isArrayBufferView = jsPDFAPI.__addimage__.isArrayBufferView = function (object) { + return supportsArrayBuffer() && typeof Uint32Array !== "undefined" && (object instanceof Int8Array || object instanceof Uint8Array || typeof Uint8ClampedArray !== "undefined" && object instanceof Uint8ClampedArray || object instanceof Int16Array || object instanceof Uint16Array || object instanceof Int32Array || object instanceof Uint32Array || object instanceof Float32Array || object instanceof Float64Array); + }; + /** + * Convert Binary String to ArrayBuffer + * + * @name binaryStringToUint8Array + * @public + * @function + * @param {string} BinaryString with ImageData + * @returns {Uint8Array} + */ + + + var binaryStringToUint8Array = jsPDFAPI.__addimage__.binaryStringToUint8Array = function (binary_string) { + var len = binary_string.length; + var bytes = new Uint8Array(len); + + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + + return bytes; + }; + /** + * Convert the Buffer to a Binary String + * + * @name arrayBufferToBinaryString + * @public + * @function + * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData + * + * @returns {String} + */ + + + var arrayBufferToBinaryString = jsPDFAPI.__addimage__.arrayBufferToBinaryString = function (buffer) { + var out = ""; // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView. + // Do not copy the array if input is already an array. + + var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer); + + for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) { + // Limit the amount of characters being parsed to prevent overflow. + // Note that while TextDecoder would be faster, it does not have the same + // functionality as fromCharCode with any provided encodings as of 3/2021. + out += String.fromCharCode.apply(null, buf.subarray(i, i + ARRAY_APPLY_BATCH)); + } + + return out; + }; + /** + * Possible parameter for addImage, an RGBA buffer with size. + * + * @typedef {Object} RGBAData + * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData. + * @property {number} width - Image width as the data does not carry this information in itself. + * @property {number} height - Image height as the data does not carry this information in itself. + */ + + /** + * Adds an Image to the PDF. + * + * @name addImage + * @public + * @function + * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData). + * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP' + * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} width width of the image (in units declared at inception of PDF document) + * @param {number} height height of the Image (in units declared at inception of PDF document) + * @param {string} alias alias of the image (if used multiple times) + * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW' + * @param {number} rotation rotation of the image in degrees (0-359) + * + * @returns jsPDF + */ + + + jsPDFAPI.addImage = function () { + var imageData, format, x, y, w, h, alias, compression, rotation; + imageData = arguments[0]; + + if (typeof arguments[1] === "number") { + format = UNKNOWN; + x = arguments[1]; + y = arguments[2]; + w = arguments[3]; + h = arguments[4]; + alias = arguments[5]; + compression = arguments[6]; + rotation = arguments[7]; + } else { + format = arguments[1]; + x = arguments[2]; + y = arguments[3]; + w = arguments[4]; + h = arguments[5]; + alias = arguments[6]; + compression = arguments[7]; + rotation = arguments[8]; + } + + if (_typeof(imageData) === "object" && !isDOMElement(imageData) && "imageData" in imageData) { + var options = imageData; + imageData = options.imageData; + format = options.format || format || UNKNOWN; + x = options.x || x || 0; + y = options.y || y || 0; + w = options.w || options.width || w; + h = options.h || options.height || h; + alias = options.alias || alias; + compression = options.compression || compression; + rotation = options.rotation || options.angle || rotation; + } //If compression is not explicitly set, determine if we should use compression + + + var filter = this.internal.getFilters(); + + if (compression === undefined && filter.indexOf("FlateEncode") !== -1) { + compression = "SLOW"; + } + + if (isNaN(x) || isNaN(y)) { + throw new Error("Invalid coordinates passed to jsPDF.addImage"); + } + + initialize.call(this); + var image = processImageData.call(this, imageData, format, alias, compression); + writeImageToPDF.call(this, x, y, w, h, image, rotation); + return this; + }; + + var processImageData = function processImageData(imageData, format, alias, compression) { + var result, dataAsBinaryString; + + if (typeof imageData === "string" && getImageFileTypeByImageData(imageData) === UNKNOWN) { + imageData = unescape(imageData); + var tmpImageData = convertBase64ToBinaryString(imageData, false); + + if (tmpImageData !== "") { + imageData = tmpImageData; + } else { + tmpImageData = jsPDFAPI.loadFile(imageData, true); + + if (tmpImageData !== undefined) { + imageData = tmpImageData; + } + } + } + + if (isDOMElement(imageData)) { + imageData = getImageDataFromElement(imageData, format); + } + + format = getImageFileTypeByImageData(imageData, format); + + if (!isImageTypeSupported(format)) { + throw new Error("addImage does not support files of type '" + format + "', please ensure that a plugin for '" + format + "' support is added."); + } // now do the heavy lifting + + + if (notDefined(alias)) { + alias = generateAliasFromImageData(imageData); + } + + result = checkImagesForAlias.call(this, alias); + + if (!result) { + if (supportsArrayBuffer()) { + // no need to convert if imageData is already uint8array + if (!(imageData instanceof Uint8Array) && format !== "RGBA") { + dataAsBinaryString = imageData; + imageData = binaryStringToUint8Array(imageData); + } + } + + result = this["process" + format.toUpperCase()](imageData, getImageIndex.call(this), alias, checkCompressValue(compression), dataAsBinaryString); + } + + if (!result) { + throw new Error("An unknown error occurred whilst processing the image."); + } + + return result; + }; + /** + * @name convertBase64ToBinaryString + * @function + * @param {string} stringData + * @returns {string} binary string + */ + + + var convertBase64ToBinaryString = jsPDFAPI.__addimage__.convertBase64ToBinaryString = function (stringData, throwError) { + throwError = typeof throwError === "boolean" ? throwError : true; + var base64Info; + var imageData = ""; + var rawData; + + if (typeof stringData === "string") { + base64Info = extractImageFromDataUrl(stringData); + rawData = base64Info !== null ? base64Info.data : stringData; + + try { + imageData = atob(rawData); + } catch (e) { + if (throwError) { + if (!validateStringAsBase64(rawData)) { + throw new Error("Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString "); + } else { + throw new Error("atob-Error in jsPDF.convertBase64ToBinaryString " + e.message); + } + } + } + } + + return imageData; + }; + /** + * @name getImageProperties + * @function + * @param {Object} imageData + * @returns {Object} + */ + + + jsPDFAPI.getImageProperties = function (imageData) { + var image; + var tmpImageData = ""; + var format; + + if (isDOMElement(imageData)) { + imageData = getImageDataFromElement(imageData); + } + + if (typeof imageData === "string" && getImageFileTypeByImageData(imageData) === UNKNOWN) { + tmpImageData = convertBase64ToBinaryString(imageData, false); + + if (tmpImageData === "") { + tmpImageData = jsPDFAPI.loadFile(imageData) || ""; + } + + imageData = tmpImageData; + } + + format = getImageFileTypeByImageData(imageData); + + if (!isImageTypeSupported(format)) { + throw new Error("addImage does not support files of type '" + format + "', please ensure that a plugin for '" + format + "' support is added."); + } + + if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) { + imageData = binaryStringToUint8Array(imageData); + } + + image = this["process" + format.toUpperCase()](imageData); + + if (!image) { + throw new Error("An unknown error occurred whilst processing the image"); + } + + image.fileType = format; + return image; + }; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +(function (jsPDFAPI) { + + var notEmpty = function notEmpty(obj) { + if (typeof obj != "undefined") { + if (obj != "") { + return true; + } + } + }; + + jsPDF.API.events.push(["addPage", function (addPageData) { + var pageInfo = this.internal.getPageInfo(addPageData.pageNumber); + pageInfo.pageContext.annotations = []; + }]); + jsPDFAPI.events.push(["putPage", function (putPageData) { + var getHorizontalCoordinateString = this.internal.getCoordinateString; + var getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId); + var pageAnnos = putPageData.pageContext.annotations; + var anno, rect, line; + var found = false; + + for (var a = 0; a < pageAnnos.length && !found; a++) { + anno = pageAnnos[a]; + + switch (anno.type) { + case "link": + if (notEmpty(anno.options.url) || notEmpty(anno.options.pageNumber)) { + found = true; + } + + break; + + case "reference": + case "text": + case "freetext": + found = true; + break; + } + } + + if (found == false) { + return; + } + + this.internal.write("/Annots ["); + + for (var i = 0; i < pageAnnos.length; i++) { + anno = pageAnnos[i]; + var escape = this.internal.pdfEscape; + var encryptor = this.internal.getEncryptor(putPageData.objId); + + switch (anno.type) { + case "reference": + // References to Widget Annotations (for AcroForm Fields) + this.internal.write(" " + anno.object.objId + " 0 R "); + break; + + case "text": + // Create a an object for both the text and the popup + var objText = this.internal.newAdditionalObject(); + var objPopup = this.internal.newAdditionalObject(); + var encryptorText = this.internal.getEncryptor(objText.objId); + var title = anno.title || "Note"; + rect = "/Rect [" + getHorizontalCoordinateString(anno.bounds.x) + " " + getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) + " " + getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) + " " + getVerticalCoordinateString(anno.bounds.y) + "] "; + line = "<>"; + objText.content = line; + var parent = objText.objId + " 0 R"; + var popoff = 30; + rect = "/Rect [" + getHorizontalCoordinateString(anno.bounds.x + popoff) + " " + getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) + " " + getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w + popoff) + " " + getVerticalCoordinateString(anno.bounds.y) + "] "; + line = "<>"; + } else if (anno.options.pageNumber) { + // first page is 0 + var info = this.internal.getPageInfo(anno.options.pageNumber); + line = "< pageNumber or url [required] + *

    If pageNumber is specified, top and zoom may also be specified

    + * @name link + * @function + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @param {Object} options + */ + + + jsPDFAPI.link = function (x, y, w, h, options) { + var pageInfo = this.internal.getCurrentPageInfo(); + var getHorizontalCoordinateString = this.internal.getCoordinateString; + var getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + pageInfo.pageContext.annotations.push({ + finalBounds: { + x: getHorizontalCoordinateString(x), + y: getVerticalCoordinateString(y), + w: getHorizontalCoordinateString(x + w), + h: getVerticalCoordinateString(y + h) + }, + options: options, + type: "link" + }); + }; + /** + * Currently only supports single line text. + * Returns the width of the text/link + * + * @name textWithLink + * @function + * @param {string} text + * @param {number} x + * @param {number} y + * @param {Object} options + * @returns {number} width the width of the text/link + */ + + + jsPDFAPI.textWithLink = function (text, x, y, options) { + var totalLineWidth = this.getTextWidth(text); + var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor; + var linkHeight, linkWidth; // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line + + if (options.maxWidth !== undefined) { + var maxWidth = options.maxWidth; + linkWidth = maxWidth; + var numOfLines = this.splitTextToSize(text, linkWidth).length; + linkHeight = Math.ceil(lineHeight * numOfLines); + } else { + linkWidth = totalLineWidth; + linkHeight = lineHeight; + } + + this.text(text, x, y, options); //TODO We really need the text baseline height to do this correctly. + // Or ability to draw text on top, bottom, center, or baseline. + + y += lineHeight * 0.2; //handle x position based on the align option + + if (options.align === "center") { + x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width + } + + if (options.align === "right") { + x = x - totalLineWidth; + } + + this.link(x, y - lineHeight, linkWidth, linkHeight, options); + return totalLineWidth; + }; //TODO move into external library + + /** + * @name getTextWidth + * @function + * @param {string} text + * @returns {number} txtWidth + */ + + + jsPDFAPI.getTextWidth = function (text) { + var fontSize = this.internal.getFontSize(); + var txtWidth = this.getStringUnitWidth(text) * fontSize / this.internal.scaleFactor; + return txtWidth; + }; + + return this; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2017 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF arabic parser PlugIn + * + * @name arabic + * @module + */ + +(function (jsPDFAPI) { + /** + * Arabic shape substitutions: char code => (isolated, final, initial, medial). + * Arabic Substition A + */ + + var arabicSubstitionA = { + 0x0621: [0xfe80], + // ARABIC LETTER HAMZA + 0x0622: [0xfe81, 0xfe82], + // ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623: [0xfe83, 0xfe84], + // ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624: [0xfe85, 0xfe86], + // ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625: [0xfe87, 0xfe88], + // ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], + // ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627: [0xfe8d, 0xfe8e], + // ARABIC LETTER ALEF + 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], + // ARABIC LETTER BEH + 0x0629: [0xfe93, 0xfe94], + // ARABIC LETTER TEH MARBUTA + 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], + // ARABIC LETTER TEH + 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], + // ARABIC LETTER THEH + 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], + // ARABIC LETTER JEEM + 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], + // ARABIC LETTER HAH + 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], + // ARABIC LETTER KHAH + 0x062f: [0xfea9, 0xfeaa], + // ARABIC LETTER DAL + 0x0630: [0xfeab, 0xfeac], + // ARABIC LETTER THAL + 0x0631: [0xfead, 0xfeae], + // ARABIC LETTER REH + 0x0632: [0xfeaf, 0xfeb0], + // ARABIC LETTER ZAIN + 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], + // ARABIC LETTER SEEN + 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], + // ARABIC LETTER SHEEN + 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], + // ARABIC LETTER SAD + 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], + // ARABIC LETTER DAD + 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], + // ARABIC LETTER TAH + 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], + // ARABIC LETTER ZAH + 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], + // ARABIC LETTER AIN + 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], + // ARABIC LETTER GHAIN + 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], + // ARABIC LETTER FEH + 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], + // ARABIC LETTER QAF + 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], + // ARABIC LETTER KAF + 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], + // ARABIC LETTER LAM + 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], + // ARABIC LETTER MEEM + 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], + // ARABIC LETTER NOON + 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], + // ARABIC LETTER HEH + 0x0648: [0xfeed, 0xfeee], + // ARABIC LETTER WAW + 0x0649: [0xfeef, 0xfef0, 64488, 64489], + // ARABIC LETTER ALEF MAKSURA + 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], + // ARABIC LETTER YEH + 0x0671: [0xfb50, 0xfb51], + // ARABIC LETTER ALEF WASLA + 0x0677: [0xfbdd], + // ARABIC LETTER U WITH HAMZA ABOVE + 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], + // ARABIC LETTER TTEH + 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], + // ARABIC LETTER TTEHEH + 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], + // ARABIC LETTER BEEH + 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], + // ARABIC LETTER PEH + 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], + // ARABIC LETTER TEHEH + 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], + // ARABIC LETTER BEHEH + 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], + // ARABIC LETTER NYEH + 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], + // ARABIC LETTER DYEH + 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], + // ARABIC LETTER TCHEH + 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], + // ARABIC LETTER TCHEHEH + 0x0688: [0xfb88, 0xfb89], + // ARABIC LETTER DDAL + 0x068c: [0xfb84, 0xfb85], + // ARABIC LETTER DAHAL + 0x068d: [0xfb82, 0xfb83], + // ARABIC LETTER DDAHAL + 0x068e: [0xfb86, 0xfb87], + // ARABIC LETTER DUL + 0x0691: [0xfb8c, 0xfb8d], + // ARABIC LETTER RREH + 0x0698: [0xfb8a, 0xfb8b], + // ARABIC LETTER JEH + 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], + // ARABIC LETTER VEH + 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], + // ARABIC LETTER PEHEH + 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], + // ARABIC LETTER KEHEH + 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], + // ARABIC LETTER NG + 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], + // ARABIC LETTER GAF + 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], + // ARABIC LETTER NGOEH + 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], + // ARABIC LETTER GUEH + 0x06ba: [0xfb9e, 0xfb9f], + // ARABIC LETTER NOON GHUNNA + 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], + // ARABIC LETTER RNOON + 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], + // ARABIC LETTER HEH DOACHASHMEE + 0x06c0: [0xfba4, 0xfba5], + // ARABIC LETTER HEH WITH YEH ABOVE + 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], + // ARABIC LETTER HEH GOAL + 0x06c5: [0xfbe0, 0xfbe1], + // ARABIC LETTER KIRGHIZ OE + 0x06c6: [0xfbd9, 0xfbda], + // ARABIC LETTER OE + 0x06c7: [0xfbd7, 0xfbd8], + // ARABIC LETTER U + 0x06c8: [0xfbdb, 0xfbdc], + // ARABIC LETTER YU + 0x06c9: [0xfbe2, 0xfbe3], + // ARABIC LETTER KIRGHIZ YU + 0x06cb: [0xfbde, 0xfbdf], + // ARABIC LETTER VE + 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], + // ARABIC LETTER FARSI YEH + 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], + //ARABIC LETTER E + 0x06d2: [0xfbae, 0xfbaf], + // ARABIC LETTER YEH BARREE + 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE + + }; + /* + var ligaturesSubstitutionA = { + 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM + }; + */ + + var ligatures = { + 0xfedf: { + 0xfe82: 0xfef5, + // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfe84: 0xfef7, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfe88: 0xfef9, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM + 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + + }, + 0xfee0: { + 0xfe82: 0xfef6, + // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0xfe84: 0xfef8, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0xfe88: 0xfefa, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM + 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM + + }, + 0xfe8d: { + 0xfedf: { + 0xfee0: { + 0xfeea: 0xfdf2 + } + } + }, + // ALLAH + 0x0651: { + 0x064c: 0xfc5e, + // Shadda + Dammatan + 0x064d: 0xfc5f, + // Shadda + Kasratan + 0x064e: 0xfc60, + // Shadda + Fatha + 0x064f: 0xfc61, + // Shadda + Damma + 0x0650: 0xfc62 // Shadda + Kasra + + } + }; + var arabic_diacritics = { + 1612: 64606, + // Shadda + Dammatan + 1613: 64607, + // Shadda + Kasratan + 1614: 64608, + // Shadda + Fatha + 1615: 64609, + // Shadda + Damma + 1616: 64610 // Shadda + Kasra + + }; + var alfletter = [1570, 1571, 1573, 1575]; + var noChangeInForm = -1; + var isolatedForm = 0; + var finalForm = 1; + var initialForm = 2; + var medialForm = 3; + jsPDFAPI.__arabicParser__ = {}; //private + + var isInArabicSubstitutionA = jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function (letter) { + return typeof arabicSubstitionA[letter.charCodeAt(0)] !== "undefined"; + }; + + var isArabicLetter = jsPDFAPI.__arabicParser__.isArabicLetter = function (letter) { + return typeof letter === "string" && /^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(letter); + }; + + var isArabicEndLetter = jsPDFAPI.__arabicParser__.isArabicEndLetter = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length <= 2; + }; + + var isArabicAlfLetter = jsPDFAPI.__arabicParser__.isArabicAlfLetter = function (letter) { + return isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0; + }; + + jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length >= 1; + }; + + var arabicLetterHasFinalForm = jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length >= 2; + }; + + jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length >= 3; + }; + + var arabicLetterHasMedialForm = jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length == 4; + }; + + var resolveLigatures = jsPDFAPI.__arabicParser__.resolveLigatures = function (letters) { + var i = 0; + var tmpLigatures = ligatures; + var result = ""; + var effectedLetters = 0; + + for (i = 0; i < letters.length; i += 1) { + if (typeof tmpLigatures[letters.charCodeAt(i)] !== "undefined") { + effectedLetters++; + tmpLigatures = tmpLigatures[letters.charCodeAt(i)]; + + if (typeof tmpLigatures === "number") { + result += String.fromCharCode(tmpLigatures); + tmpLigatures = ligatures; + effectedLetters = 0; + } + + if (i === letters.length - 1) { + tmpLigatures = ligatures; + result += letters.charAt(i - (effectedLetters - 1)); + i = i - (effectedLetters - 1); + effectedLetters = 0; + } + } else { + tmpLigatures = ligatures; + result += letters.charAt(i - effectedLetters); + i = i - effectedLetters; + effectedLetters = 0; + } + } + + return result; + }; + + jsPDFAPI.__arabicParser__.isArabicDiacritic = function (letter) { + return letter !== undefined && arabic_diacritics[letter.charCodeAt(0)] !== undefined; + }; + + var getCorrectForm = jsPDFAPI.__arabicParser__.getCorrectForm = function (currentChar, beforeChar, nextChar) { + if (!isArabicLetter(currentChar)) { + return -1; + } + + if (isInArabicSubstitutionA(currentChar) === false) { + return noChangeInForm; + } + + if (!arabicLetterHasFinalForm(currentChar) || !isArabicLetter(beforeChar) && !isArabicLetter(nextChar) || !isArabicLetter(nextChar) && isArabicEndLetter(beforeChar) || isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar) || isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar) || isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar)) { + return isolatedForm; + } + + if (arabicLetterHasMedialForm(currentChar) && isArabicLetter(beforeChar) && !isArabicEndLetter(beforeChar) && isArabicLetter(nextChar) && arabicLetterHasFinalForm(nextChar)) { + return medialForm; + } + + if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) { + return finalForm; + } + + return initialForm; + }; + /** + * @name processArabic + * @function + * @param {string} text + * @returns {string} + */ + + + var parseArabic = function parseArabic(text) { + text = text || ""; + var result = ""; + var i = 0; + var j = 0; + var position = 0; + var currentLetter = ""; + var prevLetter = ""; + var nextLetter = ""; + var words = text.split("\\s+"); + var newWords = []; + + for (i = 0; i < words.length; i += 1) { + newWords.push(""); + + for (j = 0; j < words[i].length; j += 1) { + currentLetter = words[i][j]; + prevLetter = words[i][j - 1]; + nextLetter = words[i][j + 1]; + + if (isArabicLetter(currentLetter)) { + position = getCorrectForm(currentLetter, prevLetter, nextLetter); + + if (position !== -1) { + newWords[i] += String.fromCharCode(arabicSubstitionA[currentLetter.charCodeAt(0)][position]); + } else { + newWords[i] += currentLetter; + } + } else { + newWords[i] += currentLetter; + } + } + + newWords[i] = resolveLigatures(newWords[i]); + } + + result = newWords.join(" "); + return result; + }; + + var processArabic = jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function () { + var text = typeof arguments[0] === "string" ? arguments[0] : arguments[0].text; + var tmpText = []; + var result; + + if (Array.isArray(text)) { + var i = 0; + tmpText = []; + + for (i = 0; i < text.length; i += 1) { + if (Array.isArray(text[i])) { + tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]); + } else { + tmpText.push([parseArabic(text[i])]); + } + } + + result = tmpText; + } else { + result = parseArabic(text); + } + + if (typeof arguments[0] === "string") { + return result; + } else { + arguments[0].text = result; + return arguments[0]; + } + }; + + jsPDFAPI.events.push(["preProcessText", processArabic]); +})(jsPDF.API); + +/** @license + * jsPDF Autoprint Plugin + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * @name autoprint + * @module + */ + +(function (jsPDFAPI) { + /** + * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer. + * + * @name autoPrint + * @function + * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer . + * @returns {jsPDF} + * @example + * var doc = new jsPDF(); + * doc.text(10, 10, 'This is a test'); + * doc.autoPrint({variant: 'non-conform'}); + * doc.save('autoprint.pdf'); + */ + + jsPDFAPI.autoPrint = function (options) { + + var refAutoPrintTag; + options = options || {}; + options.variant = options.variant || "non-conform"; + + switch (options.variant) { + case "javascript": + //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb + this.addJS("print({});"); + break; + + case "non-conform": + default: + this.internal.events.subscribe("postPutResources", function () { + refAutoPrintTag = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/S /Named"); + this.internal.out("/Type /Action"); + this.internal.out("/N /Print"); + this.internal.out(">>"); + this.internal.out("endobj"); + }); + this.internal.events.subscribe("putCatalog", function () { + this.internal.out("/OpenAction " + refAutoPrintTag + " 0 R"); + }); + break; + } + + return this; + }; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF Canvas PlugIn + * This plugin mimics the HTML5 Canvas + * + * The goal is to provide a way for current canvas users to print directly to a PDF. + * @name canvas + * @module + */ + +(function (jsPDFAPI) { + /** + * @class Canvas + * @classdesc A Canvas Wrapper for jsPDF + */ + + var Canvas = function Canvas() { + var jsPdfInstance = undefined; + Object.defineProperty(this, "pdf", { + get: function get() { + return jsPdfInstance; + }, + set: function set(value) { + jsPdfInstance = value; + } + }); + var _width = 150; + /** + * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used. + * This is one of the two properties, the other being width, that controls the size of the canvas. + * + * @name width + */ + + Object.defineProperty(this, "width", { + get: function get() { + return _width; + }, + set: function set(value) { + if (isNaN(value) || Number.isInteger(value) === false || value < 0) { + _width = 150; + } else { + _width = value; + } + + if (this.getContext("2d").pageWrapXEnabled) { + this.getContext("2d").pageWrapX = _width + 1; + } + } + }); + var _height = 300; + /** + * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used. + * This is one of the two properties, the other being height, that controls the size of the canvas. + * + * @name height + */ + + Object.defineProperty(this, "height", { + get: function get() { + return _height; + }, + set: function set(value) { + if (isNaN(value) || Number.isInteger(value) === false || value < 0) { + _height = 300; + } else { + _height = value; + } + + if (this.getContext("2d").pageWrapYEnabled) { + this.getContext("2d").pageWrapY = _height + 1; + } + } + }); + var _childNodes = []; + Object.defineProperty(this, "childNodes", { + get: function get() { + return _childNodes; + }, + set: function set(value) { + _childNodes = value; + } + }); + var _style = {}; + Object.defineProperty(this, "style", { + get: function get() { + return _style; + }, + set: function set(value) { + _style = value; + } + }); + Object.defineProperty(this, "parentNode", {}); + }; + /** + * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported. + * + * @name getContext + * @function + * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is "2d", leading to the creation of a Context2D object representing a two-dimensional rendering context. + * @param {object} contextAttributes + */ + + + Canvas.prototype.getContext = function (contextType, contextAttributes) { + contextType = contextType || "2d"; + var key; + + if (contextType !== "2d") { + return null; + } + + for (key in contextAttributes) { + if (this.pdf.context2d.hasOwnProperty(key)) { + this.pdf.context2d[key] = contextAttributes[key]; + } + } + + this.pdf.context2d._canvas = this; + return this.pdf.context2d; + }; + /** + * The toDataURL() method is just a stub to throw an error if accidently called. + * + * @name toDataURL + * @function + */ + + + Canvas.prototype.toDataURL = function () { + throw new Error("toDataURL is not implemented."); + }; + + jsPDFAPI.events.push(["initialized", function () { + this.canvas = new Canvas(); + this.canvas.pdf = this; + }]); + return this; +})(jsPDF.API); + +/** + * @name cell + * @module + */ + +(function (jsPDFAPI) { + + var NO_MARGINS = { + left: 0, + top: 0, + bottom: 0, + right: 0 + }; + var px2pt = 0.264583 * 72 / 25.4; + var printingHeaderRow = false; + + var _initialize = function _initialize() { + if (typeof this.internal.__cell__ === "undefined") { + this.internal.__cell__ = {}; + this.internal.__cell__.padding = 3; + this.internal.__cell__.headerFunction = undefined; + this.internal.__cell__.margins = Object.assign({}, NO_MARGINS); + this.internal.__cell__.margins.width = this.getPageWidth(); + + _reset.call(this); + } + }; + + var _reset = function _reset() { + this.internal.__cell__.lastCell = new Cell(); + this.internal.__cell__.pages = 1; + }; + + var Cell = function Cell() { + var _x = arguments[0]; + Object.defineProperty(this, "x", { + enumerable: true, + get: function get() { + return _x; + }, + set: function set(value) { + _x = value; + } + }); + var _y = arguments[1]; + Object.defineProperty(this, "y", { + enumerable: true, + get: function get() { + return _y; + }, + set: function set(value) { + _y = value; + } + }); + var _width = arguments[2]; + Object.defineProperty(this, "width", { + enumerable: true, + get: function get() { + return _width; + }, + set: function set(value) { + _width = value; + } + }); + var _height = arguments[3]; + Object.defineProperty(this, "height", { + enumerable: true, + get: function get() { + return _height; + }, + set: function set(value) { + _height = value; + } + }); + var _text = arguments[4]; + Object.defineProperty(this, "text", { + enumerable: true, + get: function get() { + return _text; + }, + set: function set(value) { + _text = value; + } + }); + var _lineNumber = arguments[5]; + Object.defineProperty(this, "lineNumber", { + enumerable: true, + get: function get() { + return _lineNumber; + }, + set: function set(value) { + _lineNumber = value; + } + }); + var _align = arguments[6]; + Object.defineProperty(this, "align", { + enumerable: true, + get: function get() { + return _align; + }, + set: function set(value) { + _align = value; + } + }); + return this; + }; + + Cell.prototype.clone = function () { + return new Cell(this.x, this.y, this.width, this.height, this.text, this.lineNumber, this.align); + }; + + Cell.prototype.toArray = function () { + return [this.x, this.y, this.width, this.height, this.text, this.lineNumber, this.align]; + }; + /** + * @name setHeaderFunction + * @function + * @param {function} func + */ + + + jsPDFAPI.setHeaderFunction = function (func) { + _initialize.call(this); + + this.internal.__cell__.headerFunction = typeof func === "function" ? func : undefined; + return this; + }; + /** + * @name getTextDimensions + * @function + * @param {string} txt + * @returns {Object} dimensions + */ + + + jsPDFAPI.getTextDimensions = function (text, options) { + _initialize.call(this); + + options = options || {}; + var fontSize = options.fontSize || this.getFontSize(); + var font = options.font || this.getFont(); + var scaleFactor = options.scaleFactor || this.internal.scaleFactor; + var width = 0; + var amountOfLines = 0; + var height = 0; + var tempWidth = 0; + var scope = this; + + if (!Array.isArray(text) && typeof text !== "string") { + if (typeof text === "number") { + text = String(text); + } else { + throw new Error("getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings."); + } + } + + var maxWidth = options.maxWidth; + + if (maxWidth > 0) { + if (typeof text === "string") { + text = this.splitTextToSize(text, maxWidth); + } else if (Object.prototype.toString.call(text) === "[object Array]") { + text = text.reduce(function (acc, textLine) { + return acc.concat(scope.splitTextToSize(textLine, maxWidth)); + }, []); + } + } else { + // Without the else clause, it will not work if you do not pass along maxWidth + text = Array.isArray(text) ? text : [text]; + } + + for (var i = 0; i < text.length; i++) { + tempWidth = this.getStringUnitWidth(text[i], { + font: font + }) * fontSize; + + if (width < tempWidth) { + width = tempWidth; + } + } + + if (width !== 0) { + amountOfLines = text.length; + } + + width = width / scaleFactor; + height = Math.max((amountOfLines * fontSize * this.getLineHeightFactor() - fontSize * (this.getLineHeightFactor() - 1)) / scaleFactor, 0); + return { + w: width, + h: height + }; + }; + /** + * @name cellAddPage + * @function + */ + + + jsPDFAPI.cellAddPage = function () { + _initialize.call(this); + + this.addPage(); + var margins = this.internal.__cell__.margins || NO_MARGINS; + this.internal.__cell__.lastCell = new Cell(margins.left, margins.top, undefined, undefined); + this.internal.__cell__.pages += 1; + return this; + }; + /** + * @name cell + * @function + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {string} text + * @param {number} lineNumber lineNumber + * @param {string} align + * @return {jsPDF} jsPDF-instance + */ + + + var cell = jsPDFAPI.cell = function () { + var currentCell; + + if (arguments[0] instanceof Cell) { + currentCell = arguments[0]; + } else { + currentCell = new Cell(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + + _initialize.call(this); + + var lastCell = this.internal.__cell__.lastCell; + var padding = this.internal.__cell__.padding; + var margins = this.internal.__cell__.margins || NO_MARGINS; + var tableHeaderRow = this.internal.__cell__.tableHeaderRow; + var printHeaders = this.internal.__cell__.printHeaders; // If this is not the first cell, we must change its position + + if (typeof lastCell.lineNumber !== "undefined") { + if (lastCell.lineNumber === currentCell.lineNumber) { + //Same line + currentCell.x = (lastCell.x || 0) + (lastCell.width || 0); + currentCell.y = lastCell.y || 0; + } else { + //New line + if (lastCell.y + lastCell.height + currentCell.height + margins.bottom > this.getPageHeight()) { + this.cellAddPage(); + currentCell.y = margins.top; + + if (printHeaders && tableHeaderRow) { + this.printHeaderRow(currentCell.lineNumber, true); + currentCell.y += tableHeaderRow[0].height; + } + } else { + currentCell.y = lastCell.y + lastCell.height || currentCell.y; + } + } + } + + if (typeof currentCell.text[0] !== "undefined") { + this.rect(currentCell.x, currentCell.y, currentCell.width, currentCell.height, printingHeaderRow === true ? "FD" : undefined); + + if (currentCell.align === "right") { + this.text(currentCell.text, currentCell.x + currentCell.width - padding, currentCell.y + padding, { + align: "right", + baseline: "top" + }); + } else if (currentCell.align === "center") { + this.text(currentCell.text, currentCell.x + currentCell.width / 2, currentCell.y + padding, { + align: "center", + baseline: "top", + maxWidth: currentCell.width - padding - padding + }); + } else { + this.text(currentCell.text, currentCell.x + padding, currentCell.y + padding, { + align: "left", + baseline: "top", + maxWidth: currentCell.width - padding - padding + }); + } + } + + this.internal.__cell__.lastCell = currentCell; + return this; + }; + /** + * Create a table from a set of data. + * @name table + * @function + * @param {Integer} [x] : left-position for top-left corner of table + * @param {Integer} [y] top-position for top-left corner of table + * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data. + * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost + * @param {Object} [config.printHeaders] True to print column headers at the top of every page + * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value + * @param {Object} [config.margins] margin values for left, top, bottom, and width + * @param {Object} [config.fontSize] Integer fontSize to use (optional) + * @param {Object} [config.padding] cell-padding in pt to use (optional) + * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional) + * @param {Object} [config.headerTextColor] default is #000 (optional) + * @param {Object} [config.rowStart] callback to handle before print each row (optional) + * @param {Object} [config.cellStart] callback to handle before print each cell (optional) + * @returns {jsPDF} jsPDF-instance + */ + + + jsPDFAPI.table = function (x, y, data, headers, config) { + _initialize.call(this); + + if (!data) { + throw new Error("No data for PDF table."); + } + + config = config || {}; + var headerNames = [], + headerLabels = [], + headerAligns = [], + i, + columnMatrix = {}, + columnWidths = {}, + column, + columnMinWidths = [], + j, + tableHeaderConfigs = [], + //set up defaults. If a value is provided in config, defaults will be overwritten: + autoSize = config.autoSize || false, + printHeaders = config.printHeaders === false ? false : true, + fontSize = config.css && typeof config.css["font-size"] !== "undefined" ? config.css["font-size"] * 16 : config.fontSize || 12, + margins = config.margins || Object.assign({ + width: this.getPageWidth() + }, NO_MARGINS), + padding = typeof config.padding === "number" ? config.padding : 3, + headerBackgroundColor = config.headerBackgroundColor || "#c8c8c8", + headerTextColor = config.headerTextColor || "#000"; + + _reset.call(this); + + this.internal.__cell__.printHeaders = printHeaders; + this.internal.__cell__.margins = margins; + this.internal.__cell__.table_font_size = fontSize; + this.internal.__cell__.padding = padding; + this.internal.__cell__.headerBackgroundColor = headerBackgroundColor; + this.internal.__cell__.headerTextColor = headerTextColor; + this.setFontSize(fontSize); // Set header values + + if (headers === undefined || headers === null) { + // No headers defined so we derive from data + headerNames = Object.keys(data[0]); + headerLabels = headerNames; + headerAligns = headerNames.map(function () { + return "left"; + }); + } else if (Array.isArray(headers) && _typeof(headers[0]) === "object") { + headerNames = headers.map(function (header) { + return header.name; + }); + headerLabels = headers.map(function (header) { + return header.prompt || header.name || ""; + }); + headerAligns = headers.map(function (header) { + return header.align || "left"; + }); // Split header configs into names and prompts + + for (i = 0; i < headers.length; i += 1) { + columnWidths[headers[i].name] = headers[i].width * px2pt; + } + } else if (Array.isArray(headers) && typeof headers[0] === "string") { + headerNames = headers; + headerLabels = headerNames; + headerAligns = headerNames.map(function () { + return "left"; + }); + } + + if (autoSize || Array.isArray(headers) && typeof headers[0] === "string") { + var headerName; + + for (i = 0; i < headerNames.length; i += 1) { + headerName = headerNames[i]; // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]} + + columnMatrix[headerName] = data.map(function (rec) { + return rec[headerName]; + }); // get header width + + this.setFont(undefined, "bold"); + columnMinWidths.push(this.getTextDimensions(headerLabels[i], { + fontSize: this.internal.__cell__.table_font_size, + scaleFactor: this.internal.scaleFactor + }).w); + column = columnMatrix[headerName]; // get cell widths + + this.setFont(undefined, "normal"); + + for (j = 0; j < column.length; j += 1) { + columnMinWidths.push(this.getTextDimensions(column[j], { + fontSize: this.internal.__cell__.table_font_size, + scaleFactor: this.internal.scaleFactor + }).w); + } // get final column width + + + columnWidths[headerName] = Math.max.apply(null, columnMinWidths) + padding + padding; //have to reset + + columnMinWidths = []; + } + } // -- Construct the table + + + if (printHeaders) { + var row = {}; + + for (i = 0; i < headerNames.length; i += 1) { + row[headerNames[i]] = {}; + row[headerNames[i]].text = headerLabels[i]; + row[headerNames[i]].align = headerAligns[i]; + } + + var rowHeight = calculateLineHeight.call(this, row, columnWidths); // Construct the header row + + tableHeaderConfigs = headerNames.map(function (value) { + return new Cell(x, y, columnWidths[value], rowHeight, row[value].text, undefined, row[value].align); + }); // Store the table header config + + this.setTableHeaderRow(tableHeaderConfigs); // Print the header for the start of the table + + this.printHeaderRow(1, false); + } // Construct the data rows + + + var align = headers.reduce(function (pv, cv) { + pv[cv.name] = cv.align; + return pv; + }, {}); + + for (i = 0; i < data.length; i += 1) { + if ("rowStart" in config && config.rowStart instanceof Function) { + config.rowStart({ + row: i, + data: data[i] + }, this); + } + + var lineHeight = calculateLineHeight.call(this, data[i], columnWidths); + + for (j = 0; j < headerNames.length; j += 1) { + var cellData = data[i][headerNames[j]]; + + if ("cellStart" in config && config.cellStart instanceof Function) { + config.cellStart({ + row: i, + col: j, + data: cellData + }, this); + } + + cell.call(this, new Cell(x, y, columnWidths[headerNames[j]], lineHeight, cellData, i + 2, align[headerNames[j]])); + } + } + + this.internal.__cell__.table_x = x; + this.internal.__cell__.table_y = y; + return this; + }; + /** + * Calculate the height for containing the highest column + * + * @name calculateLineHeight + * @function + * @param {Object[]} model is the line of data we want to calculate the height of + * @param {Integer[]} columnWidths is size of each column + * @returns {number} lineHeight + * @private + */ + + + var calculateLineHeight = function calculateLineHeight(model, columnWidths) { + var padding = this.internal.__cell__.padding; + var fontSize = this.internal.__cell__.table_font_size; + var scaleFactor = this.internal.scaleFactor; + return Object.keys(model).map(function (key) { + var value = model[key]; + return this.splitTextToSize(value.hasOwnProperty("text") ? value.text : value, columnWidths[key] - padding - padding); + }, this).map(function (value) { + return this.getLineHeightFactor() * value.length * fontSize / scaleFactor + padding + padding; + }, this).reduce(function (pv, cv) { + return Math.max(pv, cv); + }, 0); + }; + /** + * Store the config for outputting a table header + * + * @name setTableHeaderRow + * @function + * @param {Object[]} config + * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell + * except the lineNumber parameter is excluded + */ + + + jsPDFAPI.setTableHeaderRow = function (config) { + _initialize.call(this); + + this.internal.__cell__.tableHeaderRow = config; + }; + /** + * Output the store header row + * + * @name printHeaderRow + * @function + * @param {number} lineNumber The line number to output the header at + * @param {boolean} new_page + */ + + + jsPDFAPI.printHeaderRow = function (lineNumber, new_page) { + _initialize.call(this); + + if (!this.internal.__cell__.tableHeaderRow) { + throw new Error("Property tableHeaderRow does not exist."); + } + + var tableHeaderCell; + printingHeaderRow = true; + + if (typeof this.internal.__cell__.headerFunction === "function") { + var position = this.internal.__cell__.headerFunction(this, this.internal.__cell__.pages); + + this.internal.__cell__.lastCell = new Cell(position[0], position[1], position[2], position[3], undefined, -1); + } + + this.setFont(undefined, "bold"); + var tempHeaderConf = []; + + for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) { + tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone(); + + if (new_page) { + tableHeaderCell.y = this.internal.__cell__.margins.top || 0; + tempHeaderConf.push(tableHeaderCell); + } + + tableHeaderCell.lineNumber = lineNumber; + var currentTextColor = this.getTextColor(); + this.setTextColor(this.internal.__cell__.headerTextColor); + this.setFillColor(this.internal.__cell__.headerBackgroundColor); + cell.call(this, tableHeaderCell); + this.setTextColor(currentTextColor); + } + + if (tempHeaderConf.length > 0) { + this.setTableHeaderRow(tempHeaderConf); + } + + this.setFont(undefined, "normal"); + printingHeaderRow = false; + }; +})(jsPDF.API); + +function toLookup(arr) { + return arr.reduce(function (lookup, name, index) { + lookup[name] = index; + return lookup; + }, {}); +} + +var fontStyleOrder = { + italic: ["italic", "oblique", "normal"], + oblique: ["oblique", "italic", "normal"], + normal: ["normal", "oblique", "italic"] +}; +var fontStretchOrder = ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"]; // For a given font-stretch value, we need to know where to start our search +// from in the fontStretchOrder list. + +var fontStretchLookup = toLookup(fontStretchOrder); +var fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900]; +var fontWeightsLookup = toLookup(fontWeights); + +function normalizeFontStretch(stretch) { + stretch = stretch || "normal"; + return typeof fontStretchLookup[stretch] === "number" ? stretch : "normal"; +} + +function normalizeFontStyle(style) { + style = style || "normal"; + return fontStyleOrder[style] ? style : "normal"; +} + +function normalizeFontWeight(weight) { + if (!weight) { + return 400; + } + + if (typeof weight === "number") { + // Ignore values which aren't valid font-weights. + return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400; + } + + if (/^\d00$/.test(weight)) { + return parseInt(weight); + } + + switch (weight) { + case "bold": + return 700; + + case "normal": + default: + return 400; + } +} + +function normalizeFontFace(fontFace) { + var family = fontFace.family.replace(/"|'/g, "").toLowerCase(); + var style = normalizeFontStyle(fontFace.style); + var weight = normalizeFontWeight(fontFace.weight); + var stretch = normalizeFontStretch(fontFace.stretch); + return { + family: family, + style: style, + weight: weight, + stretch: stretch, + src: fontFace.src || [], + // The ref property maps this font-face to the font + // added by the .addFont() method. + ref: fontFace.ref || { + name: family, + style: [stretch, style, weight].join(" ") + } + }; +} +/** + * Turns a list of font-faces into a map, for easier lookup when resolving + * fonts. + * @private + */ + +function buildFontFaceMap(fontFaces) { + var map = {}; + + for (var i = 0; i < fontFaces.length; ++i) { + var normalized = normalizeFontFace(fontFaces[i]); + var name = normalized.family; + var stretch = normalized.stretch; + var style = normalized.style; + var weight = normalized.weight; + map[name] = map[name] || {}; + map[name][stretch] = map[name][stretch] || {}; + map[name][stretch][style] = map[name][stretch][style] || {}; + map[name][stretch][style][weight] = normalized; + } + + return map; +} +/** + * Searches a map of stretches, weights, etc. in the given direction and + * then, if no match has been found, in the opposite directions. + * + * @param {Object.} matchingSet A map of the various font variations. + * @param {any[]} order The order of the different variations + * @param {number} pivot The starting point of the search in the order list. + * @param {number} dir The initial direction of the search (desc = -1, asc = 1) + * @private + */ + +function searchFromPivot(matchingSet, order, pivot, dir) { + var i; + + for (i = pivot; i >= 0 && i < order.length; i += dir) { + if (matchingSet[order[i]]) { + return matchingSet[order[i]]; + } + } + + for (i = pivot; i >= 0 && i < order.length; i -= dir) { + if (matchingSet[order[i]]) { + return matchingSet[order[i]]; + } + } +} + +function resolveFontStretch(stretch, matchingSet) { + if (matchingSet[stretch]) { + return matchingSet[stretch]; + } + + var pivot = fontStretchLookup[stretch]; // If the font-stretch value is normal or more condensed, we want to + // start with a descending search, otherwise we should do ascending. + + var dir = pivot <= fontStretchLookup["normal"] ? -1 : 1; + var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir); + + if (!match) { + // Since a font-family cannot exist without having at least one stretch value + // we should never reach this point. + throw new Error("Could not find a matching font-stretch value for " + stretch); + } + + return match; +} + +function resolveFontStyle(fontStyle, matchingSet) { + if (matchingSet[fontStyle]) { + return matchingSet[fontStyle]; + } + + var ordering = fontStyleOrder[fontStyle]; + + for (var i = 0; i < ordering.length; ++i) { + if (matchingSet[ordering[i]]) { + return matchingSet[ordering[i]]; + } + } // Since a font-family cannot exist without having at least one style value + // we should never reach this point. + + + throw new Error("Could not find a matching font-style for " + fontStyle); +} + +function resolveFontWeight(weight, matchingSet) { + if (matchingSet[weight]) { + return matchingSet[weight]; + } + + if (weight === 400 && matchingSet[500]) { + return matchingSet[500]; + } + + if (weight === 500 && matchingSet[400]) { + return matchingSet[400]; + } + + var pivot = fontWeightsLookup[weight]; // If the font-stretch value is normal or more condensed, we want to + // start with a descending search, otherwise we should do ascending. + + var dir = weight < 400 ? -1 : 1; + var match = searchFromPivot(matchingSet, fontWeights, pivot, dir); + + if (!match) { + // Since a font-family cannot exist without having at least one stretch value + // we should never reach this point. + throw new Error("Could not find a matching font-weight for value " + weight); + } + + return match; +} + +var defaultGenericFontFamilies = { + "sans-serif": "helvetica", + fixed: "courier", + monospace: "courier", + terminal: "courier", + cursive: "times", + fantasy: "times", + serif: "times" +}; +var systemFonts = { + caption: "times", + icon: "times", + menu: "times", + "message-box": "times", + "small-caption": "times", + "status-bar": "times" +}; + +function ruleToString(rule) { + return [rule.stretch, rule.style, rule.weight, rule.family].join(" "); +} + +function resolveFontFace(fontFaceMap, rules, opts) { + opts = opts || {}; + var defaultFontFamily = opts.defaultFontFamily || "times"; + var genericFontFamilies = Object.assign({}, defaultGenericFontFamilies, opts.genericFontFamilies || {}); + var rule = null; + var matches = null; + + for (var i = 0; i < rules.length; ++i) { + rule = normalizeFontFace(rules[i]); + + if (genericFontFamilies[rule.family]) { + rule.family = genericFontFamilies[rule.family]; + } + + if (fontFaceMap.hasOwnProperty(rule.family)) { + matches = fontFaceMap[rule.family]; + break; + } + } // Always fallback to a known font family. + + + matches = matches || fontFaceMap[defaultFontFamily]; + + if (!matches) { + // At this point we should definitiely have a font family, but if we + // don't there is something wrong with our configuration + throw new Error("Could not find a font-family for the rule '" + ruleToString(rule) + "' and default family '" + defaultFontFamily + "'."); + } + + matches = resolveFontStretch(rule.stretch, matches); + matches = resolveFontStyle(rule.style, matches); + matches = resolveFontWeight(rule.weight, matches); + + if (!matches) { + // We should've fount + throw new Error("Failed to resolve a font for the rule '" + ruleToString(rule) + "'."); + } + + return matches; +} + +function eatWhiteSpace(input) { + return input.trimLeft(); +} + +function parseQuotedFontFamily(input, quote) { + var index = 0; + + while (index < input.length) { + var current = input.charAt(index); + + if (current === quote) { + return [input.substring(0, index), input.substring(index + 1)]; + } + + index += 1; + } // Unexpected end of input + + + return null; +} + +function parseNonQuotedFontFamily(input) { + // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + // + // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode. + // + // Breakdown of regexp: + // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit + // [a-z_] - allow a-z and underscore at beginning of input + // [a-z0-9_-]* - after that, anything goes + var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i); // non quoted value contains illegal characters + + if (match === null) { + return null; + } + + return [match[0], input.substring(match[0].length)]; +} + +var defaultFont = ["times"]; +function parseFontFamily(input) { + var result = []; + var ch, parsed; + var remaining = input.trim(); + + if (remaining === "") { + return defaultFont; + } + + if (remaining in systemFonts) { + return [systemFonts[remaining]]; + } + + while (remaining !== "") { + parsed = null; + remaining = eatWhiteSpace(remaining); + ch = remaining.charAt(0); + + switch (ch) { + case '"': + case "'": + parsed = parseQuotedFontFamily(remaining.substring(1), ch); + break; + + default: + parsed = parseNonQuotedFontFamily(remaining); + break; + } + + if (parsed === null) { + return defaultFont; + } + + result.push(parsed[0]); + remaining = eatWhiteSpace(parsed[1]); // We expect end of input or a comma separator here + + if (remaining !== "" && remaining.charAt(0) !== ",") { + return defaultFont; + } + + remaining = remaining.replace(/^,/, ""); + } + + return result; +} + +/** + * This plugin mimics the HTML5 CanvasRenderingContext2D. + * + * The goal is to provide a way for current canvas implementations to print directly to a PDF. + * + * @name context2d + * @module + */ + +(function (jsPDFAPI) { + + var ContextLayer = function ContextLayer(ctx) { + ctx = ctx || {}; + this.isStrokeTransparent = ctx.isStrokeTransparent || false; + this.strokeOpacity = ctx.strokeOpacity || 1; + this.strokeStyle = ctx.strokeStyle || "#000000"; + this.fillStyle = ctx.fillStyle || "#000000"; + this.isFillTransparent = ctx.isFillTransparent || false; + this.fillOpacity = ctx.fillOpacity || 1; + this.font = ctx.font || "10px sans-serif"; + this.textBaseline = ctx.textBaseline || "alphabetic"; + this.textAlign = ctx.textAlign || "left"; + this.lineWidth = ctx.lineWidth || 1; + this.lineJoin = ctx.lineJoin || "miter"; + this.lineCap = ctx.lineCap || "butt"; + this.path = ctx.path || []; + this.transform = typeof ctx.transform !== "undefined" ? ctx.transform.clone() : new Matrix(); + this.globalCompositeOperation = ctx.globalCompositeOperation || "normal"; + this.globalAlpha = ctx.globalAlpha || 1.0; + this.clip_path = ctx.clip_path || []; + this.currentPoint = ctx.currentPoint || new Point(); + this.miterLimit = ctx.miterLimit || 10.0; + this.lastPoint = ctx.lastPoint || new Point(); + this.lineDashOffset = ctx.lineDashOffset || 0.0; + this.lineDash = ctx.lineDash || []; + this.margin = ctx.margin || [0, 0, 0, 0]; + this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0; + this.ignoreClearRect = typeof ctx.ignoreClearRect === "boolean" ? ctx.ignoreClearRect : true; + return this; + }; //stub + + + var f2, getHorizontalCoordinateString, getVerticalCoordinateString, getHorizontalCoordinate, getVerticalCoordinate, Point, Rectangle, Matrix, _ctx; + + jsPDFAPI.events.push(["initialized", function () { + this.context2d = new Context2D(this); + f2 = this.internal.f2; + getHorizontalCoordinateString = this.internal.getCoordinateString; + getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + getHorizontalCoordinate = this.internal.getHorizontalCoordinate; + getVerticalCoordinate = this.internal.getVerticalCoordinate; + Point = this.internal.Point; + Rectangle = this.internal.Rectangle; + Matrix = this.internal.Matrix; + _ctx = new ContextLayer(); + }]); + + var Context2D = function Context2D(pdf) { + Object.defineProperty(this, "canvas", { + get: function get() { + return { + parentNode: false, + style: false + }; + } + }); + var _pdf = pdf; + Object.defineProperty(this, "pdf", { + get: function get() { + return _pdf; + } + }); + var _pageWrapXEnabled = false; + /** + * @name pageWrapXEnabled + * @type {boolean} + * @default false + */ + + Object.defineProperty(this, "pageWrapXEnabled", { + get: function get() { + return _pageWrapXEnabled; + }, + set: function set(value) { + _pageWrapXEnabled = Boolean(value); + } + }); + var _pageWrapYEnabled = false; + /** + * @name pageWrapYEnabled + * @type {boolean} + * @default true + */ + + Object.defineProperty(this, "pageWrapYEnabled", { + get: function get() { + return _pageWrapYEnabled; + }, + set: function set(value) { + _pageWrapYEnabled = Boolean(value); + } + }); + var _posX = 0; + /** + * @name posX + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "posX", { + get: function get() { + return _posX; + }, + set: function set(value) { + if (!isNaN(value)) { + _posX = value; + } + } + }); + var _posY = 0; + /** + * @name posY + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "posY", { + get: function get() { + return _posY; + }, + set: function set(value) { + if (!isNaN(value)) { + _posY = value; + } + } + }); + /** + * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off. + * @name margin + * @type {number|number[]} + * @default [0, 0, 0, 0] + */ + + Object.defineProperty(this, "margin", { + get: function get() { + return _ctx.margin; + }, + set: function set(value) { + var margin; + + if (typeof value === "number") { + margin = [value, value, value, value]; + } else { + margin = new Array(4); + margin[0] = value[0]; + margin[1] = value.length >= 2 ? value[1] : margin[0]; + margin[2] = value.length >= 3 ? value[2] : margin[0]; + margin[3] = value.length >= 4 ? value[3] : margin[1]; + } + + _ctx.margin = margin; + } + }); + var _autoPaging = false; + /** + * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the + * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new + * pages if required. + * + * Context2d supports different modes: + *
      + *
    • + * false: Auto paging is disabled. + *
    • + *
    • + * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly + * slice text in half, making it difficult to read. + *
    • + *
    • + * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting + * mostly of a single column of text. + *
    • + *
    + * @name Context2D#autoPaging + * @type {boolean|"slice"|"text"} + * @default false + */ + + Object.defineProperty(this, "autoPaging", { + get: function get() { + return _autoPaging; + }, + set: function set(value) { + _autoPaging = value; + } + }); + var lastBreak = 0; + /** + * @name lastBreak + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "lastBreak", { + get: function get() { + return lastBreak; + }, + set: function set(value) { + lastBreak = value; + } + }); + var pageBreaks = []; + /** + * Y Position of page breaks. + * @name pageBreaks + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "pageBreaks", { + get: function get() { + return pageBreaks; + }, + set: function set(value) { + pageBreaks = value; + } + }); + /** + * @name ctx + * @type {object} + * @default {} + */ + + Object.defineProperty(this, "ctx", { + get: function get() { + return _ctx; + }, + set: function set(value) { + if (value instanceof ContextLayer) { + _ctx = value; + } + } + }); + /** + * @name path + * @type {array} + * @default [] + */ + + Object.defineProperty(this, "path", { + get: function get() { + return _ctx.path; + }, + set: function set(value) { + _ctx.path = value; + } + }); + /** + * @name ctxStack + * @type {array} + * @default [] + */ + + var _ctxStack = []; + Object.defineProperty(this, "ctxStack", { + get: function get() { + return _ctxStack; + }, + set: function set(value) { + _ctxStack = value; + } + }); + /** + * Sets or returns the color, gradient, or pattern used to fill the drawing + * + * @name fillStyle + * @default #000000 + * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    + * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    + * A pattern object to use to fill the drawing (not supported by context2d) + */ + + Object.defineProperty(this, "fillStyle", { + get: function get() { + return this.ctx.fillStyle; + }, + set: function set(value) { + var rgba; + rgba = getRGBA(value); + this.ctx.fillStyle = rgba.style; + this.ctx.isFillTransparent = rgba.a === 0; + this.ctx.fillOpacity = rgba.a; + this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { + a: rgba.a + }); + this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { + a: rgba.a + }); + } + }); + /** + * Sets or returns the color, gradient, or pattern used for strokes + * + * @name strokeStyle + * @default #000000 + * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d) + * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d) + * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d) + */ + + Object.defineProperty(this, "strokeStyle", { + get: function get() { + return this.ctx.strokeStyle; + }, + set: function set(value) { + var rgba = getRGBA(value); + this.ctx.strokeStyle = rgba.style; + this.ctx.isStrokeTransparent = rgba.a === 0; + this.ctx.strokeOpacity = rgba.a; + + if (rgba.a === 0) { + this.pdf.setDrawColor(255, 255, 255); + } else if (rgba.a === 1) { + this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b); + } else { + this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b); + } + } + }); + /** + * Sets or returns the style of the end caps for a line + * + * @name lineCap + * @default butt + * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    + * round A rounded end cap is added to each end of the line
    + * square A square end cap is added to each end of the line
    + */ + + Object.defineProperty(this, "lineCap", { + get: function get() { + return this.ctx.lineCap; + }, + set: function set(value) { + if (["butt", "round", "square"].indexOf(value) !== -1) { + this.ctx.lineCap = value; + this.pdf.setLineCap(value); + } + } + }); + /** + * Sets or returns the current line width + * + * @name lineWidth + * @default 1 + * @property {number} lineWidth The current line width, in pixels + */ + + Object.defineProperty(this, "lineWidth", { + get: function get() { + return this.ctx.lineWidth; + }, + set: function set(value) { + if (!isNaN(value)) { + this.ctx.lineWidth = value; + this.pdf.setLineWidth(value); + } + } + }); + /** + * Sets or returns the type of corner created, when two lines meet + */ + + Object.defineProperty(this, "lineJoin", { + get: function get() { + return this.ctx.lineJoin; + }, + set: function set(value) { + if (["bevel", "round", "miter"].indexOf(value) !== -1) { + this.ctx.lineJoin = value; + this.pdf.setLineJoin(value); + } + } + }); + /** + * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0. + * + * @name miterLimit + * @default 10 + */ + + Object.defineProperty(this, "miterLimit", { + get: function get() { + return this.ctx.miterLimit; + }, + set: function set(value) { + if (!isNaN(value)) { + this.ctx.miterLimit = value; + this.pdf.setMiterLimit(value); + } + } + }); + Object.defineProperty(this, "textBaseline", { + get: function get() { + return this.ctx.textBaseline; + }, + set: function set(value) { + this.ctx.textBaseline = value; + } + }); + Object.defineProperty(this, "textAlign", { + get: function get() { + return this.ctx.textAlign; + }, + set: function set(value) { + if (["right", "end", "center", "left", "start"].indexOf(value) !== -1) { + this.ctx.textAlign = value; + } + } + }); + var _fontFaceMap = null; + + function getFontFaceMap(pdf, fontFaces) { + if (_fontFaceMap === null) { + var fontMap = pdf.getFontList(); + var convertedFontFaces = convertToFontFaces(fontMap); + _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces)); + } + + return _fontFaceMap; + } + + function convertToFontFaces(fontMap) { + var fontFaces = []; + Object.keys(fontMap).forEach(function (family) { + var styles = fontMap[family]; + styles.forEach(function (style) { + var fontFace = null; + + switch (style) { + case "bold": + fontFace = { + family: family, + weight: "bold" + }; + break; + + case "italic": + fontFace = { + family: family, + style: "italic" + }; + break; + + case "bolditalic": + fontFace = { + family: family, + weight: "bold", + style: "italic" + }; + break; + + case "": + case "normal": + fontFace = { + family: family + }; + break; + } // If font-face is still null here, it is a font with some styling we don't recognize and + // cannot map or it is a font added via the fontFaces option of .html(). + + + if (fontFace !== null) { + fontFace.ref = { + name: family, + style: style + }; + fontFaces.push(fontFace); + } + }); + }); + return fontFaces; + } + + var _fontFaces = null; + /** + * A map of available font-faces, as passed in the options of + * .html(). If set a limited implementation of the font style matching + * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm + * will be used. If not set it will fallback to previous behavior. + */ + + Object.defineProperty(this, "fontFaces", { + get: function get() { + return _fontFaces; + }, + set: function set(value) { + _fontFaceMap = null; + _fontFaces = value; + } + }); + Object.defineProperty(this, "font", { + get: function get() { + return this.ctx.font; + }, + set: function set(value) { + this.ctx.font = value; + var rx, matches; //source: https://stackoverflow.com/a/10136041 + // eslint-disable-next-line no-useless-escape + + rx = /^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z]+?)\s*$/i; + matches = rx.exec(value); + + if (matches !== null) { + var fontStyle = matches[1]; + var fontVariant = matches[2]; + var fontWeight = matches[3]; + var fontSize = matches[4]; + var lineHeight = matches[5]; + var fontFamily = matches[6]; + } else { + return; + } + + var rxFontSize = /^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i; + var fontSizeUnit = rxFontSize.exec(fontSize)[2]; + + if ("px" === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.internal.scaleFactor); + } else if ("em" === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); + } else { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.internal.scaleFactor); + } + + this.pdf.setFontSize(fontSize); + var parts = parseFontFamily(fontFamily); + + if (this.fontFaces) { + var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces); + var rules = parts.map(function (ff) { + return { + family: ff, + stretch: "normal", + // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?) + weight: fontWeight, + style: fontStyle + }; + }); + var font = resolveFontFace(fontFaceMap, rules); + this.pdf.setFont(font.ref.name, font.ref.style); + return; + } + + var style = ""; + + if (fontWeight === "bold" || parseInt(fontWeight, 10) >= 700 || fontStyle === "bold") { + style = "bold"; + } + + if (fontStyle === "italic") { + style += "italic"; + } + + if (style.length === 0) { + style = "normal"; + } + + var jsPdfFontName = ""; + var fallbackFonts = { + arial: "Helvetica", + Arial: "Helvetica", + verdana: "Helvetica", + Verdana: "Helvetica", + helvetica: "Helvetica", + Helvetica: "Helvetica", + "sans-serif": "Helvetica", + fixed: "Courier", + monospace: "Courier", + terminal: "Courier", + cursive: "Times", + fantasy: "Times", + serif: "Times" + }; + + for (var i = 0; i < parts.length; i++) { + if (this.pdf.internal.getFont(parts[i], style, { + noFallback: true, + disableWarning: true + }) !== undefined) { + jsPdfFontName = parts[i]; + break; + } else if (style === "bolditalic" && this.pdf.internal.getFont(parts[i], "bold", { + noFallback: true, + disableWarning: true + }) !== undefined) { + jsPdfFontName = parts[i]; + style = "bold"; + } else if (this.pdf.internal.getFont(parts[i], "normal", { + noFallback: true, + disableWarning: true + }) !== undefined) { + jsPdfFontName = parts[i]; + style = "normal"; + break; + } + } + + if (jsPdfFontName === "") { + for (var j = 0; j < parts.length; j++) { + if (fallbackFonts[parts[j]]) { + jsPdfFontName = fallbackFonts[parts[j]]; + break; + } + } + } + + jsPdfFontName = jsPdfFontName === "" ? "Times" : jsPdfFontName; + this.pdf.setFont(jsPdfFontName, style); + } + }); + Object.defineProperty(this, "globalCompositeOperation", { + get: function get() { + return this.ctx.globalCompositeOperation; + }, + set: function set(value) { + this.ctx.globalCompositeOperation = value; + } + }); + Object.defineProperty(this, "globalAlpha", { + get: function get() { + return this.ctx.globalAlpha; + }, + set: function set(value) { + this.ctx.globalAlpha = value; + } + }); + /** + * A float specifying the amount of the line dash offset. The default value is 0.0. + * + * @name lineDashOffset + * @default 0.0 + */ + + Object.defineProperty(this, "lineDashOffset", { + get: function get() { + return this.ctx.lineDashOffset; + }, + set: function set(value) { + this.ctx.lineDashOffset = value; + setLineDash.call(this); + } + }); // Not HTML API + + Object.defineProperty(this, "lineDash", { + get: function get() { + return this.ctx.lineDash; + }, + set: function set(value) { + this.ctx.lineDash = value; + setLineDash.call(this); + } + }); // Not HTML API + + Object.defineProperty(this, "ignoreClearRect", { + get: function get() { + return this.ctx.ignoreClearRect; + }, + set: function set(value) { + this.ctx.ignoreClearRect = Boolean(value); + } + }); + }; + /** + * Sets the line dash pattern used when stroking lines. + * @name setLineDash + * @function + * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern. + */ + + + Context2D.prototype.setLineDash = function (dashArray) { + this.lineDash = dashArray; + }; + /** + * gets the current line dash pattern. + * @name getLineDash + * @function + * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25]. + */ + + + Context2D.prototype.getLineDash = function () { + if (this.lineDash.length % 2) { + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value + return this.lineDash.concat(this.lineDash); + } else { + // The copied value is returned to prevent contamination from outside. + return this.lineDash.slice(); + } + }; + + Context2D.prototype.fill = function () { + pathPreProcess.call(this, "fill", false); + }; + /** + * Actually draws the path you have defined + * + * @name stroke + * @function + * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black. + */ + + + Context2D.prototype.stroke = function () { + pathPreProcess.call(this, "stroke", false); + }; + /** + * Begins a path, or resets the current + * + * @name beginPath + * @function + * @description The beginPath() method begins a path, or resets the current path. + */ + + + Context2D.prototype.beginPath = function () { + this.path = [{ + type: "begin" + }]; + }; + /** + * Moves the path to the specified point in the canvas, without creating a line + * + * @name moveTo + * @function + * @param x {Number} The x-coordinate of where to move the path to + * @param y {Number} The y-coordinate of where to move the path to + */ + + + Context2D.prototype.moveTo = function (x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.moveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.moveTo"); + } + + var pt = this.ctx.transform.applyToPoint(new Point(x, y)); + this.path.push({ + type: "mt", + x: pt.x, + y: pt.y + }); + this.ctx.lastPoint = new Point(x, y); + }; + /** + * Creates a path from the current point back to the starting point + * + * @name closePath + * @function + * @description The closePath() method creates a path from the current point back to the starting point. + */ + + + Context2D.prototype.closePath = function () { + var pathBegin = new Point(0, 0); + var i = 0; + + for (i = this.path.length - 1; i !== -1; i--) { + if (this.path[i].type === "begin") { + if (_typeof(this.path[i + 1]) === "object" && typeof this.path[i + 1].x === "number") { + pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y); + break; + } + } + } + + this.path.push({ + type: "close" + }); + this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y); + }; + /** + * Adds a new point and creates a line to that point from the last specified point in the canvas + * + * @name lineTo + * @function + * @param x The x-coordinate of where to create the line to + * @param y The y-coordinate of where to create the line to + * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line). + */ + + + Context2D.prototype.lineTo = function (x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.lineTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.lineTo"); + } + + var pt = this.ctx.transform.applyToPoint(new Point(x, y)); + this.path.push({ + type: "lt", + x: pt.x, + y: pt.y + }); + this.ctx.lastPoint = new Point(pt.x, pt.y); + }; + /** + * Clips a region of any shape and size from the original canvas + * + * @name clip + * @function + * @description The clip() method clips a region of any shape and size from the original canvas. + */ + + + Context2D.prototype.clip = function () { + this.ctx.clip_path = JSON.parse(JSON.stringify(this.path)); + pathPreProcess.call(this, null, true); + }; + /** + * Creates a cubic Bézier curve + * + * @name quadraticCurveTo + * @function + * @param cpx {Number} The x-coordinate of the Bézier control point + * @param cpy {Number} The y-coordinate of the Bézier control point + * @param x {Number} The x-coordinate of the ending point + * @param y {Number} The y-coordinate of the ending point + * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point. + */ + + + Context2D.prototype.quadraticCurveTo = function (cpx, cpy, x, y) { + if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) { + console.error("jsPDF.context2d.quadraticCurveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.quadraticCurveTo"); + } + + var pt0 = this.ctx.transform.applyToPoint(new Point(x, y)); + var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy)); + this.path.push({ + type: "qct", + x1: pt1.x, + y1: pt1.y, + x: pt0.x, + y: pt0.y + }); + this.ctx.lastPoint = new Point(pt0.x, pt0.y); + }; + /** + * Creates a cubic Bézier curve + * + * @name bezierCurveTo + * @function + * @param cp1x {Number} The x-coordinate of the first Bézier control point + * @param cp1y {Number} The y-coordinate of the first Bézier control point + * @param cp2x {Number} The x-coordinate of the second Bézier control point + * @param cp2y {Number} The y-coordinate of the second Bézier control point + * @param x {Number} The x-coordinate of the ending point + * @param y {Number} The y-coordinate of the ending point + * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point. + */ + + + Context2D.prototype.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + if (isNaN(x) || isNaN(y) || isNaN(cp1x) || isNaN(cp1y) || isNaN(cp2x) || isNaN(cp2y)) { + console.error("jsPDF.context2d.bezierCurveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.bezierCurveTo"); + } + + var pt0 = this.ctx.transform.applyToPoint(new Point(x, y)); + var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y)); + var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y)); + this.path.push({ + type: "bct", + x1: pt1.x, + y1: pt1.y, + x2: pt2.x, + y2: pt2.y, + x: pt0.x, + y: pt0.y + }); + this.ctx.lastPoint = new Point(pt0.x, pt0.y); + }; + /** + * Creates an arc/curve (used to create circles, or parts of circles) + * + * @name arc + * @function + * @param x {Number} The x-coordinate of the center of the circle + * @param y {Number} The y-coordinate of the center of the circle + * @param radius {Number} The radius of the circle + * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle) + * @param endAngle {Number} The ending angle, in radians + * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise. + * @description The arc() method creates an arc/curve (used to create circles, or parts of circles). + */ + + + Context2D.prototype.arc = function (x, y, radius, startAngle, endAngle, counterclockwise) { + if (isNaN(x) || isNaN(y) || isNaN(radius) || isNaN(startAngle) || isNaN(endAngle)) { + console.error("jsPDF.context2d.arc: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.arc"); + } + + counterclockwise = Boolean(counterclockwise); + + if (!this.ctx.transform.isIdentity) { + var xpt = this.ctx.transform.applyToPoint(new Point(x, y)); + x = xpt.x; + y = xpt.y; + var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius)); + var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0)); + radius = Math.sqrt(Math.pow(x_radPt.x - x_radPt0.x, 2) + Math.pow(x_radPt.y - x_radPt0.y, 2)); + } + + if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) { + startAngle = 0; + endAngle = 2 * Math.PI; + } + + this.path.push({ + type: "arc", + x: x, + y: y, + radius: radius, + startAngle: startAngle, + endAngle: endAngle, + counterclockwise: counterclockwise + }); // this.ctx.lastPoint(new Point(pt.x,pt.y)); + }; + /** + * Creates an arc/curve between two tangents + * + * @name arcTo + * @function + * @param x1 {Number} The x-coordinate of the first tangent + * @param y1 {Number} The y-coordinate of the first tangent + * @param x2 {Number} The x-coordinate of the second tangent + * @param y2 {Number} The y-coordinate of the second tangent + * @param radius The radius of the arc + * @description The arcTo() method creates an arc/curve between two tangents on the canvas. + */ + // eslint-disable-next-line no-unused-vars + + + Context2D.prototype.arcTo = function (x1, y1, x2, y2, radius) { + throw new Error("arcTo not implemented."); + }; + /** + * Creates a rectangle + * + * @name rect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The rect() method creates a rectangle. + */ + + + Context2D.prototype.rect = function (x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.rect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.rect"); + } + + this.moveTo(x, y); + this.lineTo(x + w, y); + this.lineTo(x + w, y + h); + this.lineTo(x, y + h); + this.lineTo(x, y); + this.lineTo(x + w, y); + this.lineTo(x, y); + }; + /** + * Draws a "filled" rectangle + * + * @name fillRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The fillRect() method draws a "filled" rectangle. The default color of the fill is black. + */ + + + Context2D.prototype.fillRect = function (x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.fillRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.fillRect"); + } + + if (isFillTransparent.call(this)) { + return; + } + + var tmp = {}; + + if (this.lineCap !== "butt") { + tmp.lineCap = this.lineCap; + this.lineCap = "butt"; + } + + if (this.lineJoin !== "miter") { + tmp.lineJoin = this.lineJoin; + this.lineJoin = "miter"; + } + + this.beginPath(); + this.rect(x, y, w, h); + this.fill(); + + if (tmp.hasOwnProperty("lineCap")) { + this.lineCap = tmp.lineCap; + } + + if (tmp.hasOwnProperty("lineJoin")) { + this.lineJoin = tmp.lineJoin; + } + }; + /** + * Draws a rectangle (no fill) + * + * @name strokeRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black. + */ + + + Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.strokeRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.strokeRect"); + } + + if (isStrokeTransparent.call(this)) { + return; + } + + this.beginPath(); + this.rect(x, y, w, h); + this.stroke(); + }; + /** + * Clears the specified pixels within a given rectangle + * + * @name clearRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle to clear, in pixels + * @param h {Number} The height of the rectangle to clear, in pixels + * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    + * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set. + * This results in all calls to clearRect() to do nothing, and keep the canvas transparent. + * This flag is stored in the save/restore context and is managed the same way as other drawing states. + * + */ + + + Context2D.prototype.clearRect = function (x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.clearRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.clearRect"); + } + + if (this.ignoreClearRect) { + return; + } + + this.fillStyle = "#ffffff"; + this.fillRect(x, y, w, h); + }; + /** + * Saves the state of the current context + * + * @name save + * @function + */ + + + Context2D.prototype.save = function (doStackPush) { + doStackPush = typeof doStackPush === "boolean" ? doStackPush : true; + var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber; + + for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) { + this.pdf.setPage(i + 1); + this.pdf.internal.out("q"); + } + + this.pdf.setPage(tmpPageNumber); + + if (doStackPush) { + this.ctx.fontSize = this.pdf.internal.getFontSize(); + var ctx = new ContextLayer(this.ctx); + this.ctxStack.push(this.ctx); + this.ctx = ctx; + } + }; + /** + * Returns previously saved path state and attributes + * + * @name restore + * @function + */ + + + Context2D.prototype.restore = function (doStackPop) { + doStackPop = typeof doStackPop === "boolean" ? doStackPop : true; + var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber; + + for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) { + this.pdf.setPage(i + 1); + this.pdf.internal.out("Q"); + } + + this.pdf.setPage(tmpPageNumber); + + if (doStackPop && this.ctxStack.length !== 0) { + this.ctx = this.ctxStack.pop(); + this.fillStyle = this.ctx.fillStyle; + this.strokeStyle = this.ctx.strokeStyle; + this.font = this.ctx.font; + this.lineCap = this.ctx.lineCap; + this.lineWidth = this.ctx.lineWidth; + this.lineJoin = this.ctx.lineJoin; + this.lineDash = this.ctx.lineDash; + this.lineDashOffset = this.ctx.lineDashOffset; + } + }; + /** + * @name toDataURL + * @function + */ + + + Context2D.prototype.toDataURL = function () { + throw new Error("toDataUrl not implemented."); + }; //helper functions + + /** + * Get the decimal values of r, g, b and a + * + * @name getRGBA + * @function + * @private + * @ignore + */ + + + var getRGBA = function getRGBA(style) { + var rxRgb = /rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/; + var rxRgba = /rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/; + var rxTransparent = /transparent|rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*0+\s*\)/; + var r, g, b, a; + + if (style.isCanvasGradient === true) { + style = style.getColor(); + } + + if (!style) { + return { + r: 0, + g: 0, + b: 0, + a: 0, + style: style + }; + } + + if (rxTransparent.test(style)) { + r = 0; + g = 0; + b = 0; + a = 0; + } else { + var matches = rxRgb.exec(style); + + if (matches !== null) { + r = parseInt(matches[1]); + g = parseInt(matches[2]); + b = parseInt(matches[3]); + a = 1; + } else { + matches = rxRgba.exec(style); + + if (matches !== null) { + r = parseInt(matches[1]); + g = parseInt(matches[2]); + b = parseInt(matches[3]); + a = parseFloat(matches[4]); + } else { + a = 1; + + if (typeof style === "string" && style.charAt(0) !== "#") { + var rgbColor = new RGBColor(style); + + if (rgbColor.ok) { + style = rgbColor.toHex(); + } else { + style = "#000000"; + } + } + + if (style.length === 4) { + r = style.substring(1, 2); + r += r; + g = style.substring(2, 3); + g += g; + b = style.substring(3, 4); + b += b; + } else { + r = style.substring(1, 3); + g = style.substring(3, 5); + b = style.substring(5, 7); + } + + r = parseInt(r, 16); + g = parseInt(g, 16); + b = parseInt(b, 16); + } + } + } + + return { + r: r, + g: g, + b: b, + a: a, + style: style + }; + }; + /** + * @name isFillTransparent + * @function + * @private + * @ignore + * @returns {Boolean} + */ + + + var isFillTransparent = function isFillTransparent() { + return this.ctx.isFillTransparent || this.globalAlpha == 0; + }; + /** + * @name isStrokeTransparent + * @function + * @private + * @ignore + * @returns {Boolean} + */ + + + var isStrokeTransparent = function isStrokeTransparent() { + return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0); + }; + /** + * Draws "filled" text on the canvas + * + * @name fillText + * @function + * @param text {String} Specifies the text that will be written on the canvas + * @param x {Number} The x coordinate where to start painting the text (relative to the canvas) + * @param y {Number} The y coordinate where to start painting the text (relative to the canvas) + * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels + * @description The fillText() method draws filled text on the canvas. The default color of the text is black. + */ + + + Context2D.prototype.fillText = function (text, x, y, maxWidth) { + if (isNaN(x) || isNaN(y) || typeof text !== "string") { + console.error("jsPDF.context2d.fillText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.fillText"); + } + + maxWidth = isNaN(maxWidth) ? undefined : maxWidth; + + if (isFillTransparent.call(this)) { + return; + } + + var degs = rad2deg(this.ctx.transform.rotation); // We only use X axis as scale hint + + var scale = this.ctx.transform.scaleX; + putText.call(this, { + text: text, + x: x, + y: y, + scale: scale, + angle: degs, + align: this.textAlign, + maxWidth: maxWidth + }); + }; + /** + * Draws text on the canvas (no fill) + * + * @name strokeText + * @function + * @param text {String} Specifies the text that will be written on the canvas + * @param x {Number} The x coordinate where to start painting the text (relative to the canvas) + * @param y {Number} The y coordinate where to start painting the text (relative to the canvas) + * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels + * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black. + */ + + + Context2D.prototype.strokeText = function (text, x, y, maxWidth) { + if (isNaN(x) || isNaN(y) || typeof text !== "string") { + console.error("jsPDF.context2d.strokeText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.strokeText"); + } + + if (isStrokeTransparent.call(this)) { + return; + } + + maxWidth = isNaN(maxWidth) ? undefined : maxWidth; + var degs = rad2deg(this.ctx.transform.rotation); + var scale = this.ctx.transform.scaleX; + putText.call(this, { + text: text, + x: x, + y: y, + scale: scale, + renderingMode: "stroke", + angle: degs, + align: this.textAlign, + maxWidth: maxWidth + }); + }; + /** + * Returns an object that contains the width of the specified text + * + * @name measureText + * @function + * @param text {String} The text to be measured + * @description The measureText() method returns an object that contains the width of the specified text, in pixels. + * @returns {Number} + */ + + + Context2D.prototype.measureText = function (text) { + if (typeof text !== "string") { + console.error("jsPDF.context2d.measureText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.measureText"); + } + + var pdf = this.pdf; + var k = this.pdf.internal.scaleFactor; + var fontSize = pdf.internal.getFontSize(); + var txtWidth = pdf.getStringUnitWidth(text) * fontSize / pdf.internal.scaleFactor; + txtWidth *= Math.round(k * 96 / 72 * 10000) / 10000; + + var TextMetrics = function TextMetrics(options) { + options = options || {}; + + var _width = options.width || 0; + + Object.defineProperty(this, "width", { + get: function get() { + return _width; + } + }); + return this; + }; + + return new TextMetrics({ + width: txtWidth + }); + }; //Transformations + + /** + * Scales the current drawing bigger or smaller + * + * @name scale + * @function + * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.) + * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.) + * @description The scale() method scales the current drawing, bigger or smaller. + */ + + + Context2D.prototype.scale = function (scalewidth, scaleheight) { + if (isNaN(scalewidth) || isNaN(scaleheight)) { + console.error("jsPDF.context2d.scale: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.scale"); + } + + var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Rotates the current drawing + * + * @name rotate + * @function + * @param angle {Number} The rotation angle, in radians. + * @description To calculate from degrees to radians: degrees*Math.PI/180.
    + * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180 + */ + + + Context2D.prototype.rotate = function (angle) { + if (isNaN(angle)) { + console.error("jsPDF.context2d.rotate: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.rotate"); + } + + var matrix = new Matrix(Math.cos(angle), Math.sin(angle), -Math.sin(angle), Math.cos(angle), 0.0, 0.0); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Remaps the (0,0) position on the canvas + * + * @name translate + * @function + * @param x {Number} The value to add to horizontal (x) coordinates + * @param y {Number} The value to add to vertical (y) coordinates + * @description The translate() method remaps the (0,0) position on the canvas. + */ + + + Context2D.prototype.translate = function (x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.translate: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.translate"); + } + + var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Replaces the current transformation matrix for the drawing + * + * @name transform + * @function + * @param a {Number} Horizontal scaling + * @param b {Number} Horizontal skewing + * @param c {Number} Vertical skewing + * @param d {Number} Vertical scaling + * @param e {Number} Horizontal moving + * @param f {Number} Vertical moving + * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context. + */ + + + Context2D.prototype.transform = function (a, b, c, d, e, f) { + if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) { + console.error("jsPDF.context2d.transform: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.transform"); + } + + var matrix = new Matrix(a, b, c, d, e, f); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Resets the current transform to the identity matrix. Then runs transform() + * + * @name setTransform + * @function + * @param a {Number} Horizontal scaling + * @param b {Number} Horizontal skewing + * @param c {Number} Vertical skewing + * @param d {Number} Vertical scaling + * @param e {Number} Horizontal moving + * @param f {Number} Vertical moving + * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context. + */ + + + Context2D.prototype.setTransform = function (a, b, c, d, e, f) { + a = isNaN(a) ? 1 : a; + b = isNaN(b) ? 0 : b; + c = isNaN(c) ? 0 : c; + d = isNaN(d) ? 1 : d; + e = isNaN(e) ? 0 : e; + f = isNaN(f) ? 0 : f; + this.ctx.transform = new Matrix(a, b, c, d, e, f); + }; + + var hasMargins = function hasMargins() { + return this.margin[0] > 0 || this.margin[1] > 0 || this.margin[2] > 0 || this.margin[3] > 0; + }; + /** + * Draws an image, canvas, or video onto the canvas + * + * @function + * @param img {} Specifies the image, canvas, or video element to use + * @param sx {Number} Optional. The x coordinate where to start clipping + * @param sy {Number} Optional. The y coordinate where to start clipping + * @param swidth {Number} Optional. The width of the clipped image + * @param sheight {Number} Optional. The height of the clipped image + * @param x {Number} The x coordinate where to place the image on the canvas + * @param y {Number} The y coordinate where to place the image on the canvas + * @param width {Number} Optional. The width of the image to use (stretch or reduce the image) + * @param height {Number} Optional. The height of the image to use (stretch or reduce the image) + */ + + + Context2D.prototype.drawImage = function (img, sx, sy, swidth, sheight, x, y, width, height) { + var imageProperties = this.pdf.getImageProperties(img); + var factorX = 1; + var factorY = 1; + var clipFactorX = 1; + var clipFactorY = 1; + + if (typeof swidth !== "undefined" && typeof width !== "undefined") { + clipFactorX = width / swidth; + clipFactorY = height / sheight; + factorX = imageProperties.width / swidth * width / swidth; + factorY = imageProperties.height / sheight * height / sheight; + } //is sx and sy are set and x and y not, set x and y with values of sx and sy + + + if (typeof x === "undefined") { + x = sx; + y = sy; + sx = 0; + sy = 0; + } + + if (typeof swidth !== "undefined" && typeof width === "undefined") { + width = swidth; + height = sheight; + } + + if (typeof swidth === "undefined" && typeof width === "undefined") { + width = imageProperties.width; + height = imageProperties.height; + } + + var decomposedTransformationMatrix = this.ctx.transform.decompose(); + var angle = rad2deg(decomposedTransformationMatrix.rotate.shx); + var matrix = new Matrix(); + matrix = matrix.multiply(decomposedTransformationMatrix.translate); + matrix = matrix.multiply(decomposedTransformationMatrix.skew); + matrix = matrix.multiply(decomposedTransformationMatrix.scale); + var xRect = matrix.applyToRectangle(new Rectangle(x - sx * clipFactorX, y - sy * clipFactorY, swidth * factorX, sheight * factorY)); + var pageArray = getPagesByPath.call(this, xRect); + var pages = []; + + for (var ii = 0; ii < pageArray.length; ii += 1) { + if (pages.indexOf(pageArray[ii]) === -1) { + pages.push(pageArray[ii]); + } + } + + sortPages(pages); + var clipPath; + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + + for (var i = min; i < max + 1; i++) { + this.pdf.setPage(i); + var pageWidthMinusMargins = this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1]; + var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = this.pdf.internal.pageSize.height - this.posY - this.margin[0] - this.margin[2]; + var pageHeightMinusMargins = this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var previousPageHeightSum = i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo(clipPath, this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset); + drawPaths.call(this, "fill", true); + this.path = tmpPaths; + } + + var tmpRect = JSON.parse(JSON.stringify(xRect)); + tmpRect = pathPositionRedo([tmpRect], this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset)[0]; + var needsClipping = (i > min || i < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf.rect(this.margin[3], this.margin[0], pageWidthMinusMargins, pageHeightMinusMargins, null).clip().discardPath(); + } + + this.pdf.addImage(img, "JPEG", tmpRect.x, tmpRect.y, tmpRect.w, tmpRect.h, null, null, angle); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + } else { + this.pdf.addImage(img, "JPEG", xRect.x, xRect.y, xRect.w, xRect.h, null, null, angle); + } + }; + + var getPagesByPath = function getPagesByPath(path, pageWrapX, pageWrapY) { + var result = []; + pageWrapX = pageWrapX || this.pdf.internal.pageSize.width; + pageWrapY = pageWrapY || this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var yOffset = this.posY + this.ctx.prevPageLastElemOffset; + + switch (path.type) { + default: + case "mt": + case "lt": + result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1); + break; + + case "arc": + result.push(Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1); + result.push(Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1); + break; + + case "qct": + var rectOfQuadraticCurve = getQuadraticCurveBoundary(this.ctx.lastPoint.x, this.ctx.lastPoint.y, path.x1, path.y1, path.x, path.y); + result.push(Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) / pageWrapY) + 1); + break; + + case "bct": + var rectOfBezierCurve = getBezierCurveBoundary(this.ctx.lastPoint.x, this.ctx.lastPoint.y, path.x1, path.y1, path.x2, path.y2, path.x, path.y); + result.push(Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY) + 1); + break; + + case "rect": + result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1); + } + + for (var i = 0; i < result.length; i += 1) { + while (this.pdf.internal.getNumberOfPages() < result[i]) { + addPage.call(this); + } + } + + return result; + }; + + var addPage = function addPage() { + var fillStyle = this.fillStyle; + var strokeStyle = this.strokeStyle; + var font = this.font; + var lineCap = this.lineCap; + var lineWidth = this.lineWidth; + var lineJoin = this.lineJoin; + this.pdf.addPage(); + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.font = font; + this.lineCap = lineCap; + this.lineWidth = lineWidth; + this.lineJoin = lineJoin; + }; + + var pathPositionRedo = function pathPositionRedo(paths, x, y) { + for (var i = 0; i < paths.length; i++) { + switch (paths[i].type) { + case "bct": + paths[i].x2 += x; + paths[i].y2 += y; + + case "qct": + paths[i].x1 += x; + paths[i].y1 += y; + + case "mt": + case "lt": + case "arc": + default: + paths[i].x += x; + paths[i].y += y; + } + } + + return paths; + }; + + var sortPages = function sortPages(pages) { + return pages.sort(function (a, b) { + return a - b; + }); + }; + + var pathPreProcess = function pathPreProcess(rule, isClip) { + var fillStyle = this.fillStyle; + var strokeStyle = this.strokeStyle; + var lineCap = this.lineCap; + var oldLineWidth = this.lineWidth; + var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX); + var lineJoin = this.lineJoin; + var origPath = JSON.parse(JSON.stringify(this.path)); + var xPath = JSON.parse(JSON.stringify(this.path)); + var clipPath; + var tmpPath; + var pages = []; + + for (var i = 0; i < xPath.length; i++) { + if (typeof xPath[i].x !== "undefined") { + var page = getPagesByPath.call(this, xPath[i]); + + for (var ii = 0; ii < page.length; ii += 1) { + if (pages.indexOf(page[ii]) === -1) { + pages.push(page[ii]); + } + } + } + } + + for (var j = 0; j < pages.length; j++) { + while (this.pdf.internal.getNumberOfPages() < pages[j]) { + addPage.call(this); + } + } + + sortPages(pages); + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + + for (var k = min; k < max + 1; k++) { + this.pdf.setPage(k); + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.lineCap = lineCap; + this.lineWidth = lineWidth; + this.lineJoin = lineJoin; + var pageWidthMinusMargins = this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1]; + var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = this.pdf.internal.pageSize.height - this.posY - this.margin[0] - this.margin[2]; + var pageHeightMinusMargins = this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var previousPageHeightSum = k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo(clipPath, this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset); + drawPaths.call(this, rule, true); + this.path = tmpPaths; + } + + tmpPath = JSON.parse(JSON.stringify(origPath)); + this.path = pathPositionRedo(tmpPath, this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset); + + if (isClip === false || k === 0) { + var needsClipping = (k > min || k < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf.rect(this.margin[3], this.margin[0], pageWidthMinusMargins, pageHeightMinusMargins, null).clip().discardPath(); + } + + drawPaths.call(this, rule, isClip); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + + this.lineWidth = oldLineWidth; + } + } else { + this.lineWidth = lineWidth; + drawPaths.call(this, rule, isClip); + this.lineWidth = oldLineWidth; + } + + this.path = origPath; + }; + /** + * Processes the paths + * + * @function + * @param rule {String} + * @param isClip {Boolean} + * @private + * @ignore + */ + + + var drawPaths = function drawPaths(rule, isClip) { + if (rule === "stroke" && !isClip && isStrokeTransparent.call(this)) { + return; + } + + if (rule !== "stroke" && !isClip && isFillTransparent.call(this)) { + return; + } + + var moves = []; //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha; + + var delta; + var xPath = this.path; + + for (var i = 0; i < xPath.length; i++) { + var pt = xPath[i]; + + switch (pt.type) { + case "begin": + moves.push({ + begin: true + }); + break; + + case "close": + moves.push({ + close: true + }); + break; + + case "mt": + moves.push({ + start: pt, + deltas: [], + abs: [] + }); + break; + + case "lt": + var iii = moves.length; + + if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) { + delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y]; + + if (iii > 0) { + for (iii; iii >= 0; iii--) { + if (moves[iii - 1].close !== true && moves[iii - 1].begin !== true) { + moves[iii - 1].deltas.push(delta); + moves[iii - 1].abs.push(pt); + break; + } + } + } + } + + break; + + case "bct": + delta = [pt.x1 - xPath[i - 1].x, pt.y1 - xPath[i - 1].y, pt.x2 - xPath[i - 1].x, pt.y2 - xPath[i - 1].y, pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y]; + moves[moves.length - 1].deltas.push(delta); + break; + + case "qct": + var x1 = xPath[i - 1].x + 2.0 / 3.0 * (pt.x1 - xPath[i - 1].x); + var y1 = xPath[i - 1].y + 2.0 / 3.0 * (pt.y1 - xPath[i - 1].y); + var x2 = pt.x + 2.0 / 3.0 * (pt.x1 - pt.x); + var y2 = pt.y + 2.0 / 3.0 * (pt.y1 - pt.y); + var x3 = pt.x; + var y3 = pt.y; + delta = [x1 - xPath[i - 1].x, y1 - xPath[i - 1].y, x2 - xPath[i - 1].x, y2 - xPath[i - 1].y, x3 - xPath[i - 1].x, y3 - xPath[i - 1].y]; + moves[moves.length - 1].deltas.push(delta); + break; + + case "arc": + moves.push({ + deltas: [], + abs: [], + arc: true + }); + + if (Array.isArray(moves[moves.length - 1].abs)) { + moves[moves.length - 1].abs.push(pt); + } + + break; + } + } + + var style; + + if (!isClip) { + if (rule === "stroke") { + style = "stroke"; + } else { + style = "fill"; + } + } else { + style = null; + } + + var began = false; + + for (var k = 0; k < moves.length; k++) { + if (moves[k].arc) { + var arcs = moves[k].abs; + + for (var ii = 0; ii < arcs.length; ii++) { + var arc = arcs[ii]; + + if (arc.type === "arc") { + drawArc.call(this, arc.x, arc.y, arc.radius, arc.startAngle, arc.endAngle, arc.counterclockwise, undefined, isClip, !began); + } else { + drawLine.call(this, arc.x, arc.y); + } + + began = true; + } + } else if (moves[k].close === true) { + this.pdf.internal.out("h"); + began = false; + } else if (moves[k].begin !== true) { + var x = moves[k].start.x; + var y = moves[k].start.y; + drawLines.call(this, moves[k].deltas, x, y); + began = true; + } + } + + if (style) { + putStyle.call(this, style); + } + + if (isClip) { + doClip.call(this); + } + }; + + var getBaseline = function getBaseline(y) { + var height = this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor; + var descent = height * (this.pdf.internal.getLineHeightFactor() - 1); + + switch (this.ctx.textBaseline) { + case "bottom": + return y - descent; + + case "top": + return y + height - descent; + + case "hanging": + return y + height - 2 * descent; + + case "middle": + return y + height / 2 - descent; + + case "ideographic": + // TODO not implemented + return y; + + case "alphabetic": + default: + return y; + } + }; + + var getTextBottom = function getTextBottom(yBaseLine) { + var height = this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor; + var descent = height * (this.pdf.internal.getLineHeightFactor() - 1); + return yBaseLine + descent; + }; + + Context2D.prototype.createLinearGradient = function createLinearGradient() { + var canvasGradient = function canvasGradient() {}; + + canvasGradient.colorStops = []; + + canvasGradient.addColorStop = function (offset, color) { + this.colorStops.push([offset, color]); + }; + + canvasGradient.getColor = function () { + if (this.colorStops.length === 0) { + return "#000000"; + } + + return this.colorStops[0][1]; + }; + + canvasGradient.isCanvasGradient = true; + return canvasGradient; + }; + + Context2D.prototype.createPattern = function createPattern() { + return this.createLinearGradient(); + }; + + Context2D.prototype.createRadialGradient = function createRadialGradient() { + return this.createLinearGradient(); + }; + /** + * + * @param x Edge point X + * @param y Edge point Y + * @param r Radius + * @param a1 start angle + * @param a2 end angle + * @param counterclockwise + * @param style + * @param isClip + */ + + + var drawArc = function drawArc(x, y, r, a1, a2, counterclockwise, style, isClip, includeMove) { + // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html + var curves = createArc.call(this, r, a1, a2, counterclockwise); + + for (var i = 0; i < curves.length; i++) { + var curve = curves[i]; + + if (i === 0) { + if (includeMove) { + doMove.call(this, curve.x1 + x, curve.y1 + y); + } else { + drawLine.call(this, curve.x1 + x, curve.y1 + y); + } + } + + drawCurve.call(this, x, y, curve.x2, curve.y2, curve.x3, curve.y3, curve.x4, curve.y4); + } + + if (!isClip) { + putStyle.call(this, style); + } else { + doClip.call(this); + } + }; + + var putStyle = function putStyle(style) { + switch (style) { + case "stroke": + this.pdf.internal.out("S"); + break; + + case "fill": + this.pdf.internal.out("f"); + break; + } + }; + + var doClip = function doClip() { + this.pdf.clip(); + this.pdf.discardPath(); + }; + + var doMove = function doMove(x, y) { + this.pdf.internal.out(getHorizontalCoordinateString(x) + " " + getVerticalCoordinateString(y) + " m"); + }; + + var putText = function putText(options) { + var textAlign; + + switch (options.align) { + case "right": + case "end": + textAlign = "right"; + break; + + case "center": + textAlign = "center"; + break; + + case "left": + case "start": + default: + textAlign = "left"; + break; + } + + var textDimensions = this.pdf.getTextDimensions(options.text); + var yBaseLine = getBaseline.call(this, options.y); + var yBottom = getTextBottom.call(this, yBaseLine); + var yTop = yBottom - textDimensions.h; + var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine)); + var decomposedTransformationMatrix = this.ctx.transform.decompose(); + var matrix = new Matrix(); + matrix = matrix.multiply(decomposedTransformationMatrix.translate); + matrix = matrix.multiply(decomposedTransformationMatrix.skew); + matrix = matrix.multiply(decomposedTransformationMatrix.scale); + var baselineRect = this.ctx.transform.applyToRectangle(new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)); + var textBounds = matrix.applyToRectangle(new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)); + var pageArray = getPagesByPath.call(this, textBounds); + var pages = []; + + for (var ii = 0; ii < pageArray.length; ii += 1) { + if (pages.indexOf(pageArray[ii]) === -1) { + pages.push(pageArray[ii]); + } + } + + sortPages(pages); + var clipPath, oldSize, oldLineWidth; + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + + for (var i = min; i < max + 1; i++) { + this.pdf.setPage(i); + var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = this.pdf.internal.pageSize.height - this.posY - this.margin[0] - this.margin[2]; + var pageHeightMinusBottomMargin = this.pdf.internal.pageSize.height - this.margin[2]; + var pageHeightMinusMargins = pageHeightMinusBottomMargin - this.margin[0]; + var pageWidthMinusRightMargin = this.pdf.internal.pageSize.width - this.margin[1]; + var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3]; + var previousPageHeightSum = i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo(clipPath, this.posX + this.margin[3], -1 * previousPageHeightSum + topMargin); + drawPaths.call(this, "fill", true); + this.path = tmpPaths; + } + + var textBoundsOnPage = pathPositionRedo([JSON.parse(JSON.stringify(textBounds))], this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset)[0]; + + if (options.scale >= 0.01) { + oldSize = this.pdf.internal.getFontSize(); + this.pdf.setFontSize(oldSize * options.scale); + oldLineWidth = this.lineWidth; + this.lineWidth = oldLineWidth * options.scale; + } + + var doSlice = this.autoPaging !== "text"; + + if (doSlice || textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin) { + if (doSlice || textBoundsOnPage.y >= topMargin && textBoundsOnPage.x <= pageWidthMinusRightMargin) { + var croppedText = doSlice ? options.text : this.pdf.splitTextToSize(options.text, options.maxWidth || pageWidthMinusRightMargin - textBoundsOnPage.x)[0]; + var baseLineRectOnPage = pathPositionRedo([JSON.parse(JSON.stringify(baselineRect))], this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset)[0]; + var needsClipping = doSlice && (i > min || i < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf.rect(this.margin[3], this.margin[0], pageWidthMinusMargins, pageHeightMinusMargins, null).clip().discardPath(); + } + + this.pdf.text(croppedText, baseLineRectOnPage.x, baseLineRectOnPage.y, { + angle: options.angle, + align: textAlign, + renderingMode: options.renderingMode + }); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + } else { + // This text is the last element of the page, but it got cut off due to the margin + // so we render it in the next page + if (textBoundsOnPage.y < pageHeightMinusBottomMargin) { + // As a result, all other elements have their y offset increased + this.ctx.prevPageLastElemOffset += pageHeightMinusBottomMargin - textBoundsOnPage.y; + } + } + + if (options.scale >= 0.01) { + this.pdf.setFontSize(oldSize); + this.lineWidth = oldLineWidth; + } + } + } else { + if (options.scale >= 0.01) { + oldSize = this.pdf.internal.getFontSize(); + this.pdf.setFontSize(oldSize * options.scale); + oldLineWidth = this.lineWidth; + this.lineWidth = oldLineWidth * options.scale; + } + + this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, { + angle: options.angle, + align: textAlign, + renderingMode: options.renderingMode, + maxWidth: options.maxWidth + }); + + if (options.scale >= 0.01) { + this.pdf.setFontSize(oldSize); + this.lineWidth = oldLineWidth; + } + } + }; + + var drawLine = function drawLine(x, y, prevX, prevY) { + prevX = prevX || 0; + prevY = prevY || 0; + this.pdf.internal.out(getHorizontalCoordinateString(x + prevX) + " " + getVerticalCoordinateString(y + prevY) + " l"); + }; + + var drawLines = function drawLines(lines, x, y) { + return this.pdf.lines(lines, x, y, null, null); + }; + + var drawCurve = function drawCurve(x, y, x1, y1, x2, y2, x3, y3) { + this.pdf.internal.out([f2(getHorizontalCoordinate(x1 + x)), f2(getVerticalCoordinate(y1 + y)), f2(getHorizontalCoordinate(x2 + x)), f2(getVerticalCoordinate(y2 + y)), f2(getHorizontalCoordinate(x3 + x)), f2(getVerticalCoordinate(y3 + y)), "c"].join(" ")); + }; + /** + * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius. + * + * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. + * @function createArc + */ + + + var createArc = function createArc(radius, startAngle, endAngle, anticlockwise) { + var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below + + var twoPi = Math.PI * 2; + var halfPi = Math.PI / 2.0; + + while (startAngle > endAngle) { + startAngle = startAngle - twoPi; + } + + var totalAngle = Math.abs(endAngle - startAngle); + + if (totalAngle < twoPi) { + if (anticlockwise) { + totalAngle = twoPi - totalAngle; + } + } // Compute the sequence of arc curves, up to PI/2 at a time. + + + var curves = []; // clockwise or counterclockwise + + var sgn = anticlockwise ? -1 : +1; + var a1 = startAngle; + + for (; totalAngle > EPSILON;) { + var remain = sgn * Math.min(totalAngle, halfPi); + var a2 = a1 + remain; + curves.push(createSmallArc.call(this, radius, a1, a2)); + totalAngle -= Math.abs(a2 - a1); + a1 = a2; + } + + return curves; + }; + /** + * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r. + * + * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. + * + * This algorithm is based on the approach described in: A. Riškus, "Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa," Information Technology and Control, 35(4), 2006 pp. 371-378. + */ + + + var createSmallArc = function createSmallArc(r, a1, a2) { + var a = (a2 - a1) / 2.0; + var x4 = r * Math.cos(a); + var y4 = r * Math.sin(a); + var x1 = x4; + var y1 = -y4; + var q1 = x1 * x1 + y1 * y1; + var q2 = q1 + x1 * x4 + y1 * y4; + var k2 = 4 / 3 * (Math.sqrt(2 * q1 * q2) - q2) / (x1 * y4 - y1 * x4); + var x2 = x1 - k2 * y1; + var y2 = y1 + k2 * x1; + var x3 = x2; + var y3 = -y2; + var ar = a + a1; + var cos_ar = Math.cos(ar); + var sin_ar = Math.sin(ar); + return { + x1: r * Math.cos(a1), + y1: r * Math.sin(a1), + x2: x2 * cos_ar - y2 * sin_ar, + y2: x2 * sin_ar + y2 * cos_ar, + x3: x3 * cos_ar - y3 * sin_ar, + y3: x3 * sin_ar + y3 * cos_ar, + x4: r * Math.cos(a2), + y4: r * Math.sin(a2) + }; + }; + + var rad2deg = function rad2deg(value) { + return value * 180 / Math.PI; + }; + + var getQuadraticCurveBoundary = function getQuadraticCurveBoundary(sx, sy, cpx, cpy, ex, ey) { + var midX1 = sx + (cpx - sx) * 0.5; + var midY1 = sy + (cpy - sy) * 0.5; + var midX2 = ex + (cpx - ex) * 0.5; + var midY2 = ey + (cpy - ey) * 0.5; + var resultX1 = Math.min(sx, ex, midX1, midX2); + var resultX2 = Math.max(sx, ex, midX1, midX2); + var resultY1 = Math.min(sy, ey, midY1, midY2); + var resultY2 = Math.max(sy, ey, midY1, midY2); + return new Rectangle(resultX1, resultY1, resultX2 - resultX1, resultY2 - resultY1); + }; //De Casteljau algorithm + + + var getBezierCurveBoundary = function getBezierCurveBoundary(ax, ay, bx, by, cx, cy, dx, dy) { + var tobx = bx - ax; + var toby = by - ay; + var tocx = cx - bx; + var tocy = cy - by; + var todx = dx - cx; + var tody = dy - cy; + var precision = 40; + var d, i, px, py, qx, qy, rx, ry, tx, ty, sx, sy, x, y, minx, miny, maxx, maxy, toqx, toqy, torx, tory, totx, toty; + + for (i = 0; i < precision + 1; i++) { + d = i / precision; + px = ax + d * tobx; + py = ay + d * toby; + qx = bx + d * tocx; + qy = by + d * tocy; + rx = cx + d * todx; + ry = cy + d * tody; + toqx = qx - px; + toqy = qy - py; + torx = rx - qx; + tory = ry - qy; + sx = px + d * toqx; + sy = py + d * toqy; + tx = qx + d * torx; + ty = qy + d * tory; + totx = tx - sx; + toty = ty - sy; + x = sx + d * totx; + y = sy + d * toty; + + if (i == 0) { + minx = x; + miny = y; + maxx = x; + maxy = y; + } else { + minx = Math.min(minx, x); + miny = Math.min(miny, y); + maxx = Math.max(maxx, x); + maxy = Math.max(maxy, y); + } + } + + return new Rectangle(Math.round(minx), Math.round(miny), Math.round(maxx - minx), Math.round(maxy - miny)); + }; + + var getPrevLineDashValue = function getPrevLineDashValue(lineDash, lineDashOffset) { + return JSON.stringify({ + lineDash: lineDash, + lineDashOffset: lineDashOffset + }); + }; + + var setLineDash = function setLineDash() { + // Avoid unnecessary line dash declarations. + if (!this.prevLineDash && !this.ctx.lineDash.length && !this.ctx.lineDashOffset) { + return; + } // Avoid unnecessary line dash declarations. + + + var nextLineDash = getPrevLineDashValue(this.ctx.lineDash, this.ctx.lineDashOffset); + + if (this.prevLineDash !== nextLineDash) { + this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset); + this.prevLineDash = nextLineDash; + } + }; +})(jsPDF.API); + +/** + * @license + * jsPDF filters PlugIn + * Copyright (c) 2014 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +(function (jsPDFAPI) { + + var ASCII85Encode = function ASCII85Encode(a) { + var b, c, d, e, f, g, h, i, j, k; // eslint-disable-next-line no-control-regex + + for (!/[^\x00-\xFF]/.test(a), b = "\x00\x00\x00\x00".slice(a.length % 4 || 4), a += b, c = [], d = 0, e = a.length; e > d; d += 4) { + f = (a.charCodeAt(d) << 24) + (a.charCodeAt(d + 1) << 16) + (a.charCodeAt(d + 2) << 8) + a.charCodeAt(d + 3), 0 !== f ? (k = f % 85, f = (f - k) / 85, j = f % 85, f = (f - j) / 85, i = f % 85, f = (f - i) / 85, h = f % 85, f = (f - h) / 85, g = f % 85, c.push(g + 33, h + 33, i + 33, j + 33, k + 33)) : c.push(122); + } + + return function (a, b) { + for (var c = b; c > 0; c--) { + a.pop(); + } + }(c, b.length), String.fromCharCode.apply(String, c) + "~>"; + }; + + var ASCII85Decode = function ASCII85Decode(a) { + var c, + d, + e, + f, + g, + h = String, + l = "length", + w = 255, + x = "charCodeAt", + y = "slice", + z = "replace"; + + for ("~>" === a[y](-2), a = a[y](0, -2)[z](/\s/g, "")[z]("z", "!!!!!"), c = "uuuuu"[y](a[l] % 5 || 5), a += c, e = [], f = 0, g = a[l]; g > f; f += 5) { + d = 52200625 * (a[x](f) - 33) + 614125 * (a[x](f + 1) - 33) + 7225 * (a[x](f + 2) - 33) + 85 * (a[x](f + 3) - 33) + (a[x](f + 4) - 33), e.push(w & d >> 24, w & d >> 16, w & d >> 8, w & d); + } + + return function (a, b) { + for (var c = b; c > 0; c--) { + a.pop(); + } + }(e, c[l]), h.fromCharCode.apply(h, e); + }; + + var ASCIIHexEncode = function ASCIIHexEncode(value) { + return value.split("").map(function (value) { + return ("0" + value.charCodeAt().toString(16)).slice(-2); + }).join("") + ">"; + }; + + var ASCIIHexDecode = function ASCIIHexDecode(value) { + var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/); + value = value.replace(/\s/g, ""); + + if (value.indexOf(">") !== -1) { + value = value.substr(0, value.indexOf(">")); + } + + if (value.length % 2) { + value += "0"; + } + + if (regexCheckIfHex.test(value) === false) { + return ""; + } + + var result = ""; + + for (var i = 0; i < value.length; i += 2) { + result += String.fromCharCode("0x" + (value[i] + value[i + 1])); + } + + return result; + }; + /* + var FlatePredictors = { + None: 1, + TIFF: 2, + PNG_None: 10, + PNG_Sub: 11, + PNG_Up: 12, + PNG_Average: 13, + PNG_Paeth: 14, + PNG_Optimum: 15 + }; + */ + + + var FlateEncode = function FlateEncode(data) { + var arr = new Uint8Array(data.length); + var i = data.length; + + while (i--) { + arr[i] = data.charCodeAt(i); + } + + arr = zlibSync(arr); + data = arr.reduce(function (data, byte) { + return data + String.fromCharCode(byte); + }, ""); + return data; + }; + + jsPDFAPI.processDataByFilters = function (origData, filterChain) { + + var i = 0; + var data = origData || ""; + var reverseChain = []; + filterChain = filterChain || []; + + if (typeof filterChain === "string") { + filterChain = [filterChain]; + } + + for (i = 0; i < filterChain.length; i += 1) { + switch (filterChain[i]) { + case "ASCII85Decode": + case "/ASCII85Decode": + data = ASCII85Decode(data); + reverseChain.push("/ASCII85Encode"); + break; + + case "ASCII85Encode": + case "/ASCII85Encode": + data = ASCII85Encode(data); + reverseChain.push("/ASCII85Decode"); + break; + + case "ASCIIHexDecode": + case "/ASCIIHexDecode": + data = ASCIIHexDecode(data); + reverseChain.push("/ASCIIHexEncode"); + break; + + case "ASCIIHexEncode": + case "/ASCIIHexEncode": + data = ASCIIHexEncode(data); + reverseChain.push("/ASCIIHexDecode"); + break; + + case "FlateEncode": + case "/FlateEncode": + data = FlateEncode(data); + reverseChain.push("/FlateDecode"); + break; + + default: + throw new Error('The filter: "' + filterChain[i] + '" is not implemented'); + } + } + + return { + data: data, + reverseChain: reverseChain.reverse().join(" ") + }; + }; +})(jsPDF.API); + +/** + * @license + * jsPDF fileloading PlugIn + * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com) + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * @name fileloading + * @module + */ + +(function (jsPDFAPI) { + /** + * @name loadFile + * @function + * @param {string} url + * @param {boolean} sync + * @param {function} callback + * @returns {string|undefined} result + */ + + jsPDFAPI.loadFile = function (url, sync, callback) { + return browserRequest(url, sync, callback); + }; + /** + * @name loadImageFile + * @function + * @param {string} path + * @param {boolean} sync + * @param {function} callback + */ + + + jsPDFAPI.loadImageFile = jsPDFAPI.loadFile; + + function browserRequest(url, sync, callback) { + sync = sync === false ? false : true; + callback = typeof callback === "function" ? callback : function () {}; + var result = undefined; + + var xhr = function xhr(url, sync, callback) { + var request = new XMLHttpRequest(); + var i = 0; + + var sanitizeUnicode = function sanitizeUnicode(data) { + var dataLength = data.length; + var charArray = []; + var StringFromCharCode = String.fromCharCode; //Transform Unicode to ASCII + + for (i = 0; i < dataLength; i += 1) { + charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff)); + } + + return charArray.join(""); + }; + + request.open("GET", url, !sync); // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com] + + request.overrideMimeType("text/plain; charset=x-user-defined"); + + if (sync === false) { + request.onload = function () { + if (request.status === 200) { + callback(sanitizeUnicode(this.responseText)); + } else { + callback(undefined); + } + }; + } + + request.send(null); + + if (sync && request.status === 200) { + return sanitizeUnicode(request.responseText); + } + }; + + try { + result = xhr(url, sync, callback); // eslint-disable-next-line no-empty + } catch (e) {} + + return result; + } +})(jsPDF.API); + +/** + * jsPDF html PlugIn + * + * @name html + * @module + */ + +(function (jsPDFAPI) { + + function loadHtml2Canvas() { + return function () { + if (globalObject["html2canvas"]) { + return Promise.resolve(globalObject["html2canvas"]); + } + + return import('html2canvas'); + }().catch(function (e) { + return Promise.reject(new Error("Could not load html2canvas: " + e)); + }).then(function (html2canvas) { + return html2canvas.default ? html2canvas.default : html2canvas; + }); + } + + function loadDomPurify() { + return function () { + if (globalObject["DOMPurify"]) { + return Promise.resolve(globalObject["DOMPurify"]); + } + + return import('dompurify'); + }().catch(function (e) { + return Promise.reject(new Error("Could not load dompurify: " + e)); + }).then(function (dompurify) { + return dompurify.default ? dompurify.default : dompurify; + }); + } + /** + * Determine the type of a variable/object. + * + * @private + * @ignore + */ + + + var objType = function objType(obj) { + var type = _typeof(obj); + + if (type === "undefined") return "undefined";else if (type === "string" || obj instanceof String) return "string";else if (type === "number" || obj instanceof Number) return "number";else if (type === "function" || obj instanceof Function) return "function";else if (!!obj && obj.constructor === Array) return "array";else if (obj && obj.nodeType === 1) return "element";else if (type === "object") return "object";else return "unknown"; + }; + /** + * Create an HTML element with optional className, innerHTML, and style. + * + * @private + * @ignore + */ + + + var createElement = function createElement(tagName, opt) { + var el = document.createElement(tagName); + if (opt.className) el.className = opt.className; + + if (opt.innerHTML && opt.dompurify) { + el.innerHTML = opt.dompurify.sanitize(opt.innerHTML); + } + + for (var key in opt.style) { + el.style[key] = opt.style[key]; + } + + return el; + }; + /** + * Deep-clone a node and preserve contents/properties. + * + * @private + * @ignore + */ + + + var cloneNode = function cloneNode(node, javascriptEnabled) { + // Recursively clone the node. + var clone = node.nodeType === 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false); + + for (var child = node.firstChild; child; child = child.nextSibling) { + if (javascriptEnabled === true || child.nodeType !== 1 || child.nodeName !== "SCRIPT") { + clone.appendChild(cloneNode(child, javascriptEnabled)); + } + } + + if (node.nodeType === 1) { + // Preserve contents/properties of special nodes. + if (node.nodeName === "CANVAS") { + clone.width = node.width; + clone.height = node.height; + clone.getContext("2d").drawImage(node, 0, 0); + } else if (node.nodeName === "TEXTAREA" || node.nodeName === "SELECT") { + clone.value = node.value; + } // Preserve the node's scroll position when it loads. + + + clone.addEventListener("load", function () { + clone.scrollTop = node.scrollTop; + clone.scrollLeft = node.scrollLeft; + }, true); + } // Return the cloned node. + + + return clone; + }; + /* ----- CONSTRUCTOR ----- */ + + + var Worker = function Worker(opt) { + // Create the root parent for the proto chain, and the starting Worker. + var root = Object.assign(Worker.convert(Promise.resolve()), JSON.parse(JSON.stringify(Worker.template))); + var self = Worker.convert(Promise.resolve(), root); // Set progress, optional settings, and return. + + self = self.setProgress(1, Worker, 1, [Worker]); + self = self.set(opt); + return self; + }; // Boilerplate for subclassing Promise. + + + Worker.prototype = Object.create(Promise.prototype); + Worker.prototype.constructor = Worker; // Converts/casts promises into Workers. + + Worker.convert = function convert(promise, inherit) { + // Uses prototypal inheritance to receive changes made to ancestors' properties. + promise.__proto__ = inherit || Worker.prototype; + return promise; + }; + + Worker.template = { + prop: { + src: null, + container: null, + overlay: null, + canvas: null, + img: null, + pdf: null, + pageSize: null, + callback: function callback() {} + }, + progress: { + val: 0, + state: null, + n: 0, + stack: [] + }, + opt: { + filename: "file.pdf", + margin: [0, 0, 0, 0], + enableLinks: true, + x: 0, + y: 0, + html2canvas: {}, + jsPDF: {}, + backgroundColor: "transparent" + } + }; + /* ----- FROM / TO ----- */ + + Worker.prototype.from = function from(src, type) { + function getType(src) { + switch (objType(src)) { + case "string": + return "string"; + + case "element": + return src.nodeName.toLowerCase() === "canvas" ? "canvas" : "element"; + + default: + return "unknown"; + } + } + + return this.then(function from_main() { + type = type || getType(src); + + switch (type) { + case "string": + return this.then(loadDomPurify).then(function (dompurify) { + return this.set({ + src: createElement("div", { + innerHTML: src, + dompurify: dompurify + }) + }); + }); + + case "element": + return this.set({ + src: src + }); + + case "canvas": + return this.set({ + canvas: src + }); + + case "img": + return this.set({ + img: src + }); + + default: + return this.error("Unknown source type."); + } + }); + }; + + Worker.prototype.to = function to(target) { + // Route the 'to' request to the appropriate method. + switch (target) { + case "container": + return this.toContainer(); + + case "canvas": + return this.toCanvas(); + + case "img": + return this.toImg(); + + case "pdf": + return this.toPdf(); + + default: + return this.error("Invalid target."); + } + }; + + Worker.prototype.toContainer = function toContainer() { + // Set up function prerequisites. + var prereqs = [function checkSrc() { + return this.prop.src || this.error("Cannot duplicate - no source HTML."); + }, function checkPageSize() { + return this.prop.pageSize || this.setPageSize(); + }]; + return this.thenList(prereqs).then(function toContainer_main() { + // Define the CSS styles for the container and its overlay parent. + var overlayCSS = { + position: "fixed", + overflow: "hidden", + zIndex: 1000, + left: "-100000px", + right: 0, + bottom: 0, + top: 0 + }; + var containerCSS = { + position: "relative", + display: "inline-block", + width: (typeof this.opt.width === "number" && !isNaN(this.opt.width) && typeof this.opt.windowWidth === "number" && !isNaN(this.opt.windowWidth) ? this.opt.windowWidth : Math.max(this.prop.src.clientWidth, this.prop.src.scrollWidth, this.prop.src.offsetWidth)) + "px", + left: 0, + right: 0, + top: 0, + margin: "auto", + backgroundColor: this.opt.backgroundColor + }; // Set the overlay to hidden (could be changed in the future to provide a print preview). + + var source = cloneNode(this.prop.src, this.opt.html2canvas.javascriptEnabled); + + if (source.tagName === "BODY") { + containerCSS.height = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight) + "px"; + } + + this.prop.overlay = createElement("div", { + className: "html2pdf__overlay", + style: overlayCSS + }); + this.prop.container = createElement("div", { + className: "html2pdf__container", + style: containerCSS + }); + this.prop.container.appendChild(source); + this.prop.container.firstChild.appendChild(createElement("div", { + style: { + clear: "both", + border: "0 none transparent", + margin: 0, + padding: 0, + height: 0 + } + })); + this.prop.container.style.float = "none"; + this.prop.overlay.appendChild(this.prop.container); + document.body.appendChild(this.prop.overlay); + this.prop.container.firstChild.style.position = "relative"; + this.prop.container.height = Math.max(this.prop.container.firstChild.clientHeight, this.prop.container.firstChild.scrollHeight, this.prop.container.firstChild.offsetHeight) + "px"; + }); + }; + + Worker.prototype.toCanvas = function toCanvas() { + // Set up function prerequisites. + var prereqs = [function checkContainer() { + return document.body.contains(this.prop.container) || this.toContainer(); + }]; // Fulfill prereqs then create the canvas. + + return this.thenList(prereqs).then(loadHtml2Canvas).then(function toCanvas_main(html2canvas) { + // Handle old-fashioned 'onrendered' argument. + var options = Object.assign({}, this.opt.html2canvas); + delete options.onrendered; + return html2canvas(this.prop.container, options); + }).then(function toCanvas_post(canvas) { + // Handle old-fashioned 'onrendered' argument. + var onRendered = this.opt.html2canvas.onrendered || function () {}; + + onRendered(canvas); + this.prop.canvas = canvas; + document.body.removeChild(this.prop.overlay); + }); + }; + + Worker.prototype.toContext2d = function toContext2d() { + // Set up function prerequisites. + var prereqs = [function checkContainer() { + return document.body.contains(this.prop.container) || this.toContainer(); + }]; // Fulfill prereqs then create the canvas. + + return this.thenList(prereqs).then(loadHtml2Canvas).then(function toContext2d_main(html2canvas) { + // Handle old-fashioned 'onrendered' argument. + var pdf = this.opt.jsPDF; + var fontFaces = this.opt.fontFaces; + var scale = typeof this.opt.width === "number" && !isNaN(this.opt.width) && typeof this.opt.windowWidth === "number" && !isNaN(this.opt.windowWidth) ? this.opt.width / this.opt.windowWidth : 1; + var options = Object.assign({ + async: true, + allowTaint: true, + scale: scale, + scrollX: this.opt.scrollX || 0, + scrollY: this.opt.scrollY || 0, + backgroundColor: "#ffffff", + imageTimeout: 15000, + logging: true, + proxy: null, + removeContainer: true, + foreignObjectRendering: false, + useCORS: false + }, this.opt.html2canvas); + delete options.onrendered; + pdf.context2d.autoPaging = typeof this.opt.autoPaging === "undefined" ? true : this.opt.autoPaging; + pdf.context2d.posX = this.opt.x; + pdf.context2d.posY = this.opt.y; + pdf.context2d.margin = this.opt.margin; + pdf.context2d.fontFaces = fontFaces; + + if (fontFaces) { + for (var i = 0; i < fontFaces.length; ++i) { + var font = fontFaces[i]; + var src = font.src.find(function (src) { + return src.format === "truetype"; + }); + + if (src) { + pdf.addFont(src.url, font.ref.name, font.ref.style); + } + } + } + + options.windowHeight = options.windowHeight || 0; + options.windowHeight = options.windowHeight == 0 ? Math.max(this.prop.container.clientHeight, this.prop.container.scrollHeight, this.prop.container.offsetHeight) : options.windowHeight; + pdf.context2d.save(true); + return html2canvas(this.prop.container, options); + }).then(function toContext2d_post(canvas) { + this.opt.jsPDF.context2d.restore(true); // Handle old-fashioned 'onrendered' argument. + + var onRendered = this.opt.html2canvas.onrendered || function () {}; + + onRendered(canvas); + this.prop.canvas = canvas; + document.body.removeChild(this.prop.overlay); + }); + }; + + Worker.prototype.toImg = function toImg() { + // Set up function prerequisites. + var prereqs = [function checkCanvas() { + return this.prop.canvas || this.toCanvas(); + }]; // Fulfill prereqs then create the image. + + return this.thenList(prereqs).then(function toImg_main() { + var imgData = this.prop.canvas.toDataURL("image/" + this.opt.image.type, this.opt.image.quality); + this.prop.img = document.createElement("img"); + this.prop.img.src = imgData; + }); + }; + + Worker.prototype.toPdf = function toPdf() { + // Set up function prerequisites. + var prereqs = [function checkContext2d() { + return this.toContext2d(); + } //function checkCanvas() { return this.prop.canvas || this.toCanvas(); } + ]; // Fulfill prereqs then create the image. + + return this.thenList(prereqs).then(function toPdf_main() { + // Create local copies of frequently used properties. + this.prop.pdf = this.prop.pdf || this.opt.jsPDF; + }); + }; + /* ----- OUTPUT / SAVE ----- */ + + + Worker.prototype.output = function output(type, options, src) { + // Redirect requests to the correct function (outputPdf / outputImg). + src = src || "pdf"; + + if (src.toLowerCase() === "img" || src.toLowerCase() === "image") { + return this.outputImg(type, options); + } else { + return this.outputPdf(type, options); + } + }; + + Worker.prototype.outputPdf = function outputPdf(type, options) { + // Set up function prerequisites. + var prereqs = [function checkPdf() { + return this.prop.pdf || this.toPdf(); + }]; // Fulfill prereqs then perform the appropriate output. + + return this.thenList(prereqs).then(function outputPdf_main() { + /* Currently implemented output types: + * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992 + * save(options), arraybuffer, blob, bloburi/bloburl, + * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl + */ + return this.prop.pdf.output(type, options); + }); + }; + + Worker.prototype.outputImg = function outputImg(type) { + // Set up function prerequisites. + var prereqs = [function checkImg() { + return this.prop.img || this.toImg(); + }]; // Fulfill prereqs then perform the appropriate output. + + return this.thenList(prereqs).then(function outputImg_main() { + switch (type) { + case undefined: + case "img": + return this.prop.img; + + case "datauristring": + case "dataurlstring": + return this.prop.img.src; + + case "datauri": + case "dataurl": + return document.location.href = this.prop.img.src; + + default: + throw 'Image output type "' + type + '" is not supported.'; + } + }); + }; + + Worker.prototype.save = function save(filename) { + // Set up function prerequisites. + var prereqs = [function checkPdf() { + return this.prop.pdf || this.toPdf(); + }]; // Fulfill prereqs, update the filename (if provided), and save the PDF. + + return this.thenList(prereqs).set(filename ? { + filename: filename + } : null).then(function save_main() { + this.prop.pdf.save(this.opt.filename); + }); + }; + + Worker.prototype.doCallback = function doCallback() { + // Set up function prerequisites. + var prereqs = [function checkPdf() { + return this.prop.pdf || this.toPdf(); + }]; // Fulfill prereqs, update the filename (if provided), and save the PDF. + + return this.thenList(prereqs).then(function doCallback_main() { + this.prop.callback(this.prop.pdf); + }); + }; + /* ----- SET / GET ----- */ + + + Worker.prototype.set = function set(opt) { + // TODO: Implement ordered pairs? + // Silently ignore invalid or empty input. + if (objType(opt) !== "object") { + return this; + } // Build an array of setter functions to queue. + + + var fns = Object.keys(opt || {}).map(function (key) { + if (key in Worker.template.prop) { + // Set pre-defined properties. + return function set_prop() { + this.prop[key] = opt[key]; + }; + } else { + switch (key) { + case "margin": + return this.setMargin.bind(this, opt.margin); + + case "jsPDF": + return function set_jsPDF() { + this.opt.jsPDF = opt.jsPDF; + return this.setPageSize(); + }; + + case "pageSize": + return this.setPageSize.bind(this, opt.pageSize); + + default: + // Set any other properties in opt. + return function set_opt() { + this.opt[key] = opt[key]; + }; + } + } + }, this); // Set properties within the promise chain. + + return this.then(function set_main() { + return this.thenList(fns); + }); + }; + + Worker.prototype.get = function get(key, cbk) { + return this.then(function get_main() { + // Fetch the requested property, either as a predefined prop or in opt. + var val = key in Worker.template.prop ? this.prop[key] : this.opt[key]; + return cbk ? cbk(val) : val; + }); + }; + + Worker.prototype.setMargin = function setMargin(margin) { + return this.then(function setMargin_main() { + // Parse the margin property. + switch (objType(margin)) { + case "number": + margin = [margin, margin, margin, margin]; + // eslint-disable-next-line no-fallthrough + + case "array": + if (margin.length === 2) { + margin = [margin[0], margin[1], margin[0], margin[1]]; + } + + if (margin.length === 4) { + break; + } + + // eslint-disable-next-line no-fallthrough + + default: + return this.error("Invalid margin array."); + } // Set the margin property, then update pageSize. + + + this.opt.margin = margin; + }).then(this.setPageSize); + }; + + Worker.prototype.setPageSize = function setPageSize(pageSize) { + function toPx(val, k) { + return Math.floor(val * k / 72 * 96); + } + + return this.then(function setPageSize_main() { + // Retrieve page-size based on jsPDF settings, if not explicitly provided. + pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF); // Add 'inner' field if not present. + + if (!pageSize.hasOwnProperty("inner")) { + pageSize.inner = { + width: pageSize.width - this.opt.margin[1] - this.opt.margin[3], + height: pageSize.height - this.opt.margin[0] - this.opt.margin[2] + }; + pageSize.inner.px = { + width: toPx(pageSize.inner.width, pageSize.k), + height: toPx(pageSize.inner.height, pageSize.k) + }; + pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width; + } // Attach pageSize to this. + + + this.prop.pageSize = pageSize; + }); + }; + + Worker.prototype.setProgress = function setProgress(val, state, n, stack) { + // Immediately update all progress values. + if (val != null) this.progress.val = val; + if (state != null) this.progress.state = state; + if (n != null) this.progress.n = n; + if (stack != null) this.progress.stack = stack; + this.progress.ratio = this.progress.val / this.progress.state; // Return this for command chaining. + + return this; + }; + + Worker.prototype.updateProgress = function updateProgress(val, state, n, stack) { + // Immediately update all progress values, using setProgress. + return this.setProgress(val ? this.progress.val + val : null, state ? state : null, n ? this.progress.n + n : null, stack ? this.progress.stack.concat(stack) : null); + }; + /* ----- PROMISE MAPPING ----- */ + + + Worker.prototype.then = function then(onFulfilled, onRejected) { + // Wrap `this` for encapsulation. + var self = this; + return this.thenCore(onFulfilled, onRejected, function then_main(onFulfilled, onRejected) { + // Update progress while queuing, calling, and resolving `then`. + self.updateProgress(null, null, 1, [onFulfilled]); + return Promise.prototype.then.call(this, function then_pre(val) { + self.updateProgress(null, onFulfilled); + return val; + }).then(onFulfilled, onRejected).then(function then_post(val) { + self.updateProgress(1); + return val; + }); + }); + }; + + Worker.prototype.thenCore = function thenCore(onFulfilled, onRejected, thenBase) { + // Handle optional thenBase parameter. + thenBase = thenBase || Promise.prototype.then; // Wrap `this` for encapsulation and bind it to the promise handlers. + + var self = this; + + if (onFulfilled) { + onFulfilled = onFulfilled.bind(self); + } + + if (onRejected) { + onRejected = onRejected.bind(self); + } // Cast self into a Promise to avoid polyfills recursively defining `then`. + + + var isNative = Promise.toString().indexOf("[native code]") !== -1 && Promise.name === "Promise"; + var selfPromise = isNative ? self : Worker.convert(Object.assign({}, self), Promise.prototype); // Return the promise, after casting it into a Worker and preserving props. + + var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected); + return Worker.convert(returnVal, self.__proto__); + }; + + Worker.prototype.thenExternal = function thenExternal(onFulfilled, onRejected) { + // Call `then` and return a standard promise (exits the Worker chain). + return Promise.prototype.then.call(this, onFulfilled, onRejected); + }; + + Worker.prototype.thenList = function thenList(fns) { + // Queue a series of promise 'factories' into the promise chain. + var self = this; + fns.forEach(function thenList_forEach(fn) { + self = self.thenCore(fn); + }); + return self; + }; + + Worker.prototype["catch"] = function (onRejected) { + // Bind `this` to the promise handler, call `catch`, and return a Worker. + if (onRejected) { + onRejected = onRejected.bind(this); + } + + var returnVal = Promise.prototype["catch"].call(this, onRejected); + return Worker.convert(returnVal, this); + }; + + Worker.prototype.catchExternal = function catchExternal(onRejected) { + // Call `catch` and return a standard promise (exits the Worker chain). + return Promise.prototype["catch"].call(this, onRejected); + }; + + Worker.prototype.error = function error(msg) { + // Throw the error in the Promise chain. + return this.then(function error_main() { + throw new Error(msg); + }); + }; + /* ----- ALIASES ----- */ + + + Worker.prototype.using = Worker.prototype.set; + Worker.prototype.saveAs = Worker.prototype.save; + Worker.prototype.export = Worker.prototype.output; + Worker.prototype.run = Worker.prototype.then; // Get dimensions of a PDF page, as determined by jsPDF. + + jsPDF.getPageSize = function (orientation, unit, format) { + // Decode options object + if (_typeof(orientation) === "object") { + var options = orientation; + orientation = options.orientation; + unit = options.unit || unit; + format = options.format || format; + } // Default options + + + unit = unit || "mm"; + format = format || "a4"; + orientation = ("" + (orientation || "P")).toLowerCase(); + var format_as_string = ("" + format).toLowerCase(); // Size in pt of various paper formats + + var pageFormats = { + a0: [2383.94, 3370.39], + a1: [1683.78, 2383.94], + a2: [1190.55, 1683.78], + a3: [841.89, 1190.55], + a4: [595.28, 841.89], + a5: [419.53, 595.28], + a6: [297.64, 419.53], + a7: [209.76, 297.64], + a8: [147.4, 209.76], + a9: [104.88, 147.4], + a10: [73.7, 104.88], + b0: [2834.65, 4008.19], + b1: [2004.09, 2834.65], + b2: [1417.32, 2004.09], + b3: [1000.63, 1417.32], + b4: [708.66, 1000.63], + b5: [498.9, 708.66], + b6: [354.33, 498.9], + b7: [249.45, 354.33], + b8: [175.75, 249.45], + b9: [124.72, 175.75], + b10: [87.87, 124.72], + c0: [2599.37, 3676.54], + c1: [1836.85, 2599.37], + c2: [1298.27, 1836.85], + c3: [918.43, 1298.27], + c4: [649.13, 918.43], + c5: [459.21, 649.13], + c6: [323.15, 459.21], + c7: [229.61, 323.15], + c8: [161.57, 229.61], + c9: [113.39, 161.57], + c10: [79.37, 113.39], + dl: [311.81, 623.62], + letter: [612, 792], + "government-letter": [576, 756], + legal: [612, 1008], + "junior-legal": [576, 360], + ledger: [1224, 792], + tabloid: [792, 1224], + "credit-card": [153, 243] + }; + var k; // Unit conversion + + switch (unit) { + case "pt": + k = 1; + break; + + case "mm": + k = 72 / 25.4; + break; + + case "cm": + k = 72 / 2.54; + break; + + case "in": + k = 72; + break; + + case "px": + k = 72 / 96; + break; + + case "pc": + k = 12; + break; + + case "em": + k = 12; + break; + + case "ex": + k = 6; + break; + + default: + throw "Invalid unit: " + unit; + } + + var pageHeight = 0; + var pageWidth = 0; // Dimensions are stored as user units and converted to points on output + + if (pageFormats.hasOwnProperty(format_as_string)) { + pageHeight = pageFormats[format_as_string][1] / k; + pageWidth = pageFormats[format_as_string][0] / k; + } else { + try { + pageHeight = format[1]; + pageWidth = format[0]; + } catch (err) { + throw new Error("Invalid format: " + format); + } + } + + var tmp; // Handle page orientation + + if (orientation === "p" || orientation === "portrait") { + orientation = "p"; + + if (pageWidth > pageHeight) { + tmp = pageWidth; + pageWidth = pageHeight; + pageHeight = tmp; + } + } else if (orientation === "l" || orientation === "landscape") { + orientation = "l"; + + if (pageHeight > pageWidth) { + tmp = pageWidth; + pageWidth = pageHeight; + pageHeight = tmp; + } + } else { + throw "Invalid orientation: " + orientation; + } // Return information (k is the unit conversion ratio from pts) + + + var info = { + width: pageWidth, + height: pageHeight, + unit: unit, + k: k, + orientation: orientation + }; + return info; + }; + /** + * @typedef FontFace + * + * The font-face type implements an interface similar to that of the font-face CSS rule, + * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D + * is updated. + * + * All properties expect values similar to those in the font-face CSS rule. A difference + * is the font-family, which do not need to be enclosed in double-quotes when containing + * spaces like in CSS. + * + * @property {string} family The name of the font-family. + * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'. + * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.) + * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded. + * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched. + * @property {string} [src] url A URL to a font of a specific format. + * @property {string} [src] format Format of the font referenced by the URL. + */ + + /** + * Generate a PDF from an HTML element or string using. + * + * @name html + * @function + * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML. + * @param {Object} [options] Collection of settings + * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance + * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0. + * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode. + *
      + *
    • + * false: Auto paging is disabled. + *
    • + *
    • + * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly + * slice text in half, making it difficult to read. + *
    • + *
    • + * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting + * mostly of a single column of text. + *
    • + *
    + * Default is true. + * @param {string} [options.filename] name of the file + * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image + * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options + * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm. + * @param {jsPDF} [options.jsPDF] jsPDF instance + * @param {number=} [options.x] x position on the PDF document in jsPDF units. + * @param {number=} [options.y] y position on the PDF document in jsPDF units. + * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be + * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is + * specified or the windowWidth option is NOT specified. + * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the + * html2canvas.windowWidth option, this option affects the actual container size while rendering and + * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified. + * + * @example + * var doc = new jsPDF(); + * + * doc.html(document.body, { + * callback: function (doc) { + * doc.save(); + * }, + * x: 10, + * y: 10 + * }); + */ + + + jsPDFAPI.html = function (src, options) { + + options = options || {}; + + options.callback = options.callback || function () {}; + + options.html2canvas = options.html2canvas || {}; + options.html2canvas.canvas = options.html2canvas.canvas || this.canvas; + options.jsPDF = options.jsPDF || this; + options.fontFaces = options.fontFaces ? options.fontFaces.map(normalizeFontFace) : null; // Create a new worker with the given options. + + var worker = new Worker(options); + + if (!options.worker) { + // If worker is not set to true, perform the traditional 'simple' operation. + return worker.from(src).doCallback(); + } else { + // Otherwise, return the worker for new Promise-based operation. + return worker; + } + }; +})(jsPDF.API); + +/** + * @license + * ==================================================================== + * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com + * + * 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. + * ==================================================================== + */ +/** + * jsPDF JavaScript plugin + * + * @name javascript + * @module + */ + +(function (jsPDFAPI) { + + var jsNamesObj, jsJsObj, text; + /** + * @name addJS + * @function + * @param {string} javascript The javascript to be embedded into the PDF-file. + * @returns {jsPDF} + */ + + jsPDFAPI.addJS = function (javascript) { + text = javascript; + this.internal.events.subscribe("postPutResources", function () { + jsNamesObj = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/Names [(EmbeddedJS) " + (jsNamesObj + 1) + " 0 R]"); + this.internal.out(">>"); + this.internal.out("endobj"); + jsJsObj = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/S /JavaScript"); + this.internal.out("/JS (" + text + ")"); + this.internal.out(">>"); + this.internal.out("endobj"); + }); + this.internal.events.subscribe("putCatalog", function () { + if (jsNamesObj !== undefined && jsJsObj !== undefined) { + this.internal.out("/Names <>"); + } + }); + return this; + }; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF Outline PlugIn + * + * Generates a PDF Outline + * @name outline + * @module + */ + +(function (jsPDFAPI) { + + var namesOid; //var destsGoto = []; + + jsPDFAPI.events.push(["postPutResources", function () { + var pdf = this; + var rx = /^(\d+) 0 obj$/; // Write action goto objects for each page + // this.outline.destsGoto = []; + // for (var i = 0; i < totalPages; i++) { + // var id = pdf.internal.newObject(); + // this.outline.destsGoto.push(id); + // pdf.internal.write("<> endobj"); + // } + // + // for (var i = 0; i < dests.length; i++) { + // pdf.internal.write("(page_" + (i + 1) + ")" + dests[i] + " 0 + // R"); + // } + // + + if (this.outline.root.children.length > 0) { + var lines = pdf.outline.render().split(/\r\n/); + + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var m = rx.exec(line); + + if (m != null) { + var oid = m[1]; + pdf.internal.newObjectDeferredBegin(oid, false); + } + + pdf.internal.write(line); + } + } // This code will write named destination for each page reference + // (page_1, etc) + + + if (this.outline.createNamedDestinations) { + var totalPages = this.internal.pages.length; // WARNING: this assumes jsPDF starts on page 3 and pageIDs + // follow 5, 7, 9, etc + // Write destination objects for each page + + var dests = []; + + for (var i = 0; i < totalPages; i++) { + var id = pdf.internal.newObject(); + dests.push(id); + var info = pdf.internal.getPageInfo(i + 1); + pdf.internal.write("<< /D[" + info.objId + " 0 R /XYZ null null null]>> endobj"); + } // assign a name for each destination + + + var names2Oid = pdf.internal.newObject(); + pdf.internal.write("<< /Names [ "); + + for (var i = 0; i < dests.length; i++) { + pdf.internal.write("(page_" + (i + 1) + ")" + dests[i] + " 0 R"); + } + + pdf.internal.write(" ] >>", "endobj"); // var kids = pdf.internal.newObject(); + // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R'); + // pdf.internal.write(' ] >>', 'endobj'); + + namesOid = pdf.internal.newObject(); + pdf.internal.write("<< /Dests " + names2Oid + " 0 R"); + pdf.internal.write(">>", "endobj"); + } + }]); + jsPDFAPI.events.push(["putCatalog", function () { + var pdf = this; + + if (pdf.outline.root.children.length > 0) { + pdf.internal.write("/Outlines", this.outline.makeRef(this.outline.root)); + + if (this.outline.createNamedDestinations) { + pdf.internal.write("/Names " + namesOid + " 0 R"); + } // Open with Bookmarks showing + // pdf.internal.write("/PageMode /UseOutlines"); + + } + }]); + jsPDFAPI.events.push(["initialized", function () { + var pdf = this; + pdf.outline = { + createNamedDestinations: false, + root: { + children: [] + } + }; + /** + * Options: pageNumber + */ + + pdf.outline.add = function (parent, title, options) { + var item = { + title: title, + options: options, + children: [] + }; + + if (parent == null) { + parent = this.root; + } + + parent.children.push(item); + return item; + }; + + pdf.outline.render = function () { + this.ctx = {}; + this.ctx.val = ""; + this.ctx.pdf = pdf; + this.genIds_r(this.root); + this.renderRoot(this.root); + this.renderItems(this.root); + return this.ctx.val; + }; + + pdf.outline.genIds_r = function (node) { + node.id = pdf.internal.newObjectDeferred(); + + for (var i = 0; i < node.children.length; i++) { + this.genIds_r(node.children[i]); + } + }; + + pdf.outline.renderRoot = function (node) { + this.objStart(node); + this.line("/Type /Outlines"); + + if (node.children.length > 0) { + this.line("/First " + this.makeRef(node.children[0])); + this.line("/Last " + this.makeRef(node.children[node.children.length - 1])); + } + + this.line("/Count " + this.count_r({ + count: 0 + }, node)); + this.objEnd(); + }; + + pdf.outline.renderItems = function (node) { + var getVerticalCoordinateString = this.ctx.pdf.internal.getVerticalCoordinateString; + + for (var i = 0; i < node.children.length; i++) { + var item = node.children[i]; + this.objStart(item); + this.line("/Title " + this.makeString(item.title)); + this.line("/Parent " + this.makeRef(node)); + + if (i > 0) { + this.line("/Prev " + this.makeRef(node.children[i - 1])); + } + + if (i < node.children.length - 1) { + this.line("/Next " + this.makeRef(node.children[i + 1])); + } + + if (item.children.length > 0) { + this.line("/First " + this.makeRef(item.children[0])); + this.line("/Last " + this.makeRef(item.children[item.children.length - 1])); + } + + var count = this.count = this.count_r({ + count: 0 + }, item); + + if (count > 0) { + this.line("/Count " + count); + } + + if (item.options) { + if (item.options.pageNumber) { + // Explicit Destination + //WARNING this assumes page ids are 3,5,7, etc. + var info = pdf.internal.getPageInfo(item.options.pageNumber); + this.line("/Dest " + "[" + info.objId + " 0 R /XYZ 0 " + getVerticalCoordinateString(0) + " 0]"); // this line does not work on all clients (pageNumber instead of page ref) + //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]'); + // Named Destination + // this.line('/Dest (page_' + (item.options.pageNumber) + ')'); + // Action Destination + // var id = pdf.internal.newObject(); + // pdf.internal.write('<> endobj'); + // this.line('/A ' + id + ' 0 R' ); + } + } + + this.objEnd(); + } + + for (var z = 0; z < node.children.length; z++) { + this.renderItems(node.children[z]); + } + }; + + pdf.outline.line = function (text) { + this.ctx.val += text + "\r\n"; + }; + + pdf.outline.makeRef = function (node) { + return node.id + " 0 R"; + }; + + pdf.outline.makeString = function (val) { + return "(" + pdf.internal.pdfEscape(val) + ")"; + }; + + pdf.outline.objStart = function (node) { + this.ctx.val += "\r\n" + node.id + " 0 obj" + "\r\n<<\r\n"; + }; + + pdf.outline.objEnd = function () { + this.ctx.val += ">> \r\n" + "endobj" + "\r\n"; + }; + + pdf.outline.count_r = function (ctx, node) { + for (var i = 0; i < node.children.length; i++) { + ctx.count++; + this.count_r(ctx, node.children[i]); + } + + return ctx.count; + }; + }]); + return this; +})(jsPDF.API); + +/** + * @license + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF jpeg Support PlugIn + * + * @name jpeg_support + * @module + */ + +(function (jsPDFAPI) { + /** + * 0xc0 (SOF) Huffman - Baseline DCT + * 0xc1 (SOF) Huffman - Extended sequential DCT + * 0xc2 Progressive DCT (SOF2) + * 0xc3 Spatial (sequential) lossless (SOF3) + * 0xc4 Differential sequential DCT (SOF5) + * 0xc5 Differential progressive DCT (SOF6) + * 0xc6 Differential spatial (SOF7) + * 0xc7 + */ + + var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7]; //takes a string imgData containing the raw bytes of + //a jpeg image and returns [width, height] + //Algorithm from: http://www.64lines.com/jpeg-width-height + + var getJpegInfo = function getJpegInfo(imgData) { + var width, height, numcomponents; + var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5); + var len = imgData.length; + var result = { + width: 0, + height: 0, + numcomponents: 1 + }; + + for (var i = 4; i < len; i += 2) { + i += blockLength; + + if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) { + height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6); + width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8); + numcomponents = imgData.charCodeAt(i + 9); + result = { + width: width, + height: height, + numcomponents: numcomponents + }; + break; + } else { + blockLength = imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3); + } + } + + return result; + }; + /** + * @ignore + */ + + + jsPDFAPI.processJPEG = function (data, index, alias, compression, dataAsBinaryString, colorSpace) { + var filter = this.decode.DCT_DECODE, + bpc = 8, + dims, + result = null; + + if (typeof data === "string" || this.__addimage__.isArrayBuffer(data) || this.__addimage__.isArrayBufferView(data)) { + // if we already have a stored binary string rep use that + data = dataAsBinaryString || data; + data = this.__addimage__.isArrayBuffer(data) ? new Uint8Array(data) : data; + data = this.__addimage__.isArrayBufferView(data) ? this.__addimage__.arrayBufferToBinaryString(data) : data; + dims = getJpegInfo(data); + + switch (dims.numcomponents) { + case 1: + colorSpace = this.color_spaces.DEVICE_GRAY; + break; + + case 4: + colorSpace = this.color_spaces.DEVICE_CMYK; + break; + + case 3: + colorSpace = this.color_spaces.DEVICE_RGB; + break; + } + + result = { + data: data, + width: dims.width, + height: dims.height, + colorSpace: colorSpace, + bitsPerComponent: bpc, + filter: filter, + index: index, + alias: alias + }; + } + + return result; + }; +})(jsPDF.API); + +// Generated by CoffeeScript 1.4.0 + +var PNG = function () { + var APNG_BLEND_OP_SOURCE, APNG_DISPOSE_OP_BACKGROUND, APNG_DISPOSE_OP_PREVIOUS, makeImage, scratchCanvas, scratchCtx; + APNG_DISPOSE_OP_BACKGROUND = 1; + APNG_DISPOSE_OP_PREVIOUS = 2; + APNG_BLEND_OP_SOURCE = 0; + + function PNG(data) { + var chunkSize, colors, palLen, delayDen, delayNum, frame, i, index, key, section, palShort, text, _i, _j, _ref; + + this.data = data; + this.pos = 8; + this.palette = []; + this.imgData = []; + this.transparency = {}; + this.animation = null; + this.text = {}; + frame = null; + + while (true) { + chunkSize = this.readUInt32(); + + section = function () { + var _i, _results; + + _results = []; + + for (i = _i = 0; _i < 4; i = ++_i) { + _results.push(String.fromCharCode(this.data[this.pos++])); + } + + return _results; + }.call(this).join(""); + + switch (section) { + case "IHDR": + this.width = this.readUInt32(); + this.height = this.readUInt32(); + this.bits = this.data[this.pos++]; + this.colorType = this.data[this.pos++]; + this.compressionMethod = this.data[this.pos++]; + this.filterMethod = this.data[this.pos++]; + this.interlaceMethod = this.data[this.pos++]; + break; + + case "acTL": + this.animation = { + numFrames: this.readUInt32(), + numPlays: this.readUInt32() || Infinity, + frames: [] + }; + break; + + case "PLTE": + this.palette = this.read(chunkSize); + break; + + case "fcTL": + if (frame) { + this.animation.frames.push(frame); + } + + this.pos += 4; + frame = { + width: this.readUInt32(), + height: this.readUInt32(), + xOffset: this.readUInt32(), + yOffset: this.readUInt32() + }; + delayNum = this.readUInt16(); + delayDen = this.readUInt16() || 100; + frame.delay = 1000 * delayNum / delayDen; + frame.disposeOp = this.data[this.pos++]; + frame.blendOp = this.data[this.pos++]; + frame.data = []; + break; + + case "IDAT": + case "fdAT": + if (section === "fdAT") { + this.pos += 4; + chunkSize -= 4; + } + + data = (frame != null ? frame.data : void 0) || this.imgData; + + for (i = _i = 0; 0 <= chunkSize ? _i < chunkSize : _i > chunkSize; i = 0 <= chunkSize ? ++_i : --_i) { + data.push(this.data[this.pos++]); + } + + break; + + case "tRNS": + this.transparency = {}; + + switch (this.colorType) { + case 3: + palLen = this.palette.length / 3; + this.transparency.indexed = this.read(chunkSize); + if (this.transparency.indexed.length > palLen) throw new Error("More transparent colors than palette size"); + /* + * According to the PNG spec trns should be increased to the same size as palette if shorter + */ + //palShort = 255 - this.transparency.indexed.length; + + palShort = palLen - this.transparency.indexed.length; + + if (palShort > 0) { + for (i = _j = 0; 0 <= palShort ? _j < palShort : _j > palShort; i = 0 <= palShort ? ++_j : --_j) { + this.transparency.indexed.push(255); + } + } + + break; + + case 0: + this.transparency.grayscale = this.read(chunkSize)[0]; + break; + + case 2: + this.transparency.rgb = this.read(chunkSize); + } + + break; + + case "tEXt": + text = this.read(chunkSize); + index = text.indexOf(0); + key = String.fromCharCode.apply(String, text.slice(0, index)); + this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1)); + break; + + case "IEND": + if (frame) { + this.animation.frames.push(frame); + } + + this.colors = function () { + switch (this.colorType) { + case 0: + case 3: + case 4: + return 1; + + case 2: + case 6: + return 3; + } + }.call(this); + + this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6; + colors = this.colors + (this.hasAlphaChannel ? 1 : 0); + this.pixelBitlength = this.bits * colors; + + this.colorSpace = function () { + switch (this.colors) { + case 1: + return "DeviceGray"; + + case 3: + return "DeviceRGB"; + } + }.call(this); + + this.imgData = new Uint8Array(this.imgData); + return; + + default: + this.pos += chunkSize; + } + + this.pos += 4; + + if (this.pos > this.data.length) { + throw new Error("Incomplete or corrupt PNG file"); + } + } + } + + PNG.prototype.read = function (bytes) { + var i, _i, _results; + + _results = []; + + for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) { + _results.push(this.data[this.pos++]); + } + + return _results; + }; + + PNG.prototype.readUInt32 = function () { + var b1, b2, b3, b4; + b1 = this.data[this.pos++] << 24; + b2 = this.data[this.pos++] << 16; + b3 = this.data[this.pos++] << 8; + b4 = this.data[this.pos++]; + return b1 | b2 | b3 | b4; + }; + + PNG.prototype.readUInt16 = function () { + var b1, b2; + b1 = this.data[this.pos++] << 8; + b2 = this.data[this.pos++]; + return b1 | b2; + }; + + PNG.prototype.decodePixels = function (data) { + var pixelBytes = this.pixelBitlength / 8; + var fullPixels = new Uint8Array(this.width * this.height * pixelBytes); + var pos = 0; + + var _this = this; + + if (data == null) { + data = this.imgData; + } + + if (data.length === 0) { + return new Uint8Array(0); + } + + data = unzlibSync(data); + + function pass(x0, y0, dx, dy) { + var abyte, c, col, i, left, length, p, pa, paeth, pb, pc, pixels, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m; + + var w = Math.ceil((_this.width - x0) / dx), + h = Math.ceil((_this.height - y0) / dy); + var isFull = _this.width == w && _this.height == h; + scanlineLength = pixelBytes * w; + pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h); + length = data.length; + row = 0; + c = 0; + + while (row < h && pos < length) { + switch (data[pos++]) { + case 0: + for (i = _i = 0; _i < scanlineLength; i = _i += 1) { + pixels[c++] = data[pos++]; + } + + break; + + case 1: + for (i = _j = 0; _j < scanlineLength; i = _j += 1) { + abyte = data[pos++]; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + pixels[c++] = (abyte + left) % 256; + } + + break; + + case 2: + for (i = _k = 0; _k < scanlineLength; i = _k += 1) { + abyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + pixels[c++] = (upper + abyte) % 256; + } + + break; + + case 3: + for (i = _l = 0; _l < scanlineLength; i = _l += 1) { + abyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256; + } + + break; + + case 4: + for (i = _m = 0; _m < scanlineLength; i = _m += 1) { + abyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + + if (row === 0) { + upper = upperLeft = 0; + } else { + upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + i % pixelBytes]; + } + + p = left + upper - upperLeft; + pa = Math.abs(p - left); + pb = Math.abs(p - upper); + pc = Math.abs(p - upperLeft); + + if (pa <= pb && pa <= pc) { + paeth = left; + } else if (pb <= pc) { + paeth = upper; + } else { + paeth = upperLeft; + } + + pixels[c++] = (abyte + paeth) % 256; + } + + break; + + default: + throw new Error("Invalid filter algorithm: " + data[pos - 1]); + } + + if (!isFull) { + var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes; + var partPos = row * scanlineLength; + + for (i = 0; i < w; i += 1) { + for (var j = 0; j < pixelBytes; j += 1) { + fullPixels[fullPos++] = pixels[partPos++]; + } + + fullPos += (dx - 1) * pixelBytes; + } + } + + row++; + } + } + + if (_this.interlaceMethod == 1) { + /* + 1 6 4 6 2 6 4 6 + 7 7 7 7 7 7 7 7 + 5 6 5 6 5 6 5 6 + 7 7 7 7 7 7 7 7 + 3 6 4 6 3 6 4 6 + 7 7 7 7 7 7 7 7 + 5 6 5 6 5 6 5 6 + 7 7 7 7 7 7 7 7 + */ + pass(0, 0, 8, 8); // 1 + + /* NOTE these seem to follow the pattern: + * pass(x, 0, 2*x, 2*x); + * pass(0, x, x, 2*x); + * with x being 4, 2, 1. + */ + + pass(4, 0, 8, 8); // 2 + + pass(0, 4, 4, 8); // 3 + + pass(2, 0, 4, 4); // 4 + + pass(0, 2, 2, 4); // 5 + + pass(1, 0, 2, 2); // 6 + + pass(0, 1, 1, 2); // 7 + } else { + pass(0, 0, 1, 1); + } + + return fullPixels; + }; + + PNG.prototype.decodePalette = function () { + var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1; + + palette = this.palette; + transparency = this.transparency.indexed || []; + ret = new Uint8Array((transparency.length || 0) + palette.length); + pos = 0; + length = palette.length; + c = 0; + + for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) { + ret[pos++] = palette[i]; + ret[pos++] = palette[i + 1]; + ret[pos++] = palette[i + 2]; + ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255; + } + + return ret; + }; + + PNG.prototype.copyToImageData = function (imageData, pixels) { + var alpha, colors, data, i, input, j, k, length, palette, v, _ref; + + colors = this.colors; + palette = null; + alpha = this.hasAlphaChannel; + + if (this.palette.length) { + palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette(); + colors = 4; + alpha = true; + } + + data = imageData.data || imageData; + length = data.length; + input = palette || pixels; + i = j = 0; + + if (colors === 1) { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + v = input[k++]; + data[i++] = v; + data[i++] = v; + data[i++] = v; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } else { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } + }; + + PNG.prototype.decode = function () { + var ret; + ret = new Uint8Array(this.width * this.height * 4); + this.copyToImageData(ret, this.decodePixels()); + return ret; + }; + + var hasBrowserCanvas = function hasBrowserCanvas() { + if (Object.prototype.toString.call(globalObject) === "[object Window]") { + try { + scratchCanvas = globalObject.document.createElement("canvas"); + scratchCtx = scratchCanvas.getContext("2d"); + } catch (e) { + return false; + } + + return true; + } + + return false; + }; + + hasBrowserCanvas(); + + makeImage = function makeImage(imageData) { + if (hasBrowserCanvas() === true) { + var img; + scratchCtx.width = imageData.width; + scratchCtx.height = imageData.height; + scratchCtx.clearRect(0, 0, imageData.width, imageData.height); + scratchCtx.putImageData(imageData, 0, 0); + img = new Image(); + img.src = scratchCanvas.toDataURL(); + return img; + } + + throw new Error("This method requires a Browser with Canvas-capability."); + }; + + PNG.prototype.decodeFrames = function (ctx) { + var frame, i, imageData, pixels, _i, _len, _ref, _results; + + if (!this.animation) { + return; + } + + _ref = this.animation.frames; + _results = []; + + for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { + frame = _ref[i]; + imageData = ctx.createImageData(frame.width, frame.height); + pixels = this.decodePixels(new Uint8Array(frame.data)); + this.copyToImageData(imageData, pixels); + frame.imageData = imageData; + + _results.push(frame.image = makeImage(imageData)); + } + + return _results; + }; + + PNG.prototype.renderFrame = function (ctx, number) { + var frame, frames, prev; + frames = this.animation.frames; + frame = frames[number]; + prev = frames[number - 1]; + + if (number === 0) { + ctx.clearRect(0, 0, this.width, this.height); + } + + if ((prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND) { + ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height); + } else if ((prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS) { + ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset); + } + + if (frame.blendOp === APNG_BLEND_OP_SOURCE) { + ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height); + } + + return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset); + }; + + PNG.prototype.animate = function (ctx) { + var _doFrame, + frameNumber, + frames, + numFrames, + numPlays, + _ref, + _this = this; + + frameNumber = 0; + _ref = this.animation, numFrames = _ref.numFrames, frames = _ref.frames, numPlays = _ref.numPlays; + return (_doFrame = function doFrame() { + var f, frame; + f = frameNumber++ % numFrames; + frame = frames[f]; + + _this.renderFrame(ctx, f); + + if (numFrames > 1 && frameNumber / numFrames < numPlays) { + return _this.animation._timeout = setTimeout(_doFrame, frame.delay); + } + })(); + }; + + PNG.prototype.stopAnimation = function () { + var _ref; + + return clearTimeout((_ref = this.animation) != null ? _ref._timeout : void 0); + }; + + PNG.prototype.render = function (canvas) { + var ctx, data; + + if (canvas._png) { + canvas._png.stopAnimation(); + } + + canvas._png = this; + canvas.width = this.width; + canvas.height = this.height; + ctx = canvas.getContext("2d"); + + if (this.animation) { + this.decodeFrames(ctx); + return this.animate(ctx); + } else { + data = ctx.createImageData(this.width, this.height); + this.copyToImageData(data, this.decodePixels()); + return ctx.putImageData(data, 0, 0); + } + }; + + return PNG; +}(); + +/** + * @license + * + * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb + * + * 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. + * ==================================================================== + */ +/** + * jsPDF PNG PlugIn + * @name png_support + * @module + */ + +(function (jsPDFAPI) { + /* + * @see http://www.w3.org/TR/PNG-Chunks.html + * + Color Allowed Interpretation + Type Bit Depths + 0 1,2,4,8,16 Each pixel is a grayscale sample. + 2 8,16 Each pixel is an R,G,B triple. + 3 1,2,4,8 Each pixel is a palette index; + a PLTE chunk must appear. + 4 8,16 Each pixel is a grayscale sample, + followed by an alpha sample. + 6 8,16 Each pixel is an R,G,B triple, + followed by an alpha sample. + */ + + /* + * PNG filter method types + * + * @see http://www.w3.org/TR/PNG-Filters.html + * @see http://www.libpng.org/pub/png/book/chapter09.html + * + * This is what the value 'Predictor' in decode params relates to + * + * 15 is "optimal prediction", which means the prediction algorithm can change from line to line. + * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte. + * + 0 None + 1 Sub + 2 Up + 3 Average + 4 Paeth + */ + + var canCompress = function canCompress(value) { + return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS(); + }; + + var hasCompressionJS = function hasCompressionJS() { + return typeof zlibSync === "function"; + }; + + var compressBytes = function compressBytes(bytes, lineLength, colorsPerPixel, compression) { + var level = 4; + var filter_method = filterUp; + + switch (compression) { + case jsPDFAPI.image_compression.FAST: + level = 1; + filter_method = filterSub; + break; + + case jsPDFAPI.image_compression.MEDIUM: + level = 6; + filter_method = filterAverage; + break; + + case jsPDFAPI.image_compression.SLOW: + level = 9; + filter_method = filterPaeth; + break; + } + + bytes = applyPngFilterMethod(bytes, lineLength, colorsPerPixel, filter_method); + var dat = zlibSync(bytes, { + level: level + }); + return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat); + }; + + var applyPngFilterMethod = function applyPngFilterMethod(bytes, lineLength, colorsPerPixel, filter_method) { + var lines = bytes.length / lineLength, + result = new Uint8Array(bytes.length + lines), + filter_methods = getFilterMethods(), + line, + prevLine, + offset; + + for (var i = 0; i < lines; i += 1) { + offset = i * lineLength; + line = bytes.subarray(offset, offset + lineLength); + + if (filter_method) { + result.set(filter_method(line, colorsPerPixel, prevLine), offset + i); + } else { + var len = filter_methods.length, + results = []; + + for (var j; j < len; j += 1) { + results[j] = filter_methods[j](line, colorsPerPixel, prevLine); + } + + var ind = getIndexOfSmallestSum(results.concat()); + result.set(results[ind], offset + i); + } + + prevLine = line; + } + + return result; + }; + + var filterNone = function filterNone(line) { + /*var result = new Uint8Array(line.length + 1); + result[0] = 0; + result.set(line, 1);*/ + var result = Array.apply([], line); + result.unshift(0); + return result; + }; + + var filterSub = function filterSub(line, colorsPerPixel) { + var result = [], + len = line.length, + left; + result[0] = 1; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + result[i + 1] = line[i] - left + 0x0100 & 0xff; + } + + return result; + }; + + var filterUp = function filterUp(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + up; + result[0] = 2; + + for (var i = 0; i < len; i += 1) { + up = prevLine && prevLine[i] || 0; + result[i + 1] = line[i] - up + 0x0100 & 0xff; + } + + return result; + }; + + var filterAverage = function filterAverage(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + left, + up; + result[0] = 3; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + up = prevLine && prevLine[i] || 0; + result[i + 1] = line[i] + 0x0100 - (left + up >>> 1) & 0xff; + } + + return result; + }; + + var filterPaeth = function filterPaeth(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + left, + up, + upLeft, + paeth; + result[0] = 4; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + up = prevLine && prevLine[i] || 0; + upLeft = prevLine && prevLine[i - colorsPerPixel] || 0; + paeth = paethPredictor(left, up, upLeft); + result[i + 1] = line[i] - paeth + 0x0100 & 0xff; + } + + return result; + }; + + var paethPredictor = function paethPredictor(left, up, upLeft) { + if (left === up && up === upLeft) { + return left; + } + + var pLeft = Math.abs(up - upLeft), + pUp = Math.abs(left - upLeft), + pUpLeft = Math.abs(left + up - upLeft - upLeft); + return pLeft <= pUp && pLeft <= pUpLeft ? left : pUp <= pUpLeft ? up : upLeft; + }; + + var getFilterMethods = function getFilterMethods() { + return [filterNone, filterSub, filterUp, filterAverage, filterPaeth]; + }; + + var getIndexOfSmallestSum = function getIndexOfSmallestSum(arrays) { + var sum = arrays.map(function (value) { + return value.reduce(function (pv, cv) { + return pv + Math.abs(cv); + }, 0); + }); + return sum.indexOf(Math.min.apply(null, sum)); + }; + + var getPredictorFromCompression = function getPredictorFromCompression(compression) { + var predictor; + + switch (compression) { + case jsPDFAPI.image_compression.FAST: + predictor = 11; + break; + + case jsPDFAPI.image_compression.MEDIUM: + predictor = 13; + break; + + case jsPDFAPI.image_compression.SLOW: + predictor = 14; + break; + + default: + predictor = 12; + break; + } + + return predictor; + }; + /** + * @name processPNG + * @function + * @ignore + */ + + + jsPDFAPI.processPNG = function (imageData, index, alias, compression) { + + var colorSpace, + filter = this.decode.FLATE_DECODE, + bitsPerComponent, + image, + decodeParameters = "", + trns, + colors, + pal, + smask, + pixels, + len, + alphaData, + imgData, + hasColors, + pixel, + i, + n; + if (this.__addimage__.isArrayBuffer(imageData)) imageData = new Uint8Array(imageData); + + if (this.__addimage__.isArrayBufferView(imageData)) { + image = new PNG(imageData); + imageData = image.imgData; + bitsPerComponent = image.bits; + colorSpace = image.colorSpace; + colors = image.colors; + /* + * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample. + * + * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample. + * + * Extract alpha to create two separate images, using the alpha as a sMask + */ + + if ([4, 6].indexOf(image.colorType) !== -1) { + /* + * processes 8 bit RGBA and grayscale + alpha images + */ + if (image.bits === 8) { + pixels = image.pixelBitlength == 32 ? new Uint32Array(image.decodePixels().buffer) : image.pixelBitlength == 16 ? new Uint16Array(image.decodePixels().buffer) : new Uint8Array(image.decodePixels().buffer); + len = pixels.length; + imgData = new Uint8Array(len * image.colors); + alphaData = new Uint8Array(len); + var pDiff = image.pixelBitlength - image.bits; + i = 0; + n = 0; + var pbl; + + for (; i < len; i++) { + pixel = pixels[i]; + pbl = 0; + + while (pbl < pDiff) { + imgData[n++] = pixel >>> pbl & 0xff; + pbl = pbl + image.bits; + } + + alphaData[i] = pixel >>> pbl & 0xff; + } + } + /* + * processes 16 bit RGBA and grayscale + alpha images + */ + + + if (image.bits === 16) { + pixels = new Uint32Array(image.decodePixels().buffer); + len = pixels.length; + imgData = new Uint8Array(len * (32 / image.pixelBitlength) * image.colors); + alphaData = new Uint8Array(len * (32 / image.pixelBitlength)); + hasColors = image.colors > 1; + i = 0; + n = 0; + var a = 0; + + while (i < len) { + pixel = pixels[i++]; + imgData[n++] = pixel >>> 0 & 0xff; + + if (hasColors) { + imgData[n++] = pixel >>> 16 & 0xff; + pixel = pixels[i++]; + imgData[n++] = pixel >>> 0 & 0xff; + } + + alphaData[a++] = pixel >>> 16 & 0xff; + } + + bitsPerComponent = 8; + } + + if (canCompress(compression)) { + imageData = compressBytes(imgData, image.width * image.colors, image.colors, compression); + smask = compressBytes(alphaData, image.width, 1, compression); + } else { + imageData = imgData; + smask = alphaData; + filter = undefined; + } + } + /* + * Indexed png. Each pixel is a palette index. + */ + + + if (image.colorType === 3) { + colorSpace = this.color_spaces.INDEXED; + pal = image.palette; + + if (image.transparency.indexed) { + var trans = image.transparency.indexed; + var total = 0; + i = 0; + len = trans.length; + + for (; i < len; ++i) { + total += trans[i]; + } + + total = total / 255; + /* + * a single color is specified as 100% transparent (0), + * so we set trns to use a /Mask with that index + */ + + if (total === len - 1 && trans.indexOf(0) !== -1) { + trns = [trans.indexOf(0)]; + /* + * there's more than one colour within the palette that specifies + * a transparency value less than 255, so we unroll the pixels to create an image sMask + */ + } else if (total !== len) { + pixels = image.decodePixels(); + alphaData = new Uint8Array(pixels.length); + i = 0; + len = pixels.length; + + for (; i < len; i++) { + alphaData[i] = trans[pixels[i]]; + } + + smask = compressBytes(alphaData, image.width, 1); + } + } + } + + var predictor = getPredictorFromCompression(compression); + + if (filter === this.decode.FLATE_DECODE) { + decodeParameters = "/Predictor " + predictor + " "; + } + + decodeParameters += "/Colors " + colors + " /BitsPerComponent " + bitsPerComponent + " /Columns " + image.width; + + if (this.__addimage__.isArrayBuffer(imageData) || this.__addimage__.isArrayBufferView(imageData)) { + imageData = this.__addimage__.arrayBufferToBinaryString(imageData); + } + + if (smask && this.__addimage__.isArrayBuffer(smask) || this.__addimage__.isArrayBufferView(smask)) { + smask = this.__addimage__.arrayBufferToBinaryString(smask); + } + + return { + alias: alias, + data: imageData, + index: index, + filter: filter, + decodeParameters: decodeParameters, + transparency: trns, + palette: pal, + sMask: smask, + predictor: predictor, + width: image.width, + height: image.height, + bitsPerComponent: bitsPerComponent, + colorSpace: colorSpace + }; + } + }; +})(jsPDF.API); + +/** + * @license + * (c) Dean McNamee , 2013. + * + * https://github.com/deanm/omggif + * + * 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. + * + * omggif is a JavaScript implementation of a GIF 89a encoder and decoder, + * including animation and compression. It does not rely on any specific + * underlying system, so should run in the browser, Node, or Plask. + */ + +function GifReader(buf) { + var p = 0; // - Header (GIF87a or GIF89a). + + if (buf[p++] !== 0x47 || buf[p++] !== 0x49 || buf[p++] !== 0x46 || buf[p++] !== 0x38 || (buf[p++] + 1 & 0xfd) !== 0x38 || buf[p++] !== 0x61) { + throw new Error("Invalid GIF 87a/89a header."); + } // - Logical Screen Descriptor. + + + var width = buf[p++] | buf[p++] << 8; + var height = buf[p++] | buf[p++] << 8; + var pf0 = buf[p++]; // . + + var global_palette_flag = pf0 >> 7; + var num_global_colors_pow2 = pf0 & 0x7; + var num_global_colors = 1 << num_global_colors_pow2 + 1; + var background = buf[p++]; + buf[p++]; // Pixel aspect ratio (unused?). + + var global_palette_offset = null; + var global_palette_size = null; + + if (global_palette_flag) { + global_palette_offset = p; + global_palette_size = num_global_colors; + p += num_global_colors * 3; // Seek past palette. + } + + var no_eof = true; + var frames = []; + var delay = 0; + var transparent_index = null; + var disposal = 0; // 0 - No disposal specified. + + var loop_count = null; + this.width = width; + this.height = height; + + while (no_eof && p < buf.length) { + switch (buf[p++]) { + case 0x21: + // Graphics Control Extension Block + switch (buf[p++]) { + case 0xff: + // Application specific block + // Try if it's a Netscape block (with animation loop counter). + if (buf[p] !== 0x0b || // 21 FF already read, check block size. + // NETSCAPE2.0 + buf[p + 1] == 0x4e && buf[p + 2] == 0x45 && buf[p + 3] == 0x54 && buf[p + 4] == 0x53 && buf[p + 5] == 0x43 && buf[p + 6] == 0x41 && buf[p + 7] == 0x50 && buf[p + 8] == 0x45 && buf[p + 9] == 0x32 && buf[p + 10] == 0x2e && buf[p + 11] == 0x30 && // Sub-block + buf[p + 12] == 0x03 && buf[p + 13] == 0x01 && buf[p + 16] == 0) { + p += 14; + loop_count = buf[p++] | buf[p++] << 8; + p++; // Skip terminator. + } else { + // We don't know what it is, just try to get past it. + p += 12; + + while (true) { + // Seek through subblocks. + var block_size = buf[p++]; // Bad block size (ex: undefined from an out of bounds read). + + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + + p += block_size; + } + } + + break; + + case 0xf9: + // Graphics Control Extension + if (buf[p++] !== 0x4 || buf[p + 4] !== 0) throw new Error("Invalid graphics extension block."); + var pf1 = buf[p++]; + delay = buf[p++] | buf[p++] << 8; + transparent_index = buf[p++]; + if ((pf1 & 1) === 0) transparent_index = null; + disposal = pf1 >> 2 & 0x7; + p++; // Skip terminator. + + break; + + case 0xfe: + // Comment Extension. + while (true) { + // Seek through subblocks. + var block_size = buf[p++]; // Bad block size (ex: undefined from an out of bounds read). + + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + // console.log(buf.slice(p, p+block_size).toString('ascii')); + + p += block_size; + } + + break; + + default: + throw new Error("Unknown graphic control label: 0x" + buf[p - 1].toString(16)); + } + + break; + + case 0x2c: + // Image Descriptor. + var x = buf[p++] | buf[p++] << 8; + var y = buf[p++] | buf[p++] << 8; + var w = buf[p++] | buf[p++] << 8; + var h = buf[p++] | buf[p++] << 8; + var pf2 = buf[p++]; + var local_palette_flag = pf2 >> 7; + var interlace_flag = pf2 >> 6 & 1; + var num_local_colors_pow2 = pf2 & 0x7; + var num_local_colors = 1 << num_local_colors_pow2 + 1; + var palette_offset = global_palette_offset; + var palette_size = global_palette_size; + var has_local_palette = false; + + if (local_palette_flag) { + var has_local_palette = true; + palette_offset = p; // Override with local palette. + + palette_size = num_local_colors; + p += num_local_colors * 3; // Seek past palette. + } + + var data_offset = p; + p++; // codesize + + while (true) { + var block_size = buf[p++]; // Bad block size (ex: undefined from an out of bounds read). + + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + + p += block_size; + } + + frames.push({ + x: x, + y: y, + width: w, + height: h, + has_local_palette: has_local_palette, + palette_offset: palette_offset, + palette_size: palette_size, + data_offset: data_offset, + data_length: p - data_offset, + transparent_index: transparent_index, + interlaced: !!interlace_flag, + delay: delay, + disposal: disposal + }); + break; + + case 0x3b: + // Trailer Marker (end of file). + no_eof = false; + break; + + default: + throw new Error("Unknown gif block: 0x" + buf[p - 1].toString(16)); + } + } + + this.numFrames = function () { + return frames.length; + }; + + this.loopCount = function () { + return loop_count; + }; + + this.frameInfo = function (frame_num) { + if (frame_num < 0 || frame_num >= frames.length) throw new Error("Frame index out of range."); + return frames[frame_num]; + }; + + this.decodeAndBlitFrameBGRA = function (frame_num, pixels) { + var frame = this.frameInfo(frame_num); + var num_pixels = frame.width * frame.height; + var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices. + + GifReaderLZWOutputIndexStream(buf, frame.data_offset, index_stream, num_pixels); + var palette_offset = frame.palette_offset; // NOTE(deanm): It seems to be much faster to compare index to 256 than + // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in + // the profile, not sure if it's related to using a Uint8Array. + + var trans = frame.transparent_index; + if (trans === null) trans = 256; // We are possibly just blitting to a portion of the entire frame. + // That is a subrect within the framerect, so the additional pixels + // must be skipped over after we finished a scanline. + + var framewidth = frame.width; + var framestride = width - framewidth; + var xleft = framewidth; // Number of subrect pixels left in scanline. + // Output indices of the top left and bottom right corners of the subrect. + + var opbeg = (frame.y * width + frame.x) * 4; + var opend = ((frame.y + frame.height) * width + frame.x) * 4; + var op = opbeg; + var scanstride = framestride * 4; // Use scanstride to skip past the rows when interlacing. This is skipping + // 7 rows for the first two passes, then 3 then 1. + + if (frame.interlaced === true) { + scanstride += width * 4 * 7; // Pass 1. + } + + var interlaceskip = 8; // Tracking the row interval in the current pass. + + for (var i = 0, il = index_stream.length; i < il; ++i) { + var index = index_stream[i]; + + if (xleft === 0) { + // Beginning of new scan line + op += scanstride; + xleft = framewidth; + + if (op >= opend) { + // Catch the wrap to switch passes when interlacing. + scanstride = framestride * 4 + width * 4 * (interlaceskip - 1); // interlaceskip / 2 * 4 is interlaceskip << 1. + + op = opbeg + (framewidth + framestride) * (interlaceskip << 1); + interlaceskip >>= 1; + } + } + + if (index === trans) { + op += 4; + } else { + var r = buf[palette_offset + index * 3]; + var g = buf[palette_offset + index * 3 + 1]; + var b = buf[palette_offset + index * 3 + 2]; + pixels[op++] = b; + pixels[op++] = g; + pixels[op++] = r; + pixels[op++] = 255; + } + + --xleft; + } + }; // I will go to copy and paste hell one day... + + + this.decodeAndBlitFrameRGBA = function (frame_num, pixels) { + var frame = this.frameInfo(frame_num); + var num_pixels = frame.width * frame.height; + var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices. + + GifReaderLZWOutputIndexStream(buf, frame.data_offset, index_stream, num_pixels); + var palette_offset = frame.palette_offset; // NOTE(deanm): It seems to be much faster to compare index to 256 than + // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in + // the profile, not sure if it's related to using a Uint8Array. + + var trans = frame.transparent_index; + if (trans === null) trans = 256; // We are possibly just blitting to a portion of the entire frame. + // That is a subrect within the framerect, so the additional pixels + // must be skipped over after we finished a scanline. + + var framewidth = frame.width; + var framestride = width - framewidth; + var xleft = framewidth; // Number of subrect pixels left in scanline. + // Output indices of the top left and bottom right corners of the subrect. + + var opbeg = (frame.y * width + frame.x) * 4; + var opend = ((frame.y + frame.height) * width + frame.x) * 4; + var op = opbeg; + var scanstride = framestride * 4; // Use scanstride to skip past the rows when interlacing. This is skipping + // 7 rows for the first two passes, then 3 then 1. + + if (frame.interlaced === true) { + scanstride += width * 4 * 7; // Pass 1. + } + + var interlaceskip = 8; // Tracking the row interval in the current pass. + + for (var i = 0, il = index_stream.length; i < il; ++i) { + var index = index_stream[i]; + + if (xleft === 0) { + // Beginning of new scan line + op += scanstride; + xleft = framewidth; + + if (op >= opend) { + // Catch the wrap to switch passes when interlacing. + scanstride = framestride * 4 + width * 4 * (interlaceskip - 1); // interlaceskip / 2 * 4 is interlaceskip << 1. + + op = opbeg + (framewidth + framestride) * (interlaceskip << 1); + interlaceskip >>= 1; + } + } + + if (index === trans) { + op += 4; + } else { + var r = buf[palette_offset + index * 3]; + var g = buf[palette_offset + index * 3 + 1]; + var b = buf[palette_offset + index * 3 + 2]; + pixels[op++] = r; + pixels[op++] = g; + pixels[op++] = b; + pixels[op++] = 255; + } + + --xleft; + } + }; +} + +function GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) { + var min_code_size = code_stream[p++]; + var clear_code = 1 << min_code_size; + var eoi_code = clear_code + 1; + var next_code = eoi_code + 1; + var cur_code_size = min_code_size + 1; // Number of bits per code. + // NOTE: This shares the same name as the encoder, but has a different + // meaning here. Here this masks each code coming from the code stream. + + var code_mask = (1 << cur_code_size) - 1; + var cur_shift = 0; + var cur = 0; + var op = 0; // Output pointer. + + var subblock_size = code_stream[p++]; // TODO(deanm): Would using a TypedArray be any faster? At least it would + // solve the fast mode / backing store uncertainty. + // var code_table = Array(4096); + + var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits. + + var prev_code = null; // Track code-1. + + while (true) { + // Read up to two bytes, making sure we always 12-bits for max sized code. + while (cur_shift < 16) { + if (subblock_size === 0) break; // No more data to be read. + + cur |= code_stream[p++] << cur_shift; + cur_shift += 8; + + if (subblock_size === 1) { + // Never let it get to 0 to hold logic above. + subblock_size = code_stream[p++]; // Next subblock. + } else { + --subblock_size; + } + } // TODO(deanm): We should never really get here, we should have received + // and EOI. + + + if (cur_shift < cur_code_size) break; + var code = cur & code_mask; + cur >>= cur_code_size; + cur_shift -= cur_code_size; // TODO(deanm): Maybe should check that the first code was a clear code, + // at least this is what you're supposed to do. But actually our encoder + // now doesn't emit a clear code first anyway. + + if (code === clear_code) { + // We don't actually have to clear the table. This could be a good idea + // for greater error checking, but we don't really do any anyway. We + // will just track it with next_code and overwrite old entries. + next_code = eoi_code + 1; + cur_code_size = min_code_size + 1; + code_mask = (1 << cur_code_size) - 1; // Don't update prev_code ? + + prev_code = null; + continue; + } else if (code === eoi_code) { + break; + } // We have a similar situation as the decoder, where we want to store + // variable length entries (code table entries), but we want to do in a + // faster manner than an array of arrays. The code below stores sort of a + // linked list within the code table, and then "chases" through it to + // construct the dictionary entries. When a new entry is created, just the + // last byte is stored, and the rest (prefix) of the entry is only + // referenced by its table entry. Then the code chases through the + // prefixes until it reaches a single byte code. We have to chase twice, + // first to compute the length, and then to actually copy the data to the + // output (backwards, since we know the length). The alternative would be + // storing something in an intermediate stack, but that doesn't make any + // more sense. I implemented an approach where it also stored the length + // in the code table, although it's a bit tricky because you run out of + // bits (12 + 12 + 8), but I didn't measure much improvements (the table + // entries are generally not the long). Even when I created benchmarks for + // very long table entries the complexity did not seem worth it. + // The code table stores the prefix entry in 12 bits and then the suffix + // byte in 8 bits, so each entry is 20 bits. + + + var chase_code = code < next_code ? code : prev_code; // Chase what we will output, either {CODE} or {CODE-1}. + + var chase_length = 0; + var chase = chase_code; + + while (chase > clear_code) { + chase = code_table[chase] >> 8; + ++chase_length; + } + + var k = chase; + var op_end = op + chase_length + (chase_code !== code ? 1 : 0); + + if (op_end > output_length) { + console.log("Warning, gif stream longer than expected."); + return; + } // Already have the first byte from the chase, might as well write it fast. + + + output[op++] = k; + op += chase_length; + var b = op; // Track pointer, writing backwards. + + if (chase_code !== code) // The case of emitting {CODE-1} + k. + output[op++] = k; + chase = chase_code; + + while (chase_length--) { + chase = code_table[chase]; + output[--b] = chase & 0xff; // Write backwards. + + chase >>= 8; // Pull down to the prefix code. + } + + if (prev_code !== null && next_code < 4096) { + code_table[next_code++] = prev_code << 8 | k; // TODO(deanm): Figure out this clearing vs code growth logic better. I + // have an feeling that it should just happen somewhere else, for now it + // is awkward between when we grow past the max and then hit a clear code. + // For now just check if we hit the max 12-bits (then a clear code should + // follow, also of course encoded in 12-bits). + + if (next_code >= code_mask + 1 && cur_code_size < 12) { + ++cur_code_size; + code_mask = code_mask << 1 | 1; + } + } + + prev_code = code; + } + + if (op !== output_length) { + console.log("Warning, gif stream shorter than expected."); + } + + return output; +} + +/** + * @license + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * 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. + + * Neither the name of Adobe Systems Incorporated 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. +*/ + +/* +JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 + +Basic GUI blocking jpeg encoder +*/ +function JPEGEncoder(quality) { + var ffloor = Math.floor; + var YTable = new Array(64); + var UVTable = new Array(64); + var fdtbl_Y = new Array(64); + var fdtbl_UV = new Array(64); + var YDC_HT; + var UVDC_HT; + var YAC_HT; + var UVAC_HT; + var bitcode = new Array(65535); + var category = new Array(65535); + var outputfDCTQuant = new Array(64); + var DU = new Array(64); + var byteout = []; + var bytenew = 0; + var bytepos = 7; + var YDU = new Array(64); + var UDU = new Array(64); + var VDU = new Array(64); + var clt = new Array(256); + var RGB_YUV_TABLE = new Array(2048); + var currentQuality; + var ZigZag = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; + var std_dc_luminance_nrcodes = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]; + var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + var std_ac_luminance_nrcodes = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]; + var std_ac_luminance_values = [0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]; + var std_dc_chrominance_nrcodes = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; + var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + var std_ac_chrominance_nrcodes = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]; + var std_ac_chrominance_values = [0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]; + + function initQuantTables(sf) { + var YQT = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99]; + + for (var i = 0; i < 64; i++) { + var t = ffloor((YQT[i] * sf + 50) / 100); + t = Math.min(Math.max(t, 1), 255); + YTable[ZigZag[i]] = t; + } + + var UVQT = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99]; + + for (var j = 0; j < 64; j++) { + var u = ffloor((UVQT[j] * sf + 50) / 100); + u = Math.min(Math.max(u, 1), 255); + UVTable[ZigZag[j]] = u; + } + + var aasf = [1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.5411961, 0.275899379]; + var k = 0; + + for (var row = 0; row < 8; row++) { + for (var col = 0; col < 8; col++) { + fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0); + fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0); + k++; + } + } + } + + function computeHuffmanTbl(nrcodes, std_table) { + var codevalue = 0; + var pos_in_table = 0; + var HT = new Array(); + + for (var k = 1; k <= 16; k++) { + for (var j = 1; j <= nrcodes[k]; j++) { + HT[std_table[pos_in_table]] = []; + HT[std_table[pos_in_table]][0] = codevalue; + HT[std_table[pos_in_table]][1] = k; + pos_in_table++; + codevalue++; + } + + codevalue *= 2; + } + + return HT; + } + + function initHuffmanTbl() { + YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes, std_dc_luminance_values); + UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes, std_dc_chrominance_values); + YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes, std_ac_luminance_values); + UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes, std_ac_chrominance_values); + } + + function initCategoryNumber() { + var nrlower = 1; + var nrupper = 2; + + for (var cat = 1; cat <= 15; cat++) { + //Positive numbers + for (var nr = nrlower; nr < nrupper; nr++) { + category[32767 + nr] = cat; + bitcode[32767 + nr] = []; + bitcode[32767 + nr][1] = cat; + bitcode[32767 + nr][0] = nr; + } //Negative numbers + + + for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) { + category[32767 + nrneg] = cat; + bitcode[32767 + nrneg] = []; + bitcode[32767 + nrneg][1] = cat; + bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg; + } + + nrlower <<= 1; + nrupper <<= 1; + } + } + + function initRGBYUVTable() { + for (var i = 0; i < 256; i++) { + RGB_YUV_TABLE[i] = 19595 * i; + RGB_YUV_TABLE[i + 256 >> 0] = 38470 * i; + RGB_YUV_TABLE[i + 512 >> 0] = 7471 * i + 0x8000; + RGB_YUV_TABLE[i + 768 >> 0] = -11059 * i; + RGB_YUV_TABLE[i + 1024 >> 0] = -21709 * i; + RGB_YUV_TABLE[i + 1280 >> 0] = 32768 * i + 0x807fff; + RGB_YUV_TABLE[i + 1536 >> 0] = -27439 * i; + RGB_YUV_TABLE[i + 1792 >> 0] = -5329 * i; + } + } // IO functions + + + function writeBits(bs) { + var value = bs[0]; + var posval = bs[1] - 1; + + while (posval >= 0) { + if (value & 1 << posval) { + bytenew |= 1 << bytepos; + } + + posval--; + bytepos--; + + if (bytepos < 0) { + if (bytenew == 0xff) { + writeByte(0xff); + writeByte(0); + } else { + writeByte(bytenew); + } + + bytepos = 7; + bytenew = 0; + } + } + } + + function writeByte(value) { + //byteout.push(clt[value]); // write char directly instead of converting later + byteout.push(value); + } + + function writeWord(value) { + writeByte(value >> 8 & 0xff); + writeByte(value & 0xff); + } // DCT & quantization core + + + function fDCTQuant(data, fdtbl) { + var d0, d1, d2, d3, d4, d5, d6, d7; + /* Pass 1: process rows. */ + + var dataOff = 0; + var i; + var I8 = 8; + var I64 = 64; + + for (i = 0; i < I8; ++i) { + d0 = data[dataOff]; + d1 = data[dataOff + 1]; + d2 = data[dataOff + 2]; + d3 = data[dataOff + 3]; + d4 = data[dataOff + 4]; + d5 = data[dataOff + 5]; + d6 = data[dataOff + 6]; + d7 = data[dataOff + 7]; + var tmp0 = d0 + d7; + var tmp7 = d0 - d7; + var tmp1 = d1 + d6; + var tmp6 = d1 - d6; + var tmp2 = d2 + d5; + var tmp5 = d2 - d5; + var tmp3 = d3 + d4; + var tmp4 = d3 - d4; + /* Even part */ + + var tmp10 = tmp0 + tmp3; + /* phase 2 */ + + var tmp13 = tmp0 - tmp3; + var tmp11 = tmp1 + tmp2; + var tmp12 = tmp1 - tmp2; + data[dataOff] = tmp10 + tmp11; + /* phase 3 */ + + data[dataOff + 4] = tmp10 - tmp11; + var z1 = (tmp12 + tmp13) * 0.707106781; + /* c4 */ + + data[dataOff + 2] = tmp13 + z1; + /* phase 5 */ + + data[dataOff + 6] = tmp13 - z1; + /* Odd part */ + + tmp10 = tmp4 + tmp5; + /* phase 2 */ + + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + + var z5 = (tmp10 - tmp12) * 0.382683433; + /* c6 */ + + var z2 = 0.5411961 * tmp10 + z5; + /* c2-c6 */ + + var z4 = 1.306562965 * tmp12 + z5; + /* c2+c6 */ + + var z3 = tmp11 * 0.707106781; + /* c4 */ + + var z11 = tmp7 + z3; + /* phase 5 */ + + var z13 = tmp7 - z3; + data[dataOff + 5] = z13 + z2; + /* phase 6 */ + + data[dataOff + 3] = z13 - z2; + data[dataOff + 1] = z11 + z4; + data[dataOff + 7] = z11 - z4; + dataOff += 8; + /* advance pointer to next row */ + } + /* Pass 2: process columns. */ + + + dataOff = 0; + + for (i = 0; i < I8; ++i) { + d0 = data[dataOff]; + d1 = data[dataOff + 8]; + d2 = data[dataOff + 16]; + d3 = data[dataOff + 24]; + d4 = data[dataOff + 32]; + d5 = data[dataOff + 40]; + d6 = data[dataOff + 48]; + d7 = data[dataOff + 56]; + var tmp0p2 = d0 + d7; + var tmp7p2 = d0 - d7; + var tmp1p2 = d1 + d6; + var tmp6p2 = d1 - d6; + var tmp2p2 = d2 + d5; + var tmp5p2 = d2 - d5; + var tmp3p2 = d3 + d4; + var tmp4p2 = d3 - d4; + /* Even part */ + + var tmp10p2 = tmp0p2 + tmp3p2; + /* phase 2 */ + + var tmp13p2 = tmp0p2 - tmp3p2; + var tmp11p2 = tmp1p2 + tmp2p2; + var tmp12p2 = tmp1p2 - tmp2p2; + data[dataOff] = tmp10p2 + tmp11p2; + /* phase 3 */ + + data[dataOff + 32] = tmp10p2 - tmp11p2; + var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; + /* c4 */ + + data[dataOff + 16] = tmp13p2 + z1p2; + /* phase 5 */ + + data[dataOff + 48] = tmp13p2 - z1p2; + /* Odd part */ + + tmp10p2 = tmp4p2 + tmp5p2; + /* phase 2 */ + + tmp11p2 = tmp5p2 + tmp6p2; + tmp12p2 = tmp6p2 + tmp7p2; + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + + var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; + /* c6 */ + + var z2p2 = 0.5411961 * tmp10p2 + z5p2; + /* c2-c6 */ + + var z4p2 = 1.306562965 * tmp12p2 + z5p2; + /* c2+c6 */ + + var z3p2 = tmp11p2 * 0.707106781; + /* c4 */ + + var z11p2 = tmp7p2 + z3p2; + /* phase 5 */ + + var z13p2 = tmp7p2 - z3p2; + data[dataOff + 40] = z13p2 + z2p2; + /* phase 6 */ + + data[dataOff + 24] = z13p2 - z2p2; + data[dataOff + 8] = z11p2 + z4p2; + data[dataOff + 56] = z11p2 - z4p2; + dataOff++; + /* advance pointer to next column */ + } // Quantize/descale the coefficients + + + var fDCTQuant; + + for (i = 0; i < I64; ++i) { + // Apply the quantization and scaling factor & Round to nearest integer + fDCTQuant = data[i] * fdtbl[i]; + outputfDCTQuant[i] = fDCTQuant > 0.0 ? fDCTQuant + 0.5 | 0 : fDCTQuant - 0.5 | 0; //outputfDCTQuant[i] = fround(fDCTQuant); + } + + return outputfDCTQuant; + } + + function writeAPP0() { + writeWord(0xffe0); // marker + + writeWord(16); // length + + writeByte(0x4a); // J + + writeByte(0x46); // F + + writeByte(0x49); // I + + writeByte(0x46); // F + + writeByte(0); // = "JFIF",'\0' + + writeByte(1); // versionhi + + writeByte(1); // versionlo + + writeByte(0); // xyunits + + writeWord(1); // xdensity + + writeWord(1); // ydensity + + writeByte(0); // thumbnwidth + + writeByte(0); // thumbnheight + } + + function writeSOF0(width, height) { + writeWord(0xffc0); // marker + + writeWord(17); // length, truecolor YUV JPG + + writeByte(8); // precision + + writeWord(height); + writeWord(width); + writeByte(3); // nrofcomponents + + writeByte(1); // IdY + + writeByte(0x11); // HVY + + writeByte(0); // QTY + + writeByte(2); // IdU + + writeByte(0x11); // HVU + + writeByte(1); // QTU + + writeByte(3); // IdV + + writeByte(0x11); // HVV + + writeByte(1); // QTV + } + + function writeDQT() { + writeWord(0xffdb); // marker + + writeWord(132); // length + + writeByte(0); + + for (var i = 0; i < 64; i++) { + writeByte(YTable[i]); + } + + writeByte(1); + + for (var j = 0; j < 64; j++) { + writeByte(UVTable[j]); + } + } + + function writeDHT() { + writeWord(0xffc4); // marker + + writeWord(0x01a2); // length + + writeByte(0); // HTYDCinfo + + for (var i = 0; i < 16; i++) { + writeByte(std_dc_luminance_nrcodes[i + 1]); + } + + for (var j = 0; j <= 11; j++) { + writeByte(std_dc_luminance_values[j]); + } + + writeByte(0x10); // HTYACinfo + + for (var k = 0; k < 16; k++) { + writeByte(std_ac_luminance_nrcodes[k + 1]); + } + + for (var l = 0; l <= 161; l++) { + writeByte(std_ac_luminance_values[l]); + } + + writeByte(1); // HTUDCinfo + + for (var m = 0; m < 16; m++) { + writeByte(std_dc_chrominance_nrcodes[m + 1]); + } + + for (var n = 0; n <= 11; n++) { + writeByte(std_dc_chrominance_values[n]); + } + + writeByte(0x11); // HTUACinfo + + for (var o = 0; o < 16; o++) { + writeByte(std_ac_chrominance_nrcodes[o + 1]); + } + + for (var p = 0; p <= 161; p++) { + writeByte(std_ac_chrominance_values[p]); + } + } + + function writeSOS() { + writeWord(0xffda); // marker + + writeWord(12); // length + + writeByte(3); // nrofcomponents + + writeByte(1); // IdY + + writeByte(0); // HTY + + writeByte(2); // IdU + + writeByte(0x11); // HTU + + writeByte(3); // IdV + + writeByte(0x11); // HTV + + writeByte(0); // Ss + + writeByte(0x3f); // Se + + writeByte(0); // Bf + } + + function processDU(CDU, fdtbl, DC, HTDC, HTAC) { + var EOB = HTAC[0x00]; + var M16zeroes = HTAC[0xf0]; + var pos; + var I16 = 16; + var I63 = 63; + var I64 = 64; + var DU_DCT = fDCTQuant(CDU, fdtbl); //ZigZag reorder + + for (var j = 0; j < I64; ++j) { + DU[ZigZag[j]] = DU_DCT[j]; + } + + var Diff = DU[0] - DC; + DC = DU[0]; //Encode DC + + if (Diff == 0) { + writeBits(HTDC[0]); // Diff might be 0 + } else { + pos = 32767 + Diff; + writeBits(HTDC[category[pos]]); + writeBits(bitcode[pos]); + } //Encode ACs + + + var end0pos = 63; // was const... which is crazy + + while (end0pos > 0 && DU[end0pos] == 0) { + end0pos--; + } //end0pos = first element in reverse order !=0 + + + if (end0pos == 0) { + writeBits(EOB); + return DC; + } + + var i = 1; + var lng; + + while (i <= end0pos) { + var startpos = i; + + while (DU[i] == 0 && i <= end0pos) { + ++i; + } + + var nrzeroes = i - startpos; + + if (nrzeroes >= I16) { + lng = nrzeroes >> 4; + + for (var nrmarker = 1; nrmarker <= lng; ++nrmarker) { + writeBits(M16zeroes); + } + + nrzeroes = nrzeroes & 0xf; + } + + pos = 32767 + DU[i]; + writeBits(HTAC[(nrzeroes << 4) + category[pos]]); + writeBits(bitcode[pos]); + i++; + } + + if (end0pos != I63) { + writeBits(EOB); + } + + return DC; + } + + function initCharLookupTable() { + var sfcc = String.fromCharCode; + + for (var i = 0; i < 256; i++) { + ///// ACHTUNG // 255 + clt[i] = sfcc(i); + } + } + + this.encode = function (image, quality // image data object + ) { + if (quality) setQuality(quality); // Initialize bit writer + + byteout = new Array(); + bytenew = 0; + bytepos = 7; // Add JPEG headers + + writeWord(0xffd8); // SOI + + writeAPP0(); + writeDQT(); + writeSOF0(image.width, image.height); + writeDHT(); + writeSOS(); // Encode 8x8 macroblocks + + var DCY = 0; + var DCU = 0; + var DCV = 0; + bytenew = 0; + bytepos = 7; + this.encode.displayName = "_encode_"; + var imageData = image.data; + var width = image.width; + var height = image.height; + var quadWidth = width * 4; + var x, + y = 0; + var r, g, b; + var start, p, col, row, pos; + + while (y < height) { + x = 0; + + while (x < quadWidth) { + start = quadWidth * y + x; + col = -1; + row = 0; + + for (pos = 0; pos < 64; pos++) { + row = pos >> 3; // /8 + + col = (pos & 7) * 4; // %8 + + p = start + row * quadWidth + col; + + if (y + row >= height) { + // padding bottom + p -= quadWidth * (y + 1 + row - height); + } + + if (x + col >= quadWidth) { + // padding right + p -= x + col - quadWidth + 4; + } + + r = imageData[p++]; + g = imageData[p++]; + b = imageData[p++]; + /* // calculate YUV values dynamically + YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 + UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); + VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); + */ + // use lookup table (slightly faster) + + YDU[pos] = (RGB_YUV_TABLE[r] + RGB_YUV_TABLE[g + 256 >> 0] + RGB_YUV_TABLE[b + 512 >> 0] >> 16) - 128; + UDU[pos] = (RGB_YUV_TABLE[r + 768 >> 0] + RGB_YUV_TABLE[g + 1024 >> 0] + RGB_YUV_TABLE[b + 1280 >> 0] >> 16) - 128; + VDU[pos] = (RGB_YUV_TABLE[r + 1280 >> 0] + RGB_YUV_TABLE[g + 1536 >> 0] + RGB_YUV_TABLE[b + 1792 >> 0] >> 16) - 128; + } + + DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + x += 32; + } + + y += 8; + } //////////////////////////////////////////////////////////////// + // Do the bit alignment of the EOI marker + + + if (bytepos >= 0) { + var fillbits = []; + fillbits[1] = bytepos + 1; + fillbits[0] = (1 << bytepos + 1) - 1; + writeBits(fillbits); + } + + writeWord(0xffd9); //EOI + + return new Uint8Array(byteout); + }; + + function setQuality(quality) { + quality = Math.min(Math.max(quality, 1), 100); + if (currentQuality == quality) return; // don't recalc if unchanged + + var sf = quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2); + initQuantTables(sf); + currentQuality = quality; //console.log('Quality set to: '+quality +'%'); + } + + function init() { + quality = quality || 50; // Create tables + + initCharLookupTable(); + initHuffmanTbl(); + initCategoryNumber(); + initRGBYUVTable(); + setQuality(quality); + } + + init(); +} + +/** + * @license + * Copyright (c) 2017 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF Gif Support PlugIn + * + * @name gif_support + * @module + */ + +(function (jsPDFAPI) { + + jsPDFAPI.processGIF89A = function (imageData, index, alias, compression) { + var reader = new GifReader(imageData); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = []; + reader.decodeAndBlitFrameRGBA(0, pixels); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; + + jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A; +})(jsPDF.API); + +/** + * @author shaozilee + * + * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp + * + */ + +function BmpDecoder(buffer, is_with_alpha) { + this.pos = 0; + this.buffer = buffer; + this.datav = new DataView(buffer.buffer); + this.is_with_alpha = !!is_with_alpha; + this.bottom_up = true; + this.flag = String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]); + this.pos += 2; + if (["BM", "BA", "CI", "CP", "IC", "PT"].indexOf(this.flag) === -1) throw new Error("Invalid BMP File"); + this.parseHeader(); + this.parseBGR(); +} + +BmpDecoder.prototype.parseHeader = function () { + this.fileSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.reserved = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.offset = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.headerSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.width = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.height = this.datav.getInt32(this.pos, true); + this.pos += 4; + this.planes = this.datav.getUint16(this.pos, true); + this.pos += 2; + this.bitPP = this.datav.getUint16(this.pos, true); + this.pos += 2; + this.compress = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.rawSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.hr = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.vr = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.colors = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.importantColors = this.datav.getUint32(this.pos, true); + this.pos += 4; + + if (this.bitPP === 16 && this.is_with_alpha) { + this.bitPP = 15; + } + + if (this.bitPP < 15) { + var len = this.colors === 0 ? 1 << this.bitPP : this.colors; + this.palette = new Array(len); + + for (var i = 0; i < len; i++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var quad = this.datav.getUint8(this.pos++, true); + this.palette[i] = { + red: red, + green: green, + blue: blue, + quad: quad + }; + } + } + + if (this.height < 0) { + this.height *= -1; + this.bottom_up = false; + } +}; + +BmpDecoder.prototype.parseBGR = function () { + this.pos = this.offset; + + try { + var bitn = "bit" + this.bitPP; + var len = this.width * this.height * 4; + this.data = new Uint8Array(len); + this[bitn](); + } catch (e) { + console.log("bit decode error:" + e); + } +}; + +BmpDecoder.prototype.bit1 = function () { + var xlen = Math.ceil(this.width / 8); + var mode = xlen % 4; + var y; + + for (y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < xlen; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 8 * 4; + + for (var i = 0; i < 8; i++) { + if (x * 8 + i < this.width) { + var rgb = this.palette[b >> 7 - i & 0x1]; + this.data[location + i * 4] = rgb.blue; + this.data[location + i * 4 + 1] = rgb.green; + this.data[location + i * 4 + 2] = rgb.red; + this.data[location + i * 4 + 3] = 0xff; + } else { + break; + } + } + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } +}; + +BmpDecoder.prototype.bit4 = function () { + var xlen = Math.ceil(this.width / 2); + var mode = xlen % 4; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < xlen; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 2 * 4; + var before = b >> 4; + var after = b & 0x0f; + var rgb = this.palette[before]; + this.data[location] = rgb.blue; + this.data[location + 1] = rgb.green; + this.data[location + 2] = rgb.red; + this.data[location + 3] = 0xff; + if (x * 2 + 1 >= this.width) break; + rgb = this.palette[after]; + this.data[location + 4] = rgb.blue; + this.data[location + 4 + 1] = rgb.green; + this.data[location + 4 + 2] = rgb.red; + this.data[location + 4 + 3] = 0xff; + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } +}; + +BmpDecoder.prototype.bit8 = function () { + var mode = this.width % 4; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + + if (b < this.palette.length) { + var rgb = this.palette[b]; + this.data[location] = rgb.red; + this.data[location + 1] = rgb.green; + this.data[location + 2] = rgb.blue; + this.data[location + 3] = 0xff; + } else { + this.data[location] = 0xff; + this.data[location + 1] = 0xff; + this.data[location + 2] = 0xff; + this.data[location + 3] = 0xff; + } + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } +}; + +BmpDecoder.prototype.bit15 = function () { + var dif_w = this.width % 3; + + var _11111 = parseInt("11111", 2), + _1_5 = _11111; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var B = this.datav.getUint16(this.pos, true); + this.pos += 2; + var blue = (B & _1_5) / _1_5 * 255 | 0; + var green = (B >> 5 & _1_5) / _1_5 * 255 | 0; + var red = (B >> 10 & _1_5) / _1_5 * 255 | 0; + var alpha = B >> 15 ? 0xff : 0x00; + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } //skip extra bytes + + + this.pos += dif_w; + } +}; + +BmpDecoder.prototype.bit16 = function () { + var dif_w = this.width % 3; + + var _11111 = parseInt("11111", 2), + _1_5 = _11111; + + var _111111 = parseInt("111111", 2), + _1_6 = _111111; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var B = this.datav.getUint16(this.pos, true); + this.pos += 2; + var alpha = 0xff; + var blue = (B & _1_5) / _1_5 * 255 | 0; + var green = (B >> 5 & _1_6) / _1_6 * 255 | 0; + var red = (B >> 11) / _1_5 * 255 | 0; + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } //skip extra bytes + + + this.pos += dif_w; + } +}; + +BmpDecoder.prototype.bit24 = function () { + //when height > 0 + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = 0xff; + } //skip extra bytes + + + this.pos += this.width % 4; + } +}; +/** + * add 32bit decode func + * @author soubok + */ + + +BmpDecoder.prototype.bit32 = function () { + //when height > 0 + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var alpha = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } //skip extra bytes + //this.pos += (this.width % 4); + + } +}; + +BmpDecoder.prototype.getData = function () { + return this.data; +}; + +/** + * @license + * Copyright (c) 2018 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF bmp Support PlugIn + * @name bmp_support + * @module + */ + +(function (jsPDFAPI) { + + jsPDFAPI.processBMP = function (imageData, index, alias, compression) { + var reader = new BmpDecoder(imageData, false); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = reader.getData(); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; +})(jsPDF.API); + +function WebPDecoder(imageData) { + + function x(F) { + if (!F) throw Error("assert :P"); + } + + function fa(F, L, J) { + for (var H = 0; 4 > H; H++) { + if (F[L + H] != J.charCodeAt(H)) return !0; + } + + return !1; + } + + function I(F, L, J, H, Z) { + for (var O = 0; O < Z; O++) { + F[L + O] = J[H + O]; + } + } + + function M(F, L, J, H) { + for (var Z = 0; Z < H; Z++) { + F[L + Z] = J; + } + } + + function V(F) { + return new Int32Array(F); + } + + function wa(F, L) { + for (var J = [], H = 0; H < F; H++) { + J.push(new L()); + } + + return J; + } + + function wb() { + function F(J, H, Z) { + for (var O = Z[H], L = 0; L < O; L++) { + J.push(Z.length > H + 1 ? [] : 0); + if (Z.length < H + 1) break; + F(J[L], H + 1, Z); + } + } + + var L = []; + F(L, 0, [3, 11]); + return L; + } + + function Ed(F, L) { + function J(H, O, F) { + for (var Z = F[O], ma = 0; ma < Z; ma++) { + H.push(F.length > O + 1 ? [] : new L()); + if (F.length < O + 1) break; + J(H[ma], O + 1, F); + } + } + + var H = []; + J(H, 0, F); + return H; + } + + var _WebPDecoder = function _WebPDecoder() { + var self = this; + + function L(a, b) { + for (var c = 1 << b - 1 >>> 0; a & c;) { + c >>>= 1; + } + + return c ? (a & c - 1) + c : a; + } + + function J(a, b, c, d, e) { + x(!(d % c)); + + do { + d -= c, a[b + d] = e; + } while (0 < d); + } + + function H(a, b, c, d, e, f) { + var g = b, + h = 1 << c, + k, + l, + m = V(16), + n = V(16); + x(0 != e); + x(null != d); + x(null != a); + x(0 < c); + + for (l = 0; l < e; ++l) { + if (15 < d[l]) return 0; + ++m[d[l]]; + } + + if (m[0] == e) return 0; + n[1] = 0; + + for (k = 1; 15 > k; ++k) { + if (m[k] > 1 << k) return 0; + n[k + 1] = n[k] + m[k]; + } + + for (l = 0; l < e; ++l) { + k = d[l], 0 < d[l] && (f[n[k]++] = l); + } + + if (1 == n[15]) return d = new O(), d.g = 0, d.value = f[0], J(a, g, 1, h, d), h; + var r = -1, + q = h - 1, + t = 0, + v = 1, + p = 1, + u, + w = 1 << c; + l = 0; + k = 1; + + for (e = 2; k <= c; ++k, e <<= 1) { + p <<= 1; + v += p; + p -= m[k]; + if (0 > p) return 0; + + for (; 0 < m[k]; --m[k]) { + d = new O(), d.g = k, d.value = f[l++], J(a, g + t, e, w, d), t = L(t, k); + } + } + + k = c + 1; + + for (e = 2; 15 >= k; ++k, e <<= 1) { + p <<= 1; + v += p; + p -= m[k]; + if (0 > p) return 0; + + for (; 0 < m[k]; --m[k]) { + d = new O(); + + if ((t & q) != r) { + g += w; + r = k; + + for (u = 1 << r - c; 15 > r;) { + u -= m[r]; + if (0 >= u) break; + ++r; + u <<= 1; + } + + u = r - c; + w = 1 << u; + h += w; + r = t & q; + a[b + r].g = u + c; + a[b + r].value = g - b - r; + } + + d.g = k - c; + d.value = f[l++]; + J(a, g + (t >> c), e, w, d); + t = L(t, k); + } + } + + return v != 2 * n[15] - 1 ? 0 : h; + } + + function Z(a, b, c, d, e) { + x(2328 >= e); + if (512 >= e) var f = V(512);else if (f = V(e), null == f) return 0; + return H(a, b, c, d, e, f); + } + + function O() { + this.value = this.g = 0; + } + + function Fd() { + this.value = this.g = 0; + } + + function Ub() { + this.G = wa(5, O); + this.H = V(5); + this.jc = this.Qb = this.qb = this.nd = 0; + this.pd = wa(xb, Fd); + } + + function ma(a, b, c, d) { + x(null != a); + x(null != b); + x(2147483648 > d); + a.Ca = 254; + a.I = 0; + a.b = -8; + a.Ka = 0; + a.oa = b; + a.pa = c; + a.Jd = b; + a.Yc = c + d; + a.Zc = 4 <= d ? c + d - 4 + 1 : c; + Qa(a); + } + + function na(a, b) { + for (var c = 0; 0 < b--;) { + c |= K(a, 128) << b; + } + + return c; + } + + function ca(a, b) { + var c = na(a, b); + return G(a) ? -c : c; + } + + function cb(a, b, c, d) { + var e, + f = 0; + x(null != a); + x(null != b); + x(4294967288 > d); + a.Sb = d; + a.Ra = 0; + a.u = 0; + a.h = 0; + 4 < d && (d = 4); + + for (e = 0; e < d; ++e) { + f += b[c + e] << 8 * e; + } + + a.Ra = f; + a.bb = d; + a.oa = b; + a.pa = c; + } + + function Vb(a) { + for (; 8 <= a.u && a.bb < a.Sb;) { + a.Ra >>>= 8, a.Ra += a.oa[a.pa + a.bb] << ob - 8 >>> 0, ++a.bb, a.u -= 8; + } + + db(a) && (a.h = 1, a.u = 0); + } + + function D(a, b) { + x(0 <= b); + + if (!a.h && b <= Gd) { + var c = pb(a) & Hd[b]; + a.u += b; + Vb(a); + return c; + } + + a.h = 1; + return a.u = 0; + } + + function Wb() { + this.b = this.Ca = this.I = 0; + this.oa = []; + this.pa = 0; + this.Jd = []; + this.Yc = 0; + this.Zc = []; + this.Ka = 0; + } + + function Ra() { + this.Ra = 0; + this.oa = []; + this.h = this.u = this.bb = this.Sb = this.pa = 0; + } + + function pb(a) { + return a.Ra >>> (a.u & ob - 1) >>> 0; + } + + function db(a) { + x(a.bb <= a.Sb); + return a.h || a.bb == a.Sb && a.u > ob; + } + + function qb(a, b) { + a.u = b; + a.h = db(a); + } + + function Sa(a) { + a.u >= Xb && (x(a.u >= Xb), Vb(a)); + } + + function Qa(a) { + x(null != a && null != a.oa); + a.pa < a.Zc ? (a.I = (a.oa[a.pa++] | a.I << 8) >>> 0, a.b += 8) : (x(null != a && null != a.oa), a.pa < a.Yc ? (a.b += 8, a.I = a.oa[a.pa++] | a.I << 8) : a.Ka ? a.b = 0 : (a.I <<= 8, a.b += 8, a.Ka = 1)); + } + + function G(a) { + return na(a, 1); + } + + function K(a, b) { + var c = a.Ca; + 0 > a.b && Qa(a); + var d = a.b, + e = c * b >>> 8, + f = (a.I >>> d > e) + 0; + f ? (c -= e, a.I -= e + 1 << d >>> 0) : c = e + 1; + d = c; + + for (e = 0; 256 <= d;) { + e += 8, d >>= 8; + } + + d = 7 ^ e + Id[d]; + a.b -= d; + a.Ca = (c << d) - 1; + return f; + } + + function ra(a, b, c) { + a[b + 0] = c >> 24 & 255; + a[b + 1] = c >> 16 & 255; + a[b + 2] = c >> 8 & 255; + a[b + 3] = c >> 0 & 255; + } + + function Ta(a, b) { + return a[b + 0] << 0 | a[b + 1] << 8; + } + + function Yb(a, b) { + return Ta(a, b) | a[b + 2] << 16; + } + + function Ha(a, b) { + return Ta(a, b) | Ta(a, b + 2) << 16; + } + + function Zb(a, b) { + var c = 1 << b; + x(null != a); + x(0 < b); + a.X = V(c); + if (null == a.X) return 0; + a.Mb = 32 - b; + a.Xa = b; + return 1; + } + + function $b(a, b) { + x(null != a); + x(null != b); + x(a.Xa == b.Xa); + I(b.X, 0, a.X, 0, 1 << b.Xa); + } + + function ac() { + this.X = []; + this.Xa = this.Mb = 0; + } + + function bc(a, b, c, d) { + x(null != c); + x(null != d); + var e = c[0], + f = d[0]; + 0 == e && (e = (a * f + b / 2) / b); + 0 == f && (f = (b * e + a / 2) / a); + if (0 >= e || 0 >= f) return 0; + c[0] = e; + d[0] = f; + return 1; + } + + function xa(a, b) { + return a + (1 << b) - 1 >>> b; + } + + function yb(a, b) { + return ((a & 4278255360) + (b & 4278255360) >>> 0 & 4278255360) + ((a & 16711935) + (b & 16711935) >>> 0 & 16711935) >>> 0; + } + + function X(a, b) { + self[b] = function (b, d, e, f, g, h, k) { + var c; + + for (c = 0; c < g; ++c) { + var m = self[a](h[k + c - 1], e, f + c); + h[k + c] = yb(b[d + c], m); + } + }; + } + + function Jd() { + this.ud = this.hd = this.jd = 0; + } + + function aa(a, b) { + return (((a ^ b) & 4278124286) >>> 1) + (a & b) >>> 0; + } + + function sa(a) { + if (0 <= a && 256 > a) return a; + if (0 > a) return 0; + if (255 < a) return 255; + } + + function eb(a, b) { + return sa(a + (a - b + 0.5 >> 1)); + } + + function Ia(a, b, c) { + return Math.abs(b - c) - Math.abs(a - c); + } + + function cc(a, b, c, d, e, f, g) { + d = f[g - 1]; + + for (c = 0; c < e; ++c) { + f[g + c] = d = yb(a[b + c], d); + } + } + + function Kd(a, b, c, d, e) { + var f; + + for (f = 0; f < c; ++f) { + var g = a[b + f], + h = g >> 8 & 255, + k = g & 16711935, + k = k + ((h << 16) + h), + k = k & 16711935; + d[e + f] = (g & 4278255360) + k >>> 0; + } + } + + function dc(a, b) { + b.jd = a >> 0 & 255; + b.hd = a >> 8 & 255; + b.ud = a >> 16 & 255; + } + + function Ld(a, b, c, d, e, f) { + var g; + + for (g = 0; g < d; ++g) { + var h = b[c + g], + k = h >>> 8, + l = h >>> 16, + m = h, + l = l + ((a.jd << 24 >> 24) * (k << 24 >> 24) >>> 5), + l = l & 255, + m = m + ((a.hd << 24 >> 24) * (k << 24 >> 24) >>> 5), + m = m + ((a.ud << 24 >> 24) * (l << 24 >> 24) >>> 5), + m = m & 255; + e[f + g] = (h & 4278255360) + (l << 16) + m; + } + } + + function ec(a, b, c, d, e) { + self[b] = function (a, b, c, k, l, m, n, r, q) { + for (k = n; k < r; ++k) { + for (n = 0; n < q; ++n) { + l[m++] = e(c[d(a[b++])]); + } + } + }; + + self[a] = function (a, b, h, k, l, m, n) { + var f = 8 >> a.b, + g = a.Ea, + t = a.K[0], + v = a.w; + if (8 > f) for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) { + var p = 0, + u; + + for (u = 0; u < g; ++u) { + u & a || (p = d(k[l++])), m[n++] = e(t[p & v]), p >>= f; + } + } else self["VP8LMapColor" + c](k, l, t, v, m, n, b, h, g); + }; + } + + function Md(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++]; + d[e++] = f >> 16 & 255; + d[e++] = f >> 8 & 255; + d[e++] = f >> 0 & 255; + } + } + + function Nd(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++]; + d[e++] = f >> 16 & 255; + d[e++] = f >> 8 & 255; + d[e++] = f >> 0 & 255; + d[e++] = f >> 24 & 255; + } + } + + function Od(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++], + g = f >> 16 & 240 | f >> 12 & 15, + f = f >> 0 & 240 | f >> 28 & 15; + d[e++] = g; + d[e++] = f; + } + } + + function Pd(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++], + g = f >> 16 & 248 | f >> 13 & 7, + f = f >> 5 & 224 | f >> 3 & 31; + d[e++] = g; + d[e++] = f; + } + } + + function Qd(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++]; + d[e++] = f >> 0 & 255; + d[e++] = f >> 8 & 255; + d[e++] = f >> 16 & 255; + } + } + + function fb(a, b, c, d, e, f) { + if (0 == f) for (c = b + c; b < c;) { + f = a[b++], ra(d, (f[0] >> 24 | f[1] >> 8 & 65280 | f[2] << 8 & 16711680 | f[3] << 24) >>> 0), e += 32; + } else I(d, e, a, b, c); + } + + function gb(a, b) { + self[b][0] = self[a + "0"]; + self[b][1] = self[a + "1"]; + self[b][2] = self[a + "2"]; + self[b][3] = self[a + "3"]; + self[b][4] = self[a + "4"]; + self[b][5] = self[a + "5"]; + self[b][6] = self[a + "6"]; + self[b][7] = self[a + "7"]; + self[b][8] = self[a + "8"]; + self[b][9] = self[a + "9"]; + self[b][10] = self[a + "10"]; + self[b][11] = self[a + "11"]; + self[b][12] = self[a + "12"]; + self[b][13] = self[a + "13"]; + self[b][14] = self[a + "0"]; + self[b][15] = self[a + "0"]; + } + + function hb(a) { + return a == zb || a == Ab || a == Ja || a == Bb; + } + + function Rd() { + this.eb = []; + this.size = this.A = this.fb = 0; + } + + function Sd() { + this.y = []; + this.f = []; + this.ea = []; + this.F = []; + this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0; + } + + function Cb() { + this.Rd = this.height = this.width = this.S = 0; + this.f = {}; + this.f.RGBA = new Rd(); + this.f.kb = new Sd(); + this.sd = null; + } + + function Td() { + this.width = [0]; + this.height = [0]; + this.Pd = [0]; + this.Qd = [0]; + this.format = [0]; + } + + function Ud() { + this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0; + } + + function Vd(a) { + alert("todo:WebPSamplerProcessPlane"); + return a.T; + } + + function Wd(a, b) { + var c = a.T, + d = b.ba.f.RGBA, + e = d.eb, + f = d.fb + a.ka * d.A, + g = P[b.ba.S], + h = a.y, + k = a.O, + l = a.f, + m = a.N, + n = a.ea, + r = a.W, + q = b.cc, + t = b.dc, + v = b.Mc, + p = b.Nc, + u = a.ka, + w = a.ka + a.T, + y = a.U, + A = y + 1 >> 1; + 0 == u ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y) : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y), ++c); + + for (; u + 2 < w; u += 2) { + q = l, t = m, v = n, p = r, m += a.Rc, r += a.Rc, f += 2 * d.A, k += 2 * a.fa, g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y); + } + + k += a.fa; + a.j + w < a.o ? (I(b.ec, b.fc, h, k, y), I(b.cc, b.dc, l, m, A), I(b.Mc, b.Nc, n, r, A), c--) : w & 1 || g(h, k, null, null, l, m, n, r, l, m, n, r, e, f + d.A, null, null, y); + return c; + } + + function Xd(a, b, c) { + var d = a.F, + e = [a.J]; + + if (null != d) { + var f = a.U, + g = b.ba.S, + h = g == ya || g == Ja; + b = b.ba.f.RGBA; + var k = [0], + l = a.ka; + k[0] = a.T; + a.Kb && (0 == l ? --k[0] : (--l, e[0] -= a.width), a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l)); + var m = b.eb, + l = b.fb + l * b.A; + a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A); + x(c == k); + a && hb(g) && za(m, l, h, f, k, b.A); + } + + return 0; + } + + function gc(a) { + var b = a.ma, + c = b.ba.S, + d = 11 > c, + e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c); + b.memory = null; + b.Ib = null; + b.Jb = null; + b.Nd = null; + if (!hc(b.Oa, a, e ? 11 : 12)) return 0; + e && hb(c) && ic(); + if (a.da) alert("todo:use_scaling");else { + if (d) { + if (b.Ib = Vd, a.Kb) { + c = a.U + 1 >> 1; + b.memory = V(a.U + 2 * c); + if (null == b.memory) return 0; + b.ec = b.memory; + b.fc = 0; + b.cc = b.ec; + b.dc = b.fc + a.U; + b.Mc = b.cc; + b.Nc = b.dc + c; + b.Ib = Wd; + ic(); + } + } else alert("todo:EmitYUV"); + + e && (b.Jb = Xd, d && Aa()); + } + + if (d && !jc) { + for (a = 0; 256 > a; ++a) { + Yd[a] = 89858 * (a - 128) + Ba >> Wa, Zd[a] = -22014 * (a - 128) + Ba, $d[a] = -45773 * (a - 128), ae[a] = 113618 * (a - 128) + Ba >> Wa; + } + + for (a = ta; a < Eb; ++a) { + b = 76283 * (a - 16) + Ba >> Wa, be[a - ta] = ga(b, 255), ce[a - ta] = ga(b + 8 >> 4, 15); + } + + jc = 1; + } + + return 1; + } + + function kc(a) { + var b = a.ma, + c = a.U, + d = a.T; + x(!(a.ka & 1)); + if (0 >= c || 0 >= d) return 0; + c = b.Ib(a, b); + null != b.Jb && b.Jb(a, b, c); + b.Dc += c; + return 1; + } + + function lc(a) { + a.ma.memory = null; + } + + function mc(a, b, c, d) { + if (47 != D(a, 8)) return 0; + b[0] = D(a, 14) + 1; + c[0] = D(a, 14) + 1; + d[0] = D(a, 1); + return 0 != D(a, 3) ? 0 : !a.h; + } + + function ib(a, b) { + if (4 > a) return a + 1; + var c = a - 2 >> 1; + return (2 + (a & 1) << c) + D(b, c) + 1; + } + + function nc(a, b) { + if (120 < b) return b - 120; + var c = de[b - 1], + c = (c >> 4) * a + (8 - (c & 15)); + return 1 <= c ? c : 1; + } + + function ua(a, b, c) { + var d = pb(c); + b += d & 255; + var e = a[b].g - 8; + 0 < e && (qb(c, c.u + 8), d = pb(c), b += a[b].value, b += d & (1 << e) - 1); + qb(c, c.u + a[b].g); + return a[b].value; + } + + function ub(a, b, c) { + c.g += a.g; + c.value += a.value << b >>> 0; + x(8 >= c.g); + return a.g; + } + + function ha(a, b, c) { + var d = a.xc; + b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)]; + x(b < a.Wb); + return a.Ya[b]; + } + + function oc(a, b, c, d) { + var e = a.ab, + f = a.c * b, + g = a.C; + b = g + b; + var h = c, + k = d; + d = a.Ta; + + for (c = a.Ua; 0 < e--;) { + var l = a.gc[e], + m = g, + n = b, + r = h, + q = k, + k = d, + h = c, + t = l.Ea; + x(m < n); + x(n <= l.nc); + + switch (l.hc) { + case 2: + pc(r, q, (n - m) * t, k, h); + break; + + case 0: + var v = l, + p = m, + u = n, + w = k, + y = h, + A = v.Ea; + 0 == p && (ee(r, q, null, null, 1, w, y), cc(r, q + 1, 0, 0, A - 1, w, y + 1), q += A, y += A, ++p); + + for (var E = 1 << v.b, B = E - 1, C = xa(A, v.b), N = v.K, v = v.w + (p >> v.b) * C; p < u;) { + var z = N, + Q = v, + S = 1; + + for (fe(r, q, w, y - A, 1, w, y); S < A;) { + var K = qc[z[Q++] >> 8 & 15], + D = (S & ~B) + E; + D > A && (D = A); + K(r, q + +S, w, y + S - A, D - S, w, y + S); + S = D; + } + + q += A; + y += A; + ++p; + p & B || (v += C); + } + + n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t); + break; + + case 1: + t = r; + u = q; + r = l.Ea; + q = 1 << l.b; + w = q - 1; + y = r & ~w; + A = r - y; + p = xa(r, l.b); + E = l.K; + + for (l = l.w + (m >> l.b) * p; m < n;) { + B = E; + C = l; + N = new Jd(); + v = u + y; + + for (z = u + r; u < v;) { + dc(B[C++], N), Fb(N, t, u, q, k, h), u += q, h += q; + } + + u < z && (dc(B[C++], N), Fb(N, t, u, A, k, h), u += A, h += A); + ++m; + m & w || (l += p); + } + + break; + + case 3: + if (r == k && q == h && 0 < l.b) { + y = (n - m) * xa(l.Ea, l.b); + t = h + (n - m) * t - y; + u = k; + r = t; + q = k; + w = h; + A = y; + p = []; + + for (y = A - 1; 0 <= y; --y) { + p[y] = q[w + y]; + } + + for (y = A - 1; 0 <= y; --y) { + u[r + y] = p[y]; + } + + rc(l, m, n, k, t, k, h); + } else rc(l, m, n, r, q, k, h); + + } + + h = d; + k = c; + } + + k != c && I(d, c, h, k, f); + } + + function ge(a, b) { + var c = a.V, + d = a.Ba + a.c * a.C, + e = b - a.C; + x(b <= a.l.o); + x(16 >= e); + + if (0 < e) { + var f = a.l, + g = a.Ta, + h = a.Ua, + k = f.width; + oc(a, e, c, d); + h = [h]; + c = a.C; + d = b; + e = h; + x(c < d); + x(f.v < f.va); + d > f.o && (d = f.o); + + if (c < f.j) { + var l = f.j - c, + c = f.j; + e[0] += l * k; + } + + c >= d ? c = 0 : (e[0] += 4 * f.v, f.ka = c - f.j, f.U = f.va - f.v, f.T = d - c, c = 1); + + if (c) { + h = h[0]; + c = a.ca; + + if (11 > c.S) { + for (var m = c.f.RGBA, d = c.S, e = f.U, f = f.T, l = m.eb, n = m.A, r = f, m = m.fb + a.Ma * m.A; 0 < r--;) { + var q = g, + t = h, + v = e, + p = l, + u = m; + + switch (d) { + case Ca: + sc(q, t, v, p, u); + break; + + case Ua: + Gb(q, t, v, p, u); + break; + + case zb: + Gb(q, t, v, p, u); + za(p, u, 0, v, 1, 0); + break; + + case tc: + uc(q, t, v, p, u); + break; + + case Va: + fb(q, t, v, p, u, 1); + break; + + case Ab: + fb(q, t, v, p, u, 1); + za(p, u, 0, v, 1, 0); + break; + + case ya: + fb(q, t, v, p, u, 0); + break; + + case Ja: + fb(q, t, v, p, u, 0); + za(p, u, 1, v, 1, 0); + break; + + case Db: + Hb(q, t, v, p, u); + break; + + case Bb: + Hb(q, t, v, p, u); + vc(p, u, v, 1, 0); + break; + + case wc: + xc(q, t, v, p, u); + break; + + default: + x(0); + } + + h += k; + m += n; + } + + a.Ma += f; + } else alert("todo:EmitRescaledRowsYUVA"); + + x(a.Ma <= c.height); + } + } + + a.C = b; + x(a.C <= a.i); + } + + function yc(a) { + var b; + if (0 < a.ua) return 0; + + for (b = 0; b < a.Wb; ++b) { + var c = a.Ya[b].G, + d = a.Ya[b].H; + if (0 < c[1][d[1] + 0].g || 0 < c[2][d[2] + 0].g || 0 < c[3][d[3] + 0].g) return 0; + } + + return 1; + } + + function zc(a, b, c, d, e, f) { + if (0 != a.Z) { + var g = a.qd, + h = a.rd; + + for (x(null != ia[a.Z]); b < c; ++b) { + ia[a.Z](g, h, d, e, d, e, f), g = d, h = e, e += f; + } + + a.qd = g; + a.rd = h; + } + } + + function Ib(a, b) { + var c = a.l.ma, + d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C, + d = a.C < d ? d : a.C; + x(b <= a.l.o); + + if (b > d) { + var e = a.l.width, + f = c.ca, + g = c.tb + e * d, + h = a.V, + k = a.Ba + a.c * d, + l = a.gc; + x(1 == a.ab); + x(3 == l[0].hc); + he(l[0], d, b, h, k, f, g); + zc(c, d, b, f, g, e); + } + + a.C = a.Ma = b; + } + + function Jb(a, b, c, d, e, f, g) { + var h = a.$ / d, + k = a.$ % d, + l = a.m, + m = a.s, + n = c + a.$, + r = n; + e = c + d * e; + var q = c + d * f, + t = 280 + m.ua, + v = a.Pb ? h : 16777216, + p = 0 < m.ua ? m.Wa : null, + u = m.wc, + w = n < q ? ha(m, k, h) : null; + x(a.C < f); + x(q <= e); + var y = !1; + + a: for (;;) { + for (; y || n < q;) { + var A = 0; + + if (h >= v) { + var v = a, + E = n - c; + x(v.Pb); + v.wd = v.m; + v.xd = E; + 0 < v.s.ua && $b(v.s.Wa, v.s.vb); + v = h + ie; + } + + k & u || (w = ha(m, k, h)); + x(null != w); + w.Qb && (b[n] = w.qb, y = !0); + if (!y) if (Sa(l), w.jc) { + var A = l, + E = b, + B = n, + C = w.pd[pb(A) & xb - 1]; + x(w.jc); + 256 > C.g ? (qb(A, A.u + C.g), E[B] = C.value, A = 0) : (qb(A, A.u + C.g - 256), x(256 <= C.value), A = C.value); + 0 == A && (y = !0); + } else A = ua(w.G[0], w.H[0], l); + if (l.h) break; + + if (y || 256 > A) { + if (!y) if (w.nd) b[n] = (w.qb | A << 8) >>> 0;else { + Sa(l); + y = ua(w.G[1], w.H[1], l); + Sa(l); + E = ua(w.G[2], w.H[2], l); + B = ua(w.G[3], w.H[3], l); + if (l.h) break; + b[n] = (B << 24 | y << 16 | A << 8 | E) >>> 0; + } + y = !1; + ++n; + ++k; + if (k >= d && (k = 0, ++h, null != g && h <= f && !(h % 16) && g(a, h), null != p)) for (; r < n;) { + A = b[r++], p.X[(506832829 * A & 4294967295) >>> p.Mb] = A; + } + } else if (280 > A) { + A = ib(A - 256, l); + E = ua(w.G[4], w.H[4], l); + Sa(l); + E = ib(E, l); + E = nc(d, E); + if (l.h) break; + if (n - c < E || e - n < A) break a;else for (B = 0; B < A; ++B) { + b[n + B] = b[n + B - E]; + } + n += A; + + for (k += A; k >= d;) { + k -= d, ++h, null != g && h <= f && !(h % 16) && g(a, h); + } + + x(n <= e); + k & u && (w = ha(m, k, h)); + if (null != p) for (; r < n;) { + A = b[r++], p.X[(506832829 * A & 4294967295) >>> p.Mb] = A; + } + } else if (A < t) { + y = A - 280; + + for (x(null != p); r < n;) { + A = b[r++], p.X[(506832829 * A & 4294967295) >>> p.Mb] = A; + } + + A = n; + E = p; + x(!(y >>> E.Xa)); + b[A] = E.X[y]; + y = !0; + } else break a; + + y || x(l.h == db(l)); + } + + if (a.Pb && l.h && n < e) x(a.m.h), a.a = 5, a.m = a.wd, a.$ = a.xd, 0 < a.s.ua && $b(a.s.vb, a.s.Wa);else if (l.h) break a;else null != g && g(a, h > f ? f : h), a.a = 0, a.$ = n - c; + return 1; + } + + a.a = 3; + return 0; + } + + function Ac(a) { + x(null != a); + a.vc = null; + a.yc = null; + a.Ya = null; + var b = a.Wa; + null != b && (b.X = null); + a.vb = null; + x(null != a); + } + + function Bc() { + var a = new je(); + if (null == a) return null; + a.a = 0; + a.xb = Cc; + gb("Predictor", "VP8LPredictors"); + gb("Predictor", "VP8LPredictors_C"); + gb("PredictorAdd", "VP8LPredictorsAdd"); + gb("PredictorAdd", "VP8LPredictorsAdd_C"); + pc = Kd; + Fb = Ld; + sc = Md; + Gb = Nd; + Hb = Od; + xc = Pd; + uc = Qd; + self.VP8LMapColor32b = ke; + self.VP8LMapColor8b = le; + return a; + } + + function rb(a, b, c, d, e) { + var f = 1, + g = [a], + h = [b], + k = d.m, + l = d.s, + m = null, + n = 0; + + a: for (;;) { + if (c) for (; f && D(k, 1);) { + var r = g, + q = h, + t = d, + v = 1, + p = t.m, + u = t.gc[t.ab], + w = D(p, 2); + if (t.Oc & 1 << w) f = 0;else { + t.Oc |= 1 << w; + u.hc = w; + u.Ea = r[0]; + u.nc = q[0]; + u.K = [null]; + ++t.ab; + x(4 >= t.ab); + + switch (w) { + case 0: + case 1: + u.b = D(p, 3) + 2; + v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K); + u.K = u.K[0]; + break; + + case 3: + var y = D(p, 8) + 1, + A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3; + r[0] = xa(u.Ea, A); + u.b = A; + var v = rb(y, 1, 0, t, u.K), + E; + + if (E = v) { + var B, + C = y, + N = u, + z = 1 << (8 >> N.b), + Q = V(z); + if (null == Q) E = 0;else { + var S = N.K[0], + K = N.w; + Q[0] = N.K[0][0]; + + for (B = 1; B < 1 * C; ++B) { + Q[B] = yb(S[K + B], Q[B - 1]); + } + + for (; B < 4 * z; ++B) { + Q[B] = 0; + } + + N.K[0] = null; + N.K[0] = Q; + E = 1; + } + } + + v = E; + break; + + case 2: + break; + + default: + x(0); + } + + f = v; + } + } + g = g[0]; + h = h[0]; + + if (f && D(k, 1) && (n = D(k, 4), f = 1 <= n && 11 >= n, !f)) { + d.a = 3; + break a; + } + + var H; + if (H = f) b: { + var F = d, + G = g, + L = h, + J = n, + T = c, + Da, + ba, + X = F.m, + R = F.s, + P = [null], + U, + W = 1, + aa = 0, + na = me[J]; + + c: for (;;) { + if (T && D(X, 1)) { + var ca = D(X, 3) + 2, + ga = xa(G, ca), + ka = xa(L, ca), + qa = ga * ka; + if (!rb(ga, ka, 0, F, P)) break c; + P = P[0]; + R.xc = ca; + + for (Da = 0; Da < qa; ++Da) { + var ia = P[Da] >> 8 & 65535; + P[Da] = ia; + ia >= W && (W = ia + 1); + } + } + + if (X.h) break c; + + for (ba = 0; 5 > ba; ++ba) { + var Y = Dc[ba]; + !ba && 0 < J && (Y += 1 << J); + aa < Y && (aa = Y); + } + + var ma = wa(W * na, O); + var ua = W, + va = wa(ua, Ub); + if (null == va) var la = null;else x(65536 >= ua), la = va; + var ha = V(aa); + + if (null == la || null == ha || null == ma) { + F.a = 1; + break c; + } + + var pa = ma; + + for (Da = U = 0; Da < W; ++Da) { + var ja = la[Da], + da = ja.G, + ea = ja.H, + Fa = 0, + ra = 1, + Ha = 0; + + for (ba = 0; 5 > ba; ++ba) { + Y = Dc[ba]; + da[ba] = pa; + ea[ba] = U; + !ba && 0 < J && (Y += 1 << J); + + d: { + var sa, + za = Y, + ta = F, + oa = ha, + db = pa, + eb = U, + Ia = 0, + Ka = ta.m, + fb = D(Ka, 1); + M(oa, 0, 0, za); + + if (fb) { + var gb = D(Ka, 1) + 1, + hb = D(Ka, 1), + Ja = D(Ka, 0 == hb ? 1 : 8); + oa[Ja] = 1; + 2 == gb && (Ja = D(Ka, 8), oa[Ja] = 1); + var ya = 1; + } else { + var Ua = V(19), + Va = D(Ka, 4) + 4; + + if (19 < Va) { + ta.a = 3; + var Aa = 0; + break d; + } + + for (sa = 0; sa < Va; ++sa) { + Ua[ne[sa]] = D(Ka, 3); + } + + var Ba = void 0, + sb = void 0, + Wa = ta, + ib = Ua, + Ca = za, + Xa = oa, + Oa = 0, + La = Wa.m, + Ya = 8, + Za = wa(128, O); + + e: for (;;) { + if (!Z(Za, 0, 7, ib, 19)) break e; + + if (D(La, 1)) { + var kb = 2 + 2 * D(La, 3), + Ba = 2 + D(La, kb); + if (Ba > Ca) break e; + } else Ba = Ca; + + for (sb = 0; sb < Ca && Ba--;) { + Sa(La); + var $a = Za[0 + (pb(La) & 127)]; + qb(La, La.u + $a.g); + var jb = $a.value; + if (16 > jb) Xa[sb++] = jb, 0 != jb && (Ya = jb);else { + var lb = 16 == jb, + ab = jb - 16, + mb = oe[ab], + bb = D(La, pe[ab]) + mb; + if (sb + bb > Ca) break e;else for (var nb = lb ? Ya : 0; 0 < bb--;) { + Xa[sb++] = nb; + } + } + } + + Oa = 1; + break e; + } + + Oa || (Wa.a = 3); + ya = Oa; + } + + (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za)); + ya && 0 != Ia ? Aa = Ia : (ta.a = 3, Aa = 0); + } + + if (0 == Aa) break c; + ra && 1 == qe[ba] && (ra = 0 == pa[U].g); + Fa += pa[U].g; + U += Aa; + + if (3 >= ba) { + var Pa = ha[0], + tb; + + for (tb = 1; tb < Y; ++tb) { + ha[tb] > Pa && (Pa = ha[tb]); + } + + Ha += Pa; + } + } + + ja.nd = ra; + ja.Qb = 0; + ra && (ja.qb = (da[3][ea[3] + 0].value << 24 | da[1][ea[1] + 0].value << 16 | da[2][ea[2] + 0].value) >>> 0, 0 == Fa && 256 > da[0][ea[0] + 0].value && (ja.Qb = 1, ja.qb += da[0][ea[0] + 0].value << 8)); + ja.jc = !ja.Qb && 6 > Ha; + + if (ja.jc) { + var Ga, + Ea = ja; + + for (Ga = 0; Ga < xb; ++Ga) { + var Ma = Ga, + Na = Ea.pd[Ma], + vb = Ea.G[0][Ea.H[0] + Ma]; + 256 <= vb.value ? (Na.g = vb.g + 256, Na.value = vb.value) : (Na.g = 0, Na.value = 0, Ma >>= ub(vb, 8, Na), Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na), Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na), ub(Ea.G[3][Ea.H[3] + Ma], 24, Na)); + } + } + } + + R.vc = P; + R.Wb = W; + R.Ya = la; + R.yc = ma; + H = 1; + break b; + } + + H = 0; + } + f = H; + + if (!f) { + d.a = 3; + break a; + } + + if (0 < n) { + if (l.ua = 1 << n, !Zb(l.Wa, n)) { + d.a = 1; + f = 0; + break a; + } + } else l.ua = 0; + + var Qa = d, + cb = g, + ob = h, + Ra = Qa.s, + Ta = Ra.xc; + Qa.c = cb; + Qa.i = ob; + Ra.md = xa(cb, Ta); + Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1; + + if (c) { + d.xb = re; + break a; + } + + m = V(g * h); + + if (null == m) { + d.a = 1; + f = 0; + break a; + } + + f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h; + break a; + } + + f ? (null != e ? e[0] = m : (x(null == m), x(c)), d.$ = 0, c || Ac(l)) : Ac(l); + return f; + } + + function Ec(a, b) { + var c = a.c * a.i, + d = c + b + 16 * b; + x(a.c <= b); + a.V = V(d); + if (null == a.V) return a.Ta = null, a.Ua = 0, a.a = 1, 0; + a.Ta = a.V; + a.Ua = a.Ba + c + b; + return 1; + } + + function se(a, b) { + var c = a.C, + d = b - c, + e = a.V, + f = a.Ba + a.c * c; + + for (x(b <= a.l.o); 0 < d;) { + var g = 16 < d ? 16 : d, + h = a.l.ma, + k = a.l.width, + l = k * g, + m = h.ca, + n = h.tb + k * c, + r = a.Ta, + q = a.Ua; + oc(a, g, e, f); + Fc(r, q, m, n, l); + zc(h, c, c + g, m, n, k); + d -= g; + e += g * a.c; + c += g; + } + + x(c == b); + a.C = a.Ma = b; + } + + function te(a, b) { + var c = [0], + d = [0], + e = [0]; + + a: for (;;) { + if (null == a) return 0; + if (null == b) return a.a = 2, 0; + a.l = b; + a.a = 0; + cb(a.m, b.data, b.w, b.ha); + + if (!mc(a.m, c, d, e)) { + a.a = 3; + break a; + } + + a.xb = Cc; + b.width = c[0]; + b.height = d[0]; + if (!rb(c[0], d[0], 1, a, null)) break a; + return 1; + } + + x(0 != a.a); + return 0; + } + + function ue() { + this.ub = this.yd = this.td = this.Rb = 0; + } + + function ve() { + this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0; + } + + function we() { + this.Fb = this.Bb = this.Cb = 0; + this.Zb = V(4); + this.Lb = V(4); + } + + function Gc() { + this.Yb = wb(); + } + + function xe() { + this.jb = V(3); + this.Wc = Ed([4, 8], Gc); + this.Xc = Ed([4, 17], Gc); + } + + function ye() { + this.Pc = this.wb = this.Tb = this.zd = 0; + this.vd = new V(4); + this.od = new V(4); + } + + function Xa() { + this.ld = this.La = this.dd = this.tc = 0; + } + + function Hc() { + this.Na = this.la = 0; + } + + function ze() { + this.Sc = [0, 0]; + this.Eb = [0, 0]; + this.Qc = [0, 0]; + this.ia = this.lc = 0; + } + + function Kb() { + this.ad = V(384); + this.Za = 0; + this.Ob = V(16); + this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0; + } + + function Ae() { + this.uc = this.M = this.Nb = 0; + this.wa = Array(new Xa()); + this.Y = 0; + this.ya = Array(new Kb()); + this.aa = 0; + this.l = new Oa(); + } + + function Ic() { + this.y = V(16); + this.f = V(8); + this.ea = V(8); + } + + function Be() { + this.cb = this.a = 0; + this.sc = ""; + this.m = new Wb(); + this.Od = new ue(); + this.Kc = new ve(); + this.ed = new ye(); + this.Qa = new we(); + this.Ic = this.$c = this.Aa = 0; + this.D = new Ae(); + this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0; + this.Jc = wa(8, Wb); + this.ia = 0; + this.pb = wa(4, ze); + this.Pa = new xe(); + this.Bd = this.kc = 0; + this.Ac = []; + this.Bc = 0; + this.zc = [0, 0, 0, 0]; + this.Gd = Array(new Ic()); + this.Hd = 0; + this.rb = Array(new Hc()); + this.sb = 0; + this.wa = Array(new Xa()); + this.Y = 0; + this.oc = []; + this.pc = 0; + this.sa = []; + this.ta = 0; + this.qa = []; + this.ra = 0; + this.Ha = []; + this.B = this.R = this.Ia = 0; + this.Ec = []; + this.M = this.ja = this.Vb = this.Fc = 0; + this.ya = Array(new Kb()); + this.L = this.aa = 0; + this.gd = Ed([4, 2], Xa); + this.ga = null; + this.Fa = []; + this.Cc = this.qc = this.P = 0; + this.Gb = []; + this.Uc = 0; + this.mb = []; + this.nb = 0; + this.rc = []; + this.Ga = this.Vc = 0; + } + + function ga(a, b) { + return 0 > a ? 0 : a > b ? b : a; + } + + function Oa() { + this.T = this.U = this.ka = this.height = this.width = 0; + this.y = []; + this.f = []; + this.ea = []; + this.Rc = this.fa = this.W = this.N = this.O = 0; + this.ma = "void"; + this.put = "VP8IoPutHook"; + this.ac = "VP8IoSetupHook"; + this.bc = "VP8IoTeardownHook"; + this.ha = this.Kb = 0; + this.data = []; + this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0; + this.F = []; + this.J = 0; + } + + function Ce() { + var a = new Be(); + null != a && (a.a = 0, a.sc = "OK", a.cb = 0, a.Xb = 0, oa || (oa = De)); + return a; + } + + function T(a, b, c) { + 0 == a.a && (a.a = b, a.sc = c, a.cb = 0); + return 0; + } + + function Jc(a, b, c) { + return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2]; + } + + function Kc(a, b) { + if (null == a) return 0; + a.a = 0; + a.sc = "OK"; + if (null == b) return T(a, 2, "null VP8Io passed to VP8GetHeaders()"); + var c = b.data; + var d = b.w; + var e = b.ha; + if (4 > e) return T(a, 7, "Truncated header."); + var f = c[d + 0] | c[d + 1] << 8 | c[d + 2] << 16; + var g = a.Od; + g.Rb = !(f & 1); + g.td = f >> 1 & 7; + g.yd = f >> 4 & 1; + g.ub = f >> 5; + if (3 < g.td) return T(a, 3, "Incorrect keyframe parameters."); + if (!g.yd) return T(a, 4, "Frame not displayable."); + d += 3; + e -= 3; + var h = a.Kc; + + if (g.Rb) { + if (7 > e) return T(a, 7, "cannot parse picture header"); + if (!Jc(c, d, e)) return T(a, 3, "Bad code word"); + h.c = (c[d + 4] << 8 | c[d + 3]) & 16383; + h.Td = c[d + 4] >> 6; + h.i = (c[d + 6] << 8 | c[d + 5]) & 16383; + h.Ud = c[d + 6] >> 6; + d += 7; + e -= 7; + a.za = h.c + 15 >> 4; + a.Ub = h.i + 15 >> 4; + b.width = h.c; + b.height = h.i; + b.Da = 0; + b.j = 0; + b.v = 0; + b.va = b.width; + b.o = b.height; + b.da = 0; + b.ib = b.width; + b.hb = b.height; + b.U = b.width; + b.T = b.height; + f = a.Pa; + M(f.jb, 0, 255, f.jb.length); + f = a.Qa; + x(null != f); + f.Cb = 0; + f.Bb = 0; + f.Fb = 1; + M(f.Zb, 0, 0, f.Zb.length); + M(f.Lb, 0, 0, f.Lb); + } + + if (g.ub > e) return T(a, 7, "bad partition length"); + f = a.m; + ma(f, c, d, g.ub); + d += g.ub; + e -= g.ub; + g.Rb && (h.Ld = G(f), h.Kd = G(f)); + h = a.Qa; + var k = a.Pa, + l; + x(null != f); + x(null != h); + h.Cb = G(f); + + if (h.Cb) { + h.Bb = G(f); + + if (G(f)) { + h.Fb = G(f); + + for (l = 0; 4 > l; ++l) { + h.Zb[l] = G(f) ? ca(f, 7) : 0; + } + + for (l = 0; 4 > l; ++l) { + h.Lb[l] = G(f) ? ca(f, 6) : 0; + } + } + + if (h.Bb) for (l = 0; 3 > l; ++l) { + k.jb[l] = G(f) ? na(f, 8) : 255; + } + } else h.Bb = 0; + + if (f.Ka) return T(a, 3, "cannot parse segment header"); + h = a.ed; + h.zd = G(f); + h.Tb = na(f, 6); + h.wb = na(f, 3); + h.Pc = G(f); + + if (h.Pc && G(f)) { + for (k = 0; 4 > k; ++k) { + G(f) && (h.vd[k] = ca(f, 6)); + } + + for (k = 0; 4 > k; ++k) { + G(f) && (h.od[k] = ca(f, 6)); + } + } + + a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2; + if (f.Ka) return T(a, 3, "cannot parse filter header"); + l = d; + var m = e; + e = l; + d = l + m; + h = m; + a.Xb = (1 << na(a.m, 2)) - 1; + k = a.Xb; + if (m < 3 * k) c = 7;else { + l += 3 * k; + h -= 3 * k; + + for (m = 0; m < k; ++m) { + var n = c[e + 0] | c[e + 1] << 8 | c[e + 2] << 16; + n > h && (n = h); + ma(a.Jc[+m], c, l, n); + l += n; + h -= n; + e += 3; + } + + ma(a.Jc[+k], c, l, h); + c = l < d ? 0 : 5; + } + if (0 != c) return T(a, c, "cannot parse partitions"); + l = a.m; + c = na(l, 7); + e = G(l) ? ca(l, 4) : 0; + d = G(l) ? ca(l, 4) : 0; + h = G(l) ? ca(l, 4) : 0; + k = G(l) ? ca(l, 4) : 0; + l = G(l) ? ca(l, 4) : 0; + m = a.Qa; + + for (n = 0; 4 > n; ++n) { + if (m.Cb) { + var r = m.Zb[n]; + m.Fb || (r += c); + } else if (0 < n) { + a.pb[n] = a.pb[0]; + continue; + } else r = c; + + var q = a.pb[n]; + q.Sc[0] = Lb[ga(r + e, 127)]; + q.Sc[1] = Mb[ga(r + 0, 127)]; + q.Eb[0] = 2 * Lb[ga(r + d, 127)]; + q.Eb[1] = 101581 * Mb[ga(r + h, 127)] >> 16; + 8 > q.Eb[1] && (q.Eb[1] = 8); + q.Qc[0] = Lb[ga(r + k, 117)]; + q.Qc[1] = Mb[ga(r + l, 127)]; + q.lc = r + l; + } + + if (!g.Rb) return T(a, 4, "Not a key frame."); + G(f); + g = a.Pa; + + for (c = 0; 4 > c; ++c) { + for (e = 0; 8 > e; ++e) { + for (d = 0; 3 > d; ++d) { + for (h = 0; 11 > h; ++h) { + k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h], g.Wc[c][e].Yb[d][h] = k; + } + } + } + + for (e = 0; 17 > e; ++e) { + g.Xc[c][e] = g.Wc[c][Ge[e]]; + } + } + + a.kc = G(f); + a.kc && (a.Bd = na(f, 8)); + return a.cb = 1; + } + + function De(a, b, c, d, e, f, g) { + var h = b[e].Yb[c]; + + for (c = 0; 16 > e; ++e) { + if (!K(a, h[c + 0])) return e; + + for (; !K(a, h[c + 1]);) { + if (h = b[++e].Yb[0], c = 0, 16 == e) return 16; + } + + var k = b[e + 1].Yb; + + if (K(a, h[c + 2])) { + var l = a, + m = h, + n = c; + var r = 0; + if (K(l, m[n + 3])) { + if (K(l, m[n + 6])) { + h = 0; + r = K(l, m[n + 8]); + m = K(l, m[n + 9 + r]); + n = 2 * r + m; + r = 0; + + for (m = He[n]; m[h]; ++h) { + r += r + K(l, m[h]); + } + + r += 3 + (8 << n); + } else K(l, m[n + 7]) ? (r = 7 + 2 * K(l, 165), r += K(l, 145)) : r = 5 + K(l, 159); + } else K(l, m[n + 4]) ? r = 3 + K(l, m[n + 5]) : r = 2; + h = k[2]; + } else r = 1, h = k[1]; + + k = g + Ie[e]; + l = a; + 0 > l.b && Qa(l); + var m = l.b, + n = l.Ca >> 1, + q = n - (l.I >> m) >> 31; + --l.b; + l.Ca += q; + l.Ca |= 1; + l.I -= (n + 1 & q) << m; + f[k] = ((r ^ q) - q) * d[(0 < e) + 0]; + } + + return 16; + } + + function Lc(a) { + var b = a.rb[a.sb - 1]; + b.la = 0; + b.Na = 0; + M(a.zc, 0, 0, a.zc.length); + a.ja = 0; + } + + function Je(a, b) { + for (a.M = 0; a.M < a.Va; ++a.M) { + var c = a.Jc[a.M & a.Xb], + d = a.m, + e = a, + f; + + for (f = 0; f < e.za; ++f) { + var g = d; + var h = e; + var k = h.Ac, + l = h.Bc + 4 * f, + m = h.zc, + n = h.ya[h.aa + f]; + h.Qa.Bb ? n.$b = K(g, h.Pa.jb[0]) ? 2 + K(g, h.Pa.jb[2]) : K(g, h.Pa.jb[1]) : n.$b = 0; + h.kc && (n.Ad = K(g, h.Bd)); + n.Za = !K(g, 145) + 0; + + if (n.Za) { + var r = n.Ob, + q = 0; + + for (h = 0; 4 > h; ++h) { + var t = m[0 + h]; + var v; + + for (v = 0; 4 > v; ++v) { + t = Ke[k[l + v]][t]; + + for (var p = Mc[K(g, t[0])]; 0 < p;) { + p = Mc[2 * p + K(g, t[p])]; + } + + t = -p; + k[l + v] = t; + } + + I(r, q, k, l, 4); + q += 4; + m[0 + h] = t; + } + } else t = K(g, 156) ? K(g, 128) ? 1 : 3 : K(g, 163) ? 2 : 0, n.Ob[0] = t, M(k, l, t, 4), M(m, 0, t, 4); + + n.Dd = K(g, 142) ? K(g, 114) ? K(g, 183) ? 1 : 3 : 2 : 0; + } + + if (e.m.Ka) return T(a, 7, "Premature end-of-partition0 encountered."); + + for (; a.ja < a.za; ++a.ja) { + d = a; + e = c; + g = d.rb[d.sb - 1]; + k = d.rb[d.sb + d.ja]; + f = d.ya[d.aa + d.ja]; + if (l = d.kc ? f.Ad : 0) g.la = k.la = 0, f.Za || (g.Na = k.Na = 0), f.Hc = 0, f.Gc = 0, f.ia = 0;else { + var u, + w, + g = k, + k = e, + l = d.Pa.Xc, + m = d.ya[d.aa + d.ja], + n = d.pb[m.$b]; + h = m.ad; + r = 0; + q = d.rb[d.sb - 1]; + t = v = 0; + M(h, r, 0, 384); + + if (m.Za) { + var y = 0; + var A = l[3]; + } else { + p = V(16); + var E = g.Na + q.Na; + E = oa(k, l[1], E, n.Eb, 0, p, 0); + g.Na = q.Na = (0 < E) + 0; + if (1 < E) Nc(p, 0, h, r);else { + var B = p[0] + 3 >> 3; + + for (p = 0; 256 > p; p += 16) { + h[r + p] = B; + } + } + y = 1; + A = l[0]; + } + + var C = g.la & 15; + var N = q.la & 15; + + for (p = 0; 4 > p; ++p) { + var z = N & 1; + + for (B = w = 0; 4 > B; ++B) { + E = z + (C & 1), E = oa(k, A, E, n.Sc, y, h, r), z = E > y, C = C >> 1 | z << 7, w = w << 2 | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0]), r += 16; + } + + C >>= 4; + N = N >> 1 | z << 7; + v = (v << 8 | w) >>> 0; + } + + A = C; + y = N >> 4; + + for (u = 0; 4 > u; u += 2) { + w = 0; + C = g.la >> 4 + u; + N = q.la >> 4 + u; + + for (p = 0; 2 > p; ++p) { + z = N & 1; + + for (B = 0; 2 > B; ++B) { + E = z + (C & 1), E = oa(k, l[2], E, n.Qc, 0, h, r), z = 0 < E, C = C >> 1 | z << 3, w = w << 2 | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0]), r += 16; + } + + C >>= 2; + N = N >> 1 | z << 5; + } + + t |= w << 4 * u; + A |= C << 4 << u; + y |= (N & 240) << u; + } + + g.la = A; + q.la = y; + m.Hc = v; + m.Gc = t; + m.ia = t & 43690 ? 0 : n.ia; + l = !(v | t); + } + 0 < d.L && (d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za], d.wa[d.Y + d.ja].La |= !l); + if (e.Ka) return T(a, 7, "Premature end-of-file encountered."); + } + + Lc(a); + c = a; + d = b; + e = 1; + f = c.D; + g = 0 < c.L && c.M >= c.zb && c.M <= c.Va; + if (0 == c.Aa) a: { + f.M = c.M, f.uc = g, Oc(c, f), e = 1; + w = c.D; + f = w.Nb; + t = Ya[c.L]; + g = t * c.R; + k = t / 2 * c.B; + p = 16 * f * c.R; + B = 8 * f * c.B; + l = c.sa; + m = c.ta - g + p; + n = c.qa; + h = c.ra - k + B; + r = c.Ha; + q = c.Ia - k + B; + C = w.M; + N = 0 == C; + v = C >= c.Va - 1; + 2 == c.Aa && Oc(c, w); + if (w.uc) for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) { + var Q = E; + y = w; + A = z; + var S = Q.D, + D = S.Nb; + u = Q.R; + var S = S.wa[S.Y + y], + F = Q.sa, + H = Q.ta + 16 * D * u + 16 * y, + J = S.dd, + G = S.tc; + if (0 != G) if (x(3 <= G), 1 == Q.L) 0 < y && Pc(F, H, u, G + 4), S.La && Qc(F, H, u, G), 0 < A && Rc(F, H, u, G + 4), S.La && Sc(F, H, u, G);else { + var L = Q.B, + O = Q.qa, + P = Q.ra + 8 * D * L + 8 * y, + R = Q.Ha, + Q = Q.Ia + 8 * D * L + 8 * y, + D = S.ld; + 0 < y && (Tc(F, H, u, G + 4, J, D), Uc(O, P, R, Q, L, G + 4, J, D)); + S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D)); + 0 < A && (Xc(F, H, u, G + 4, J, D), Yc(O, P, R, Q, L, G + 4, J, D)); + S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D)); + } + } + c.ia && alert("todo:DitherRow"); + + if (null != d.put) { + w = 16 * C; + C = 16 * (C + 1); + N ? (d.y = c.sa, d.O = c.ta + p, d.f = c.qa, d.N = c.ra + B, d.ea = c.Ha, d.W = c.Ia + B) : (w -= t, d.y = l, d.O = m, d.f = n, d.N = h, d.ea = r, d.W = q); + v || (C -= t); + C > d.o && (C = d.o); + d.F = null; + d.J = null; + + if (null != c.Fa && 0 < c.Fa.length && w < C && (d.J = Le(c, d, w, C - w), d.F = c.mb, null == d.F && 0 == d.F.length)) { + e = T(c, 3, "Could not decode alpha data."); + break a; + } + + w < d.j && (t = d.j - w, w = d.j, x(!(t & 1)), d.O += c.R * t, d.N += c.B * (t >> 1), d.W += c.B * (t >> 1), null != d.F && (d.J += d.width * t)); + w < C && (d.O += d.v, d.N += d.v >> 1, d.W += d.v >> 1, null != d.F && (d.J += d.v), d.ka = w - d.j, d.U = d.va - d.v, d.T = C - w, e = d.put(d)); + } + + f + 1 != c.Ic || v || (I(c.sa, c.ta - g, l, m + 16 * c.R, g), I(c.qa, c.ra - k, n, h + 8 * c.B, k), I(c.Ha, c.Ia - k, r, q + 8 * c.B, k)); + } + if (!e) return T(a, 6, "Output aborted."); + } + + return 1; + } + + function Me(a, b) { + if (null == a) return 0; + if (null == b) return T(a, 2, "NULL VP8Io parameter in VP8Decode()."); + if (!a.cb && !Kc(a, b)) return 0; + x(a.cb); + + if (null == b.ac || b.ac(b)) { + b.ob && (a.L = 0); + var c = Ya[a.L]; + 2 == a.L ? (a.yb = 0, a.zb = 0) : (a.yb = b.v - c >> 4, a.zb = b.j - c >> 4, 0 > a.yb && (a.yb = 0), 0 > a.zb && (a.zb = 0)); + a.Va = b.o + 15 + c >> 4; + a.Hb = b.va + 15 + c >> 4; + a.Hb > a.za && (a.Hb = a.za); + a.Va > a.Ub && (a.Va = a.Ub); + + if (0 < a.L) { + var d = a.ed; + + for (c = 0; 4 > c; ++c) { + var e; + + if (a.Qa.Cb) { + var f = a.Qa.Lb[c]; + a.Qa.Fb || (f += d.Tb); + } else f = d.Tb; + + for (e = 0; 1 >= e; ++e) { + var g = a.gd[c][e], + h = f; + d.Pc && (h += d.vd[0], e && (h += d.od[0])); + h = 0 > h ? 0 : 63 < h ? 63 : h; + + if (0 < h) { + var k = h; + 0 < d.wb && (k = 4 < d.wb ? k >> 2 : k >> 1, k > 9 - d.wb && (k = 9 - d.wb)); + 1 > k && (k = 1); + g.dd = k; + g.tc = 2 * h + k; + g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0; + } else g.tc = 0; + + g.La = e; + } + } + } + + c = 0; + } else T(a, 6, "Frame setup failed"), c = a.a; + + if (c = 0 == c) { + if (c) { + a.$c = 0; + 0 < a.Aa || (a.Ic = Ne); + + b: { + c = a.Ic; + var k = a.za, + d = 4 * k, + l = 32 * k, + m = k + 1, + n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0, + r = (2 == a.Aa ? 2 : 1) * k; + e = 3 * (16 * c + Ya[a.L]) / 2 * l; + f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0; + g = d + 832 + e + f; + if (g != g) c = 0;else { + if (g > a.Vb) { + a.Vb = 0; + a.Ec = V(g); + a.Fc = 0; + + if (null == a.Ec) { + c = T(a, 1, "no memory during frame initialization."); + break b; + } + + a.Vb = g; + } + + g = a.Ec; + h = a.Fc; + a.Ac = g; + a.Bc = h; + h += d; + a.Gd = wa(l, Ic); + a.Hd = 0; + a.rb = wa(m + 1, Hc); + a.sb = 1; + a.wa = n ? wa(n, Xa) : null; + a.Y = 0; + a.D.Nb = 0; + a.D.wa = a.wa; + a.D.Y = a.Y; + 0 < a.Aa && (a.D.Y += k); + x(!0); + a.oc = g; + a.pc = h; + h += 832; + a.ya = wa(r, Kb); + a.aa = 0; + a.D.ya = a.ya; + a.D.aa = a.aa; + 2 == a.Aa && (a.D.aa += k); + a.R = 16 * k; + a.B = 8 * k; + l = Ya[a.L]; + k = l * a.R; + l = l / 2 * a.B; + a.sa = g; + a.ta = h + k; + a.qa = a.sa; + a.ra = a.ta + 16 * c * a.R + l; + a.Ha = a.qa; + a.Ia = a.ra + 8 * c * a.B + l; + a.$c = 0; + h += e; + a.mb = f ? g : null; + a.nb = f ? h : null; + x(h + f <= a.Fc + a.Vb); + Lc(a); + M(a.Ac, a.Bc, 0, d); + c = 1; + } + } + + if (c) { + b.ka = 0; + b.y = a.sa; + b.O = a.ta; + b.f = a.qa; + b.N = a.ra; + b.ea = a.Ha; + b.Vd = a.Ia; + b.fa = a.R; + b.Rc = a.B; + b.F = null; + b.J = 0; + + if (!ad) { + for (c = -255; 255 >= c; ++c) { + bd[255 + c] = 0 > c ? -c : c; + } + + for (c = -1020; 1020 >= c; ++c) { + cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c; + } + + for (c = -112; 112 >= c; ++c) { + dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c; + } + + for (c = -255; 510 >= c; ++c) { + ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c; + } + + ad = 1; + } + + Nc = Oe; + Za = Pe; + Nb = Qe; + pa = Re; + Ob = Se; + fd = Te; + Xc = Ue; + Tc = Ve; + Yc = We; + Uc = Xe; + Zc = Ye; + Vc = Ze; + $c = $e; + Wc = af; + Rc = gd; + Pc = hd; + Sc = bf; + Qc = cf; + W[0] = df; + W[1] = ef; + W[2] = ff; + W[3] = gf; + W[4] = hf; + W[5] = jf; + W[6] = kf; + W[7] = lf; + W[8] = mf; + W[9] = nf; + Y[0] = of; + Y[1] = pf; + Y[2] = qf; + Y[3] = rf; + Y[4] = sf; + Y[5] = tf; + Y[6] = uf; + ka[0] = vf; + ka[1] = wf; + ka[2] = xf; + ka[3] = yf; + ka[4] = zf; + ka[5] = Af; + ka[6] = Bf; + c = 1; + } else c = 0; + } + + c && (c = Je(a, b)); + null != b.bc && b.bc(b); + c &= 1; + } + + if (!c) return 0; + a.cb = 0; + return c; + } + + function qa(a, b, c, d, e) { + e = a[b + c + 32 * d] + (e >> 3); + a[b + c + 32 * d] = e & -256 ? 0 > e ? 0 : 255 : e; + } + + function kb(a, b, c, d, e, f) { + qa(a, b, 0, c, d + e); + qa(a, b, 1, c, d + f); + qa(a, b, 2, c, d - f); + qa(a, b, 3, c, d - e); + } + + function da(a) { + return (20091 * a >> 16) + a; + } + + function id(a, b, c, d) { + var e = 0, + f; + var g = V(16); + + for (f = 0; 4 > f; ++f) { + var h = a[b + 0] + a[b + 8]; + var k = a[b + 0] - a[b + 8]; + var l = (35468 * a[b + 4] >> 16) - da(a[b + 12]); + var m = da(a[b + 4]) + (35468 * a[b + 12] >> 16); + g[e + 0] = h + m; + g[e + 1] = k + l; + g[e + 2] = k - l; + g[e + 3] = h - m; + e += 4; + b++; + } + + for (f = e = 0; 4 > f; ++f) { + a = g[e + 0] + 4, h = a + g[e + 8], k = a - g[e + 8], l = (35468 * g[e + 4] >> 16) - da(g[e + 12]), m = da(g[e + 4]) + (35468 * g[e + 12] >> 16), qa(c, d, 0, 0, h + m), qa(c, d, 1, 0, k + l), qa(c, d, 2, 0, k - l), qa(c, d, 3, 0, h - m), e++, d += 32; + } + } + + function Te(a, b, c, d) { + var e = a[b + 0] + 4, + f = 35468 * a[b + 4] >> 16, + g = da(a[b + 4]), + h = 35468 * a[b + 1] >> 16; + a = da(a[b + 1]); + kb(c, d, 0, e + g, a, h); + kb(c, d, 1, e + f, a, h); + kb(c, d, 2, e - f, a, h); + kb(c, d, 3, e - g, a, h); + } + + function Pe(a, b, c, d, e) { + id(a, b, c, d); + e && id(a, b + 16, c, d + 4); + } + + function Qe(a, b, c, d) { + Za(a, b + 0, c, d, 1); + Za(a, b + 32, c, d + 128, 1); + } + + function Re(a, b, c, d) { + a = a[b + 0] + 4; + var e; + + for (e = 0; 4 > e; ++e) { + for (b = 0; 4 > b; ++b) { + qa(c, d, b, e, a); + } + } + } + + function Se(a, b, c, d) { + a[b + 0] && pa(a, b + 0, c, d); + a[b + 16] && pa(a, b + 16, c, d + 4); + a[b + 32] && pa(a, b + 32, c, d + 128); + a[b + 48] && pa(a, b + 48, c, d + 128 + 4); + } + + function Oe(a, b, c, d) { + var e = V(16), + f; + + for (f = 0; 4 > f; ++f) { + var g = a[b + 0 + f] + a[b + 12 + f]; + var h = a[b + 4 + f] + a[b + 8 + f]; + var k = a[b + 4 + f] - a[b + 8 + f]; + var l = a[b + 0 + f] - a[b + 12 + f]; + e[0 + f] = g + h; + e[8 + f] = g - h; + e[4 + f] = l + k; + e[12 + f] = l - k; + } + + for (f = 0; 4 > f; ++f) { + a = e[0 + 4 * f] + 3, g = a + e[3 + 4 * f], h = e[1 + 4 * f] + e[2 + 4 * f], k = e[1 + 4 * f] - e[2 + 4 * f], l = a - e[3 + 4 * f], c[d + 0] = g + h >> 3, c[d + 16] = l + k >> 3, c[d + 32] = g - h >> 3, c[d + 48] = l - k >> 3, d += 64; + } + } + + function Pb(a, b, c) { + var d = b - 32, + e = R, + f = 255 - a[d - 1], + g; + + for (g = 0; g < c; ++g) { + var h = e, + k = f + a[b - 1], + l; + + for (l = 0; l < c; ++l) { + a[b + l] = h[k + a[d + l]]; + } + + b += 32; + } + } + + function ef(a, b) { + Pb(a, b, 4); + } + + function wf(a, b) { + Pb(a, b, 8); + } + + function pf(a, b) { + Pb(a, b, 16); + } + + function qf(a, b) { + var c; + + for (c = 0; 16 > c; ++c) { + I(a, b + 32 * c, a, b - 32, 16); + } + } + + function rf(a, b) { + var c; + + for (c = 16; 0 < c; --c) { + M(a, b, a[b - 1], 16), b += 32; + } + } + + function $a(a, b, c) { + var d; + + for (d = 0; 16 > d; ++d) { + M(b, c + 32 * d, a, 16); + } + } + + function of(a, b) { + var c = 16, + d; + + for (d = 0; 16 > d; ++d) { + c += a[b - 1 + 32 * d] + a[b + d - 32]; + } + + $a(c >> 5, a, b); + } + + function sf(a, b) { + var c = 8, + d; + + for (d = 0; 16 > d; ++d) { + c += a[b - 1 + 32 * d]; + } + + $a(c >> 4, a, b); + } + + function tf(a, b) { + var c = 8, + d; + + for (d = 0; 16 > d; ++d) { + c += a[b + d - 32]; + } + + $a(c >> 4, a, b); + } + + function uf(a, b) { + $a(128, a, b); + } + + function z(a, b, c) { + return a + 2 * b + c + 2 >> 2; + } + + function ff(a, b) { + var c = b - 32, + c = new Uint8Array([z(a[c - 1], a[c + 0], a[c + 1]), z(a[c + 0], a[c + 1], a[c + 2]), z(a[c + 1], a[c + 2], a[c + 3]), z(a[c + 2], a[c + 3], a[c + 4])]), + d; + + for (d = 0; 4 > d; ++d) { + I(a, b + 32 * d, c, 0, c.length); + } + } + + function gf(a, b) { + var c = a[b - 1], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96]; + ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d)); + ra(a, b + 32, 16843009 * z(c, d, e)); + ra(a, b + 64, 16843009 * z(d, e, f)); + ra(a, b + 96, 16843009 * z(e, f, f)); + } + + function df(a, b) { + var c = 4, + d; + + for (d = 0; 4 > d; ++d) { + c += a[b + d - 32] + a[b - 1 + 32 * d]; + } + + c >>= 3; + + for (d = 0; 4 > d; ++d) { + M(a, b + 32 * d, c, 4); + } + } + + function hf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 - 32], + g = a[b + 0 - 32], + h = a[b + 1 - 32], + k = a[b + 2 - 32], + l = a[b + 3 - 32]; + a[b + 0 + 96] = z(d, e, a[b - 1 + 96]); + a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e); + a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d); + a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c); + a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f); + a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g); + a[b + 3 + 0] = z(l, k, h); + } + + function kf(a, b) { + var c = a[b + 1 - 32], + d = a[b + 2 - 32], + e = a[b + 3 - 32], + f = a[b + 4 - 32], + g = a[b + 5 - 32], + h = a[b + 6 - 32], + k = a[b + 7 - 32]; + a[b + 0 + 0] = z(a[b + 0 - 32], c, d); + a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e); + a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f); + a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g); + a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h); + a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k); + a[b + 3 + 96] = z(h, k, k); + } + + function jf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 - 32], + g = a[b + 0 - 32], + h = a[b + 1 - 32], + k = a[b + 2 - 32], + l = a[b + 3 - 32]; + a[b + 0 + 0] = a[b + 1 + 64] = f + g + 1 >> 1; + a[b + 1 + 0] = a[b + 2 + 64] = g + h + 1 >> 1; + a[b + 2 + 0] = a[b + 3 + 64] = h + k + 1 >> 1; + a[b + 3 + 0] = k + l + 1 >> 1; + a[b + 0 + 96] = z(e, d, c); + a[b + 0 + 64] = z(d, c, f); + a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g); + a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h); + a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k); + a[b + 3 + 32] = z(h, k, l); + } + + function lf(a, b) { + var c = a[b + 0 - 32], + d = a[b + 1 - 32], + e = a[b + 2 - 32], + f = a[b + 3 - 32], + g = a[b + 4 - 32], + h = a[b + 5 - 32], + k = a[b + 6 - 32], + l = a[b + 7 - 32]; + a[b + 0 + 0] = c + d + 1 >> 1; + a[b + 1 + 0] = a[b + 0 + 64] = d + e + 1 >> 1; + a[b + 2 + 0] = a[b + 1 + 64] = e + f + 1 >> 1; + a[b + 3 + 0] = a[b + 2 + 64] = f + g + 1 >> 1; + a[b + 0 + 32] = z(c, d, e); + a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f); + a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g); + a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h); + a[b + 3 + 64] = z(g, h, k); + a[b + 3 + 96] = z(h, k, l); + } + + function nf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96]; + a[b + 0 + 0] = c + d + 1 >> 1; + a[b + 2 + 0] = a[b + 0 + 32] = d + e + 1 >> 1; + a[b + 2 + 32] = a[b + 0 + 64] = e + f + 1 >> 1; + a[b + 1 + 0] = z(c, d, e); + a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f); + a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f); + a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[b + 2 + 96] = a[b + 3 + 96] = f; + } + + function mf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96], + g = a[b - 1 - 32], + h = a[b + 0 - 32], + k = a[b + 1 - 32], + l = a[b + 2 - 32]; + a[b + 0 + 0] = a[b + 2 + 32] = c + g + 1 >> 1; + a[b + 0 + 32] = a[b + 2 + 64] = d + c + 1 >> 1; + a[b + 0 + 64] = a[b + 2 + 96] = e + d + 1 >> 1; + a[b + 0 + 96] = f + e + 1 >> 1; + a[b + 3 + 0] = z(h, k, l); + a[b + 2 + 0] = z(g, h, k); + a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h); + a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g); + a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c); + a[b + 1 + 96] = z(f, e, d); + } + + function xf(a, b) { + var c; + + for (c = 0; 8 > c; ++c) { + I(a, b + 32 * c, a, b - 32, 8); + } + } + + function yf(a, b) { + var c; + + for (c = 0; 8 > c; ++c) { + M(a, b, a[b - 1], 8), b += 32; + } + } + + function lb(a, b, c) { + var d; + + for (d = 0; 8 > d; ++d) { + M(b, c + 32 * d, a, 8); + } + } + + function vf(a, b) { + var c = 8, + d; + + for (d = 0; 8 > d; ++d) { + c += a[b + d - 32] + a[b - 1 + 32 * d]; + } + + lb(c >> 4, a, b); + } + + function Af(a, b) { + var c = 4, + d; + + for (d = 0; 8 > d; ++d) { + c += a[b + d - 32]; + } + + lb(c >> 3, a, b); + } + + function zf(a, b) { + var c = 4, + d; + + for (d = 0; 8 > d; ++d) { + c += a[b - 1 + 32 * d]; + } + + lb(c >> 3, a, b); + } + + function Bf(a, b) { + lb(128, a, b); + } + + function ab(a, b, c) { + var d = a[b - c], + e = a[b + 0], + f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]], + g = mb[112 + (f + 4 >> 3)]; + a[b - c] = R[255 + d + mb[112 + (f + 3 >> 3)]]; + a[b + 0] = R[255 + e - g]; + } + + function jd(a, b, c, d) { + var e = a[b + 0], + f = a[b + c]; + return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d; + } + + function kd(a, b, c, d) { + return 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d; + } + + function ld(a, b, c, d, e) { + var f = a[b - 3 * c], + g = a[b - 2 * c], + h = a[b - c], + k = a[b + 0], + l = a[b + c], + m = a[b + 2 * c], + n = a[b + 3 * c]; + return 4 * U[255 + h - k] + U[255 + g - l] > d ? 0 : U[255 + a[b - 4 * c] - f] <= e && U[255 + f - g] <= e && U[255 + g - h] <= e && U[255 + n - m] <= e && U[255 + m - l] <= e && U[255 + l - k] <= e; + } + + function gd(a, b, c, d) { + var e = 2 * d + 1; + + for (d = 0; 16 > d; ++d) { + kd(a, b + d, c, e) && ab(a, b + d, c); + } + } + + function hd(a, b, c, d) { + var e = 2 * d + 1; + + for (d = 0; 16 > d; ++d) { + kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1); + } + } + + function bf(a, b, c, d) { + var e; + + for (e = 3; 0 < e; --e) { + b += 4 * c, gd(a, b, c, d); + } + } + + function cf(a, b, c, d) { + var e; + + for (e = 3; 0 < e; --e) { + b += 4, hd(a, b, c, d); + } + } + + function ea(a, b, c, d, e, f, g, h) { + for (f = 2 * f + 1; 0 < e--;) { + if (ld(a, b, c, f, g)) if (jd(a, b, c, h)) ab(a, b, c);else { + var k = a, + l = b, + m = c, + n = k[l - 2 * m], + r = k[l - m], + q = k[l + 0], + t = k[l + m], + v = k[l + 2 * m], + p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]], + u = 27 * p + 63 >> 7, + w = 18 * p + 63 >> 7, + p = 9 * p + 63 >> 7; + k[l - 3 * m] = R[255 + k[l - 3 * m] + p]; + k[l - 2 * m] = R[255 + n + w]; + k[l - m] = R[255 + r + u]; + k[l + 0] = R[255 + q - u]; + k[l + m] = R[255 + t - w]; + k[l + 2 * m] = R[255 + v - p]; + } + b += d; + } + } + + function Fa(a, b, c, d, e, f, g, h) { + for (f = 2 * f + 1; 0 < e--;) { + if (ld(a, b, c, f, g)) if (jd(a, b, c, h)) ab(a, b, c);else { + var k = a, + l = b, + m = c, + n = k[l - m], + r = k[l + 0], + q = k[l + m], + t = 3 * (r - n), + v = mb[112 + (t + 4 >> 3)], + t = mb[112 + (t + 3 >> 3)], + p = v + 1 >> 1; + k[l - 2 * m] = R[255 + k[l - 2 * m] + p]; + k[l - m] = R[255 + n + t]; + k[l + 0] = R[255 + r - v]; + k[l + m] = R[255 + q - p]; + } + b += d; + } + } + + function Ue(a, b, c, d, e, f) { + ea(a, b, c, 1, 16, d, e, f); + } + + function Ve(a, b, c, d, e, f) { + ea(a, b, 1, c, 16, d, e, f); + } + + function Ye(a, b, c, d, e, f) { + var g; + + for (g = 3; 0 < g; --g) { + b += 4 * c, Fa(a, b, c, 1, 16, d, e, f); + } + } + + function Ze(a, b, c, d, e, f) { + var g; + + for (g = 3; 0 < g; --g) { + b += 4, Fa(a, b, 1, c, 16, d, e, f); + } + } + + function We(a, b, c, d, e, f, g, h) { + ea(a, b, e, 1, 8, f, g, h); + ea(c, d, e, 1, 8, f, g, h); + } + + function Xe(a, b, c, d, e, f, g, h) { + ea(a, b, 1, e, 8, f, g, h); + ea(c, d, 1, e, 8, f, g, h); + } + + function $e(a, b, c, d, e, f, g, h) { + Fa(a, b + 4 * e, e, 1, 8, f, g, h); + Fa(c, d + 4 * e, e, 1, 8, f, g, h); + } + + function af(a, b, c, d, e, f, g, h) { + Fa(a, b + 4, 1, e, 8, f, g, h); + Fa(c, d + 4, 1, e, 8, f, g, h); + } + + function Cf() { + this.ba = new Cb(); + this.ec = []; + this.cc = []; + this.Mc = []; + this.Dc = this.Nc = this.dc = this.fc = 0; + this.Oa = new Ud(); + this.memory = 0; + this.Ib = "OutputFunc"; + this.Jb = "OutputAlphaFunc"; + this.Nd = "OutputRowFunc"; + } + + function md() { + this.data = []; + this.offset = this.kd = this.ha = this.w = 0; + this.na = []; + this.xa = this.gb = this.Ja = this.Sa = this.P = 0; + } + + function Df() { + this.nc = this.Ea = this.b = this.hc = 0; + this.K = []; + this.w = 0; + } + + function Ef() { + this.ua = 0; + this.Wa = new ac(); + this.vb = new ac(); + this.md = this.xc = this.wc = 0; + this.vc = []; + this.Wb = 0; + this.Ya = new Ub(); + this.yc = new O(); + } + + function je() { + this.xb = this.a = 0; + this.l = new Oa(); + this.ca = new Cb(); + this.V = []; + this.Ba = 0; + this.Ta = []; + this.Ua = 0; + this.m = new Ra(); + this.Pb = 0; + this.wd = new Ra(); + this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0; + this.s = new Ef(); + this.ab = 0; + this.gc = wa(4, Df); + this.Oc = 0; + } + + function Ff() { + this.Lc = this.Z = this.$a = this.i = this.c = 0; + this.l = new Oa(); + this.ic = 0; + this.ca = []; + this.tb = 0; + this.qd = null; + this.rd = 0; + } + + function Rb(a, b, c, d, e, f, g) { + a = null == a ? 0 : a[b + 0]; + + for (b = 0; b < g; ++b) { + e[f + b] = a + c[d + b] & 255, a = e[f + b]; + } + } + + function Gf(a, b, c, d, e, f, g) { + if (null == a) Rb(null, null, c, d, e, f, g);else { + var h; + + for (h = 0; h < g; ++h) { + e[f + h] = a[b + h] + c[d + h] & 255; + } + } + } + + function Hf(a, b, c, d, e, f, g) { + if (null == a) Rb(null, null, c, d, e, f, g);else { + var h = a[b + 0], + k = h, + l = h, + m; + + for (m = 0; m < g; ++m) { + h = a[b + m], k = l + h - k, l = c[d + m] + (k & -256 ? 0 > k ? 0 : 255 : k) & 255, k = h, e[f + m] = l; + } + } + } + + function Le(a, b, c, d) { + var e = b.width, + f = b.o; + x(null != a && null != b); + if (0 > c || 0 >= d || c + d > f) return null; + + if (!a.Cc) { + if (null == a.ga) { + a.ga = new Ff(); + var g; + (g = null == a.ga) || (g = b.width * b.o, x(0 == a.Gb.length), a.Gb = V(g), a.Uc = 0, null == a.Gb ? g = 0 : (a.mb = a.Gb, a.nb = a.Uc, a.rc = null, g = 1), g = !g); + + if (!g) { + g = a.ga; + var h = a.Fa, + k = a.P, + l = a.qc, + m = a.mb, + n = a.nb, + r = k + 1, + q = l - 1, + t = g.l; + x(null != h && null != m && null != b); + ia[0] = null; + ia[1] = Rb; + ia[2] = Gf; + ia[3] = Hf; + g.ca = m; + g.tb = n; + g.c = b.width; + g.i = b.height; + x(0 < g.c && 0 < g.i); + if (1 >= l) b = 0;else if (g.$a = h[k + 0] >> 0 & 3, g.Z = h[k + 0] >> 2 & 3, g.Lc = h[k + 0] >> 4 & 3, k = h[k + 0] >> 6 & 3, 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k) b = 0;else if (t.put = kc, t.ac = gc, t.bc = lc, t.ma = g, t.width = b.width, t.height = b.height, t.Da = b.Da, t.v = b.v, t.va = b.va, t.j = b.j, t.o = b.o, g.$a) b: { + x(1 == g.$a), b = Bc(); + + c: for (;;) { + if (null == b) { + b = 0; + break b; + } + + x(null != g); + g.mc = b; + b.c = g.c; + b.i = g.i; + b.l = g.l; + b.l.ma = g; + b.l.width = g.c; + b.l.height = g.i; + b.a = 0; + cb(b.m, h, r, q); + if (!rb(g.c, g.i, 1, b, null)) break c; + 1 == b.ab && 3 == b.gc[0].hc && yc(b.s) ? (g.ic = 1, h = b.c * b.i, b.Ta = null, b.Ua = 0, b.V = V(h), b.Ba = 0, null == b.V ? (b.a = 1, b = 0) : b = 1) : (g.ic = 0, b = Ec(b, g.c)); + if (!b) break c; + b = 1; + break b; + } + + g.mc = null; + b = 0; + } else b = q >= g.c * g.i; + g = !b; + } + + if (g) return null; + 1 != a.ga.Lc ? a.Ga = 0 : d = f - c; + } + + x(null != a.ga); + x(c + d <= f); + + a: { + h = a.ga; + b = h.c; + f = h.l.o; + + if (0 == h.$a) { + r = a.rc; + q = a.Vc; + t = a.Fa; + k = a.P + 1 + c * b; + l = a.mb; + m = a.nb + c * b; + x(k <= a.P + a.qc); + if (0 != h.Z) for (x(null != ia[h.Z]), g = 0; g < d; ++g) { + ia[h.Z](r, q, t, k, l, m, b), r = l, q = m, m += b, k += b; + } else for (g = 0; g < d; ++g) { + I(l, m, t, k, b), r = l, q = m, m += b, k += b; + } + a.rc = r; + a.Vc = q; + } else { + x(null != h.mc); + b = c + d; + g = h.mc; + x(null != g); + x(b <= g.i); + if (g.C >= b) b = 1;else if (h.ic || Aa(), h.ic) { + var h = g.V, + r = g.Ba, + q = g.c, + v = g.i, + t = 1, + k = g.$ / q, + l = g.$ % q, + m = g.m, + n = g.s, + p = g.$, + u = q * v, + w = q * b, + y = n.wc, + A = p < w ? ha(n, l, k) : null; + x(p <= u); + x(b <= v); + x(yc(n)); + + c: for (;;) { + for (; !m.h && p < w;) { + l & y || (A = ha(n, l, k)); + x(null != A); + Sa(m); + v = ua(A.G[0], A.H[0], m); + if (256 > v) h[r + p] = v, ++p, ++l, l >= q && (l = 0, ++k, k <= b && !(k % 16) && Ib(g, k));else if (280 > v) { + var v = ib(v - 256, m); + var E = ua(A.G[4], A.H[4], m); + Sa(m); + E = ib(E, m); + E = nc(q, E); + + if (p >= E && u - p >= v) { + var B; + + for (B = 0; B < v; ++B) { + h[r + p + B] = h[r + p + B - E]; + } + } else { + t = 0; + break c; + } + + p += v; + + for (l += v; l >= q;) { + l -= q, ++k, k <= b && !(k % 16) && Ib(g, k); + } + + p < w && l & y && (A = ha(n, l, k)); + } else { + t = 0; + break c; + } + x(m.h == db(m)); + } + + Ib(g, k > b ? b : k); + break c; + } + + !t || m.h && p < u ? (t = 0, g.a = m.h ? 5 : 3) : g.$ = p; + b = t; + } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se); + + if (!b) { + d = 0; + break a; + } + } + + c + d >= f && (a.Cc = 1); + d = 1; + } + + if (!d) return null; + if (a.Cc && (d = a.ga, null != d && (d.mc = null), a.ga = null, 0 < a.Ga)) return alert("todo:WebPDequantizeLevels"), null; + } + + return a.nb + c * e; + } + + function If(a, b, c, d, e, f) { + for (; 0 < e--;) { + var g = a, + h = b + (c ? 1 : 0), + k = a, + l = b + (c ? 0 : 3), + m; + + for (m = 0; m < d; ++m) { + var n = k[l + 4 * m]; + 255 != n && (n *= 32897, g[h + 4 * m + 0] = g[h + 4 * m + 0] * n >> 23, g[h + 4 * m + 1] = g[h + 4 * m + 1] * n >> 23, g[h + 4 * m + 2] = g[h + 4 * m + 2] * n >> 23); + } + + b += f; + } + } + + function Jf(a, b, c, d, e) { + for (; 0 < d--;) { + var f; + + for (f = 0; f < c; ++f) { + var g = a[b + 2 * f + 0], + h = a[b + 2 * f + 1], + k = h & 15, + l = 4369 * k, + h = (h & 240 | h >> 4) * l >> 16; + a[b + 2 * f + 0] = (g & 240 | g >> 4) * l >> 16 & 240 | (g & 15 | g << 4) * l >> 16 >> 4 & 15; + a[b + 2 * f + 1] = h & 240 | k; + } + + b += e; + } + } + + function Kf(a, b, c, d, e, f, g, h) { + var k = 255, + l, + m; + + for (m = 0; m < e; ++m) { + for (l = 0; l < d; ++l) { + var n = a[b + l]; + f[g + 4 * l] = n; + k &= n; + } + + b += c; + g += h; + } + + return 255 != k; + } + + function Lf(a, b, c, d, e) { + var f; + + for (f = 0; f < e; ++f) { + c[d + f] = a[b + f] >> 8; + } + } + + function Aa() { + za = If; + vc = Jf; + fc = Kf; + Fc = Lf; + } + + function va(a, b, c) { + self[a] = function (a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) { + var d, + E = y - 1 >> 1; + var B = h[k + 0] | l[m + 0] << 16; + var C = n[r + 0] | q[t + 0] << 16; + x(null != a); + var z = 3 * B + C + 131074 >> 2; + b(a[e + 0], z & 255, z >> 16, v, p); + null != f && (z = 3 * C + B + 131074 >> 2, b(f[g + 0], z & 255, z >> 16, u, w)); + + for (d = 1; d <= E; ++d) { + var D = h[k + d] | l[m + d] << 16; + var G = n[r + d] | q[t + d] << 16; + var F = B + D + C + G + 524296; + var H = F + 2 * (D + C) >> 3; + F = F + 2 * (B + G) >> 3; + z = H + B >> 1; + B = F + D >> 1; + b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c); + b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c); + null != f && (z = F + C >> 1, B = H + G >> 1, b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c), b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c)); + B = D; + C = G; + } + + y & 1 || (z = 3 * B + C + 131074 >> 2, b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c), null != f && (z = 3 * C + B + 131074 >> 2, b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c))); + }; + } + + function ic() { + P[Ca] = Mf; + P[Ua] = nd; + P[tc] = Nf; + P[Va] = od; + P[ya] = pd; + P[Db] = qd; + P[wc] = Of; + P[zb] = nd; + P[Ab] = od; + P[Ja] = pd; + P[Bb] = qd; + } + + function Sb(a) { + return a & ~Pf ? 0 > a ? 0 : 255 : a >> rd; + } + + function bb(a, b) { + return Sb((19077 * a >> 8) + (26149 * b >> 8) - 14234); + } + + function nb(a, b, c) { + return Sb((19077 * a >> 8) - (6419 * b >> 8) - (13320 * c >> 8) + 8708); + } + + function Pa(a, b) { + return Sb((19077 * a >> 8) + (33050 * b >> 8) - 17685); + } + + function Ga(a, b, c, d, e) { + d[e + 0] = bb(a, c); + d[e + 1] = nb(a, b, c); + d[e + 2] = Pa(a, b); + } + + function Tb(a, b, c, d, e) { + d[e + 0] = Pa(a, b); + d[e + 1] = nb(a, b, c); + d[e + 2] = bb(a, c); + } + + function sd(a, b, c, d, e) { + var f = nb(a, b, c); + b = f << 3 & 224 | Pa(a, b) >> 3; + d[e + 0] = bb(a, c) & 248 | f >> 5; + d[e + 1] = b; + } + + function td(a, b, c, d, e) { + var f = Pa(a, b) & 240 | 15; + d[e + 0] = bb(a, c) & 240 | nb(a, b, c) >> 4; + d[e + 1] = f; + } + + function ud(a, b, c, d, e) { + d[e + 0] = 255; + Ga(a, b, c, d, e + 1); + } + + function vd(a, b, c, d, e) { + Tb(a, b, c, d, e); + d[e + 3] = 255; + } + + function wd(a, b, c, d, e) { + Ga(a, b, c, d, e); + d[e + 3] = 255; + } + + function ga(a, b) { + return 0 > a ? 0 : a > b ? b : a; + } + + function la(a, b, c) { + self[a] = function (a, e, f, g, h, k, l, m, n) { + for (var d = m + (n & -2) * c; m != d;) { + b(a[e + 0], f[g + 0], h[k + 0], l, m), b(a[e + 1], f[g + 0], h[k + 0], l, m + c), e += 2, ++g, ++k, m += 2 * c; + } + + n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m); + }; + } + + function xd(a, b, c) { + return 0 == c ? 0 == a ? 0 == b ? 6 : 5 : 0 == b ? 4 : 0 : c; + } + + function yd(a, b, c, d, e) { + switch (a >>> 30) { + case 3: + Za(b, c, d, e, 0); + break; + + case 2: + fd(b, c, d, e); + break; + + case 1: + pa(b, c, d, e); + } + } + + function Oc(a, b) { + var c, + d, + e = b.M, + f = b.Nb, + g = a.oc, + h = a.pc + 40, + k = a.oc, + l = a.pc + 584, + m = a.oc, + n = a.pc + 600; + + for (c = 0; 16 > c; ++c) { + g[h + 32 * c - 1] = 129; + } + + for (c = 0; 8 > c; ++c) { + k[l + 32 * c - 1] = 129, m[n + 32 * c - 1] = 129; + } + + 0 < e ? g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129 : (M(g, h - 32 - 1, 127, 21), M(k, l - 32 - 1, 127, 9), M(m, n - 32 - 1, 127, 9)); + + for (d = 0; d < a.za; ++d) { + var r = b.ya[b.aa + d]; + + if (0 < d) { + for (c = -1; 16 > c; ++c) { + I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4); + } + + for (c = -1; 8 > c; ++c) { + I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4), I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4); + } + } + + var q = a.Gd, + t = a.Hd + d, + v = r.ad, + p = r.Hc; + 0 < e && (I(g, h - 32, q[t].y, 0, 16), I(k, l - 32, q[t].f, 0, 8), I(m, n - 32, q[t].ea, 0, 8)); + + if (r.Za) { + var u = g; + var w = h - 32 + 16; + 0 < e && (d >= a.za - 1 ? M(u, w, q[t].y[15], 4) : I(u, w, q[t + 1].y, 0, 4)); + + for (c = 0; 4 > c; c++) { + u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c]; + } + + for (c = 0; 16 > c; ++c, p <<= 2) { + u = g, w = h + zd[c], W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w); + } + } else if (u = xd(d, e, r.Ob[0]), Y[u](g, h), 0 != p) for (c = 0; 16 > c; ++c, p <<= 2) { + yd(p, v, 16 * +c, g, h + zd[c]); + } + + c = r.Gc; + u = xd(d, e, r.Dd); + ka[u](k, l); + ka[u](m, n); + r = c >> 0; + p = v; + u = k; + w = l; + r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w)); + c >>= 8; + r = m; + p = n; + c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p)); + e < a.Ub - 1 && (I(q[t].y, 0, g, h + 480, 16), I(q[t].f, 0, k, l + 224, 8), I(q[t].ea, 0, m, n + 224, 8)); + c = 8 * f * a.B; + q = a.sa; + t = a.ta + 16 * d + 16 * f * a.R; + v = a.qa; + r = a.ra + 8 * d + c; + p = a.Ha; + u = a.Ia + 8 * d + c; + + for (c = 0; 16 > c; ++c) { + I(q, t + c * a.R, g, h + 32 * c, 16); + } + + for (c = 0; 8 > c; ++c) { + I(v, r + c * a.B, k, l + 32 * c, 8), I(p, u + c * a.B, m, n + 32 * c, 8); + } + } + } + + function Ad(a, b, c, d, e, f, g, h, k) { + var l = [0], + m = [0], + n = 0, + r = null != k ? k.kd : 0, + q = null != k ? k : new md(); + if (null == a || 12 > c) return 7; + q.data = a; + q.w = b; + q.ha = c; + b = [b]; + c = [c]; + q.gb = [q.gb]; + + a: { + var t = b; + var v = c; + var p = q.gb; + x(null != a); + x(null != v); + x(null != p); + p[0] = 0; + + if (12 <= v[0] && !fa(a, t[0], "RIFF")) { + if (fa(a, t[0] + 8, "WEBP")) { + p = 3; + break a; + } + + var u = Ha(a, t[0] + 4); + + if (12 > u || 4294967286 < u) { + p = 3; + break a; + } + + if (r && u > v[0] - 8) { + p = 7; + break a; + } + + p[0] = u; + t[0] += 12; + v[0] -= 12; + } + + p = 0; + } + + if (0 != p) return p; + u = 0 < q.gb[0]; + + for (c = c[0];;) { + t = [0]; + n = [n]; + + a: { + var w = a; + v = b; + p = c; + var y = n, + A = l, + z = m, + B = t; + y[0] = 0; + if (8 > p[0]) p = 7;else { + if (!fa(w, v[0], "VP8X")) { + if (10 != Ha(w, v[0] + 4)) { + p = 3; + break a; + } + + if (18 > p[0]) { + p = 7; + break a; + } + + var C = Ha(w, v[0] + 8); + var D = 1 + Yb(w, v[0] + 12); + w = 1 + Yb(w, v[0] + 15); + + if (2147483648 <= D * w) { + p = 3; + break a; + } + + null != B && (B[0] = C); + null != A && (A[0] = D); + null != z && (z[0] = w); + v[0] += 18; + p[0] -= 18; + y[0] = 1; + } + + p = 0; + } + } + + n = n[0]; + t = t[0]; + if (0 != p) return p; + v = !!(t & 2); + if (!u && n) return 3; + null != f && (f[0] = !!(t & 16)); + null != g && (g[0] = v); + null != h && (h[0] = 0); + g = l[0]; + t = m[0]; + + if (n && v && null == k) { + p = 0; + break; + } + + if (4 > c) { + p = 7; + break; + } + + if (u && n || !u && !n && !fa(a, b[0], "ALPH")) { + c = [c]; + q.na = [q.na]; + q.P = [q.P]; + q.Sa = [q.Sa]; + + a: { + C = a; + p = b; + u = c; + var y = q.gb, + A = q.na, + z = q.P, + B = q.Sa; + D = 22; + x(null != C); + x(null != u); + w = p[0]; + var F = u[0]; + x(null != A); + x(null != B); + A[0] = null; + z[0] = null; + + for (B[0] = 0;;) { + p[0] = w; + u[0] = F; + + if (8 > F) { + p = 7; + break a; + } + + var G = Ha(C, w + 4); + + if (4294967286 < G) { + p = 3; + break a; + } + + var H = 8 + G + 1 & -2; + D += H; + + if (0 < y && D > y) { + p = 3; + break a; + } + + if (!fa(C, w, "VP8 ") || !fa(C, w, "VP8L")) { + p = 0; + break a; + } + + if (F[0] < H) { + p = 7; + break a; + } + + fa(C, w, "ALPH") || (A[0] = C, z[0] = w + 8, B[0] = G); + w += H; + F -= H; + } + } + + c = c[0]; + q.na = q.na[0]; + q.P = q.P[0]; + q.Sa = q.Sa[0]; + if (0 != p) break; + } + + c = [c]; + q.Ja = [q.Ja]; + q.xa = [q.xa]; + + a: if (y = a, p = b, u = c, A = q.gb[0], z = q.Ja, B = q.xa, C = p[0], w = !fa(y, C, "VP8 "), D = !fa(y, C, "VP8L"), x(null != y), x(null != u), x(null != z), x(null != B), 8 > u[0]) p = 7;else { + if (w || D) { + y = Ha(y, C + 4); + + if (12 <= A && y > A - 12) { + p = 3; + break a; + } + + if (r && y > u[0] - 8) { + p = 7; + break a; + } + + z[0] = y; + p[0] += 8; + u[0] -= 8; + B[0] = D; + } else B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5), z[0] = u[0]; + + p = 0; + } + + c = c[0]; + q.Ja = q.Ja[0]; + q.xa = q.xa[0]; + b = b[0]; + if (0 != p) break; + if (4294967286 < q.Ja) return 3; + null == h || v || (h[0] = q.xa ? 2 : 1); + g = [g]; + t = [t]; + + if (q.xa) { + if (5 > c) { + p = 7; + break; + } + + h = g; + r = t; + v = f; + null == a || 5 > c ? a = 0 : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5) ? (u = [0], y = [0], A = [0], z = new Ra(), cb(z, a, b, c), mc(z, u, y, A) ? (null != h && (h[0] = u[0]), null != r && (r[0] = y[0]), null != v && (v[0] = A[0]), a = 1) : a = 0) : a = 0; + } else { + if (10 > c) { + p = 7; + break; + } + + h = t; + null == a || 10 > c || !Jc(a, b + 3, c - 3) ? a = 0 : (r = a[b + 0] | a[b + 1] << 8 | a[b + 2] << 16, v = (a[b + 7] << 8 | a[b + 6]) & 16383, a = (a[b + 9] << 8 | a[b + 8]) & 16383, r & 1 || 3 < (r >> 1 & 7) || !(r >> 4 & 1) || r >> 5 >= q.Ja || !v || !a ? a = 0 : (g && (g[0] = v), h && (h[0] = a), a = 1)); + } + + if (!a) return 3; + g = g[0]; + t = t[0]; + if (n && (l[0] != g || m[0] != t)) return 3; + null != k && (k[0] = q, k.offset = b - k.w, x(4294967286 > b - k.w), x(k.offset == k.ha - c)); + break; + } + + return 0 == p || 7 == p && n && null == k ? (null != f && (f[0] |= null != q.na && 0 < q.na.length), null != d && (d[0] = g), null != e && (e[0] = t), 0) : p; + } + + function hc(a, b, c) { + var d = b.width, + e = b.height, + f = 0, + g = 0, + h = d, + k = e; + b.Da = null != a && 0 < a.Da; + if (b.Da && (h = a.cd, k = a.bd, f = a.v, g = a.j, 11 > c || (f &= -2, g &= -2), 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)) return 0; + b.v = f; + b.j = g; + b.va = f + h; + b.o = g + k; + b.U = h; + b.T = k; + b.da = null != a && 0 < a.da; + + if (b.da) { + c = [a.ib]; + f = [a.hb]; + if (!bc(h, k, c, f)) return 0; + b.ib = c[0]; + b.hb = f[0]; + } + + b.ob = null != a && a.ob; + b.Kb = null == a || !a.Sd; + b.da && (b.ob = b.ib < 3 * d / 4 && b.hb < 3 * e / 4, b.Kb = 0); + return 1; + } + + function Bd(a) { + if (null == a) return 2; + + if (11 > a.S) { + var b = a.f.RGBA; + b.fb += (a.height - 1) * b.A; + b.A = -b.A; + } else b = a.f.kb, a = a.height, b.O += (a - 1) * b.fa, b.fa = -b.fa, b.N += (a - 1 >> 1) * b.Ab, b.Ab = -b.Ab, b.W += (a - 1 >> 1) * b.Db, b.Db = -b.Db, null != b.F && (b.J += (a - 1) * b.lb, b.lb = -b.lb); + + return 0; + } + + function Cd(a, b, c, d) { + if (null == d || 0 >= a || 0 >= b) return 2; + + if (null != c) { + if (c.Da) { + var e = c.cd, + f = c.bd, + g = c.v & -2, + h = c.j & -2; + if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b) return 2; + a = e; + b = f; + } + + if (c.da) { + e = [c.ib]; + f = [c.hb]; + if (!bc(a, b, e, f)) return 2; + a = e[0]; + b = f[0]; + } + } + + d.width = a; + d.height = b; + + a: { + var k = d.width; + var l = d.height; + a = d.S; + if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;else { + if (0 >= d.Rd && null == d.sd) { + var g = f = e = b = 0, + h = k * Dd[a], + m = h * l; + 11 > a || (b = (k + 1) / 2, f = (l + 1) / 2 * b, 12 == a && (e = k, g = e * l)); + l = V(m + 2 * f + g); + + if (null == l) { + a = 1; + break a; + } + + d.sd = l; + 11 > a ? (k = d.f.RGBA, k.eb = l, k.fb = 0, k.A = h, k.size = m) : (k = d.f.kb, k.y = l, k.O = 0, k.fa = h, k.Fd = m, k.f = l, k.N = 0 + m, k.Ab = b, k.Cd = f, k.ea = l, k.W = 0 + m + f, k.Db = b, k.Ed = f, 12 == a && (k.F = l, k.J = 0 + m + 2 * f), k.Tc = g, k.lb = e); + } + + b = 1; + e = d.S; + f = d.width; + g = d.height; + if (e >= Ca && 13 > e) { + if (11 > e) a = d.f.RGBA, h = Math.abs(a.A), b &= h * (g - 1) + f <= a.size, b &= h >= f * Dd[e], b &= null != a.eb;else { + a = d.f.kb; + h = (f + 1) / 2; + m = (g + 1) / 2; + k = Math.abs(a.fa); + var l = Math.abs(a.Ab), + n = Math.abs(a.Db), + r = Math.abs(a.lb), + q = r * (g - 1) + f; + b &= k * (g - 1) + f <= a.Fd; + b &= l * (m - 1) + h <= a.Cd; + b &= n * (m - 1) + h <= a.Ed; + b = b & k >= f & l >= h & n >= h; + b &= null != a.y; + b &= null != a.f; + b &= null != a.ea; + 12 == e && (b &= r >= f, b &= q <= a.Tc, b &= null != a.F); + } + } else b = 0; + a = b ? 0 : 2; + } + } + + if (0 != a) return a; + null != c && c.fd && (a = Bd(d)); + return a; + } + + var xb = 64, + Hd = [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215], + Gd = 24, + ob = 32, + Xb = 8, + Id = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]; + X("Predictor0", "PredictorAdd0"); + + self.Predictor0 = function () { + return 4278190080; + }; + + self.Predictor1 = function (a) { + return a; + }; + + self.Predictor2 = function (a, b, c) { + return b[c + 0]; + }; + + self.Predictor3 = function (a, b, c) { + return b[c + 1]; + }; + + self.Predictor4 = function (a, b, c) { + return b[c - 1]; + }; + + self.Predictor5 = function (a, b, c) { + return aa(aa(a, b[c + 1]), b[c + 0]); + }; + + self.Predictor6 = function (a, b, c) { + return aa(a, b[c - 1]); + }; + + self.Predictor7 = function (a, b, c) { + return aa(a, b[c + 0]); + }; + + self.Predictor8 = function (a, b, c) { + return aa(b[c - 1], b[c + 0]); + }; + + self.Predictor9 = function (a, b, c) { + return aa(b[c + 0], b[c + 1]); + }; + + self.Predictor10 = function (a, b, c) { + return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1])); + }; + + self.Predictor11 = function (a, b, c) { + var d = b[c + 0]; + b = b[c - 1]; + return 0 >= Ia(d >> 24 & 255, a >> 24 & 255, b >> 24 & 255) + Ia(d >> 16 & 255, a >> 16 & 255, b >> 16 & 255) + Ia(d >> 8 & 255, a >> 8 & 255, b >> 8 & 255) + Ia(d & 255, a & 255, b & 255) ? d : a; + }; + + self.Predictor12 = function (a, b, c) { + var d = b[c + 0]; + b = b[c - 1]; + return (sa((a >> 24 & 255) + (d >> 24 & 255) - (b >> 24 & 255)) << 24 | sa((a >> 16 & 255) + (d >> 16 & 255) - (b >> 16 & 255)) << 16 | sa((a >> 8 & 255) + (d >> 8 & 255) - (b >> 8 & 255)) << 8 | sa((a & 255) + (d & 255) - (b & 255))) >>> 0; + }; + + self.Predictor13 = function (a, b, c) { + var d = b[c - 1]; + a = aa(a, b[c + 0]); + return (eb(a >> 24 & 255, d >> 24 & 255) << 24 | eb(a >> 16 & 255, d >> 16 & 255) << 16 | eb(a >> 8 & 255, d >> 8 & 255) << 8 | eb(a >> 0 & 255, d >> 0 & 255)) >>> 0; + }; + + var ee = self.PredictorAdd0; + self.PredictorAdd1 = cc; + X("Predictor2", "PredictorAdd2"); + X("Predictor3", "PredictorAdd3"); + X("Predictor4", "PredictorAdd4"); + X("Predictor5", "PredictorAdd5"); + X("Predictor6", "PredictorAdd6"); + X("Predictor7", "PredictorAdd7"); + X("Predictor8", "PredictorAdd8"); + X("Predictor9", "PredictorAdd9"); + X("Predictor10", "PredictorAdd10"); + X("Predictor11", "PredictorAdd11"); + X("Predictor12", "PredictorAdd12"); + X("Predictor13", "PredictorAdd13"); + var fe = self.PredictorAdd2; + ec("ColorIndexInverseTransform", "MapARGB", "32b", function (a) { + return a >> 8 & 255; + }, function (a) { + return a; + }); + ec("VP8LColorIndexInverseTransformAlpha", "MapAlpha", "8b", function (a) { + return a; + }, function (a) { + return a >> 8 & 255; + }); + var rc = self.ColorIndexInverseTransform, + ke = self.MapARGB, + he = self.VP8LColorIndexInverseTransformAlpha, + le = self.MapAlpha, + pc, + qc = self.VP8LPredictorsAdd = []; + qc.length = 16; + (self.VP8LPredictors = []).length = 16; + (self.VP8LPredictorsAdd_C = []).length = 16; + (self.VP8LPredictors_C = []).length = 16; + var Fb, + sc, + Gb, + Hb, + xc, + uc, + bd = V(511), + cd = V(2041), + dd = V(225), + ed = V(767), + ad = 0, + Qb = cd, + mb = dd, + R = ed, + U = bd, + Ca = 0, + Ua = 1, + tc = 2, + Va = 3, + ya = 4, + Db = 5, + wc = 6, + zb = 7, + Ab = 8, + Ja = 9, + Bb = 10, + pe = [2, 3, 7], + oe = [3, 3, 11], + Dc = [280, 256, 256, 256, 40], + qe = [0, 1, 1, 1, 0], + ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + de = [24, 7, 23, 25, 40, 6, 39, 41, 22, 26, 38, 42, 56, 5, 55, 57, 21, 27, 54, 58, 37, 43, 72, 4, 71, 73, 20, 28, 53, 59, 70, 74, 36, 44, 88, 69, 75, 52, 60, 3, 87, 89, 19, 29, 86, 90, 35, 45, 68, 76, 85, 91, 51, 61, 104, 2, 103, 105, 18, 30, 102, 106, 34, 46, 84, 92, 67, 77, 101, 107, 50, 62, 120, 1, 119, 121, 83, 93, 17, 31, 100, 108, 66, 78, 118, 122, 33, 47, 117, 123, 49, 63, 99, 109, 82, 94, 0, 116, 124, 65, 79, 16, 32, 98, 110, 48, 115, 125, 81, 95, 64, 114, 126, 97, 111, 80, 113, 127, 96, 112], + me = [2954, 2956, 2958, 2962, 2970, 2986, 3018, 3082, 3212, 3468, 3980, 5004], + ie = 8, + Lb = [4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157], + Mb = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284], + oa = null, + He = [[173, 148, 140, 0], [176, 155, 140, 135, 0], [180, 157, 141, 134, 130, 0], [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]], + Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15], + Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9], + Fe = [[[[128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]], [[253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128], [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128], [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]], [[1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128], [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128], [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]], [[1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128], [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128], [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]], [[1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128], [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128], [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]], [[1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128], [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128], [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]], [[1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128], [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128], [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]], [[1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]]], [[[198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62], [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1], [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]], [[1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128], [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128], [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]], [[1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128], [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128], [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]], [[1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128], [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128], [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]], [[1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128], [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128], [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]], [[1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128], [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128], [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]], [[1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128], [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128], [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]], [[1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128], [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128], [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]]], [[[253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128], [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128], [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]], [[1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128], [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128], [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]], [[1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128], [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128], [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]], [[1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128], [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128], [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]], [[1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128], [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128], [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]], [[1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128], [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128], [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]], [[1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128], [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128], [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]], [[128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]]], [[[202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255], [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128], [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]], [[1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128], [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128], [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]], [[1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128], [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128], [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]], [[1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128], [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128], [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]], [[1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128], [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128], [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]], [[1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128], [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128], [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]], [[1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128], [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128], [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]], [[1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]]]], + Ke = [[[231, 120, 48, 89, 115, 113, 120, 152, 112], [152, 179, 64, 126, 170, 118, 46, 70, 95], [175, 69, 143, 80, 85, 82, 72, 155, 103], [56, 58, 10, 171, 218, 189, 17, 13, 152], [114, 26, 17, 163, 44, 195, 21, 10, 173], [121, 24, 80, 195, 26, 62, 44, 64, 85], [144, 71, 10, 38, 171, 213, 144, 34, 26], [170, 46, 55, 19, 136, 160, 33, 206, 71], [63, 20, 8, 114, 114, 208, 12, 9, 226], [81, 40, 11, 96, 182, 84, 29, 16, 36]], [[134, 183, 89, 137, 98, 101, 106, 165, 148], [72, 187, 100, 130, 157, 111, 32, 75, 80], [66, 102, 167, 99, 74, 62, 40, 234, 128], [41, 53, 9, 178, 241, 141, 26, 8, 107], [74, 43, 26, 146, 73, 166, 49, 23, 157], [65, 38, 105, 160, 51, 52, 31, 115, 128], [104, 79, 12, 27, 217, 255, 87, 17, 7], [87, 68, 71, 44, 114, 51, 15, 186, 23], [47, 41, 14, 110, 182, 183, 21, 17, 194], [66, 45, 25, 102, 197, 189, 23, 18, 22]], [[88, 88, 147, 150, 42, 46, 45, 196, 205], [43, 97, 183, 117, 85, 38, 35, 179, 61], [39, 53, 200, 87, 26, 21, 43, 232, 171], [56, 34, 51, 104, 114, 102, 29, 93, 77], [39, 28, 85, 171, 58, 165, 90, 98, 64], [34, 22, 116, 206, 23, 34, 43, 166, 73], [107, 54, 32, 26, 51, 1, 81, 43, 31], [68, 25, 106, 22, 64, 171, 36, 225, 114], [34, 19, 21, 102, 132, 188, 16, 76, 124], [62, 18, 78, 95, 85, 57, 50, 48, 51]], [[193, 101, 35, 159, 215, 111, 89, 46, 111], [60, 148, 31, 172, 219, 228, 21, 18, 111], [112, 113, 77, 85, 179, 255, 38, 120, 114], [40, 42, 1, 196, 245, 209, 10, 25, 109], [88, 43, 29, 140, 166, 213, 37, 43, 154], [61, 63, 30, 155, 67, 45, 68, 1, 209], [100, 80, 8, 43, 154, 1, 51, 26, 71], [142, 78, 78, 16, 255, 128, 34, 197, 171], [41, 40, 5, 102, 211, 183, 4, 1, 221], [51, 50, 17, 168, 209, 192, 23, 25, 82]], [[138, 31, 36, 171, 27, 166, 38, 44, 229], [67, 87, 58, 169, 82, 115, 26, 59, 179], [63, 59, 90, 180, 59, 166, 93, 73, 154], [40, 40, 21, 116, 143, 209, 34, 39, 175], [47, 15, 16, 183, 34, 223, 49, 45, 183], [46, 17, 33, 183, 6, 98, 15, 32, 183], [57, 46, 22, 24, 128, 1, 54, 17, 37], [65, 32, 73, 115, 28, 128, 23, 128, 205], [40, 3, 9, 115, 51, 192, 18, 6, 223], [87, 37, 9, 115, 59, 77, 64, 21, 47]], [[104, 55, 44, 218, 9, 54, 53, 130, 226], [64, 90, 70, 205, 40, 41, 23, 26, 57], [54, 57, 112, 184, 5, 41, 38, 166, 213], [30, 34, 26, 133, 152, 116, 10, 32, 134], [39, 19, 53, 221, 26, 114, 32, 73, 255], [31, 9, 65, 234, 2, 15, 1, 118, 73], [75, 32, 12, 51, 192, 255, 160, 43, 51], [88, 31, 35, 67, 102, 85, 55, 186, 85], [56, 21, 23, 111, 59, 205, 45, 37, 192], [55, 38, 70, 124, 73, 102, 1, 34, 98]], [[125, 98, 42, 88, 104, 85, 117, 175, 82], [95, 84, 53, 89, 128, 100, 113, 101, 45], [75, 79, 123, 47, 51, 128, 81, 171, 1], [57, 17, 5, 71, 102, 57, 53, 41, 49], [38, 33, 13, 121, 57, 73, 26, 1, 85], [41, 10, 67, 138, 77, 110, 90, 47, 114], [115, 21, 2, 10, 102, 255, 166, 23, 6], [101, 29, 16, 10, 85, 128, 101, 196, 26], [57, 18, 10, 102, 102, 213, 34, 20, 43], [117, 20, 15, 36, 163, 128, 68, 1, 26]], [[102, 61, 71, 37, 34, 53, 31, 243, 192], [69, 60, 71, 38, 73, 119, 28, 222, 37], [68, 45, 128, 34, 1, 47, 11, 245, 171], [62, 17, 19, 70, 146, 85, 55, 62, 70], [37, 43, 37, 154, 100, 163, 85, 160, 1], [63, 9, 92, 136, 28, 64, 32, 201, 85], [75, 15, 9, 9, 64, 255, 184, 119, 16], [86, 6, 28, 5, 64, 255, 25, 248, 1], [56, 8, 17, 132, 137, 255, 55, 116, 128], [58, 15, 20, 82, 135, 57, 26, 121, 40]], [[164, 50, 31, 137, 154, 133, 25, 35, 218], [51, 103, 44, 131, 131, 123, 31, 6, 158], [86, 40, 64, 135, 148, 224, 45, 183, 128], [22, 26, 17, 131, 240, 154, 14, 1, 209], [45, 16, 21, 91, 64, 222, 7, 1, 197], [56, 21, 39, 155, 60, 138, 23, 102, 213], [83, 12, 13, 54, 192, 255, 68, 47, 28], [85, 26, 85, 85, 128, 128, 32, 146, 171], [18, 11, 7, 63, 144, 171, 4, 4, 246], [35, 27, 10, 146, 174, 171, 12, 26, 128]], [[190, 80, 35, 99, 180, 80, 126, 54, 45], [85, 126, 47, 87, 176, 51, 41, 20, 32], [101, 75, 128, 139, 118, 146, 116, 128, 85], [56, 41, 15, 176, 236, 85, 37, 9, 62], [71, 30, 17, 119, 118, 255, 17, 18, 138], [101, 38, 60, 138, 55, 70, 43, 26, 142], [146, 36, 19, 30, 171, 255, 97, 27, 20], [138, 45, 61, 62, 219, 1, 81, 188, 64], [32, 41, 20, 117, 151, 142, 20, 21, 163], [112, 19, 12, 61, 195, 128, 48, 4, 24]]], + Ee = [[[[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255], [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255], [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255], [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255], [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255], [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]], [[[217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255], [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]], [[255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]], [[255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255], [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]], [[[186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255], [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255], [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]], [[255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]], [[255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]], [[[248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255], [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]], [[255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255], [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]], [[255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255], [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255], [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255], [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]]], + Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0], + Nc, + Y = [], + W = [], + ka = [], + Za, + fd, + Nb, + pa, + Ob, + Xc, + Tc, + Yc, + Uc, + Zc, + Vc, + $c, + Wc, + Rc, + Pc, + Sc, + Qc, + re = 1, + Cc = 2, + ia = [], + za, + vc, + fc, + Fc, + P = []; + va("UpsampleRgbLinePair", Ga, 3); + va("UpsampleBgrLinePair", Tb, 3); + va("UpsampleRgbaLinePair", wd, 4); + va("UpsampleBgraLinePair", vd, 4); + va("UpsampleArgbLinePair", ud, 4); + va("UpsampleRgba4444LinePair", td, 2); + va("UpsampleRgb565LinePair", sd, 2); + var Mf = self.UpsampleRgbLinePair, + Nf = self.UpsampleBgrLinePair, + nd = self.UpsampleRgbaLinePair, + od = self.UpsampleBgraLinePair, + pd = self.UpsampleArgbLinePair, + qd = self.UpsampleRgba4444LinePair, + Of = self.UpsampleRgb565LinePair, + Wa = 16, + Ba = 1 << Wa - 1, + ta = -227, + Eb = 482, + rd = 6, + Pf = (256 << rd) - 1, + jc = 0, + Yd = V(256), + ae = V(256), + $d = V(256), + Zd = V(256), + be = V(Eb - ta), + ce = V(Eb - ta); + la("YuvToRgbRow", Ga, 3); + la("YuvToBgrRow", Tb, 3); + la("YuvToRgbaRow", wd, 4); + la("YuvToBgraRow", vd, 4); + la("YuvToArgbRow", ud, 4); + la("YuvToRgba4444Row", td, 2); + la("YuvToRgb565Row", sd, 2); + var zd = [0, 4, 8, 12, 128, 132, 136, 140, 256, 260, 264, 268, 384, 388, 392, 396], + Ya = [0, 2, 8], + Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1], + Ne = 1; + + this.WebPDecodeRGBA = function (a, b, c, d, e) { + var f = Ua; + var g = new Cf(), + h = new Cb(); + g.ba = h; + h.S = f; + h.width = [h.width]; + h.height = [h.height]; + var k = h.width; + var l = h.height, + m = new Td(); + if (null == m || null == a) var n = 2;else x(null != m), n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null); + 0 != n ? k = 0 : (null != k && (k[0] = m.width[0]), null != l && (l[0] = m.height[0]), k = 1); + + if (k) { + h.width = h.width[0]; + h.height = h.height[0]; + null != d && (d[0] = h.width); + null != e && (e[0] = h.height); + + b: { + d = new Oa(); + e = new md(); + e.data = a; + e.w = b; + e.ha = c; + e.kd = 1; + b = [0]; + x(null != e); + a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e); + (0 == a || 7 == a) && b[0] && (a = 4); + b = a; + + if (0 == b) { + x(null != g); + d.data = e.data; + d.w = e.w + e.offset; + d.ha = e.ha - e.offset; + d.put = kc; + d.ac = gc; + d.bc = lc; + d.ma = g; + + if (e.xa) { + a = Bc(); + + if (null == a) { + g = 1; + break b; + } + + if (te(a, d)) { + b = Cd(d.width, d.height, g.Oa, g.ba); + + if (d = 0 == b) { + c: { + d = a; + + d: for (;;) { + if (null == d) { + d = 0; + break c; + } + + x(null != d.s.yc); + x(null != d.s.Ya); + x(0 < d.s.Wb); + c = d.l; + x(null != c); + e = c.ma; + x(null != e); + + if (0 != d.xb) { + d.ca = e.ba; + d.tb = e.tb; + x(null != d.ca); + + if (!hc(e.Oa, c, Va)) { + d.a = 2; + break d; + } + + if (!Ec(d, c.width)) break d; + if (c.da) break d; + (c.da || hb(d.ca.S)) && Aa(); + 11 > d.ca.S || (alert("todo:WebPInitConvertARGBToYUV"), null != d.ca.f.kb.F && Aa()); + + if (d.Pb && 0 < d.s.ua && null == d.s.vb.X && !Zb(d.s.vb, d.s.Wa.Xa)) { + d.a = 1; + break d; + } + + d.xb = 0; + } + + if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d; + e.Dc = d.Ma; + d = 1; + break c; + } + + x(0 != d.a); + d = 0; + } + + d = !d; + } + + d && (b = a.a); + } else b = a.a; + } else { + a = new Ce(); + + if (null == a) { + g = 1; + break b; + } + + a.Fa = e.na; + a.P = e.P; + a.qc = e.Sa; + + if (Kc(a, d)) { + if (b = Cd(d.width, d.height, g.Oa, g.ba), 0 == b) { + a.Aa = 0; + c = g.Oa; + e = a; + x(null != e); + + if (null != c) { + k = c.Md; + k = 0 > k ? 0 : 100 < k ? 255 : 255 * k / 100; + + if (0 < k) { + for (l = m = 0; 4 > l; ++l) { + n = e.pb[l], 12 > n.lc && (n.ia = k * Qf[0 > n.lc ? 0 : n.lc] >> 3), m |= n.ia; + } + + m && (alert("todo:VP8InitRandom"), e.ia = 1); + } + + e.Ga = c.Id; + 100 < e.Ga ? e.Ga = 100 : 0 > e.Ga && (e.Ga = 0); + } + + Me(a, d) || (b = a.a); + } + } else b = a.a; + } + + 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba)); + } + + g = b; + } + + f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y; + } else f = null; + + return f; + }; + + var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1]; + }; + + new _WebPDecoder(); + /** @license + * Copyright (c) 2017 Dominik Homberger + 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. + https://webpjs.appspot.com + WebPRiffParser dominikhlbg@gmail.com + */ + + function memcmp(data, data_off, str, size) { + for (var i = 0; i < size; i++) { + if (data[data_off + i] != str.charCodeAt(i)) return true; + } + + return false; + } + + function GetTag(data, data_off) { + var str = ""; + + for (var i = 0; i < 4; i++) { + str += String.fromCharCode(data[data_off++]); + } + + return str; + } + + function GetLE16(data, data_off) { + return data[data_off + 0] << 0 | data[data_off + 1] << 8; + } + + function GetLE24(data, data_off) { + return (data[data_off + 0] << 0 | data[data_off + 1] << 8 | data[data_off + 2] << 16) >>> 0; + } + + function GetLE32(data, data_off) { + return (data[data_off + 0] << 0 | data[data_off + 1] << 8 | data[data_off + 2] << 16 | data[data_off + 3] << 24) >>> 0; + } + + function WebPRiffParser(src, src_off) { + var imagearray = {}; + var i = 0; + var alpha_chunk = false; + var alpha_size = 0; + var alpha_offset = 0; + imagearray["frames"] = []; + if (memcmp(src, src_off, "RIFF", 4)) return; + src_off += 4; + var riff_size = GetLE32(src, src_off) + 8; + src_off += 8; + + while (src_off < src.length) { + var fourcc = GetTag(src, src_off); + src_off += 4; + var payload_size = GetLE32(src, src_off); + src_off += 4; + var payload_size_padded = payload_size + (payload_size & 1); + + switch (fourcc) { + case "VP8 ": + case "VP8L": + if (typeof imagearray["frames"][i] === "undefined") imagearray["frames"][i] = {}; + var obj = imagearray["frames"][i]; + var height = [0]; + var width = [0]; + obj["src_off"] = alpha_chunk ? alpha_offset : src_off - 8; + obj["src_size"] = alpha_size + payload_size + 8; //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height); + //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]}; + + i++; + + if (alpha_chunk) { + alpha_chunk = false; + alpha_size = 0; + alpha_offset = 0; + } + + break; + + case "VP8X": + var obj = imagearray["header"] = {}; + var feature_flags = obj["feature_flags"] = src[src_off]; + var src_off_ = src_off + 4; + var canvas_width = obj["canvas_width"] = 1 + GetLE24(src, src_off_); + src_off_ += 3; + var canvas_height = obj["canvas_height"] = 1 + GetLE24(src, src_off_); + src_off_ += 3; + break; + + case "ALPH": + alpha_chunk = true; + alpha_size = payload_size_padded + 8; + alpha_offset = src_off - 8; + break; + + case "ANIM": + var obj = imagearray["header"]; + var bgcolor = obj["bgcolor"] = GetLE32(src, src_off); + src_off_ = src_off + 4; + var loop_count = obj["loop_count"] = GetLE16(src, src_off_); + src_off_ += 2; + break; + + case "ANMF": + var offset_x = 0, + offset_y = 0, + width = 0, + height = 0, + duration = 0, + blend = 0, + dispose = 0, + temp = 0; + var obj = imagearray["frames"][i] = {}; + obj["offset_x"] = offset_x = 2 * GetLE24(src, src_off); + src_off += 3; + obj["offset_y"] = offset_y = 2 * GetLE24(src, src_off); + src_off += 3; + obj["width"] = width = 1 + GetLE24(src, src_off); + src_off += 3; + obj["height"] = height = 1 + GetLE24(src, src_off); + src_off += 3; + obj["duration"] = duration = GetLE24(src, src_off); + src_off += 3; + temp = src[src_off++]; + obj["dispose"] = dispose = temp & 1; + obj["blend"] = blend = temp >> 1 & 1; + break; + } + + if (fourcc != "ANMF") src_off += payload_size_padded; + } + + return imagearray; + } + + var height = [0]; + var width = [0]; + var pixels = []; + var webpdecoder = new _WebPDecoder(); + var response = imageData; + var imagearray = WebPRiffParser(response, 0); + imagearray["response"] = response; + imagearray["rgbaoutput"] = true; + imagearray["dataurl"] = false; + var header = imagearray["header"] ? imagearray["header"] : null; + var frames = imagearray["frames"] ? imagearray["frames"] : null; + + if (header) { + header["loop_counter"] = header["loop_count"]; + height = [header["canvas_height"]]; + width = [header["canvas_width"]]; + + for (var f = 0; f < frames.length; f++) { + if (frames[f]["blend"] == 0) { + break; + } + } + } + + var frame = frames[0]; + var rgba = webpdecoder.WebPDecodeRGBA(response, frame["src_off"], frame["src_size"], width, height); + frame["rgba"] = rgba; + frame["imgwidth"] = width[0]; + frame["imgheight"] = height[0]; + + for (var i = 0; i < width[0] * height[0] * 4; i++) { + pixels[i] = rgba[i]; + } + + this.width = width; + this.height = height; + this.data = pixels; + return this; +} + +WebPDecoder.prototype.getData = function () { + return this.data; +}; + +/** + * @license + * Copyright (c) 2019 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF webp Support PlugIn + * + * @name webp_support + * @module + */ + +(function (jsPDFAPI) { + + jsPDFAPI.processWEBP = function (imageData, index, alias, compression) { + var reader = new WebPDecoder(imageData, false); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = reader.getData(); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; +})(jsPDF.API); + +/** + * @license + * + * Copyright (c) 2021 Antti Palola, https://github.com/Pantura + * + * 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. + * ==================================================================== + */ +/** + * jsPDF RGBA array PlugIn + * @name rgba_support + * @module + */ + +(function (jsPDFAPI) { + /** + * @name processRGBA + * @function + * + * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...]. + * RGBA array data can be obtained from DOM canvas getImageData. + * @ignore + */ + + jsPDFAPI.processRGBA = function (imageData, index, alias) { + + var imagePixels = imageData.data; + var length = imagePixels.length; // jsPDF takes alpha data separately so extract that. + + var rgbOut = new Uint8Array(length / 4 * 3); + var alphaOut = new Uint8Array(length / 4); + var outIndex = 0; + var alphaIndex = 0; + + for (var i = 0; i < length; i += 4) { + var r = imagePixels[i]; + var g = imagePixels[i + 1]; + var b = imagePixels[i + 2]; + var alpha = imagePixels[i + 3]; + rgbOut[outIndex++] = r; + rgbOut[outIndex++] = g; + rgbOut[outIndex++] = b; + alphaOut[alphaIndex++] = alpha; + } + + var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut); + + var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut); + + return { + alpha: alphaData, + data: rgbData, + index: index, + alias: alias, + colorSpace: "DeviceRGB", + bitsPerComponent: 8, + width: imageData.width, + height: imageData.height + }; + }; +})(jsPDF.API); + +/** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * jsPDF setLanguage Plugin + * + * @name setLanguage + * @module + */ + +(function (jsPDFAPI) { + /** + * Add Language Tag to the generated PDF + * + * @name setLanguage + * @function + * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB'). + * @returns {jsPDF} + * @example + * var doc = new jsPDF() + * doc.text(10, 10, 'This is a test') + * doc.setLanguage("en-US") + * doc.save('english.pdf') + */ + + jsPDFAPI.setLanguage = function (langCode) { + + var langCodes = { + af: "Afrikaans", + sq: "Albanian", + ar: "Arabic (Standard)", + "ar-DZ": "Arabic (Algeria)", + "ar-BH": "Arabic (Bahrain)", + "ar-EG": "Arabic (Egypt)", + "ar-IQ": "Arabic (Iraq)", + "ar-JO": "Arabic (Jordan)", + "ar-KW": "Arabic (Kuwait)", + "ar-LB": "Arabic (Lebanon)", + "ar-LY": "Arabic (Libya)", + "ar-MA": "Arabic (Morocco)", + "ar-OM": "Arabic (Oman)", + "ar-QA": "Arabic (Qatar)", + "ar-SA": "Arabic (Saudi Arabia)", + "ar-SY": "Arabic (Syria)", + "ar-TN": "Arabic (Tunisia)", + "ar-AE": "Arabic (U.A.E.)", + "ar-YE": "Arabic (Yemen)", + an: "Aragonese", + hy: "Armenian", + as: "Assamese", + ast: "Asturian", + az: "Azerbaijani", + eu: "Basque", + be: "Belarusian", + bn: "Bengali", + bs: "Bosnian", + br: "Breton", + bg: "Bulgarian", + my: "Burmese", + ca: "Catalan", + ch: "Chamorro", + ce: "Chechen", + zh: "Chinese", + "zh-HK": "Chinese (Hong Kong)", + "zh-CN": "Chinese (PRC)", + "zh-SG": "Chinese (Singapore)", + "zh-TW": "Chinese (Taiwan)", + cv: "Chuvash", + co: "Corsican", + cr: "Cree", + hr: "Croatian", + cs: "Czech", + da: "Danish", + nl: "Dutch (Standard)", + "nl-BE": "Dutch (Belgian)", + en: "English", + "en-AU": "English (Australia)", + "en-BZ": "English (Belize)", + "en-CA": "English (Canada)", + "en-IE": "English (Ireland)", + "en-JM": "English (Jamaica)", + "en-NZ": "English (New Zealand)", + "en-PH": "English (Philippines)", + "en-ZA": "English (South Africa)", + "en-TT": "English (Trinidad & Tobago)", + "en-GB": "English (United Kingdom)", + "en-US": "English (United States)", + "en-ZW": "English (Zimbabwe)", + eo: "Esperanto", + et: "Estonian", + fo: "Faeroese", + fj: "Fijian", + fi: "Finnish", + fr: "French (Standard)", + "fr-BE": "French (Belgium)", + "fr-CA": "French (Canada)", + "fr-FR": "French (France)", + "fr-LU": "French (Luxembourg)", + "fr-MC": "French (Monaco)", + "fr-CH": "French (Switzerland)", + fy: "Frisian", + fur: "Friulian", + gd: "Gaelic (Scots)", + "gd-IE": "Gaelic (Irish)", + gl: "Galacian", + ka: "Georgian", + de: "German (Standard)", + "de-AT": "German (Austria)", + "de-DE": "German (Germany)", + "de-LI": "German (Liechtenstein)", + "de-LU": "German (Luxembourg)", + "de-CH": "German (Switzerland)", + el: "Greek", + gu: "Gujurati", + ht: "Haitian", + he: "Hebrew", + hi: "Hindi", + hu: "Hungarian", + is: "Icelandic", + id: "Indonesian", + iu: "Inuktitut", + ga: "Irish", + it: "Italian (Standard)", + "it-CH": "Italian (Switzerland)", + ja: "Japanese", + kn: "Kannada", + ks: "Kashmiri", + kk: "Kazakh", + km: "Khmer", + ky: "Kirghiz", + tlh: "Klingon", + ko: "Korean", + "ko-KP": "Korean (North Korea)", + "ko-KR": "Korean (South Korea)", + la: "Latin", + lv: "Latvian", + lt: "Lithuanian", + lb: "Luxembourgish", + mk: "North Macedonia", + ms: "Malay", + ml: "Malayalam", + mt: "Maltese", + mi: "Maori", + mr: "Marathi", + mo: "Moldavian", + nv: "Navajo", + ng: "Ndonga", + ne: "Nepali", + no: "Norwegian", + nb: "Norwegian (Bokmal)", + nn: "Norwegian (Nynorsk)", + oc: "Occitan", + or: "Oriya", + om: "Oromo", + fa: "Persian", + "fa-IR": "Persian/Iran", + pl: "Polish", + pt: "Portuguese", + "pt-BR": "Portuguese (Brazil)", + pa: "Punjabi", + "pa-IN": "Punjabi (India)", + "pa-PK": "Punjabi (Pakistan)", + qu: "Quechua", + rm: "Rhaeto-Romanic", + ro: "Romanian", + "ro-MO": "Romanian (Moldavia)", + ru: "Russian", + "ru-MO": "Russian (Moldavia)", + sz: "Sami (Lappish)", + sg: "Sango", + sa: "Sanskrit", + sc: "Sardinian", + sd: "Sindhi", + si: "Singhalese", + sr: "Serbian", + sk: "Slovak", + sl: "Slovenian", + so: "Somani", + sb: "Sorbian", + es: "Spanish", + "es-AR": "Spanish (Argentina)", + "es-BO": "Spanish (Bolivia)", + "es-CL": "Spanish (Chile)", + "es-CO": "Spanish (Colombia)", + "es-CR": "Spanish (Costa Rica)", + "es-DO": "Spanish (Dominican Republic)", + "es-EC": "Spanish (Ecuador)", + "es-SV": "Spanish (El Salvador)", + "es-GT": "Spanish (Guatemala)", + "es-HN": "Spanish (Honduras)", + "es-MX": "Spanish (Mexico)", + "es-NI": "Spanish (Nicaragua)", + "es-PA": "Spanish (Panama)", + "es-PY": "Spanish (Paraguay)", + "es-PE": "Spanish (Peru)", + "es-PR": "Spanish (Puerto Rico)", + "es-ES": "Spanish (Spain)", + "es-UY": "Spanish (Uruguay)", + "es-VE": "Spanish (Venezuela)", + sx: "Sutu", + sw: "Swahili", + sv: "Swedish", + "sv-FI": "Swedish (Finland)", + "sv-SV": "Swedish (Sweden)", + ta: "Tamil", + tt: "Tatar", + te: "Teluga", + th: "Thai", + tig: "Tigre", + ts: "Tsonga", + tn: "Tswana", + tr: "Turkish", + tk: "Turkmen", + uk: "Ukrainian", + hsb: "Upper Sorbian", + ur: "Urdu", + ve: "Venda", + vi: "Vietnamese", + vo: "Volapuk", + wa: "Walloon", + cy: "Welsh", + xh: "Xhosa", + ji: "Yiddish", + zu: "Zulu" + }; + + if (this.internal.languageSettings === undefined) { + this.internal.languageSettings = {}; + this.internal.languageSettings.isSubscribed = false; + } + + if (langCodes[langCode] !== undefined) { + this.internal.languageSettings.languageCode = langCode; + + if (this.internal.languageSettings.isSubscribed === false) { + this.internal.events.subscribe("putCatalog", function () { + this.internal.write("/Lang (" + this.internal.languageSettings.languageCode + ")"); + }); + this.internal.languageSettings.isSubscribed = true; + } + } + + return this; + }; +})(jsPDF.API); + +/** + * jsPDF split_text_to_size plugin + * + * @name split_text_to_size + * @module + */ + +(function (API) { + /** + * Returns an array of length matching length of the 'word' string, with each + * cell occupied by the width of the char in that position. + * + * @name getCharWidthsArray + * @function + * @param {string} text + * @param {Object} options + * @returns {Array} + */ + + var getCharWidthsArray = API.getCharWidthsArray = function (text, options) { + options = options || {}; + var activeFont = options.font || this.internal.getFont(); + var fontSize = options.fontSize || this.internal.getFontSize(); + var charSpace = options.charSpace || this.internal.getCharSpace(); + var widths = options.widths ? options.widths : activeFont.metadata.Unicode.widths; + var widthsFractionOf = widths.fof ? widths.fof : 1; + var kerning = options.kerning ? options.kerning : activeFont.metadata.Unicode.kerning; + var kerningFractionOf = kerning.fof ? kerning.fof : 1; + var doKerning = options.doKerning === false ? false : true; + var kerningValue = 0; + var i; + var length = text.length; + var char_code; + var prior_char_code = 0; //for kerning + + var default_char_width = widths[0] || widthsFractionOf; + var output = []; + + for (i = 0; i < length; i++) { + char_code = text.charCodeAt(i); + + if (typeof activeFont.metadata.widthOfString === "function") { + output.push((activeFont.metadata.widthOfGlyph(activeFont.metadata.characterToGlyph(char_code)) + charSpace * (1000 / fontSize) || 0) / 1000); + } else { + if (doKerning && _typeof(kerning[char_code]) === "object" && !isNaN(parseInt(kerning[char_code][prior_char_code], 10))) { + kerningValue = kerning[char_code][prior_char_code] / kerningFractionOf; + } else { + kerningValue = 0; + } + + output.push((widths[char_code] || default_char_width) / widthsFractionOf + kerningValue); + } + + prior_char_code = char_code; + } + + return output; + }; + /** + * Returns a widths of string in a given font, if the font size is set as 1 point. + * + * In other words, this is "proportional" value. For 1 unit of font size, the length + * of the string will be that much. + * + * Multiply by font size to get actual width in *points* + * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc. + * + * @name getStringUnitWidth + * @public + * @function + * @param {string} text + * @param {string} options + * @returns {number} result + */ + + + var getStringUnitWidth = API.getStringUnitWidth = function (text, options) { + options = options || {}; + var fontSize = options.fontSize || this.internal.getFontSize(); + var font = options.font || this.internal.getFont(); + var charSpace = options.charSpace || this.internal.getCharSpace(); + var result = 0; + + if (API.processArabic) { + text = API.processArabic(text); + } + + if (typeof font.metadata.widthOfString === "function") { + result = font.metadata.widthOfString(text, fontSize, charSpace) / fontSize; + } else { + result = getCharWidthsArray.apply(this, arguments).reduce(function (pv, cv) { + return pv + cv; + }, 0); + } + + return result; + }; + /** + returns array of lines + */ + + + var splitLongWord = function splitLongWord(word, widths_array, firstLineMaxLen, maxLen) { + var answer = []; // 1st, chop off the piece that can fit on the hanging line. + + var i = 0, + l = word.length, + workingLen = 0; + + while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) { + workingLen += widths_array[i]; + i++; + } // this is first line. + + + answer.push(word.slice(0, i)); // 2nd. Split the rest into maxLen pieces. + + var startOfLine = i; + workingLen = 0; + + while (i !== l) { + if (workingLen + widths_array[i] > maxLen) { + answer.push(word.slice(startOfLine, i)); + workingLen = 0; + startOfLine = i; + } + + workingLen += widths_array[i]; + i++; + } + + if (startOfLine !== i) { + answer.push(word.slice(startOfLine, i)); + } + + return answer; + }; // Note, all sizing inputs for this function must be in "font measurement units" + // By default, for PDF, it's "point". + + + var splitParagraphIntoLines = function splitParagraphIntoLines(text, maxlen, options) { + // at this time works only on Western scripts, ones with space char + // separating the words. Feel free to expand. + if (!options) { + options = {}; + } + + var line = [], + lines = [line], + line_length = options.textIndent || 0, + separator_length = 0, + current_word_length = 0, + word, + widths_array, + words = text.split(" "), + spaceCharWidth = getCharWidthsArray.apply(this, [" ", options])[0], + i, + l, + tmp, + lineIndent; + + if (options.lineIndent === -1) { + lineIndent = words[0].length + 2; + } else { + lineIndent = options.lineIndent || 0; + } + + if (lineIndent) { + var pad = Array(lineIndent).join(" "), + wrds = []; + words.map(function (wrd) { + wrd = wrd.split(/\s*\n/); + + if (wrd.length > 1) { + wrds = wrds.concat(wrd.map(function (wrd, idx) { + return (idx && wrd.length ? "\n" : "") + wrd; + })); + } else { + wrds.push(wrd[0]); + } + }); + words = wrds; + lineIndent = getStringUnitWidth.apply(this, [pad, options]); + } + + for (i = 0, l = words.length; i < l; i++) { + var force = 0; + word = words[i]; + + if (lineIndent && word[0] == "\n") { + word = word.substr(1); + force = 1; + } + + widths_array = getCharWidthsArray.apply(this, [word, options]); + current_word_length = widths_array.reduce(function (pv, cv) { + return pv + cv; + }, 0); + + if (line_length + separator_length + current_word_length > maxlen || force) { + if (current_word_length > maxlen) { + // this happens when you have space-less long URLs for example. + // we just chop these to size. We do NOT insert hiphens + tmp = splitLongWord.apply(this, [word, widths_array, maxlen - (line_length + separator_length), maxlen]); // first line we add to existing line object + + line.push(tmp.shift()); // it's ok to have extra space indicator there + // last line we make into new line object + + line = [tmp.pop()]; // lines in the middle we apped to lines object as whole lines + + while (tmp.length) { + lines.push([tmp.shift()]); // single fragment occupies whole line + } + + current_word_length = widths_array.slice(word.length - (line[0] ? line[0].length : 0)).reduce(function (pv, cv) { + return pv + cv; + }, 0); + } else { + // just put it on a new line + line = [word]; + } // now we attach new line to lines + + + lines.push(line); + line_length = current_word_length + lineIndent; + separator_length = spaceCharWidth; + } else { + line.push(word); + line_length += separator_length + current_word_length; + separator_length = spaceCharWidth; + } + } + + var postProcess; + + if (lineIndent) { + postProcess = function postProcess(ln, idx) { + return (idx ? pad : "") + ln.join(" "); + }; + } else { + postProcess = function postProcess(ln) { + return ln.join(" "); + }; + } + + return lines.map(postProcess); + }; + /** + * Splits a given string into an array of strings. Uses 'size' value + * (in measurement units declared as default for the jsPDF instance) + * and the font's "widths" and "Kerning" tables, where available, to + * determine display length of a given string for a given font. + * + * We use character's 100% of unit size (height) as width when Width + * table or other default width is not available. + * + * @name splitTextToSize + * @public + * @function + * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string. + * @param {number} size Nominal number, measured in units default to this instance of jsPDF. + * @param {Object} options Optional flags needed for chopper to do the right thing. + * @returns {Array} array Array with strings chopped to size. + */ + + + API.splitTextToSize = function (text, maxlen, options) { + + options = options || {}; + + var fsize = options.fontSize || this.internal.getFontSize(), + newOptions = function (options) { + var widths = { + 0: 1 + }, + kerning = {}; + + if (!options.widths || !options.kerning) { + var f = this.internal.getFont(options.fontName, options.fontStyle), + encoding = "Unicode"; // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE + // Actual JavaScript-native String's 16bit char codes used. + // no multi-byte logic here + + if (f.metadata[encoding]) { + return { + widths: f.metadata[encoding].widths || widths, + kerning: f.metadata[encoding].kerning || kerning + }; + } else { + return { + font: f.metadata, + fontSize: this.internal.getFontSize(), + charSpace: this.internal.getCharSpace() + }; + } + } else { + return { + widths: options.widths, + kerning: options.kerning + }; + } + }.call(this, options); // first we split on end-of-line chars + + + var paragraphs; + + if (Array.isArray(text)) { + paragraphs = text; + } else { + paragraphs = String(text).split(/\r?\n/); + } // now we convert size (max length of line) into "font size units" + // at present time, the "font size unit" is always 'point' + // 'proportional' means, "in proportion to font size" + + + var fontUnit_maxLen = 1.0 * this.internal.scaleFactor * maxlen / fsize; // at this time, fsize is always in "points" regardless of the default measurement unit of the doc. + // this may change in the future? + // until then, proportional_maxlen is likely to be in 'points' + // If first line is to be indented (shorter or longer) than maxLen + // we indicate that by using CSS-style "text-indent" option. + // here it's in font units too (which is likely 'points') + // it can be negative (which makes the first line longer than maxLen) + + newOptions.textIndent = options.textIndent ? options.textIndent * 1.0 * this.internal.scaleFactor / fsize : 0; + newOptions.lineIndent = options.lineIndent; + var i, + l, + output = []; + + for (i = 0, l = paragraphs.length; i < l; i++) { + output = output.concat(splitParagraphIntoLines.apply(this, [paragraphs[i], fontUnit_maxLen, newOptions])); + } + + return output; + }; +})(jsPDF.API); + +/** + * This file adds the standard font metrics to jsPDF. + * + * Font metrics data is reprocessed derivative of contents of + * "Font Metrics for PDF Core 14 Fonts" package, which exhibits the following copyright and license: + * + * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. + * + * This file and the 14 PostScript(R) AFM files it accompanies may be used, + * copied, and distributed for any purpose and without charge, with or without + * modification, provided that all copyright notices are retained; that the AFM + * files are not distributed without this file; that all modifications to this + * file or any of the AFM files are prominently noted in the modified file(s); + * and that this paragraph is not modified. Adobe Systems has no responsibility + * or obligation to support the use of the AFM files. + * + * @name standard_fonts_metrics + * @module + */ + +(function (API) { + + API.__fontmetrics__ = API.__fontmetrics__ || {}; + var decoded = "0123456789abcdef", + encoded = "klmnopqrstuvwxyz", + mappingUncompress = {}, + mappingCompress = {}; + + for (var i = 0; i < encoded.length; i++) { + mappingUncompress[encoded[i]] = decoded[i]; + mappingCompress[decoded[i]] = encoded[i]; + } + + var hex = function hex(value) { + return "0x" + parseInt(value, 10).toString(16); + }; + + var compress = API.__fontmetrics__.compress = function (data) { + var vals = ["{"]; + var value, keystring, valuestring, numberprefix; + + for (var key in data) { + value = data[key]; + + if (!isNaN(parseInt(key, 10))) { + key = parseInt(key, 10); + keystring = hex(key).slice(2); + keystring = keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)]; + } else { + keystring = "'" + key + "'"; + } + + if (typeof value == "number") { + if (value < 0) { + valuestring = hex(value).slice(3); + numberprefix = "-"; + } else { + valuestring = hex(value).slice(2); + numberprefix = ""; + } + + valuestring = numberprefix + valuestring.slice(0, -1) + mappingCompress[valuestring.slice(-1)]; + } else { + if (_typeof(value) === "object") { + valuestring = compress(value); + } else { + throw new Error("Don't know what to do with value type " + _typeof(value) + "."); + } + } + + vals.push(keystring + valuestring); + } + + vals.push("}"); + return vals.join(""); + }; + /** + * Uncompresses data compressed into custom, base16-like format. + * + * @public + * @function + * @param + * @returns {Type} + */ + + + var uncompress = API.__fontmetrics__.uncompress = function (data) { + if (typeof data !== "string") { + throw new Error("Invalid argument passed to uncompress."); + } + + var output = {}, + sign = 1, + stringparts, + // undef. will be [] in string mode + activeobject = output, + parentchain = [], + parent_key_pair, + keyparts = "", + valueparts = "", + key, + // undef. will be Truthy when Key is resolved. + datalen = data.length - 1, + // stripping ending } + ch; + + for (var i = 1; i < datalen; i += 1) { + // - { } ' are special. + ch = data[i]; + + if (ch == "'") { + if (stringparts) { + // end of string mode + key = stringparts.join(""); + stringparts = undefined; + } else { + // start of string mode + stringparts = []; + } + } else if (stringparts) { + stringparts.push(ch); + } else if (ch == "{") { + // start of object + parentchain.push([activeobject, key]); + activeobject = {}; + key = undefined; + } else if (ch == "}") { + // end of object + parent_key_pair = parentchain.pop(); + parent_key_pair[0][parent_key_pair[1]] = activeobject; + key = undefined; + activeobject = parent_key_pair[0]; + } else if (ch == "-") { + sign = -1; + } else { + // must be number + if (key === undefined) { + if (mappingUncompress.hasOwnProperty(ch)) { + keyparts += mappingUncompress[ch]; + key = parseInt(keyparts, 16) * sign; + sign = +1; + keyparts = ""; + } else { + keyparts += ch; + } + } else { + if (mappingUncompress.hasOwnProperty(ch)) { + valueparts += mappingUncompress[ch]; + activeobject[key] = parseInt(valueparts, 16) * sign; + sign = +1; + key = undefined; + valueparts = ""; + } else { + valueparts += ch; + } + } + } + } + + return output; + }; // encoding = 'Unicode' + // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior + // Actual 16bit char codes used. + // no multi-byte logic here + // Unicode characters to WinAnsiEncoding: + // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158} + // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts. + // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly + // as well as give strings with some (supported by these fonts) Unicode characters and + // these will be mapped to win cp1252 + // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting "Euro" glyph displayed in both cases. + + + var encodingBlock = { + codePages: ["WinAnsiEncoding"], + WinAnsiEncoding: uncompress("{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}") + }; + var encodings = { + Unicode: { + Courier: encodingBlock, + "Courier-Bold": encodingBlock, + "Courier-BoldOblique": encodingBlock, + "Courier-Oblique": encodingBlock, + Helvetica: encodingBlock, + "Helvetica-Bold": encodingBlock, + "Helvetica-BoldOblique": encodingBlock, + "Helvetica-Oblique": encodingBlock, + "Times-Roman": encodingBlock, + "Times-Bold": encodingBlock, + "Times-BoldItalic": encodingBlock, + "Times-Italic": encodingBlock // , 'Symbol' + // , 'ZapfDingbats' + + } + }; + var fontMetrics = { + Unicode: { + // all sizing numbers are n/fontMetricsFractionOf = one font size unit + // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's + // width is 476/1000 or 47.6% of its height (regardless of font size) + // At this time this value applies to "widths" and "kerning" numbers. + // char code 0 represents "default" (average) width - use it for chars missing in this table. + // key 'fof' represents the "fontMetricsFractionOf" value + "Courier-Oblique": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-BoldItalic": uncompress("{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}"), + "Helvetica-Bold": uncompress("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"), + Courier: uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Courier-BoldOblique": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-Bold": uncompress("{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}"), + Symbol: uncompress("{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}"), + Helvetica: uncompress("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}"), + "Helvetica-BoldOblique": uncompress("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"), + ZapfDingbats: uncompress("{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}"), + "Courier-Bold": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-Italic": uncompress("{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}"), + "Times-Roman": uncompress("{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}"), + "Helvetica-Oblique": uncompress("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}") + } + }; + /* + This event handler is fired when a new jsPDF object is initialized + This event handler appends metrics data to standard fonts within + that jsPDF instance. The metrics are mapped over Unicode character + codes, NOT CIDs or other codes matching the StandardEncoding table of the + standard PDF fonts. + Future: + Also included is the encoding maping table, converting Unicode (UCS-2, UTF-16) + char codes to StandardEncoding character codes. The encoding table is to be used + somewhere around "pdfEscape" call. + */ + + API.events.push(["addFont", function (data) { + var font = data.font; + var metrics = fontMetrics["Unicode"][font.postScriptName]; + + if (metrics) { + font.metadata["Unicode"] = {}; + font.metadata["Unicode"].widths = metrics.widths; + font.metadata["Unicode"].kerning = metrics.kerning; + } + + var encodingBlock = encodings["Unicode"][font.postScriptName]; + + if (encodingBlock) { + font.metadata["Unicode"].encoding = encodingBlock; + font.encoding = encodingBlock.codePages[0]; + } + }]); // end of adding event handler +})(jsPDF.API); + +/** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * @name ttfsupport + * @module + */ + +(function (jsPDF) { + + var binaryStringToUint8Array = function binaryStringToUint8Array(binary_string) { + var len = binary_string.length; + var bytes = new Uint8Array(len); + + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + + return bytes; + }; + + var addFont = function addFont(font, file) { + // eslint-disable-next-line no-control-regex + if (/^\x00\x01\x00\x00/.test(file)) { + file = binaryStringToUint8Array(file); + } else { + file = binaryStringToUint8Array(atob(file)); + } + + font.metadata = jsPDF.API.TTFFont.open(file); + font.metadata.Unicode = font.metadata.Unicode || { + encoding: {}, + kerning: {}, + widths: [] + }; + font.metadata.glyIdsUsed = [0]; + }; + + jsPDF.API.events.push(["addFont", function (data) { + var file = undefined; + var font = data.font; + var instance = data.instance; + + if (font.isStandardFont) { + return; + } + + if (typeof instance !== "undefined") { + if (instance.existsFileInVFS(font.postScriptName) === false) { + file = instance.loadFile(font.postScriptName); + } else { + file = instance.getFileFromVFS(font.postScriptName); + } + + if (typeof file !== "string") { + throw new Error("Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('" + font.postScriptName + "')."); + } + + addFont(font, file); + } else { + throw new Error("Font does not exist in vFS, import fonts or remove declaration doc.addFont('" + font.postScriptName + "')."); + } + }]); // end of adding event handler +})(jsPDF); + +/** @license + * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems + * + * 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. + * ==================================================================== + */ +/** + * jsPDF SVG plugin + * + * @name svg + * @module + */ + +(function (jsPDFAPI) { + + function loadCanvg() { + return function () { + if (globalObject["canvg"]) { + return Promise.resolve(globalObject["canvg"]); + } + + return import('canvg'); + }().catch(function (e) { + return Promise.reject(new Error("Could not load canvg: " + e)); + }).then(function (canvg) { + return canvg.default ? canvg.default : canvg; + }); + } + /** + * Parses SVG XML and saves it as image into the PDF. + * + * Depends on canvas-element and canvg + * + * @name addSvgAsImage + * @public + * @function + * @param {string} SVG-Data as Text + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} width of SVG-Image (in units declared at inception of PDF document) + * @param {number} height of SVG-Image (in units declared at inception of PDF document) + * @param {string} alias of SVG-Image (if used multiple times) + * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW' + * @param {number} rotation of the image in degrees (0-359) + * + * @returns jsPDF jsPDF-instance + */ + + + jsPDFAPI.addSvgAsImage = function (svg, x, y, w, h, alias, compression, rotation) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.addSvgAsImage: Invalid coordinates", arguments); + throw new Error("Invalid coordinates passed to jsPDF.addSvgAsImage"); + } + + if (isNaN(w) || isNaN(h)) { + console.error("jsPDF.addSvgAsImage: Invalid measurements", arguments); + throw new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage"); + } + + var canvas = document.createElement("canvas"); + canvas.width = w; + canvas.height = h; + var ctx = canvas.getContext("2d"); + ctx.fillStyle = "#fff"; /// set white fill style + + ctx.fillRect(0, 0, canvas.width, canvas.height); + var options = { + ignoreMouse: true, + ignoreAnimation: true, + ignoreDimensions: true + }; + var doc = this; + return loadCanvg().then(function (canvg) { + return canvg.fromString(ctx, svg, options); + }, function () { + return Promise.reject(new Error("Could not load canvg.")); + }).then(function (instance) { + return instance.render(options); + }).then(function () { + doc.addImage(canvas.toDataURL("image/jpeg", 1.0), x, y, w, h, compression, rotation); + }); + }; +})(jsPDF.API); + +/** + * @license + * ==================================================================== + * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br + * + * 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. + * ==================================================================== + */ +/** + * jsPDF total_pages plugin + * @name total_pages + * @module + */ + +(function (jsPDFAPI) { + /** + * @name putTotalPages + * @function + * @param {string} pageExpression Regular Expression + * @returns {jsPDF} jsPDF-instance + */ + + jsPDFAPI.putTotalPages = function (pageExpression) { + + var replaceExpression; + var totalNumberOfPages = 0; + + if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) { + replaceExpression = new RegExp(pageExpression, "g"); + totalNumberOfPages = this.internal.getNumberOfPages(); + } else { + replaceExpression = new RegExp(this.pdfEscape16(pageExpression, this.internal.getFont()), "g"); + totalNumberOfPages = this.pdfEscape16(this.internal.getNumberOfPages() + "", this.internal.getFont()); + } + + for (var n = 1; n <= this.internal.getNumberOfPages(); n++) { + for (var i = 0; i < this.internal.pages[n].length; i++) { + this.internal.pages[n][i] = this.internal.pages[n][i].replace(replaceExpression, totalNumberOfPages); + } + } + + return this; + }; +})(jsPDF.API); + +/** + * Adds the ability to set ViewerPreferences and by thus + * controlling the way the document is to be presented on the + * screen or in print. + * @name viewerpreferences + * @module + */ + +(function (jsPDFAPI) { + /** + * Set the ViewerPreferences of the generated PDF + * + * @name viewerPreferences + * @function + * @public + * @param {Object} options Array with the ViewerPreferences
    + * Example: doc.viewerPreferences({"FitWindow":true});
    + *
    + * You can set following preferences:
    + *
    + * HideToolbar (boolean)
    + * Default value: false
    + *
    + * HideMenubar (boolean)
    + * Default value: false.
    + *
    + * HideWindowUI (boolean)
    + * Default value: false.
    + *
    + * FitWindow (boolean)
    + * Default value: false.
    + *
    + * CenterWindow (boolean)
    + * Default value: false
    + *
    + * DisplayDocTitle (boolean)
    + * Default value: false.
    + *
    + * NonFullScreenPageMode (string)
    + * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    + * Default value: UseNone
    + *
    + * Direction (string)
    + * Possible values: L2R, R2L
    + * Default value: L2R.
    + *
    + * ViewArea (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox.
    + *
    + * ViewClip (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox
    + *
    + * PrintArea (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox
    + *
    + * PrintClip (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox.
    + *
    + * PrintScaling (string)
    + * Possible values: AppDefault, None
    + * Default value: AppDefault.
    + *
    + * Duplex (string)
    + * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge + * Default value: none
    + *
    + * PickTrayByPDFSize (boolean)
    + * Default value: false
    + *
    + * PrintPageRange (Array)
    + * Example: [[1,5], [7,9]]
    + * Default value: as defined by PDF viewer application
    + *
    + * NumCopies (Number)
    + * Possible values: 1, 2, 3, 4, 5
    + * Default value: 1
    + *
    + * For more information see the PDF Reference, sixth edition on Page 577 + * @param {boolean} doReset True to reset the settings + * @function + * @returns jsPDF jsPDF-instance + * @example + * var doc = new jsPDF() + * doc.text('This is a test', 10, 10) + * doc.viewerPreferences({'FitWindow': true}, true) + * doc.save("viewerPreferences.pdf") + * + * // Example printing 10 copies, using cropbox, and hiding UI. + * doc.viewerPreferences({ + * 'HideWindowUI': true, + * 'PrintArea': 'CropBox', + * 'NumCopies': 10 + * }) + */ + + jsPDFAPI.viewerPreferences = function (options, doReset) { + options = options || {}; + doReset = doReset || false; + var configuration; + var configurationTemplate = { + HideToolbar: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + HideMenubar: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + HideWindowUI: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + FitWindow: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + CenterWindow: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + DisplayDocTitle: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.4 + }, + NonFullScreenPageMode: { + defaultValue: "UseNone", + value: "UseNone", + type: "name", + explicitSet: false, + valueSet: ["UseNone", "UseOutlines", "UseThumbs", "UseOC"], + pdfVersion: 1.3 + }, + Direction: { + defaultValue: "L2R", + value: "L2R", + type: "name", + explicitSet: false, + valueSet: ["L2R", "R2L"], + pdfVersion: 1.3 + }, + ViewArea: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + ViewClip: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintArea: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintClip: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintScaling: { + defaultValue: "AppDefault", + value: "AppDefault", + type: "name", + explicitSet: false, + valueSet: ["AppDefault", "None"], + pdfVersion: 1.6 + }, + Duplex: { + defaultValue: "", + value: "none", + type: "name", + explicitSet: false, + valueSet: ["Simplex", "DuplexFlipShortEdge", "DuplexFlipLongEdge", "none"], + pdfVersion: 1.7 + }, + PickTrayByPDFSize: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.7 + }, + PrintPageRange: { + defaultValue: "", + value: "", + type: "array", + explicitSet: false, + valueSet: null, + pdfVersion: 1.7 + }, + NumCopies: { + defaultValue: 1, + value: 1, + type: "integer", + explicitSet: false, + valueSet: null, + pdfVersion: 1.7 + } + }; + var configurationKeys = Object.keys(configurationTemplate); + var rangeArray = []; + var i = 0; + var j = 0; + var k = 0; + var isValid; + var method; + var value; + + function arrayContainsElement(array, element) { + var iterator; + var result = false; + + for (iterator = 0; iterator < array.length; iterator += 1) { + if (array[iterator] === element) { + result = true; + } + } + + return result; + } + + if (this.internal.viewerpreferences === undefined) { + this.internal.viewerpreferences = {}; + this.internal.viewerpreferences.configuration = JSON.parse(JSON.stringify(configurationTemplate)); + this.internal.viewerpreferences.isSubscribed = false; + } + + configuration = this.internal.viewerpreferences.configuration; + + if (options === "reset" || doReset === true) { + var len = configurationKeys.length; + + for (k = 0; k < len; k += 1) { + configuration[configurationKeys[k]].value = configuration[configurationKeys[k]].defaultValue; + configuration[configurationKeys[k]].explicitSet = false; + } + } + + if (_typeof(options) === "object") { + for (method in options) { + value = options[method]; + + if (arrayContainsElement(configurationKeys, method) && value !== undefined) { + if (configuration[method].type === "boolean" && typeof value === "boolean") { + configuration[method].value = value; + } else if (configuration[method].type === "name" && arrayContainsElement(configuration[method].valueSet, value)) { + configuration[method].value = value; + } else if (configuration[method].type === "integer" && Number.isInteger(value)) { + configuration[method].value = value; + } else if (configuration[method].type === "array") { + for (i = 0; i < value.length; i += 1) { + isValid = true; + + if (value[i].length === 1 && typeof value[i][0] === "number") { + rangeArray.push(String(value[i] - 1)); + } else if (value[i].length > 1) { + for (j = 0; j < value[i].length; j += 1) { + if (typeof value[i][j] !== "number") { + isValid = false; + } + } + + if (isValid === true) { + rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(" ")); + } + } + } + + configuration[method].value = "[" + rangeArray.join(" ") + "]"; + } else { + configuration[method].value = configuration[method].defaultValue; + } + + configuration[method].explicitSet = true; + } + } + } + + if (this.internal.viewerpreferences.isSubscribed === false) { + this.internal.events.subscribe("putCatalog", function () { + var pdfDict = []; + var vPref; + + for (vPref in configuration) { + if (configuration[vPref].explicitSet === true) { + if (configuration[vPref].type === "name") { + pdfDict.push("/" + vPref + " /" + configuration[vPref].value); + } else { + pdfDict.push("/" + vPref + " " + configuration[vPref].value); + } + } + } + + if (pdfDict.length !== 0) { + this.internal.write("/ViewerPreferences\n<<\n" + pdfDict.join("\n") + "\n>>"); + } + }); + this.internal.viewerpreferences.isSubscribed = true; + } + + this.internal.viewerpreferences.configuration = configuration; + return this; + }; +})(jsPDF.API); + +/** ==================================================================== + * @license + * jsPDF XMP metadata plugin + * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi + * + * 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. + * ==================================================================== + */ +/** + * @name xmp_metadata + * @module + */ + +(function (jsPDFAPI) { + + var postPutResources = function postPutResources() { + var xmpmeta_beginning = ''; + var rdf_beginning = ''; + var rdf_ending = ""; + var xmpmeta_ending = ""; + var utf8_xmpmeta_beginning = unescape(encodeURIComponent(xmpmeta_beginning)); + var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning)); + var utf8_metadata = unescape(encodeURIComponent(this.internal.__metadata__.metadata)); + var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending)); + var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending)); + var total_len = utf8_rdf_beginning.length + utf8_metadata.length + utf8_rdf_ending.length + utf8_xmpmeta_beginning.length + utf8_xmpmeta_ending.length; + this.internal.__metadata__.metadata_object_number = this.internal.newObject(); + this.internal.write("<< /Type /Metadata /Subtype /XML /Length " + total_len + " >>"); + this.internal.write("stream"); + this.internal.write(utf8_xmpmeta_beginning + utf8_rdf_beginning + utf8_metadata + utf8_rdf_ending + utf8_xmpmeta_ending); + this.internal.write("endstream"); + this.internal.write("endobj"); + }; + + var putCatalog = function putCatalog() { + if (this.internal.__metadata__.metadata_object_number) { + this.internal.write("/Metadata " + this.internal.__metadata__.metadata_object_number + " 0 R"); + } + }; + /** + * Adds XMP formatted metadata to PDF + * + * @name addMetadata + * @function + * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters "<", ">" or "&", those characters should be written using XML entities. + * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash. + * @returns {jsPDF} jsPDF-instance + */ + + + jsPDFAPI.addMetadata = function (metadata, namespaceuri) { + if (typeof this.internal.__metadata__ === "undefined") { + this.internal.__metadata__ = { + metadata: metadata, + namespaceuri: namespaceuri || "http://jspdf.default.namespaceuri/" + }; + this.internal.events.subscribe("putCatalog", putCatalog); + this.internal.events.subscribe("postPutResources", postPutResources); + } + + return this; + }; +})(jsPDF.API); + +/** + * @name utf8 + * @module + */ + +(function (jsPDF) { + + var jsPDFAPI = jsPDF.API; + /***************************************************************************************************/ + + /* function : pdfEscape16 */ + + /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */ + + /* the corresponding glyph id and width, and then adding padding to the string. */ + + /***************************************************************************************************/ + + var pdfEscape16 = jsPDFAPI.pdfEscape16 = function (text, font) { + var widths = font.metadata.Unicode.widths; + var padz = ["", "0", "00", "000", "0000"]; + var ar = [""]; + + for (var i = 0, l = text.length, t; i < l; ++i) { + t = font.metadata.characterToGlyph(text.charCodeAt(i)); + font.metadata.glyIdsUsed.push(t); + font.metadata.toUnicode[t] = text.charCodeAt(i); + + if (widths.indexOf(t) == -1) { + widths.push(t); + widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]); + } + + if (t == "0") { + //Spaces are not allowed in cmap. + return ar.join(""); + } else { + t = t.toString(16); + ar.push(padz[4 - t.length], t); + } + } + + return ar.join(""); + }; + + var toUnicodeCmap = function toUnicodeCmap(map) { + var code, codes, range, unicode, unicodeMap, _i, _len; + + unicodeMap = "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange"; + codes = Object.keys(map).sort(function (a, b) { + return a - b; + }); + range = []; + + for (_i = 0, _len = codes.length; _i < _len; _i++) { + code = codes[_i]; + + if (range.length >= 100) { + unicodeMap += "\n" + range.length + " beginbfchar\n" + range.join("\n") + "\nendbfchar"; + range = []; + } + + if (map[code] !== undefined && map[code] !== null && typeof map[code].toString === "function") { + unicode = ("0000" + map[code].toString(16)).slice(-4); + code = ("0000" + (+code).toString(16)).slice(-4); + range.push("<" + code + "><" + unicode + ">"); + } + } + + if (range.length) { + unicodeMap += "\n" + range.length + " beginbfchar\n" + range.join("\n") + "\nendbfchar\n"; + } + + unicodeMap += "endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; + return unicodeMap; + }; + + var identityHFunction = function identityHFunction(options) { + var font = options.font; + var out = options.out; + var newObject = options.newObject; + var putStream = options.putStream; + + if (font.metadata instanceof jsPDF.API.TTFFont && font.encoding === "Identity-H") { + //Tag with Identity-H + var widths = font.metadata.Unicode.widths; + var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1); + var pdfOutput = data; + var pdfOutput2 = ""; + + for (var i = 0; i < pdfOutput.length; i++) { + pdfOutput2 += String.fromCharCode(pdfOutput[i]); + } + + var fontTable = newObject(); + putStream({ + data: pdfOutput2, + addLength1: true, + objectId: fontTable + }); + out("endobj"); + var cmap = newObject(); + var cmapData = toUnicodeCmap(font.metadata.toUnicode); + putStream({ + data: cmapData, + addLength1: true, + objectId: cmap + }); + out("endobj"); + var fontDescriptor = newObject(); + out("<<"); + out("/Type /FontDescriptor"); + out("/FontName /" + toPDFName(font.fontName)); + out("/FontFile2 " + fontTable + " 0 R"); + out("/FontBBox " + jsPDF.API.PDFObject.convert(font.metadata.bbox)); + out("/Flags " + font.metadata.flags); + out("/StemV " + font.metadata.stemV); + out("/ItalicAngle " + font.metadata.italicAngle); + out("/Ascent " + font.metadata.ascender); + out("/Descent " + font.metadata.decender); + out("/CapHeight " + font.metadata.capHeight); + out(">>"); + out("endobj"); + var DescendantFont = newObject(); + out("<<"); + out("/Type /Font"); + out("/BaseFont /" + toPDFName(font.fontName)); + out("/FontDescriptor " + fontDescriptor + " 0 R"); + out("/W " + jsPDF.API.PDFObject.convert(widths)); + out("/CIDToGIDMap /Identity"); + out("/DW 1000"); + out("/Subtype /CIDFontType2"); + out("/CIDSystemInfo"); + out("<<"); + out("/Supplement 0"); + out("/Registry (Adobe)"); + out("/Ordering (" + font.encoding + ")"); + out(">>"); + out(">>"); + out("endobj"); + font.objectNumber = newObject(); + out("<<"); + out("/Type /Font"); + out("/Subtype /Type0"); + out("/ToUnicode " + cmap + " 0 R"); + out("/BaseFont /" + toPDFName(font.fontName)); + out("/Encoding /" + font.encoding); + out("/DescendantFonts [" + DescendantFont + " 0 R]"); + out(">>"); + out("endobj"); + font.isAlreadyPutted = true; + } + }; + + jsPDFAPI.events.push(["putFont", function (args) { + identityHFunction(args); + }]); + + var winAnsiEncodingFunction = function winAnsiEncodingFunction(options) { + var font = options.font; + var out = options.out; + var newObject = options.newObject; + var putStream = options.putStream; + + if (font.metadata instanceof jsPDF.API.TTFFont && font.encoding === "WinAnsiEncoding") { + //Tag with WinAnsi encoding + var data = font.metadata.rawData; + var pdfOutput = data; + var pdfOutput2 = ""; + + for (var i = 0; i < pdfOutput.length; i++) { + pdfOutput2 += String.fromCharCode(pdfOutput[i]); + } + + var fontTable = newObject(); + putStream({ + data: pdfOutput2, + addLength1: true, + objectId: fontTable + }); + out("endobj"); + var cmap = newObject(); + var cmapData = toUnicodeCmap(font.metadata.toUnicode); + putStream({ + data: cmapData, + addLength1: true, + objectId: cmap + }); + out("endobj"); + var fontDescriptor = newObject(); + out("<<"); + out("/Descent " + font.metadata.decender); + out("/CapHeight " + font.metadata.capHeight); + out("/StemV " + font.metadata.stemV); + out("/Type /FontDescriptor"); + out("/FontFile2 " + fontTable + " 0 R"); + out("/Flags 96"); + out("/FontBBox " + jsPDF.API.PDFObject.convert(font.metadata.bbox)); + out("/FontName /" + toPDFName(font.fontName)); + out("/ItalicAngle " + font.metadata.italicAngle); + out("/Ascent " + font.metadata.ascender); + out(">>"); + out("endobj"); + font.objectNumber = newObject(); + + for (var j = 0; j < font.metadata.hmtx.widths.length; j++) { + font.metadata.hmtx.widths[j] = parseInt(font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)); //Change the width of Em units to Point units. + } + + out("<>"); + out("endobj"); + font.isAlreadyPutted = true; + } + }; + + jsPDFAPI.events.push(["putFont", function (args) { + winAnsiEncodingFunction(args); + }]); + + var utf8TextFunction = function utf8TextFunction(args) { + var text = args.text || ""; + var x = args.x; + var y = args.y; + var options = args.options || {}; + var mutex = args.mutex || {}; + var pdfEscape = mutex.pdfEscape; + var activeFontKey = mutex.activeFontKey; + var fonts = mutex.fonts; + var key = activeFontKey; + var str = "", + s = 0, + cmapConfirm; + var strText = ""; + var encoding = fonts[key].encoding; + + if (fonts[key].encoding !== "Identity-H") { + return { + text: text, + x: x, + y: y, + options: options, + mutex: mutex + }; + } + + strText = text; + key = activeFontKey; + + if (Array.isArray(text)) { + strText = text[0]; + } + + for (s = 0; s < strText.length; s += 1) { + if (fonts[key].metadata.hasOwnProperty("cmap")) { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; + /* + if (Object.prototype.toString.call(text) === '[object Array]') { + var i = 0; + // for (i = 0; i < text.length; i += 1) { + if (Object.prototype.toString.call(text[s]) === '[object Array]') { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id + } else { + } + //} + } else { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id + }*/ + } + + if (!cmapConfirm) { + if (strText[s].charCodeAt(0) < 256 && fonts[key].metadata.hasOwnProperty("Unicode")) { + str += strText[s]; + } else { + str += ""; + } + } else { + str += strText[s]; + } + } + + var result = ""; + + if (parseInt(key.slice(1)) < 14 || encoding === "WinAnsiEncoding") { + //For the default 13 font + result = pdfEscape(str, key).split("").map(function (cv) { + return cv.charCodeAt(0).toString(16); + }).join(""); + } else if (encoding === "Identity-H") { + result = pdfEscape16(str, fonts[key]); + } + + mutex.isHex = true; + return { + text: result, + x: x, + y: y, + options: options, + mutex: mutex + }; + }; + + var utf8EscapeFunction = function utf8EscapeFunction(parms) { + var text = parms.text || "", + x = parms.x, + y = parms.y, + options = parms.options, + mutex = parms.mutex; + var tmpText = []; + var args = { + text: text, + x: x, + y: y, + options: options, + mutex: mutex + }; + + if (Array.isArray(text)) { + var i = 0; + + for (i = 0; i < text.length; i += 1) { + if (Array.isArray(text[i])) { + if (text[i].length === 3) { + tmpText.push([utf8TextFunction(Object.assign({}, args, { + text: text[i][0] + })).text, text[i][1], text[i][2]]); + } else { + tmpText.push(utf8TextFunction(Object.assign({}, args, { + text: text[i] + })).text); + } + } else { + tmpText.push(utf8TextFunction(Object.assign({}, args, { + text: text[i] + })).text); + } + } + + parms.text = tmpText; + } else { + parms.text = utf8TextFunction(Object.assign({}, args, { + text: text + })).text; + } + }; + + jsPDFAPI.events.push(["postProcessText", utf8EscapeFunction]); +})(jsPDF); + +/** + * @license + * jsPDF virtual FileSystem functionality + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ +/** + * Use the vFS to handle files + * + * @name vFS + * @module + */ + +(function (jsPDFAPI) { + + var _initializeVFS = function _initializeVFS() { + if (typeof this.internal.vFS === "undefined") { + this.internal.vFS = {}; + } + + return true; + }; + /** + * Check if the file exists in the vFS + * + * @name existsFileInVFS + * @function + * @param {string} Possible filename in the vFS. + * @returns {boolean} + * @example + * doc.existsFileInVFS("someFile.txt"); + */ + + + jsPDFAPI.existsFileInVFS = function (filename) { + _initializeVFS.call(this); + + return typeof this.internal.vFS[filename] !== "undefined"; + }; + /** + * Add a file to the vFS + * + * @name addFileToVFS + * @function + * @param {string} filename The name of the file which should be added. + * @param {string} filecontent The content of the file. + * @returns {jsPDF} + * @example + * doc.addFileToVFS("someFile.txt", "BADFACE1"); + */ + + + jsPDFAPI.addFileToVFS = function (filename, filecontent) { + _initializeVFS.call(this); + + this.internal.vFS[filename] = filecontent; + return this; + }; + /** + * Get the file from the vFS + * + * @name getFileFromVFS + * @function + * @param {string} The name of the file which gets requested. + * @returns {string} + * @example + * doc.getFileFromVFS("someFile.txt"); + */ + + + jsPDFAPI.getFileFromVFS = function (filename) { + _initializeVFS.call(this); + + if (typeof this.internal.vFS[filename] !== "undefined") { + return this.internal.vFS[filename]; + } + + return null; + }; +})(jsPDF.API); + +/** + * @license + * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis) + * MIT License + */ + +(function (jsPDF) { + /** + * Table of Unicode types. + * + * Generated by: + * + * var bidi = require("./bidi/index"); + * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)). + * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)). + * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256)); + * + * for( var i = 0; i < bidi_accumulate.length; i++) { + * if(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON') + * bidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined + * } + * var bidiAccumulateStr = 'return [ "' + bidi_accumulate.toString().replace(/,/g, '", "') + '" ];'; + * require("fs").writeFile('unicode-types.js', bidiAccumulateStr); + * + * Based on: + * https://github.com/mathiasbynens/unicode-8.0.0 + */ + + var bidiUnicodeTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "N", "N", "ET", "ET", "ET", "N", "N", "N", "N", "N", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "N", "ET", "ET", "ET", "ET", "N", "N", "N", "N", "L", "N", "N", "BN", "N", "N", "ET", "ET", "EN", "EN", "N", "L", "N", "N", "N", "EN", "L", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "N", "N", "N", "N", "N", "ET", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "R", "NSM", "R", "NSM", "NSM", "R", "NSM", "NSM", "R", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "N", "N", "N", "N", "N", "R", "R", "R", "R", "R", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "AN", "AN", "AN", "AN", "AN", "AN", "N", "N", "AL", "ET", "ET", "AL", "CS", "AL", "N", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "N", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "N", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "R", "R", "N", "N", "N", "N", "R", "N", "N", "N", "N", "N", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "BN", "BN", "BN", "L", "R", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "WS", "B", "LRE", "RLE", "PDF", "LRO", "RLO", "CS", "ET", "ET", "ET", "ET", "ET", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "CS", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "WS", "BN", "BN", "BN", "BN", "BN", "N", "LRI", "RLI", "FSI", "PDI", "BN", "BN", "BN", "BN", "BN", "BN", "EN", "L", "N", "N", "EN", "EN", "EN", "EN", "EN", "EN", "ES", "ES", "N", "N", "N", "L", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "ES", "ES", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "R", "NSM", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "ES", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "N", "R", "R", "R", "R", "R", "N", "R", "N", "R", "R", "N", "R", "R", "N", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "CS", "N", "CS", "N", "N", "CS", "N", "N", "N", "N", "N", "N", "N", "N", "N", "ET", "N", "N", "ES", "ES", "N", "N", "N", "N", "N", "ET", "ET", "N", "N", "N", "N", "N", "AL", "AL", "AL", "AL", "AL", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "N", "N", "BN", "N", "N", "N", "ET", "ET", "ET", "N", "N", "N", "N", "N", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "N", "N", "N", "ET", "ET", "N", "N", "N", "ET", "ET", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N"]; + /** + * Unicode Bidi algorithm compliant Bidi engine. + * For reference see http://unicode.org/reports/tr9/ + */ + + /** + * constructor ( options ) + * + * Initializes Bidi engine + * + * @param {Object} See 'setOptions' below for detailed description. + * options are cashed between invocation of 'doBidiReorder' method + * + * sample usage pattern of BidiEngine: + * var opt = { + * isInputVisual: true, + * isInputRtl: false, + * isOutputVisual: false, + * isOutputRtl: false, + * isSymmetricSwapping: true + * } + * var sourceToTarget = [], levels = []; + * var bidiEng = Globalize.bidiEngine(opt); + * var src = "text string to be reordered"; + * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels); + */ + + jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function (options) { + var _UNICODE_TYPES = _bidiUnicodeTypes; + var _STATE_TABLE_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]]; + var _STATE_TABLE_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]]; + var _TYPE_NAMES_MAP = { + L: 0, + R: 1, + EN: 2, + AN: 3, + N: 4, + B: 5, + S: 6 + }; + var _UNICODE_RANGES_MAP = { + 0: 0, + 5: 1, + 6: 2, + 7: 3, + 0x20: 4, + 0xfb: 5, + 0xfe: 6, + 0xff: 7 + }; + var _SWAP_TABLE = ["(", ")", "(", "<", ">", "<", "[", "]", "[", "{", "}", "{", "\xAB", "\xBB", "\xAB", "\u2039", "\u203A", "\u2039", "\u2045", "\u2046", "\u2045", "\u207D", "\u207E", "\u207D", "\u208D", "\u208E", "\u208D", "\u2264", "\u2265", "\u2264", "\u2329", "\u232A", "\u2329", "\uFE59", "\uFE5A", "\uFE59", "\uFE5B", "\uFE5C", "\uFE5B", "\uFE5D", "\uFE5E", "\uFE5D", "\uFE64", "\uFE65", "\uFE64"]; + + var _LTR_RANGES_REG_EXPR = new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/); + + var _lastArabic = false, + _hasUbatB, + _hasUbatS, + DIR_LTR = 0, + DIR_RTL = 1, + _isInVisual, + _isInRtl, + _isOutVisual, + _isOutRtl, + _isSymmetricSwapping, + _dir = DIR_LTR; + + this.__bidiEngine__ = {}; + + var _init = function _init(text, sourceToTargetMap) { + if (sourceToTargetMap) { + for (var i = 0; i < text.length; i++) { + sourceToTargetMap[i] = i; + } + } + + if (_isInRtl === undefined) { + _isInRtl = _isContextualDirRtl(text); + } + + if (_isOutRtl === undefined) { + _isOutRtl = _isContextualDirRtl(text); + } + }; // for reference see 3.2 in http://unicode.org/reports/tr9/ + // + + + var _getCharType = function _getCharType(ch) { + var charCode = ch.charCodeAt(), + range = charCode >> 8, + rangeIdx = _UNICODE_RANGES_MAP[range]; + + if (rangeIdx !== undefined) { + return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)]; + } else if (range === 0xfc || range === 0xfd) { + return "AL"; + } else if (_LTR_RANGES_REG_EXPR.test(range)) { + //unlikely case + return "L"; + } else if (range === 8) { + // even less likely + return "R"; + } + + return "N"; //undefined type, mark as neutral + }; + + var _isContextualDirRtl = function _isContextualDirRtl(text) { + for (var i = 0, charType; i < text.length; i++) { + charType = _getCharType(text.charAt(i)); + + if (charType === "L") { + return false; + } else if (charType === "R") { + return true; + } + } + + return false; + }; // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/ + // + + + var _resolveCharType = function _resolveCharType(chars, types, resolvedTypes, index) { + var cType = types[index], + wType, + nType, + i, + len; + + switch (cType) { + case "L": + case "R": + _lastArabic = false; + break; + + case "N": + case "AN": + break; + + case "EN": + if (_lastArabic) { + cType = "AN"; + } + + break; + + case "AL": + _lastArabic = true; + cType = "R"; + break; + + case "WS": + cType = "N"; + break; + + case "CS": + if (index < 1 || index + 1 >= types.length || (wType = resolvedTypes[index - 1]) !== "EN" && wType !== "AN" || (nType = types[index + 1]) !== "EN" && nType !== "AN") { + cType = "N"; + } else if (_lastArabic) { + nType = "AN"; + } + + cType = nType === wType ? nType : "N"; + break; + + case "ES": + wType = index > 0 ? resolvedTypes[index - 1] : "B"; + cType = wType === "EN" && index + 1 < types.length && types[index + 1] === "EN" ? "EN" : "N"; + break; + + case "ET": + if (index > 0 && resolvedTypes[index - 1] === "EN") { + cType = "EN"; + break; + } else if (_lastArabic) { + cType = "N"; + break; + } + + i = index + 1; + len = types.length; + + while (i < len && types[i] === "ET") { + i++; + } + + if (i < len && types[i] === "EN") { + cType = "EN"; + } else { + cType = "N"; + } + + break; + + case "NSM": + if (_isInVisual && !_isInRtl) { + //V->L + len = types.length; + i = index + 1; + + while (i < len && types[i] === "NSM") { + i++; + } + + if (i < len) { + var c = chars[index]; + var rtlCandidate = c >= 0x0591 && c <= 0x08ff || c === 0xfb1e; + wType = types[i]; + + if (rtlCandidate && (wType === "R" || wType === "AL")) { + cType = "R"; + break; + } + } + } + + if (index < 1 || (wType = types[index - 1]) === "B") { + cType = "N"; + } else { + cType = resolvedTypes[index - 1]; + } + + break; + + case "B": + _lastArabic = false; + _hasUbatB = true; + cType = _dir; + break; + + case "S": + _hasUbatS = true; + cType = "N"; + break; + + case "LRE": + case "RLE": + case "LRO": + case "RLO": + case "PDF": + _lastArabic = false; + break; + + case "BN": + cType = "N"; + break; + } + + return cType; + }; + + var _handleUbatS = function _handleUbatS(types, levels, length) { + for (var i = 0; i < length; i++) { + if (types[i] === "S") { + levels[i] = _dir; + + for (var j = i - 1; j >= 0; j--) { + if (types[j] === "WS") { + levels[j] = _dir; + } else { + break; + } + } + } + } + }; + + var _invertString = function _invertString(text, sourceToTargetMap, levels) { + var charArray = text.split(""); + + if (levels) { + _computeLevels(charArray, levels, { + hiLevel: _dir + }); + } + + charArray.reverse(); + sourceToTargetMap && sourceToTargetMap.reverse(); + return charArray.join(""); + }; // For reference see 3.3 in http://unicode.org/reports/tr9/ + // + + + var _computeLevels = function _computeLevels(chars, levels, params) { + var action, + condition, + i, + index, + newLevel, + prevState, + condPos = -1, + len = chars.length, + newState = 0, + resolvedTypes = [], + stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR, + types = []; + _lastArabic = false; + _hasUbatB = false; + _hasUbatS = false; + + for (i = 0; i < len; i++) { + types[i] = _getCharType(chars[i]); + } + + for (index = 0; index < len; index++) { + prevState = newState; + resolvedTypes[index] = _resolveCharType(chars, types, resolvedTypes, index); + newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]]; + action = newState & 0xf0; + newState &= 0x0f; + levels[index] = newLevel = stateTable[newState][5]; + + if (action > 0) { + if (action === 0x10) { + for (i = condPos; i < index; i++) { + levels[i] = 1; + } + + condPos = -1; + } else { + condPos = -1; + } + } + + condition = stateTable[newState][6]; + + if (condition) { + if (condPos === -1) { + condPos = index; + } + } else { + if (condPos > -1) { + for (i = condPos; i < index; i++) { + levels[i] = newLevel; + } + + condPos = -1; + } + } + + if (types[index] === "B") { + levels[index] = 0; + } + + params.hiLevel |= newLevel; + } + + if (_hasUbatS) { + _handleUbatS(types, levels, len); + } + }; // for reference see 3.4 in http://unicode.org/reports/tr9/ + // + + + var _invertByLevel = function _invertByLevel(level, charArray, sourceToTargetMap, levels, params) { + if (params.hiLevel < level) { + return; + } + + if (level === 1 && _dir === DIR_RTL && !_hasUbatB) { + charArray.reverse(); + sourceToTargetMap && sourceToTargetMap.reverse(); + return; + } + + var ch, + high, + end, + low, + len = charArray.length, + start = 0; + + while (start < len) { + if (levels[start] >= level) { + end = start + 1; + + while (end < len && levels[end] >= level) { + end++; + } + + for (low = start, high = end - 1; low < high; low++, high--) { + ch = charArray[low]; + charArray[low] = charArray[high]; + charArray[high] = ch; + + if (sourceToTargetMap) { + ch = sourceToTargetMap[low]; + sourceToTargetMap[low] = sourceToTargetMap[high]; + sourceToTargetMap[high] = ch; + } + } + + start = end; + } + + start++; + } + }; // for reference see 7 & BD16 in http://unicode.org/reports/tr9/ + // + + + var _symmetricSwap = function _symmetricSwap(charArray, levels, params) { + if (params.hiLevel !== 0 && _isSymmetricSwapping) { + for (var i = 0, index; i < charArray.length; i++) { + if (levels[i] === 1) { + index = _SWAP_TABLE.indexOf(charArray[i]); + + if (index >= 0) { + charArray[i] = _SWAP_TABLE[index + 1]; + } + } + } + } + }; + + var _reorder = function _reorder(text, sourceToTargetMap, levels) { + var charArray = text.split(""), + params = { + hiLevel: _dir + }; + + if (!levels) { + levels = []; + } + + _computeLevels(charArray, levels, params); + + _symmetricSwap(charArray, levels, params); + + _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params); + + _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params); + + return charArray.join(""); + }; // doBidiReorder( text, sourceToTargetMap, levels ) + // Performs Bidi reordering by implementing Unicode Bidi algorithm. + // Returns reordered string + // @text [String]: + // - input string to be reordered, this is input parameter + // $sourceToTargetMap [Array] (optional) + // - resultant mapping between input and output strings, this is output parameter + // $levels [Array] (optional) + // - array of calculated Bidi levels, , this is output parameter + + + this.__bidiEngine__.doBidiReorder = function (text, sourceToTargetMap, levels) { + _init(text, sourceToTargetMap); + + if (!_isInVisual && _isOutVisual && !_isOutRtl) { + // LLTR->VLTR, LRTL->VLTR + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) { + // VRTL->VLTR, VLTR->VRTL + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _invertString(text, sourceToTargetMap, levels); + } else if (!_isInVisual && _isOutVisual && _isOutRtl) { + // LLTR->VRTL, LRTL->VRTL + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) { + // VLTR->LLTR + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) { + // VLTR->LRTL, VRTL->LLTR + text = _invertString(text, sourceToTargetMap); + + if (_isInRtl) { + //LLTR -> VLTR + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else { + //LRTL -> VRTL + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } + } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) { + // VRTL->LRTL + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) { + // LRTL->LLTR, LLTR->LRTL + var isSymmetricSwappingOrig = _isSymmetricSwapping; + + if (_isInRtl) { + //LRTL->LLTR + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + _dir = DIR_LTR; + _isSymmetricSwapping = false; + text = _reorder(text, sourceToTargetMap, levels); + _isSymmetricSwapping = isSymmetricSwappingOrig; + } else { + //LLTR->LRTL + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + _dir = DIR_RTL; + _isSymmetricSwapping = false; + text = _reorder(text, sourceToTargetMap, levels); + _isSymmetricSwapping = isSymmetricSwappingOrig; + text = _invertString(text, sourceToTargetMap); + } + } + + return text; + }; + /** + * @name setOptions( options ) + * @function + * Sets options for Bidi conversion + * @param {Object}: + * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode) + * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string) + * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode) + * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string) + * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping), + */ + + + this.__bidiEngine__.setOptions = function (options) { + if (options) { + _isInVisual = options.isInputVisual; + _isOutVisual = options.isOutputVisual; + _isInRtl = options.isInputRtl; + _isOutRtl = options.isOutputRtl; + _isSymmetricSwapping = options.isSymmetricSwapping; + } + }; + + this.__bidiEngine__.setOptions(options); + + return this.__bidiEngine__; + }; + + var _bidiUnicodeTypes = bidiUnicodeTypes; + var bidiEngine = new jsPDF.__bidiEngine__({ + isInputVisual: true + }); + + var bidiEngineFunction = function bidiEngineFunction(args) { + var text = args.text; + var x = args.x; + var y = args.y; + var options = args.options || {}; + var mutex = args.mutex || {}; + var lang = options.lang; + var tmpText = []; + options.isInputVisual = typeof options.isInputVisual === "boolean" ? options.isInputVisual : true; + bidiEngine.setOptions(options); + + if (Object.prototype.toString.call(text) === "[object Array]") { + var i = 0; + tmpText = []; + + for (i = 0; i < text.length; i += 1) { + if (Object.prototype.toString.call(text[i]) === "[object Array]") { + tmpText.push([bidiEngine.doBidiReorder(text[i][0]), text[i][1], text[i][2]]); + } else { + tmpText.push([bidiEngine.doBidiReorder(text[i])]); + } + } + + args.text = tmpText; + } else { + args.text = bidiEngine.doBidiReorder(text); + } + + bidiEngine.setOptions({ + isInputVisual: true + }); + }; + + jsPDF.API.events.push(["postProcessText", bidiEngineFunction]); +})(jsPDF); + +/* eslint-disable no-control-regex */ + +jsPDF.API.TTFFont = function () { + /************************************************************************/ + + /* function : open */ + + /* comment : Decode the encoded ttf content and create a TTFFont object. */ + + /************************************************************************/ + TTFFont.open = function (file) { + return new TTFFont(file); + }; + /***************************************************************/ + + /* function : TTFFont gernerator */ + + /* comment : Decode TTF contents are parsed, Data, */ + + /* Subset object is created, and registerTTF function is called.*/ + + /***************************************************************/ + + + function TTFFont(rawData) { + var data; + this.rawData = rawData; + data = this.contents = new Data(rawData); + this.contents.pos = 4; + + if (data.readString(4) === "ttcf") { + throw new Error("TTCF not supported."); + } else { + data.pos = 0; + this.parse(); + this.subset = new Subset(this); + this.registerTTF(); + } + } + /********************************************************/ + + /* function : parse */ + + /* comment : TTF Parses the file contents by each table.*/ + + /********************************************************/ + + + TTFFont.prototype.parse = function () { + this.directory = new Directory(this.contents); + this.head = new HeadTable(this); + this.name = new NameTable(this); + this.cmap = new CmapTable(this); + this.toUnicode = {}; + this.hhea = new HheaTable(this); + this.maxp = new MaxpTable(this); + this.hmtx = new HmtxTable(this); + this.post = new PostTable(this); + this.os2 = new OS2Table(this); + this.loca = new LocaTable(this); + this.glyf = new GlyfTable(this); + this.ascender = this.os2.exists && this.os2.ascender || this.hhea.ascender; + this.decender = this.os2.exists && this.os2.decender || this.hhea.decender; + this.lineGap = this.os2.exists && this.os2.lineGap || this.hhea.lineGap; + return this.bbox = [this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax]; + }; + /***************************************************************/ + + /* function : registerTTF */ + + /* comment : Get the value to assign pdf font descriptors. */ + + /***************************************************************/ + + + TTFFont.prototype.registerTTF = function () { + var e, hi, low, raw, _ref; + + this.scaleFactor = 1000.0 / this.head.unitsPerEm; + + this.bbox = function () { + var _i, _len, _ref, _results; + + _ref = this.bbox; + _results = []; + + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + e = _ref[_i]; + + _results.push(Math.round(e * this.scaleFactor)); + } + + return _results; + }.call(this); + + this.stemV = 0; + + if (this.post.exists) { + raw = this.post.italic_angle; + hi = raw >> 16; + low = raw & 0xff; + + if ((hi & 0x8000) !== 0) { + hi = -((hi ^ 0xffff) + 1); + } + + this.italicAngle = +("" + hi + "." + low); + } else { + this.italicAngle = 0; + } + + this.ascender = Math.round(this.ascender * this.scaleFactor); + this.decender = Math.round(this.decender * this.scaleFactor); + this.lineGap = Math.round(this.lineGap * this.scaleFactor); + this.capHeight = this.os2.exists && this.os2.capHeight || this.ascender; + this.xHeight = this.os2.exists && this.os2.xHeight || 0; + this.familyClass = (this.os2.exists && this.os2.familyClass || 0) >> 8; + this.isSerif = (_ref = this.familyClass) === 1 || _ref === 2 || _ref === 3 || _ref === 4 || _ref === 5 || _ref === 7; + this.isScript = this.familyClass === 10; + this.flags = 0; + + if (this.post.isFixedPitch) { + this.flags |= 1 << 0; + } + + if (this.isSerif) { + this.flags |= 1 << 1; + } + + if (this.isScript) { + this.flags |= 1 << 3; + } + + if (this.italicAngle !== 0) { + this.flags |= 1 << 6; + } + + this.flags |= 1 << 5; + + if (!this.cmap.unicode) { + throw new Error("No unicode cmap for font"); + } + }; + + TTFFont.prototype.characterToGlyph = function (character) { + var _ref; + + return ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) || 0; + }; + + TTFFont.prototype.widthOfGlyph = function (glyph) { + var scale; + scale = 1000.0 / this.head.unitsPerEm; + return this.hmtx.forGlyph(glyph).advance * scale; + }; + + TTFFont.prototype.widthOfString = function (string, size, charSpace) { + var charCode, i, scale, width, _ref; + + string = "" + string; + width = 0; + + for (i = 0, _ref = string.length; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + charCode = string.charCodeAt(i); + width += this.widthOfGlyph(this.characterToGlyph(charCode)) + charSpace * (1000 / size) || 0; + } + + scale = size / 1000; + return width * scale; + }; + + TTFFont.prototype.lineHeight = function (size, includeGap) { + var gap; + + if (includeGap == null) { + includeGap = false; + } + + gap = includeGap ? this.lineGap : 0; + return (this.ascender + gap - this.decender) / 1000 * size; + }; + + return TTFFont; +}(); +/************************************************************************************************/ + +/* function : Data */ + +/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/ + +/************************************************************************************************/ + + +var Data = function () { + function Data(data) { + this.data = data != null ? data : []; + this.pos = 0; + this.length = this.data.length; + } + + Data.prototype.readByte = function () { + return this.data[this.pos++]; + }; + + Data.prototype.writeByte = function (byte) { + return this.data[this.pos++] = byte; + }; + + Data.prototype.readUInt32 = function () { + var b1, b2, b3, b4; + b1 = this.readByte() * 0x1000000; + b2 = this.readByte() << 16; + b3 = this.readByte() << 8; + b4 = this.readByte(); + return b1 + b2 + b3 + b4; + }; + + Data.prototype.writeUInt32 = function (val) { + this.writeByte(val >>> 24 & 0xff); + this.writeByte(val >> 16 & 0xff); + this.writeByte(val >> 8 & 0xff); + return this.writeByte(val & 0xff); + }; + + Data.prototype.readInt32 = function () { + var int; + int = this.readUInt32(); + + if (int >= 0x80000000) { + return int - 0x100000000; + } else { + return int; + } + }; + + Data.prototype.writeInt32 = function (val) { + if (val < 0) { + val += 0x100000000; + } + + return this.writeUInt32(val); + }; + + Data.prototype.readUInt16 = function () { + var b1, b2; + b1 = this.readByte() << 8; + b2 = this.readByte(); + return b1 | b2; + }; + + Data.prototype.writeUInt16 = function (val) { + this.writeByte(val >> 8 & 0xff); + return this.writeByte(val & 0xff); + }; + + Data.prototype.readInt16 = function () { + var int; + int = this.readUInt16(); + + if (int >= 0x8000) { + return int - 0x10000; + } else { + return int; + } + }; + + Data.prototype.writeInt16 = function (val) { + if (val < 0) { + val += 0x10000; + } + + return this.writeUInt16(val); + }; + + Data.prototype.readString = function (length) { + var i, ret; + ret = []; + + for (i = 0; 0 <= length ? i < length : i > length; i = 0 <= length ? ++i : --i) { + ret[i] = String.fromCharCode(this.readByte()); + } + + return ret.join(""); + }; + + Data.prototype.writeString = function (val) { + var i, _ref, _results; + + _results = []; + + for (i = 0, _ref = val.length; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + _results.push(this.writeByte(val.charCodeAt(i))); + } + + return _results; + }; + /*Data.prototype.stringAt = function (pos, length) { + this.pos = pos; + return this.readString(length); + };*/ + + + Data.prototype.readShort = function () { + return this.readInt16(); + }; + + Data.prototype.writeShort = function (val) { + return this.writeInt16(val); + }; + + Data.prototype.readLongLong = function () { + var b1, b2, b3, b4, b5, b6, b7, b8; + b1 = this.readByte(); + b2 = this.readByte(); + b3 = this.readByte(); + b4 = this.readByte(); + b5 = this.readByte(); + b6 = this.readByte(); + b7 = this.readByte(); + b8 = this.readByte(); + + if (b1 & 0x80) { + return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1; + } + + return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8; + }; + + Data.prototype.writeLongLong = function (val) { + var high, low; + high = Math.floor(val / 0x100000000); + low = val & 0xffffffff; + this.writeByte(high >> 24 & 0xff); + this.writeByte(high >> 16 & 0xff); + this.writeByte(high >> 8 & 0xff); + this.writeByte(high & 0xff); + this.writeByte(low >> 24 & 0xff); + this.writeByte(low >> 16 & 0xff); + this.writeByte(low >> 8 & 0xff); + return this.writeByte(low & 0xff); + }; + + Data.prototype.readInt = function () { + return this.readInt32(); + }; + + Data.prototype.writeInt = function (val) { + return this.writeInt32(val); + }; + /*Data.prototype.slice = function (start, end) { + return this.data.slice(start, end); + };*/ + + + Data.prototype.read = function (bytes) { + var buf, i; + buf = []; + + for (i = 0; 0 <= bytes ? i < bytes : i > bytes; i = 0 <= bytes ? ++i : --i) { + buf.push(this.readByte()); + } + + return buf; + }; + + Data.prototype.write = function (bytes) { + var byte, i, _len, _results; + + _results = []; + + for (i = 0, _len = bytes.length; i < _len; i++) { + byte = bytes[i]; + + _results.push(this.writeByte(byte)); + } + + return _results; + }; + + return Data; +}(); + +var Directory = function () { + var checksum; + /*****************************************************************************************************/ + + /* function : Directory generator */ + + /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/ + + /*****************************************************************************************************/ + + function Directory(data) { + var entry, i, _ref; + + this.scalarType = data.readInt(); + this.tableCount = data.readShort(); + this.searchRange = data.readShort(); + this.entrySelector = data.readShort(); + this.rangeShift = data.readShort(); + this.tables = {}; + + for (i = 0, _ref = this.tableCount; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + entry = { + tag: data.readString(4), + checksum: data.readInt(), + offset: data.readInt(), + length: data.readInt() + }; + this.tables[entry.tag] = entry; + } + } + /********************************************************************************************************/ + + /* function : encode */ + + /* comment : It encodes and stores the font table object and information used for the directory object. */ + + /********************************************************************************************************/ + + + Directory.prototype.encode = function (tables) { + var adjustment, directory, directoryLength, entrySelector, headOffset, log2, offset, rangeShift, searchRange, sum, table, tableCount, tableData, tag; + tableCount = Object.keys(tables).length; + log2 = Math.log(2); + searchRange = Math.floor(Math.log(tableCount) / log2) * 16; + entrySelector = Math.floor(searchRange / log2); + rangeShift = tableCount * 16 - searchRange; + directory = new Data(); + directory.writeInt(this.scalarType); + directory.writeShort(tableCount); + directory.writeShort(searchRange); + directory.writeShort(entrySelector); + directory.writeShort(rangeShift); + directoryLength = tableCount * 16; + offset = directory.pos + directoryLength; + headOffset = null; + tableData = []; + + for (tag in tables) { + table = tables[tag]; + directory.writeString(tag); + directory.writeInt(checksum(table)); + directory.writeInt(offset); + directory.writeInt(table.length); + tableData = tableData.concat(table); + + if (tag === "head") { + headOffset = offset; + } + + offset += table.length; + + while (offset % 4) { + tableData.push(0); + offset++; + } + } + + directory.write(tableData); + sum = checksum(directory.data); + adjustment = 0xb1b0afba - sum; + directory.pos = headOffset + 8; + directory.writeUInt32(adjustment); + return directory.data; + }; + /***************************************************************/ + + /* function : checksum */ + + /* comment : Duplicate the table for the tag. */ + + /***************************************************************/ + + + checksum = function checksum(data) { + var i, sum, tmp, _ref; + + data = __slice.call(data); + + while (data.length % 4) { + data.push(0); + } + + tmp = new Data(data); + sum = 0; + + for (i = 0, _ref = data.length; i < _ref; i = i += 4) { + sum += tmp.readUInt32(); + } + + return sum & 0xffffffff; + }; + + return Directory; +}(); + +var Table, + __hasProp = {}.hasOwnProperty, + __extends = function __extends(child, parent) { + for (var key in parent) { + if (__hasProp.call(parent, key)) child[key] = parent[key]; + } + + function ctor() { + this.constructor = child; + } + + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + child.__super__ = parent.prototype; + return child; +}; +/***************************************************************/ + +/* function : Table */ + +/* comment : Save info for each table, and parse the table. */ + +/***************************************************************/ + + +Table = function () { + function Table(file) { + var info; + this.file = file; + info = this.file.directory.tables[this.tag]; + this.exists = !!info; + + if (info) { + this.offset = info.offset, this.length = info.length; + this.parse(this.file.contents); + } + } + + Table.prototype.parse = function () {}; + + Table.prototype.encode = function () {}; + + Table.prototype.raw = function () { + if (!this.exists) { + return null; + } + + this.file.contents.pos = this.offset; + return this.file.contents.read(this.length); + }; + + return Table; +}(); + +var HeadTable = function (_super) { + __extends(HeadTable, _super); + + function HeadTable() { + return HeadTable.__super__.constructor.apply(this, arguments); + } + + HeadTable.prototype.tag = "head"; + + HeadTable.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readInt(); + this.revision = data.readInt(); + this.checkSumAdjustment = data.readInt(); + this.magicNumber = data.readInt(); + this.flags = data.readShort(); + this.unitsPerEm = data.readShort(); + this.created = data.readLongLong(); + this.modified = data.readLongLong(); + this.xMin = data.readShort(); + this.yMin = data.readShort(); + this.xMax = data.readShort(); + this.yMax = data.readShort(); + this.macStyle = data.readShort(); + this.lowestRecPPEM = data.readShort(); + this.fontDirectionHint = data.readShort(); + this.indexToLocFormat = data.readShort(); + return this.glyphDataFormat = data.readShort(); + }; + + HeadTable.prototype.encode = function (indexToLocFormat) { + var table; + table = new Data(); + table.writeInt(this.version); + table.writeInt(this.revision); + table.writeInt(this.checkSumAdjustment); + table.writeInt(this.magicNumber); + table.writeShort(this.flags); + table.writeShort(this.unitsPerEm); + table.writeLongLong(this.created); + table.writeLongLong(this.modified); + table.writeShort(this.xMin); + table.writeShort(this.yMin); + table.writeShort(this.xMax); + table.writeShort(this.yMax); + table.writeShort(this.macStyle); + table.writeShort(this.lowestRecPPEM); + table.writeShort(this.fontDirectionHint); + table.writeShort(indexToLocFormat); + table.writeShort(this.glyphDataFormat); + return table.data; + }; + + return HeadTable; +}(Table); +/************************************************************************************/ + +/* function : CmapEntry */ + +/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/ + +/************************************************************************************/ + + +var CmapEntry = function () { + function CmapEntry(data, offset) { + var code, count, endCode, glyphId, glyphIds, i, idDelta, idRangeOffset, index, saveOffset, segCount, segCountX2, start, startCode, tail, _j, _k, _len; + + this.platformID = data.readUInt16(); + this.encodingID = data.readShort(); + this.offset = offset + data.readInt(); + saveOffset = data.pos; + data.pos = this.offset; + this.format = data.readUInt16(); + this.length = data.readUInt16(); + this.language = data.readUInt16(); + this.isUnicode = this.platformID === 3 && this.encodingID === 1 && this.format === 4 || this.platformID === 0 && this.format === 4; + this.codeMap = {}; + + switch (this.format) { + case 0: + for (i = 0; i < 256; ++i) { + this.codeMap[i] = data.readByte(); + } + + break; + + case 4: + segCountX2 = data.readUInt16(); + segCount = segCountX2 / 2; + data.pos += 6; + + endCode = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + data.pos += 2; + + startCode = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + idDelta = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + idRangeOffset = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + count = (this.length - data.pos + this.offset) / 2; + + glyphIds = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= count ? _j < count : _j > count; i = 0 <= count ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) { + tail = endCode[i]; + start = startCode[i]; + + for (code = _k = start; start <= tail ? _k <= tail : _k >= tail; code = start <= tail ? ++_k : --_k) { + if (idRangeOffset[i] === 0) { + glyphId = code + idDelta[i]; + } else { + index = idRangeOffset[i] / 2 + (code - start) - (segCount - i); + glyphId = glyphIds[index] || 0; + + if (glyphId !== 0) { + glyphId += idDelta[i]; + } + } + + this.codeMap[code] = glyphId & 0xffff; + } + } + + } + + data.pos = saveOffset; + } + + CmapEntry.encode = function (charmap, encoding) { + var charMap, code, codeMap, codes, delta, deltas, diff, endCode, endCodes, entrySelector, glyphIDs, i, id, indexes, last, map, nextID, offset, old, rangeOffsets, rangeShift, searchRange, segCount, segCountX2, startCode, startCodes, startGlyph, subtable, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _name, _o, _p, _q; + + subtable = new Data(); + codes = Object.keys(charmap).sort(function (a, b) { + return a - b; + }); + + switch (encoding) { + case "macroman": + id = 0; + + indexes = function () { + var _results = []; + + for (i = 0; i < 256; ++i) { + _results.push(0); + } + + return _results; + }(); + + map = { + 0: 0 + }; + codeMap = {}; + + for (_i = 0, _len = codes.length; _i < _len; _i++) { + code = codes[_i]; + + if (map[_name = charmap[code]] == null) { + map[_name] = ++id; + } + + codeMap[code] = { + old: charmap[code], + new: map[charmap[code]] + }; + indexes[code] = map[charmap[code]]; + } + + subtable.writeUInt16(1); + subtable.writeUInt16(0); + subtable.writeUInt32(12); + subtable.writeUInt16(0); + subtable.writeUInt16(262); + subtable.writeUInt16(0); + subtable.write(indexes); + return { + charMap: codeMap, + subtable: subtable.data, + maxGlyphID: id + 1 + }; + + case "unicode": + startCodes = []; + endCodes = []; + nextID = 0; + map = {}; + charMap = {}; + last = diff = null; + + for (_j = 0, _len1 = codes.length; _j < _len1; _j++) { + code = codes[_j]; + old = charmap[code]; + + if (map[old] == null) { + map[old] = ++nextID; + } + + charMap[code] = { + old: old, + new: map[old] + }; + delta = map[old] - code; + + if (last == null || delta !== diff) { + if (last) { + endCodes.push(last); + } + + startCodes.push(code); + diff = delta; + } + + last = code; + } + + if (last) { + endCodes.push(last); + } + + endCodes.push(0xffff); + startCodes.push(0xffff); + segCount = startCodes.length; + segCountX2 = segCount * 2; + searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2); + entrySelector = Math.log(searchRange / 2) / Math.LN2; + rangeShift = 2 * segCount - searchRange; + deltas = []; + rangeOffsets = []; + glyphIDs = []; + + for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) { + startCode = startCodes[i]; + endCode = endCodes[i]; + + if (startCode === 0xffff) { + deltas.push(0); + rangeOffsets.push(0); + break; + } + + startGlyph = charMap[startCode]["new"]; + + if (startCode - startGlyph >= 0x8000) { + deltas.push(0); + rangeOffsets.push(2 * (glyphIDs.length + segCount - i)); + + for (code = _l = startCode; startCode <= endCode ? _l <= endCode : _l >= endCode; code = startCode <= endCode ? ++_l : --_l) { + glyphIDs.push(charMap[code]["new"]); + } + } else { + deltas.push(startGlyph - startCode); + rangeOffsets.push(0); + } + } + + subtable.writeUInt16(3); + subtable.writeUInt16(1); + subtable.writeUInt32(12); + subtable.writeUInt16(4); + subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2); + subtable.writeUInt16(0); + subtable.writeUInt16(segCountX2); + subtable.writeUInt16(searchRange); + subtable.writeUInt16(entrySelector); + subtable.writeUInt16(rangeShift); + + for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) { + code = endCodes[_m]; + subtable.writeUInt16(code); + } + + subtable.writeUInt16(0); + + for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) { + code = startCodes[_n]; + subtable.writeUInt16(code); + } + + for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) { + delta = deltas[_o]; + subtable.writeUInt16(delta); + } + + for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) { + offset = rangeOffsets[_p]; + subtable.writeUInt16(offset); + } + + for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) { + id = glyphIDs[_q]; + subtable.writeUInt16(id); + } + + return { + charMap: charMap, + subtable: subtable.data, + maxGlyphID: nextID + 1 + }; + } + }; + + return CmapEntry; +}(); + +var CmapTable = function (_super) { + __extends(CmapTable, _super); + + function CmapTable() { + return CmapTable.__super__.constructor.apply(this, arguments); + } + + CmapTable.prototype.tag = "cmap"; + + CmapTable.prototype.parse = function (data) { + var entry, i, tableCount; + data.pos = this.offset; + this.version = data.readUInt16(); + tableCount = data.readUInt16(); + this.tables = []; + this.unicode = null; + + for (i = 0; 0 <= tableCount ? i < tableCount : i > tableCount; i = 0 <= tableCount ? ++i : --i) { + entry = new CmapEntry(data, this.offset); + this.tables.push(entry); + + if (entry.isUnicode) { + if (this.unicode == null) { + this.unicode = entry; + } + } + } + + return true; + }; + /*************************************************************************/ + + /* function : encode */ + + /* comment : Encode the cmap table corresponding to the input character. */ + + /*************************************************************************/ + + + CmapTable.encode = function (charmap, encoding) { + var result, table; + + if (encoding == null) { + encoding = "macroman"; + } + + result = CmapEntry.encode(charmap, encoding); + table = new Data(); + table.writeUInt16(0); + table.writeUInt16(1); + result.table = table.data.concat(result.subtable); + return result; + }; + + return CmapTable; +}(Table); + +var HheaTable = function (_super) { + __extends(HheaTable, _super); + + function HheaTable() { + return HheaTable.__super__.constructor.apply(this, arguments); + } + + HheaTable.prototype.tag = "hhea"; + + HheaTable.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readInt(); + this.ascender = data.readShort(); + this.decender = data.readShort(); + this.lineGap = data.readShort(); + this.advanceWidthMax = data.readShort(); + this.minLeftSideBearing = data.readShort(); + this.minRightSideBearing = data.readShort(); + this.xMaxExtent = data.readShort(); + this.caretSlopeRise = data.readShort(); + this.caretSlopeRun = data.readShort(); + this.caretOffset = data.readShort(); + data.pos += 4 * 2; + this.metricDataFormat = data.readShort(); + return this.numberOfMetrics = data.readUInt16(); + }; + /*HheaTable.prototype.encode = function (ids) { + var i, table, _i, _ref; + table = new Data; + table.writeInt(this.version); + table.writeShort(this.ascender); + table.writeShort(this.decender); + table.writeShort(this.lineGap); + table.writeShort(this.advanceWidthMax); + table.writeShort(this.minLeftSideBearing); + table.writeShort(this.minRightSideBearing); + table.writeShort(this.xMaxExtent); + table.writeShort(this.caretSlopeRise); + table.writeShort(this.caretSlopeRun); + table.writeShort(this.caretOffset); + for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + table.writeByte(0); + } + table.writeShort(this.metricDataFormat); + table.writeUInt16(ids.length); + return table.data; + };*/ + + + return HheaTable; +}(Table); + +var OS2Table = function (_super) { + __extends(OS2Table, _super); + + function OS2Table() { + return OS2Table.__super__.constructor.apply(this, arguments); + } + + OS2Table.prototype.tag = "OS/2"; + + OS2Table.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readUInt16(); + this.averageCharWidth = data.readShort(); + this.weightClass = data.readUInt16(); + this.widthClass = data.readUInt16(); + this.type = data.readShort(); + this.ySubscriptXSize = data.readShort(); + this.ySubscriptYSize = data.readShort(); + this.ySubscriptXOffset = data.readShort(); + this.ySubscriptYOffset = data.readShort(); + this.ySuperscriptXSize = data.readShort(); + this.ySuperscriptYSize = data.readShort(); + this.ySuperscriptXOffset = data.readShort(); + this.ySuperscriptYOffset = data.readShort(); + this.yStrikeoutSize = data.readShort(); + this.yStrikeoutPosition = data.readShort(); + this.familyClass = data.readShort(); + + this.panose = function () { + var i, _results; + + _results = []; + + for (i = 0; i < 10; ++i) { + _results.push(data.readByte()); + } + + return _results; + }(); + + this.charRange = function () { + var i, _results; + + _results = []; + + for (i = 0; i < 4; ++i) { + _results.push(data.readInt()); + } + + return _results; + }(); + + this.vendorID = data.readString(4); + this.selection = data.readShort(); + this.firstCharIndex = data.readShort(); + this.lastCharIndex = data.readShort(); + + if (this.version > 0) { + this.ascent = data.readShort(); + this.descent = data.readShort(); + this.lineGap = data.readShort(); + this.winAscent = data.readShort(); + this.winDescent = data.readShort(); + + this.codePageRange = function () { + var i, _results; + + _results = []; + + for (i = 0; i < 2; i = ++i) { + _results.push(data.readInt()); + } + + return _results; + }(); + + if (this.version > 1) { + this.xHeight = data.readShort(); + this.capHeight = data.readShort(); + this.defaultChar = data.readShort(); + this.breakChar = data.readShort(); + return this.maxContext = data.readShort(); + } + } + }; + /*OS2Table.prototype.encode = function () { + return this.raw(); + };*/ + + + return OS2Table; +}(Table); + +var PostTable = function (_super) { + + __extends(PostTable, _super); + + function PostTable() { + return PostTable.__super__.constructor.apply(this, arguments); + } + + PostTable.prototype.tag = "post"; + + PostTable.prototype.parse = function (data) { + var length, numberOfGlyphs, _results; + + data.pos = this.offset; + this.format = data.readInt(); + this.italicAngle = data.readInt(); + this.underlinePosition = data.readShort(); + this.underlineThickness = data.readShort(); + this.isFixedPitch = data.readInt(); + this.minMemType42 = data.readInt(); + this.maxMemType42 = data.readInt(); + this.minMemType1 = data.readInt(); + this.maxMemType1 = data.readInt(); + + switch (this.format) { + case 0x00010000: + break; + + case 0x00020000: + numberOfGlyphs = data.readUInt16(); + this.glyphNameIndex = []; + var i; + + for (i = 0; 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs; i = 0 <= numberOfGlyphs ? ++i : --i) { + this.glyphNameIndex.push(data.readUInt16()); + } + + this.names = []; + _results = []; + + while (data.pos < this.offset + this.length) { + length = data.readByte(); + + _results.push(this.names.push(data.readString(length))); + } + + return _results; + + case 0x00025000: + numberOfGlyphs = data.readUInt16(); + return this.offsets = data.read(numberOfGlyphs); + + case 0x00030000: + break; + + case 0x00040000: + return this.map = function () { + var _j, _ref, _results1; + + _results1 = []; + + for (i = _j = 0, _ref = this.file.maxp.numGlyphs; 0 <= _ref ? _j < _ref : _j > _ref; i = 0 <= _ref ? ++_j : --_j) { + _results1.push(data.readUInt32()); + } + + return _results1; + }.call(this); + } + }; + return PostTable; +}(Table); +/*********************************************************************************************************/ + +/* function : NameEntry */ + +/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/ + +/*********************************************************************************************************/ + + +var NameEntry = function () { + function NameEntry(raw, entry) { + this.raw = raw; + this.length = raw.length; + this.platformID = entry.platformID; + this.encodingID = entry.encodingID; + this.languageID = entry.languageID; + } + + return NameEntry; +}(); + +var NameTable = function (_super) { + + __extends(NameTable, _super); + + function NameTable() { + return NameTable.__super__.constructor.apply(this, arguments); + } + + NameTable.prototype.tag = "name"; + + NameTable.prototype.parse = function (data) { + var count, entries, entry, i, name, stringOffset, strings, text, _j, _len, _name; + + data.pos = this.offset; + data.readShort(); //format + + count = data.readShort(); + stringOffset = data.readShort(); + entries = []; + + for (i = 0; 0 <= count ? i < count : i > count; i = 0 <= count ? ++i : --i) { + entries.push({ + platformID: data.readShort(), + encodingID: data.readShort(), + languageID: data.readShort(), + nameID: data.readShort(), + length: data.readShort(), + offset: this.offset + stringOffset + data.readShort() + }); + } + + strings = {}; + + for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) { + entry = entries[i]; + data.pos = entry.offset; + text = data.readString(entry.length); + name = new NameEntry(text, entry); + + if (strings[_name = entry.nameID] == null) { + strings[_name] = []; + } + + strings[entry.nameID].push(name); + } + + this.strings = strings; + this.copyright = strings[0]; + this.fontFamily = strings[1]; + this.fontSubfamily = strings[2]; + this.uniqueSubfamily = strings[3]; + this.fontName = strings[4]; + this.version = strings[5]; + + try { + this.postscriptName = strings[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g, ""); + } catch (e) { + this.postscriptName = strings[4][0].raw.replace(/[\x00-\x19\x80-\xff]/g, ""); + } + + this.trademark = strings[7]; + this.manufacturer = strings[8]; + this.designer = strings[9]; + this.description = strings[10]; + this.vendorUrl = strings[11]; + this.designerUrl = strings[12]; + this.license = strings[13]; + this.licenseUrl = strings[14]; + this.preferredFamily = strings[15]; + this.preferredSubfamily = strings[17]; + this.compatibleFull = strings[18]; + return this.sampleText = strings[19]; + }; + /*NameTable.prototype.encode = function () { + var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref; + strings = {}; + _ref = this.strings; + for (id in _ref) { + val = _ref[id]; + strings[id] = val; + } + postscriptName = new NameEntry("" + subsetTag + "+" + this.postscriptName, { + platformID: 1 + , encodingID: 0 + , languageID: 0 + }); + strings[6] = [postscriptName]; + subsetTag = successorOf(subsetTag); + strCount = 0; + for (id in strings) { + list = strings[id]; + if (list != null) { + strCount += list.length; + } + } + table = new Data; + strTable = new Data; + table.writeShort(0); + table.writeShort(strCount); + table.writeShort(6 + 12 * strCount); + for (nameID in strings) { + list = strings[nameID]; + if (list != null) { + for (_i = 0, _len = list.length; _i < _len; _i++) { + string = list[_i]; + table.writeShort(string.platformID); + table.writeShort(string.encodingID); + table.writeShort(string.languageID); + table.writeShort(nameID); + table.writeShort(string.length); + table.writeShort(strTable.pos); + strTable.writeString(string.raw); + } + } + } + return nameTable = { + postscriptName: postscriptName.raw + , table: table.data.concat(strTable.data) + }; + };*/ + + return NameTable; +}(Table); + +var MaxpTable = function (_super) { + __extends(MaxpTable, _super); + + function MaxpTable() { + return MaxpTable.__super__.constructor.apply(this, arguments); + } + + MaxpTable.prototype.tag = "maxp"; + + MaxpTable.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readInt(); + this.numGlyphs = data.readUInt16(); + this.maxPoints = data.readUInt16(); + this.maxContours = data.readUInt16(); + this.maxCompositePoints = data.readUInt16(); + this.maxComponentContours = data.readUInt16(); + this.maxZones = data.readUInt16(); + this.maxTwilightPoints = data.readUInt16(); + this.maxStorage = data.readUInt16(); + this.maxFunctionDefs = data.readUInt16(); + this.maxInstructionDefs = data.readUInt16(); + this.maxStackElements = data.readUInt16(); + this.maxSizeOfInstructions = data.readUInt16(); + this.maxComponentElements = data.readUInt16(); + return this.maxComponentDepth = data.readUInt16(); + }; + /*MaxpTable.prototype.encode = function (ids) { + var table; + table = new Data; + table.writeInt(this.version); + table.writeUInt16(ids.length); + table.writeUInt16(this.maxPoints); + table.writeUInt16(this.maxContours); + table.writeUInt16(this.maxCompositePoints); + table.writeUInt16(this.maxComponentContours); + table.writeUInt16(this.maxZones); + table.writeUInt16(this.maxTwilightPoints); + table.writeUInt16(this.maxStorage); + table.writeUInt16(this.maxFunctionDefs); + table.writeUInt16(this.maxInstructionDefs); + table.writeUInt16(this.maxStackElements); + table.writeUInt16(this.maxSizeOfInstructions); + table.writeUInt16(this.maxComponentElements); + table.writeUInt16(this.maxComponentDepth); + return table.data; + };*/ + + + return MaxpTable; +}(Table); + +var HmtxTable = function (_super) { + __extends(HmtxTable, _super); + + function HmtxTable() { + return HmtxTable.__super__.constructor.apply(this, arguments); + } + + HmtxTable.prototype.tag = "hmtx"; + + HmtxTable.prototype.parse = function (data) { + var i, last, lsbCount, m, _j, _ref, _results; + + data.pos = this.offset; + this.metrics = []; + + for (i = 0, _ref = this.file.hhea.numberOfMetrics; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + this.metrics.push({ + advance: data.readUInt16(), + lsb: data.readInt16() + }); + } + + lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics; + + this.leftSideBearings = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) { + _results.push(data.readInt16()); + } + + return _results; + }(); + + this.widths = function () { + var _j, _len, _ref1, _results; + + _ref1 = this.metrics; + _results = []; + + for (_j = 0, _len = _ref1.length; _j < _len; _j++) { + m = _ref1[_j]; + + _results.push(m.advance); + } + + return _results; + }.call(this); + + last = this.widths[this.widths.length - 1]; + _results = []; + + for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) { + _results.push(this.widths.push(last)); + } + + return _results; + }; + /***************************************************************/ + + /* function : forGlyph */ + + /* comment : Returns the advance width and lsb for this glyph. */ + + /***************************************************************/ + + + HmtxTable.prototype.forGlyph = function (id) { + if (id in this.metrics) { + return this.metrics[id]; + } + + return { + advance: this.metrics[this.metrics.length - 1].advance, + lsb: this.leftSideBearings[id - this.metrics.length] + }; + }; + /*HmtxTable.prototype.encode = function (mapping) { + var id, metric, table, _i, _len; + table = new Data; + for (_i = 0, _len = mapping.length; _i < _len; _i++) { + id = mapping[_i]; + metric = this.forGlyph(id); + table.writeUInt16(metric.advance); + table.writeUInt16(metric.lsb); + } + return table.data; + };*/ + + + return HmtxTable; +}(Table); + +var __slice = [].slice; + +var GlyfTable = function (_super) { + __extends(GlyfTable, _super); + + function GlyfTable() { + return GlyfTable.__super__.constructor.apply(this, arguments); + } + + GlyfTable.prototype.tag = "glyf"; + + GlyfTable.prototype.parse = function () { + return this.cache = {}; + }; + + GlyfTable.prototype.glyphFor = function (id) { + var data, index, length, loca, numberOfContours, raw, xMax, xMin, yMax, yMin; + + if (id in this.cache) { + return this.cache[id]; + } + + loca = this.file.loca; + data = this.file.contents; + index = loca.indexOf(id); + length = loca.lengthOf(id); + + if (length === 0) { + return this.cache[id] = null; + } + + data.pos = this.offset + index; + raw = new Data(data.read(length)); + numberOfContours = raw.readShort(); + xMin = raw.readShort(); + yMin = raw.readShort(); + xMax = raw.readShort(); + yMax = raw.readShort(); + + if (numberOfContours === -1) { + this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax); + } else { + this.cache[id] = new SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax); + } + + return this.cache[id]; + }; + + GlyfTable.prototype.encode = function (glyphs, mapping, old2new) { + var glyph, id, offsets, table, _i, _len; + + table = []; + offsets = []; + + for (_i = 0, _len = mapping.length; _i < _len; _i++) { + id = mapping[_i]; + glyph = glyphs[id]; + offsets.push(table.length); + + if (glyph) { + table = table.concat(glyph.encode(old2new)); + } + } + + offsets.push(table.length); + return { + table: table, + offsets: offsets + }; + }; + + return GlyfTable; +}(Table); + +var SimpleGlyph = function () { + /**************************************************************************/ + + /* function : SimpleGlyph */ + + /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/ + + /**************************************************************************/ + function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) { + this.raw = raw; + this.numberOfContours = numberOfContours; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + this.compound = false; + } + + SimpleGlyph.prototype.encode = function () { + return this.raw.data; + }; + + return SimpleGlyph; +}(); + +var CompoundGlyph = function () { + var ARG_1_AND_2_ARE_WORDS, MORE_COMPONENTS, WE_HAVE_AN_X_AND_Y_SCALE, WE_HAVE_A_SCALE, WE_HAVE_A_TWO_BY_TWO; + ARG_1_AND_2_ARE_WORDS = 0x0001; + WE_HAVE_A_SCALE = 0x0008; + MORE_COMPONENTS = 0x0020; + WE_HAVE_AN_X_AND_Y_SCALE = 0x0040; + WE_HAVE_A_TWO_BY_TWO = 0x0080; + /********************************************************************************************************************/ + + /* function : CompoundGlypg generator */ + + /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/ + + /********************************************************************************************************************/ + + function CompoundGlyph(raw, xMin, yMin, xMax, yMax) { + var data, flags; + this.raw = raw; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + this.compound = true; + this.glyphIDs = []; + this.glyphOffsets = []; + data = this.raw; + + while (true) { + flags = data.readShort(); + this.glyphOffsets.push(data.pos); + this.glyphIDs.push(data.readUInt16()); + + if (!(flags & MORE_COMPONENTS)) { + break; + } + + if (flags & ARG_1_AND_2_ARE_WORDS) { + data.pos += 4; + } else { + data.pos += 2; + } + + if (flags & WE_HAVE_A_TWO_BY_TWO) { + data.pos += 8; + } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { + data.pos += 4; + } else if (flags & WE_HAVE_A_SCALE) { + data.pos += 2; + } + } + } + /****************************************************************************************************************/ + + /* function : CompoundGlypg encode */ + + /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/ + + /****************************************************************************************************************/ + + + CompoundGlyph.prototype.encode = function () { + var i, result, _len, _ref; + + result = new Data(__slice.call(this.raw.data)); + _ref = this.glyphIDs; + + for (i = 0, _len = _ref.length; i < _len; ++i) { + result.pos = this.glyphOffsets[i]; + } + + return result.data; + }; + + return CompoundGlyph; +}(); + +var LocaTable = function (_super) { + __extends(LocaTable, _super); + + function LocaTable() { + return LocaTable.__super__.constructor.apply(this, arguments); + } + + LocaTable.prototype.tag = "loca"; + + LocaTable.prototype.parse = function (data) { + var format, i; + data.pos = this.offset; + format = this.file.head.indexToLocFormat; + + if (format === 0) { + return this.offsets = function () { + var _ref, _results; + + _results = []; + + for (i = 0, _ref = this.length; i < _ref; i += 2) { + _results.push(data.readUInt16() * 2); + } + + return _results; + }.call(this); + } else { + return this.offsets = function () { + var _ref, _results; + + _results = []; + + for (i = 0, _ref = this.length; i < _ref; i += 4) { + _results.push(data.readUInt32()); + } + + return _results; + }.call(this); + } + }; + + LocaTable.prototype.indexOf = function (id) { + return this.offsets[id]; + }; + + LocaTable.prototype.lengthOf = function (id) { + return this.offsets[id + 1] - this.offsets[id]; + }; + + LocaTable.prototype.encode = function (offsets, activeGlyphs) { + var LocaTable = new Uint32Array(this.offsets.length); + var glyfPtr = 0; + var listGlyf = 0; + + for (var k = 0; k < LocaTable.length; ++k) { + LocaTable[k] = glyfPtr; + + if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) { + ++listGlyf; + LocaTable[k] = glyfPtr; + var start = this.offsets[k]; + var len = this.offsets[k + 1] - start; + + if (len > 0) { + glyfPtr += len; + } + } + } + + var newLocaTable = new Array(LocaTable.length * 4); + + for (var j = 0; j < LocaTable.length; ++j) { + newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff; + newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8; + newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16; + newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24; + } + + return newLocaTable; + }; + + return LocaTable; +}(Table); +/************************************************************************************/ + +/* function : invert */ + +/* comment : Change the object's (key: value) to create an object with (value: key).*/ + +/************************************************************************************/ + + +var invert = function invert(object) { + var key, ret, val; + ret = {}; + + for (key in object) { + val = object[key]; + ret[val] = key; + } + + return ret; +}; +/*var successorOf = function (input) { + var added, alphabet, carry, i, index, isUpperCase, last, length, next, result; + alphabet = 'abcdefghijklmnopqrstuvwxyz'; + length = alphabet.length; + result = input; + i = input.length; + while (i >= 0) { + last = input.charAt(--i); + if (isNaN(last)) { + index = alphabet.indexOf(last.toLowerCase()); + if (index === -1) { + next = last; + carry = true; + } + else { + next = alphabet.charAt((index + 1) % length); + isUpperCase = last === last.toUpperCase(); + if (isUpperCase) { + next = next.toUpperCase(); + } + carry = index + 1 >= length; + if (carry && i === 0) { + added = isUpperCase ? 'A' : 'a'; + result = added + next + result.slice(1); + break; + } + } + } + else { + next = +last + 1; + carry = next > 9; + if (carry) { + next = 0; + } + if (carry && i === 0) { + result = '1' + next + result.slice(1); + break; + } + } + result = result.slice(0, i) + next + result.slice(i + 1); + if (!carry) { + break; + } + } + return result; + };*/ + + +var Subset = function () { + function Subset(font) { + this.font = font; + this.subset = {}; + this.unicodes = {}; + this.next = 33; + } + /*Subset.prototype.use = function (character) { + var i, _i, _ref; + if (typeof character === 'string') { + for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + this.use(character.charCodeAt(i)); + } + return; + } + if (!this.unicodes[character]) { + this.subset[this.next] = character; + return this.unicodes[character] = this.next++; + } + };*/ + + /*Subset.prototype.encodeText = function (text) { + var char, i, string, _i, _ref; + string = ''; + for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + char = this.unicodes[text.charCodeAt(i)]; + string += String.fromCharCode(char); + } + return string; + };*/ + + /***************************************************************/ + + /* function : generateCmap */ + + /* comment : Returns the unicode cmap for this font. */ + + /***************************************************************/ + + + Subset.prototype.generateCmap = function () { + var mapping, roman, unicode, unicodeCmap, _ref; + + unicodeCmap = this.font.cmap.tables[0].codeMap; + mapping = {}; + _ref = this.subset; + + for (roman in _ref) { + unicode = _ref[roman]; + mapping[roman] = unicodeCmap[unicode]; + } + + return mapping; + }; + /*Subset.prototype.glyphIDs = function () { + var ret, roman, unicode, unicodeCmap, val, _ref; + unicodeCmap = this.font.cmap.tables[0].codeMap; + ret = [0]; + _ref = this.subset; + for (roman in _ref) { + unicode = _ref[roman]; + val = unicodeCmap[unicode]; + if ((val != null) && __indexOf.call(ret, val) < 0) { + ret.push(val); + } + } + return ret.sort(); + };*/ + + /******************************************************************/ + + /* function : glyphsFor */ + + /* comment : Returns simple glyph objects for the input character.*/ + + /******************************************************************/ + + + Subset.prototype.glyphsFor = function (glyphIDs) { + var additionalIDs, glyph, glyphs, id, _i, _len, _ref; + + glyphs = {}; + + for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) { + id = glyphIDs[_i]; + glyphs[id] = this.font.glyf.glyphFor(id); + } + + additionalIDs = []; + + for (id in glyphs) { + glyph = glyphs[id]; + + if (glyph != null ? glyph.compound : void 0) { + additionalIDs.push.apply(additionalIDs, glyph.glyphIDs); + } + } + + if (additionalIDs.length > 0) { + _ref = this.glyphsFor(additionalIDs); + + for (id in _ref) { + glyph = _ref[id]; + glyphs[id] = glyph; + } + } + + return glyphs; + }; + /***************************************************************/ + + /* function : encode */ + + /* comment : Encode various tables for the characters you use. */ + + /***************************************************************/ + + + Subset.prototype.encode = function (glyID, indexToLocFormat) { + var cmap, code, glyf, glyphs, id, ids, loca, new2old, newIDs, nextGlyphID, old2new, oldID, oldIDs, tables, _ref; + + cmap = CmapTable.encode(this.generateCmap(), "unicode"); + glyphs = this.glyphsFor(glyID); + old2new = { + 0: 0 + }; + _ref = cmap.charMap; + + for (code in _ref) { + ids = _ref[code]; + old2new[ids.old] = ids["new"]; + } + + nextGlyphID = cmap.maxGlyphID; + + for (oldID in glyphs) { + if (!(oldID in old2new)) { + old2new[oldID] = nextGlyphID++; + } + } + + new2old = invert(old2new); + newIDs = Object.keys(new2old).sort(function (a, b) { + return a - b; + }); + + oldIDs = function () { + var _i, _len, _results; + + _results = []; + + for (_i = 0, _len = newIDs.length; _i < _len; _i++) { + id = newIDs[_i]; + + _results.push(new2old[id]); + } + + return _results; + }(); + + glyf = this.font.glyf.encode(glyphs, oldIDs, old2new); + loca = this.font.loca.encode(glyf.offsets, oldIDs); + tables = { + cmap: this.font.cmap.raw(), + glyf: glyf.table, + loca: loca, + hmtx: this.font.hmtx.raw(), + hhea: this.font.hhea.raw(), + maxp: this.font.maxp.raw(), + post: this.font.post.raw(), + name: this.font.name.raw(), + head: this.font.head.encode(indexToLocFormat) + }; + + if (this.font.os2.exists) { + tables["OS/2"] = this.font.os2.raw(); + } + + return this.font.directory.encode(tables); + }; + + return Subset; +}(); + +jsPDF.API.PDFObject = function () { + var pad; + + function PDFObject() {} + + pad = function pad(str, length) { + return (Array(length + 1).join("0") + str).slice(-length); + }; + /*****************************************************************************/ + + /* function : convert */ + + /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */ + + /*****************************************************************************/ + + + PDFObject.convert = function (object) { + var e, items, key, out, val; + + if (Array.isArray(object)) { + items = function () { + var _i, _len, _results; + + _results = []; + + for (_i = 0, _len = object.length; _i < _len; _i++) { + e = object[_i]; + + _results.push(PDFObject.convert(e)); + } + + return _results; + }().join(" "); + + return "[" + items + "]"; + } else if (typeof object === "string") { + return "/" + object; + } else if (object != null ? object.isString : void 0) { + return "(" + object + ")"; + } else if (object instanceof Date) { + return "(D:" + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth(), 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + "Z)"; + } else if ({}.toString.call(object) === "[object Object]") { + out = ["<<"]; + + for (key in object) { + val = object[key]; + out.push("/" + key + " " + PDFObject.convert(val)); + } + + out.push(">>"); + return out.join("\n"); + } else { + return "" + object; + } + }; + + return PDFObject; +}(); + +export default jsPDF; +export { AcroForm, AcroFormAppearance, AcroFormButton, AcroFormCheckBox, AcroFormChoiceField, AcroFormComboBox, AcroFormEditBox, AcroFormListBox, AcroFormPasswordField, AcroFormPushButton, AcroFormRadioButton, AcroFormTextField, GState, ShadingPattern, TilingPattern, jsPDF }; +//# sourceMappingURL=jspdf.es.js.map diff --git a/lib/jspdf/jspdf.es.js.map b/lib/jspdf/jspdf.es.js.map new file mode 100644 index 0000000..6b3cce6 --- /dev/null +++ b/lib/jspdf/jspdf.es.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jspdf.es.js","sources":["../src/libs/globalObject.js","../src/libs/console.js","../src/libs/FileSaver.js","../src/libs/rgbcolor.js","../src/libs/AtobBtoa.js","../src/libs/md5.js","../src/libs/rc4.js","../src/libs/pdfsecurity.js","../src/libs/pdfname.js","../src/jspdf.js","../src/modules/acroform.js","../src/modules/addimage.js","../src/modules/annotations.js","../src/modules/arabic.js","../src/modules/autoprint.js","../src/modules/canvas.js","../src/modules/cell.js","../src/libs/fontFace.js","../src/modules/context2d.js","../src/modules/filters.js","../src/modules/fileloading.js","../src/modules/html.js","../src/modules/javascript.js","../src/modules/outline.js","../src/modules/jpeg_support.js","../src/libs/png.js","../src/modules/png_support.js","../src/libs/omggif.js","../src/libs/JPEGEncoder.js","../src/modules/gif_support.js","../src/libs/BMPDecoder.js","../src/modules/bmp_support.js","../src/libs/WebPDecoder.js","../src/modules/webp_support.js","../src/modules/rgba_support.js","../src/modules/setlanguage.js","../src/modules/split_text_to_size.js","../src/modules/standard_fonts_metrics.js","../src/modules/ttfsupport.js","../src/modules/svg.js","../src/modules/total_pages.js","../src/modules/viewerpreferences.js","../src/modules/xmp_metadata.js","../src/modules/utf8.js","../src/modules/vfs.js","../src/libs/bidiEngine.js","../src/libs/ttffont.js"],"sourcesContent":["export var globalObject = (function() {\n return \"undefined\" !== typeof window\n ? window\n : \"undefined\" !== typeof global\n ? global\n : \"undefined\" !== typeof self\n ? self\n : this;\n})();\n","import { globalObject } from \"./globalObject.js\";\n\nfunction consoleLog() {\n if (globalObject.console && typeof globalObject.console.log === \"function\") {\n globalObject.console.log.apply(globalObject.console, arguments);\n }\n}\n\nfunction consoleWarn(str) {\n if (globalObject.console) {\n if (typeof globalObject.console.warn === \"function\") {\n globalObject.console.warn.apply(globalObject.console, arguments);\n } else {\n consoleLog.call(null, arguments);\n }\n }\n}\n\nfunction consoleError(str) {\n if (globalObject.console) {\n if (typeof globalObject.console.error === \"function\") {\n globalObject.console.error.apply(globalObject.console, arguments);\n } else {\n consoleLog(str);\n }\n }\n}\nexport var console = {\n log: consoleLog,\n warn: consoleWarn,\n error: consoleError\n};\n","/**\n * @license\n * FileSaver.js\n * A saveAs() FileSaver implementation.\n *\n * By Eli Grey, http://eligrey.com\n *\n * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n * source : http://purl.eligrey.com/github/FileSaver.js\n */\n\nimport { globalObject as _global } from \"./globalObject.js\";\nimport { console } from \"./console.js\";\n\nfunction bom(blob, opts) {\n if (typeof opts === \"undefined\") opts = { autoBom: false };\n else if (typeof opts !== \"object\") {\n console.warn(\"Deprecated: Expected third argument to be a object\");\n opts = { autoBom: !opts };\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (\n opts.autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n blob.type\n )\n ) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\n\nfunction download(url, name, opts) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.onload = function() {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function() {\n console.error(\"could not download file\");\n };\n xhr.send();\n}\n\nfunction corsEnabled(url) {\n var xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open(\"HEAD\", url, false);\n try {\n xhr.send();\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299;\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent(\"click\"));\n } catch (e) {\n var evt = document.createEvent(\"MouseEvents\");\n evt.initMouseEvent(\n \"click\",\n true,\n true,\n window,\n 0,\n 0,\n 0,\n 80,\n 20,\n false,\n false,\n false,\n false,\n 0,\n null\n );\n node.dispatchEvent(evt);\n }\n}\n\nvar saveAs =\n _global.saveAs ||\n // probably in some web worker\n (typeof window !== \"object\" || window !== _global\n ? function saveAs() {\n /* noop */\n }\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a native app\n typeof HTMLAnchorElement !== \"undefined\" &&\n \"download\" in HTMLAnchorElement.prototype\n ? function saveAs(blob, name, opts) {\n var URL = _global.URL || _global.webkitURL;\n var a = document.createElement(\"a\");\n name = name || blob.name || \"download\";\n\n a.download = name;\n a.rel = \"noopener\"; // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === \"string\") {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, (a.target = \"_blank\"));\n } else {\n click(a);\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function() {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function() {\n click(a);\n }, 0);\n }\n }\n : // Use msSaveOrOpenBlob as a second approach\n \"msSaveOrOpenBlob\" in navigator\n ? function saveAs(blob, name, opts) {\n name = name || blob.name || \"download\";\n\n if (typeof blob === \"string\") {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n } else {\n var a = document.createElement(\"a\");\n a.href = blob;\n a.target = \"_blank\";\n setTimeout(function() {\n click(a);\n });\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n }\n : // Fallback to using FileReader and a popup\n function saveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open(\"\", \"_blank\");\n if (popup) {\n popup.document.title = popup.document.body.innerText =\n \"downloading...\";\n }\n\n if (typeof blob === \"string\") return download(blob, name, opts);\n\n var force = blob.type === \"application/octet-stream\";\n var isSafari =\n /constructor/i.test(_global.HTMLElement) || _global.safari;\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\n if (\n (isChromeIOS || (force && isSafari)) &&\n typeof FileReader === \"object\"\n ) {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader();\n reader.onloadend = function() {\n var url = reader.result;\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, \"data:attachment/file;\");\n if (popup) popup.location.href = url;\n else location = url;\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n } else {\n var URL = _global.URL || _global.webkitURL;\n var url = URL.createObjectURL(blob);\n if (popup) popup.location = url;\n else location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function() {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n });\n\nexport { saveAs };\n","/**\n * A class to parse color values\n * @author Stoyan Stefanov \n * {@link http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */\n\nfunction RGBColor(color_string) {\n color_string = color_string || \"\";\n this.ok = false;\n\n // strip any leading #\n if (color_string.charAt(0) == \"#\") {\n // remove # if any\n color_string = color_string.substr(1, 6);\n }\n\n color_string = color_string.replace(/ /g, \"\");\n color_string = color_string.toLowerCase();\n\n var channels;\n\n // before getting into regexps, try simple matches\n // and overwrite the input\n var simple_colors = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"00ffff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000000\",\n blanchedalmond: \"ffebcd\",\n blue: \"0000ff\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"00ffff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dodgerblue: \"1e90ff\",\n feldspar: \"d19275\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"ff00ff\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgrey: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslateblue: \"8470ff\",\n lightslategray: \"778899\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"00ff00\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"ff00ff\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370d8\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"d87093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n red: \"ff0000\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n violetred: \"d02090\",\n wheat: \"f5deb3\",\n white: \"ffffff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ffff00\",\n yellowgreen: \"9acd32\"\n };\n color_string = simple_colors[color_string] || color_string;\n\n // array of color definition objects\n var color_defs = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n example: [\"rgb(123, 234, 45)\", \"rgb(255,234,245)\"],\n process: function(bits) {\n return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n example: [\"#00ff00\", \"336699\"],\n process: function(bits) {\n return [\n parseInt(bits[1], 16),\n parseInt(bits[2], 16),\n parseInt(bits[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n example: [\"#fb0\", \"f0f\"],\n process: function(bits) {\n return [\n parseInt(bits[1] + bits[1], 16),\n parseInt(bits[2] + bits[2], 16),\n parseInt(bits[3] + bits[3], 16)\n ];\n }\n }\n ];\n\n // search through the definitions to find a match\n for (var i = 0; i < color_defs.length; i++) {\n var re = color_defs[i].re;\n var processor = color_defs[i].process;\n var bits = re.exec(color_string);\n if (bits) {\n channels = processor(bits);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n this.ok = true;\n }\n }\n\n // validate/cleanup values\n this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r;\n this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g;\n this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b;\n\n // some getters\n this.toRGB = function() {\n return \"rgb(\" + this.r + \", \" + this.g + \", \" + this.b + \")\";\n };\n this.toHex = function() {\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n if (r.length == 1) r = \"0\" + r;\n if (g.length == 1) g = \"0\" + g;\n if (b.length == 1) b = \"0\" + b;\n return \"#\" + r + g + b;\n };\n}\n\nexport { RGBColor };\n","import { globalObject } from \"./globalObject.js\";\n\nvar atob, btoa;\n\n(function() {\n atob = globalObject.atob.bind(globalObject);\n btoa = globalObject.btoa.bind(globalObject);\n return;\n\n})();\n\nexport { atob, btoa };\n","/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\n\nfunction md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n // txt = '';\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i;\n for (i = 64; i <= s.length; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < s.length; i++)\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i++) tail[i] = 0;\n }\n tail[14] = n * 8;\n md5cycle(state, tail);\n return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n /* I figured global was faster. */\n var md5blks = [],\n i; /* Andy King said do it this way. */\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] =\n s.charCodeAt(i) +\n (s.charCodeAt(i + 1) << 8) +\n (s.charCodeAt(i + 2) << 16) +\n (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n}\n\nvar hex_chr = \"0123456789abcdef\".split(\"\");\n\nfunction rhex(n) {\n var s = \"\",\n j = 0;\n for (; j < 4; j++)\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];\n return s;\n}\n\nfunction hex(x) {\n for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]);\n return x.join(\"\");\n}\n\n// Converts a 4-byte number to byte string\nfunction singleToByteString(n) {\n return String.fromCharCode(\n (n & 0xff) >> 0,\n (n & 0xff00) >> 8,\n (n & 0xff0000) >> 16,\n (n & 0xff000000) >> 24\n );\n}\n\n// Converts an array of numbers to a byte string\nfunction toByteString(x) {\n return x.map(singleToByteString).join(\"\");\n}\n\n// Returns the MD5 hash as a byte string\nfunction md5Bin(s) {\n return toByteString(md51(s));\n}\n\n// Returns MD5 hash as a hex string\nfunction md5(s) {\n return hex(md51(s));\n}\n\nvar md5Check = md5(\"hello\") != \"5d41402abc4b2a76b9719d911017c592\";\n\nfunction add32(a, b) {\n if (md5Check) {\n /* if the md5Check does not match\n the expected value, we're dealing\n with an old browser and need\n this function. */\n var lsw = (a & 0xffff) + (b & 0xffff),\n msw = (a >> 16) + (b >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n } else {\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n return (a + b) & 0xffffffff;\n }\n}\n\nexport { md5, md5Bin };\n","/**\r\n * @license\r\n * FPDF is released under a permissive license: there is no usage restriction.\r\n * You may embed it freely in your application (commercial or not), with or\r\n * without modifications.\r\n *\r\n * Reference: http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nfunction repeat(str, num) {\r\n return new Array(num + 1).join(str);\r\n}\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name rc4\r\n * @function\r\n * @param {string} key Byte string of encryption key\r\n * @param {string} data Byte string of data to be encrypted\r\n * @returns {string} Encrypted string\r\n */\r\nfunction rc4(key, data) {\r\n var lastKey, lastState;\r\n if (key !== lastKey) {\r\n var k = repeat(key, ((256 / key.length) >> 0) + 1);\r\n var state = [];\r\n for (var i = 0; i < 256; i++) {\r\n state[i] = i;\r\n }\r\n var j = 0;\r\n for (var i = 0; i < 256; i++) {\r\n var t = state[i];\r\n j = (j + t + k.charCodeAt(i)) % 256;\r\n state[i] = state[j];\r\n state[j] = t;\r\n }\r\n lastKey = key;\r\n lastState = state;\r\n } else {\r\n state = lastState;\r\n }\r\n var length = data.length;\r\n var a = 0;\r\n var b = 0;\r\n var out = \"\";\r\n for (var i = 0; i < length; i++) {\r\n a = (a + 1) % 256;\r\n t = state[a];\r\n b = (b + t) % 256;\r\n state[a] = state[b];\r\n state[b] = t;\r\n k = state[(state[a] + state[b]) % 256];\r\n out += String.fromCharCode(data.charCodeAt(i) ^ k);\r\n }\r\n return out;\r\n}\r\n\r\nexport { rc4 };\r\n","/**\r\n * @license\r\n * Licensed under the MIT License.\r\n * http://opensource.org/licenses/mit-license\r\n * Author: Owen Leong (@owenl131)\r\n * Date: 15 Oct 2020\r\n * References:\r\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\r\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\r\n * http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nimport { md5Bin } from \"./md5.js\";\r\nimport { rc4 } from \"./rc4.js\";\r\n\r\nvar permissionOptions = {\r\n print: 4,\r\n modify: 8,\r\n copy: 16,\r\n \"annot-forms\": 32\r\n};\r\n\r\n/**\r\n * Initializes encryption settings\r\n *\r\n * @name constructor\r\n * @function\r\n * @param {Array} permissions Permissions allowed for user, \"print\", \"modify\", \"copy\" and \"annot-forms\".\r\n * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document\r\n * is not password protected but viewer has the above permissions.\r\n * @param {String} ownerPassword Owner has full functionalities to the file.\r\n * @param {String} fileId As hex string, should be same as the file ID in the trailer.\r\n * @example\r\n * var security = new PDFSecurity([\"print\"])\r\n */\r\nfunction PDFSecurity(permissions, userPassword, ownerPassword, fileId) {\r\n this.v = 1; // algorithm 1, future work can add in more recent encryption schemes\r\n this.r = 2; // revision 2\r\n\r\n // set flags for what functionalities the user can access\r\n let protection = 192;\r\n permissions.forEach(function(perm) {\r\n if (typeof permissionOptions.perm !== \"undefined\") {\r\n throw new Error(\"Invalid permission: \" + perm);\r\n }\r\n protection += permissionOptions[perm];\r\n });\r\n\r\n // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF\r\n this.padding =\r\n \"\\x28\\xBF\\x4E\\x5E\\x4E\\x75\\x8A\\x41\\x64\\x00\\x4E\\x56\\xFF\\xFA\\x01\\x08\" +\r\n \"\\x2E\\x2E\\x00\\xB6\\xD0\\x68\\x3E\\x80\\x2F\\x0C\\xA9\\xFE\\x64\\x53\\x69\\x7A\";\r\n let paddedUserPassword = (userPassword + this.padding).substr(0, 32);\r\n let paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32);\r\n\r\n this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword);\r\n this.P = -((protection ^ 255) + 1);\r\n this.encryptionKey = md5Bin(\r\n paddedUserPassword +\r\n this.O +\r\n this.lsbFirstWord(this.P) +\r\n this.hexToBytes(fileId)\r\n ).substr(0, 5);\r\n this.U = rc4(this.encryptionKey, this.padding);\r\n}\r\n\r\n/**\r\n * Breaks down a 4-byte number into its individual bytes, with the least significant bit first\r\n *\r\n * @name lsbFirstWord\r\n * @function\r\n * @param {number} data 32-bit number\r\n * @returns {Array}\r\n */\r\nPDFSecurity.prototype.lsbFirstWord = function(data) {\r\n return String.fromCharCode(\r\n (data >> 0) & 0xff,\r\n (data >> 8) & 0xff,\r\n (data >> 16) & 0xff,\r\n (data >> 24) & 0xff\r\n );\r\n};\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name toHexString\r\n * @function\r\n * @param {String} byteString Byte string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.toHexString = function(byteString) {\r\n return byteString\r\n .split(\"\")\r\n .map(function(byte) {\r\n return (\"0\" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2);\r\n })\r\n .join(\"\");\r\n};\r\n\r\n/**\r\n * Converts a hex string to a byte string\r\n *\r\n * @name hexToBytes\r\n * @function\r\n * @param {String} hex Hex string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.hexToBytes = function(hex) {\r\n for (var bytes = [], c = 0; c < hex.length; c += 2)\r\n bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16)));\r\n return bytes.join(\"\");\r\n};\r\n\r\n/**\r\n * Computes the 'O' field in the encryption dictionary\r\n *\r\n * @name processOwnerPassword\r\n * @function\r\n * @param {String} paddedUserPassword Byte string of padded user password\r\n * @param {String} paddedOwnerPassword Byte string of padded owner password\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.processOwnerPassword = function(\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let key = md5Bin(paddedOwnerPassword).substr(0, 5);\r\n return rc4(key, paddedUserPassword);\r\n};\r\n\r\n/**\r\n * Returns an encryptor function which can take in a byte string and returns the encrypted version\r\n *\r\n * @name encryptor\r\n * @function\r\n * @param {number} objectId\r\n * @param {number} generation Not sure what this is for, you can set it to 0\r\n * @returns {Function}\r\n * @example\r\n * out(\"stream\");\r\n * encryptor = security.encryptor(object.id, 0);\r\n * out(encryptor(data));\r\n * out(\"endstream\");\r\n */\r\nPDFSecurity.prototype.encryptor = function(objectId, generation) {\r\n let key = md5Bin(\r\n this.encryptionKey +\r\n String.fromCharCode(\r\n objectId & 0xff,\r\n (objectId >> 8) & 0xff,\r\n (objectId >> 16) & 0xff,\r\n generation & 0xff,\r\n (generation >> 8) & 0xff\r\n )\r\n ).substr(0, 10);\r\n return function(data) {\r\n return rc4(key, data);\r\n };\r\n};\r\n\r\nexport { PDFSecurity };\r\n","/**\n * Convert string to `PDF Name Object`.\n * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object\n * @param str\n */\nfunction toPDFName(str) {\n // eslint-disable-next-line no-control-regex\n if (/[^\\u0000-\\u00ff]/.test(str)) {\n // non ascii string\n throw new Error(\n \"Invalid PDF Name Object: \" + str + \", Only accept ASCII characters.\"\n );\n }\n var result = \"\",\n strLength = str.length;\n for (var i = 0; i < strLength; i++) {\n var charCode = str.charCodeAt(i);\n if (\n charCode < 0x21 ||\n charCode === 0x23 /* # */ ||\n charCode === 0x25 /* % */ ||\n charCode === 0x28 /* ( */ ||\n charCode === 0x29 /* ) */ ||\n charCode === 0x2f /* / */ ||\n charCode === 0x3c /* < */ ||\n charCode === 0x3e /* > */ ||\n charCode === 0x5b /* [ */ ||\n charCode === 0x5d /* ] */ ||\n charCode === 0x7b /* { */ ||\n charCode === 0x7d /* } */ ||\n charCode > 0x7e\n ) {\n // Char CharCode hexStr paddingHexStr Result\n // \"\\t\" 9 9 09 #09\n // \" \" 32 20 20 #20\n // \"©\" 169 a9 a9 #a9\n var hexStr = charCode.toString(16),\n paddingHexStr = (\"0\" + hexStr).slice(-2);\n\n result += \"#\" + paddingHexStr;\n } else {\n // Other ASCII printable characters between 0x21 <= X <= 0x7e\n result += str[i];\n }\n }\n return result;\n}\n\nexport { toPDFName };\n","/* eslint-disable no-console */\r\n\r\nimport { saveAs } from \"./libs/FileSaver.js\";\r\nimport { globalObject } from \"./libs/globalObject.js\";\r\nimport { RGBColor } from \"./libs/rgbcolor.js\";\r\nimport { btoa } from \"./libs/AtobBtoa.js\";\r\nimport { console } from \"./libs/console.js\";\r\nimport { PDFSecurity } from \"./libs/pdfsecurity.js\";\r\nimport { toPDFName } from \"./libs/pdfname.js\";\r\n/**\r\n * jsPDF's Internal PubSub Implementation.\r\n * Backward compatible rewritten on 2014 by\r\n * Diego Casorran, https://github.com/diegocr\r\n *\r\n * @class\r\n * @name PubSub\r\n * @ignore\r\n */\r\nfunction PubSub(context) {\r\n if (typeof context !== \"object\") {\r\n throw new Error(\r\n \"Invalid Context passed to initialize PubSub (jsPDF-module)\"\r\n );\r\n }\r\n var topics = {};\r\n\r\n this.subscribe = function(topic, callback, once) {\r\n once = once || false;\r\n if (\r\n typeof topic !== \"string\" ||\r\n typeof callback !== \"function\" ||\r\n typeof once !== \"boolean\"\r\n ) {\r\n throw new Error(\r\n \"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\"\r\n );\r\n }\r\n\r\n if (!topics.hasOwnProperty(topic)) {\r\n topics[topic] = {};\r\n }\r\n\r\n var token = Math.random().toString(35);\r\n topics[topic][token] = [callback, !!once];\r\n\r\n return token;\r\n };\r\n\r\n this.unsubscribe = function(token) {\r\n for (var topic in topics) {\r\n if (topics[topic][token]) {\r\n delete topics[topic][token];\r\n if (Object.keys(topics[topic]).length === 0) {\r\n delete topics[topic];\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n this.publish = function(topic) {\r\n if (topics.hasOwnProperty(topic)) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n tokens = [];\r\n\r\n for (var token in topics[topic]) {\r\n var sub = topics[topic][token];\r\n try {\r\n sub[0].apply(context, args);\r\n } catch (ex) {\r\n if (globalObject.console) {\r\n console.error(\"jsPDF PubSub Error\", ex.message, ex);\r\n }\r\n }\r\n if (sub[1]) tokens.push(token);\r\n }\r\n if (tokens.length) tokens.forEach(this.unsubscribe);\r\n }\r\n };\r\n\r\n this.getTopics = function() {\r\n return topics;\r\n };\r\n}\r\n\r\nfunction GState(parameters) {\r\n if (!(this instanceof GState)) {\r\n return new GState(parameters);\r\n }\r\n\r\n /**\r\n * @name GState#opacity\r\n * @type {any}\r\n */\r\n /**\r\n * @name GState#stroke-opacity\r\n * @type {any}\r\n */\r\n var supported = \"opacity,stroke-opacity\".split(\",\");\r\n for (var p in parameters) {\r\n if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) {\r\n this[p] = parameters[p];\r\n }\r\n }\r\n /**\r\n * @name GState#id\r\n * @type {string}\r\n */\r\n this.id = \"\"; // set by addGState()\r\n /**\r\n * @name GState#objectNumber\r\n * @type {number}\r\n */\r\n this.objectNumber = -1; // will be set by putGState()\r\n}\r\n\r\nGState.prototype.equals = function equals(other) {\r\n var ignore = \"id,objectNumber,equals\";\r\n var p;\r\n if (!other || typeof other !== typeof this) return false;\r\n var count = 0;\r\n for (p in this) {\r\n if (ignore.indexOf(p) >= 0) continue;\r\n if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false;\r\n if (this[p] !== other[p]) return false;\r\n count++;\r\n }\r\n for (p in other) {\r\n if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--;\r\n }\r\n return count === 0;\r\n};\r\n\r\nfunction Pattern(gState, matrix) {\r\n this.gState = gState;\r\n this.matrix = matrix;\r\n\r\n this.id = \"\"; // set by addPattern()\r\n this.objectNumber = -1; // will be set by putPattern()\r\n}\r\n\r\nfunction ShadingPattern(type, coords, colors, gState, matrix) {\r\n if (!(this instanceof ShadingPattern)) {\r\n return new ShadingPattern(type, coords, colors, gState, matrix);\r\n }\r\n\r\n // see putPattern() for information how they are realized\r\n this.type = type === \"axial\" ? 2 : 3;\r\n this.coords = coords;\r\n this.colors = colors;\r\n\r\n Pattern.call(this, gState, matrix);\r\n}\r\n\r\nfunction TilingPattern(boundingBox, xStep, yStep, gState, matrix) {\r\n if (!(this instanceof TilingPattern)) {\r\n return new TilingPattern(boundingBox, xStep, yStep, gState, matrix);\r\n }\r\n\r\n this.boundingBox = boundingBox;\r\n this.xStep = xStep;\r\n this.yStep = yStep;\r\n\r\n this.stream = \"\"; // set by endTilingPattern();\r\n\r\n this.cloneIndex = 0;\r\n\r\n Pattern.call(this, gState, matrix);\r\n}\r\n\r\n/**\r\n * Creates new jsPDF document object instance.\r\n * @name jsPDF\r\n * @class\r\n * @param {Object} [options] - Collection of settings initializing the jsPDF-instance\r\n * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" or \"l\").
    \r\n * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.
    \r\n * Possible values are \"pt\" (points), \"mm\", \"cm\", \"in\", \"px\", \"pc\", \"em\" or \"ex\". Note that in order to get the correct scaling for \"px\"\r\n * units, you need to enable the hotfix \"px_scaling\" by setting options.hotfixes = [\"px_scaling\"].\r\n * @param {string/Array} [options.format=a4] The format of the first page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used.\r\n * @param {boolean} [options.compress=false] Compress the generated PDF.\r\n * @param {number} [options.precision=16] Precision of the element-positions.\r\n * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it.\r\n * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling.\r\n * @param {Object} [options.encryption]\r\n * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list.\r\n * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication.\r\n * @param {string[]} [options.encryption.userPermissions] Array of permissions \"print\", \"modify\", \"copy\", \"annot-forms\", accessible by the user.\r\n * @param {number|\"smart\"} [options.floatPrecision=16]\r\n * @returns {jsPDF} jsPDF-instance\r\n * @description\r\n * ```\r\n * {\r\n * orientation: 'p',\r\n * unit: 'mm',\r\n * format: 'a4',\r\n * putOnlyUsedFonts:true,\r\n * floatPrecision: 16 // or \"smart\", default is 16\r\n * }\r\n * ```\r\n *\r\n * @constructor\r\n */\r\nfunction jsPDF(options) {\r\n var orientation = typeof arguments[0] === \"string\" ? arguments[0] : \"p\";\r\n var unit = arguments[1];\r\n var format = arguments[2];\r\n var compressPdf = arguments[3];\r\n var filters = [];\r\n var userUnit = 1.0;\r\n var precision;\r\n var floatPrecision = 16;\r\n var defaultPathOperation = \"S\";\r\n var encryptionOptions = null;\r\n\r\n options = options || {};\r\n\r\n if (typeof options === \"object\") {\r\n orientation = options.orientation;\r\n unit = options.unit || unit;\r\n format = options.format || format;\r\n compressPdf = options.compress || options.compressPdf || compressPdf;\r\n encryptionOptions = options.encryption || null;\r\n if (encryptionOptions !== null) {\r\n encryptionOptions.userPassword = encryptionOptions.userPassword || \"\";\r\n encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || \"\";\r\n encryptionOptions.userPermissions =\r\n encryptionOptions.userPermissions || [];\r\n }\r\n userUnit =\r\n typeof options.userUnit === \"number\" ? Math.abs(options.userUnit) : 1.0;\r\n if (typeof options.precision !== \"undefined\") {\r\n precision = options.precision;\r\n }\r\n if (typeof options.floatPrecision !== \"undefined\") {\r\n floatPrecision = options.floatPrecision;\r\n }\r\n defaultPathOperation = options.defaultPathOperation || \"S\";\r\n }\r\n\r\n filters =\r\n options.filters || (compressPdf === true ? [\"FlateEncode\"] : filters);\r\n\r\n unit = unit || \"mm\";\r\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\r\n var putOnlyUsedFonts = options.putOnlyUsedFonts || false;\r\n var usedFonts = {};\r\n\r\n var API = {\r\n internal: {},\r\n __private__: {}\r\n };\r\n\r\n API.__private__.PubSub = PubSub;\r\n\r\n var pdfVersion = \"1.3\";\r\n var getPdfVersion = (API.__private__.getPdfVersion = function() {\r\n return pdfVersion;\r\n });\r\n\r\n API.__private__.setPdfVersion = function(value) {\r\n pdfVersion = value;\r\n };\r\n\r\n // Size in pt of various paper formats\r\n var pageFormats = {\r\n a0: [2383.94, 3370.39],\r\n a1: [1683.78, 2383.94],\r\n a2: [1190.55, 1683.78],\r\n a3: [841.89, 1190.55],\r\n a4: [595.28, 841.89],\r\n a5: [419.53, 595.28],\r\n a6: [297.64, 419.53],\r\n a7: [209.76, 297.64],\r\n a8: [147.4, 209.76],\r\n a9: [104.88, 147.4],\r\n a10: [73.7, 104.88],\r\n b0: [2834.65, 4008.19],\r\n b1: [2004.09, 2834.65],\r\n b2: [1417.32, 2004.09],\r\n b3: [1000.63, 1417.32],\r\n b4: [708.66, 1000.63],\r\n b5: [498.9, 708.66],\r\n b6: [354.33, 498.9],\r\n b7: [249.45, 354.33],\r\n b8: [175.75, 249.45],\r\n b9: [124.72, 175.75],\r\n b10: [87.87, 124.72],\r\n c0: [2599.37, 3676.54],\r\n c1: [1836.85, 2599.37],\r\n c2: [1298.27, 1836.85],\r\n c3: [918.43, 1298.27],\r\n c4: [649.13, 918.43],\r\n c5: [459.21, 649.13],\r\n c6: [323.15, 459.21],\r\n c7: [229.61, 323.15],\r\n c8: [161.57, 229.61],\r\n c9: [113.39, 161.57],\r\n c10: [79.37, 113.39],\r\n dl: [311.81, 623.62],\r\n letter: [612, 792],\r\n \"government-letter\": [576, 756],\r\n legal: [612, 1008],\r\n \"junior-legal\": [576, 360],\r\n ledger: [1224, 792],\r\n tabloid: [792, 1224],\r\n \"credit-card\": [153, 243]\r\n };\r\n\r\n API.__private__.getPageFormats = function() {\r\n return pageFormats;\r\n };\r\n\r\n var getPageFormat = (API.__private__.getPageFormat = function(value) {\r\n return pageFormats[value];\r\n });\r\n\r\n format = format || \"a4\";\r\n\r\n var ApiMode = {\r\n COMPAT: \"compat\",\r\n ADVANCED: \"advanced\"\r\n };\r\n var apiMode = ApiMode.COMPAT;\r\n\r\n function advancedAPI() {\r\n // prepend global change of basis matrix\r\n // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix\r\n // that does this job for us (however, texts, images and similar objects must be drawn bottom up))\r\n this.saveGraphicsState();\r\n out(\r\n new Matrix(\r\n scaleFactor,\r\n 0,\r\n 0,\r\n -scaleFactor,\r\n 0,\r\n getPageHeight() * scaleFactor\r\n ).toString() + \" cm\"\r\n );\r\n this.setFontSize(this.getFontSize() / scaleFactor);\r\n\r\n // The default in MrRio's implementation is \"S\" (stroke), whereas the default in the yWorks implementation\r\n // was \"n\" (none). Although this has nothing to do with transforms, we should use the API switch here.\r\n defaultPathOperation = \"n\";\r\n\r\n apiMode = ApiMode.ADVANCED;\r\n }\r\n\r\n function compatAPI() {\r\n this.restoreGraphicsState();\r\n defaultPathOperation = \"S\";\r\n apiMode = ApiMode.COMPAT;\r\n }\r\n\r\n /**\r\n * @function combineFontStyleAndFontWeight\r\n * @param {string} fontStyle Fontstyle or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @returns {string}\r\n * @private\r\n */\r\n var combineFontStyleAndFontWeight = (API.__private__.combineFontStyleAndFontWeight = function(\r\n fontStyle,\r\n fontWeight\r\n ) {\r\n if (\r\n (fontStyle == \"bold\" && fontWeight == \"normal\") ||\r\n (fontStyle == \"bold\" && fontWeight == 400) ||\r\n (fontStyle == \"normal\" && fontWeight == \"italic\") ||\r\n (fontStyle == \"bold\" && fontWeight == \"italic\")\r\n ) {\r\n throw new Error(\"Invalid Combination of fontweight and fontstyle\");\r\n }\r\n if (fontWeight) {\r\n fontStyle =\r\n fontWeight == 400 || fontWeight === \"normal\"\r\n ? fontStyle === \"italic\"\r\n ? \"italic\"\r\n : \"normal\"\r\n : (fontWeight == 700 || fontWeight === \"bold\") &&\r\n fontStyle === \"normal\"\r\n ? \"bold\"\r\n : (fontWeight == 700 ? \"bold\" : fontWeight) + \"\" + fontStyle;\r\n }\r\n return fontStyle;\r\n });\r\n\r\n /**\r\n * @callback ApiSwitchBody\r\n * @param {jsPDF} pdf\r\n */\r\n\r\n /**\r\n * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual\r\n * screen coordinates and the PDF coordinate system.\r\n * - \"compat\": Offers full compatibility across all plugins but does not allow arbitrary transforms\r\n * - \"advanced\": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might\r\n * not support this mode, though.\r\n * Initial mode is \"compat\".\r\n *\r\n * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to\r\n * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}.\r\n *\r\n * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the\r\n * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject}\r\n * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to \"compat\" API mode.\r\n *\r\n * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n * The API mode will be switched back automatically afterwards.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name advancedAPI\r\n */\r\n API.advancedAPI = function(body) {\r\n var doSwitch = apiMode === ApiMode.COMPAT;\r\n\r\n if (doSwitch) {\r\n advancedAPI.call(this);\r\n }\r\n\r\n if (typeof body !== \"function\") {\r\n return this;\r\n }\r\n\r\n body(this);\r\n\r\n if (doSwitch) {\r\n compatAPI.call(this);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches to \"compat\" API mode. See {@link advancedAPI} for more details.\r\n *\r\n * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n * The API mode will be switched back automatically afterwards.\r\n * @return {jsPDF}\r\n * @memberof jsPDF#\r\n * @name compatApi\r\n */\r\n API.compatAPI = function(body) {\r\n var doSwitch = apiMode === ApiMode.ADVANCED;\r\n\r\n if (doSwitch) {\r\n compatAPI.call(this);\r\n }\r\n\r\n if (typeof body !== \"function\") {\r\n return this;\r\n }\r\n\r\n body(this);\r\n\r\n if (doSwitch) {\r\n advancedAPI.call(this);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * @return {boolean} True iff the current API mode is \"advanced\". See {@link advancedAPI}.\r\n * @memberof jsPDF#\r\n * @name isAdvancedAPI\r\n */\r\n API.isAdvancedAPI = function() {\r\n return apiMode === ApiMode.ADVANCED;\r\n };\r\n\r\n var advancedApiModeTrap = function(methodName) {\r\n if (apiMode !== ApiMode.ADVANCED) {\r\n throw new Error(\r\n methodName +\r\n \" is only available in 'advanced' API mode. \" +\r\n \"You need to call advancedAPI() first.\"\r\n );\r\n }\r\n };\r\n\r\n var roundToPrecision = (API.roundToPrecision = API.__private__.roundToPrecision = function(\r\n number,\r\n parmPrecision\r\n ) {\r\n var tmpPrecision = precision || parmPrecision;\r\n if (isNaN(number) || isNaN(tmpPrecision)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");\r\n }\r\n return number.toFixed(tmpPrecision).replace(/0+$/, \"\");\r\n });\r\n\r\n // high precision float\r\n var hpf;\r\n if (typeof floatPrecision === \"number\") {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n return roundToPrecision(number, floatPrecision);\r\n };\r\n } else if (floatPrecision === \"smart\") {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n if (number > -1 && number < 1) {\r\n return roundToPrecision(number, 16);\r\n } else {\r\n return roundToPrecision(number, 5);\r\n }\r\n };\r\n } else {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n return roundToPrecision(number, 16);\r\n };\r\n }\r\n var f2 = (API.f2 = API.__private__.f2 = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.f2\");\r\n }\r\n return roundToPrecision(number, 2);\r\n });\r\n\r\n var f3 = (API.__private__.f3 = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.f3\");\r\n }\r\n return roundToPrecision(number, 3);\r\n });\r\n\r\n var scale = (API.scale = API.__private__.scale = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.scale\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return number * scaleFactor;\r\n } else if (apiMode === ApiMode.ADVANCED) {\r\n return number;\r\n }\r\n });\r\n\r\n var transformY = function(y) {\r\n if (apiMode === ApiMode.COMPAT) {\r\n return getPageHeight() - y;\r\n } else if (apiMode === ApiMode.ADVANCED) {\r\n return y;\r\n }\r\n };\r\n\r\n var transformScaleY = function(y) {\r\n return scale(transformY(y));\r\n };\r\n\r\n /**\r\n * @name setPrecision\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {string} precision\r\n * @returns {jsPDF}\r\n */\r\n API.__private__.setPrecision = API.setPrecision = function(value) {\r\n if (typeof parseInt(value, 10) === \"number\") {\r\n precision = parseInt(value, 10);\r\n }\r\n };\r\n\r\n var fileId = \"00000000000000000000000000000000\";\r\n\r\n var getFileId = (API.__private__.getFileId = function() {\r\n return fileId;\r\n });\r\n\r\n var setFileId = (API.__private__.setFileId = function(value) {\r\n if (typeof value !== \"undefined\" && /^[a-fA-F0-9]{32}$/.test(value)) {\r\n fileId = value.toUpperCase();\r\n } else {\r\n fileId = fileId\r\n .split(\"\")\r\n .map(function() {\r\n return \"ABCDEF0123456789\".charAt(Math.floor(Math.random() * 16));\r\n })\r\n .join(\"\");\r\n }\r\n\r\n if (encryptionOptions !== null) {\r\n encryption = new PDFSecurity(\r\n encryptionOptions.userPermissions,\r\n encryptionOptions.userPassword,\r\n encryptionOptions.ownerPassword,\r\n fileId\r\n );\r\n }\r\n return fileId;\r\n });\r\n\r\n /**\r\n * @name setFileId\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {string} value GUID.\r\n * @returns {jsPDF}\r\n */\r\n API.setFileId = function(value) {\r\n setFileId(value);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name getFileId\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n *\r\n * @returns {string} GUID.\r\n */\r\n API.getFileId = function() {\r\n return getFileId();\r\n };\r\n\r\n var creationDate;\r\n\r\n var convertDateToPDFDate = (API.__private__.convertDateToPDFDate = function(\r\n parmDate\r\n ) {\r\n var result = \"\";\r\n var tzoffset = parmDate.getTimezoneOffset(),\r\n tzsign = tzoffset < 0 ? \"+\" : \"-\",\r\n tzhour = Math.floor(Math.abs(tzoffset / 60)),\r\n tzmin = Math.abs(tzoffset % 60),\r\n timeZoneString = [tzsign, padd2(tzhour), \"'\", padd2(tzmin), \"'\"].join(\"\");\r\n\r\n result = [\r\n \"D:\",\r\n parmDate.getFullYear(),\r\n padd2(parmDate.getMonth() + 1),\r\n padd2(parmDate.getDate()),\r\n padd2(parmDate.getHours()),\r\n padd2(parmDate.getMinutes()),\r\n padd2(parmDate.getSeconds()),\r\n timeZoneString\r\n ].join(\"\");\r\n return result;\r\n });\r\n\r\n var convertPDFDateToDate = (API.__private__.convertPDFDateToDate = function(\r\n parmPDFDate\r\n ) {\r\n var year = parseInt(parmPDFDate.substr(2, 4), 10);\r\n var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1;\r\n var date = parseInt(parmPDFDate.substr(8, 2), 10);\r\n var hour = parseInt(parmPDFDate.substr(10, 2), 10);\r\n var minutes = parseInt(parmPDFDate.substr(12, 2), 10);\r\n var seconds = parseInt(parmPDFDate.substr(14, 2), 10);\r\n // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10);\r\n // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10);\r\n\r\n var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0);\r\n return resultingDate;\r\n });\r\n\r\n var setCreationDate = (API.__private__.setCreationDate = function(date) {\r\n var tmpCreationDateString;\r\n var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/;\r\n if (typeof date === \"undefined\") {\r\n date = new Date();\r\n }\r\n\r\n if (date instanceof Date) {\r\n tmpCreationDateString = convertDateToPDFDate(date);\r\n } else if (regexPDFCreationDate.test(date)) {\r\n tmpCreationDateString = date;\r\n } else {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");\r\n }\r\n creationDate = tmpCreationDateString;\r\n return creationDate;\r\n });\r\n\r\n var getCreationDate = (API.__private__.getCreationDate = function(type) {\r\n var result = creationDate;\r\n if (type === \"jsDate\") {\r\n result = convertPDFDateToDate(creationDate);\r\n }\r\n return result;\r\n });\r\n\r\n /**\r\n * @name setCreationDate\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {Object} date\r\n * @returns {jsPDF}\r\n */\r\n API.setCreationDate = function(date) {\r\n setCreationDate(date);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name getCreationDate\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {Object} type\r\n * @returns {Object}\r\n */\r\n API.getCreationDate = function(type) {\r\n return getCreationDate(type);\r\n };\r\n\r\n var padd2 = (API.__private__.padd2 = function(number) {\r\n return (\"0\" + parseInt(number)).slice(-2);\r\n });\r\n\r\n var padd2Hex = (API.__private__.padd2Hex = function(hexString) {\r\n hexString = hexString.toString();\r\n return (\"00\" + hexString).substr(hexString.length);\r\n });\r\n\r\n var objectNumber = 0; // 'n' Current object number\r\n var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes.\r\n var content = [];\r\n var contentLength = 0;\r\n var additionalObjects = [];\r\n\r\n var pages = [];\r\n var currentPage;\r\n var hasCustomDestination = false;\r\n var outputDestination = content;\r\n\r\n var resetDocument = function() {\r\n //reset fields relevant for objectNumber generation and xref.\r\n objectNumber = 0;\r\n contentLength = 0;\r\n content = [];\r\n offsets = [];\r\n additionalObjects = [];\r\n\r\n rootDictionaryObjId = newObjectDeferred();\r\n resourceDictionaryObjId = newObjectDeferred();\r\n };\r\n\r\n API.__private__.setCustomOutputDestination = function(destination) {\r\n hasCustomDestination = true;\r\n outputDestination = destination;\r\n };\r\n var setOutputDestination = function(destination) {\r\n if (!hasCustomDestination) {\r\n outputDestination = destination;\r\n }\r\n };\r\n\r\n API.__private__.resetCustomOutputDestination = function() {\r\n hasCustomDestination = false;\r\n outputDestination = content;\r\n };\r\n\r\n var out = (API.__private__.out = function(string) {\r\n string = string.toString();\r\n contentLength += string.length + 1;\r\n outputDestination.push(string);\r\n\r\n return outputDestination;\r\n });\r\n\r\n var write = (API.__private__.write = function(value) {\r\n return out(\r\n arguments.length === 1\r\n ? value.toString()\r\n : Array.prototype.join.call(arguments, \" \")\r\n );\r\n });\r\n\r\n var getArrayBuffer = (API.__private__.getArrayBuffer = function(data) {\r\n var len = data.length,\r\n ab = new ArrayBuffer(len),\r\n u8 = new Uint8Array(ab);\r\n\r\n while (len--) u8[len] = data.charCodeAt(len);\r\n return ab;\r\n });\r\n\r\n var standardFonts = [\r\n [\"Helvetica\", \"helvetica\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-Bold\", \"helvetica\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-Oblique\", \"helvetica\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-BoldOblique\", \"helvetica\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"Courier\", \"courier\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Courier-Bold\", \"courier\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Courier-Oblique\", \"courier\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Courier-BoldOblique\", \"courier\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"Times-Roman\", \"times\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Times-Bold\", \"times\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Times-Italic\", \"times\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Times-BoldItalic\", \"times\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"ZapfDingbats\", \"zapfdingbats\", \"normal\", null],\r\n [\"Symbol\", \"symbol\", \"normal\", null]\r\n ];\r\n\r\n API.__private__.getStandardFonts = function() {\r\n return standardFonts;\r\n };\r\n\r\n var activeFontSize = options.fontSize || 16;\r\n\r\n /**\r\n * Sets font size for upcoming text elements.\r\n *\r\n * @param {number} size Font size in points.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFontSize\r\n */\r\n API.__private__.setFontSize = API.setFontSize = function(size) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n activeFontSize = size / scaleFactor;\r\n } else {\r\n activeFontSize = size;\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the fontsize for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number}\r\n * @memberof jsPDF#\r\n * @name getFontSize\r\n */\r\n var getFontSize = (API.__private__.getFontSize = API.getFontSize = function() {\r\n if (apiMode === ApiMode.COMPAT) {\r\n return activeFontSize;\r\n } else {\r\n return activeFontSize * scaleFactor;\r\n }\r\n });\r\n\r\n var R2L = options.R2L || false;\r\n\r\n /**\r\n * Set value of R2L functionality.\r\n *\r\n * @param {boolean} value\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setR2L\r\n */\r\n API.__private__.setR2L = API.setR2L = function(value) {\r\n R2L = value;\r\n return this;\r\n };\r\n\r\n /**\r\n * Get value of R2L functionality.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {boolean} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name getR2L\r\n */\r\n API.__private__.getR2L = API.getR2L = function() {\r\n return R2L;\r\n };\r\n\r\n var zoomMode; // default: 1;\r\n\r\n var setZoomMode = (API.__private__.setZoomMode = function(zoom) {\r\n var validZoomModes = [\r\n undefined,\r\n null,\r\n \"fullwidth\",\r\n \"fullheight\",\r\n \"fullpage\",\r\n \"original\"\r\n ];\r\n\r\n if (/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(zoom)) {\r\n zoomMode = zoom;\r\n } else if (!isNaN(zoom)) {\r\n zoomMode = parseInt(zoom, 10);\r\n } else if (validZoomModes.indexOf(zoom) !== -1) {\r\n zoomMode = zoom;\r\n } else {\r\n throw new Error(\r\n 'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"' +\r\n zoom +\r\n '\" is not recognized.'\r\n );\r\n }\r\n });\r\n\r\n API.__private__.getZoomMode = function() {\r\n return zoomMode;\r\n };\r\n\r\n var pageMode; // default: 'UseOutlines';\r\n var setPageMode = (API.__private__.setPageMode = function(pmode) {\r\n var validPageModes = [\r\n undefined,\r\n null,\r\n \"UseNone\",\r\n \"UseOutlines\",\r\n \"UseThumbs\",\r\n \"FullScreen\"\r\n ];\r\n\r\n if (validPageModes.indexOf(pmode) == -1) {\r\n throw new Error(\r\n 'Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"' +\r\n pmode +\r\n '\" is not recognized.'\r\n );\r\n }\r\n pageMode = pmode;\r\n });\r\n\r\n API.__private__.getPageMode = function() {\r\n return pageMode;\r\n };\r\n\r\n var layoutMode; // default: 'continuous';\r\n var setLayoutMode = (API.__private__.setLayoutMode = function(layout) {\r\n var validLayoutModes = [\r\n undefined,\r\n null,\r\n \"continuous\",\r\n \"single\",\r\n \"twoleft\",\r\n \"tworight\",\r\n \"two\"\r\n ];\r\n\r\n if (validLayoutModes.indexOf(layout) == -1) {\r\n throw new Error(\r\n 'Layout mode must be one of continuous, single, twoleft, tworight. \"' +\r\n layout +\r\n '\" is not recognized.'\r\n );\r\n }\r\n layoutMode = layout;\r\n });\r\n\r\n API.__private__.getLayoutMode = function() {\r\n return layoutMode;\r\n };\r\n\r\n /**\r\n * Set the display mode options of the page like zoom and layout.\r\n *\r\n * @name setDisplayMode\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {integer|String} zoom You can pass an integer or percentage as\r\n * a string. 2 will scale the document up 2x, '200%' will scale up by the\r\n * same amount. You can also set it to 'fullwidth', 'fullheight',\r\n * 'fullpage', or 'original'.\r\n *\r\n * Only certain PDF readers support this, such as Adobe Acrobat.\r\n *\r\n * @param {string} layout Layout mode can be: 'continuous' - this is the\r\n * default continuous scroll. 'single' - the single page mode only shows one\r\n * page at a time. 'twoleft' - two column left mode, first page starts on\r\n * the left, and 'tworight' - pages are laid out in two columns, with the\r\n * first page on the right. This would be used for books.\r\n * @param {string} pmode 'UseOutlines' - it shows the\r\n * outline of the document on the left. 'UseThumbs' - shows thumbnails along\r\n * the left. 'FullScreen' - prompts the user to enter fullscreen mode.\r\n *\r\n * @returns {jsPDF}\r\n */\r\n API.__private__.setDisplayMode = API.setDisplayMode = function(\r\n zoom,\r\n layout,\r\n pmode\r\n ) {\r\n setZoomMode(zoom);\r\n setLayoutMode(layout);\r\n setPageMode(pmode);\r\n return this;\r\n };\r\n\r\n var documentProperties = {\r\n title: \"\",\r\n subject: \"\",\r\n author: \"\",\r\n keywords: \"\",\r\n creator: \"\"\r\n };\r\n\r\n API.__private__.getDocumentProperty = function(key) {\r\n if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");\r\n }\r\n return documentProperties[key];\r\n };\r\n\r\n API.__private__.getDocumentProperties = function() {\r\n return documentProperties;\r\n };\r\n\r\n /**\r\n * Adds a properties to the PDF document.\r\n *\r\n * @param {Object} A property_name-to-property_value object structure.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDocumentProperties\r\n */\r\n API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function(\r\n properties\r\n ) {\r\n // copying only those properties we can render.\r\n for (var property in documentProperties) {\r\n if (documentProperties.hasOwnProperty(property) && properties[property]) {\r\n documentProperties[property] = properties[property];\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n API.__private__.setDocumentProperty = function(key, value) {\r\n if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");\r\n }\r\n return (documentProperties[key] = value);\r\n };\r\n\r\n var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font.\r\n var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont()\r\n var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle\r\n var fontStateStack = []; //\r\n var patterns = {}; // collection of pattern objects\r\n var patternMap = {}; // see fonts\r\n var gStates = {}; // collection of graphic state objects\r\n var gStatesMap = {}; // see fonts\r\n var activeGState = null;\r\n var scaleFactor; // Scale factor\r\n var page = 0;\r\n var pagesContext = [];\r\n var events = new PubSub(API);\r\n var hotfixes = options.hotfixes || [];\r\n\r\n var renderTargets = {};\r\n var renderTargetMap = {};\r\n var renderTargetStack = [];\r\n var pageX;\r\n var pageY;\r\n var pageMatrix; // only used for FormObjects\r\n\r\n /**\r\n * A matrix object for 2D homogenous transformations:
    \r\n * | a b 0 |
    \r\n * | c d 0 |
    \r\n * | e f 1 |
    \r\n * pdf multiplies matrices righthand: v' = v x m1 x m2 x ...\r\n *\r\n * @class\r\n * @name Matrix\r\n * @param {number} sx\r\n * @param {number} shy\r\n * @param {number} shx\r\n * @param {number} sy\r\n * @param {number} tx\r\n * @param {number} ty\r\n * @constructor\r\n */\r\n var Matrix = function(sx, shy, shx, sy, tx, ty) {\r\n if (!(this instanceof Matrix)) {\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n }\r\n\r\n if (isNaN(sx)) sx = 1;\r\n if (isNaN(shy)) shy = 0;\r\n if (isNaN(shx)) shx = 0;\r\n if (isNaN(sy)) sy = 1;\r\n if (isNaN(tx)) tx = 0;\r\n if (isNaN(ty)) ty = 0;\r\n\r\n this._matrix = [sx, shy, shx, sy, tx, ty];\r\n };\r\n\r\n /**\r\n * @name sx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"sx\", {\r\n get: function() {\r\n return this._matrix[0];\r\n },\r\n set: function(value) {\r\n this._matrix[0] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name shy\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"shy\", {\r\n get: function() {\r\n return this._matrix[1];\r\n },\r\n set: function(value) {\r\n this._matrix[1] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name shx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"shx\", {\r\n get: function() {\r\n return this._matrix[2];\r\n },\r\n set: function(value) {\r\n this._matrix[2] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name sy\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"sy\", {\r\n get: function() {\r\n return this._matrix[3];\r\n },\r\n set: function(value) {\r\n this._matrix[3] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name tx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"tx\", {\r\n get: function() {\r\n return this._matrix[4];\r\n },\r\n set: function(value) {\r\n this._matrix[4] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ty\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"ty\", {\r\n get: function() {\r\n return this._matrix[5];\r\n },\r\n set: function(value) {\r\n this._matrix[5] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"a\", {\r\n get: function() {\r\n return this._matrix[0];\r\n },\r\n set: function(value) {\r\n this._matrix[0] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"b\", {\r\n get: function() {\r\n return this._matrix[1];\r\n },\r\n set: function(value) {\r\n this._matrix[1] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"c\", {\r\n get: function() {\r\n return this._matrix[2];\r\n },\r\n set: function(value) {\r\n this._matrix[2] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"d\", {\r\n get: function() {\r\n return this._matrix[3];\r\n },\r\n set: function(value) {\r\n this._matrix[3] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"e\", {\r\n get: function() {\r\n return this._matrix[4];\r\n },\r\n set: function(value) {\r\n this._matrix[4] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"f\", {\r\n get: function() {\r\n return this._matrix[5];\r\n },\r\n set: function(value) {\r\n this._matrix[5] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name rotation\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"rotation\", {\r\n get: function() {\r\n return Math.atan2(this.shx, this.sx);\r\n }\r\n });\r\n\r\n /**\r\n * @name scaleX\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"scaleX\", {\r\n get: function() {\r\n return this.decompose().scale.sx;\r\n }\r\n });\r\n\r\n /**\r\n * @name scaleY\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"scaleY\", {\r\n get: function() {\r\n return this.decompose().scale.sy;\r\n }\r\n });\r\n\r\n /**\r\n * @name isIdentity\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"isIdentity\", {\r\n get: function() {\r\n if (this.sx !== 1) {\r\n return false;\r\n }\r\n if (this.shy !== 0) {\r\n return false;\r\n }\r\n if (this.shx !== 0) {\r\n return false;\r\n }\r\n if (this.sy !== 1) {\r\n return false;\r\n }\r\n if (this.tx !== 0) {\r\n return false;\r\n }\r\n if (this.ty !== 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n /**\r\n * Join the Matrix Values to a String\r\n *\r\n * @function join\r\n * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (\",\"). If separator is an empty string, all elements are joined without any characters in between them.\r\n * @returns {string} A string with all array elements joined.\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.join = function(separator) {\r\n return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty]\r\n .map(hpf)\r\n .join(separator);\r\n };\r\n\r\n /**\r\n * Multiply the matrix with given Matrix\r\n *\r\n * @function multiply\r\n * @param matrix\r\n * @returns {Matrix}\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.multiply = function(matrix) {\r\n var sx = matrix.sx * this.sx + matrix.shy * this.shx;\r\n var shy = matrix.sx * this.shy + matrix.shy * this.sy;\r\n var shx = matrix.shx * this.sx + matrix.sy * this.shx;\r\n var sy = matrix.shx * this.shy + matrix.sy * this.sy;\r\n var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx;\r\n var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty;\r\n\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n };\r\n\r\n /**\r\n * @function decompose\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.decompose = function() {\r\n var a = this.sx;\r\n var b = this.shy;\r\n var c = this.shx;\r\n var d = this.sy;\r\n var e = this.tx;\r\n var f = this.ty;\r\n\r\n var scaleX = Math.sqrt(a * a + b * b);\r\n a /= scaleX;\r\n b /= scaleX;\r\n\r\n var shear = a * c + b * d;\r\n c -= a * shear;\r\n d -= b * shear;\r\n\r\n var scaleY = Math.sqrt(c * c + d * d);\r\n c /= scaleY;\r\n d /= scaleY;\r\n shear /= scaleY;\r\n\r\n if (a * d < b * c) {\r\n a = -a;\r\n b = -b;\r\n shear = -shear;\r\n scaleX = -scaleX;\r\n }\r\n\r\n return {\r\n scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0),\r\n translate: new Matrix(1, 0, 0, 1, e, f),\r\n rotate: new Matrix(a, b, -b, a, 0, 0),\r\n skew: new Matrix(1, 0, shear, 1, 0, 0)\r\n };\r\n };\r\n\r\n /**\r\n * @function toString\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.toString = function(parmPrecision) {\r\n return this.join(\" \");\r\n };\r\n\r\n /**\r\n * @function inversed\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.inversed = function() {\r\n var a = this.sx,\r\n b = this.shy,\r\n c = this.shx,\r\n d = this.sy,\r\n e = this.tx,\r\n f = this.ty;\r\n\r\n var quot = 1 / (a * d - b * c);\r\n\r\n var aInv = d * quot;\r\n var bInv = -b * quot;\r\n var cInv = -c * quot;\r\n var dInv = a * quot;\r\n var eInv = -aInv * e - cInv * f;\r\n var fInv = -bInv * e - dInv * f;\r\n\r\n return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv);\r\n };\r\n\r\n /**\r\n * @function applyToPoint\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.applyToPoint = function(pt) {\r\n var x = pt.x * this.sx + pt.y * this.shx + this.tx;\r\n var y = pt.x * this.shy + pt.y * this.sy + this.ty;\r\n return new Point(x, y);\r\n };\r\n\r\n /**\r\n * @function applyToRectangle\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.applyToRectangle = function(rect) {\r\n var pt1 = this.applyToPoint(rect);\r\n var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h));\r\n return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y);\r\n };\r\n\r\n /**\r\n * Clone the Matrix\r\n *\r\n * @function clone\r\n * @memberof Matrix#\r\n * @name clone\r\n * @instance\r\n */\r\n Matrix.prototype.clone = function() {\r\n var sx = this.sx;\r\n var shy = this.shy;\r\n var shx = this.shx;\r\n var sy = this.sy;\r\n var tx = this.tx;\r\n var ty = this.ty;\r\n\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n };\r\n\r\n API.Matrix = Matrix;\r\n\r\n /**\r\n * Multiplies two matrices. (see {@link Matrix})\r\n * @param {Matrix} m1\r\n * @param {Matrix} m2\r\n * @memberof jsPDF#\r\n * @name matrixMult\r\n */\r\n var matrixMult = (API.matrixMult = function(m1, m2) {\r\n return m2.multiply(m1);\r\n });\r\n\r\n /**\r\n * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)).\r\n * @type {Matrix}\r\n * @memberof! jsPDF#\r\n * @name identityMatrix\r\n */\r\n var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0);\r\n API.unitMatrix = API.identityMatrix = identityMatrix;\r\n\r\n /**\r\n * Adds a new pattern for later use.\r\n * @param {String} key The key by it can be referenced later. The keys must be unique!\r\n * @param {API.Pattern} pattern The pattern\r\n */\r\n var addPattern = function(key, pattern) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (patternMap[key]) return;\r\n\r\n var prefix = pattern instanceof ShadingPattern ? \"Sh\" : \"P\";\r\n var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10);\r\n pattern.id = patternKey;\r\n\r\n patternMap[key] = patternKey;\r\n patterns[patternKey] = pattern;\r\n\r\n events.publish(\"addPattern\", pattern);\r\n };\r\n\r\n /**\r\n * A pattern describing a shading pattern.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {String} type One of \"axial\" or \"radial\"\r\n * @param {Array} coords Either [x1, y1, x2, y2] for \"axial\" type describing the two interpolation points\r\n * or [x1, y1, r, x2, y2, r2] for \"radial\" describing inner and the outer circle.\r\n * @param {Array} colors An array of objects with the fields \"offset\" and \"color\". \"offset\" describes\r\n * the offset in parameter space [0, 1]. \"color\" is an array of length 3 describing RGB values in [0, 255].\r\n * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n * and the use coordinate system (optional).\r\n * @constructor\r\n * @extends API.Pattern\r\n */\r\n API.ShadingPattern = ShadingPattern;\r\n\r\n /**\r\n * A PDF Tiling pattern.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {Array.} boundingBox The bounding box at which one pattern cell gets clipped.\r\n * @param {Number} xStep Horizontal spacing between pattern cells.\r\n * @param {Number} yStep Vertical spacing between pattern cells.\r\n * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n * and the use coordinate system (optional).\r\n * @constructor\r\n * @extends API.Pattern\r\n */\r\n API.TilingPattern = TilingPattern;\r\n\r\n /**\r\n * Adds a new {@link API.ShadingPattern} for later use. Only available in \"advanced\" API mode.\r\n * @param {String} key\r\n * @param {Pattern} pattern\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name addPattern\r\n */\r\n API.addShadingPattern = function(key, pattern) {\r\n advancedApiModeTrap(\"addShadingPattern()\");\r\n\r\n addPattern(key, pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern}\r\n * gets called. Only available in \"advanced\" API mode.\r\n * @param {API.Pattern} pattern\r\n * @memberof jsPDF#\r\n * @name beginTilingPattern\r\n */\r\n API.beginTilingPattern = function(pattern) {\r\n advancedApiModeTrap(\"beginTilingPattern()\");\r\n\r\n beginNewRenderTarget(\r\n pattern.boundingBox[0],\r\n pattern.boundingBox[1],\r\n pattern.boundingBox[2] - pattern.boundingBox[0],\r\n pattern.boundingBox[3] - pattern.boundingBox[1],\r\n pattern.matrix\r\n );\r\n };\r\n\r\n /**\r\n * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {string} key A unique key that is used to reference this pattern at later use.\r\n * @param {API.Pattern} pattern The pattern to end.\r\n * @memberof jsPDF#\r\n * @name endTilingPattern\r\n */\r\n API.endTilingPattern = function(key, pattern) {\r\n advancedApiModeTrap(\"endTilingPattern()\");\r\n\r\n // retrieve the stream\r\n pattern.stream = pages[currentPage].join(\"\\n\");\r\n\r\n addPattern(key, pattern);\r\n\r\n events.publish(\"endTilingPattern\", pattern);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n var newObject = (API.__private__.newObject = function() {\r\n var oid = newObjectDeferred();\r\n newObjectDeferredBegin(oid, true);\r\n return oid;\r\n });\r\n\r\n // Does not output the object. The caller must call newObjectDeferredBegin(oid) before outputing any data\r\n var newObjectDeferred = (API.__private__.newObjectDeferred = function() {\r\n objectNumber++;\r\n offsets[objectNumber] = function() {\r\n return contentLength;\r\n };\r\n return objectNumber;\r\n });\r\n\r\n var newObjectDeferredBegin = function(oid, doOutput) {\r\n doOutput = typeof doOutput === \"boolean\" ? doOutput : false;\r\n offsets[oid] = contentLength;\r\n if (doOutput) {\r\n out(oid + \" 0 obj\");\r\n }\r\n return oid;\r\n };\r\n // Does not output the object until after the pages have been output.\r\n // Returns an object containing the objectId and content.\r\n // All pages have been added so the object ID can be estimated to start right after.\r\n // This does not modify the current objectNumber; It must be updated after the newObjects are output.\r\n var newAdditionalObject = (API.__private__.newAdditionalObject = function() {\r\n var objId = newObjectDeferred();\r\n var obj = {\r\n objId: objId,\r\n content: \"\"\r\n };\r\n additionalObjects.push(obj);\r\n return obj;\r\n });\r\n\r\n var rootDictionaryObjId = newObjectDeferred();\r\n var resourceDictionaryObjId = newObjectDeferred();\r\n\r\n /////////////////////\r\n // Private functions\r\n /////////////////////\r\n\r\n var decodeColorString = (API.__private__.decodeColorString = function(color) {\r\n var colorEncoded = color.split(\" \");\r\n if (\r\n colorEncoded.length === 2 &&\r\n (colorEncoded[1] === \"g\" || colorEncoded[1] === \"G\")\r\n ) {\r\n // convert grayscale value to rgb so that it can be converted to hex for consistency\r\n var floatVal = parseFloat(colorEncoded[0]);\r\n colorEncoded = [floatVal, floatVal, floatVal, \"r\"];\r\n } else if (\r\n colorEncoded.length === 5 &&\r\n (colorEncoded[4] === \"k\" || colorEncoded[4] === \"K\")\r\n ) {\r\n // convert CMYK values to rbg so that it can be converted to hex for consistency\r\n var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]);\r\n var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]);\r\n var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]);\r\n\r\n colorEncoded = [red, green, blue, \"r\"];\r\n }\r\n var colorAsRGB = \"#\";\r\n for (var i = 0; i < 3; i++) {\r\n colorAsRGB += (\r\n \"0\" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16)\r\n ).slice(-2);\r\n }\r\n return colorAsRGB;\r\n });\r\n\r\n var encodeColorString = (API.__private__.encodeColorString = function(\r\n options\r\n ) {\r\n var color;\r\n\r\n if (typeof options === \"string\") {\r\n options = {\r\n ch1: options\r\n };\r\n }\r\n var ch1 = options.ch1;\r\n var ch2 = options.ch2;\r\n var ch3 = options.ch3;\r\n var ch4 = options.ch4;\r\n var letterArray =\r\n options.pdfColorType === \"draw\" ? [\"G\", \"RG\", \"K\"] : [\"g\", \"rg\", \"k\"];\r\n\r\n if (typeof ch1 === \"string\" && ch1.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(ch1);\r\n if (rgbColor.ok) {\r\n ch1 = rgbColor.toHex();\r\n } else if (!/^\\d*\\.?\\d*$/.test(ch1)) {\r\n throw new Error(\r\n 'Invalid color \"' + ch1 + '\" passed to jsPDF.encodeColorString.'\r\n );\r\n }\r\n }\r\n //convert short rgb to long form\r\n if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) {\r\n ch1 = \"#\" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3];\r\n }\r\n\r\n if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) {\r\n var hex = parseInt(ch1.substr(1), 16);\r\n ch1 = (hex >> 16) & 255;\r\n ch2 = (hex >> 8) & 255;\r\n ch3 = hex & 255;\r\n }\r\n\r\n if (\r\n typeof ch2 === \"undefined\" ||\r\n (typeof ch4 === \"undefined\" && ch1 === ch2 && ch2 === ch3)\r\n ) {\r\n // Gray color space.\r\n if (typeof ch1 === \"string\") {\r\n color = ch1 + \" \" + letterArray[0];\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = f2(ch1 / 255) + \" \" + letterArray[0];\r\n break;\r\n case 3:\r\n default:\r\n color = f3(ch1 / 255) + \" \" + letterArray[0];\r\n }\r\n }\r\n } else if (typeof ch4 === \"undefined\" || typeof ch4 === \"object\") {\r\n // assume RGBA\r\n if (ch4 && !isNaN(ch4.a)) {\r\n //TODO Implement transparency.\r\n //WORKAROUND use white for now, if transparent, otherwise handle as rgb\r\n if (ch4.a === 0) {\r\n color = [\"1.\", \"1.\", \"1.\", letterArray[1]].join(\" \");\r\n return color;\r\n }\r\n }\r\n // assume RGB\r\n if (typeof ch1 === \"string\") {\r\n color = [ch1, ch2, ch3, letterArray[1]].join(\" \");\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = [\r\n f2(ch1 / 255),\r\n f2(ch2 / 255),\r\n f2(ch3 / 255),\r\n letterArray[1]\r\n ].join(\" \");\r\n break;\r\n default:\r\n case 3:\r\n color = [\r\n f3(ch1 / 255),\r\n f3(ch2 / 255),\r\n f3(ch3 / 255),\r\n letterArray[1]\r\n ].join(\" \");\r\n }\r\n }\r\n } else {\r\n // assume CMYK\r\n if (typeof ch1 === \"string\") {\r\n color = [ch1, ch2, ch3, ch4, letterArray[2]].join(\" \");\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(\r\n \" \"\r\n );\r\n break;\r\n case 3:\r\n default:\r\n color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(\r\n \" \"\r\n );\r\n }\r\n }\r\n }\r\n return color;\r\n });\r\n\r\n var getFilters = (API.__private__.getFilters = function() {\r\n return filters;\r\n });\r\n\r\n var putStream = (API.__private__.putStream = function(options) {\r\n options = options || {};\r\n var data = options.data || \"\";\r\n var filters = options.filters || getFilters();\r\n var alreadyAppliedFilters = options.alreadyAppliedFilters || [];\r\n var addLength1 = options.addLength1 || false;\r\n var valueOfLength1 = data.length;\r\n var objectId = options.objectId;\r\n var encryptor = function(data) {\r\n return data;\r\n };\r\n if (encryptionOptions !== null && typeof objectId == \"undefined\") {\r\n throw new Error(\r\n \"ObjectId must be passed to putStream for file encryption\"\r\n );\r\n }\r\n if (encryptionOptions !== null) {\r\n encryptor = encryption.encryptor(objectId, 0);\r\n }\r\n\r\n var processedData = {};\r\n if (filters === true) {\r\n filters = [\"FlateEncode\"];\r\n }\r\n var keyValues = options.additionalKeyValues || [];\r\n if (typeof jsPDF.API.processDataByFilters !== \"undefined\") {\r\n processedData = jsPDF.API.processDataByFilters(data, filters);\r\n } else {\r\n processedData = { data: data, reverseChain: [] };\r\n }\r\n var filterAsString =\r\n processedData.reverseChain +\r\n (Array.isArray(alreadyAppliedFilters)\r\n ? alreadyAppliedFilters.join(\" \")\r\n : alreadyAppliedFilters.toString());\r\n\r\n if (processedData.data.length !== 0) {\r\n keyValues.push({\r\n key: \"Length\",\r\n value: processedData.data.length\r\n });\r\n if (addLength1 === true) {\r\n keyValues.push({\r\n key: \"Length1\",\r\n value: valueOfLength1\r\n });\r\n }\r\n }\r\n\r\n if (filterAsString.length != 0) {\r\n if (filterAsString.split(\"/\").length - 1 === 1) {\r\n keyValues.push({\r\n key: \"Filter\",\r\n value: filterAsString\r\n });\r\n } else {\r\n keyValues.push({\r\n key: \"Filter\",\r\n value: \"[\" + filterAsString + \"]\"\r\n });\r\n\r\n for (var j = 0; j < keyValues.length; j += 1) {\r\n if (keyValues[j].key === \"DecodeParms\") {\r\n var decodeParmsArray = [];\r\n\r\n for (\r\n var i = 0;\r\n i < processedData.reverseChain.split(\"/\").length - 1;\r\n i += 1\r\n ) {\r\n decodeParmsArray.push(\"null\");\r\n }\r\n\r\n decodeParmsArray.push(keyValues[j].value);\r\n keyValues[j].value = \"[\" + decodeParmsArray.join(\" \") + \"]\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n out(\"<<\");\r\n for (var k = 0; k < keyValues.length; k++) {\r\n out(\"/\" + keyValues[k].key + \" \" + keyValues[k].value);\r\n }\r\n out(\">>\");\r\n if (processedData.data.length !== 0) {\r\n out(\"stream\");\r\n out(encryptor(processedData.data));\r\n out(\"endstream\");\r\n }\r\n });\r\n\r\n var putPage = (API.__private__.putPage = function(page) {\r\n var pageNumber = page.number;\r\n var data = page.data;\r\n var pageObjectNumber = page.objId;\r\n var pageContentsObjId = page.contentsObjId;\r\n\r\n newObjectDeferredBegin(pageObjectNumber, true);\r\n out(\"<>\");\r\n out(\"endobj\");\r\n // Page content\r\n var pageContent = data.join(\"\\n\");\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again\r\n pageContent += \"\\nQ\";\r\n }\r\n\r\n newObjectDeferredBegin(pageContentsObjId, true);\r\n putStream({\r\n data: pageContent,\r\n filters: getFilters(),\r\n objectId: pageContentsObjId\r\n });\r\n out(\"endobj\");\r\n return pageObjectNumber;\r\n });\r\n\r\n var putPages = (API.__private__.putPages = function() {\r\n var n,\r\n i,\r\n pageObjectNumbers = [];\r\n\r\n for (n = 1; n <= page; n++) {\r\n pagesContext[n].objId = newObjectDeferred();\r\n pagesContext[n].contentsObjId = newObjectDeferred();\r\n }\r\n\r\n for (n = 1; n <= page; n++) {\r\n pageObjectNumbers.push(\r\n putPage({\r\n number: n,\r\n data: pages[n],\r\n objId: pagesContext[n].objId,\r\n contentsObjId: pagesContext[n].contentsObjId,\r\n mediaBox: pagesContext[n].mediaBox,\r\n cropBox: pagesContext[n].cropBox,\r\n bleedBox: pagesContext[n].bleedBox,\r\n trimBox: pagesContext[n].trimBox,\r\n artBox: pagesContext[n].artBox,\r\n userUnit: pagesContext[n].userUnit,\r\n rootDictionaryObjId: rootDictionaryObjId,\r\n resourceDictionaryObjId: resourceDictionaryObjId\r\n })\r\n );\r\n }\r\n newObjectDeferredBegin(rootDictionaryObjId, true);\r\n out(\"<>\");\r\n out(\"endobj\");\r\n events.publish(\"postPutPages\");\r\n });\r\n\r\n var putFont = function(font) {\r\n events.publish(\"putFont\", {\r\n font: font,\r\n out: out,\r\n newObject: newObject,\r\n putStream: putStream\r\n });\r\n\r\n if (font.isAlreadyPutted !== true) {\r\n font.objectNumber = newObject();\r\n out(\"<<\");\r\n out(\"/Type /Font\");\r\n out(\"/BaseFont /\" + toPDFName(font.postScriptName));\r\n out(\"/Subtype /Type1\");\r\n if (typeof font.encoding === \"string\") {\r\n out(\"/Encoding /\" + font.encoding);\r\n }\r\n out(\"/FirstChar 32\");\r\n out(\"/LastChar 255\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n }\r\n };\r\n\r\n var putFonts = function() {\r\n for (var fontKey in fonts) {\r\n if (fonts.hasOwnProperty(fontKey)) {\r\n if (\r\n putOnlyUsedFonts === false ||\r\n (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n ) {\r\n putFont(fonts[fontKey]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var putXObject = function(xObject) {\r\n xObject.objectNumber = newObject();\r\n\r\n var options = [];\r\n options.push({ key: \"Type\", value: \"/XObject\" });\r\n options.push({ key: \"Subtype\", value: \"/Form\" });\r\n options.push({\r\n key: \"BBox\",\r\n value:\r\n \"[\" +\r\n [\r\n hpf(xObject.x),\r\n hpf(xObject.y),\r\n hpf(xObject.x + xObject.width),\r\n hpf(xObject.y + xObject.height)\r\n ].join(\" \") +\r\n \"]\"\r\n });\r\n options.push({\r\n key: \"Matrix\",\r\n value: \"[\" + xObject.matrix.toString() + \"]\"\r\n });\r\n // TODO: /Resources\r\n\r\n var stream = xObject.pages[1].join(\"\\n\");\r\n putStream({\r\n data: stream,\r\n additionalKeyValues: options,\r\n objectId: xObject.objectNumber\r\n });\r\n out(\"endobj\");\r\n };\r\n\r\n var putXObjects = function() {\r\n for (var xObjectKey in renderTargets) {\r\n if (renderTargets.hasOwnProperty(xObjectKey)) {\r\n putXObject(renderTargets[xObjectKey]);\r\n }\r\n }\r\n };\r\n\r\n var interpolateAndEncodeRGBStream = function(colors, numberSamples) {\r\n var tValues = [];\r\n var t;\r\n var dT = 1.0 / (numberSamples - 1);\r\n for (t = 0.0; t < 1.0; t += dT) {\r\n tValues.push(t);\r\n }\r\n tValues.push(1.0);\r\n // add first and last control point if not present\r\n if (colors[0].offset != 0.0) {\r\n var c0 = {\r\n offset: 0.0,\r\n color: colors[0].color\r\n };\r\n colors.unshift(c0);\r\n }\r\n if (colors[colors.length - 1].offset != 1.0) {\r\n var c1 = {\r\n offset: 1.0,\r\n color: colors[colors.length - 1].color\r\n };\r\n colors.push(c1);\r\n }\r\n var out = \"\";\r\n var index = 0;\r\n\r\n for (var i = 0; i < tValues.length; i++) {\r\n t = tValues[i];\r\n while (t > colors[index + 1].offset) index++;\r\n var a = colors[index].offset;\r\n var b = colors[index + 1].offset;\r\n var d = (t - a) / (b - a);\r\n\r\n var aColor = colors[index].color;\r\n var bColor = colors[index + 1].color;\r\n\r\n out +=\r\n padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) +\r\n padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) +\r\n padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16));\r\n }\r\n return out.trim();\r\n };\r\n\r\n var putShadingPattern = function(pattern, numberSamples) {\r\n /*\r\n Axial patterns shade between the two points specified in coords, radial patterns between the inner\r\n and outer circle.\r\n The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now\r\n interpolated to equidistant samples and written to pdf as a sample (type 0) function.\r\n */\r\n // The number of color samples that should be used to describe the shading.\r\n // The higher, the more accurate the gradient will be.\r\n numberSamples || (numberSamples = 21);\r\n var funcObjectNumber = newObject();\r\n var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples);\r\n\r\n var options = [];\r\n options.push({ key: \"FunctionType\", value: \"0\" });\r\n options.push({ key: \"Domain\", value: \"[0.0 1.0]\" });\r\n options.push({ key: \"Size\", value: \"[\" + numberSamples + \"]\" });\r\n options.push({ key: \"BitsPerSample\", value: \"8\" });\r\n options.push({ key: \"Range\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n options.push({ key: \"Decode\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n\r\n putStream({\r\n data: stream,\r\n additionalKeyValues: options,\r\n alreadyAppliedFilters: [\"/ASCIIHexDecode\"],\r\n objectId: funcObjectNumber\r\n });\r\n out(\"endobj\");\r\n\r\n pattern.objectNumber = newObject();\r\n out(\"<< /ShadingType \" + pattern.type);\r\n out(\"/ColorSpace /DeviceRGB\");\r\n var coords =\r\n \"/Coords [\" +\r\n hpf(parseFloat(pattern.coords[0])) +\r\n \" \" + // x1\r\n hpf(parseFloat(pattern.coords[1])) +\r\n \" \"; // y1\r\n if (pattern.type === 2) {\r\n // axial\r\n coords +=\r\n hpf(parseFloat(pattern.coords[2])) +\r\n \" \" + // x2\r\n hpf(parseFloat(pattern.coords[3])); // y2\r\n } else {\r\n // radial\r\n coords +=\r\n hpf(parseFloat(pattern.coords[2])) +\r\n \" \" + // r1\r\n hpf(parseFloat(pattern.coords[3])) +\r\n \" \" + // x2\r\n hpf(parseFloat(pattern.coords[4])) +\r\n \" \" + // y2\r\n hpf(parseFloat(pattern.coords[5])); // r2\r\n }\r\n coords += \"]\";\r\n out(coords);\r\n\r\n if (pattern.matrix) {\r\n out(\"/Matrix [\" + pattern.matrix.toString() + \"]\");\r\n }\r\n out(\"/Function \" + funcObjectNumber + \" 0 R\");\r\n out(\"/Extend [true true]\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putTilingPattern = function(pattern, deferredResourceDictionaryIds) {\r\n var resourcesObjectId = newObjectDeferred();\r\n var patternObjectId = newObject();\r\n\r\n deferredResourceDictionaryIds.push({\r\n resourcesOid: resourcesObjectId,\r\n objectOid: patternObjectId\r\n });\r\n\r\n pattern.objectNumber = patternObjectId;\r\n var options = [];\r\n options.push({ key: \"Type\", value: \"/Pattern\" });\r\n options.push({ key: \"PatternType\", value: \"1\" }); // tiling pattern\r\n options.push({ key: \"PaintType\", value: \"1\" }); // colored tiling pattern\r\n options.push({ key: \"TilingType\", value: \"1\" }); // constant spacing\r\n options.push({\r\n key: \"BBox\",\r\n value: \"[\" + pattern.boundingBox.map(hpf).join(\" \") + \"]\"\r\n });\r\n options.push({ key: \"XStep\", value: hpf(pattern.xStep) });\r\n options.push({ key: \"YStep\", value: hpf(pattern.yStep) });\r\n options.push({ key: \"Resources\", value: resourcesObjectId + \" 0 R\" });\r\n if (pattern.matrix) {\r\n options.push({\r\n key: \"Matrix\",\r\n value: \"[\" + pattern.matrix.toString() + \"]\"\r\n });\r\n }\r\n\r\n putStream({\r\n data: pattern.stream,\r\n additionalKeyValues: options,\r\n objectId: pattern.objectNumber\r\n });\r\n out(\"endobj\");\r\n };\r\n\r\n var putPatterns = function(deferredResourceDictionaryIds) {\r\n var patternKey;\r\n for (patternKey in patterns) {\r\n if (patterns.hasOwnProperty(patternKey)) {\r\n if (patterns[patternKey] instanceof ShadingPattern) {\r\n putShadingPattern(patterns[patternKey]);\r\n } else if (patterns[patternKey] instanceof TilingPattern) {\r\n putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var putGState = function(gState) {\r\n gState.objectNumber = newObject();\r\n out(\"<<\");\r\n for (var p in gState) {\r\n switch (p) {\r\n case \"opacity\":\r\n out(\"/ca \" + f2(gState[p]));\r\n break;\r\n case \"stroke-opacity\":\r\n out(\"/CA \" + f2(gState[p]));\r\n break;\r\n }\r\n }\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putGStates = function() {\r\n var gStateKey;\r\n for (gStateKey in gStates) {\r\n if (gStates.hasOwnProperty(gStateKey)) {\r\n putGState(gStates[gStateKey]);\r\n }\r\n }\r\n };\r\n\r\n var putXobjectDict = function() {\r\n out(\"/XObject <<\");\r\n for (var xObjectKey in renderTargets) {\r\n if (\r\n renderTargets.hasOwnProperty(xObjectKey) &&\r\n renderTargets[xObjectKey].objectNumber >= 0\r\n ) {\r\n out(\r\n \"/\" +\r\n xObjectKey +\r\n \" \" +\r\n renderTargets[xObjectKey].objectNumber +\r\n \" 0 R\"\r\n );\r\n }\r\n }\r\n\r\n // Loop through images, or other data objects\r\n events.publish(\"putXobjectDict\");\r\n out(\">>\");\r\n };\r\n\r\n var putEncryptionDict = function() {\r\n encryption.oid = newObject();\r\n out(\"<<\");\r\n out(\"/Filter /Standard\");\r\n out(\"/V \" + encryption.v);\r\n out(\"/R \" + encryption.r);\r\n out(\"/U <\" + encryption.toHexString(encryption.U) + \">\");\r\n out(\"/O <\" + encryption.toHexString(encryption.O) + \">\");\r\n out(\"/P \" + encryption.P);\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putFontDict = function() {\r\n out(\"/Font <<\");\r\n\r\n for (var fontKey in fonts) {\r\n if (fonts.hasOwnProperty(fontKey)) {\r\n if (\r\n putOnlyUsedFonts === false ||\r\n (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n ) {\r\n out(\"/\" + fontKey + \" \" + fonts[fontKey].objectNumber + \" 0 R\");\r\n }\r\n }\r\n }\r\n out(\">>\");\r\n };\r\n\r\n var putShadingPatternDict = function() {\r\n if (Object.keys(patterns).length > 0) {\r\n out(\"/Shading <<\");\r\n for (var patternKey in patterns) {\r\n if (\r\n patterns.hasOwnProperty(patternKey) &&\r\n patterns[patternKey] instanceof ShadingPattern &&\r\n patterns[patternKey].objectNumber >= 0\r\n ) {\r\n out(\r\n \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n );\r\n }\r\n }\r\n\r\n events.publish(\"putShadingPatternDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putTilingPatternDict = function(objectOid) {\r\n if (Object.keys(patterns).length > 0) {\r\n out(\"/Pattern <<\");\r\n for (var patternKey in patterns) {\r\n if (\r\n patterns.hasOwnProperty(patternKey) &&\r\n patterns[patternKey] instanceof API.TilingPattern &&\r\n patterns[patternKey].objectNumber >= 0 &&\r\n patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies\r\n ) {\r\n out(\r\n \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n );\r\n }\r\n }\r\n events.publish(\"putTilingPatternDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putGStatesDict = function() {\r\n if (Object.keys(gStates).length > 0) {\r\n var gStateKey;\r\n out(\"/ExtGState <<\");\r\n for (gStateKey in gStates) {\r\n if (\r\n gStates.hasOwnProperty(gStateKey) &&\r\n gStates[gStateKey].objectNumber >= 0\r\n ) {\r\n out(\"/\" + gStateKey + \" \" + gStates[gStateKey].objectNumber + \" 0 R\");\r\n }\r\n }\r\n\r\n events.publish(\"putGStateDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putResourceDictionary = function(objectIds) {\r\n newObjectDeferredBegin(objectIds.resourcesOid, true);\r\n out(\"<<\");\r\n out(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\");\r\n putFontDict();\r\n putShadingPatternDict();\r\n putTilingPatternDict(objectIds.objectOid);\r\n putGStatesDict();\r\n putXobjectDict();\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putResources = function() {\r\n // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images\r\n // which means their resource dictionaries must contain the already resolved\r\n // object ids. For this reason we defer the serialization of the resource\r\n // dicts until all objects have been serialized and have object ids.\r\n //\r\n // In order to prevent cyclic dependencies (which Adobe Reader doesn't like),\r\n // we only put all oids that are smaller than the oid of the object the\r\n // resource dict belongs to. This is correct behavior, since the streams\r\n // may only use other objects that have already been defined and thus appear\r\n // earlier in their respective collection.\r\n // Currently, this only affects tiling patterns, but a (more) correct\r\n // implementation of FormObjects would also define their own resource dicts.\r\n var deferredResourceDictionaryIds = [];\r\n\r\n putFonts();\r\n putGStates();\r\n putXObjects();\r\n putPatterns(deferredResourceDictionaryIds);\r\n\r\n events.publish(\"putResources\");\r\n deferredResourceDictionaryIds.forEach(putResourceDictionary);\r\n putResourceDictionary({\r\n resourcesOid: resourceDictionaryObjId,\r\n objectOid: Number.MAX_SAFE_INTEGER // output all objects\r\n });\r\n events.publish(\"postPutResources\");\r\n };\r\n\r\n var putAdditionalObjects = function() {\r\n events.publish(\"putAdditionalObjects\");\r\n for (var i = 0; i < additionalObjects.length; i++) {\r\n var obj = additionalObjects[i];\r\n newObjectDeferredBegin(obj.objId, true);\r\n out(obj.content);\r\n out(\"endobj\");\r\n }\r\n events.publish(\"postPutAdditionalObjects\");\r\n };\r\n\r\n var addFontToFontDictionary = function(font) {\r\n fontmap[font.fontName] = fontmap[font.fontName] || {};\r\n fontmap[font.fontName][font.fontStyle] = font.id;\r\n };\r\n\r\n var addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n encoding,\r\n isStandardFont\r\n ) {\r\n var font = {\r\n id: \"F\" + (Object.keys(fonts).length + 1).toString(10),\r\n postScriptName: postScriptName,\r\n fontName: fontName,\r\n fontStyle: fontStyle,\r\n encoding: encoding,\r\n isStandardFont: isStandardFont || false,\r\n metadata: {}\r\n };\r\n\r\n events.publish(\"addFont\", {\r\n font: font,\r\n instance: this\r\n });\r\n\r\n fonts[font.id] = font;\r\n addFontToFontDictionary(font);\r\n return font.id;\r\n };\r\n\r\n var addFonts = function(arrayOfFonts) {\r\n for (var i = 0, l = standardFonts.length; i < l; i++) {\r\n var fontKey = addFont.call(\r\n this,\r\n arrayOfFonts[i][0],\r\n arrayOfFonts[i][1],\r\n arrayOfFonts[i][2],\r\n standardFonts[i][3],\r\n true\r\n );\r\n\r\n if (putOnlyUsedFonts === false) {\r\n usedFonts[fontKey] = true;\r\n }\r\n // adding aliases for standard fonts, this time matching the capitalization\r\n var parts = arrayOfFonts[i][0].split(\"-\");\r\n addFontToFontDictionary({\r\n id: fontKey,\r\n fontName: parts[0],\r\n fontStyle: parts[1] || \"\"\r\n });\r\n }\r\n events.publish(\"addFonts\", {\r\n fonts: fonts,\r\n dictionary: fontmap\r\n });\r\n };\r\n\r\n var SAFE = function __safeCall(fn) {\r\n fn.foo = function __safeCallWrapper() {\r\n try {\r\n return fn.apply(this, arguments);\r\n } catch (e) {\r\n var stack = e.stack || \"\";\r\n if (~stack.indexOf(\" at \")) stack = stack.split(\" at \")[1];\r\n var m =\r\n \"Error in function \" +\r\n stack.split(\"\\n\")[0].split(\"<\")[0] +\r\n \": \" +\r\n e.message;\r\n if (globalObject.console) {\r\n globalObject.console.error(m, e);\r\n if (globalObject.alert) alert(m);\r\n } else {\r\n throw new Error(m);\r\n }\r\n }\r\n };\r\n fn.foo.bar = fn;\r\n return fn.foo;\r\n };\r\n\r\n var to8bitStream = function(text, flags) {\r\n /**\r\n * PDF 1.3 spec:\r\n * \"For text strings encoded in Unicode, the first two bytes must be 254 followed by\r\n * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts\r\n * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely\r\n * to be a meaningful beginning of a word or phrase.) The remainder of the\r\n * string consists of Unicode character codes, according to the UTF-16 encoding\r\n * specified in the Unicode standard, version 2.0. Commonly used Unicode values\r\n * are represented as 2 bytes per character, with the high-order byte appearing first\r\n * in the string.\"\r\n *\r\n * In other words, if there are chars in a string with char code above 255, we\r\n * recode the string to UCS2 BE - string doubles in length and BOM is prepended.\r\n *\r\n * HOWEVER!\r\n * Actual *content* (body) text (as opposed to strings used in document properties etc)\r\n * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID)\r\n *\r\n * Because of Adobe's focus on \"you subset your fonts!\" you are not supposed to have\r\n * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could\r\n * fudge it with \"Identity-H\" encoding and custom CIDtoGID map that mimics Unicode\r\n * code page. There, however, all characters in the stream are treated as GIDs,\r\n * including BOM, which is the reason we need to skip BOM in content text (i.e. that\r\n * that is tied to a font).\r\n *\r\n * To signal this \"special\" PDFEscape / to8bitStream handling mode,\r\n * API.text() function sets (unless you overwrite it with manual values\r\n * given to API.text(.., flags) )\r\n * flags.autoencode = true\r\n * flags.noBOM = true\r\n *\r\n * ===================================================================================\r\n * `flags` properties relied upon:\r\n * .sourceEncoding = string with encoding label.\r\n * \"Unicode\" by default. = encoding of the incoming text.\r\n * pass some non-existing encoding name\r\n * (ex: 'Do not touch my strings! I know what I am doing.')\r\n * to make encoding code skip the encoding step.\r\n * .outputEncoding = Either valid PDF encoding name\r\n * (must be supported by jsPDF font metrics, otherwise no encoding)\r\n * or a JS object, where key = sourceCharCode, value = outputCharCode\r\n * missing keys will be treated as: sourceCharCode === outputCharCode\r\n * .noBOM\r\n * See comment higher above for explanation for why this is important\r\n * .autoencode\r\n * See comment higher above for explanation for why this is important\r\n */\r\n\r\n var i,\r\n l,\r\n sourceEncoding,\r\n encodingBlock,\r\n outputEncoding,\r\n newtext,\r\n isUnicode,\r\n ch,\r\n bch;\r\n\r\n flags = flags || {};\r\n sourceEncoding = flags.sourceEncoding || \"Unicode\";\r\n outputEncoding = flags.outputEncoding;\r\n\r\n // This 'encoding' section relies on font metrics format\r\n // attached to font objects by, among others,\r\n // \"Willow Systems' standard_font_metrics plugin\"\r\n // see jspdf.plugin.standard_font_metrics.js for format\r\n // of the font.metadata.encoding Object.\r\n // It should be something like\r\n // .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}}\r\n // .widths = {0:width, code:width, ..., 'fof':divisor}\r\n // .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...}\r\n if (\r\n (flags.autoencode || outputEncoding) &&\r\n fonts[activeFontKey].metadata &&\r\n fonts[activeFontKey].metadata[sourceEncoding] &&\r\n fonts[activeFontKey].metadata[sourceEncoding].encoding\r\n ) {\r\n encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding;\r\n\r\n // each font has default encoding. Some have it clearly defined.\r\n if (!outputEncoding && fonts[activeFontKey].encoding) {\r\n outputEncoding = fonts[activeFontKey].encoding;\r\n }\r\n\r\n // Hmmm, the above did not work? Let's try again, in different place.\r\n if (!outputEncoding && encodingBlock.codePages) {\r\n outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default\r\n }\r\n\r\n if (typeof outputEncoding === \"string\") {\r\n outputEncoding = encodingBlock[outputEncoding];\r\n }\r\n // we want output encoding to be a JS Object, where\r\n // key = sourceEncoding's character code and\r\n // value = outputEncoding's character code.\r\n if (outputEncoding) {\r\n isUnicode = false;\r\n newtext = [];\r\n for (i = 0, l = text.length; i < l; i++) {\r\n ch = outputEncoding[text.charCodeAt(i)];\r\n if (ch) {\r\n newtext.push(String.fromCharCode(ch));\r\n } else {\r\n newtext.push(text[i]);\r\n }\r\n\r\n // since we are looping over chars anyway, might as well\r\n // check for residual unicodeness\r\n if (newtext[i].charCodeAt(0) >> 8) {\r\n /* more than 255 */\r\n isUnicode = true;\r\n }\r\n }\r\n text = newtext.join(\"\");\r\n }\r\n }\r\n\r\n i = text.length;\r\n // isUnicode may be set to false above. Hence the triple-equal to undefined\r\n while (isUnicode === undefined && i !== 0) {\r\n if (text.charCodeAt(i - 1) >> 8) {\r\n /* more than 255 */\r\n isUnicode = true;\r\n }\r\n i--;\r\n }\r\n if (!isUnicode) {\r\n return text;\r\n }\r\n\r\n newtext = flags.noBOM ? [] : [254, 255];\r\n for (i = 0, l = text.length; i < l; i++) {\r\n ch = text.charCodeAt(i);\r\n bch = ch >> 8; // divide by 256\r\n if (bch >> 8) {\r\n /* something left after dividing by 256 second time */\r\n throw new Error(\r\n \"Character at position \" +\r\n i +\r\n \" of string '\" +\r\n text +\r\n \"' exceeds 16bits. Cannot be encoded into UCS-2 BE\"\r\n );\r\n }\r\n newtext.push(bch);\r\n newtext.push(ch - (bch << 8));\r\n }\r\n return String.fromCharCode.apply(undefined, newtext);\r\n };\r\n\r\n var pdfEscape = (API.__private__.pdfEscape = API.pdfEscape = function(\r\n text,\r\n flags\r\n ) {\r\n /**\r\n * Replace '/', '(', and ')' with pdf-safe versions\r\n *\r\n * Doing to8bitStream does NOT make this PDF display unicode text. For that\r\n * we also need to reference a unicode font and embed it - royal pain in the rear.\r\n *\r\n * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars,\r\n * which JavaScript Strings are happy to provide. So, while we still cannot display\r\n * 2-byte characters property, at least CONDITIONALLY converting (entire string containing)\r\n * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF\r\n * is still parseable.\r\n * This will allow immediate support for unicode in document properties strings.\r\n */\r\n return to8bitStream(text, flags)\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/\\(/g, \"\\\\(\")\r\n .replace(/\\)/g, \"\\\\)\");\r\n });\r\n\r\n var beginPage = (API.__private__.beginPage = function(format) {\r\n pages[++page] = [];\r\n pagesContext[page] = {\r\n objId: 0,\r\n contentsObjId: 0,\r\n userUnit: Number(userUnit),\r\n artBox: null,\r\n bleedBox: null,\r\n cropBox: null,\r\n trimBox: null,\r\n mediaBox: {\r\n bottomLeftX: 0,\r\n bottomLeftY: 0,\r\n topRightX: Number(format[0]),\r\n topRightY: Number(format[1])\r\n }\r\n };\r\n _setPage(page);\r\n setOutputDestination(pages[currentPage]);\r\n });\r\n\r\n var _addPage = function(parmFormat, parmOrientation) {\r\n var dimensions, width, height;\r\n\r\n orientation = parmOrientation || orientation;\r\n\r\n if (typeof parmFormat === \"string\") {\r\n dimensions = getPageFormat(parmFormat.toLowerCase());\r\n if (Array.isArray(dimensions)) {\r\n width = dimensions[0];\r\n height = dimensions[1];\r\n }\r\n }\r\n\r\n if (Array.isArray(parmFormat)) {\r\n width = parmFormat[0] * scaleFactor;\r\n height = parmFormat[1] * scaleFactor;\r\n }\r\n\r\n if (isNaN(width)) {\r\n width = format[0];\r\n height = format[1];\r\n }\r\n\r\n if (width > 14400 || height > 14400) {\r\n console.warn(\r\n \"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"\r\n );\r\n width = Math.min(14400, width);\r\n height = Math.min(14400, height);\r\n }\r\n\r\n format = [width, height];\r\n\r\n switch (orientation.substr(0, 1)) {\r\n case \"l\":\r\n if (height > width) {\r\n format = [height, width];\r\n }\r\n break;\r\n case \"p\":\r\n if (width > height) {\r\n format = [height, width];\r\n }\r\n break;\r\n }\r\n\r\n beginPage(format);\r\n\r\n // Set line width\r\n setLineWidth(lineWidth);\r\n // Set draw color\r\n out(strokeColor);\r\n // resurrecting non-default line caps, joins\r\n if (lineCapID !== 0) {\r\n out(lineCapID + \" J\");\r\n }\r\n if (lineJoinID !== 0) {\r\n out(lineJoinID + \" j\");\r\n }\r\n events.publish(\"addPage\", {\r\n pageNumber: page\r\n });\r\n };\r\n\r\n var _deletePage = function(n) {\r\n if (n > 0 && n <= page) {\r\n pages.splice(n, 1);\r\n pagesContext.splice(n, 1);\r\n page--;\r\n if (currentPage > page) {\r\n currentPage = page;\r\n }\r\n this.setPage(currentPage);\r\n }\r\n };\r\n\r\n var _setPage = function(n) {\r\n if (n > 0 && n <= page) {\r\n currentPage = n;\r\n }\r\n };\r\n\r\n var getNumberOfPages = (API.__private__.getNumberOfPages = API.getNumberOfPages = function() {\r\n return pages.length - 1;\r\n });\r\n\r\n /**\r\n * Returns a document-specific font key - a label assigned to a\r\n * font name + font type combination at the time the font was added\r\n * to the font inventory.\r\n *\r\n * Font key is used as label for the desired font for a block of text\r\n * to be added to the PDF document stream.\r\n * @private\r\n * @function\r\n * @param fontName {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n * @param fontStyle {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n * @returns {string} Font key.\r\n * @ignore\r\n */\r\n var getFont = function(fontName, fontStyle, options) {\r\n var key = undefined,\r\n fontNameLowerCase;\r\n options = options || {};\r\n\r\n fontName =\r\n fontName !== undefined ? fontName : fonts[activeFontKey].fontName;\r\n fontStyle =\r\n fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle;\r\n fontNameLowerCase = fontName.toLowerCase();\r\n\r\n if (\r\n fontmap[fontNameLowerCase] !== undefined &&\r\n fontmap[fontNameLowerCase][fontStyle] !== undefined\r\n ) {\r\n key = fontmap[fontNameLowerCase][fontStyle];\r\n } else if (\r\n fontmap[fontName] !== undefined &&\r\n fontmap[fontName][fontStyle] !== undefined\r\n ) {\r\n key = fontmap[fontName][fontStyle];\r\n } else {\r\n if (options.disableWarning === false) {\r\n console.warn(\r\n \"Unable to look up font label for font '\" +\r\n fontName +\r\n \"', '\" +\r\n fontStyle +\r\n \"'. Refer to getFontList() for available fonts.\"\r\n );\r\n }\r\n }\r\n\r\n if (!key && !options.noFallback) {\r\n key = fontmap[\"times\"][fontStyle];\r\n if (key == null) {\r\n key = fontmap[\"times\"][\"normal\"];\r\n }\r\n }\r\n return key;\r\n };\r\n\r\n var putInfo = (API.__private__.putInfo = function() {\r\n var objectId = newObject();\r\n var encryptor = function(data) {\r\n return data;\r\n };\r\n if (encryptionOptions !== null) {\r\n encryptor = encryption.encryptor(objectId, 0);\r\n }\r\n out(\"<<\");\r\n out(\"/Producer (\" + pdfEscape(encryptor(\"jsPDF \" + jsPDF.version)) + \")\");\r\n for (var key in documentProperties) {\r\n if (documentProperties.hasOwnProperty(key) && documentProperties[key]) {\r\n out(\r\n \"/\" +\r\n key.substr(0, 1).toUpperCase() +\r\n key.substr(1) +\r\n \" (\" +\r\n pdfEscape(encryptor(documentProperties[key])) +\r\n \")\"\r\n );\r\n }\r\n }\r\n out(\"/CreationDate (\" + pdfEscape(encryptor(creationDate)) + \")\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n });\r\n\r\n var putCatalog = (API.__private__.putCatalog = function(options) {\r\n options = options || {};\r\n var tmpRootDictionaryObjId =\r\n options.rootDictionaryObjId || rootDictionaryObjId;\r\n newObject();\r\n out(\"<<\");\r\n out(\"/Type /Catalog\");\r\n out(\"/Pages \" + tmpRootDictionaryObjId + \" 0 R\");\r\n // PDF13ref Section 7.2.1\r\n if (!zoomMode) zoomMode = \"fullwidth\";\r\n switch (zoomMode) {\r\n case \"fullwidth\":\r\n out(\"/OpenAction [3 0 R /FitH null]\");\r\n break;\r\n case \"fullheight\":\r\n out(\"/OpenAction [3 0 R /FitV null]\");\r\n break;\r\n case \"fullpage\":\r\n out(\"/OpenAction [3 0 R /Fit]\");\r\n break;\r\n case \"original\":\r\n out(\"/OpenAction [3 0 R /XYZ null null 1]\");\r\n break;\r\n default:\r\n var pcn = \"\" + zoomMode;\r\n if (pcn.substr(pcn.length - 1) === \"%\")\r\n zoomMode = parseInt(zoomMode) / 100;\r\n if (typeof zoomMode === \"number\") {\r\n out(\"/OpenAction [3 0 R /XYZ null null \" + f2(zoomMode) + \"]\");\r\n }\r\n }\r\n if (!layoutMode) layoutMode = \"continuous\";\r\n switch (layoutMode) {\r\n case \"continuous\":\r\n out(\"/PageLayout /OneColumn\");\r\n break;\r\n case \"single\":\r\n out(\"/PageLayout /SinglePage\");\r\n break;\r\n case \"two\":\r\n case \"twoleft\":\r\n out(\"/PageLayout /TwoColumnLeft\");\r\n break;\r\n case \"tworight\":\r\n out(\"/PageLayout /TwoColumnRight\");\r\n break;\r\n }\r\n if (pageMode) {\r\n /**\r\n * A name object specifying how the document should be displayed when opened:\r\n * UseNone : Neither document outline nor thumbnail images visible -- DEFAULT\r\n * UseOutlines : Document outline visible\r\n * UseThumbs : Thumbnail images visible\r\n * FullScreen : Full-screen mode, with no menu bar, window controls, or any other window visible\r\n */\r\n out(\"/PageMode /\" + pageMode);\r\n }\r\n events.publish(\"putCatalog\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n });\r\n\r\n var putTrailer = (API.__private__.putTrailer = function() {\r\n out(\"trailer\");\r\n out(\"<<\");\r\n out(\"/Size \" + (objectNumber + 1));\r\n // Root and Info must be the last and second last objects written respectively\r\n out(\"/Root \" + objectNumber + \" 0 R\");\r\n out(\"/Info \" + (objectNumber - 1) + \" 0 R\");\r\n if (encryptionOptions !== null) {\r\n out(\"/Encrypt \" + encryption.oid + \" 0 R\");\r\n }\r\n out(\"/ID [ <\" + fileId + \"> <\" + fileId + \"> ]\");\r\n out(\">>\");\r\n });\r\n\r\n var putHeader = (API.__private__.putHeader = function() {\r\n out(\"%PDF-\" + pdfVersion);\r\n out(\"%\\xBA\\xDF\\xAC\\xE0\");\r\n });\r\n\r\n var putXRef = (API.__private__.putXRef = function() {\r\n var p = \"0000000000\";\r\n\r\n out(\"xref\");\r\n out(\"0 \" + (objectNumber + 1));\r\n out(\"0000000000 65535 f \");\r\n for (var i = 1; i <= objectNumber; i++) {\r\n var offset = offsets[i];\r\n if (typeof offset === \"function\") {\r\n out((p + offsets[i]()).slice(-10) + \" 00000 n \");\r\n } else {\r\n if (typeof offsets[i] !== \"undefined\") {\r\n out((p + offsets[i]).slice(-10) + \" 00000 n \");\r\n } else {\r\n out(\"0000000000 00000 n \");\r\n }\r\n }\r\n }\r\n });\r\n\r\n var buildDocument = (API.__private__.buildDocument = function() {\r\n resetDocument();\r\n setOutputDestination(content);\r\n\r\n events.publish(\"buildDocument\");\r\n\r\n putHeader();\r\n putPages();\r\n putAdditionalObjects();\r\n putResources();\r\n if (encryptionOptions !== null) putEncryptionDict();\r\n putInfo();\r\n putCatalog();\r\n\r\n var offsetOfXRef = contentLength;\r\n putXRef();\r\n putTrailer();\r\n out(\"startxref\");\r\n out(\"\" + offsetOfXRef);\r\n out(\"%%EOF\");\r\n\r\n setOutputDestination(pages[currentPage]);\r\n\r\n return content.join(\"\\n\");\r\n });\r\n\r\n var getBlob = (API.__private__.getBlob = function(data) {\r\n return new Blob([getArrayBuffer(data)], {\r\n type: \"application/pdf\"\r\n });\r\n });\r\n\r\n /**\r\n * Generates the PDF document.\r\n *\r\n * If `type` argument is undefined, output is raw body of resulting PDF returned as a string.\r\n *\r\n * @param {string} type A string identifying one of the possible output types.
    \r\n * Possible values are:
    \r\n * 'arraybuffer' -> (ArrayBuffer)
    \r\n * 'blob' -> (Blob)
    \r\n * 'bloburi'/'bloburl' -> (string)
    \r\n * 'datauristring'/'dataurlstring' -> (string)
    \r\n * 'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring
    \r\n * 'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)
    \r\n * 'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)
    \r\n * 'pdfjsnewwindow' -> (wind | null)\r\n * @param {Object|string} options An object providing some additional signalling to PDF generator.
    \r\n * Possible options are 'filename'.
    \r\n * A string can be passed instead of {filename:string} and defaults to 'generated.pdf'\r\n * @function\r\n * @instance\r\n * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined}\r\n * @memberof jsPDF#\r\n * @name output\r\n */\r\n var output = (API.output = API.__private__.output = SAFE(function output(\r\n type,\r\n options\r\n ) {\r\n options = options || {};\r\n\r\n if (typeof options === \"string\") {\r\n options = {\r\n filename: options\r\n };\r\n } else {\r\n options.filename = options.filename || \"generated.pdf\";\r\n }\r\n\r\n switch (type) {\r\n case undefined:\r\n return buildDocument();\r\n case \"save\":\r\n API.save(options.filename);\r\n break;\r\n case \"arraybuffer\":\r\n return getArrayBuffer(buildDocument());\r\n case \"blob\":\r\n return getBlob(buildDocument());\r\n case \"bloburi\":\r\n case \"bloburl\":\r\n // Developer is responsible of calling revokeObjectURL\r\n if (\r\n typeof globalObject.URL !== \"undefined\" &&\r\n typeof globalObject.URL.createObjectURL === \"function\"\r\n ) {\r\n return (\r\n (globalObject.URL &&\r\n globalObject.URL.createObjectURL(getBlob(buildDocument()))) ||\r\n void 0\r\n );\r\n } else {\r\n console.warn(\r\n \"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\"\r\n );\r\n }\r\n break;\r\n case \"datauristring\":\r\n case \"dataurlstring\":\r\n var dataURI = \"\";\r\n var pdfDocument = buildDocument();\r\n try {\r\n dataURI = btoa(pdfDocument);\r\n } catch (e) {\r\n dataURI = btoa(unescape(encodeURIComponent(pdfDocument)));\r\n }\r\n return (\r\n \"data:application/pdf;filename=\" +\r\n options.filename +\r\n \";base64,\" +\r\n dataURI\r\n );\r\n case \"pdfobjectnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfObjectUrl =\r\n \"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\";\r\n var integrity =\r\n ' integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\" crossorigin=\"anonymous\"';\r\n\r\n if (options.pdfObjectUrl) {\r\n pdfObjectUrl = options.pdfObjectUrl;\r\n integrity = \"\";\r\n }\r\n\r\n var htmlForNewWindow =\r\n \"\" +\r\n '\";\r\n var nW = globalObject.open();\r\n\r\n if (nW !== null) {\r\n nW.document.write(htmlForNewWindow);\r\n }\r\n return nW;\r\n } else {\r\n throw new Error(\r\n \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n case \"pdfjsnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n var htmlForPDFjsNewWindow =\r\n \"\" +\r\n \"\" +\r\n '' +\r\n \"\";\r\n var dataURLNewWindow = globalObject.open();\r\n if (dataURLNewWindow !== null) {\r\n dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n dataURLNewWindow.document.title = options.filename;\r\n }\r\n if (dataURLNewWindow || typeof safari === \"undefined\")\r\n return dataURLNewWindow;\r\n } else {\r\n throw new Error(\r\n \"The option dataurlnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n break;\r\n case \"datauri\":\r\n case \"dataurl\":\r\n return (globalObject.document.location.href = this.output(\r\n \"datauristring\",\r\n options\r\n ));\r\n default:\r\n return null;\r\n }\r\n }));\r\n\r\n /**\r\n * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n * @param {string} hotfixName - The name of the hotfix to check.\r\n * @returns {boolean}\r\n */\r\n var hasHotfix = function(hotfixName) {\r\n return (\r\n Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n );\r\n };\r\n\r\n switch (unit) {\r\n case \"pt\":\r\n scaleFactor = 1;\r\n break;\r\n case \"mm\":\r\n scaleFactor = 72 / 25.4;\r\n break;\r\n case \"cm\":\r\n scaleFactor = 72 / 2.54;\r\n break;\r\n case \"in\":\r\n scaleFactor = 72;\r\n break;\r\n case \"px\":\r\n if (hasHotfix(\"px_scaling\") == true) {\r\n scaleFactor = 72 / 96;\r\n } else {\r\n scaleFactor = 96 / 72;\r\n }\r\n break;\r\n case \"pc\":\r\n scaleFactor = 12;\r\n break;\r\n case \"em\":\r\n scaleFactor = 12;\r\n break;\r\n case \"ex\":\r\n scaleFactor = 6;\r\n break;\r\n default:\r\n if (typeof unit === \"number\") {\r\n scaleFactor = unit;\r\n } else {\r\n throw new Error(\"Invalid unit: \" + unit);\r\n }\r\n }\r\n\r\n var encryption = null;\r\n setCreationDate();\r\n setFileId();\r\n\r\n var getEncryptor = function(objectId) {\r\n if (encryptionOptions !== null) {\r\n return encryption.encryptor(objectId, 0);\r\n }\r\n return function(data) {\r\n return data;\r\n };\r\n };\r\n\r\n //---------------------------------------\r\n // Public API\r\n\r\n var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n pageNumberOneBased\r\n ) {\r\n if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n }\r\n var objId = pagesContext[pageNumberOneBased].objId;\r\n return {\r\n objId: objId,\r\n pageNumber: pageNumberOneBased,\r\n pageContext: pagesContext[pageNumberOneBased]\r\n };\r\n });\r\n\r\n var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n objId\r\n ) {\r\n if (isNaN(objId) || objId % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n }\r\n for (var pageNumber in pagesContext) {\r\n if (pagesContext[pageNumber].objId === objId) {\r\n break;\r\n }\r\n }\r\n return getPageInfo(pageNumber);\r\n });\r\n\r\n var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n return {\r\n objId: pagesContext[currentPage].objId,\r\n pageNumber: currentPage,\r\n pageContext: pagesContext[currentPage]\r\n };\r\n });\r\n\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addPage\r\n */\r\n API.addPage = function() {\r\n _addPage.apply(this, arguments);\r\n return this;\r\n };\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name setPage\r\n * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n * @example\r\n * doc = jsPDF()\r\n * doc.addPage()\r\n * doc.addPage()\r\n * doc.text('I am on page 3', 10, 10)\r\n * doc.setPage(1)\r\n * doc.text('I am on page 1', 10, 10)\r\n */\r\n API.setPage = function() {\r\n _setPage.apply(this, arguments);\r\n setOutputDestination.call(this, pages[currentPage]);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name insertPage\r\n * @memberof jsPDF#\r\n *\r\n * @function\r\n * @instance\r\n * @param {Object} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.insertPage = function(beforePage) {\r\n this.addPage();\r\n this.movePage(currentPage, beforePage);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name movePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {number} targetPage\r\n * @param {number} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.movePage = function(targetPage, beforePage) {\r\n var tmpPages, tmpPagesContext;\r\n if (targetPage > beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var i = targetPage; i > beforePage; i--) {\r\n pages[i] = pages[i - 1];\r\n pagesContext[i] = pagesContext[i - 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n } else if (targetPage < beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var j = targetPage; j < beforePage; j++) {\r\n pages[j] = pages[j + 1];\r\n pagesContext[j] = pagesContext[j + 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Deletes a page from the PDF.\r\n * @name deletePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @param {number} targetPage\r\n * @instance\r\n * @returns {jsPDF}\r\n */\r\n API.deletePage = function() {\r\n _deletePage.apply(this, arguments);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n *\r\n * @function\r\n * @instance\r\n * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n * @param {number} [options.charSpace=0] - The space between each letter.\r\n * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n * @param {Object} [options.flags] - Flags for to8bitStream.\r\n * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n *\r\n * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name text\r\n */\r\n API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n /*\r\n * Inserts something like this into PDF\r\n * BT\r\n * /F1 16 Tf % Font name + size\r\n * 16 TL % How many units down for next line in multiline text\r\n * 0 g % color\r\n * 28.35 813.54 Td % position\r\n * (line one) Tj\r\n * T* (line two) Tj\r\n * T* (line three) Tj\r\n * ET\r\n */\r\n options = options || {};\r\n var scope = options.scope || this;\r\n var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n // in effort to make all calls have similar signature like\r\n // function(data, coordinates... , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (\r\n typeof text === \"number\" &&\r\n typeof x === \"number\" &&\r\n (typeof y === \"string\" || Array.isArray(y))\r\n ) {\r\n var tmp = y;\r\n y = x;\r\n x = text;\r\n text = tmp;\r\n }\r\n\r\n var transformationMatrix;\r\n\r\n if (arguments[3] instanceof Matrix === false) {\r\n flags = arguments[3];\r\n angle = arguments[4];\r\n align = arguments[5];\r\n\r\n if (typeof flags !== \"object\" || flags === null) {\r\n if (typeof angle === \"string\") {\r\n align = angle;\r\n angle = null;\r\n }\r\n if (typeof flags === \"string\") {\r\n align = flags;\r\n flags = null;\r\n }\r\n if (typeof flags === \"number\") {\r\n angle = flags;\r\n flags = null;\r\n }\r\n options = {\r\n flags: flags,\r\n angle: angle,\r\n align: align\r\n };\r\n }\r\n } else {\r\n advancedApiModeTrap(\r\n \"The transform parameter of text() with a Matrix value\"\r\n );\r\n transformationMatrix = transform;\r\n }\r\n\r\n if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n }\r\n\r\n if (text.length === 0) {\r\n return scope;\r\n }\r\n\r\n var xtra = \"\";\r\n var isHex = false;\r\n var lineHeight =\r\n typeof options.lineHeightFactor === \"number\"\r\n ? options.lineHeightFactor\r\n : lineHeightFactor;\r\n var scaleFactor = scope.internal.scaleFactor;\r\n\r\n function ESC(s) {\r\n s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n return pdfEscape(s, flags);\r\n }\r\n\r\n function transformTextToSpecialArray(text) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(curDa);\r\n } else {\r\n if (\r\n Array.isArray(text) &&\r\n (curDa.length === 1 ||\r\n (curDa[1] === undefined && curDa[2] === undefined))\r\n ) {\r\n da.push(curDa[0]);\r\n } else {\r\n da.push([curDa[0], curDa[1], curDa[2]]);\r\n }\r\n }\r\n }\r\n return da;\r\n }\r\n\r\n function processTextByFunction(text, processingFunction) {\r\n var result;\r\n if (typeof text === \"string\") {\r\n result = processingFunction(text)[0];\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n var tmpResult;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(processingFunction(curDa)[0]);\r\n } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n }\r\n }\r\n result = da;\r\n }\r\n return result;\r\n }\r\n\r\n //Check if text is of type String\r\n var textIsOfTypeString = false;\r\n var tmpTextIsOfTypeString = true;\r\n\r\n if (typeof text === \"string\") {\r\n textIsOfTypeString = true;\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (\r\n typeof curDa !== \"string\" ||\r\n (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n ) {\r\n tmpTextIsOfTypeString = false;\r\n }\r\n }\r\n textIsOfTypeString = tmpTextIsOfTypeString;\r\n }\r\n if (textIsOfTypeString === false) {\r\n throw new Error(\r\n 'Type of text must be string or Array. \"' +\r\n text +\r\n '\" is not recognized.'\r\n );\r\n }\r\n\r\n //If there are any newlines in text, we assume\r\n //the user wanted to print multiple lines, so break the\r\n //text up into an array. If the text is already an array,\r\n //we assume the user knows what they are doing.\r\n //Convert text into an array anyway to simplify\r\n //later code.\r\n\r\n if (typeof text === \"string\") {\r\n if (text.match(/[\\r?\\n]/)) {\r\n text = text.split(/\\r\\n|\\r|\\n/g);\r\n } else {\r\n text = [text];\r\n }\r\n }\r\n\r\n //baseline\r\n var height = activeFontSize / scope.internal.scaleFactor;\r\n var descent = height * (lineHeight - 1);\r\n\r\n switch (options.baseline) {\r\n case \"bottom\":\r\n y -= descent;\r\n break;\r\n case \"top\":\r\n y += height - descent;\r\n break;\r\n case \"hanging\":\r\n y += height - 2 * descent;\r\n break;\r\n case \"middle\":\r\n y += height / 2 - descent;\r\n break;\r\n case \"ideographic\":\r\n case \"alphabetic\":\r\n default:\r\n // do nothing, everything is fine\r\n break;\r\n }\r\n\r\n //multiline\r\n maxWidth = options.maxWidth || 0;\r\n\r\n if (maxWidth > 0) {\r\n if (typeof text === \"string\") {\r\n text = scope.splitTextToSize(text, maxWidth);\r\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n text = text.reduce(function(acc, textLine) {\r\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n }, []);\r\n }\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"preProcessText\", payload);\r\n\r\n text = payload.text;\r\n options = payload.options;\r\n\r\n //angle\r\n angle = options.angle;\r\n\r\n if (\r\n transformationMatrix instanceof Matrix === false &&\r\n angle &&\r\n typeof angle === \"number\"\r\n ) {\r\n angle *= Math.PI / 180;\r\n\r\n if (options.rotationDirection === 0) {\r\n angle = -angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n angle = -angle;\r\n }\r\n\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n } else if (angle && angle instanceof Matrix) {\r\n transformationMatrix = angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n transformationMatrix = identityMatrix;\r\n }\r\n\r\n //charSpace\r\n\r\n charSpace = options.charSpace || activeCharSpace;\r\n\r\n if (typeof charSpace !== \"undefined\") {\r\n xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n this.setCharSpace(this.getCharSpace() || 0);\r\n }\r\n\r\n horizontalScale = options.horizontalScale;\r\n if (typeof horizontalScale !== \"undefined\") {\r\n xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n }\r\n\r\n //lang\r\n\r\n var lang = options.lang;\r\n\r\n if (lang) {\r\n // xtra += \"/Lang (\" + lang +\")\\n\";\r\n }\r\n\r\n //renderingMode\r\n var renderingMode = -1;\r\n var parmRenderingMode =\r\n typeof options.renderingMode !== \"undefined\"\r\n ? options.renderingMode\r\n : options.stroke;\r\n var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n switch (parmRenderingMode) {\r\n case 0:\r\n case false:\r\n case \"fill\":\r\n renderingMode = 0;\r\n break;\r\n case 1:\r\n case true:\r\n case \"stroke\":\r\n renderingMode = 1;\r\n break;\r\n case 2:\r\n case \"fillThenStroke\":\r\n renderingMode = 2;\r\n break;\r\n case 3:\r\n case \"invisible\":\r\n renderingMode = 3;\r\n break;\r\n case 4:\r\n case \"fillAndAddForClipping\":\r\n renderingMode = 4;\r\n break;\r\n case 5:\r\n case \"strokeAndAddPathForClipping\":\r\n renderingMode = 5;\r\n break;\r\n case 6:\r\n case \"fillThenStrokeAndAddToPathForClipping\":\r\n renderingMode = 6;\r\n break;\r\n case 7:\r\n case \"addToPathForClipping\":\r\n renderingMode = 7;\r\n break;\r\n }\r\n\r\n var usedRenderingMode =\r\n typeof pageContext.usedRenderingMode !== \"undefined\"\r\n ? pageContext.usedRenderingMode\r\n : -1;\r\n\r\n //if the coder wrote it explicitly to use a specific\r\n //renderingMode, then use it\r\n if (renderingMode !== -1) {\r\n xtra += renderingMode + \" Tr\\n\";\r\n //otherwise check if we used the rendering Mode already\r\n //if so then set the rendering Mode...\r\n } else if (usedRenderingMode !== -1) {\r\n xtra += \"0 Tr\\n\";\r\n }\r\n\r\n if (renderingMode !== -1) {\r\n pageContext.usedRenderingMode = renderingMode;\r\n }\r\n\r\n //align\r\n align = options.align || \"left\";\r\n var leading = activeFontSize * lineHeight;\r\n var pageWidth = scope.internal.pageSize.getWidth();\r\n var activeFont = fonts[activeFontKey];\r\n charSpace = options.charSpace || activeCharSpace;\r\n maxWidth = options.maxWidth || 0;\r\n\r\n var lineWidths;\r\n flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n var wordSpacingPerLine = [];\r\n\r\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n da = transformTextToSpecialArray(text);\r\n var newY;\r\n if (align !== \"left\") {\r\n lineWidths = da.map(function(v) {\r\n return (\r\n (scope.getStringUnitWidth(v, {\r\n font: activeFont,\r\n charSpace: charSpace,\r\n fontSize: activeFontSize,\r\n doKerning: false\r\n }) *\r\n activeFontSize) /\r\n scaleFactor\r\n );\r\n });\r\n }\r\n //The first line uses the \"main\" Td setting,\r\n //and the subsequent lines are offset by the\r\n //previous line's x coordinate.\r\n var prevWidth = 0;\r\n var newX;\r\n if (align === \"right\") {\r\n //The passed in x coordinate defines the\r\n //rightmost point of the text.\r\n x -= lineWidths[0];\r\n text = [];\r\n len = da.length;\r\n for (var i = 0; i < len; i++) {\r\n if (i === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale(prevWidth - lineWidths[i]);\r\n newY = -leading;\r\n }\r\n text.push([da[i], newX, newY]);\r\n prevWidth = lineWidths[i];\r\n }\r\n } else if (align === \"center\") {\r\n //The passed in x coordinate defines\r\n //the center point.\r\n x -= lineWidths[0] / 2;\r\n text = [];\r\n len = da.length;\r\n for (var j = 0; j < len; j++) {\r\n if (j === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale((prevWidth - lineWidths[j]) / 2);\r\n newY = -leading;\r\n }\r\n text.push([da[j], newX, newY]);\r\n prevWidth = lineWidths[j];\r\n }\r\n } else if (align === \"left\") {\r\n text = [];\r\n len = da.length;\r\n for (var h = 0; h < len; h++) {\r\n text.push(da[h]);\r\n }\r\n } else if (align === \"justify\") {\r\n text = [];\r\n len = da.length;\r\n maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n for (var l = 0; l < len; l++) {\r\n newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n if (l < len - 1) {\r\n wordSpacingPerLine.push(\r\n hpf(\r\n scale(\r\n (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n )\r\n )\r\n );\r\n } else {\r\n wordSpacingPerLine.push(0);\r\n }\r\n text.push([da[l], newX, newY]);\r\n }\r\n } else {\r\n throw new Error(\r\n 'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n );\r\n }\r\n }\r\n\r\n //R2L\r\n var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n if (doReversing === true) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [\r\n text\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\"),\r\n posX,\r\n posY\r\n ];\r\n });\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"postProcessText\", payload);\r\n\r\n text = payload.text;\r\n isHex = payload.mutex.isHex || false;\r\n\r\n //Escaping\r\n var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n if (\r\n activeFontEncoding === \"WinAnsiEncoding\" ||\r\n activeFontEncoding === \"StandardEncoding\"\r\n ) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [ESC(text), posX, posY];\r\n });\r\n }\r\n\r\n da = transformTextToSpecialArray(text);\r\n\r\n text = [];\r\n var STRING = 0;\r\n var ARRAY = 1;\r\n var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n var posX;\r\n var posY;\r\n var content;\r\n var wordSpacing = \"\";\r\n\r\n var generatePosition = function(\r\n parmPosX,\r\n parmPosY,\r\n parmTransformationMatrix\r\n ) {\r\n var position = \"\";\r\n if (parmTransformationMatrix instanceof Matrix) {\r\n // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n // in the coordinate system established by this matrix\r\n if (typeof options.angle === \"number\") {\r\n parmTransformationMatrix = matrixMult(\r\n parmTransformationMatrix,\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n );\r\n } else {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, -1, 0, 0),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n } else {\r\n position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n }\r\n return position;\r\n };\r\n\r\n for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n wordSpacing = \"\";\r\n\r\n switch (variant) {\r\n case ARRAY:\r\n content =\r\n (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n posX = parseFloat(da[lineIndex][1]);\r\n posY = parseFloat(da[lineIndex][2]);\r\n break;\r\n case STRING:\r\n content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n posX = getHorizontalCoordinate(x);\r\n posY = getVerticalCoordinate(y);\r\n break;\r\n }\r\n\r\n if (\r\n typeof wordSpacingPerLine !== \"undefined\" &&\r\n typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n ) {\r\n wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n }\r\n\r\n if (lineIndex === 0) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n } else if (variant === STRING) {\r\n text.push(wordSpacing + content);\r\n } else if (variant === ARRAY) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n }\r\n }\r\n\r\n text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n text += \" Tj\\n\";\r\n\r\n var result = \"BT\\n/\";\r\n result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n result += textColor + \"\\n\";\r\n result += xtra;\r\n result += text;\r\n result += \"ET\";\r\n\r\n out(result);\r\n usedFonts[activeFontKey] = true;\r\n return scope;\r\n };\r\n\r\n // PDF supports these path painting and clip path operators:\r\n //\r\n // S - stroke\r\n // s - close/stroke\r\n // f (F) - fill non-zero\r\n // f* - fill evenodd\r\n // B - fill stroke nonzero\r\n // B* - fill stroke evenodd\r\n // b - close fill stroke nonzero\r\n // b* - close fill stroke evenodd\r\n // n - nothing (consume path)\r\n // W - clip nonzero\r\n // W* - clip evenodd\r\n //\r\n // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n // method.\r\n /**\r\n *\r\n * @name clip\r\n * @function\r\n * @instance\r\n * @param {string} rule Only possible value is 'evenodd'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description All .clip() after calling drawing ops with a style argument of null.\r\n */\r\n var clip = (API.__private__.clip = API.clip = function(rule) {\r\n // Call .clip() after calling drawing ops with a style argument of null\r\n // W is the PDF clipping op\r\n if (\"evenodd\" === rule) {\r\n out(\"W*\");\r\n } else {\r\n out(\"W\");\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * @name clipEvenOdd\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n * that this will NOT consume the current path. In order to only use this path for clipping call\r\n * {@link API.discardPath} afterwards.\r\n */\r\n API.clipEvenOdd = function() {\r\n return clip(\"evenodd\");\r\n };\r\n\r\n /**\r\n * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n * @name discardPath\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.discardPath = API.discardPath = function() {\r\n out(\"n\");\r\n return this;\r\n };\r\n\r\n var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n var validStyleVariants = [\r\n undefined,\r\n null,\r\n \"S\",\r\n \"D\",\r\n \"F\",\r\n \"DF\",\r\n \"FD\",\r\n \"f\",\r\n \"f*\",\r\n \"B\",\r\n \"B*\",\r\n \"n\"\r\n ];\r\n var result = false;\r\n if (validStyleVariants.indexOf(style) !== -1) {\r\n result = true;\r\n }\r\n return result;\r\n });\r\n\r\n API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n operator\r\n ) {\r\n if (isValidStyle(operator)) {\r\n defaultPathOperation = operator;\r\n }\r\n return this;\r\n };\r\n\r\n var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n // see path-painting operators in PDF spec\r\n var op = defaultPathOperation; // stroke\r\n\r\n switch (style) {\r\n case \"D\":\r\n case \"S\":\r\n op = \"S\"; // stroke\r\n break;\r\n case \"F\":\r\n op = \"f\"; // fill\r\n break;\r\n case \"FD\":\r\n case \"DF\":\r\n op = \"B\";\r\n break;\r\n case \"f\":\r\n case \"f*\":\r\n case \"B\":\r\n case \"B*\":\r\n /*\r\n Allow direct use of these PDF path-painting operators:\r\n - f fill using nonzero winding number rule\r\n - f* fill using even-odd rule\r\n - B fill then stroke with fill using non-zero winding number rule\r\n - B* fill then stroke with fill using even-odd rule\r\n */\r\n op = style;\r\n break;\r\n }\r\n return op;\r\n });\r\n\r\n /**\r\n * Close the current path. The PDF \"h\" operator.\r\n * @name close\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n var close = (API.close = function() {\r\n out(\"h\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Stroke the path. The PDF \"S\" operator.\r\n * @name stroke\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.stroke = function() {\r\n out(\"S\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n * @name fill\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fill = function(pattern) {\r\n fillWithOptionalPattern(\"f\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the even-odd rule. The PDF f* operator.\r\n * @see API.fill\r\n * @name fillEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"f*\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStroke\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStroke = function(pattern) {\r\n fillWithOptionalPattern(\"B\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStrokeEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStrokeEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"B*\", pattern);\r\n return this;\r\n };\r\n\r\n var fillWithOptionalPattern = function(style, pattern) {\r\n if (typeof pattern === \"object\") {\r\n fillWithPattern(pattern, style);\r\n } else {\r\n out(style);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n if (\r\n style === null ||\r\n (apiMode === ApiMode.ADVANCED && style === undefined)\r\n ) {\r\n return;\r\n }\r\n\r\n style = getStyle(style);\r\n\r\n // stroking / filling / both the path\r\n out(style);\r\n };\r\n\r\n function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n var clone = new TilingPattern(\r\n boundingBox || this.boundingBox,\r\n xStep || this.xStep,\r\n yStep || this.yStep,\r\n this.gState,\r\n matrix || this.matrix\r\n );\r\n clone.stream = this.stream;\r\n var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n addPattern(key, clone);\r\n return clone;\r\n }\r\n\r\n var fillWithPattern = function(patternData, style) {\r\n var patternId = patternMap[patternData.key];\r\n var pattern = patterns[patternId];\r\n\r\n if (pattern instanceof ShadingPattern) {\r\n out(\"q\");\r\n\r\n out(clipRuleFromStyle(style));\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n out(patternData.matrix.toString() + \" cm\");\r\n out(\"/\" + patternId + \" sh\");\r\n out(\"Q\");\r\n } else if (pattern instanceof TilingPattern) {\r\n // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n // so we must flip them\r\n var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n if (patternData.matrix) {\r\n matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n // for each use\r\n patternId = cloneTilingPattern.call(\r\n pattern,\r\n patternData.key,\r\n patternData.boundingBox,\r\n patternData.xStep,\r\n patternData.yStep,\r\n matrix\r\n ).id;\r\n }\r\n\r\n out(\"q\");\r\n out(\"/Pattern cs\");\r\n out(\"/\" + patternId + \" scn\");\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n\r\n out(style);\r\n out(\"Q\");\r\n }\r\n };\r\n\r\n var clipRuleFromStyle = function(style) {\r\n switch (style) {\r\n case \"f\":\r\n case \"F\":\r\n return \"W n\";\r\n case \"f*\":\r\n return \"W* n\";\r\n case \"B\":\r\n return \"W S\";\r\n case \"B*\":\r\n return \"W* S\";\r\n\r\n // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n case \"S\":\r\n return \"W S\";\r\n case \"n\":\r\n return \"W n\";\r\n }\r\n };\r\n\r\n /**\r\n * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @name moveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var moveTo = (API.moveTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @memberof jsPDF#\r\n * @name lineTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var lineTo = (API.lineTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x3\r\n * @param {number} y3\r\n * @memberof jsPDF#\r\n * @name curveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n out(\r\n [\r\n hpf(scale(x1)),\r\n hpf(transformScaleY(y1)),\r\n hpf(scale(x2)),\r\n hpf(transformScaleY(y2)),\r\n hpf(scale(x3)),\r\n hpf(transformScaleY(y3)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n return this;\r\n });\r\n\r\n /**\r\n * Draw a line on the current page.\r\n *\r\n * @name line\r\n * @function\r\n * @instance\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n } else {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n }\r\n };\r\n\r\n /**\r\n * @typedef {Object} PatternData\r\n * {Matrix|undefined} matrix\r\n * {Number|undefined} xStep\r\n * {Number|undefined} yStep\r\n * {Array.|undefined} boundingBox\r\n */\r\n\r\n /**\r\n * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n * All data points in `lines` are relative to last line origin.\r\n * `x`, `y` become x1,y1 for first line / curve in the set.\r\n * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n *\r\n * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name lines\r\n */\r\n API.__private__.lines = API.lines = function(\r\n lines,\r\n x,\r\n y,\r\n scale,\r\n style,\r\n closed\r\n ) {\r\n var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n // in effort to make all calls have similar signature like\r\n // function(content, coordinateX, coordinateY , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (typeof lines === \"number\") {\r\n tmp = y;\r\n y = x;\r\n x = lines;\r\n lines = tmp;\r\n }\r\n\r\n scale = scale || [1, 1];\r\n closed = closed || false;\r\n\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n !Array.isArray(lines) ||\r\n !Array.isArray(scale) ||\r\n !isValidStyle(style) ||\r\n typeof closed !== \"boolean\"\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n }\r\n\r\n // starting point\r\n moveTo(x, y);\r\n\r\n scalex = scale[0];\r\n scaley = scale[1];\r\n l = lines.length;\r\n //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n x4 = x; // last / ending point = starting point for first item.\r\n y4 = y; // last / ending point = starting point for first item.\r\n\r\n for (i = 0; i < l; i++) {\r\n leg = lines[i];\r\n if (leg.length === 2) {\r\n // simple line\r\n x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n lineTo(x4, y4);\r\n } else {\r\n // bezier curve\r\n x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n curveTo(x2, y2, x3, y3, x4, y4);\r\n }\r\n }\r\n\r\n if (closed) {\r\n close();\r\n }\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n * six and \"h\" an empty array (or undefined).\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name path\r\n */\r\n API.path = function(lines) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var leg = lines[i];\r\n var coords = leg.c;\r\n switch (leg.op) {\r\n case \"m\":\r\n moveTo(coords[0], coords[1]);\r\n break;\r\n case \"l\":\r\n lineTo(coords[0], coords[1]);\r\n break;\r\n case \"c\":\r\n curveTo.apply(this, coords);\r\n break;\r\n case \"h\":\r\n close();\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name rect\r\n */\r\n API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n h = -h;\r\n }\r\n\r\n out(\r\n [\r\n hpf(scale(x)),\r\n hpf(transformScaleY(y)),\r\n hpf(scale(w)),\r\n hpf(scale(h)),\r\n \"re\"\r\n ].join(\" \")\r\n );\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a triangle to PDF.\r\n *\r\n * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name triangle\r\n */\r\n API.__private__.triangle = API.triangle = function(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n style\r\n ) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n isNaN(x3) ||\r\n isNaN(y3) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n }\r\n this.lines(\r\n [\r\n [x2 - x1, y2 - y1], // vector to point 2\r\n [x3 - x2, y3 - y2], // vector to point 3\r\n [x1 - x3, y1 - y3] // closing vector back to point 1\r\n ],\r\n x1,\r\n y1, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle with rounded corners to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name roundedRect\r\n */\r\n API.__private__.roundedRect = API.roundedRect = function(\r\n x,\r\n y,\r\n w,\r\n h,\r\n rx,\r\n ry,\r\n style\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(w) ||\r\n isNaN(h) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n }\r\n var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n rx = Math.min(rx, w * 0.5);\r\n ry = Math.min(ry, h * 0.5);\r\n\r\n this.lines(\r\n [\r\n [w - 2 * rx, 0],\r\n [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n [0, h - 2 * ry],\r\n [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n [-w + 2 * rx, 0],\r\n [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n [0, -h + 2 * ry],\r\n [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n ],\r\n x + rx,\r\n y, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an ellipse to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name ellipse\r\n */\r\n API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n }\r\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n moveTo(x + rx, y);\r\n curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an circle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} r Radius (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name circle\r\n */\r\n API.__private__.circle = API.circle = function(x, y, r, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n }\r\n return this.ellipse(x, y, r, r, style);\r\n };\r\n\r\n /**\r\n * Sets text font face, variant for upcoming text elements.\r\n * See output of jsPDF.getFontList() for possible font names, styles.\r\n *\r\n * @param {string} fontName Font name or family. Example: \"times\".\r\n * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFont\r\n */\r\n API.setFont = function(fontName, fontStyle, fontWeight) {\r\n if (fontWeight) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n activeFontKey = getFont(fontName, fontStyle, {\r\n disableWarning: false\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets text font face, variant for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {Object}\r\n * @memberof jsPDF#\r\n * @name getFont\r\n */\r\n var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n return fonts[getFont.apply(API, arguments)];\r\n });\r\n\r\n /**\r\n * Returns an object - a tree of fontName to fontStyle relationships available to\r\n * active PDF document.\r\n *\r\n * @public\r\n * @function\r\n * @instance\r\n * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n * @memberof jsPDF#\r\n * @name getFontList\r\n */\r\n API.__private__.getFontList = API.getFontList = function() {\r\n var list = {},\r\n fontName,\r\n fontStyle;\r\n\r\n for (fontName in fontmap) {\r\n if (fontmap.hasOwnProperty(fontName)) {\r\n list[fontName] = [];\r\n for (fontStyle in fontmap[fontName]) {\r\n if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n list[fontName].push(fontStyle);\r\n }\r\n }\r\n }\r\n }\r\n return list;\r\n };\r\n\r\n /**\r\n * Add a custom font to the current instance.\r\n *\r\n * @param {string} postScriptName PDF specification full name for the font.\r\n * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n * @param {string} fontStyle Style of the Font.\r\n * @param {number | string} fontWeight Weight of the Font.\r\n * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @name addFont\r\n * @returns {string} fontId\r\n */\r\n API.addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n fontWeight,\r\n encoding\r\n ) {\r\n var encodingOptions = [\r\n \"StandardEncoding\",\r\n \"MacRomanEncoding\",\r\n \"Identity-H\",\r\n \"WinAnsiEncoding\"\r\n ];\r\n if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n //IE 11 fix\r\n encoding = arguments[3];\r\n } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n encoding = encoding || \"Identity-H\";\r\n return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n };\r\n\r\n var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n /**\r\n * Gets the line width, default: 0.200025.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineWidth\r\n * @memberof jsPDF#\r\n * @name getLineWidth\r\n */\r\n var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n return lineWidth;\r\n });\r\n\r\n /**\r\n * Sets line width for upcoming lines.\r\n *\r\n * @param {number} width Line width (in units declared at inception of PDF document).\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineWidth\r\n */\r\n var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n width\r\n ) {\r\n lineWidth = width;\r\n out(hpf(scale(width)) + \" w\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Sets the dash pattern for upcoming lines.\r\n *\r\n * To reset the settings simply call the method without any parameters.\r\n * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n * @param {number} dashPhase The phase lines start with.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineDashPattern\r\n */\r\n API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n dashArray,\r\n dashPhase\r\n ) {\r\n dashArray = dashArray || [];\r\n dashPhase = dashPhase || 0;\r\n\r\n if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n }\r\n\r\n dashArray = dashArray\r\n .map(function(x) {\r\n return hpf(scale(x));\r\n })\r\n .join(\" \");\r\n dashPhase = hpf(scale(dashPhase));\r\n\r\n out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n return this;\r\n };\r\n\r\n var lineHeightFactor;\r\n\r\n var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n });\r\n\r\n API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n };\r\n\r\n /**\r\n * Sets the LineHeightFactor of proportion.\r\n *\r\n * @param {number} value LineHeightFactor value. Default: 1.15.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineHeightFactor\r\n */\r\n var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n value\r\n ) {\r\n value = value || 1.15;\r\n if (typeof value === \"number\") {\r\n lineHeightFactor = value;\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * Gets the LineHeightFactor, default: 1.15.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineHeightFactor\r\n * @memberof jsPDF#\r\n * @name getLineHeightFactor\r\n */\r\n var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n return lineHeightFactor;\r\n });\r\n\r\n setLineHeightFactor(options.lineHeight);\r\n\r\n var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n value\r\n ) {\r\n return scale(value);\r\n });\r\n\r\n var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n value\r\n ) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n return value;\r\n } else {\r\n var pageHeight =\r\n pagesContext[currentPage].mediaBox.topRightY -\r\n pagesContext[currentPage].mediaBox.bottomLeftY;\r\n return pageHeight - scale(value);\r\n }\r\n });\r\n\r\n var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getHorizontalCoordinate(value));\r\n });\r\n\r\n var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getVerticalCoordinate(value));\r\n });\r\n\r\n var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n /**\r\n * Gets the stroke color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getDrawColor\r\n */\r\n API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n return decodeColorString(strokeColor);\r\n };\r\n\r\n /**\r\n * Sets the stroke color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDrawColor\r\n */\r\n API.__private__.setStrokeColor = API.setDrawColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"draw\",\r\n precision: 2\r\n };\r\n\r\n strokeColor = encodeColorString(options);\r\n out(strokeColor);\r\n return this;\r\n };\r\n\r\n var fillColor = options.fillColor || \"0 g\";\r\n\r\n /**\r\n * Gets the fill color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getFillColor\r\n */\r\n API.__private__.getFillColor = API.getFillColor = function() {\r\n return decodeColorString(fillColor);\r\n };\r\n\r\n /**\r\n * Sets the fill color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFillColor\r\n */\r\n API.__private__.setFillColor = API.setFillColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"fill\",\r\n precision: 2\r\n };\r\n\r\n fillColor = encodeColorString(options);\r\n out(fillColor);\r\n return this;\r\n };\r\n\r\n var textColor = options.textColor || \"0 g\";\r\n /**\r\n * Gets the text color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getTextColor\r\n */\r\n var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n return decodeColorString(textColor);\r\n });\r\n /**\r\n * Sets the text color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setTextColor\r\n */\r\n API.__private__.setTextColor = API.setTextColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"text\",\r\n precision: 3\r\n };\r\n textColor = encodeColorString(options);\r\n\r\n return this;\r\n };\r\n\r\n var activeCharSpace = options.charSpace;\r\n\r\n /**\r\n * Get global value of CharSpace.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} charSpace\r\n * @memberof jsPDF#\r\n * @name getCharSpace\r\n */\r\n var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n return parseFloat(activeCharSpace || 0);\r\n });\r\n\r\n /**\r\n * Set global value of CharSpace.\r\n *\r\n * @param {number} charSpace\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setCharSpace\r\n */\r\n API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n if (isNaN(charSpace)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n }\r\n activeCharSpace = charSpace;\r\n return this;\r\n };\r\n\r\n var lineCapID = 0;\r\n /**\r\n * Is an Object providing a mapping from human-readable to\r\n * integer flag values designating the varieties of line cap\r\n * and join styles.\r\n *\r\n * @memberof jsPDF#\r\n * @name CapJoinStyles\r\n */\r\n API.CapJoinStyles = {\r\n 0: 0,\r\n butt: 0,\r\n but: 0,\r\n miter: 0,\r\n 1: 1,\r\n round: 1,\r\n rounded: 1,\r\n circle: 1,\r\n 2: 2,\r\n projecting: 2,\r\n project: 2,\r\n square: 2,\r\n bevel: 2\r\n };\r\n\r\n /**\r\n * Sets the line cap styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line cap.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineCap\r\n */\r\n API.__private__.setLineCap = API.setLineCap = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line cap style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineCapID = id;\r\n out(id + \" J\");\r\n\r\n return this;\r\n };\r\n\r\n var lineJoinID = 0;\r\n /**\r\n * Sets the line join styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line join.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineJoin\r\n */\r\n API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line join style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineJoinID = id;\r\n out(id + \" j\");\r\n\r\n return this;\r\n };\r\n\r\n var miterLimit;\r\n /**\r\n * Sets the miterLimit property, which effects the maximum miter length.\r\n *\r\n * @param {number} length The length of the miter\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineMiterLimit\r\n */\r\n API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n length\r\n ) {\r\n length = length || 0;\r\n if (isNaN(length)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n }\r\n out(hpf(scale(length)) + \" M\");\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * An object representing a pdf graphics state.\r\n * @class GState\r\n */\r\n\r\n /**\r\n *\r\n * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n * Supported are: opacity, stroke-opacity\r\n * @constructor\r\n */\r\n API.GState = GState;\r\n\r\n /**\r\n * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n * it will be added before use.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setGState\r\n */\r\n API.setGState = function(gState) {\r\n if (typeof gState === \"string\") {\r\n gState = gStates[gStatesMap[gState]];\r\n } else {\r\n gState = addGState(null, gState);\r\n }\r\n\r\n if (!gState.equals(activeGState)) {\r\n out(\"/\" + gState.id + \" gs\");\r\n activeGState = gState;\r\n }\r\n };\r\n\r\n /**\r\n * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n * @param {String} key Might also be null, if no later reference to this gState is needed\r\n * @param {Object} gState The gState object\r\n */\r\n var addGState = function(key, gState) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (key && gStatesMap[key]) return;\r\n var duplicate = false;\r\n for (var s in gStates) {\r\n if (gStates.hasOwnProperty(s)) {\r\n if (gStates[s].equals(gState)) {\r\n duplicate = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (duplicate) {\r\n gState = gStates[s];\r\n } else {\r\n var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n gStates[gStateKey] = gState;\r\n gState.id = gStateKey;\r\n }\r\n\r\n // several user keys may point to the same GState object\r\n key && (gStatesMap[key] = gState.id);\r\n\r\n events.publish(\"addGState\", gState);\r\n\r\n return gState;\r\n };\r\n\r\n /**\r\n * Adds a new {@link GState} for later use. See {@link setGState}.\r\n * @param {String} key\r\n * @param {GState} gState\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addGState\r\n */\r\n API.addGState = function(key, gState) {\r\n addGState(key, gState);\r\n return this;\r\n };\r\n\r\n /**\r\n * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n * fill and stroke colors etc.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name saveGraphicsState\r\n */\r\n API.saveGraphicsState = function() {\r\n out(\"q\");\r\n // as we cannot set font key and size independently we must keep track of both\r\n fontStateStack.push({\r\n key: activeFontKey,\r\n size: activeFontSize,\r\n color: textColor\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name restoreGraphicsState\r\n */\r\n API.restoreGraphicsState = function() {\r\n out(\"Q\");\r\n\r\n // restore previous font state\r\n var fontState = fontStateStack.pop();\r\n activeFontKey = fontState.key;\r\n activeFontSize = fontState.size;\r\n textColor = fontState.color;\r\n\r\n activeGState = null;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Appends this matrix to the left of all previously applied matrices.\r\n *\r\n * @param {Matrix} matrix\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setCurrentTransformationMatrix\r\n */\r\n API.setCurrentTransformationMatrix = function(matrix) {\r\n out(matrix.toString() + \" cm\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Inserts a debug comment into the generated pdf.\r\n * @function\r\n * @instance\r\n * @param {String} text\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name comment\r\n */\r\n API.comment = function(text) {\r\n out(\"#\" + text);\r\n return this;\r\n };\r\n\r\n /**\r\n * Point\r\n */\r\n var Point = function(x, y) {\r\n var _x = x || 0;\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n get: function() {\r\n return _x;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _x = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _y = y || 0;\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n get: function() {\r\n return _y;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _y = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _type = \"pt\";\r\n Object.defineProperty(this, \"type\", {\r\n enumerable: true,\r\n get: function() {\r\n return _type;\r\n },\r\n set: function(value) {\r\n _type = value.toString();\r\n }\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Rectangle\r\n */\r\n var Rectangle = function(x, y, w, h) {\r\n Point.call(this, x, y);\r\n this.type = \"rect\";\r\n\r\n var _w = w || 0;\r\n Object.defineProperty(this, \"w\", {\r\n enumerable: true,\r\n get: function() {\r\n return _w;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _w = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _h = h || 0;\r\n Object.defineProperty(this, \"h\", {\r\n enumerable: true,\r\n get: function() {\r\n return _h;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _h = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * FormObject/RenderTarget\r\n */\r\n\r\n var RenderTarget = function() {\r\n this.page = page;\r\n this.currentPage = currentPage;\r\n this.pages = pages.slice(0);\r\n this.pagesContext = pagesContext.slice(0);\r\n this.x = pageX;\r\n this.y = pageY;\r\n this.matrix = pageMatrix;\r\n this.width = getPageWidth(currentPage);\r\n this.height = getPageHeight(currentPage);\r\n this.outputDestination = outputDestination;\r\n\r\n this.id = \"\"; // set by endFormObject()\r\n this.objectNumber = -1; // will be set by putXObject()\r\n };\r\n\r\n RenderTarget.prototype.restore = function() {\r\n page = this.page;\r\n currentPage = this.currentPage;\r\n pagesContext = this.pagesContext;\r\n pages = this.pages;\r\n pageX = this.x;\r\n pageY = this.y;\r\n pageMatrix = this.matrix;\r\n setPageWidth(currentPage, this.width);\r\n setPageHeight(currentPage, this.height);\r\n outputDestination = this.outputDestination;\r\n };\r\n\r\n var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n // save current state\r\n renderTargetStack.push(new RenderTarget());\r\n\r\n // clear pages\r\n page = currentPage = 0;\r\n pages = [];\r\n pageX = x;\r\n pageY = y;\r\n\r\n pageMatrix = matrix;\r\n\r\n beginPage([width, height]);\r\n };\r\n\r\n var endFormObject = function(key) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (renderTargetMap[key]) {\r\n renderTargetStack.pop().restore();\r\n return;\r\n }\r\n\r\n // save the created xObject\r\n var newXObject = new RenderTarget();\r\n\r\n var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n newXObject.id = xObjectId;\r\n\r\n renderTargetMap[key] = xObjectId;\r\n renderTargets[xObjectId] = newXObject;\r\n\r\n events.publish(\"addFormObject\", newXObject);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n /**\r\n * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n * {@link doFormObject}. Nested form objects are possible.\r\n * x, y, width, height set the bounding box that is used to clip the content.\r\n *\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n * the parent's.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name beginFormObject\r\n */\r\n API.beginFormObject = function(x, y, width, height, matrix) {\r\n // The user can set the output target to a new form object. Nested form objects are possible.\r\n // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n // the PDF-Spec states:\r\n // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n // recommended although not required\"\r\n beginNewRenderTarget(x, y, width, height, matrix);\r\n return this;\r\n };\r\n\r\n /**\r\n * Completes and saves the form object.\r\n * @param {String} key The key by which this form object can be referenced.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name endFormObject\r\n */\r\n API.endFormObject = function(key) {\r\n endFormObject(key);\r\n return this;\r\n };\r\n\r\n /**\r\n * Draws the specified form object by referencing to the respective pdf XObject created with\r\n * {@link API.beginFormObject} and {@link endFormObject}.\r\n * The location is determined by matrix.\r\n *\r\n * @param {String} key The key to the form object.\r\n * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name doFormObject\r\n */\r\n API.doFormObject = function(key, matrix) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n out(\"q\");\r\n out(matrix.toString() + \" cm\");\r\n out(\"/\" + xObject.id + \" Do\");\r\n out(\"Q\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Returns the form object specified by key.\r\n * @param key {String}\r\n * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name getFormObject\r\n */\r\n API.getFormObject = function(key) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n return {\r\n x: xObject.x,\r\n y: xObject.y,\r\n width: xObject.width,\r\n height: xObject.height,\r\n matrix: xObject.matrix\r\n };\r\n };\r\n\r\n /**\r\n * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n * Uses FileSaver.js-method saveAs.\r\n *\r\n * @memberof jsPDF#\r\n * @name save\r\n * @function\r\n * @instance\r\n * @param {string} filename The filename including extension.\r\n * @param {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n * @returns {jsPDF|Promise} jsPDF-instance */\r\n API.save = function(filename, options) {\r\n filename = filename || \"generated.pdf\";\r\n\r\n options = options || {};\r\n options.returnPromise = options.returnPromise || false;\r\n\r\n if (options.returnPromise === false) {\r\n saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n return this;\r\n } else {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n var result = saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n resolve(result);\r\n } catch (e) {\r\n reject(e.message);\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n // applying plugins (more methods) ON TOP of built-in API.\r\n // this is intentional as we allow plugins to override\r\n // built-ins\r\n for (var plugin in jsPDF.API) {\r\n if (jsPDF.API.hasOwnProperty(plugin)) {\r\n if (plugin === \"events\" && jsPDF.API.events.length) {\r\n (function(events, newEvents) {\r\n // jsPDF.API.events is a JS Array of Arrays\r\n // where each Array is a pair of event name, handler\r\n // Events were added by plugins to the jsPDF instantiator.\r\n // These are always added to the new instance and some ran\r\n // during instantiation.\r\n var eventname, handler_and_args, i;\r\n\r\n for (i = newEvents.length - 1; i !== -1; i--) {\r\n // subscribe takes 3 args: 'topic', function, runonce_flag\r\n // if undefined, runonce is false.\r\n // users can attach callback directly,\r\n // or they can attach an array with [callback, runonce_flag]\r\n // that's what the \"apply\" magic is for below.\r\n eventname = newEvents[i][0];\r\n handler_and_args = newEvents[i][1];\r\n events.subscribe.apply(\r\n events,\r\n [eventname].concat(\r\n typeof handler_and_args === \"function\"\r\n ? [handler_and_args]\r\n : handler_and_args\r\n )\r\n );\r\n }\r\n })(events, jsPDF.API.events);\r\n } else {\r\n API[plugin] = jsPDF.API[plugin];\r\n }\r\n }\r\n }\r\n\r\n var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightX -\r\n pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightX =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n });\r\n\r\n var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightY -\r\n pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightY =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n });\r\n\r\n /**\r\n * Object exposing internal API to plugins\r\n * @public\r\n * @ignore\r\n */\r\n API.internal = {\r\n pdfEscape: pdfEscape,\r\n getStyle: getStyle,\r\n getFont: getFontEntry,\r\n getFontSize: getFontSize,\r\n getCharSpace: getCharSpace,\r\n getTextColor: getTextColor,\r\n getLineHeight: getLineHeight,\r\n getLineHeightFactor: getLineHeightFactor,\r\n getLineWidth: getLineWidth,\r\n write: write,\r\n getHorizontalCoordinate: getHorizontalCoordinate,\r\n getVerticalCoordinate: getVerticalCoordinate,\r\n getCoordinateString: getHorizontalCoordinateString,\r\n getVerticalCoordinateString: getVerticalCoordinateString,\r\n collections: {},\r\n newObject: newObject,\r\n newAdditionalObject: newAdditionalObject,\r\n newObjectDeferred: newObjectDeferred,\r\n newObjectDeferredBegin: newObjectDeferredBegin,\r\n getFilters: getFilters,\r\n putStream: putStream,\r\n events: events,\r\n scaleFactor: scaleFactor,\r\n pageSize: {\r\n getWidth: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n setWidth: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n getHeight: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n setHeight: function(value) {\r\n setPageHeight(currentPage, value);\r\n }\r\n },\r\n encryptionOptions: encryptionOptions,\r\n encryption: encryption,\r\n getEncryptor: getEncryptor,\r\n output: output,\r\n getNumberOfPages: getNumberOfPages,\r\n pages: pages,\r\n out: out,\r\n f2: f2,\r\n f3: f3,\r\n getPageInfo: getPageInfo,\r\n getPageInfoByObjId: getPageInfoByObjId,\r\n getCurrentPageInfo: getCurrentPageInfo,\r\n getPDFVersion: getPdfVersion,\r\n Point: Point,\r\n Rectangle: Rectangle,\r\n Matrix: Matrix,\r\n hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n };\r\n\r\n Object.defineProperty(API.internal.pageSize, \"width\", {\r\n get: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n set: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(API.internal.pageSize, \"height\", {\r\n get: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n set: function(value) {\r\n setPageHeight(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // continuing initialization of jsPDF Document object\r\n //////////////////////////////////////////////////////\r\n // Add the first page automatically\r\n addFonts.call(API, standardFonts);\r\n activeFontKey = \"F1\";\r\n _addPage(format, orientation);\r\n\r\n events.publish(\"initialized\");\r\n return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n * // 'this' will be ref to internal API object. see jsPDF source\r\n * // , so you can refer to built-in methods like so:\r\n * // this.line(....)\r\n * // this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\(/g, \"\\\\(\")\n .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n return value\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\\(/g, \"(\")\n .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n var xobj = new AcroFormXObject();\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number |= bitMask;\n\n return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number &= ~bitMask;\n\n return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n );\n }\n return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n );\n }\n return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n );\n }\n return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n );\n }\n return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n args,\n scope\n) {\n var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n var x = args[0];\n var y = args[1];\n var w = args[2];\n var h = args[3];\n\n var coordinates = {};\n\n coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n return [\n Number(f2(coordinates.lowerLeft_X)),\n Number(f2(coordinates.lowerLeft_Y)),\n Number(f2(coordinates.upperRight_X)),\n Number(f2(coordinates.upperRight_Y))\n ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n if (formObject.appearanceStreamContent) {\n return formObject.appearanceStreamContent;\n }\n\n if (!formObject.V && !formObject.DV) {\n return;\n }\n\n // else calculate it\n\n var stream = [];\n var text = formObject._V || formObject.DV;\n var calcRes = calculateX(formObject, text);\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n\n //PDF 32000-1:2008, page 444\n stream.push(\"/Tx BMC\");\n stream.push(\"q\");\n stream.push(\"BT\"); // Begin Text\n stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n stream.push(calcRes.text);\n stream.push(\"ET\"); // End Text\n stream.push(\"Q\");\n stream.push(\"EMC\");\n\n var appearanceStreamContent = createFormXObject(formObject);\n appearanceStreamContent.scope = formObject.scope;\n appearanceStreamContent.stream = stream.join(\"\\n\");\n return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n var maxFontSize =\n formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n var returnValue = {\n text: \"\",\n fontSize: \"\"\n };\n // Remove Brackets\n text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n text =\n text.substr(text.length - 1) == \")\"\n ? text.substr(0, text.length - 1)\n : text;\n // split into array of words\n var textSplit = text.split(\" \");\n if (formObject.multiline) {\n textSplit = textSplit.map(word => word.split(\"\\n\"));\n } else {\n textSplit = textSplit.map(word => [word]);\n }\n\n var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n var lineSpacing = 2;\n var borderPadding = 2;\n\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n height = height < 0 ? -height : height;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n width = width < 0 ? -width : width;\n\n var isSmallerThanWidth = function(i, lastLine, fontSize) {\n if (i + 1 < textSplit.length) {\n var tmp = lastLine + \" \" + textSplit[i + 1][0];\n var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n var FieldWidth = width - 2 * borderPadding;\n return TextWidth <= FieldWidth;\n } else {\n return false;\n }\n };\n\n fontSize++;\n FontSize: while (fontSize > 0) {\n text = \"\";\n fontSize--;\n var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n var startY = formObject.multiline\n ? height - fontSize\n : (height - textHeight) / 2;\n startY += lineSpacing;\n var startX;\n\n var lastY = startY;\n var firstWordInLine = 0,\n lastWordInLine = 0;\n var lastLength;\n var currWord = 0;\n\n if (fontSize <= 0) {\n // In case, the Text doesn't fit at all\n fontSize = 12;\n text = \"(...) Tj\\n\";\n text +=\n \"% Width of Text: \" +\n calculateFontSpace(text, formObject, fontSize).width +\n \", FieldWidth:\" +\n width +\n \"\\n\";\n break;\n }\n\n var lastLine = \"\";\n var lineCount = 0;\n Line: for (var i = 0; i < textSplit.length; i++) {\n if (textSplit.hasOwnProperty(i)) {\n let isWithNewLine = false;\n if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n continue FontSize;\n }\n\n lastLine += textSplit[i][currWord];\n isWithNewLine = true;\n lastWordInLine = i;\n i--;\n } else {\n lastLine += textSplit[i][currWord] + \" \";\n lastLine =\n lastLine.substr(lastLine.length - 1) == \" \"\n ? lastLine.substr(0, lastLine.length - 1)\n : lastLine;\n var key = parseInt(i);\n var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n var isLastWord = i >= textSplit.length - 1;\n\n if (nextLineIsSmaller && !isLastWord) {\n lastLine += \" \";\n currWord = 0;\n continue; // Line\n } else if (!nextLineIsSmaller && !isLastWord) {\n if (!formObject.multiline) {\n continue FontSize;\n } else {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the\n // FieldObject\n continue FontSize;\n }\n lastWordInLine = key;\n // go on\n }\n } else if (isLastWord) {\n lastWordInLine = key;\n } else {\n if (\n formObject.multiline &&\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the FieldObject\n continue FontSize;\n }\n }\n }\n // Remove last blank\n\n var line = \"\";\n\n for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n var currLine = textSplit[x];\n if (formObject.multiline) {\n if (x === lastWordInLine) {\n line += currLine[currWord] + \" \";\n currWord = (currWord + 1) % currLine.length;\n continue;\n }\n if (x === firstWordInLine) {\n line += currLine[currLine.length - 1] + \" \";\n continue;\n }\n }\n line += currLine[0] + \" \";\n }\n\n // Remove last blank\n line =\n line.substr(line.length - 1) == \" \"\n ? line.substr(0, line.length - 1)\n : line;\n // lastLength -= blankSpace.width;\n lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n // Calculate startX\n switch (formObject.textAlign) {\n case \"right\":\n startX = width - lastLength - borderPadding;\n break;\n case \"center\":\n startX = (width - lastLength) / 2;\n break;\n case \"left\":\n default:\n startX = borderPadding;\n break;\n }\n text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n // reset X in PDF\n text += -f2(startX) + \" 0 Td\\n\";\n\n // After a Line, adjust y position\n lastY = -(fontSize + lineSpacing);\n\n // Reset for next iteration step\n lastLength = 0;\n firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n lineCount++;\n\n lastLine = \"\";\n continue Line;\n }\n }\n break;\n }\n\n returnValue.text = text;\n returnValue.fontSize = fontSize;\n\n return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n var font = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n );\n var width =\n formObject.scope.getStringUnitWidth(text, {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) * parseFloat(fontSize);\n var height =\n formObject.scope.getStringUnitWidth(\"3\", {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) *\n parseFloat(fontSize) *\n 1.5;\n return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n fields: [],\n xForms: [],\n /**\n * acroFormDictionaryRoot contains information about the AcroForm\n * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n * 1: The Object ID of the Root\n */\n acroFormDictionaryRoot: null,\n /**\n * After the PDF gets evaluated, the reference to the root has to be\n * reset, this indicates, whether the root has already been printed\n * out\n */\n printedOut: false,\n internal: null,\n isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n //set objId to undefined and force it to get a new objId on buildDocument\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n for (var i in fields) {\n if (fields.hasOwnProperty(i)) {\n var formObject = fields[i];\n //set objId to undefined and force it to get a new objId on buildDocument\n formObject.objId = undefined;\n // add Annot Reference!\n if (formObject.hasAnnotation) {\n // If theres an Annotation Widget in the Form Object, put the\n // Reference in the /Annot array\n createAnnotationReference(formObject, scope);\n }\n }\n }\n};\n\nvar putForm = function(formObject) {\n if (formObject.scope.internal.acroformPlugin.printedOut) {\n formObject.scope.internal.acroformPlugin.printedOut = false;\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n }\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n formObject\n );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n var options = {\n type: \"reference\",\n object: object\n };\n var findEntry = function(entry) {\n return entry.type === options.type && entry.object === options.object;\n };\n if (\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.find(findEntry) === undefined\n ) {\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.push(options);\n }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n // Put reference to AcroForm to DocumentCatalog\n if (\n typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n ) {\n // for safety, shouldn't normally be the case\n scope.internal.write(\n \"/AcroForm \" +\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n \" \" +\n 0 +\n \" R\"\n );\n } else {\n throw new Error(\"putCatalogCallback: Root missing.\");\n }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n // Remove event\n scope.internal.events.unsubscribe(\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n );\n delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n var standardFields = !fieldArray;\n\n if (!fieldArray) {\n // in case there is no fieldArray specified, we want to print out\n // the Fields of the AcroForm\n // Print out Root\n scope.internal.newObjectDeferredBegin(\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n true\n );\n scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n }\n\n fieldArray =\n fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var fieldObject = fieldArray[i];\n var keyValueList = [];\n var oldRect = fieldObject.Rect;\n\n if (fieldObject.Rect) {\n fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n }\n\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n fieldObject\n );\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.getKeyValueListForStream === \"function\"\n ) {\n keyValueList = fieldObject.getKeyValueListForStream();\n }\n\n fieldObject.Rect = oldRect;\n\n if (\n fieldObject.hasAppearanceStream &&\n !fieldObject.appearanceStreamContent\n ) {\n // Calculate Appearance\n var appearance = calculateAppearanceStream(fieldObject);\n keyValueList.push({ key: \"AP\", value: \"<>\" });\n\n scope.internal.acroformPlugin.xForms.push(appearance);\n }\n\n // Assume AppearanceStreamContent is a Array with N,R,D (at least\n // one of them!)\n if (fieldObject.appearanceStreamContent) {\n var appearanceStreamString = \"\";\n // Iterate over N,R and D\n for (var k in fieldObject.appearanceStreamContent) {\n if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n var value = fieldObject.appearanceStreamContent[k];\n appearanceStreamString += \"/\" + k + \" \";\n appearanceStreamString += \"<<\";\n if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n // appearanceStream is an Array or Object!\n for (var i in value) {\n if (value.hasOwnProperty(i)) {\n var obj = value[i];\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order\n // to get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n // In case the XForm is already used, e.g. OffState\n // of CheckBoxes, don't add it\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n }\n } else {\n obj = value;\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order to\n // get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj;\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n appearanceStreamString += \">>\";\n }\n }\n\n // appearance stream is a normal Object..\n keyValueList.push({\n key: \"AP\",\n value: \"<<\\n\" + appearanceStreamString + \">>\"\n });\n }\n\n scope.internal.putStream({\n additionalKeyValues: keyValueList,\n objectId: fieldObject.objId\n });\n\n scope.internal.out(\"endobj\");\n }\n }\n if (standardFields) {\n createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var key = i;\n var fieldObject = fieldArray[i];\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.putStream === \"function\"\n ) {\n fieldObject.putStream();\n }\n delete fieldArray[key];\n }\n }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n formObject.scope = scope;\n if (\n scope.internal !== undefined &&\n (scope.internal.acroformPlugin === undefined ||\n scope.internal.acroformPlugin.isInitialized === false)\n ) {\n AcroFormField.FieldNum = 0;\n scope.internal.acroformPlugin = JSON.parse(\n JSON.stringify(acroformPluginTemplate)\n );\n if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n throw new Error(\"Exception while creating AcroformDictionary\");\n }\n scaleFactor = scope.internal.scaleFactor;\n // The Object Number of the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n // add Callback for creating the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n \"postPutResources\",\n function() {\n AcroFormDictionaryCallback(scope);\n }\n );\n\n scope.internal.events.subscribe(\"buildDocument\", function() {\n annotReferenceCallback(scope);\n }); // buildDocument\n\n // Register event, that is triggered when the DocumentCatalog is\n // written, in order to add /AcroForm\n\n scope.internal.events.subscribe(\"putCatalog\", function() {\n putCatalogCallback(scope);\n });\n\n // Register event, that creates all Fields\n scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n createFieldCallback(fieldArray, scope);\n });\n\n scope.internal.acroformPlugin.isInitialized = true;\n }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n array,\n objId,\n scope\n) {\n var encryptor = function(data) {\n return data;\n };\n if (Array.isArray(array)) {\n var content = \"[\";\n for (var i = 0; i < array.length; i++) {\n if (i !== 0) {\n content += \" \";\n }\n switch (typeof array[i]) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n content += array[i].toString();\n break;\n case \"string\":\n if (array[i].substr(0, 1) !== \"/\") {\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n } else {\n content += array[i].toString();\n }\n break;\n }\n }\n content += \"]\";\n return content;\n }\n throw new Error(\n \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n );\n});\nfunction getMatches(string, regex, index) {\n index || (index = 1); // default to the first capturing group\n var matches = [];\n var match;\n while ((match = regex.exec(string))) {\n matches.push(match[index]);\n }\n return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n var result = [];\n if (typeof array === \"string\") {\n result = getMatches(array, /\\((.*?)\\)/g);\n }\n return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n var encryptor = function(data) {\n return data;\n };\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n string = string || \"\";\n string.toString();\n string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n this._objId = undefined;\n this._scope = undefined;\n\n /**\n * @name AcroFormPDFObject#objId\n * @type {any}\n */\n Object.defineProperty(this, \"objId\", {\n get: function() {\n if (typeof this._objId === \"undefined\") {\n if (typeof this.scope === \"undefined\") {\n return undefined;\n }\n this._objId = this.scope.internal.newObjectDeferred();\n }\n return this._objId;\n },\n set: function(value) {\n this._objId = value;\n }\n });\n Object.defineProperty(this, \"scope\", {\n value: this._scope,\n writable: true\n });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n var keyValueList = this.getKeyValueListForStream();\n this.scope.internal.putStream({\n data: this.stream,\n additionalKeyValues: keyValueList,\n objectId: this.objId\n });\n this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n var keyValueList = [];\n var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n return (\n key != \"content\" &&\n key != \"appearanceStreamContent\" &&\n key != \"scope\" &&\n key != \"objId\" &&\n key.substring(0, 1) != \"_\"\n );\n });\n\n for (var i in keys) {\n if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n var key = keys[i];\n var value = this[key];\n\n if (value) {\n if (Array.isArray(value)) {\n keyValueList.push({\n key: key,\n value: arrayToPdfArray(value, this.objId, this.scope)\n });\n } else if (value instanceof AcroFormPDFObject) {\n // In case it is a reference to another PDFObject,\n // take the reference number\n value.scope = this.scope;\n keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n } else if (typeof value !== \"function\") {\n keyValueList.push({ key: key, value: value });\n }\n }\n }\n }\n return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n AcroFormPDFObject.call(this);\n\n Object.defineProperty(this, \"Type\", {\n value: \"/XObject\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"Subtype\", {\n value: \"/Form\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"FormType\", {\n value: 1,\n configurable: false,\n writable: true\n });\n\n var _BBox = [];\n Object.defineProperty(this, \"BBox\", {\n configurable: false,\n get: function() {\n return _BBox;\n },\n set: function(value) {\n _BBox = value;\n }\n });\n\n Object.defineProperty(this, \"Resources\", {\n value: \"2 0 R\",\n configurable: false,\n writable: true\n });\n\n var _stream;\n Object.defineProperty(this, \"stream\", {\n enumerable: false,\n configurable: true,\n set: function(value) {\n _stream = value.trim();\n },\n get: function() {\n if (_stream) {\n return _stream;\n } else {\n return null;\n }\n }\n });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n AcroFormPDFObject.call(this);\n\n var _Kids = [];\n\n Object.defineProperty(this, \"Kids\", {\n enumerable: false,\n configurable: true,\n get: function() {\n if (_Kids.length > 0) {\n return _Kids;\n } else {\n return undefined;\n }\n }\n });\n Object.defineProperty(this, \"Fields\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Kids;\n }\n });\n\n // Default Appearance\n var _DA;\n Object.defineProperty(this, \"DA\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DA) {\n return undefined;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n },\n set: function(value) {\n _DA = value;\n }\n });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n AcroFormPDFObject.call(this);\n\n //Annotation-Flag See Table 165\n var _F = 4;\n Object.defineProperty(this, \"F\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _F;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _F = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute F supplied.'\n );\n }\n }\n });\n\n /**\n * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n *\n * @name AcroFormField#showWhenPrinted\n * @default true\n * @type {boolean}\n */\n Object.defineProperty(this, \"showWhenPrinted\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(_F, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.F = setBitForPdf(_F, 3);\n } else {\n this.F = clearBitForPdf(_F, 3);\n }\n }\n });\n\n var _Ff = 0;\n Object.defineProperty(this, \"Ff\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Ff;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _Ff = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Ff supplied.'\n );\n }\n }\n });\n\n var _Rect = [];\n Object.defineProperty(this, \"Rect\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (_Rect.length === 0) {\n return undefined;\n }\n return _Rect;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Rect = value;\n } else {\n _Rect = [];\n }\n }\n });\n\n /**\n * The x-position of the field.\n *\n * @name AcroFormField#x\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[0])) {\n return 0;\n }\n return _Rect[0];\n },\n set: function(value) {\n _Rect[0] = value;\n }\n });\n\n /**\n * The y-position of the field.\n *\n * @name AcroFormField#y\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[1])) {\n return 0;\n }\n return _Rect[1];\n },\n set: function(value) {\n _Rect[1] = value;\n }\n });\n\n /**\n * The width of the field.\n *\n * @name AcroFormField#width\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[2])) {\n return 0;\n }\n return _Rect[2];\n },\n set: function(value) {\n _Rect[2] = value;\n }\n });\n\n /**\n * The height of the field.\n *\n * @name AcroFormField#height\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[3])) {\n return 0;\n }\n return _Rect[3];\n },\n set: function(value) {\n _Rect[3] = value;\n }\n });\n\n var _FT = \"\";\n Object.defineProperty(this, \"FT\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _FT;\n },\n set: function(value) {\n switch (value) {\n case \"/Btn\":\n case \"/Tx\":\n case \"/Ch\":\n case \"/Sig\":\n _FT = value;\n break;\n default:\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute FT supplied.'\n );\n }\n }\n });\n\n var _T = null;\n\n Object.defineProperty(this, \"T\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (!_T || _T.length < 1) {\n // In case of a Child from a Radio´Group, you don't need a FieldName\n if (this instanceof AcroFormChildClass) {\n return undefined;\n }\n _T = \"FieldObject\" + AcroFormField.FieldNum++;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n },\n set: function(value) {\n _T = value.toString();\n }\n });\n\n /**\n * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n *\n * @name AcroFormField#fieldName\n * @default null\n * @type {string}\n */\n Object.defineProperty(this, \"fieldName\", {\n configurable: true,\n enumerable: true,\n get: function() {\n return _T;\n },\n set: function(value) {\n _T = value;\n }\n });\n\n var _fontName = \"helvetica\";\n /**\n * The fontName of the font to be used.\n *\n * @name AcroFormField#fontName\n * @default 'helvetica'\n * @type {string}\n */\n Object.defineProperty(this, \"fontName\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontName;\n },\n set: function(value) {\n _fontName = value;\n }\n });\n\n var _fontStyle = \"normal\";\n /**\n * The fontStyle of the font to be used.\n *\n * @name AcroFormField#fontStyle\n * @default 'normal'\n * @type {string}\n */\n Object.defineProperty(this, \"fontStyle\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontStyle;\n },\n set: function(value) {\n _fontStyle = value;\n }\n });\n\n var _fontSize = 0;\n /**\n * The fontSize of the font to be used.\n *\n * @name AcroFormField#fontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"fontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontSize;\n },\n set: function(value) {\n _fontSize = value;\n }\n });\n\n var _maxFontSize = undefined;\n /**\n * The maximum fontSize of the font to be used.\n *\n * @name AcroFormField#maxFontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"maxFontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (_maxFontSize === undefined) {\n // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n return 50 / scaleFactor;\n } else {\n return _maxFontSize;\n }\n },\n set: function(value) {\n _maxFontSize = value;\n }\n });\n\n var _color = \"black\";\n /**\n * The color of the text\n *\n * @name AcroFormField#color\n * @default 'black'\n * @type {string|rgba}\n */\n Object.defineProperty(this, \"color\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _color;\n },\n set: function(value) {\n _color = value;\n }\n });\n\n var _DA = \"/F1 0 Tf 0 g\";\n // Defines the default appearance (Needed for variable Text)\n Object.defineProperty(this, \"DA\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (\n !_DA ||\n this instanceof AcroFormChildClass ||\n this instanceof AcroFormTextField\n ) {\n return undefined;\n }\n return toPdfString(_DA, this.objId, this.scope);\n },\n set: function(value) {\n value = value.toString();\n _DA = value;\n }\n });\n\n var _DV = null;\n Object.defineProperty(this, \"DV\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DV) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_DV, this.objId, this.scope);\n }\n return _DV;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _DV = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _DV = pdfUnescape(value);\n }\n } else {\n _DV = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n *\n * @name AcroFormField#defaultValue\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"defaultValue\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_DV.substr(1, _DV.length - 1));\n } else {\n return _DV;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _DV = \"/\" + value;\n } else {\n _DV = value;\n }\n }\n });\n\n var _V = null;\n Object.defineProperty(this, \"_V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n return _V;\n },\n set: function(value) {\n this.V = value;\n }\n });\n Object.defineProperty(this, \"V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_V, this.objId, this.scope);\n }\n return _V;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _V = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _V = pdfUnescape(value);\n }\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n *\n * @name AcroFormField#value\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"value\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_V.substr(1, _V.length - 1));\n } else {\n return _V;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _V = \"/\" + value;\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * Check if field has annotations\n *\n * @name AcroFormField#hasAnnotation\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAnnotation\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.Rect;\n }\n });\n\n Object.defineProperty(this, \"Type\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Annot\" : null;\n }\n });\n\n Object.defineProperty(this, \"Subtype\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Widget\" : null;\n }\n });\n\n var _hasAppearanceStream = false;\n /**\n * true if field has an appearanceStream\n *\n * @name AcroFormField#hasAppearanceStream\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _hasAppearanceStream;\n },\n set: function(value) {\n value = Boolean(value);\n _hasAppearanceStream = value;\n }\n });\n\n /**\n * The page on which the AcroFormField is placed\n *\n * @name AcroFormField#page\n * @type {number}\n */\n var _page;\n Object.defineProperty(this, \"page\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_page) {\n return undefined;\n }\n return _page;\n },\n set: function(value) {\n _page = value;\n }\n });\n\n /**\n * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n *\n * @name AcroFormField#readOnly\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"readOnly\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 1));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 1);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 1);\n }\n }\n });\n\n /**\n * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n *\n * @name AcroFormField#required\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 2));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 2);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 2);\n }\n }\n });\n\n /**\n * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n *\n * @name AcroFormField#noExport\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"noExport\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 3);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 3);\n }\n }\n });\n\n var _Q = null;\n Object.defineProperty(this, \"Q\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (_Q === null) {\n return undefined;\n }\n return _Q;\n },\n set: function(value) {\n if ([0, 1, 2].indexOf(value) !== -1) {\n _Q = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Q supplied.'\n );\n }\n }\n });\n\n /**\n * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n * 'left', 'center', 'right'\n *\n * @name AcroFormField#textAlign\n * @default 'left'\n * @type {string}\n */\n Object.defineProperty(this, \"textAlign\", {\n get: function() {\n var result;\n switch (_Q) {\n case 0:\n default:\n result = \"left\";\n break;\n case 1:\n result = \"center\";\n break;\n case 2:\n result = \"right\";\n break;\n }\n return result;\n },\n configurable: true,\n enumerable: true,\n set: function(value) {\n switch (value) {\n case \"right\":\n case 2:\n _Q = 2;\n break;\n case \"center\":\n case 1:\n _Q = 1;\n break;\n case \"left\":\n case 0:\n default:\n _Q = 0;\n }\n }\n });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n AcroFormField.call(this);\n // Field Type = Choice Field\n this.FT = \"/Ch\";\n // options\n this.V = \"()\";\n\n this.fontName = \"zapfdingbats\";\n // Top Index\n var _TI = 0;\n\n Object.defineProperty(this, \"TI\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n /**\n * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n *\n * @name AcroFormChoiceField#topIndex\n * @default 0\n * @type {number}\n */\n Object.defineProperty(this, \"topIndex\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n var _Opt = [];\n Object.defineProperty(this, \"Opt\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return arrayToPdfArray(_Opt, this.objId, this.scope);\n },\n set: function(value) {\n _Opt = pdfArrayToStringArray(value);\n }\n });\n\n /**\n * @memberof AcroFormChoiceField\n * @name getOptions\n * @function\n * @instance\n * @returns {array} array of Options\n */\n this.getOptions = function() {\n return _Opt;\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name setOptions\n * @function\n * @instance\n * @param {array} value\n */\n this.setOptions = function(value) {\n _Opt = value;\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name addOption\n * @function\n * @instance\n * @param {string} value\n */\n this.addOption = function(value) {\n value = value || \"\";\n value = value.toString();\n _Opt.push(value);\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name removeOption\n * @function\n * @instance\n * @param {string} value\n * @param {boolean} allEntries (default: false)\n */\n this.removeOption = function(value, allEntries) {\n allEntries = allEntries || false;\n value = value || \"\";\n value = value.toString();\n\n while (_Opt.indexOf(value) !== -1) {\n _Opt.splice(_Opt.indexOf(value), 1);\n if (allEntries === false) {\n break;\n }\n }\n };\n\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n *\n * @name AcroFormChoiceField#combo\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"combo\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 18));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 18);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 18);\n }\n }\n });\n\n /**\n * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n *\n * @name AcroFormChoiceField#edit\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"edit\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 19));\n },\n set: function(value) {\n //PDF 32000-1:2008, page 444\n if (this.combo === true) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 19);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 19);\n }\n }\n }\n });\n\n /**\n * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n *\n * @name AcroFormChoiceField#sort\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"sort\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 20));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 20);\n _Opt.sort();\n } else {\n this.Ff = clearBitForPdf(this.Ff, 20);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n *\n * @name AcroFormChoiceField#multiSelect\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 22));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 22);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 22);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n *\n * @name AcroFormChoiceField#doNotSpellCheck\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n *\n * @name AcroFormChoiceField#commitOnSelChange\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"commitOnSelChange\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 27));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 27);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 27);\n }\n }\n });\n\n this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n AcroFormChoiceField.call(this);\n this.fontName = \"helvetica\";\n\n //PDF 32000-1:2008, page 444\n this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n AcroFormListBox.call(this);\n this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n AcroFormComboBox.call(this);\n this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n AcroFormField.call(this);\n this.FT = \"/Btn\";\n\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n *\n * @name AcroFormButton#noToggleToOff\n * @type {boolean}\n */\n Object.defineProperty(this, \"noToggleToOff\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 15));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 15);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 15);\n }\n }\n });\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n *\n * @name AcroFormButton#radio\n * @type {boolean}\n */\n Object.defineProperty(this, \"radio\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 16));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 16);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 16);\n }\n }\n });\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n *\n * @name AcroFormButton#pushButton\n * @type {boolean}\n */\n Object.defineProperty(this, \"pushButton\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 17));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 17);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 17);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n *\n * @name AcroFormButton#radioIsUnison\n * @type {boolean}\n */\n Object.defineProperty(this, \"radioIsUnison\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n if (Object.keys(_MK).length !== 0) {\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n }\n return undefined;\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n AcroFormButton.call(this);\n this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n AcroFormButton.call(this);\n this.radio = true;\n this.pushButton = false;\n\n var _Kids = [];\n Object.defineProperty(this, \"Kids\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _Kids;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Kids = value;\n } else {\n _Kids = [];\n }\n }\n });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n AcroFormField.call(this);\n\n var _parent;\n Object.defineProperty(this, \"Parent\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _parent;\n },\n set: function(value) {\n _parent = value;\n }\n });\n\n var _optionName;\n Object.defineProperty(this, \"optionName\", {\n enumerable: false,\n configurable: true,\n get: function() {\n return _optionName;\n },\n set: function(value) {\n _optionName = value;\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n this.caption = \"l\";\n this.appearanceState = \"Off\";\n // todo: set AppearanceType as variable that can be set from the\n // outside...\n this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n // The Default appearanceType is the Circle\n this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n this.optionName\n );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n throw new Error(\n \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n );\n }\n for (var objId in this.Kids) {\n if (this.Kids.hasOwnProperty(objId)) {\n var child = this.Kids[objId];\n child.appearanceStreamContent = appearance.createAppearanceStream(\n child.optionName\n );\n child.caption = appearance.getCA();\n }\n }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n // Create new Child for RadioGroup\n var child = new AcroFormChildClass();\n child.Parent = this;\n child.optionName = name;\n // Add to Parent\n this.Kids.push(child);\n\n addField.call(this.scope, child);\n\n return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n AcroFormButton.call(this);\n\n this.fontName = \"zapfdingbats\";\n this.caption = \"3\";\n this.appearanceState = \"On\";\n this.value = \"On\";\n this.textAlign = \"center\";\n this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n AcroFormField.call(this);\n this.FT = \"/Tx\";\n\n /**\n * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n *\n * @name AcroFormTextField#multiline\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiline\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 13));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 13);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 13);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n *\n * @name AcroFormTextField#fileSelect\n * @type {boolean}\n */\n Object.defineProperty(this, \"fileSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 21));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 21);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 21);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n *\n * @name AcroFormTextField#doNotSpellCheck\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n *\n * @name AcroFormTextField#doNotScroll\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotScroll\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 24));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 24);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 24);\n }\n }\n });\n\n /**\n * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n *\n * @name AcroFormTextField#comb\n * @type {boolean}\n */\n Object.defineProperty(this, \"comb\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 25));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 25);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 25);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n *\n * @name AcroFormTextField#richText\n * @type {boolean}\n */\n Object.defineProperty(this, \"richText\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MaxLen = null;\n Object.defineProperty(this, \"MaxLen\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n _MaxLen = value;\n }\n });\n\n /**\n * (Optional; inheritable) The maximum length of the field’s text, in characters.\n *\n * @name AcroFormTextField#maxLength\n * @type {number}\n */\n Object.defineProperty(this, \"maxLength\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n if (Number.isInteger(value)) {\n _MaxLen = value;\n }\n }\n });\n\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.V || this.DV;\n }\n });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n AcroFormTextField.call(this);\n\n /**\n * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n *\n * @name AcroFormTextField#password\n * @type {boolean}\n */\n Object.defineProperty(this, \"password\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 14));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 14);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 14);\n }\n }\n });\n this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n CheckBox: {\n createAppearanceStream: function() {\n var appearance = {\n N: {\n On: AcroFormAppearance.CheckBox.YesNormal\n },\n D: {\n On: AcroFormAppearance.CheckBox.YesPushDown,\n Off: AcroFormAppearance.CheckBox.OffPushDown\n }\n };\n\n return appearance;\n },\n /**\n * Returns the standard On Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"BMC\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(\"BT\");\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n stream.push(\"EMC\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var stream = [];\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"1 g\");\n stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(\"0 g\");\n stream.push(\"BT\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n /**\n * Returns the standard Off Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n RadioButton: {\n Circle: {\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Circle.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Circle.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"l\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n // Make the Radius of the Circle relative to min(height, width) of formObject\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n var c = AcroFormAppearance.internal.Bezier_C;\n var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n /*\n * The Following is a Circle created with Bezier-Curves.\n */\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n var dc = Number(\n (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n );\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n stream.push(\"0 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n \"\" +\n DotRadius +\n \" \" +\n dc +\n \" \" +\n dc +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n dc +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n dc +\n \" -\" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n dc +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n dc +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n Cross: {\n /**\n * Creates the Actual AppearanceDictionary-References\n *\n * @param {string} name\n * @returns {Object}\n * @ignore\n */\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Cross.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Cross.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"8\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n }\n },\n\n /**\n * Returns the standard Appearance\n *\n * @returns {AcroFormXObject}\n */\n createDefaultAppearanceStream: function(formObject) {\n // Set Helvetica to Standard Font (size: auto)\n // Color: Black\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var fontSize = formObject.fontSize;\n var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n return result;\n }\n};\n\nAcroFormAppearance.internal = {\n Bezier_C: 0.551915024494,\n\n calculateCross: function(formObject) {\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var a = Math.min(width, height);\n\n var cross = {\n x1: {\n // upperLeft\n x: (width - a) / 2,\n y: (height - a) / 2 + a // height - borderPadding\n },\n x2: {\n // lowerRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 // borderPadding\n },\n x3: {\n // lowerLeft\n x: (width - a) / 2,\n y: (height - a) / 2 // borderPadding\n },\n x4: {\n // upperRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 + a // height - borderPadding\n }\n };\n\n return cross;\n }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[2]);\n }\n return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[3]);\n }\n return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n initializeAcroForm(this, fieldObject);\n\n if (fieldObject instanceof AcroFormField) {\n putForm(fieldObject);\n } else {\n throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n }\n fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n AcroForm,\n AcroFormChoiceField,\n AcroFormListBox,\n AcroFormComboBox,\n AcroFormEditBox,\n AcroFormButton,\n AcroFormPushButton,\n AcroFormRadioButton,\n AcroFormCheckBox,\n AcroFormTextField,\n AcroFormPasswordField,\n AcroFormAppearance\n};\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namespace = \"addImage_\";\n jsPDFAPI.__addimage__ = {};\n\n var UNKNOWN = \"UNKNOWN\";\n\n // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n // With too small batch iteration will be slow as more calls are made,\n // higher values cause larger and slower garbage collection.\n var ARRAY_APPLY_BATCH = 8192;\n\n var imageFileTypeHeaders = {\n PNG: [[0x89, 0x50, 0x4e, 0x47]],\n TIFF: [\n [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n [0x49, 0x49, 0x2a, 0x00] //Intel\n ],\n JPEG: [\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe0,\n undefined,\n undefined,\n 0x4a,\n 0x46,\n 0x49,\n 0x46,\n 0x00\n ], //JFIF\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe1,\n undefined,\n undefined,\n 0x45,\n 0x78,\n 0x69,\n 0x66,\n 0x00,\n 0x00\n ], //Exif\n [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n ],\n JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n WEBP: [\n [\n 0x52,\n 0x49,\n 0x46,\n 0x46,\n undefined,\n undefined,\n undefined,\n undefined,\n 0x57,\n 0x45,\n 0x42,\n 0x50\n ]\n ],\n BMP: [\n [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n [0x42, 0x41], //BA - OS/2 struct bitmap array\n [0x43, 0x49], //CI - OS/2 struct color icon\n [0x43, 0x50], //CP - OS/2 const color pointer\n [0x49, 0x43], //IC - OS/2 struct icon\n [0x50, 0x54] //PT - OS/2 pointer\n ]\n };\n\n /**\n * Recognize filetype of Image by magic-bytes\n *\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n *\n * @name getImageFileTypeByImageData\n * @public\n * @function\n * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n *\n * @returns {string} filetype of Image\n */\n var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n imageData,\n fallbackFormat\n ) {\n fallbackFormat = fallbackFormat || UNKNOWN;\n var i;\n var j;\n var result = UNKNOWN;\n var headerSchemata;\n var compareResult;\n var fileType;\n\n if (\n fallbackFormat === \"RGBA\" ||\n (imageData.data !== undefined &&\n imageData.data instanceof Uint8ClampedArray &&\n \"height\" in imageData &&\n \"width\" in imageData)\n ) {\n return \"RGBA\";\n }\n\n if (isArrayBufferView(imageData)) {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData[j]) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n } else {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n }\n\n if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n result = fallbackFormat;\n }\n return result;\n });\n\n // Image functionality ported from pdf.js\n var putImage = function(image) {\n var out = this.internal.write;\n var putStream = this.internal.putStream;\n var getFilters = this.internal.getFilters;\n\n var filter = getFilters();\n while (filter.indexOf(\"FlateEncode\") !== -1) {\n filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n }\n\n image.objectId = this.internal.newObject();\n\n var additionalKeyValues = [];\n additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n additionalKeyValues.push({ key: \"Width\", value: image.width });\n additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n if (image.colorSpace === color_spaces.INDEXED) {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value:\n \"[/Indexed /DeviceRGB \" +\n // if an indexed png defines more than one colour with transparency, we've created a sMask\n (image.palette.length / 3 - 1) +\n \" \" +\n (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n ? image.objectId + 2\n : image.objectId + 1) +\n \" 0 R]\"\n });\n } else {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value: \"/\" + image.colorSpace\n });\n if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n }\n }\n additionalKeyValues.push({\n key: \"BitsPerComponent\",\n value: image.bitsPerComponent\n });\n if (\n \"decodeParameters\" in image &&\n typeof image.decodeParameters !== \"undefined\"\n ) {\n additionalKeyValues.push({\n key: \"DecodeParms\",\n value: \"<<\" + image.decodeParameters + \">>\"\n });\n }\n if (\"transparency\" in image && Array.isArray(image.transparency)) {\n var transparency = \"\",\n i = 0,\n len = image.transparency.length;\n for (; i < len; i++)\n transparency +=\n image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n additionalKeyValues.push({\n key: \"Mask\",\n value: \"[\" + transparency + \"]\"\n });\n }\n if (typeof image.sMask !== \"undefined\") {\n additionalKeyValues.push({\n key: \"SMask\",\n value: image.objectId + 1 + \" 0 R\"\n });\n }\n\n var alreadyAppliedFilters =\n typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n putStream({\n data: image.data,\n additionalKeyValues: additionalKeyValues,\n alreadyAppliedFilters: alreadyAppliedFilters,\n objectId: image.objectId\n });\n\n out(\"endobj\");\n\n // Soft mask\n if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n var decodeParameters =\n \"/Predictor \" +\n image.predictor +\n \" /Colors 1 /BitsPerComponent \" +\n image.bitsPerComponent +\n \" /Columns \" +\n image.width;\n var sMask = {\n width: image.width,\n height: image.height,\n colorSpace: \"DeviceGray\",\n bitsPerComponent: image.bitsPerComponent,\n decodeParameters: decodeParameters,\n data: image.sMask\n };\n if (\"filter\" in image) {\n sMask.filter = image.filter;\n }\n putImage.call(this, sMask);\n }\n\n //Palette\n if (image.colorSpace === color_spaces.INDEXED) {\n var objId = this.internal.newObject();\n //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n //putStream(zlib.compress(img['pal']));\n putStream({\n data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n objectId: objId\n });\n out(\"endobj\");\n }\n };\n var putResourcesCallback = function() {\n var images = this.internal.collections[namespace + \"images\"];\n for (var i in images) {\n putImage.call(this, images[i]);\n }\n };\n var putXObjectsDictCallback = function() {\n var images = this.internal.collections[namespace + \"images\"],\n out = this.internal.write,\n image;\n for (var i in images) {\n image = images[i];\n out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n }\n };\n\n var checkCompressValue = function(value) {\n if (value && typeof value === \"string\") value = value.toUpperCase();\n return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n };\n\n var initialize = function() {\n if (!this.internal.collections[namespace + \"images\"]) {\n this.internal.collections[namespace + \"images\"] = {};\n this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n }\n };\n\n var getImages = function() {\n var images = this.internal.collections[namespace + \"images\"];\n initialize.call(this);\n return images;\n };\n var getImageIndex = function() {\n return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n };\n var notDefined = function(value) {\n return typeof value === \"undefined\" || value === null || value.length === 0;\n };\n var generateAliasFromImageData = function(imageData) {\n if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n return sHashCode(imageData);\n } else if (isArrayBufferView(imageData.data)) {\n return sHashCode(imageData.data);\n }\n\n return null;\n };\n\n var isImageTypeSupported = function(type) {\n return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n };\n\n var isDOMElement = function(object) {\n return typeof object === \"object\" && object.nodeType === 1;\n };\n\n var getImageDataFromElement = function(element, format) {\n //if element is an image which uses data url definition, just return the dataurl\n if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n var src = \"\" + element.getAttribute(\"src\");\n\n //is base64 encoded dataUrl, directly process it\n if (src.indexOf(\"data:image/\") === 0) {\n return atob(\n unescape(src)\n .split(\"base64,\")\n .pop()\n );\n }\n\n //it is probably an url, try to load it\n var tmpImageData = jsPDFAPI.loadFile(src, true);\n if (tmpImageData !== undefined) {\n return tmpImageData;\n }\n }\n\n if (element.nodeName === \"CANVAS\") {\n if (element.width === 0 || element.height === 0) {\n throw new Error(\n \"Given canvas must have data. Canvas width: \" +\n element.width +\n \", height: \" +\n element.height\n );\n }\n var mimeType;\n switch (format) {\n case \"PNG\":\n mimeType = \"image/png\";\n break;\n case \"WEBP\":\n mimeType = \"image/webp\";\n break;\n case \"JPEG\":\n case \"JPG\":\n default:\n mimeType = \"image/jpeg\";\n break;\n }\n return atob(\n element\n .toDataURL(mimeType, 1.0)\n .split(\"base64,\")\n .pop()\n );\n }\n };\n\n var checkImagesForAlias = function(alias) {\n var images = this.internal.collections[namespace + \"images\"];\n if (images) {\n for (var e in images) {\n if (alias === images[e].alias) {\n return images[e];\n }\n }\n }\n };\n\n var determineWidthAndHeight = function(width, height, image) {\n if (!width && !height) {\n width = -96;\n height = -96;\n }\n if (width < 0) {\n width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n }\n if (height < 0) {\n height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n }\n if (width === 0) {\n width = (height * image.width) / image.height;\n }\n if (height === 0) {\n height = (width * image.height) / image.width;\n }\n\n return [width, height];\n };\n\n var writeImageToPDF = function(x, y, width, height, image, rotation) {\n var dims = determineWidthAndHeight.call(this, width, height, image),\n coord = this.internal.getCoordinateString,\n vcoord = this.internal.getVerticalCoordinateString;\n\n var images = getImages.call(this);\n\n width = dims[0];\n height = dims[1];\n images[image.index] = image;\n\n if (rotation) {\n rotation *= Math.PI / 180;\n var c = Math.cos(rotation);\n var s = Math.sin(rotation);\n //like in pdf Reference do it 4 digits instead of 2\n var f4 = function(number) {\n return number.toFixed(4);\n };\n var rotationTransformationMatrix = [\n f4(c),\n f4(s),\n f4(s * -1),\n f4(c),\n 0,\n 0,\n \"cm\"\n ];\n }\n this.internal.write(\"q\"); //Save graphics state\n if (rotation) {\n this.internal.write(\n [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n ); //Translate\n this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n this.internal.write(\n [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n ); //Scale\n } else {\n this.internal.write(\n [\n coord(width),\n \"0\",\n \"0\",\n coord(height),\n coord(x),\n vcoord(y + height),\n \"cm\"\n ].join(\" \")\n ); //Translate and Scale\n }\n\n if (this.isAdvancedAPI()) {\n // draw image bottom up when in \"advanced\" API mode\n this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n }\n\n this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n this.internal.write(\"Q\"); //Restore graphics state\n };\n\n /**\n * COLOR SPACES\n */\n var color_spaces = (jsPDFAPI.color_spaces = {\n DEVICE_RGB: \"DeviceRGB\",\n DEVICE_GRAY: \"DeviceGray\",\n DEVICE_CMYK: \"DeviceCMYK\",\n CAL_GREY: \"CalGray\",\n CAL_RGB: \"CalRGB\",\n LAB: \"Lab\",\n ICC_BASED: \"ICCBased\",\n INDEXED: \"Indexed\",\n PATTERN: \"Pattern\",\n SEPARATION: \"Separation\",\n DEVICE_N: \"DeviceN\"\n });\n\n /**\n * DECODE METHODS\n */\n jsPDFAPI.decode = {\n DCT_DECODE: \"DCTDecode\",\n FLATE_DECODE: \"FlateDecode\",\n LZW_DECODE: \"LZWDecode\",\n JPX_DECODE: \"JPXDecode\",\n JBIG2_DECODE: \"JBIG2Decode\",\n ASCII85_DECODE: \"ASCII85Decode\",\n ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n RUN_LENGTH_DECODE: \"RunLengthDecode\",\n CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n };\n\n /**\n * IMAGE COMPRESSION TYPES\n */\n var image_compression = (jsPDFAPI.image_compression = {\n NONE: \"NONE\",\n FAST: \"FAST\",\n MEDIUM: \"MEDIUM\",\n SLOW: \"SLOW\"\n });\n\n /**\n * @name sHashCode\n * @function\n * @param {string} data\n * @returns {string}\n */\n var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n var hash = 0,\n i,\n len;\n\n if (typeof data === \"string\") {\n len = data.length;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n } else if (isArrayBufferView(data)) {\n len = data.byteLength / 2;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data[i];\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n });\n\n /**\n * Validates if given String is a valid Base64-String\n *\n * @name validateStringAsBase64\n * @public\n * @function\n * @param {String} possible Base64-String\n *\n * @returns {boolean}\n */\n var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n possibleBase64String\n ) {\n possibleBase64String = possibleBase64String || \"\";\n possibleBase64String.toString().trim();\n\n var result = true;\n\n if (possibleBase64String.length === 0) {\n result = false;\n }\n\n if (possibleBase64String.length % 4 !== 0) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9+/]+$/.test(\n possibleBase64String.substr(0, possibleBase64String.length - 2)\n ) === false\n ) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n possibleBase64String.substr(-2)\n ) === false\n ) {\n result = false;\n }\n return result;\n });\n\n /**\n * Strips out and returns info from a valid base64 data URI\n *\n * @name extractImageFromDataUrl\n * @function\n * @param {string} dataUrl a valid data URI of format 'data:[][;base64],'\n * @returns {Array}an Array containing the following\n * [0] the complete data URI\n * [1] \n * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n * [4] \n */\n var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n dataUrl\n ) {\n dataUrl = dataUrl || \"\";\n var dataUrlParts = dataUrl.split(\"base64,\");\n var result = null;\n\n if (dataUrlParts.length === 2) {\n var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n dataUrlParts[0]\n );\n if (Array.isArray(extractedInfo)) {\n result = {\n mimeType: extractedInfo[1],\n charset: extractedInfo[2],\n data: dataUrlParts[1]\n };\n }\n }\n return result;\n });\n\n /**\n * Check to see if ArrayBuffer is supported\n *\n * @name supportsArrayBuffer\n * @function\n * @returns {boolean}\n */\n var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n return (\n typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n );\n });\n\n /**\n * Tests supplied object to determine if ArrayBuffer\n *\n * @name isArrayBuffer\n * @function\n * @param {Object} object an Object\n *\n * @returns {boolean}\n */\n jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n return supportsArrayBuffer() && object instanceof ArrayBuffer;\n };\n\n /**\n * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n *\n * @name isArrayBufferView\n * @function\n * @param {Object} object an Object\n * @returns {boolean}\n */\n var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n object\n ) {\n return (\n supportsArrayBuffer() &&\n typeof Uint32Array !== \"undefined\" &&\n (object instanceof Int8Array ||\n object instanceof Uint8Array ||\n (typeof Uint8ClampedArray !== \"undefined\" &&\n object instanceof Uint8ClampedArray) ||\n object instanceof Int16Array ||\n object instanceof Uint16Array ||\n object instanceof Int32Array ||\n object instanceof Uint32Array ||\n object instanceof Float32Array ||\n object instanceof Float64Array)\n );\n });\n\n /**\n * Convert Binary String to ArrayBuffer\n *\n * @name binaryStringToUint8Array\n * @public\n * @function\n * @param {string} BinaryString with ImageData\n * @returns {Uint8Array}\n */\n var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n binary_string\n ) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n });\n\n /**\n * Convert the Buffer to a Binary String\n *\n * @name arrayBufferToBinaryString\n * @public\n * @function\n * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n *\n * @returns {String}\n */\n var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n buffer\n ) {\n var out = \"\";\n // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n // Do not copy the array if input is already an array.\n var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n // Limit the amount of characters being parsed to prevent overflow.\n // Note that while TextDecoder would be faster, it does not have the same\n // functionality as fromCharCode with any provided encodings as of 3/2021.\n out += String.fromCharCode.apply(\n null,\n buf.subarray(i, i + ARRAY_APPLY_BATCH)\n );\n }\n return out;\n });\n\n /**\n * Possible parameter for addImage, an RGBA buffer with size.\n *\n * @typedef {Object} RGBAData\n * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n * @property {number} width - Image width as the data does not carry this information in itself.\n * @property {number} height - Image height as the data does not carry this information in itself.\n */\n\n /**\n * Adds an Image to the PDF.\n *\n * @name addImage\n * @public\n * @function\n * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width width of the image (in units declared at inception of PDF document)\n * @param {number} height height of the Image (in units declared at inception of PDF document)\n * @param {string} alias alias of the image (if used multiple times)\n * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation rotation of the image in degrees (0-359)\n *\n * @returns jsPDF\n */\n jsPDFAPI.addImage = function() {\n var imageData, format, x, y, w, h, alias, compression, rotation;\n\n imageData = arguments[0];\n if (typeof arguments[1] === \"number\") {\n format = UNKNOWN;\n x = arguments[1];\n y = arguments[2];\n w = arguments[3];\n h = arguments[4];\n alias = arguments[5];\n compression = arguments[6];\n rotation = arguments[7];\n } else {\n format = arguments[1];\n x = arguments[2];\n y = arguments[3];\n w = arguments[4];\n h = arguments[5];\n alias = arguments[6];\n compression = arguments[7];\n rotation = arguments[8];\n }\n\n if (\n typeof imageData === \"object\" &&\n !isDOMElement(imageData) &&\n \"imageData\" in imageData\n ) {\n var options = imageData;\n\n imageData = options.imageData;\n format = options.format || format || UNKNOWN;\n x = options.x || x || 0;\n y = options.y || y || 0;\n w = options.w || options.width || w;\n h = options.h || options.height || h;\n alias = options.alias || alias;\n compression = options.compression || compression;\n rotation = options.rotation || options.angle || rotation;\n }\n\n //If compression is not explicitly set, determine if we should use compression\n var filter = this.internal.getFilters();\n if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n compression = \"SLOW\";\n }\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n }\n\n initialize.call(this);\n\n var image = processImageData.call(\n this,\n imageData,\n format,\n alias,\n compression\n );\n\n writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n return this;\n };\n\n var processImageData = function(imageData, format, alias, compression) {\n var result, dataAsBinaryString;\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n imageData = unescape(imageData);\n var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData !== \"\") {\n imageData = tmpImageData;\n } else {\n tmpImageData = jsPDFAPI.loadFile(imageData, true);\n if (tmpImageData !== undefined) {\n imageData = tmpImageData;\n }\n }\n }\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData, format);\n }\n\n format = getImageFileTypeByImageData(imageData, format);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n // now do the heavy lifting\n\n if (notDefined(alias)) {\n alias = generateAliasFromImageData(imageData);\n }\n result = checkImagesForAlias.call(this, alias);\n\n if (!result) {\n if (supportsArrayBuffer()) {\n // no need to convert if imageData is already uint8array\n if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n dataAsBinaryString = imageData;\n imageData = binaryStringToUint8Array(imageData);\n }\n }\n\n result = this[\"process\" + format.toUpperCase()](\n imageData,\n getImageIndex.call(this),\n alias,\n checkCompressValue(compression),\n dataAsBinaryString\n );\n }\n\n if (!result) {\n throw new Error(\"An unknown error occurred whilst processing the image.\");\n }\n return result;\n };\n\n /**\n * @name convertBase64ToBinaryString\n * @function\n * @param {string} stringData\n * @returns {string} binary string\n */\n var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n stringData,\n throwError\n ) {\n throwError = typeof throwError === \"boolean\" ? throwError : true;\n var base64Info;\n var imageData = \"\";\n var rawData;\n\n if (typeof stringData === \"string\") {\n base64Info = extractImageFromDataUrl(stringData);\n rawData = base64Info !== null ? base64Info.data : stringData;\n\n try {\n imageData = atob(rawData);\n } catch (e) {\n if (throwError) {\n if (!validateStringAsBase64(rawData)) {\n throw new Error(\n \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n );\n } else {\n throw new Error(\n \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n );\n }\n }\n }\n }\n return imageData;\n });\n\n /**\n * @name getImageProperties\n * @function\n * @param {Object} imageData\n * @returns {Object}\n */\n jsPDFAPI.getImageProperties = function(imageData) {\n var image;\n var tmpImageData = \"\";\n var format;\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData);\n }\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData === \"\") {\n tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n }\n imageData = tmpImageData;\n }\n\n format = getImageFileTypeByImageData(imageData);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n imageData = binaryStringToUint8Array(imageData);\n }\n\n image = this[\"process\" + format.toUpperCase()](imageData);\n\n if (!image) {\n throw new Error(\"An unknown error occurred whilst processing the image\");\n }\n\n image.fileType = format;\n\n return image;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n *
    \n * This plugin current supports
    \n *
  1. Goto Page (set pageNumber and top in options)\n *
  2. Goto Name (set name and top in options)\n *
  3. Goto URL (set url in options)\n *

    \n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n * (set magFactor in options). XYZ is the default.\n *

    \n *

    \n * Links, Text, Popup, and FreeText are supported.\n *

    \n *

    \n * Options In PDF spec Not Implemented Yet\n *

  4. link border\n *
  5. named target\n *
  6. page coordinates\n *
  7. destination page scaling and layout\n *
  8. actions other than URL and GotoPage\n *
  9. background / hover actions\n *

    \n * @name annotations\n * @module\n */\n\n/*\n Destination Magnification Factors\n See PDF 1.3 Page 386 for meanings and options\n\n [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var notEmpty = function(obj) {\n if (typeof obj != \"undefined\") {\n if (obj != \"\") {\n return true;\n }\n }\n };\n\n jsPDF.API.events.push([\n \"addPage\",\n function(addPageData) {\n var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n pageInfo.pageContext.annotations = [];\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putPage\",\n function(putPageData) {\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal\n .getVerticalCoordinateString;\n var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n var pageAnnos = putPageData.pageContext.annotations;\n\n var anno, rect, line;\n var found = false;\n for (var a = 0; a < pageAnnos.length && !found; a++) {\n anno = pageAnnos[a];\n switch (anno.type) {\n case \"link\":\n if (\n notEmpty(anno.options.url) ||\n notEmpty(anno.options.pageNumber)\n ) {\n found = true;\n }\n break;\n case \"reference\":\n case \"text\":\n case \"freetext\":\n found = true;\n break;\n }\n }\n if (found == false) {\n return;\n }\n\n this.internal.write(\"/Annots [\");\n for (var i = 0; i < pageAnnos.length; i++) {\n anno = pageAnnos[i];\n var escape = this.internal.pdfEscape;\n var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n switch (anno.type) {\n case \"reference\":\n // References to Widget Annotations (for AcroForm Fields)\n this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n break;\n case \"text\":\n // Create a an object for both the text and the popup\n var objText = this.internal.newAdditionalObject();\n var objPopup = this.internal.newAdditionalObject();\n var encryptorText = this.internal.getEncryptor(objText.objId);\n\n var title = anno.title || \"Note\";\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n\n line =\n \"<>\";\n objText.content = line;\n\n var parent = objText.objId + \" 0 R\";\n var popoff = 30;\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x + popoff) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(\n anno.bounds.x + anno.bounds.w + popoff\n ) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n line =\n \"<>\";\n objPopup.content = line;\n\n this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n break;\n case \"freetext\":\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \"] \";\n var color = anno.color || \"#000000\";\n line =\n \"<>\";\n this.internal.write(line);\n break;\n case \"link\":\n if (anno.options.name) {\n var loc = this.annotations._nameMap[anno.options.name];\n anno.options.pageNumber = loc.page;\n anno.options.top = loc.y;\n } else {\n if (!anno.options.top) {\n anno.options.top = 0;\n }\n }\n\n rect =\n \"/Rect [\" +\n anno.finalBounds.x +\n \" \" +\n anno.finalBounds.y +\n \" \" +\n anno.finalBounds.w +\n \" \" +\n anno.finalBounds.h +\n \"] \";\n\n line = \"\";\n if (anno.options.url) {\n line =\n \"<>\";\n } else if (anno.options.pageNumber) {\n // first page is 0\n var info = this.internal.getPageInfo(anno.options.pageNumber);\n line =\n \"<>\";\n this.internal.write(line);\n }\n break;\n }\n }\n this.internal.write(\"]\");\n }\n ]);\n\n /**\n * @name createAnnotation\n * @function\n * @param {Object} options\n */\n jsPDFAPI.createAnnotation = function(options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n switch (options.type) {\n case \"link\":\n this.link(\n options.bounds.x,\n options.bounds.y,\n options.bounds.w,\n options.bounds.h,\n options\n );\n break;\n case \"text\":\n case \"freetext\":\n pageInfo.pageContext.annotations.push(options);\n break;\n }\n };\n\n /**\n * Create a link\n *\n * valid options\n *
  10. pageNumber or url [required]\n *

    If pageNumber is specified, top and zoom may also be specified

    \n * @name link\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {Object} options\n */\n jsPDFAPI.link = function(x, y, w, h, options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n pageInfo.pageContext.annotations.push({\n finalBounds: {\n x: getHorizontalCoordinateString(x),\n y: getVerticalCoordinateString(y),\n w: getHorizontalCoordinateString(x + w),\n h: getVerticalCoordinateString(y + h)\n },\n options: options,\n type: \"link\"\n });\n };\n\n /**\n * Currently only supports single line text.\n * Returns the width of the text/link\n *\n * @name textWithLink\n * @function\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {Object} options\n * @returns {number} width the width of the text/link\n */\n jsPDFAPI.textWithLink = function(text, x, y, options) {\n var totalLineWidth = this.getTextWidth(text);\n var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n var linkHeight, linkWidth;\n\n // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n if (options.maxWidth !== undefined) {\n var { maxWidth } = options;\n linkWidth = maxWidth;\n var numOfLines = this.splitTextToSize(text, linkWidth).length;\n linkHeight = Math.ceil(lineHeight * numOfLines);\n } else {\n linkWidth = totalLineWidth;\n linkHeight = lineHeight;\n }\n\n this.text(text, x, y, options);\n\n //TODO We really need the text baseline height to do this correctly.\n // Or ability to draw text on top, bottom, center, or baseline.\n y += lineHeight * 0.2;\n //handle x position based on the align option\n if (options.align === \"center\") {\n x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n }\n if (options.align === \"right\") {\n x = x - totalLineWidth;\n }\n this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n return totalLineWidth;\n };\n\n //TODO move into external library\n /**\n * @name getTextWidth\n * @function\n * @param {string} text\n * @returns {number} txtWidth\n */\n jsPDFAPI.getTextWidth = function(text) {\n var fontSize = this.internal.getFontSize();\n var txtWidth =\n (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n return txtWidth;\n };\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n * Arabic Substition A\n */\n var arabicSubstitionA = {\n 0x0621: [0xfe80], // ARABIC LETTER HAMZA\n 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n };\n\n /*\n var ligaturesSubstitutionA = {\n 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n };\n */\n\n var ligatures = {\n 0xfedf: {\n 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n },\n 0xfee0: {\n 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n },\n 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n 0x0651: {\n 0x064c: 0xfc5e, // Shadda + Dammatan\n 0x064d: 0xfc5f, // Shadda + Kasratan\n 0x064e: 0xfc60, // Shadda + Fatha\n 0x064f: 0xfc61, // Shadda + Damma\n 0x0650: 0xfc62 // Shadda + Kasra\n }\n };\n\n var arabic_diacritics = {\n 1612: 64606, // Shadda + Dammatan\n 1613: 64607, // Shadda + Kasratan\n 1614: 64608, // Shadda + Fatha\n 1615: 64609, // Shadda + Damma\n 1616: 64610 // Shadda + Kasra\n };\n\n var alfletter = [1570, 1571, 1573, 1575];\n\n var noChangeInForm = -1;\n var isolatedForm = 0;\n var finalForm = 1;\n var initialForm = 2;\n var medialForm = 3;\n\n jsPDFAPI.__arabicParser__ = {};\n\n //private\n var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n letter\n ) {\n return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n });\n\n var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n letter\n ) {\n return (\n typeof letter === \"string\" &&\n /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n letter\n )\n );\n });\n\n var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n );\n });\n\n var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n );\n };\n\n var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n );\n };\n\n var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length == 4\n );\n });\n\n var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n letters\n ) {\n var i = 0;\n var tmpLigatures = ligatures;\n var result = \"\";\n var effectedLetters = 0;\n\n for (i = 0; i < letters.length; i += 1) {\n if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n effectedLetters++;\n tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n if (typeof tmpLigatures === \"number\") {\n result += String.fromCharCode(tmpLigatures);\n tmpLigatures = ligatures;\n effectedLetters = 0;\n }\n if (i === letters.length - 1) {\n tmpLigatures = ligatures;\n result += letters.charAt(i - (effectedLetters - 1));\n i = i - (effectedLetters - 1);\n effectedLetters = 0;\n }\n } else {\n tmpLigatures = ligatures;\n result += letters.charAt(i - effectedLetters);\n i = i - effectedLetters;\n effectedLetters = 0;\n }\n }\n\n return result;\n });\n\n jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n return (\n letter !== undefined &&\n arabic_diacritics[letter.charCodeAt(0)] !== undefined\n );\n };\n\n var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n currentChar,\n beforeChar,\n nextChar\n ) {\n if (!isArabicLetter(currentChar)) {\n return -1;\n }\n\n if (isInArabicSubstitutionA(currentChar) === false) {\n return noChangeInForm;\n }\n if (\n !arabicLetterHasFinalForm(currentChar) ||\n (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n ) {\n return isolatedForm;\n }\n\n if (\n arabicLetterHasMedialForm(currentChar) &&\n isArabicLetter(beforeChar) &&\n !isArabicEndLetter(beforeChar) &&\n isArabicLetter(nextChar) &&\n arabicLetterHasFinalForm(nextChar)\n ) {\n return medialForm;\n }\n\n if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n return finalForm;\n }\n return initialForm;\n });\n\n /**\n * @name processArabic\n * @function\n * @param {string} text\n * @returns {string}\n */\n var parseArabic = function(text) {\n text = text || \"\";\n\n var result = \"\";\n var i = 0;\n var j = 0;\n var position = 0;\n var currentLetter = \"\";\n var prevLetter = \"\";\n var nextLetter = \"\";\n\n var words = text.split(\"\\\\s+\");\n var newWords = [];\n for (i = 0; i < words.length; i += 1) {\n newWords.push(\"\");\n for (j = 0; j < words[i].length; j += 1) {\n currentLetter = words[i][j];\n prevLetter = words[i][j - 1];\n nextLetter = words[i][j + 1];\n if (isArabicLetter(currentLetter)) {\n position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n if (position !== -1) {\n newWords[i] += String.fromCharCode(\n arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n );\n } else {\n newWords[i] += currentLetter;\n }\n } else {\n newWords[i] += currentLetter;\n }\n }\n\n newWords[i] = resolveLigatures(newWords[i]);\n }\n result = newWords.join(\" \");\n\n return result;\n };\n\n var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n var text =\n typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n var tmpText = [];\n var result;\n\n if (Array.isArray(text)) {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n } else {\n tmpText.push([parseArabic(text[i])]);\n }\n }\n result = tmpText;\n } else {\n result = parseArabic(text);\n }\n if (typeof arguments[0] === \"string\") {\n return result;\n } else {\n arguments[0].text = result;\n return arguments[0];\n }\n });\n\n jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n *\n * @name autoPrint\n * @function\n * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF();\n * doc.text(10, 10, 'This is a test');\n * doc.autoPrint({variant: 'non-conform'});\n * doc.save('autoprint.pdf');\n */\n jsPDFAPI.autoPrint = function(options) {\n \"use strict\";\n var refAutoPrintTag;\n options = options || {};\n options.variant = options.variant || \"non-conform\";\n\n switch (options.variant) {\n case \"javascript\":\n //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n this.addJS(\"print({});\");\n break;\n case \"non-conform\":\n default:\n this.internal.events.subscribe(\"postPutResources\", function() {\n refAutoPrintTag = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /Named\");\n this.internal.out(\"/Type /Action\");\n this.internal.out(\"/N /Print\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n });\n break;\n }\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @class Canvas\n * @classdesc A Canvas Wrapper for jsPDF\n */\n var Canvas = function() {\n var jsPdfInstance = undefined;\n Object.defineProperty(this, \"pdf\", {\n get: function() {\n return jsPdfInstance;\n },\n set: function(value) {\n jsPdfInstance = value;\n }\n });\n\n var _width = 150;\n /**\n * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n * This is one of the two properties, the other being width, that controls the size of the canvas.\n *\n * @name width\n */\n Object.defineProperty(this, \"width\", {\n get: function() {\n return _width;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _width = 150;\n } else {\n _width = value;\n }\n if (this.getContext(\"2d\").pageWrapXEnabled) {\n this.getContext(\"2d\").pageWrapX = _width + 1;\n }\n }\n });\n\n var _height = 300;\n /**\n * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n * This is one of the two properties, the other being height, that controls the size of the canvas.\n *\n * @name height\n */\n Object.defineProperty(this, \"height\", {\n get: function() {\n return _height;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _height = 300;\n } else {\n _height = value;\n }\n if (this.getContext(\"2d\").pageWrapYEnabled) {\n this.getContext(\"2d\").pageWrapY = _height + 1;\n }\n }\n });\n\n var _childNodes = [];\n Object.defineProperty(this, \"childNodes\", {\n get: function() {\n return _childNodes;\n },\n set: function(value) {\n _childNodes = value;\n }\n });\n\n var _style = {};\n Object.defineProperty(this, \"style\", {\n get: function() {\n return _style;\n },\n set: function(value) {\n _style = value;\n }\n });\n\n Object.defineProperty(this, \"parentNode\", {});\n };\n\n /**\n * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n *\n * @name getContext\n * @function\n * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n * @param {object} contextAttributes\n */\n Canvas.prototype.getContext = function(contextType, contextAttributes) {\n contextType = contextType || \"2d\";\n var key;\n\n if (contextType !== \"2d\") {\n return null;\n }\n for (key in contextAttributes) {\n if (this.pdf.context2d.hasOwnProperty(key)) {\n this.pdf.context2d[key] = contextAttributes[key];\n }\n }\n this.pdf.context2d._canvas = this;\n return this.pdf.context2d;\n };\n\n /**\n * The toDataURL() method is just a stub to throw an error if accidently called.\n *\n * @name toDataURL\n * @function\n */\n Canvas.prototype.toDataURL = function() {\n throw new Error(\"toDataURL is not implemented.\");\n };\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n this.canvas = new Canvas();\n this.canvas.pdf = this;\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n var px2pt = (0.264583 * 72) / 25.4;\n var printingHeaderRow = false;\n\n var _initialize = function() {\n if (typeof this.internal.__cell__ === \"undefined\") {\n this.internal.__cell__ = {};\n this.internal.__cell__.padding = 3;\n this.internal.__cell__.headerFunction = undefined;\n this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n this.internal.__cell__.margins.width = this.getPageWidth();\n _reset.call(this);\n }\n };\n\n var _reset = function() {\n this.internal.__cell__.lastCell = new Cell();\n this.internal.__cell__.pages = 1;\n };\n\n var Cell = function() {\n var _x = arguments[0];\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n get: function() {\n return _x;\n },\n set: function(value) {\n _x = value;\n }\n });\n var _y = arguments[1];\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n get: function() {\n return _y;\n },\n set: function(value) {\n _y = value;\n }\n });\n var _width = arguments[2];\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n _width = value;\n }\n });\n var _height = arguments[3];\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n get: function() {\n return _height;\n },\n set: function(value) {\n _height = value;\n }\n });\n var _text = arguments[4];\n Object.defineProperty(this, \"text\", {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = value;\n }\n });\n var _lineNumber = arguments[5];\n Object.defineProperty(this, \"lineNumber\", {\n enumerable: true,\n get: function() {\n return _lineNumber;\n },\n set: function(value) {\n _lineNumber = value;\n }\n });\n var _align = arguments[6];\n Object.defineProperty(this, \"align\", {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n _align = value;\n }\n });\n\n return this;\n };\n\n Cell.prototype.clone = function() {\n return new Cell(\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n );\n };\n\n Cell.prototype.toArray = function() {\n return [\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n ];\n };\n\n /**\n * @name setHeaderFunction\n * @function\n * @param {function} func\n */\n jsPDFAPI.setHeaderFunction = function(func) {\n _initialize.call(this);\n this.internal.__cell__.headerFunction =\n typeof func === \"function\" ? func : undefined;\n return this;\n };\n\n /**\n * @name getTextDimensions\n * @function\n * @param {string} txt\n * @returns {Object} dimensions\n */\n jsPDFAPI.getTextDimensions = function(text, options) {\n _initialize.call(this);\n options = options || {};\n var fontSize = options.fontSize || this.getFontSize();\n var font = options.font || this.getFont();\n var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n var width = 0;\n var amountOfLines = 0;\n var height = 0;\n var tempWidth = 0;\n var scope = this;\n\n if (!Array.isArray(text) && typeof text !== \"string\") {\n if (typeof text === \"number\") {\n text = String(text);\n } else {\n throw new Error(\n \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n );\n }\n }\n\n const maxWidth = options.maxWidth;\n if (maxWidth > 0) {\n if (typeof text === \"string\") {\n text = this.splitTextToSize(text, maxWidth);\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n text = text.reduce(function(acc, textLine) {\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n }, []);\n }\n } else {\n // Without the else clause, it will not work if you do not pass along maxWidth\n text = Array.isArray(text) ? text : [text];\n }\n\n for (var i = 0; i < text.length; i++) {\n tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n if (width < tempWidth) {\n width = tempWidth;\n }\n }\n\n if (width !== 0) {\n amountOfLines = text.length;\n }\n\n width = width / scaleFactor;\n height = Math.max(\n (amountOfLines * fontSize * this.getLineHeightFactor() -\n fontSize * (this.getLineHeightFactor() - 1)) /\n scaleFactor,\n 0\n );\n return { w: width, h: height };\n };\n\n /**\n * @name cellAddPage\n * @function\n */\n jsPDFAPI.cellAddPage = function() {\n _initialize.call(this);\n\n this.addPage();\n\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n this.internal.__cell__.lastCell = new Cell(\n margins.left,\n margins.top,\n undefined,\n undefined\n );\n this.internal.__cell__.pages += 1;\n\n return this;\n };\n\n /**\n * @name cell\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} text\n * @param {number} lineNumber lineNumber\n * @param {string} align\n * @return {jsPDF} jsPDF-instance\n */\n var cell = (jsPDFAPI.cell = function() {\n var currentCell;\n\n if (arguments[0] instanceof Cell) {\n currentCell = arguments[0];\n } else {\n currentCell = new Cell(\n arguments[0],\n arguments[1],\n arguments[2],\n arguments[3],\n arguments[4],\n arguments[5]\n );\n }\n _initialize.call(this);\n var lastCell = this.internal.__cell__.lastCell;\n var padding = this.internal.__cell__.padding;\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n var printHeaders = this.internal.__cell__.printHeaders;\n // If this is not the first cell, we must change its position\n if (typeof lastCell.lineNumber !== \"undefined\") {\n if (lastCell.lineNumber === currentCell.lineNumber) {\n //Same line\n currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n currentCell.y = lastCell.y || 0;\n } else {\n //New line\n if (\n lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n this.getPageHeight()\n ) {\n this.cellAddPage();\n currentCell.y = margins.top;\n if (printHeaders && tableHeaderRow) {\n this.printHeaderRow(currentCell.lineNumber, true);\n currentCell.y += tableHeaderRow[0].height;\n }\n } else {\n currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n }\n }\n }\n\n if (typeof currentCell.text[0] !== \"undefined\") {\n this.rect(\n currentCell.x,\n currentCell.y,\n currentCell.width,\n currentCell.height,\n printingHeaderRow === true ? \"FD\" : undefined\n );\n if (currentCell.align === \"right\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width - padding,\n currentCell.y + padding,\n { align: \"right\", baseline: \"top\" }\n );\n } else if (currentCell.align === \"center\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width / 2,\n currentCell.y + padding,\n {\n align: \"center\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n } else {\n this.text(\n currentCell.text,\n currentCell.x + padding,\n currentCell.y + padding,\n {\n align: \"left\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n }\n }\n this.internal.__cell__.lastCell = currentCell;\n return this;\n });\n\n /**\n * Create a table from a set of data.\n * @name table\n * @function\n * @param {Integer} [x] : left-position for top-left corner of table\n * @param {Integer} [y] top-position for top-left corner of table\n * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n * @param {Object} [config.margins] margin values for left, top, bottom, and width\n * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n * @param {Object} [config.padding] cell-padding in pt to use (optional)\n * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n * @param {Object} [config.headerTextColor] default is #000 (optional)\n * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.table = function(x, y, data, headers, config) {\n _initialize.call(this);\n if (!data) {\n throw new Error(\"No data for PDF table.\");\n }\n\n config = config || {};\n\n var headerNames = [],\n headerLabels = [],\n headerAligns = [],\n i,\n columnMatrix = {},\n columnWidths = {},\n column,\n columnMinWidths = [],\n j,\n tableHeaderConfigs = [],\n //set up defaults. If a value is provided in config, defaults will be overwritten:\n autoSize = config.autoSize || false,\n printHeaders = config.printHeaders === false ? false : true,\n fontSize =\n config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n ? config.css[\"font-size\"] * 16\n : config.fontSize || 12,\n margins =\n config.margins ||\n Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n padding = typeof config.padding === \"number\" ? config.padding : 3,\n headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n headerTextColor = config.headerTextColor || \"#000\";\n\n _reset.call(this);\n\n this.internal.__cell__.printHeaders = printHeaders;\n this.internal.__cell__.margins = margins;\n this.internal.__cell__.table_font_size = fontSize;\n this.internal.__cell__.padding = padding;\n this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n this.internal.__cell__.headerTextColor = headerTextColor;\n this.setFontSize(fontSize);\n\n // Set header values\n if (headers === undefined || headers === null) {\n // No headers defined so we derive from data\n headerNames = Object.keys(data[0]);\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n headerNames = headers.map(function(header) {\n return header.name;\n });\n headerLabels = headers.map(function(header) {\n return header.prompt || header.name || \"\";\n });\n headerAligns = headers.map(function(header) {\n return header.align || \"left\";\n });\n // Split header configs into names and prompts\n for (i = 0; i < headers.length; i += 1) {\n columnWidths[headers[i].name] = headers[i].width * px2pt;\n }\n } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n headerNames = headers;\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n }\n\n if (\n autoSize ||\n (Array.isArray(headers) && typeof headers[0] === \"string\")\n ) {\n var headerName;\n for (i = 0; i < headerNames.length; i += 1) {\n headerName = headerNames[i];\n\n // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n columnMatrix[headerName] = data.map(function(rec) {\n return rec[headerName];\n });\n\n // get header width\n this.setFont(undefined, \"bold\");\n columnMinWidths.push(\n this.getTextDimensions(headerLabels[i], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n column = columnMatrix[headerName];\n\n // get cell widths\n this.setFont(undefined, \"normal\");\n for (j = 0; j < column.length; j += 1) {\n columnMinWidths.push(\n this.getTextDimensions(column[j], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n }\n\n // get final column width\n columnWidths[headerName] =\n Math.max.apply(null, columnMinWidths) + padding + padding;\n\n //have to reset\n columnMinWidths = [];\n }\n }\n\n // -- Construct the table\n\n if (printHeaders) {\n var row = {};\n for (i = 0; i < headerNames.length; i += 1) {\n row[headerNames[i]] = {};\n row[headerNames[i]].text = headerLabels[i];\n row[headerNames[i]].align = headerAligns[i];\n }\n\n var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n // Construct the header row\n tableHeaderConfigs = headerNames.map(function(value) {\n return new Cell(\n x,\n y,\n columnWidths[value],\n rowHeight,\n row[value].text,\n undefined,\n row[value].align\n );\n });\n\n // Store the table header config\n this.setTableHeaderRow(tableHeaderConfigs);\n\n // Print the header for the start of the table\n this.printHeaderRow(1, false);\n }\n\n // Construct the data rows\n\n var align = headers.reduce(function(pv, cv) {\n pv[cv.name] = cv.align;\n return pv;\n }, {});\n for (i = 0; i < data.length; i += 1) {\n if (\"rowStart\" in config && config.rowStart instanceof Function) {\n config.rowStart(\n {\n row: i,\n data: data[i]\n },\n this\n );\n }\n var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n for (j = 0; j < headerNames.length; j += 1) {\n var cellData = data[i][headerNames[j]];\n if (\"cellStart\" in config && config.cellStart instanceof Function) {\n config.cellStart(\n {\n row: i,\n col: j,\n data: cellData\n },\n this\n );\n }\n cell.call(\n this,\n new Cell(\n x,\n y,\n columnWidths[headerNames[j]],\n lineHeight,\n cellData,\n i + 2,\n align[headerNames[j]]\n )\n );\n }\n }\n this.internal.__cell__.table_x = x;\n this.internal.__cell__.table_y = y;\n return this;\n };\n\n /**\n * Calculate the height for containing the highest column\n *\n * @name calculateLineHeight\n * @function\n * @param {Object[]} model is the line of data we want to calculate the height of\n * @param {Integer[]} columnWidths is size of each column\n * @returns {number} lineHeight\n * @private\n */\n var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n var padding = this.internal.__cell__.padding;\n var fontSize = this.internal.__cell__.table_font_size;\n var scaleFactor = this.internal.scaleFactor;\n\n return Object.keys(model)\n .map(function(key) {\n var value = model[key];\n return this.splitTextToSize(\n value.hasOwnProperty(\"text\") ? value.text : value,\n columnWidths[key] - padding - padding\n );\n }, this)\n .map(function(value) {\n return (\n (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n padding +\n padding\n );\n }, this)\n .reduce(function(pv, cv) {\n return Math.max(pv, cv);\n }, 0);\n };\n\n /**\n * Store the config for outputting a table header\n *\n * @name setTableHeaderRow\n * @function\n * @param {Object[]} config\n * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n * except the lineNumber parameter is excluded\n */\n jsPDFAPI.setTableHeaderRow = function(config) {\n _initialize.call(this);\n this.internal.__cell__.tableHeaderRow = config;\n };\n\n /**\n * Output the store header row\n *\n * @name printHeaderRow\n * @function\n * @param {number} lineNumber The line number to output the header at\n * @param {boolean} new_page\n */\n jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n _initialize.call(this);\n if (!this.internal.__cell__.tableHeaderRow) {\n throw new Error(\"Property tableHeaderRow does not exist.\");\n }\n\n var tableHeaderCell;\n\n printingHeaderRow = true;\n if (typeof this.internal.__cell__.headerFunction === \"function\") {\n var position = this.internal.__cell__.headerFunction(\n this,\n this.internal.__cell__.pages\n );\n this.internal.__cell__.lastCell = new Cell(\n position[0],\n position[1],\n position[2],\n position[3],\n undefined,\n -1\n );\n }\n this.setFont(undefined, \"bold\");\n\n var tempHeaderConf = [];\n for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n if (new_page) {\n tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n tempHeaderConf.push(tableHeaderCell);\n }\n tableHeaderCell.lineNumber = lineNumber;\n var currentTextColor = this.getTextColor();\n this.setTextColor(this.internal.__cell__.headerTextColor);\n this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n cell.call(this, tableHeaderCell);\n this.setTextColor(currentTextColor);\n }\n if (tempHeaderConf.length > 0) {\n this.setTableHeaderRow(tempHeaderConf);\n }\n this.setFont(undefined, \"normal\");\n printingHeaderRow = false;\n };\n})(jsPDF.API);\n","function toLookup(arr) {\n return arr.reduce(function(lookup, name, index) {\n lookup[name] = index;\n\n return lookup;\n }, {});\n}\n\nvar fontStyleOrder = {\n italic: [\"italic\", \"oblique\", \"normal\"],\n oblique: [\"oblique\", \"italic\", \"normal\"],\n normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n \"ultra-condensed\",\n \"extra-condensed\",\n \"condensed\",\n \"semi-condensed\",\n \"normal\",\n \"semi-expanded\",\n \"expanded\",\n \"extra-expanded\",\n \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n stretch = stretch || \"normal\";\n\n return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n style = style || \"normal\";\n\n return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n if (!weight) {\n return 400;\n }\n\n if (typeof weight === \"number\") {\n // Ignore values which aren't valid font-weights.\n return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n }\n\n if (/^\\d00$/.test(weight)) {\n return parseInt(weight);\n }\n\n switch (weight) {\n case \"bold\":\n return 700;\n\n case \"normal\":\n default:\n return 400;\n }\n}\n\nexport function normalizeFontFace(fontFace) {\n var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n var style = normalizeFontStyle(fontFace.style);\n var weight = normalizeFontWeight(fontFace.weight);\n var stretch = normalizeFontStretch(fontFace.stretch);\n\n return {\n family: family,\n style: style,\n weight: weight,\n stretch: stretch,\n src: fontFace.src || [],\n\n // The ref property maps this font-face to the font\n // added by the .addFont() method.\n ref: fontFace.ref || {\n name: family,\n style: [stretch, style, weight].join(\" \")\n }\n };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n var map = {};\n\n for (var i = 0; i < fontFaces.length; ++i) {\n var normalized = normalizeFontFace(fontFaces[i]);\n\n var name = normalized.family;\n var stretch = normalized.stretch;\n var style = normalized.style;\n var weight = normalized.weight;\n\n map[name] = map[name] || {};\n\n map[name][stretch] = map[name][stretch] || {};\n map[name][stretch][style] = map[name][stretch][style] || {};\n map[name][stretch][style][weight] = normalized;\n }\n\n return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n var i;\n\n for (i = pivot; i >= 0 && i < order.length; i += dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n\n for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n if (matchingSet[stretch]) {\n return matchingSet[stretch];\n }\n\n var pivot = fontStretchLookup[stretch];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-stretch value for \" + stretch\n );\n }\n\n return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n if (matchingSet[fontStyle]) {\n return matchingSet[fontStyle];\n }\n\n var ordering = fontStyleOrder[fontStyle];\n\n for (var i = 0; i < ordering.length; ++i) {\n if (matchingSet[ordering[i]]) {\n return matchingSet[ordering[i]];\n }\n }\n\n // Since a font-family cannot exist without having at least one style value\n // we should never reach this point.\n throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n if (matchingSet[weight]) {\n return matchingSet[weight];\n }\n\n if (weight === 400 && matchingSet[500]) {\n return matchingSet[500];\n }\n\n if (weight === 500 && matchingSet[400]) {\n return matchingSet[400];\n }\n\n var pivot = fontWeightsLookup[weight];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = weight < 400 ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-weight for value \" + weight\n );\n }\n\n return match;\n}\n\nvar defaultGenericFontFamilies = {\n \"sans-serif\": \"helvetica\",\n fixed: \"courier\",\n monospace: \"courier\",\n terminal: \"courier\",\n cursive: \"times\",\n fantasy: \"times\",\n serif: \"times\"\n};\n\nvar systemFonts = {\n caption: \"times\",\n icon: \"times\",\n menu: \"times\",\n \"message-box\": \"times\",\n \"small-caption\": \"times\",\n \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n opts = opts || {};\n\n var defaultFontFamily = opts.defaultFontFamily || \"times\";\n var genericFontFamilies = Object.assign(\n {},\n defaultGenericFontFamilies,\n opts.genericFontFamilies || {}\n );\n\n var rule = null;\n var matches = null;\n\n for (var i = 0; i < rules.length; ++i) {\n rule = normalizeFontFace(rules[i]);\n\n if (genericFontFamilies[rule.family]) {\n rule.family = genericFontFamilies[rule.family];\n }\n\n if (fontFaceMap.hasOwnProperty(rule.family)) {\n matches = fontFaceMap[rule.family];\n\n break;\n }\n }\n\n // Always fallback to a known font family.\n matches = matches || fontFaceMap[defaultFontFamily];\n\n if (!matches) {\n // At this point we should definitiely have a font family, but if we\n // don't there is something wrong with our configuration\n throw new Error(\n \"Could not find a font-family for the rule '\" +\n ruleToString(rule) +\n \"' and default family '\" +\n defaultFontFamily +\n \"'.\"\n );\n }\n\n matches = resolveFontStretch(rule.stretch, matches);\n matches = resolveFontStyle(rule.style, matches);\n matches = resolveFontWeight(rule.weight, matches);\n\n if (!matches) {\n // We should've fount\n throw new Error(\n \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n );\n }\n\n return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n var index = 0;\n\n while (index < input.length) {\n var current = input.charAt(index);\n\n if (current === quote) {\n return [input.substring(0, index), input.substring(index + 1)];\n }\n\n index += 1;\n }\n\n // Unexpected end of input\n return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n //\n // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n //\n // Breakdown of regexp:\n // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n // [a-z_] - allow a-z and underscore at beginning of input\n // [a-z0-9_-]* - after that, anything goes\n var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n // non quoted value contains illegal characters\n if (match === null) {\n return null;\n }\n\n return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n var result = [];\n var ch, parsed;\n var remaining = input.trim();\n\n if (remaining === \"\") {\n return defaultFont;\n }\n\n if (remaining in systemFonts) {\n return [systemFonts[remaining]];\n }\n\n while (remaining !== \"\") {\n parsed = null;\n remaining = eatWhiteSpace(remaining);\n ch = remaining.charAt(0);\n\n switch (ch) {\n case '\"':\n case \"'\":\n parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n break;\n\n default:\n parsed = parseNonQuotedFontFamily(remaining);\n break;\n }\n\n if (parsed === null) {\n return defaultFont;\n }\n\n result.push(parsed[0]);\n\n remaining = eatWhiteSpace(parsed[1]);\n\n // We expect end of input or a comma separator here\n if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n return defaultFont;\n }\n\n remaining = remaining.replace(/^,/, \"\");\n }\n\n return result;\n}\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n buildFontFaceMap,\r\n parseFontFamily,\r\n resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n \"use strict\";\r\n var ContextLayer = function(ctx) {\r\n ctx = ctx || {};\r\n this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n this.strokeOpacity = ctx.strokeOpacity || 1;\r\n this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n this.fillStyle = ctx.fillStyle || \"#000000\";\r\n this.isFillTransparent = ctx.isFillTransparent || false;\r\n this.fillOpacity = ctx.fillOpacity || 1;\r\n this.font = ctx.font || \"10px sans-serif\";\r\n this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n this.textAlign = ctx.textAlign || \"left\";\r\n this.lineWidth = ctx.lineWidth || 1;\r\n this.lineJoin = ctx.lineJoin || \"miter\";\r\n this.lineCap = ctx.lineCap || \"butt\";\r\n this.path = ctx.path || [];\r\n this.transform =\r\n typeof ctx.transform !== \"undefined\"\r\n ? ctx.transform.clone()\r\n : new Matrix();\r\n this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n this.globalAlpha = ctx.globalAlpha || 1.0;\r\n this.clip_path = ctx.clip_path || [];\r\n this.currentPoint = ctx.currentPoint || new Point();\r\n this.miterLimit = ctx.miterLimit || 10.0;\r\n this.lastPoint = ctx.lastPoint || new Point();\r\n this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n this.lineDash = ctx.lineDash || [];\r\n this.margin = ctx.margin || [0, 0, 0, 0];\r\n this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n this.ignoreClearRect =\r\n typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n return this;\r\n };\r\n\r\n //stub\r\n var f2,\r\n getHorizontalCoordinateString,\r\n getVerticalCoordinateString,\r\n getHorizontalCoordinate,\r\n getVerticalCoordinate,\r\n Point,\r\n Rectangle,\r\n Matrix,\r\n _ctx;\r\n jsPDFAPI.events.push([\r\n \"initialized\",\r\n function() {\r\n this.context2d = new Context2D(this);\r\n\r\n f2 = this.internal.f2;\r\n getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n Point = this.internal.Point;\r\n Rectangle = this.internal.Rectangle;\r\n Matrix = this.internal.Matrix;\r\n _ctx = new ContextLayer();\r\n }\r\n ]);\r\n\r\n var Context2D = function(pdf) {\r\n Object.defineProperty(this, \"canvas\", {\r\n get: function() {\r\n return { parentNode: false, style: false };\r\n }\r\n });\r\n\r\n var _pdf = pdf;\r\n Object.defineProperty(this, \"pdf\", {\r\n get: function() {\r\n return _pdf;\r\n }\r\n });\r\n\r\n var _pageWrapXEnabled = false;\r\n /**\r\n * @name pageWrapXEnabled\r\n * @type {boolean}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n get: function() {\r\n return _pageWrapXEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapXEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _pageWrapYEnabled = false;\r\n /**\r\n * @name pageWrapYEnabled\r\n * @type {boolean}\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n get: function() {\r\n return _pageWrapYEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapYEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _posX = 0;\r\n /**\r\n * @name posX\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posX\", {\r\n get: function() {\r\n return _posX;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posX = value;\r\n }\r\n }\r\n });\r\n\r\n var _posY = 0;\r\n /**\r\n * @name posY\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posY\", {\r\n get: function() {\r\n return _posY;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posY = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n * @name margin\r\n * @type {number|number[]}\r\n * @default [0, 0, 0, 0]\r\n */\r\n Object.defineProperty(this, \"margin\", {\r\n get: function() {\r\n return _ctx.margin;\r\n },\r\n set: function(value) {\r\n var margin;\r\n if (typeof value === \"number\") {\r\n margin = [value, value, value, value];\r\n } else {\r\n margin = new Array(4);\r\n margin[0] = value[0];\r\n margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n }\r\n _ctx.margin = margin;\r\n }\r\n });\r\n\r\n var _autoPaging = false;\r\n /**\r\n * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n * pages if required.\r\n *\r\n * Context2d supports different modes:\r\n *
      \r\n *
    • \r\n * false: Auto paging is disabled.\r\n *
    • \r\n *
    • \r\n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\r\n * slice text in half, making it difficult to read.\r\n *
    • \r\n *
    • \r\n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\r\n * mostly of a single column of text.\r\n *
    • \r\n *
    \r\n * @name Context2D#autoPaging\r\n * @type {boolean|\"slice\"|\"text\"}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"autoPaging\", {\r\n get: function() {\r\n return _autoPaging;\r\n },\r\n set: function(value) {\r\n _autoPaging = value;\r\n }\r\n });\r\n\r\n var lastBreak = 0;\r\n /**\r\n * @name lastBreak\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"lastBreak\", {\r\n get: function() {\r\n return lastBreak;\r\n },\r\n set: function(value) {\r\n lastBreak = value;\r\n }\r\n });\r\n\r\n var pageBreaks = [];\r\n /**\r\n * Y Position of page breaks.\r\n * @name pageBreaks\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"pageBreaks\", {\r\n get: function() {\r\n return pageBreaks;\r\n },\r\n set: function(value) {\r\n pageBreaks = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctx\r\n * @type {object}\r\n * @default {}\r\n */\r\n Object.defineProperty(this, \"ctx\", {\r\n get: function() {\r\n return _ctx;\r\n },\r\n set: function(value) {\r\n if (value instanceof ContextLayer) {\r\n _ctx = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * @name path\r\n * @type {array}\r\n * @default []\r\n */\r\n Object.defineProperty(this, \"path\", {\r\n get: function() {\r\n return _ctx.path;\r\n },\r\n set: function(value) {\r\n _ctx.path = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctxStack\r\n * @type {array}\r\n * @default []\r\n */\r\n var _ctxStack = [];\r\n Object.defineProperty(this, \"ctxStack\", {\r\n get: function() {\r\n return _ctxStack;\r\n },\r\n set: function(value) {\r\n _ctxStack = value;\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n *\r\n * @name fillStyle\r\n * @default #000000\r\n * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    \r\n * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    \r\n * A pattern object to use to fill the drawing (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"fillStyle\", {\r\n get: function() {\r\n return this.ctx.fillStyle;\r\n },\r\n set: function(value) {\r\n var rgba;\r\n rgba = getRGBA(value);\r\n\r\n this.ctx.fillStyle = rgba.style;\r\n this.ctx.isFillTransparent = rgba.a === 0;\r\n this.ctx.fillOpacity = rgba.a;\r\n\r\n this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used for strokes\r\n *\r\n * @name strokeStyle\r\n * @default #000000\r\n * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"strokeStyle\", {\r\n get: function() {\r\n return this.ctx.strokeStyle;\r\n },\r\n set: function(value) {\r\n var rgba = getRGBA(value);\r\n\r\n this.ctx.strokeStyle = rgba.style;\r\n this.ctx.isStrokeTransparent = rgba.a === 0;\r\n this.ctx.strokeOpacity = rgba.a;\r\n\r\n if (rgba.a === 0) {\r\n this.pdf.setDrawColor(255, 255, 255);\r\n } else if (rgba.a === 1) {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n } else {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the style of the end caps for a line\r\n *\r\n * @name lineCap\r\n * @default butt\r\n * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    \r\n * round A rounded end cap is added to each end of the line
    \r\n * square A square end cap is added to each end of the line
    \r\n */\r\n Object.defineProperty(this, \"lineCap\", {\r\n get: function() {\r\n return this.ctx.lineCap;\r\n },\r\n set: function(value) {\r\n if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n this.ctx.lineCap = value;\r\n this.pdf.setLineCap(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the current line width\r\n *\r\n * @name lineWidth\r\n * @default 1\r\n * @property {number} lineWidth The current line width, in pixels\r\n */\r\n Object.defineProperty(this, \"lineWidth\", {\r\n get: function() {\r\n return this.ctx.lineWidth;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.lineWidth = value;\r\n this.pdf.setLineWidth(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the type of corner created, when two lines meet\r\n */\r\n Object.defineProperty(this, \"lineJoin\", {\r\n get: function() {\r\n return this.ctx.lineJoin;\r\n },\r\n set: function(value) {\r\n if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n this.ctx.lineJoin = value;\r\n this.pdf.setLineJoin(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n *\r\n * @name miterLimit\r\n * @default 10\r\n */\r\n Object.defineProperty(this, \"miterLimit\", {\r\n get: function() {\r\n return this.ctx.miterLimit;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.miterLimit = value;\r\n this.pdf.setMiterLimit(value);\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textBaseline\", {\r\n get: function() {\r\n return this.ctx.textBaseline;\r\n },\r\n set: function(value) {\r\n this.ctx.textBaseline = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textAlign\", {\r\n get: function() {\r\n return this.ctx.textAlign;\r\n },\r\n set: function(value) {\r\n if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n this.ctx.textAlign = value;\r\n }\r\n }\r\n });\r\n\r\n var _fontFaceMap = null;\r\n\r\n function getFontFaceMap(pdf, fontFaces) {\r\n if (_fontFaceMap === null) {\r\n var fontMap = pdf.getFontList();\r\n\r\n var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n }\r\n\r\n return _fontFaceMap;\r\n }\r\n\r\n function convertToFontFaces(fontMap) {\r\n var fontFaces = [];\r\n\r\n Object.keys(fontMap).forEach(function(family) {\r\n var styles = fontMap[family];\r\n\r\n styles.forEach(function(style) {\r\n var fontFace = null;\r\n\r\n switch (style) {\r\n case \"bold\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\"\r\n };\r\n break;\r\n\r\n case \"italic\":\r\n fontFace = {\r\n family: family,\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"bolditalic\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\",\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"\":\r\n case \"normal\":\r\n fontFace = {\r\n family: family\r\n };\r\n break;\r\n }\r\n\r\n // If font-face is still null here, it is a font with some styling we don't recognize and\r\n // cannot map or it is a font added via the fontFaces option of .html().\r\n if (fontFace !== null) {\r\n fontFace.ref = {\r\n name: family,\r\n style: style\r\n };\r\n\r\n fontFaces.push(fontFace);\r\n }\r\n });\r\n });\r\n\r\n return fontFaces;\r\n }\r\n\r\n var _fontFaces = null;\r\n /**\r\n * A map of available font-faces, as passed in the options of\r\n * .html(). If set a limited implementation of the font style matching\r\n * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n * will be used. If not set it will fallback to previous behavior.\r\n */\r\n\r\n Object.defineProperty(this, \"fontFaces\", {\r\n get: function() {\r\n return _fontFaces;\r\n },\r\n set: function(value) {\r\n _fontFaceMap = null;\r\n _fontFaces = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"font\", {\r\n get: function() {\r\n return this.ctx.font;\r\n },\r\n set: function(value) {\r\n this.ctx.font = value;\r\n var rx, matches;\r\n\r\n //source: https://stackoverflow.com/a/10136041\r\n // eslint-disable-next-line no-useless-escape\r\n rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n matches = rx.exec(value);\r\n if (matches !== null) {\r\n var fontStyle = matches[1];\r\n var fontVariant = matches[2];\r\n var fontWeight = matches[3];\r\n var fontSize = matches[4];\r\n var lineHeight = matches[5];\r\n var fontFamily = matches[6];\r\n } else {\r\n return;\r\n }\r\n var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n if (\"px\" === fontSizeUnit) {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n } else if (\"em\" === fontSizeUnit) {\r\n fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n } else {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n }\r\n\r\n this.pdf.setFontSize(fontSize);\r\n var parts = parseFontFamily(fontFamily);\r\n\r\n if (this.fontFaces) {\r\n var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n var rules = parts.map(function(ff) {\r\n return {\r\n family: ff,\r\n stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n weight: fontWeight,\r\n style: fontStyle\r\n };\r\n });\r\n\r\n var font = resolveFontFace(fontFaceMap, rules);\r\n this.pdf.setFont(font.ref.name, font.ref.style);\r\n return;\r\n }\r\n\r\n var style = \"\";\r\n if (\r\n fontWeight === \"bold\" ||\r\n parseInt(fontWeight, 10) >= 700 ||\r\n fontStyle === \"bold\"\r\n ) {\r\n style = \"bold\";\r\n }\r\n\r\n if (fontStyle === \"italic\") {\r\n style += \"italic\";\r\n }\r\n\r\n if (style.length === 0) {\r\n style = \"normal\";\r\n }\r\n var jsPdfFontName = \"\";\r\n\r\n var fallbackFonts = {\r\n arial: \"Helvetica\",\r\n Arial: \"Helvetica\",\r\n verdana: \"Helvetica\",\r\n Verdana: \"Helvetica\",\r\n helvetica: \"Helvetica\",\r\n Helvetica: \"Helvetica\",\r\n \"sans-serif\": \"Helvetica\",\r\n fixed: \"Courier\",\r\n monospace: \"Courier\",\r\n terminal: \"Courier\",\r\n cursive: \"Times\",\r\n fantasy: \"Times\",\r\n serif: \"Times\"\r\n };\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n if (\r\n this.pdf.internal.getFont(parts[i], style, {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n break;\r\n } else if (\r\n style === \"bolditalic\" &&\r\n this.pdf.internal.getFont(parts[i], \"bold\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"bold\";\r\n } else if (\r\n this.pdf.internal.getFont(parts[i], \"normal\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"normal\";\r\n break;\r\n }\r\n }\r\n if (jsPdfFontName === \"\") {\r\n for (var j = 0; j < parts.length; j++) {\r\n if (fallbackFonts[parts[j]]) {\r\n jsPdfFontName = fallbackFonts[parts[j]];\r\n break;\r\n }\r\n }\r\n }\r\n jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n this.pdf.setFont(jsPdfFontName, style);\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalCompositeOperation\", {\r\n get: function() {\r\n return this.ctx.globalCompositeOperation;\r\n },\r\n set: function(value) {\r\n this.ctx.globalCompositeOperation = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalAlpha\", {\r\n get: function() {\r\n return this.ctx.globalAlpha;\r\n },\r\n set: function(value) {\r\n this.ctx.globalAlpha = value;\r\n }\r\n });\r\n\r\n /**\r\n * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n *\r\n * @name lineDashOffset\r\n * @default 0.0\r\n */\r\n Object.defineProperty(this, \"lineDashOffset\", {\r\n get: function() {\r\n return this.ctx.lineDashOffset;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDashOffset = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"lineDash\", {\r\n get: function() {\r\n return this.ctx.lineDash;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDash = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"ignoreClearRect\", {\r\n get: function() {\r\n return this.ctx.ignoreClearRect;\r\n },\r\n set: function(value) {\r\n this.ctx.ignoreClearRect = Boolean(value);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets the line dash pattern used when stroking lines.\r\n * @name setLineDash\r\n * @function\r\n * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n */\r\n Context2D.prototype.setLineDash = function(dashArray) {\r\n this.lineDash = dashArray;\r\n };\r\n\r\n /**\r\n * gets the current line dash pattern.\r\n * @name getLineDash\r\n * @function\r\n * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n */\r\n Context2D.prototype.getLineDash = function() {\r\n if (this.lineDash.length % 2) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n return this.lineDash.concat(this.lineDash);\r\n } else {\r\n // The copied value is returned to prevent contamination from outside.\r\n return this.lineDash.slice();\r\n }\r\n };\r\n\r\n Context2D.prototype.fill = function() {\r\n pathPreProcess.call(this, \"fill\", false);\r\n };\r\n\r\n /**\r\n * Actually draws the path you have defined\r\n *\r\n * @name stroke\r\n * @function\r\n * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n */\r\n Context2D.prototype.stroke = function() {\r\n pathPreProcess.call(this, \"stroke\", false);\r\n };\r\n\r\n /**\r\n * Begins a path, or resets the current\r\n *\r\n * @name beginPath\r\n * @function\r\n * @description The beginPath() method begins a path, or resets the current path.\r\n */\r\n Context2D.prototype.beginPath = function() {\r\n this.path = [\r\n {\r\n type: \"begin\"\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Moves the path to the specified point in the canvas, without creating a line\r\n *\r\n * @name moveTo\r\n * @function\r\n * @param x {Number} The x-coordinate of where to move the path to\r\n * @param y {Number} The y-coordinate of where to move the path to\r\n */\r\n Context2D.prototype.moveTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"mt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(x, y);\r\n };\r\n\r\n /**\r\n * Creates a path from the current point back to the starting point\r\n *\r\n * @name closePath\r\n * @function\r\n * @description The closePath() method creates a path from the current point back to the starting point.\r\n */\r\n Context2D.prototype.closePath = function() {\r\n var pathBegin = new Point(0, 0);\r\n var i = 0;\r\n for (i = this.path.length - 1; i !== -1; i--) {\r\n if (this.path[i].type === \"begin\") {\r\n if (\r\n typeof this.path[i + 1] === \"object\" &&\r\n typeof this.path[i + 1].x === \"number\"\r\n ) {\r\n pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n break;\r\n }\r\n }\r\n }\r\n this.path.push({\r\n type: \"close\"\r\n });\r\n this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n };\r\n\r\n /**\r\n * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n *\r\n * @name lineTo\r\n * @function\r\n * @param x The x-coordinate of where to create the line to\r\n * @param y The y-coordinate of where to create the line to\r\n * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n */\r\n Context2D.prototype.lineTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"lt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n };\r\n\r\n /**\r\n * Clips a region of any shape and size from the original canvas\r\n *\r\n * @name clip\r\n * @function\r\n * @description The clip() method clips a region of any shape and size from the original canvas.\r\n */\r\n Context2D.prototype.clip = function() {\r\n this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n pathPreProcess.call(this, null, true);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name quadraticCurveTo\r\n * @function\r\n * @param cpx {Number} The x-coordinate of the Bézier control point\r\n * @param cpy {Number} The y-coordinate of the Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n console.error(\r\n \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n );\r\n }\r\n\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n this.path.push({\r\n type: \"qct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name bezierCurveTo\r\n * @function\r\n * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(cp1x) ||\r\n isNaN(cp1y) ||\r\n isNaN(cp2x) ||\r\n isNaN(cp2y)\r\n ) {\r\n console.error(\r\n \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n );\r\n }\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n this.path.push({\r\n type: \"bct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x2: pt2.x,\r\n y2: pt2.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates an arc/curve (used to create circles, or parts of circles)\r\n *\r\n * @name arc\r\n * @function\r\n * @param x {Number} The x-coordinate of the center of the circle\r\n * @param y {Number} The y-coordinate of the center of the circle\r\n * @param radius {Number} The radius of the circle\r\n * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n * @param endAngle {Number} The ending angle, in radians\r\n * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n */\r\n Context2D.prototype.arc = function(\r\n x,\r\n y,\r\n radius,\r\n startAngle,\r\n endAngle,\r\n counterclockwise\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(radius) ||\r\n isNaN(startAngle) ||\r\n isNaN(endAngle)\r\n ) {\r\n console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n }\r\n counterclockwise = Boolean(counterclockwise);\r\n\r\n if (!this.ctx.transform.isIdentity) {\r\n var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n x = xpt.x;\r\n y = xpt.y;\r\n\r\n var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n radius = Math.sqrt(\r\n Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n );\r\n }\r\n if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n startAngle = 0;\r\n endAngle = 2 * Math.PI;\r\n }\r\n\r\n this.path.push({\r\n type: \"arc\",\r\n x: x,\r\n y: y,\r\n radius: radius,\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n counterclockwise: counterclockwise\r\n });\r\n // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n };\r\n\r\n /**\r\n * Creates an arc/curve between two tangents\r\n *\r\n * @name arcTo\r\n * @function\r\n * @param x1 {Number} The x-coordinate of the first tangent\r\n * @param y1 {Number} The y-coordinate of the first tangent\r\n * @param x2 {Number} The x-coordinate of the second tangent\r\n * @param y2 {Number} The y-coordinate of the second tangent\r\n * @param radius The radius of the arc\r\n * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n throw new Error(\"arcTo not implemented.\");\r\n };\r\n\r\n /**\r\n * Creates a rectangle\r\n *\r\n * @name rect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The rect() method creates a rectangle.\r\n */\r\n Context2D.prototype.rect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n }\r\n this.moveTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x + w, y + h);\r\n this.lineTo(x, y + h);\r\n this.lineTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x, y);\r\n };\r\n\r\n /**\r\n * Draws a \"filled\" rectangle\r\n *\r\n * @name fillRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n */\r\n Context2D.prototype.fillRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n }\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n var tmp = {};\r\n if (this.lineCap !== \"butt\") {\r\n tmp.lineCap = this.lineCap;\r\n this.lineCap = \"butt\";\r\n }\r\n if (this.lineJoin !== \"miter\") {\r\n tmp.lineJoin = this.lineJoin;\r\n this.lineJoin = \"miter\";\r\n }\r\n\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.fill();\r\n\r\n if (tmp.hasOwnProperty(\"lineCap\")) {\r\n this.lineCap = tmp.lineCap;\r\n }\r\n if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n this.lineJoin = tmp.lineJoin;\r\n }\r\n };\r\n\r\n /**\r\n * Draws a rectangle (no fill)\r\n *\r\n * @name strokeRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n */\r\n Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.stroke();\r\n };\r\n\r\n /**\r\n * Clears the specified pixels within a given rectangle\r\n *\r\n * @name clearRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle to clear, in pixels\r\n * @param h {Number} The height of the rectangle to clear, in pixels\r\n * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    \r\n * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n *\r\n */\r\n Context2D.prototype.clearRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n }\r\n if (this.ignoreClearRect) {\r\n return;\r\n }\r\n\r\n this.fillStyle = \"#ffffff\";\r\n this.fillRect(x, y, w, h);\r\n };\r\n\r\n /**\r\n * Saves the state of the current context\r\n *\r\n * @name save\r\n * @function\r\n */\r\n Context2D.prototype.save = function(doStackPush) {\r\n doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPush) {\r\n this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n var ctx = new ContextLayer(this.ctx);\r\n this.ctxStack.push(this.ctx);\r\n this.ctx = ctx;\r\n }\r\n };\r\n\r\n /**\r\n * Returns previously saved path state and attributes\r\n *\r\n * @name restore\r\n * @function\r\n */\r\n Context2D.prototype.restore = function(doStackPop) {\r\n doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"Q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPop && this.ctxStack.length !== 0) {\r\n this.ctx = this.ctxStack.pop();\r\n this.fillStyle = this.ctx.fillStyle;\r\n this.strokeStyle = this.ctx.strokeStyle;\r\n this.font = this.ctx.font;\r\n this.lineCap = this.ctx.lineCap;\r\n this.lineWidth = this.ctx.lineWidth;\r\n this.lineJoin = this.ctx.lineJoin;\r\n this.lineDash = this.ctx.lineDash;\r\n this.lineDashOffset = this.ctx.lineDashOffset;\r\n }\r\n };\r\n\r\n /**\r\n * @name toDataURL\r\n * @function\r\n */\r\n Context2D.prototype.toDataURL = function() {\r\n throw new Error(\"toDataUrl not implemented.\");\r\n };\r\n\r\n //helper functions\r\n\r\n /**\r\n * Get the decimal values of r, g, b and a\r\n *\r\n * @name getRGBA\r\n * @function\r\n * @private\r\n * @ignore\r\n */\r\n var getRGBA = function(style) {\r\n var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n var r, g, b, a;\r\n\r\n if (style.isCanvasGradient === true) {\r\n style = style.getColor();\r\n }\r\n\r\n if (!style) {\r\n return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n }\r\n\r\n if (rxTransparent.test(style)) {\r\n r = 0;\r\n g = 0;\r\n b = 0;\r\n a = 0;\r\n } else {\r\n var matches = rxRgb.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = 1;\r\n } else {\r\n matches = rxRgba.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = parseFloat(matches[4]);\r\n } else {\r\n a = 1;\r\n\r\n if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(style);\r\n if (rgbColor.ok) {\r\n style = rgbColor.toHex();\r\n } else {\r\n style = \"#000000\";\r\n }\r\n }\r\n\r\n if (style.length === 4) {\r\n r = style.substring(1, 2);\r\n r += r;\r\n g = style.substring(2, 3);\r\n g += g;\r\n b = style.substring(3, 4);\r\n b += b;\r\n } else {\r\n r = style.substring(1, 3);\r\n g = style.substring(3, 5);\r\n b = style.substring(5, 7);\r\n }\r\n r = parseInt(r, 16);\r\n g = parseInt(g, 16);\r\n b = parseInt(b, 16);\r\n }\r\n }\r\n }\r\n return { r: r, g: g, b: b, a: a, style: style };\r\n };\r\n\r\n /**\r\n * @name isFillTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isFillTransparent = function() {\r\n return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n };\r\n\r\n /**\r\n * @name isStrokeTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isStrokeTransparent = function() {\r\n return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n };\r\n\r\n /**\r\n * Draws \"filled\" text on the canvas\r\n *\r\n * @name fillText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n }\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n // We only use X axis as scale hint\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Draws text on the canvas (no fill)\r\n *\r\n * @name strokeText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n renderingMode: \"stroke\",\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Returns an object that contains the width of the specified text\r\n *\r\n * @name measureText\r\n * @function\r\n * @param text {String} The text to be measured\r\n * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n * @returns {Number}\r\n */\r\n Context2D.prototype.measureText = function(text) {\r\n if (typeof text !== \"string\") {\r\n console.error(\r\n \"jsPDF.context2d.measureText: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n );\r\n }\r\n var pdf = this.pdf;\r\n var k = this.pdf.internal.scaleFactor;\r\n\r\n var fontSize = pdf.internal.getFontSize();\r\n var txtWidth =\r\n (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n var TextMetrics = function(options) {\r\n options = options || {};\r\n var _width = options.width || 0;\r\n Object.defineProperty(this, \"width\", {\r\n get: function() {\r\n return _width;\r\n }\r\n });\r\n return this;\r\n };\r\n return new TextMetrics({ width: txtWidth });\r\n };\r\n\r\n //Transformations\r\n\r\n /**\r\n * Scales the current drawing bigger or smaller\r\n *\r\n * @name scale\r\n * @function\r\n * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @description The scale() method scales the current drawing, bigger or smaller.\r\n */\r\n Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n }\r\n var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Rotates the current drawing\r\n *\r\n * @name rotate\r\n * @function\r\n * @param angle {Number} The rotation angle, in radians.\r\n * @description To calculate from degrees to radians: degrees*Math.PI/180.
    \r\n * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n */\r\n Context2D.prototype.rotate = function(angle) {\r\n if (isNaN(angle)) {\r\n console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n }\r\n var matrix = new Matrix(\r\n Math.cos(angle),\r\n Math.sin(angle),\r\n -Math.sin(angle),\r\n Math.cos(angle),\r\n 0.0,\r\n 0.0\r\n );\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Remaps the (0,0) position on the canvas\r\n *\r\n * @name translate\r\n * @function\r\n * @param x {Number} The value to add to horizontal (x) coordinates\r\n * @param y {Number} The value to add to vertical (y) coordinates\r\n * @description The translate() method remaps the (0,0) position on the canvas.\r\n */\r\n Context2D.prototype.translate = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n }\r\n var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Replaces the current transformation matrix for the drawing\r\n *\r\n * @name transform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n }\r\n var matrix = new Matrix(a, b, c, d, e, f);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Resets the current transform to the identity matrix. Then runs transform()\r\n *\r\n * @name setTransform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n a = isNaN(a) ? 1 : a;\r\n b = isNaN(b) ? 0 : b;\r\n c = isNaN(c) ? 0 : c;\r\n d = isNaN(d) ? 1 : d;\r\n e = isNaN(e) ? 0 : e;\r\n f = isNaN(f) ? 0 : f;\r\n this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n };\r\n\r\n /**\r\n * Should only be used if pageWrapYEnabled is true\r\n *\r\n * @name setPageByYPosition\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns One-based Page Number\r\n */\r\n var setPageByYPosition = function(y) {\r\n if (this.pageWrapYEnabled) {\r\n this.lastBreak = 0;\r\n var manualBreaks = 0;\r\n var autoBreaks = 0;\r\n for (var i = 0; i < this.pageBreaks.length; i++) {\r\n if (y >= this.pageBreaks[i]) {\r\n manualBreaks++;\r\n if (this.lastBreak === 0) {\r\n autoBreaks++;\r\n }\r\n var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n this.lastBreak = this.pageBreaks[i];\r\n var pagesSinceLastBreak = Math.floor(\r\n spaceBetweenLastBreak / this.pageWrapY\r\n );\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n }\r\n if (this.lastBreak === 0) {\r\n var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n return autoBreaks + manualBreaks;\r\n } else {\r\n return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n }\r\n };\r\n\r\n var hasMargins = function() {\r\n return (\r\n this.margin[0] > 0 ||\r\n this.margin[1] > 0 ||\r\n this.margin[2] > 0 ||\r\n this.margin[3] > 0\r\n );\r\n };\r\n\r\n /**\r\n * Draws an image, canvas, or video onto the canvas\r\n *\r\n * @function\r\n * @param img {} Specifies the image, canvas, or video element to use\r\n * @param sx {Number} Optional. The x coordinate where to start clipping\r\n * @param sy {Number} Optional. The y coordinate where to start clipping\r\n * @param swidth {Number} Optional. The width of the clipped image\r\n * @param sheight {Number} Optional. The height of the clipped image\r\n * @param x {Number} The x coordinate where to place the image on the canvas\r\n * @param y {Number} The y coordinate where to place the image on the canvas\r\n * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n */\r\n Context2D.prototype.drawImage = function(\r\n img,\r\n sx,\r\n sy,\r\n swidth,\r\n sheight,\r\n x,\r\n y,\r\n width,\r\n height\r\n ) {\r\n var imageProperties = this.pdf.getImageProperties(img);\r\n var factorX = 1;\r\n var factorY = 1;\r\n var isClip;\r\n\r\n var clipFactorX = 1;\r\n var clipFactorY = 1;\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n isClip = true;\r\n clipFactorX = width / swidth;\r\n clipFactorY = height / sheight;\r\n factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n }\r\n\r\n //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n if (typeof x === \"undefined\") {\r\n x = sx;\r\n y = sy;\r\n sx = 0;\r\n sy = 0;\r\n }\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n width = swidth;\r\n height = sheight;\r\n }\r\n if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n width = imageProperties.width;\r\n height = imageProperties.height;\r\n }\r\n\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n var xRect = matrix.applyToRectangle(\r\n new Rectangle(\r\n x - sx * clipFactorX,\r\n y - sy * clipFactorY,\r\n swidth * factorX,\r\n sheight * factorY\r\n )\r\n );\r\n var pageArray = getPagesByPath.call(this, xRect);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n tmpRect = pathPositionRedo(\r\n [tmpRect],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n tmpRect.x,\r\n tmpRect.y,\r\n tmpRect.w,\r\n tmpRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n xRect.x,\r\n xRect.y,\r\n xRect.w,\r\n xRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n }\r\n };\r\n\r\n var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n var result = [];\r\n pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n pageWrapY =\r\n pageWrapY ||\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n switch (path.type) {\r\n default:\r\n case \"mt\":\r\n case \"lt\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n break;\r\n case \"arc\":\r\n result.push(\r\n Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n );\r\n break;\r\n case \"qct\":\r\n var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"bct\":\r\n var rectOfBezierCurve = getBezierCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x2,\r\n path.y2,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"rect\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n }\r\n\r\n for (var i = 0; i < result.length; i += 1) {\r\n while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n addPage.call(this);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var addPage = function() {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var font = this.font;\r\n var lineCap = this.lineCap;\r\n var lineWidth = this.lineWidth;\r\n var lineJoin = this.lineJoin;\r\n this.pdf.addPage();\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.font = font;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n };\r\n\r\n var pathPositionRedo = function(paths, x, y) {\r\n for (var i = 0; i < paths.length; i++) {\r\n switch (paths[i].type) {\r\n case \"bct\":\r\n paths[i].x2 += x;\r\n paths[i].y2 += y;\r\n case \"qct\":\r\n paths[i].x1 += x;\r\n paths[i].y1 += y;\r\n case \"mt\":\r\n case \"lt\":\r\n case \"arc\":\r\n default:\r\n paths[i].x += x;\r\n paths[i].y += y;\r\n }\r\n }\r\n return paths;\r\n };\r\n\r\n var sortPages = function(pages) {\r\n return pages.sort(function(a, b) {\r\n return a - b;\r\n });\r\n };\r\n\r\n var pathPreProcess = function(rule, isClip) {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var lineCap = this.lineCap;\r\n var oldLineWidth = this.lineWidth;\r\n var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n var lineJoin = this.lineJoin;\r\n\r\n var origPath = JSON.parse(JSON.stringify(this.path));\r\n var xPath = JSON.parse(JSON.stringify(this.path));\r\n var clipPath;\r\n var tmpPath;\r\n var pages = [];\r\n\r\n for (var i = 0; i < xPath.length; i++) {\r\n if (typeof xPath[i].x !== \"undefined\") {\r\n var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n for (var ii = 0; ii < page.length; ii += 1) {\r\n if (pages.indexOf(page[ii]) === -1) {\r\n pages.push(page[ii]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var j = 0; j < pages.length; j++) {\r\n while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n addPage.call(this);\r\n }\r\n }\r\n sortPages(pages);\r\n\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var k = min; k < max + 1; k++) {\r\n this.pdf.setPage(k);\r\n\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, rule, true);\r\n this.path = tmpPaths;\r\n }\r\n tmpPath = JSON.parse(JSON.stringify(origPath));\r\n this.path = pathPositionRedo(\r\n tmpPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n if (isClip === false || k === 0) {\r\n const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n drawPaths.call(this, rule, isClip);\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n this.lineWidth = oldLineWidth;\r\n }\r\n } else {\r\n this.lineWidth = lineWidth;\r\n drawPaths.call(this, rule, isClip);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n this.path = origPath;\r\n };\r\n\r\n /**\r\n * Processes the paths\r\n *\r\n * @function\r\n * @param rule {String}\r\n * @param isClip {Boolean}\r\n * @private\r\n * @ignore\r\n */\r\n var drawPaths = function(rule, isClip) {\r\n if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var moves = [];\r\n\r\n //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n var delta;\r\n var xPath = this.path;\r\n for (var i = 0; i < xPath.length; i++) {\r\n var pt = xPath[i];\r\n\r\n switch (pt.type) {\r\n case \"begin\":\r\n moves.push({\r\n begin: true\r\n });\r\n break;\r\n\r\n case \"close\":\r\n moves.push({\r\n close: true\r\n });\r\n break;\r\n\r\n case \"mt\":\r\n moves.push({\r\n start: pt,\r\n deltas: [],\r\n abs: []\r\n });\r\n break;\r\n\r\n case \"lt\":\r\n var iii = moves.length;\r\n if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n if (iii > 0) {\r\n for (iii; iii >= 0; iii--) {\r\n if (\r\n moves[iii - 1].close !== true &&\r\n moves[iii - 1].begin !== true\r\n ) {\r\n moves[iii - 1].deltas.push(delta);\r\n moves[iii - 1].abs.push(pt);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"bct\":\r\n delta = [\r\n pt.x1 - xPath[i - 1].x,\r\n pt.y1 - xPath[i - 1].y,\r\n pt.x2 - xPath[i - 1].x,\r\n pt.y2 - xPath[i - 1].y,\r\n pt.x - xPath[i - 1].x,\r\n pt.y - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"qct\":\r\n var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n var x3 = pt.x;\r\n var y3 = pt.y;\r\n delta = [\r\n x1 - xPath[i - 1].x,\r\n y1 - xPath[i - 1].y,\r\n x2 - xPath[i - 1].x,\r\n y2 - xPath[i - 1].y,\r\n x3 - xPath[i - 1].x,\r\n y3 - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"arc\":\r\n moves.push({\r\n deltas: [],\r\n abs: [],\r\n arc: true\r\n });\r\n\r\n if (Array.isArray(moves[moves.length - 1].abs)) {\r\n moves[moves.length - 1].abs.push(pt);\r\n }\r\n break;\r\n }\r\n }\r\n var style;\r\n if (!isClip) {\r\n if (rule === \"stroke\") {\r\n style = \"stroke\";\r\n } else {\r\n style = \"fill\";\r\n }\r\n } else {\r\n style = null;\r\n }\r\n\r\n var began = false;\r\n for (var k = 0; k < moves.length; k++) {\r\n if (moves[k].arc) {\r\n var arcs = moves[k].abs;\r\n\r\n for (var ii = 0; ii < arcs.length; ii++) {\r\n var arc = arcs[ii];\r\n\r\n if (arc.type === \"arc\") {\r\n drawArc.call(\r\n this,\r\n arc.x,\r\n arc.y,\r\n arc.radius,\r\n arc.startAngle,\r\n arc.endAngle,\r\n arc.counterclockwise,\r\n undefined,\r\n isClip,\r\n !began\r\n );\r\n } else {\r\n drawLine.call(this, arc.x, arc.y);\r\n }\r\n began = true;\r\n }\r\n } else if (moves[k].close === true) {\r\n this.pdf.internal.out(\"h\");\r\n began = false;\r\n } else if (moves[k].begin !== true) {\r\n var x = moves[k].start.x;\r\n var y = moves[k].start.y;\r\n drawLines.call(this, moves[k].deltas, x, y);\r\n began = true;\r\n }\r\n }\r\n\r\n if (style) {\r\n putStyle.call(this, style);\r\n }\r\n if (isClip) {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var getBaseline = function(y) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n switch (this.ctx.textBaseline) {\r\n case \"bottom\":\r\n return y - descent;\r\n case \"top\":\r\n return y + height - descent;\r\n case \"hanging\":\r\n return y + height - 2 * descent;\r\n case \"middle\":\r\n return y + height / 2 - descent;\r\n case \"ideographic\":\r\n // TODO not implemented\r\n return y;\r\n case \"alphabetic\":\r\n default:\r\n return y;\r\n }\r\n };\r\n\r\n var getTextBottom = function(yBaseLine) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n return yBaseLine + descent;\r\n };\r\n\r\n Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n var canvasGradient = function canvasGradient() {};\r\n\r\n canvasGradient.colorStops = [];\r\n canvasGradient.addColorStop = function(offset, color) {\r\n this.colorStops.push([offset, color]);\r\n };\r\n\r\n canvasGradient.getColor = function() {\r\n if (this.colorStops.length === 0) {\r\n return \"#000000\";\r\n }\r\n\r\n return this.colorStops[0][1];\r\n };\r\n\r\n canvasGradient.isCanvasGradient = true;\r\n return canvasGradient;\r\n };\r\n Context2D.prototype.createPattern = function createPattern() {\r\n return this.createLinearGradient();\r\n };\r\n Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n return this.createLinearGradient();\r\n };\r\n\r\n /**\r\n *\r\n * @param x Edge point X\r\n * @param y Edge point Y\r\n * @param r Radius\r\n * @param a1 start angle\r\n * @param a2 end angle\r\n * @param counterclockwise\r\n * @param style\r\n * @param isClip\r\n */\r\n var drawArc = function(\r\n x,\r\n y,\r\n r,\r\n a1,\r\n a2,\r\n counterclockwise,\r\n style,\r\n isClip,\r\n includeMove\r\n ) {\r\n // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n for (var i = 0; i < curves.length; i++) {\r\n var curve = curves[i];\r\n if (i === 0) {\r\n if (includeMove) {\r\n doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n } else {\r\n drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n }\r\n }\r\n drawCurve.call(\r\n this,\r\n x,\r\n y,\r\n curve.x2,\r\n curve.y2,\r\n curve.x3,\r\n curve.y3,\r\n curve.x4,\r\n curve.y4\r\n );\r\n }\r\n\r\n if (!isClip) {\r\n putStyle.call(this, style);\r\n } else {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n switch (style) {\r\n case \"stroke\":\r\n this.pdf.internal.out(\"S\");\r\n break;\r\n case \"fill\":\r\n this.pdf.internal.out(\"f\");\r\n break;\r\n }\r\n };\r\n\r\n var doClip = function() {\r\n this.pdf.clip();\r\n this.pdf.discardPath();\r\n };\r\n\r\n var doMove = function(x, y) {\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x) +\r\n \" \" +\r\n getVerticalCoordinateString(y) +\r\n \" m\"\r\n );\r\n };\r\n\r\n var putText = function(options) {\r\n var textAlign;\r\n switch (options.align) {\r\n case \"right\":\r\n case \"end\":\r\n textAlign = \"right\";\r\n break;\r\n case \"center\":\r\n textAlign = \"center\";\r\n break;\r\n case \"left\":\r\n case \"start\":\r\n default:\r\n textAlign = \"left\";\r\n break;\r\n }\r\n\r\n var textDimensions = this.pdf.getTextDimensions(options.text);\r\n var yBaseLine = getBaseline.call(this, options.y);\r\n var yBottom = getTextBottom.call(this, yBaseLine);\r\n var yTop = yBottom - textDimensions.h;\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n var baselineRect = this.ctx.transform.applyToRectangle(\r\n new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n );\r\n var textBounds = matrix.applyToRectangle(\r\n new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n );\r\n var pageArray = getPagesByPath.call(this, textBounds);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath, oldSize, oldLineWidth;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusBottomMargin =\r\n this.pdf.internal.pageSize.height - this.margin[2];\r\n var pageHeightMinusMargins =\r\n pageHeightMinusBottomMargin - this.margin[0];\r\n var pageWidthMinusRightMargin =\r\n this.pdf.internal.pageSize.width - this.margin[1];\r\n var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -1 * previousPageHeightSum + topMargin\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var textBoundsOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(textBounds))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n\r\n var doSlice = this.autoPaging !== \"text\";\r\n\r\n if (\r\n doSlice ||\r\n textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n ) {\r\n if (\r\n doSlice ||\r\n (textBoundsOnPage.y >= topMargin &&\r\n textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n ) {\r\n var croppedText = doSlice\r\n ? options.text\r\n : this.pdf.splitTextToSize(\r\n options.text,\r\n options.maxWidth ||\r\n pageWidthMinusRightMargin - textBoundsOnPage.x\r\n )[0];\r\n var baseLineRectOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(baselineRect))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum +\r\n topMargin +\r\n this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping =\r\n doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n\r\n this.pdf.text(\r\n croppedText,\r\n baseLineRectOnPage.x,\r\n baseLineRectOnPage.y,\r\n {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode\r\n }\r\n );\r\n\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n // This text is the last element of the page, but it got cut off due to the margin\r\n // so we render it in the next page\r\n\r\n if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n // As a result, all other elements have their y offset increased\r\n this.ctx.prevPageLastElemOffset +=\r\n pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n }\r\n }\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n } else {\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode,\r\n maxWidth: options.maxWidth\r\n });\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n };\r\n\r\n var drawLine = function(x, y, prevX, prevY) {\r\n prevX = prevX || 0;\r\n prevY = prevY || 0;\r\n\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x + prevX) +\r\n \" \" +\r\n getVerticalCoordinateString(y + prevY) +\r\n \" l\"\r\n );\r\n };\r\n\r\n var drawLines = function(lines, x, y) {\r\n return this.pdf.lines(lines, x, y, null, null);\r\n };\r\n\r\n var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n this.pdf.internal.out(\r\n [\r\n f2(getHorizontalCoordinate(x1 + x)),\r\n f2(getVerticalCoordinate(y1 + y)),\r\n f2(getHorizontalCoordinate(x2 + x)),\r\n f2(getVerticalCoordinate(y2 + y)),\r\n f2(getHorizontalCoordinate(x3 + x)),\r\n f2(getVerticalCoordinate(y3 + y)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n };\r\n\r\n /**\r\n * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n *\r\n * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n * @function createArc\r\n */\r\n var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n var twoPi = Math.PI * 2;\r\n var halfPi = Math.PI / 2.0;\r\n\r\n while (startAngle > endAngle) {\r\n startAngle = startAngle - twoPi;\r\n }\r\n var totalAngle = Math.abs(endAngle - startAngle);\r\n if (totalAngle < twoPi) {\r\n if (anticlockwise) {\r\n totalAngle = twoPi - totalAngle;\r\n }\r\n }\r\n\r\n // Compute the sequence of arc curves, up to PI/2 at a time.\r\n var curves = [];\r\n\r\n // clockwise or counterclockwise\r\n var sgn = anticlockwise ? -1 : +1;\r\n\r\n var a1 = startAngle;\r\n for (; totalAngle > EPSILON; ) {\r\n var remain = sgn * Math.min(totalAngle, halfPi);\r\n var a2 = a1 + remain;\r\n curves.push(createSmallArc.call(this, radius, a1, a2));\r\n totalAngle -= Math.abs(a2 - a1);\r\n a1 = a2;\r\n }\r\n\r\n return curves;\r\n };\r\n\r\n /**\r\n * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n *\r\n * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n *\r\n * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n */\r\n var createSmallArc = function(r, a1, a2) {\r\n var a = (a2 - a1) / 2.0;\r\n\r\n var x4 = r * Math.cos(a);\r\n var y4 = r * Math.sin(a);\r\n var x1 = x4;\r\n var y1 = -y4;\r\n\r\n var q1 = x1 * x1 + y1 * y1;\r\n var q2 = q1 + x1 * x4 + y1 * y4;\r\n var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n var x2 = x1 - k2 * y1;\r\n var y2 = y1 + k2 * x1;\r\n var x3 = x2;\r\n var y3 = -y2;\r\n\r\n var ar = a + a1;\r\n var cos_ar = Math.cos(ar);\r\n var sin_ar = Math.sin(ar);\r\n\r\n return {\r\n x1: r * Math.cos(a1),\r\n y1: r * Math.sin(a1),\r\n x2: x2 * cos_ar - y2 * sin_ar,\r\n y2: x2 * sin_ar + y2 * cos_ar,\r\n x3: x3 * cos_ar - y3 * sin_ar,\r\n y3: x3 * sin_ar + y3 * cos_ar,\r\n x4: r * Math.cos(a2),\r\n y4: r * Math.sin(a2)\r\n };\r\n };\r\n\r\n var rad2deg = function(value) {\r\n return (value * 180) / Math.PI;\r\n };\r\n\r\n var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n var midX1 = sx + (cpx - sx) * 0.5;\r\n var midY1 = sy + (cpy - sy) * 0.5;\r\n var midX2 = ex + (cpx - ex) * 0.5;\r\n var midY2 = ey + (cpy - ey) * 0.5;\r\n var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n return new Rectangle(\r\n resultX1,\r\n resultY1,\r\n resultX2 - resultX1,\r\n resultY2 - resultY1\r\n );\r\n };\r\n\r\n //De Casteljau algorithm\r\n var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n var tobx = bx - ax;\r\n var toby = by - ay;\r\n var tocx = cx - bx;\r\n var tocy = cy - by;\r\n var todx = dx - cx;\r\n var tody = dy - cy;\r\n var precision = 40;\r\n var d,\r\n i,\r\n px,\r\n py,\r\n qx,\r\n qy,\r\n rx,\r\n ry,\r\n tx,\r\n ty,\r\n sx,\r\n sy,\r\n x,\r\n y,\r\n minx,\r\n miny,\r\n maxx,\r\n maxy,\r\n toqx,\r\n toqy,\r\n torx,\r\n tory,\r\n totx,\r\n toty;\r\n for (i = 0; i < precision + 1; i++) {\r\n d = i / precision;\r\n px = ax + d * tobx;\r\n py = ay + d * toby;\r\n qx = bx + d * tocx;\r\n qy = by + d * tocy;\r\n rx = cx + d * todx;\r\n ry = cy + d * tody;\r\n toqx = qx - px;\r\n toqy = qy - py;\r\n torx = rx - qx;\r\n tory = ry - qy;\r\n\r\n sx = px + d * toqx;\r\n sy = py + d * toqy;\r\n tx = qx + d * torx;\r\n ty = qy + d * tory;\r\n totx = tx - sx;\r\n toty = ty - sy;\r\n\r\n x = sx + d * totx;\r\n y = sy + d * toty;\r\n if (i == 0) {\r\n minx = x;\r\n miny = y;\r\n maxx = x;\r\n maxy = y;\r\n } else {\r\n minx = Math.min(minx, x);\r\n miny = Math.min(miny, y);\r\n maxx = Math.max(maxx, x);\r\n maxy = Math.max(maxy, y);\r\n }\r\n }\r\n return new Rectangle(\r\n Math.round(minx),\r\n Math.round(miny),\r\n Math.round(maxx - minx),\r\n Math.round(maxy - miny)\r\n );\r\n };\r\n\r\n var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n return JSON.stringify({\r\n lineDash: lineDash,\r\n lineDashOffset: lineDashOffset\r\n });\r\n };\r\n\r\n var setLineDash = function() {\r\n // Avoid unnecessary line dash declarations.\r\n if (\r\n !this.prevLineDash &&\r\n !this.ctx.lineDash.length &&\r\n !this.ctx.lineDashOffset\r\n ) {\r\n return;\r\n }\r\n\r\n // Avoid unnecessary line dash declarations.\r\n const nextLineDash = getPrevLineDashValue(\r\n this.ctx.lineDash,\r\n this.ctx.lineDashOffset\r\n );\r\n if (this.prevLineDash !== nextLineDash) {\r\n this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n this.prevLineDash = nextLineDash;\r\n }\r\n };\r\n})(jsPDF.API);\r\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var ASCII85Encode = function(a) {\n var b, c, d, e, f, g, h, i, j, k;\n // eslint-disable-next-line no-control-regex\n for (\n !/[^\\x00-\\xFF]/.test(a),\n b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n a += b,\n c = [],\n d = 0,\n e = a.length;\n e > d;\n d += 4\n )\n (f =\n (a.charCodeAt(d) << 24) +\n (a.charCodeAt(d + 1) << 16) +\n (a.charCodeAt(d + 2) << 8) +\n a.charCodeAt(d + 3)),\n 0 !== f\n ? ((k = f % 85),\n (f = (f - k) / 85),\n (j = f % 85),\n (f = (f - j) / 85),\n (i = f % 85),\n (f = (f - i) / 85),\n (h = f % 85),\n (f = (f - h) / 85),\n (g = f % 85),\n c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n : c.push(122);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(c, b.length),\n String.fromCharCode.apply(String, c) + \"~>\"\n );\n };\n\n var ASCII85Decode = function(a) {\n var c,\n d,\n e,\n f,\n g,\n h = String,\n l = \"length\",\n w = 255,\n x = \"charCodeAt\",\n y = \"slice\",\n z = \"replace\";\n for (\n \"~>\" === a[y](-2),\n a = a[y](0, -2)\n [z](/\\s/g, \"\")\n [z](\"z\", \"!!!!!\"),\n c = \"uuuuu\"[y](a[l] % 5 || 5),\n a += c,\n e = [],\n f = 0,\n g = a[l];\n g > f;\n f += 5\n )\n (d =\n 52200625 * (a[x](f) - 33) +\n 614125 * (a[x](f + 1) - 33) +\n 7225 * (a[x](f + 2) - 33) +\n 85 * (a[x](f + 3) - 33) +\n (a[x](f + 4) - 33)),\n e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(e, c[l]),\n h.fromCharCode.apply(h, e)\n );\n };\n\n var ASCIIHexEncode = function(value) {\n return (\n value\n .split(\"\")\n .map(function(value) {\n return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n })\n .join(\"\") + \">\"\n );\n };\n\n var ASCIIHexDecode = function(value) {\n var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n value = value.replace(/\\s/g, \"\");\n if (value.indexOf(\">\") !== -1) {\n value = value.substr(0, value.indexOf(\">\"));\n }\n if (value.length % 2) {\n value += \"0\";\n }\n if (regexCheckIfHex.test(value) === false) {\n return \"\";\n }\n var result = \"\";\n for (var i = 0; i < value.length; i += 2) {\n result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n }\n return result;\n };\n /*\n var FlatePredictors = {\n None: 1,\n TIFF: 2,\n PNG_None: 10,\n PNG_Sub: 11,\n PNG_Up: 12,\n PNG_Average: 13,\n PNG_Paeth: 14,\n PNG_Optimum: 15\n };\n */\n\n var FlateEncode = function(data) {\n var arr = new Uint8Array(data.length);\n var i = data.length;\n while (i--) {\n arr[i] = data.charCodeAt(i);\n }\n arr = zlibSync(arr);\n data = arr.reduce(function(data, byte) {\n return data + String.fromCharCode(byte);\n }, \"\");\n return data;\n };\n\n jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n \"use strict\";\n var i = 0;\n var data = origData || \"\";\n var reverseChain = [];\n filterChain = filterChain || [];\n\n if (typeof filterChain === \"string\") {\n filterChain = [filterChain];\n }\n\n for (i = 0; i < filterChain.length; i += 1) {\n switch (filterChain[i]) {\n case \"ASCII85Decode\":\n case \"/ASCII85Decode\":\n data = ASCII85Decode(data);\n reverseChain.push(\"/ASCII85Encode\");\n break;\n case \"ASCII85Encode\":\n case \"/ASCII85Encode\":\n data = ASCII85Encode(data);\n reverseChain.push(\"/ASCII85Decode\");\n break;\n case \"ASCIIHexDecode\":\n case \"/ASCIIHexDecode\":\n data = ASCIIHexDecode(data);\n reverseChain.push(\"/ASCIIHexEncode\");\n break;\n case \"ASCIIHexEncode\":\n case \"/ASCIIHexEncode\":\n data = ASCIIHexEncode(data);\n reverseChain.push(\"/ASCIIHexDecode\");\n break;\n case \"FlateEncode\":\n case \"/FlateEncode\":\n data = FlateEncode(data);\n reverseChain.push(\"/FlateDecode\");\n break;\n default:\n throw new Error(\n 'The filter: \"' + filterChain[i] + '\" is not implemented'\n );\n }\n }\n\n return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name loadFile\n * @function\n * @param {string} url\n * @param {boolean} sync\n * @param {function} callback\n * @returns {string|undefined} result\n */\n jsPDFAPI.loadFile = function(url, sync, callback) {\n return browserRequest(url, sync, callback);\n\n };\n\n /**\n * @name loadImageFile\n * @function\n * @param {string} path\n * @param {boolean} sync\n * @param {function} callback\n */\n jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n function browserRequest(url, sync, callback) {\n sync = sync === false ? false : true;\n callback = typeof callback === \"function\" ? callback : function() {};\n var result = undefined;\n\n var xhr = function(url, sync, callback) {\n var request = new XMLHttpRequest();\n var i = 0;\n\n var sanitizeUnicode = function(data) {\n var dataLength = data.length;\n var charArray = [];\n var StringFromCharCode = String.fromCharCode;\n\n //Transform Unicode to ASCII\n for (i = 0; i < dataLength; i += 1) {\n charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n }\n return charArray.join(\"\");\n };\n\n request.open(\"GET\", url, !sync);\n // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n if (sync === false) {\n request.onload = function() {\n if (request.status === 200) {\n callback(sanitizeUnicode(this.responseText));\n } else {\n callback(undefined);\n }\n };\n }\n request.send(null);\n\n if (sync && request.status === 200) {\n return sanitizeUnicode(request.responseText);\n }\n };\n try {\n result = xhr(url, sync, callback);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return result;\n }\n\n function nodeReadFile(url, sync, callback) {\n sync = sync === false ? false : true;\n var result = undefined;\n\n var fs = require(\"fs\");\n var path = require(\"path\");\n\n url = path.resolve(url);\n if (sync) {\n try {\n result = fs.readFileSync(url, { encoding: \"latin1\" });\n } catch (e) {\n return undefined;\n }\n } else {\n fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n if (!callback) {\n return;\n }\n if (err) {\n callback(undefined);\n }\n callback(data);\n });\n }\n\n return result;\n }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadHtml2Canvas() {\n return (function() {\n if (globalObject[\"html2canvas\"]) {\n return Promise.resolve(globalObject[\"html2canvas\"]);\n }\n\n return import(\"html2canvas\");\n\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n })\n .then(function(html2canvas) {\n return html2canvas.default ? html2canvas.default : html2canvas;\n });\n }\n\n function loadDomPurify() {\n return (function() {\n if (globalObject[\"DOMPurify\"]) {\n return Promise.resolve(globalObject[\"DOMPurify\"]);\n }\n\n return import(\"dompurify\");\n\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n })\n .then(function(dompurify) {\n return dompurify.default ? dompurify.default : dompurify;\n });\n }\n\n /**\n * Determine the type of a variable/object.\n *\n * @private\n * @ignore\n */\n var objType = function(obj) {\n var type = typeof obj;\n if (type === \"undefined\") return \"undefined\";\n else if (type === \"string\" || obj instanceof String) return \"string\";\n else if (type === \"number\" || obj instanceof Number) return \"number\";\n else if (type === \"function\" || obj instanceof Function) return \"function\";\n else if (!!obj && obj.constructor === Array) return \"array\";\n else if (obj && obj.nodeType === 1) return \"element\";\n else if (type === \"object\") return \"object\";\n else return \"unknown\";\n };\n\n /**\n * Create an HTML element with optional className, innerHTML, and style.\n *\n * @private\n * @ignore\n */\n var createElement = function(tagName, opt) {\n var el = document.createElement(tagName);\n if (opt.className) el.className = opt.className;\n if (opt.innerHTML && opt.dompurify) {\n el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n }\n for (var key in opt.style) {\n el.style[key] = opt.style[key];\n }\n return el;\n };\n\n /**\n * Deep-clone a node and preserve contents/properties.\n *\n * @private\n * @ignore\n */\n var cloneNode = function(node, javascriptEnabled) {\n // Recursively clone the node.\n var clone =\n node.nodeType === 3\n ? document.createTextNode(node.nodeValue)\n : node.cloneNode(false);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (\n javascriptEnabled === true ||\n child.nodeType !== 1 ||\n child.nodeName !== \"SCRIPT\"\n ) {\n clone.appendChild(cloneNode(child, javascriptEnabled));\n }\n }\n\n if (node.nodeType === 1) {\n // Preserve contents/properties of special nodes.\n if (node.nodeName === \"CANVAS\") {\n clone.width = node.width;\n clone.height = node.height;\n clone.getContext(\"2d\").drawImage(node, 0, 0);\n } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n clone.value = node.value;\n }\n\n // Preserve the node's scroll position when it loads.\n clone.addEventListener(\n \"load\",\n function() {\n clone.scrollTop = node.scrollTop;\n clone.scrollLeft = node.scrollLeft;\n },\n true\n );\n }\n\n // Return the cloned node.\n return clone;\n };\n\n /* ----- CONSTRUCTOR ----- */\n\n var Worker = function Worker(opt) {\n // Create the root parent for the proto chain, and the starting Worker.\n var root = Object.assign(\n Worker.convert(Promise.resolve()),\n JSON.parse(JSON.stringify(Worker.template))\n );\n var self = Worker.convert(Promise.resolve(), root);\n\n // Set progress, optional settings, and return.\n self = self.setProgress(1, Worker, 1, [Worker]);\n self = self.set(opt);\n return self;\n };\n\n // Boilerplate for subclassing Promise.\n Worker.prototype = Object.create(Promise.prototype);\n Worker.prototype.constructor = Worker;\n\n // Converts/casts promises into Workers.\n Worker.convert = function convert(promise, inherit) {\n // Uses prototypal inheritance to receive changes made to ancestors' properties.\n promise.__proto__ = inherit || Worker.prototype;\n return promise;\n };\n\n Worker.template = {\n prop: {\n src: null,\n container: null,\n overlay: null,\n canvas: null,\n img: null,\n pdf: null,\n pageSize: null,\n callback: function() {}\n },\n progress: {\n val: 0,\n state: null,\n n: 0,\n stack: []\n },\n opt: {\n filename: \"file.pdf\",\n margin: [0, 0, 0, 0],\n enableLinks: true,\n x: 0,\n y: 0,\n html2canvas: {},\n jsPDF: {},\n backgroundColor: \"transparent\"\n }\n };\n\n /* ----- FROM / TO ----- */\n\n Worker.prototype.from = function from(src, type) {\n function getType(src) {\n switch (objType(src)) {\n case \"string\":\n return \"string\";\n case \"element\":\n return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n default:\n return \"unknown\";\n }\n }\n\n return this.then(function from_main() {\n type = type || getType(src);\n switch (type) {\n case \"string\":\n return this.then(loadDomPurify).then(function(dompurify) {\n return this.set({\n src: createElement(\"div\", {\n innerHTML: src,\n dompurify: dompurify\n })\n });\n });\n case \"element\":\n return this.set({ src: src });\n case \"canvas\":\n return this.set({ canvas: src });\n case \"img\":\n return this.set({ img: src });\n default:\n return this.error(\"Unknown source type.\");\n }\n });\n };\n\n Worker.prototype.to = function to(target) {\n // Route the 'to' request to the appropriate method.\n switch (target) {\n case \"container\":\n return this.toContainer();\n case \"canvas\":\n return this.toCanvas();\n case \"img\":\n return this.toImg();\n case \"pdf\":\n return this.toPdf();\n default:\n return this.error(\"Invalid target.\");\n }\n };\n\n Worker.prototype.toContainer = function toContainer() {\n // Set up function prerequisites.\n var prereqs = [\n function checkSrc() {\n return (\n this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n );\n },\n function checkPageSize() {\n return this.prop.pageSize || this.setPageSize();\n }\n ];\n return this.thenList(prereqs).then(function toContainer_main() {\n // Define the CSS styles for the container and its overlay parent.\n var overlayCSS = {\n position: \"fixed\",\n overflow: \"hidden\",\n zIndex: 1000,\n left: \"-100000px\",\n right: 0,\n bottom: 0,\n top: 0\n };\n var containerCSS = {\n position: \"relative\",\n display: \"inline-block\",\n width:\n (typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.windowWidth\n : Math.max(\n this.prop.src.clientWidth,\n this.prop.src.scrollWidth,\n this.prop.src.offsetWidth\n )) + \"px\",\n left: 0,\n right: 0,\n top: 0,\n margin: \"auto\",\n backgroundColor: this.opt.backgroundColor\n }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n var source = cloneNode(\n this.prop.src,\n this.opt.html2canvas.javascriptEnabled\n );\n\n if (source.tagName === \"BODY\") {\n containerCSS.height =\n Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) + \"px\";\n }\n\n this.prop.overlay = createElement(\"div\", {\n className: \"html2pdf__overlay\",\n style: overlayCSS\n });\n this.prop.container = createElement(\"div\", {\n className: \"html2pdf__container\",\n style: containerCSS\n });\n this.prop.container.appendChild(source);\n this.prop.container.firstChild.appendChild(\n createElement(\"div\", {\n style: {\n clear: \"both\",\n border: \"0 none transparent\",\n margin: 0,\n padding: 0,\n height: 0\n }\n })\n );\n this.prop.container.style.float = \"none\";\n this.prop.overlay.appendChild(this.prop.container);\n document.body.appendChild(this.prop.overlay);\n this.prop.container.firstChild.style.position = \"relative\";\n this.prop.container.height =\n Math.max(\n this.prop.container.firstChild.clientHeight,\n this.prop.container.firstChild.scrollHeight,\n this.prop.container.firstChild.offsetHeight\n ) + \"px\";\n });\n };\n\n Worker.prototype.toCanvas = function toCanvas() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toCanvas_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var options = Object.assign({}, this.opt.html2canvas);\n delete options.onrendered;\n\n return html2canvas(this.prop.container, options);\n })\n .then(function toCanvas_post(canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toContext2d = function toContext2d() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toContext2d_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n\n var pdf = this.opt.jsPDF;\n var fontFaces = this.opt.fontFaces;\n\n var scale =\n typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.width / this.opt.windowWidth\n : 1;\n\n var options = Object.assign(\n {\n async: true,\n allowTaint: true,\n scale: scale,\n scrollX: this.opt.scrollX || 0,\n scrollY: this.opt.scrollY || 0,\n backgroundColor: \"#ffffff\",\n imageTimeout: 15000,\n logging: true,\n proxy: null,\n removeContainer: true,\n foreignObjectRendering: false,\n useCORS: false\n },\n this.opt.html2canvas\n );\n delete options.onrendered;\n\n pdf.context2d.autoPaging =\n typeof this.opt.autoPaging === \"undefined\"\n ? true\n : this.opt.autoPaging;\n pdf.context2d.posX = this.opt.x;\n pdf.context2d.posY = this.opt.y;\n pdf.context2d.margin = this.opt.margin;\n pdf.context2d.fontFaces = fontFaces;\n\n if (fontFaces) {\n for (var i = 0; i < fontFaces.length; ++i) {\n var font = fontFaces[i];\n var src = font.src.find(function(src) {\n return src.format === \"truetype\";\n });\n\n if (src) {\n pdf.addFont(src.url, font.ref.name, font.ref.style);\n }\n }\n }\n\n options.windowHeight = options.windowHeight || 0;\n options.windowHeight =\n options.windowHeight == 0\n ? Math.max(\n this.prop.container.clientHeight,\n this.prop.container.scrollHeight,\n this.prop.container.offsetHeight\n )\n : options.windowHeight;\n\n pdf.context2d.save(true);\n return html2canvas(this.prop.container, options);\n })\n .then(function toContext2d_post(canvas) {\n this.opt.jsPDF.context2d.restore(true);\n\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toImg = function toImg() {\n // Set up function prerequisites.\n var prereqs = [\n function checkCanvas() {\n return this.prop.canvas || this.toCanvas();\n }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toImg_main() {\n var imgData = this.prop.canvas.toDataURL(\n \"image/\" + this.opt.image.type,\n this.opt.image.quality\n );\n this.prop.img = document.createElement(\"img\");\n this.prop.img.src = imgData;\n });\n };\n\n Worker.prototype.toPdf = function toPdf() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContext2d() {\n return this.toContext2d();\n }\n //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toPdf_main() {\n // Create local copies of frequently used properties.\n this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n });\n };\n\n /* ----- OUTPUT / SAVE ----- */\n\n Worker.prototype.output = function output(type, options, src) {\n // Redirect requests to the correct function (outputPdf / outputImg).\n src = src || \"pdf\";\n if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n return this.outputImg(type, options);\n } else {\n return this.outputPdf(type, options);\n }\n };\n\n Worker.prototype.outputPdf = function outputPdf(type, options) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputPdf_main() {\n /* Currently implemented output types:\n * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n * save(options), arraybuffer, blob, bloburi/bloburl,\n * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n */\n return this.prop.pdf.output(type, options);\n });\n };\n\n Worker.prototype.outputImg = function outputImg(type) {\n // Set up function prerequisites.\n var prereqs = [\n function checkImg() {\n return this.prop.img || this.toImg();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputImg_main() {\n switch (type) {\n case undefined:\n case \"img\":\n return this.prop.img;\n case \"datauristring\":\n case \"dataurlstring\":\n return this.prop.img.src;\n case \"datauri\":\n case \"dataurl\":\n return (document.location.href = this.prop.img.src);\n default:\n throw 'Image output type \"' + type + '\" is not supported.';\n }\n });\n };\n\n Worker.prototype.save = function save(filename) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs)\n .set(filename ? { filename: filename } : null)\n .then(function save_main() {\n this.prop.pdf.save(this.opt.filename);\n });\n };\n\n Worker.prototype.doCallback = function doCallback() {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs).then(function doCallback_main() {\n this.prop.callback(this.prop.pdf);\n });\n };\n\n /* ----- SET / GET ----- */\n\n Worker.prototype.set = function set(opt) {\n // TODO: Implement ordered pairs?\n\n // Silently ignore invalid or empty input.\n if (objType(opt) !== \"object\") {\n return this;\n }\n\n // Build an array of setter functions to queue.\n var fns = Object.keys(opt || {}).map(function(key) {\n if (key in Worker.template.prop) {\n // Set pre-defined properties.\n return function set_prop() {\n this.prop[key] = opt[key];\n };\n } else {\n switch (key) {\n case \"margin\":\n return this.setMargin.bind(this, opt.margin);\n case \"jsPDF\":\n return function set_jsPDF() {\n this.opt.jsPDF = opt.jsPDF;\n return this.setPageSize();\n };\n case \"pageSize\":\n return this.setPageSize.bind(this, opt.pageSize);\n default:\n // Set any other properties in opt.\n return function set_opt() {\n this.opt[key] = opt[key];\n };\n }\n }\n }, this);\n\n // Set properties within the promise chain.\n return this.then(function set_main() {\n return this.thenList(fns);\n });\n };\n\n Worker.prototype.get = function get(key, cbk) {\n return this.then(function get_main() {\n // Fetch the requested property, either as a predefined prop or in opt.\n var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n return cbk ? cbk(val) : val;\n });\n };\n\n Worker.prototype.setMargin = function setMargin(margin) {\n return this.then(function setMargin_main() {\n // Parse the margin property.\n switch (objType(margin)) {\n case \"number\":\n margin = [margin, margin, margin, margin];\n // eslint-disable-next-line no-fallthrough\n case \"array\":\n if (margin.length === 2) {\n margin = [margin[0], margin[1], margin[0], margin[1]];\n }\n if (margin.length === 4) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return this.error(\"Invalid margin array.\");\n }\n\n // Set the margin property, then update pageSize.\n this.opt.margin = margin;\n }).then(this.setPageSize);\n };\n\n Worker.prototype.setPageSize = function setPageSize(pageSize) {\n function toPx(val, k) {\n return Math.floor(((val * k) / 72) * 96);\n }\n\n return this.then(function setPageSize_main() {\n // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n // Add 'inner' field if not present.\n if (!pageSize.hasOwnProperty(\"inner\")) {\n pageSize.inner = {\n width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n };\n pageSize.inner.px = {\n width: toPx(pageSize.inner.width, pageSize.k),\n height: toPx(pageSize.inner.height, pageSize.k)\n };\n pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n }\n\n // Attach pageSize to this.\n this.prop.pageSize = pageSize;\n });\n };\n\n Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n // Immediately update all progress values.\n if (val != null) this.progress.val = val;\n if (state != null) this.progress.state = state;\n if (n != null) this.progress.n = n;\n if (stack != null) this.progress.stack = stack;\n this.progress.ratio = this.progress.val / this.progress.state;\n\n // Return this for command chaining.\n return this;\n };\n\n Worker.prototype.updateProgress = function updateProgress(\n val,\n state,\n n,\n stack\n ) {\n // Immediately update all progress values, using setProgress.\n return this.setProgress(\n val ? this.progress.val + val : null,\n state ? state : null,\n n ? this.progress.n + n : null,\n stack ? this.progress.stack.concat(stack) : null\n );\n };\n\n /* ----- PROMISE MAPPING ----- */\n\n Worker.prototype.then = function then(onFulfilled, onRejected) {\n // Wrap `this` for encapsulation.\n var self = this;\n\n return this.thenCore(onFulfilled, onRejected, function then_main(\n onFulfilled,\n onRejected\n ) {\n // Update progress while queuing, calling, and resolving `then`.\n self.updateProgress(null, null, 1, [onFulfilled]);\n return Promise.prototype.then\n .call(this, function then_pre(val) {\n self.updateProgress(null, onFulfilled);\n return val;\n })\n .then(onFulfilled, onRejected)\n .then(function then_post(val) {\n self.updateProgress(1);\n return val;\n });\n });\n };\n\n Worker.prototype.thenCore = function thenCore(\n onFulfilled,\n onRejected,\n thenBase\n ) {\n // Handle optional thenBase parameter.\n thenBase = thenBase || Promise.prototype.then;\n\n // Wrap `this` for encapsulation and bind it to the promise handlers.\n var self = this;\n if (onFulfilled) {\n onFulfilled = onFulfilled.bind(self);\n }\n if (onRejected) {\n onRejected = onRejected.bind(self);\n }\n\n // Cast self into a Promise to avoid polyfills recursively defining `then`.\n var isNative =\n Promise.toString().indexOf(\"[native code]\") !== -1 &&\n Promise.name === \"Promise\";\n var selfPromise = isNative\n ? self\n : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n // Return the promise, after casting it into a Worker and preserving props.\n var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n return Worker.convert(returnVal, self.__proto__);\n };\n\n Worker.prototype.thenExternal = function thenExternal(\n onFulfilled,\n onRejected\n ) {\n // Call `then` and return a standard promise (exits the Worker chain).\n return Promise.prototype.then.call(this, onFulfilled, onRejected);\n };\n\n Worker.prototype.thenList = function thenList(fns) {\n // Queue a series of promise 'factories' into the promise chain.\n var self = this;\n fns.forEach(function thenList_forEach(fn) {\n self = self.thenCore(fn);\n });\n return self;\n };\n\n Worker.prototype[\"catch\"] = function(onRejected) {\n // Bind `this` to the promise handler, call `catch`, and return a Worker.\n if (onRejected) {\n onRejected = onRejected.bind(this);\n }\n var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n return Worker.convert(returnVal, this);\n };\n\n Worker.prototype.catchExternal = function catchExternal(onRejected) {\n // Call `catch` and return a standard promise (exits the Worker chain).\n return Promise.prototype[\"catch\"].call(this, onRejected);\n };\n\n Worker.prototype.error = function error(msg) {\n // Throw the error in the Promise chain.\n return this.then(function error_main() {\n throw new Error(msg);\n });\n };\n\n /* ----- ALIASES ----- */\n\n Worker.prototype.using = Worker.prototype.set;\n Worker.prototype.saveAs = Worker.prototype.save;\n Worker.prototype.export = Worker.prototype.output;\n Worker.prototype.run = Worker.prototype.then;\n\n // Get dimensions of a PDF page, as determined by jsPDF.\n jsPDF.getPageSize = function(orientation, unit, format) {\n // Decode options object\n if (typeof orientation === \"object\") {\n var options = orientation;\n orientation = options.orientation;\n unit = options.unit || unit;\n format = options.format || format;\n }\n\n // Default options\n unit = unit || \"mm\";\n format = format || \"a4\";\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n var format_as_string = (\"\" + format).toLowerCase();\n\n // Size in pt of various paper formats\n var pageFormats = {\n a0: [2383.94, 3370.39],\n a1: [1683.78, 2383.94],\n a2: [1190.55, 1683.78],\n a3: [841.89, 1190.55],\n a4: [595.28, 841.89],\n a5: [419.53, 595.28],\n a6: [297.64, 419.53],\n a7: [209.76, 297.64],\n a8: [147.4, 209.76],\n a9: [104.88, 147.4],\n a10: [73.7, 104.88],\n b0: [2834.65, 4008.19],\n b1: [2004.09, 2834.65],\n b2: [1417.32, 2004.09],\n b3: [1000.63, 1417.32],\n b4: [708.66, 1000.63],\n b5: [498.9, 708.66],\n b6: [354.33, 498.9],\n b7: [249.45, 354.33],\n b8: [175.75, 249.45],\n b9: [124.72, 175.75],\n b10: [87.87, 124.72],\n c0: [2599.37, 3676.54],\n c1: [1836.85, 2599.37],\n c2: [1298.27, 1836.85],\n c3: [918.43, 1298.27],\n c4: [649.13, 918.43],\n c5: [459.21, 649.13],\n c6: [323.15, 459.21],\n c7: [229.61, 323.15],\n c8: [161.57, 229.61],\n c9: [113.39, 161.57],\n c10: [79.37, 113.39],\n dl: [311.81, 623.62],\n letter: [612, 792],\n \"government-letter\": [576, 756],\n legal: [612, 1008],\n \"junior-legal\": [576, 360],\n ledger: [1224, 792],\n tabloid: [792, 1224],\n \"credit-card\": [153, 243]\n };\n\n var k;\n // Unit conversion\n switch (unit) {\n case \"pt\":\n k = 1;\n break;\n case \"mm\":\n k = 72 / 25.4;\n break;\n case \"cm\":\n k = 72 / 2.54;\n break;\n case \"in\":\n k = 72;\n break;\n case \"px\":\n k = 72 / 96;\n break;\n case \"pc\":\n k = 12;\n break;\n case \"em\":\n k = 12;\n break;\n case \"ex\":\n k = 6;\n break;\n default:\n throw \"Invalid unit: \" + unit;\n }\n var pageHeight = 0;\n var pageWidth = 0;\n\n // Dimensions are stored as user units and converted to points on output\n if (pageFormats.hasOwnProperty(format_as_string)) {\n pageHeight = pageFormats[format_as_string][1] / k;\n pageWidth = pageFormats[format_as_string][0] / k;\n } else {\n try {\n pageHeight = format[1];\n pageWidth = format[0];\n } catch (err) {\n throw new Error(\"Invalid format: \" + format);\n }\n }\n\n var tmp;\n // Handle page orientation\n if (orientation === \"p\" || orientation === \"portrait\") {\n orientation = \"p\";\n if (pageWidth > pageHeight) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else if (orientation === \"l\" || orientation === \"landscape\") {\n orientation = \"l\";\n if (pageHeight > pageWidth) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else {\n throw \"Invalid orientation: \" + orientation;\n }\n\n // Return information (k is the unit conversion ratio from pts)\n var info = {\n width: pageWidth,\n height: pageHeight,\n unit: unit,\n k: k,\n orientation: orientation\n };\n return info;\n };\n\n /**\n * @typedef FontFace\n *\n * The font-face type implements an interface similar to that of the font-face CSS rule,\n * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n * is updated.\n *\n * All properties expect values similar to those in the font-face CSS rule. A difference\n * is the font-family, which do not need to be enclosed in double-quotes when containing\n * spaces like in CSS.\n *\n * @property {string} family The name of the font-family.\n * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n * @property {string} [src] url A URL to a font of a specific format.\n * @property {string} [src] format Format of the font referenced by the URL.\n */\n\n /**\n * Generate a PDF from an HTML element or string using.\n *\n * @name html\n * @function\n * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n * @param {Object} [options] Collection of settings\n * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n *
      \n *
    • \n * false: Auto paging is disabled.\n *
    • \n *
    • \n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\n * slice text in half, making it difficult to read.\n *
    • \n *
    • \n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\n * mostly of a single column of text.\n *
    • \n *
    \n * Default is true.\n * @param {string} [options.filename] name of the file\n * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n * @param {jsPDF} [options.jsPDF] jsPDF instance\n * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is\n * specified or the windowWidth option is NOT specified.\n * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n * html2canvas.windowWidth option, this option affects the actual container size while rendering and\n * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified.\n *\n * @example\n * var doc = new jsPDF();\n *\n * doc.html(document.body, {\n * callback: function (doc) {\n * doc.save();\n * },\n * x: 10,\n * y: 10\n * });\n */\n jsPDFAPI.html = function(src, options) {\n \"use strict\";\n\n options = options || {};\n options.callback = options.callback || function() {};\n options.html2canvas = options.html2canvas || {};\n options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n options.jsPDF = options.jsPDF || this;\n options.fontFaces = options.fontFaces\n ? options.fontFaces.map(normalizeFontFace)\n : null;\n\n // Create a new worker with the given options.\n var worker = new Worker(options);\n\n if (!options.worker) {\n // If worker is not set to true, perform the traditional 'simple' operation.\n return worker.from(src).doCallback();\n } else {\n // Otherwise, return the worker for new Promise-based operation.\n return worker;\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n var jsNamesObj, jsJsObj, text;\n /**\n * @name addJS\n * @function\n * @param {string} javascript The javascript to be embedded into the PDF-file.\n * @returns {jsPDF}\n */\n jsPDFAPI.addJS = function(javascript) {\n text = javascript;\n this.internal.events.subscribe(\"postPutResources\", function() {\n jsNamesObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n\n jsJsObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /JavaScript\");\n this.internal.out(\"/JS (\" + text + \")\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n this.internal.events.subscribe(\"putCatalog\", function() {\n if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n this.internal.out(\"/Names <>\");\n }\n });\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namesOid;\n //var destsGoto = [];\n\n jsPDFAPI.events.push([\n \"postPutResources\",\n function() {\n var pdf = this;\n var rx = /^(\\d+) 0 obj$/;\n\n // Write action goto objects for each page\n // this.outline.destsGoto = [];\n // for (var i = 0; i < totalPages; i++) {\n // var id = pdf.internal.newObject();\n // this.outline.destsGoto.push(id);\n // pdf.internal.write(\"<> endobj\");\n // }\n //\n // for (var i = 0; i < dests.length; i++) {\n // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n // R\");\n // }\n //\n if (this.outline.root.children.length > 0) {\n var lines = pdf.outline.render().split(/\\r\\n/);\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var m = rx.exec(line);\n if (m != null) {\n var oid = m[1];\n pdf.internal.newObjectDeferredBegin(oid, false);\n }\n pdf.internal.write(line);\n }\n }\n\n // This code will write named destination for each page reference\n // (page_1, etc)\n if (this.outline.createNamedDestinations) {\n var totalPages = this.internal.pages.length;\n // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n // follow 5, 7, 9, etc\n // Write destination objects for each page\n var dests = [];\n for (var i = 0; i < totalPages; i++) {\n var id = pdf.internal.newObject();\n dests.push(id);\n var info = pdf.internal.getPageInfo(i + 1);\n pdf.internal.write(\n \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n );\n }\n\n // assign a name for each destination\n var names2Oid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Names [ \");\n for (var i = 0; i < dests.length; i++) {\n pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n }\n pdf.internal.write(\" ] >>\", \"endobj\");\n\n // var kids = pdf.internal.newObject();\n // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n // pdf.internal.write(' ] >>', 'endobj');\n\n namesOid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n pdf.internal.write(\">>\", \"endobj\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putCatalog\",\n function() {\n var pdf = this;\n if (pdf.outline.root.children.length > 0) {\n pdf.internal.write(\n \"/Outlines\",\n this.outline.makeRef(this.outline.root)\n );\n if (this.outline.createNamedDestinations) {\n pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n }\n // Open with Bookmarks showing\n // pdf.internal.write(\"/PageMode /UseOutlines\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n var pdf = this;\n\n pdf.outline = {\n createNamedDestinations: false,\n root: {\n children: []\n }\n };\n\n /**\n * Options: pageNumber\n */\n pdf.outline.add = function(parent, title, options) {\n var item = {\n title: title,\n options: options,\n children: []\n };\n if (parent == null) {\n parent = this.root;\n }\n parent.children.push(item);\n return item;\n };\n\n pdf.outline.render = function() {\n this.ctx = {};\n this.ctx.val = \"\";\n this.ctx.pdf = pdf;\n\n this.genIds_r(this.root);\n this.renderRoot(this.root);\n this.renderItems(this.root);\n\n return this.ctx.val;\n };\n\n pdf.outline.genIds_r = function(node) {\n node.id = pdf.internal.newObjectDeferred();\n for (var i = 0; i < node.children.length; i++) {\n this.genIds_r(node.children[i]);\n }\n };\n\n pdf.outline.renderRoot = function(node) {\n this.objStart(node);\n this.line(\"/Type /Outlines\");\n if (node.children.length > 0) {\n this.line(\"/First \" + this.makeRef(node.children[0]));\n this.line(\n \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n );\n }\n this.line(\n \"/Count \" +\n this.count_r(\n {\n count: 0\n },\n node\n )\n );\n this.objEnd();\n };\n\n pdf.outline.renderItems = function(node) {\n var getVerticalCoordinateString = this.ctx.pdf.internal\n .getVerticalCoordinateString;\n for (var i = 0; i < node.children.length; i++) {\n var item = node.children[i];\n this.objStart(item);\n\n this.line(\"/Title \" + this.makeString(item.title));\n\n this.line(\"/Parent \" + this.makeRef(node));\n if (i > 0) {\n this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n }\n if (i < node.children.length - 1) {\n this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n }\n if (item.children.length > 0) {\n this.line(\"/First \" + this.makeRef(item.children[0]));\n this.line(\n \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n );\n }\n\n var count = (this.count = this.count_r(\n {\n count: 0\n },\n item\n ));\n if (count > 0) {\n this.line(\"/Count \" + count);\n }\n\n if (item.options) {\n if (item.options.pageNumber) {\n // Explicit Destination\n //WARNING this assumes page ids are 3,5,7, etc.\n var info = pdf.internal.getPageInfo(item.options.pageNumber);\n this.line(\n \"/Dest \" +\n \"[\" +\n info.objId +\n \" 0 R /XYZ 0 \" +\n getVerticalCoordinateString(0) +\n \" 0]\"\n );\n // this line does not work on all clients (pageNumber instead of page ref)\n //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n // Named Destination\n // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n // Action Destination\n // var id = pdf.internal.newObject();\n // pdf.internal.write('<> endobj');\n // this.line('/A ' + id + ' 0 R' );\n }\n }\n this.objEnd();\n }\n for (var z = 0; z < node.children.length; z++) {\n this.renderItems(node.children[z]);\n }\n };\n\n pdf.outline.line = function(text) {\n this.ctx.val += text + \"\\r\\n\";\n };\n\n pdf.outline.makeRef = function(node) {\n return node.id + \" 0 R\";\n };\n\n pdf.outline.makeString = function(val) {\n return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n };\n\n pdf.outline.objStart = function(node) {\n this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n };\n\n pdf.outline.objEnd = function() {\n this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n };\n\n pdf.outline.count_r = function(ctx, node) {\n for (var i = 0; i < node.children.length; i++) {\n ctx.count++;\n this.count_r(ctx, node.children[i]);\n }\n return ctx.count;\n };\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * 0xc0 (SOF) Huffman - Baseline DCT\n * 0xc1 (SOF) Huffman - Extended sequential DCT\n * 0xc2 Progressive DCT (SOF2)\n * 0xc3 Spatial (sequential) lossless (SOF3)\n * 0xc4 Differential sequential DCT (SOF5)\n * 0xc5 Differential progressive DCT (SOF6)\n * 0xc6 Differential spatial (SOF7)\n * 0xc7\n */\n var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n //takes a string imgData containing the raw bytes of\n //a jpeg image and returns [width, height]\n //Algorithm from: http://www.64lines.com/jpeg-width-height\n var getJpegInfo = function(imgData) {\n var width, height, numcomponents;\n var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n var len = imgData.length;\n var result = { width: 0, height: 0, numcomponents: 1 };\n for (var i = 4; i < len; i += 2) {\n i += blockLength;\n if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n numcomponents = imgData.charCodeAt(i + 9);\n result = { width: width, height: height, numcomponents: numcomponents };\n break;\n } else {\n blockLength =\n imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n }\n }\n return result;\n };\n\n /**\n * @ignore\n */\n jsPDFAPI.processJPEG = function(\n data,\n index,\n alias,\n compression,\n dataAsBinaryString,\n colorSpace\n ) {\n var filter = this.decode.DCT_DECODE,\n bpc = 8,\n dims,\n result = null;\n\n if (\n typeof data === \"string\" ||\n this.__addimage__.isArrayBuffer(data) ||\n this.__addimage__.isArrayBufferView(data)\n ) {\n // if we already have a stored binary string rep use that\n data = dataAsBinaryString || data;\n data = this.__addimage__.isArrayBuffer(data)\n ? new Uint8Array(data)\n : data;\n data = this.__addimage__.isArrayBufferView(data)\n ? this.__addimage__.arrayBufferToBinaryString(data)\n : data;\n\n dims = getJpegInfo(data);\n switch (dims.numcomponents) {\n case 1:\n colorSpace = this.color_spaces.DEVICE_GRAY;\n break;\n case 4:\n colorSpace = this.color_spaces.DEVICE_CMYK;\n break;\n case 3:\n colorSpace = this.color_spaces.DEVICE_RGB;\n break;\n }\n\n result = {\n data: data,\n width: dims.width,\n height: dims.height,\n colorSpace: colorSpace,\n bitsPerComponent: bpc,\n filter: filter,\n index: index,\n alias: alias\n };\n }\n return result;\n };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n var APNG_BLEND_OP_OVER,\n APNG_BLEND_OP_SOURCE,\n APNG_DISPOSE_OP_BACKGROUND,\n APNG_DISPOSE_OP_NONE,\n APNG_DISPOSE_OP_PREVIOUS,\n makeImage,\n scratchCanvas,\n scratchCtx;\n\n APNG_DISPOSE_OP_NONE = 0;\n\n APNG_DISPOSE_OP_BACKGROUND = 1;\n\n APNG_DISPOSE_OP_PREVIOUS = 2;\n\n APNG_BLEND_OP_SOURCE = 0;\n\n APNG_BLEND_OP_OVER = 1;\n\n function PNG(data) {\n var chunkSize,\n colors,\n palLen,\n delayDen,\n delayNum,\n frame,\n i,\n index,\n key,\n section,\n palShort,\n text,\n _i,\n _j,\n _ref;\n this.data = data;\n this.pos = 8;\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.animation = null;\n this.text = {};\n frame = null;\n while (true) {\n chunkSize = this.readUInt32();\n section = function() {\n var _i, _results;\n _results = [];\n for (i = _i = 0; _i < 4; i = ++_i) {\n _results.push(String.fromCharCode(this.data[this.pos++]));\n }\n return _results;\n }\n .call(this)\n .join(\"\");\n switch (section) {\n case \"IHDR\":\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n case \"acTL\":\n this.animation = {\n numFrames: this.readUInt32(),\n numPlays: this.readUInt32() || Infinity,\n frames: []\n };\n break;\n case \"PLTE\":\n this.palette = this.read(chunkSize);\n break;\n case \"fcTL\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.pos += 4;\n frame = {\n width: this.readUInt32(),\n height: this.readUInt32(),\n xOffset: this.readUInt32(),\n yOffset: this.readUInt32()\n };\n delayNum = this.readUInt16();\n delayDen = this.readUInt16() || 100;\n frame.delay = (1000 * delayNum) / delayDen;\n frame.disposeOp = this.data[this.pos++];\n frame.blendOp = this.data[this.pos++];\n frame.data = [];\n break;\n case \"IDAT\":\n case \"fdAT\":\n if (section === \"fdAT\") {\n this.pos += 4;\n chunkSize -= 4;\n }\n data = (frame != null ? frame.data : void 0) || this.imgData;\n for (\n i = _i = 0;\n 0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n i = 0 <= chunkSize ? ++_i : --_i\n ) {\n data.push(this.data[this.pos++]);\n }\n break;\n case \"tRNS\":\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n palLen = this.palette.length / 3;\n this.transparency.indexed = this.read(chunkSize);\n if (this.transparency.indexed.length > palLen)\n throw new Error(\"More transparent colors than palette size\");\n /*\n * According to the PNG spec trns should be increased to the same size as palette if shorter\n */\n //palShort = 255 - this.transparency.indexed.length;\n palShort = palLen - this.transparency.indexed.length;\n if (palShort > 0) {\n for (\n i = _j = 0;\n 0 <= palShort ? _j < palShort : _j > palShort;\n i = 0 <= palShort ? ++_j : --_j\n ) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n this.transparency.rgb = this.read(chunkSize);\n }\n break;\n case \"tEXt\":\n text = this.read(chunkSize);\n index = text.indexOf(0);\n key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n case \"IEND\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.colors = function() {\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n return 1;\n case 2:\n case 6:\n return 3;\n }\n }.call(this);\n this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n this.colorSpace = function() {\n switch (this.colors) {\n case 1:\n return \"DeviceGray\";\n case 3:\n return \"DeviceRGB\";\n }\n }.call(this);\n this.imgData = new Uint8Array(this.imgData);\n return;\n default:\n this.pos += chunkSize;\n }\n this.pos += 4;\n if (this.pos > this.data.length) {\n throw new Error(\"Incomplete or corrupt PNG file\");\n }\n }\n }\n\n PNG.prototype.read = function(bytes) {\n var i, _i, _results;\n _results = [];\n for (\n i = _i = 0;\n 0 <= bytes ? _i < bytes : _i > bytes;\n i = 0 <= bytes ? ++_i : --_i\n ) {\n _results.push(this.data[this.pos++]);\n }\n return _results;\n };\n\n PNG.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.data[this.pos++] << 24;\n b2 = this.data[this.pos++] << 16;\n b3 = this.data[this.pos++] << 8;\n b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n PNG.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.data[this.pos++] << 8;\n b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n PNG.prototype.decodePixels = function(data) {\n var pixelBytes = this.pixelBitlength / 8;\n var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n var pos = 0;\n var _this = this;\n\n if (data == null) {\n data = this.imgData;\n }\n if (data.length === 0) {\n return new Uint8Array(0);\n }\n\n data = unzlibSync(data);\n function pass(x0, y0, dx, dy) {\n var abyte,\n c,\n col,\n i,\n left,\n length,\n p,\n pa,\n paeth,\n pb,\n pc,\n pixels,\n row,\n scanlineLength,\n upper,\n upperLeft,\n _i,\n _j,\n _k,\n _l,\n _m;\n var w = Math.ceil((_this.width - x0) / dx),\n h = Math.ceil((_this.height - y0) / dy);\n var isFull = _this.width == w && _this.height == h;\n scanlineLength = pixelBytes * w;\n pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n length = data.length;\n row = 0;\n c = 0;\n while (row < h && pos < length) {\n switch (data[pos++]) {\n case 0:\n for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n pixels[c++] = data[pos++];\n }\n break;\n case 1:\n for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n abyte = data[pos++];\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n pixels[c++] = (abyte + left) % 256;\n }\n break;\n case 2:\n for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (upper + abyte) % 256;\n }\n break;\n case 3:\n for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n case 4:\n for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n pixels[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n p = left + upper - upperLeft;\n pa = Math.abs(p - left);\n pb = Math.abs(p - upper);\n pc = Math.abs(p - upperLeft);\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n pixels[c++] = (abyte + paeth) % 256;\n }\n break;\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n if (!isFull) {\n var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n var partPos = row * scanlineLength;\n for (i = 0; i < w; i += 1) {\n for (var j = 0; j < pixelBytes; j += 1)\n fullPixels[fullPos++] = pixels[partPos++];\n fullPos += (dx - 1) * pixelBytes;\n }\n }\n row++;\n }\n }\n if (_this.interlaceMethod == 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n /* NOTE these seem to follow the pattern:\n * pass(x, 0, 2*x, 2*x);\n * pass(0, x, x, 2*x);\n * with x being 4, 2, 1.\n */\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1);\n }\n return fullPixels;\n };\n\n PNG.prototype.decodePalette = function() {\n var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n palette = this.palette;\n transparency = this.transparency.indexed || [];\n ret = new Uint8Array((transparency.length || 0) + palette.length);\n pos = 0;\n length = palette.length;\n c = 0;\n for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n }\n return ret;\n };\n\n PNG.prototype.copyToImageData = function(imageData, pixels) {\n var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n colors = this.colors;\n palette = null;\n alpha = this.hasAlphaChannel;\n if (this.palette.length) {\n palette =\n (_ref = this._decodedPalette) != null\n ? _ref\n : (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n data = imageData.data || imageData;\n length = data.length;\n input = palette || pixels;\n i = j = 0;\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n PNG.prototype.decode = function() {\n var ret;\n ret = new Uint8Array(this.width * this.height * 4);\n this.copyToImageData(ret, this.decodePixels());\n return ret;\n };\n\n var hasBrowserCanvas = function() {\n if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n try {\n scratchCanvas = globalObject.document.createElement(\"canvas\");\n scratchCtx = scratchCanvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n };\n\n hasBrowserCanvas();\n\n makeImage = function(imageData) {\n if (hasBrowserCanvas() === true) {\n var img;\n scratchCtx.width = imageData.width;\n scratchCtx.height = imageData.height;\n scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n scratchCtx.putImageData(imageData, 0, 0);\n img = new Image();\n img.src = scratchCanvas.toDataURL();\n return img;\n }\n throw new Error(\"This method requires a Browser with Canvas-capability.\");\n };\n\n PNG.prototype.decodeFrames = function(ctx) {\n var frame, i, imageData, pixels, _i, _len, _ref, _results;\n if (!this.animation) {\n return;\n }\n _ref = this.animation.frames;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n frame = _ref[i];\n imageData = ctx.createImageData(frame.width, frame.height);\n pixels = this.decodePixels(new Uint8Array(frame.data));\n this.copyToImageData(imageData, pixels);\n frame.imageData = imageData;\n _results.push((frame.image = makeImage(imageData)));\n }\n return _results;\n };\n\n PNG.prototype.renderFrame = function(ctx, number) {\n var frame, frames, prev;\n frames = this.animation.frames;\n frame = frames[number];\n prev = frames[number - 1];\n if (number === 0) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n ) {\n ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n } else if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n ) {\n ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n }\n if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n }\n return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n };\n\n PNG.prototype.animate = function(ctx) {\n var doFrame,\n frameNumber,\n frames,\n numFrames,\n numPlays,\n _ref,\n _this = this;\n frameNumber = 0;\n (_ref = this.animation),\n (numFrames = _ref.numFrames),\n (frames = _ref.frames),\n (numPlays = _ref.numPlays);\n return (doFrame = function() {\n var f, frame;\n f = frameNumber++ % numFrames;\n frame = frames[f];\n _this.renderFrame(ctx, f);\n if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n }\n })();\n };\n\n PNG.prototype.stopAnimation = function() {\n var _ref;\n return clearTimeout(\n (_ref = this.animation) != null ? _ref._timeout : void 0\n );\n };\n\n PNG.prototype.render = function(canvas) {\n var ctx, data;\n if (canvas._png) {\n canvas._png.stopAnimation();\n }\n canvas._png = this;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx = canvas.getContext(\"2d\");\n if (this.animation) {\n this.decodeFrames(ctx);\n return this.animate(ctx);\n } else {\n data = ctx.createImageData(this.width, this.height);\n this.copyToImageData(data, this.decodePixels());\n return ctx.putImageData(data, 0, 0);\n }\n };\n\n return PNG;\n})();\n\nexport { PNG };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /*\n * @see http://www.w3.org/TR/PNG-Chunks.html\n *\n Color Allowed Interpretation\n Type Bit Depths\n\n 0 1,2,4,8,16 Each pixel is a grayscale sample.\n\n 2 8,16 Each pixel is an R,G,B triple.\n\n 3 1,2,4,8 Each pixel is a palette index;\n a PLTE chunk must appear.\n\n 4 8,16 Each pixel is a grayscale sample,\n followed by an alpha sample.\n\n 6 8,16 Each pixel is an R,G,B triple,\n followed by an alpha sample.\n */\n\n /*\n * PNG filter method types\n *\n * @see http://www.w3.org/TR/PNG-Filters.html\n * @see http://www.libpng.org/pub/png/book/chapter09.html\n *\n * This is what the value 'Predictor' in decode params relates to\n *\n * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n *\n 0 None\n 1 Sub\n 2 Up\n 3 Average\n 4 Paeth\n */\n\n var canCompress = function(value) {\n return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n };\n\n var hasCompressionJS = function() {\n return typeof zlibSync === \"function\";\n };\n var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n var level = 4;\n var filter_method = filterUp;\n\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n level = 1;\n filter_method = filterSub;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n level = 6;\n filter_method = filterAverage;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n level = 9;\n filter_method = filterPaeth;\n break;\n }\n\n bytes = applyPngFilterMethod(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n );\n var dat = zlibSync(bytes, { level: level });\n return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n };\n\n var applyPngFilterMethod = function(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n ) {\n var lines = bytes.length / lineLength,\n result = new Uint8Array(bytes.length + lines),\n filter_methods = getFilterMethods(),\n line,\n prevLine,\n offset;\n\n for (var i = 0; i < lines; i += 1) {\n offset = i * lineLength;\n line = bytes.subarray(offset, offset + lineLength);\n\n if (filter_method) {\n result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n } else {\n var len = filter_methods.length,\n results = [];\n\n for (var j; j < len; j += 1) {\n results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n }\n\n var ind = getIndexOfSmallestSum(results.concat());\n\n result.set(results[ind], offset + i);\n }\n\n prevLine = line;\n }\n\n return result;\n };\n\n var filterNone = function(line) {\n /*var result = new Uint8Array(line.length + 1);\n result[0] = 0;\n result.set(line, 1);*/\n\n var result = Array.apply([], line);\n result.unshift(0);\n\n return result;\n };\n\n var filterSub = function(line, colorsPerPixel) {\n var result = [],\n len = line.length,\n left;\n\n result[0] = 1;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterUp = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n up;\n\n result[0] = 2;\n\n for (var i = 0; i < len; i += 1) {\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterAverage = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up;\n\n result[0] = 3;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n }\n\n return result;\n };\n\n var filterPaeth = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up,\n upLeft,\n paeth;\n\n result[0] = 4;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n paeth = paethPredictor(left, up, upLeft);\n result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var paethPredictor = function(left, up, upLeft) {\n if (left === up && up === upLeft) {\n return left;\n }\n var pLeft = Math.abs(up - upLeft),\n pUp = Math.abs(left - upLeft),\n pUpLeft = Math.abs(left + up - upLeft - upLeft);\n return pLeft <= pUp && pLeft <= pUpLeft\n ? left\n : pUp <= pUpLeft\n ? up\n : upLeft;\n };\n\n var getFilterMethods = function() {\n return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n };\n\n var getIndexOfSmallestSum = function(arrays) {\n var sum = arrays.map(function(value) {\n return value.reduce(function(pv, cv) {\n return pv + Math.abs(cv);\n }, 0);\n });\n return sum.indexOf(Math.min.apply(null, sum));\n };\n\n var getPredictorFromCompression = function(compression) {\n var predictor;\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n predictor = 11;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n predictor = 13;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n predictor = 14;\n break;\n\n default:\n predictor = 12;\n break;\n }\n return predictor;\n };\n\n /**\n * @name processPNG\n * @function\n * @ignore\n */\n jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n \"use strict\";\n\n var colorSpace,\n filter = this.decode.FLATE_DECODE,\n bitsPerComponent,\n image,\n decodeParameters = \"\",\n trns,\n colors,\n pal,\n smask,\n pixels,\n len,\n alphaData,\n imgData,\n hasColors,\n pixel,\n i,\n n;\n\n if (this.__addimage__.isArrayBuffer(imageData))\n imageData = new Uint8Array(imageData);\n\n if (this.__addimage__.isArrayBufferView(imageData)) {\n image = new PNG(imageData);\n imageData = image.imgData;\n bitsPerComponent = image.bits;\n colorSpace = image.colorSpace;\n colors = image.colors;\n\n /*\n * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n *\n * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n *\n * Extract alpha to create two separate images, using the alpha as a sMask\n */\n if ([4, 6].indexOf(image.colorType) !== -1) {\n /*\n * processes 8 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 8) {\n pixels =\n image.pixelBitlength == 32\n ? new Uint32Array(image.decodePixels().buffer)\n : image.pixelBitlength == 16\n ? new Uint16Array(image.decodePixels().buffer)\n : new Uint8Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(len * image.colors);\n alphaData = new Uint8Array(len);\n var pDiff = image.pixelBitlength - image.bits;\n i = 0;\n n = 0;\n var pbl;\n\n for (; i < len; i++) {\n pixel = pixels[i];\n pbl = 0;\n\n while (pbl < pDiff) {\n imgData[n++] = (pixel >>> pbl) & 0xff;\n pbl = pbl + image.bits;\n }\n\n alphaData[i] = (pixel >>> pbl) & 0xff;\n }\n }\n\n /*\n * processes 16 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 16) {\n pixels = new Uint32Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(\n len * (32 / image.pixelBitlength) * image.colors\n );\n alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n hasColors = image.colors > 1;\n i = 0;\n n = 0;\n var a = 0;\n\n while (i < len) {\n pixel = pixels[i++];\n\n imgData[n++] = (pixel >>> 0) & 0xff;\n\n if (hasColors) {\n imgData[n++] = (pixel >>> 16) & 0xff;\n\n pixel = pixels[i++];\n imgData[n++] = (pixel >>> 0) & 0xff;\n }\n\n alphaData[a++] = (pixel >>> 16) & 0xff;\n }\n bitsPerComponent = 8;\n }\n\n if (canCompress(compression)) {\n imageData = compressBytes(\n imgData,\n image.width * image.colors,\n image.colors,\n compression\n );\n smask = compressBytes(alphaData, image.width, 1, compression);\n } else {\n imageData = imgData;\n smask = alphaData;\n filter = undefined;\n }\n }\n\n /*\n * Indexed png. Each pixel is a palette index.\n */\n if (image.colorType === 3) {\n colorSpace = this.color_spaces.INDEXED;\n pal = image.palette;\n\n if (image.transparency.indexed) {\n var trans = image.transparency.indexed;\n var total = 0;\n i = 0;\n len = trans.length;\n\n for (; i < len; ++i) {\n total += trans[i];\n }\n\n total = total / 255;\n\n /*\n * a single color is specified as 100% transparent (0),\n * so we set trns to use a /Mask with that index\n */\n if (total === len - 1 && trans.indexOf(0) !== -1) {\n trns = [trans.indexOf(0)];\n\n /*\n * there's more than one colour within the palette that specifies\n * a transparency value less than 255, so we unroll the pixels to create an image sMask\n */\n } else if (total !== len) {\n pixels = image.decodePixels();\n alphaData = new Uint8Array(pixels.length);\n i = 0;\n len = pixels.length;\n\n for (; i < len; i++) {\n alphaData[i] = trans[pixels[i]];\n }\n\n smask = compressBytes(alphaData, image.width, 1);\n }\n }\n }\n\n var predictor = getPredictorFromCompression(compression);\n\n if (filter === this.decode.FLATE_DECODE) {\n decodeParameters = \"/Predictor \" + predictor + \" \";\n }\n decodeParameters +=\n \"/Colors \" +\n colors +\n \" /BitsPerComponent \" +\n bitsPerComponent +\n \" /Columns \" +\n image.width;\n\n if (\n this.__addimage__.isArrayBuffer(imageData) ||\n this.__addimage__.isArrayBufferView(imageData)\n ) {\n imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n }\n\n if (\n (smask && this.__addimage__.isArrayBuffer(smask)) ||\n this.__addimage__.isArrayBufferView(smask)\n ) {\n smask = this.__addimage__.arrayBufferToBinaryString(smask);\n }\n\n return {\n alias: alias,\n data: imageData,\n index: index,\n filter: filter,\n decodeParameters: decodeParameters,\n transparency: trns,\n palette: pal,\n sMask: smask,\n predictor: predictor,\n width: image.width,\n height: image.height,\n bitsPerComponent: bitsPerComponent,\n colorSpace: colorSpace\n };\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee , 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n var p = 0;\n\n var gopts = gopts === undefined ? {} : gopts;\n var loop_count = gopts.loop === undefined ? null : gopts.loop;\n var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n function check_palette_and_num_colors(palette) {\n var num_colors = palette.length;\n if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n throw new Error(\n \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n );\n }\n return num_colors;\n }\n\n // - Header.\n buf[p++] = 0x47;\n buf[p++] = 0x49;\n buf[p++] = 0x46; // GIF\n buf[p++] = 0x38;\n buf[p++] = 0x39;\n buf[p++] = 0x61; // 89a\n\n // Handling of Global Color Table (palette) and background index.\n var gp_num_colors_pow2 = 0;\n var background = 0;\n if (global_palette !== null) {\n var gp_num_colors = check_palette_and_num_colors(global_palette);\n while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n gp_num_colors = 1 << gp_num_colors_pow2;\n --gp_num_colors_pow2;\n if (gopts.background !== undefined) {\n background = gopts.background;\n if (background >= gp_num_colors)\n throw new Error(\"Background index out of range.\");\n // The GIF spec states that a background index of 0 should be ignored, so\n // this is probably a mistake and you really want to set it to another\n // slot in the palette. But actually in the end most browsers, etc end\n // up ignoring this almost completely (including for dispose background).\n if (background === 0)\n throw new Error(\"Background index explicitly passed as 0.\");\n }\n }\n\n // - Logical Screen Descriptor.\n // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n buf[p++] = width & 0xff;\n buf[p++] = (width >> 8) & 0xff;\n buf[p++] = height & 0xff;\n buf[p++] = (height >> 8) & 0xff;\n // NOTE: Indicates 0-bpp original color resolution (unused?).\n buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n buf[p++] = background; // Background Color Index.\n buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n // - Global Color Table\n if (global_palette !== null) {\n for (var i = 0, il = global_palette.length; i < il; ++i) {\n var rgb = global_palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n if (loop_count !== null) {\n // Netscape block for looping.\n if (loop_count < 0 || loop_count > 65535)\n throw new Error(\"Loop count invalid.\");\n // Extension code, label, and length.\n buf[p++] = 0x21;\n buf[p++] = 0xff;\n buf[p++] = 0x0b;\n // NETSCAPE2.0\n buf[p++] = 0x4e;\n buf[p++] = 0x45;\n buf[p++] = 0x54;\n buf[p++] = 0x53;\n buf[p++] = 0x43;\n buf[p++] = 0x41;\n buf[p++] = 0x50;\n buf[p++] = 0x45;\n buf[p++] = 0x32;\n buf[p++] = 0x2e;\n buf[p++] = 0x30;\n // Sub-block\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loop_count & 0xff;\n buf[p++] = (loop_count >> 8) & 0xff;\n buf[p++] = 0x00; // Terminator.\n }\n\n var ended = false;\n\n this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n if (ended === true) {\n --p;\n ended = false;\n } // Un-end.\n\n opts = opts === undefined ? {} : opts;\n\n // TODO(deanm): Bounds check x, y. Do they need to be within the virtual\n // canvas width/height, I imagine?\n if (x < 0 || y < 0 || x > 65535 || y > 65535)\n throw new Error(\"x/y invalid.\");\n\n if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n if (indexed_pixels.length < w * h)\n throw new Error(\"Not enough pixels for the frame size.\");\n\n var using_local_palette = true;\n var palette = opts.palette;\n if (palette === undefined || palette === null) {\n using_local_palette = false;\n palette = global_palette;\n }\n\n if (palette === undefined || palette === null)\n throw new Error(\"Must supply either a local or global palette.\");\n\n var num_colors = check_palette_and_num_colors(palette);\n\n // Compute the min_code_size (power of 2), destroying num_colors.\n var min_code_size = 0;\n while ((num_colors >>= 1)) ++min_code_size;\n num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n var delay = opts.delay === undefined ? 0 : opts.delay;\n\n // From the spec:\n // 0 - No disposal specified. The decoder is\n // not required to take any action.\n // 1 - Do not dispose. The graphic is to be left\n // in place.\n // 2 - Restore to background color. The area used by the\n // graphic must be restored to the background color.\n // 3 - Restore to previous. The decoder is required to\n // restore the area overwritten by the graphic with\n // what was there prior to rendering the graphic.\n // 4-7 - To be defined.\n // NOTE(deanm): Dispose background doesn't really work, apparently most\n // browsers ignore the background palette index and clear to transparency.\n var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n if (disposal < 0 || disposal > 3)\n // 4-7 is reserved.\n throw new Error(\"Disposal out of range.\");\n\n var use_transparency = false;\n var transparent_index = 0;\n if (opts.transparent !== undefined && opts.transparent !== null) {\n use_transparency = true;\n transparent_index = opts.transparent;\n if (transparent_index < 0 || transparent_index >= num_colors)\n throw new Error(\"Transparent color index.\");\n }\n\n if (disposal !== 0 || use_transparency || delay !== 0) {\n // - Graphics Control Extension\n buf[p++] = 0x21;\n buf[p++] = 0xf9; // Extension / Label.\n buf[p++] = 4; // Byte size.\n\n buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n buf[p++] = delay & 0xff;\n buf[p++] = (delay >> 8) & 0xff;\n buf[p++] = transparent_index; // Transparent color index.\n buf[p++] = 0; // Block Terminator.\n }\n\n // - Image Descriptor\n buf[p++] = 0x2c; // Image Seperator.\n buf[p++] = x & 0xff;\n buf[p++] = (x >> 8) & 0xff; // Left.\n buf[p++] = y & 0xff;\n buf[p++] = (y >> 8) & 0xff; // Top.\n buf[p++] = w & 0xff;\n buf[p++] = (w >> 8) & 0xff;\n buf[p++] = h & 0xff;\n buf[p++] = (h >> 8) & 0xff;\n // NOTE: No sort flag (unused?).\n // TODO(deanm): Support interlace.\n buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n // - Local Color Table\n if (using_local_palette === true) {\n for (var i = 0, il = palette.length; i < il; ++i) {\n var rgb = palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n p = GifWriterOutputLZWCodeStream(\n buf,\n p,\n min_code_size < 2 ? 2 : min_code_size,\n indexed_pixels\n );\n\n return p;\n };\n\n this.end = function() {\n if (ended === false) {\n buf[p++] = 0x3b; // Trailer.\n ended = true;\n }\n return p;\n };\n\n this.getOutputBuffer = function() {\n return buf;\n };\n this.setOutputBuffer = function(v) {\n buf = v;\n };\n this.getOutputBufferPosition = function() {\n return p;\n };\n this.setOutputBufferPosition = function(v) {\n p = v;\n };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n buf[p++] = min_code_size;\n var cur_subblock = p++; // Pointing at the length field.\n\n var clear_code = 1 << min_code_size;\n var code_mask = clear_code - 1;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n var cur_shift = 0;\n // We have at most 12-bit codes, so we should have to hold a max of 19\n // bits here (and then we would write out).\n var cur = 0;\n\n function emit_bytes_to_buffer(bit_block_size) {\n while (cur_shift >= bit_block_size) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n }\n\n function emit_code(c) {\n cur |= c << cur_shift;\n cur_shift += cur_code_size;\n emit_bytes_to_buffer(8);\n }\n\n // I am not an expert on the topic, and I don't want to write a thesis.\n // However, it is good to outline here the basic algorithm and the few data\n // structures and optimizations here that make this implementation fast.\n // The basic idea behind LZW is to build a table of previously seen runs\n // addressed by a short id (herein called output code). All data is\n // referenced by a code, which represents one or more values from the\n // original input stream. All input bytes can be referenced as the same\n // value as an output code. So if you didn't want any compression, you\n // could more or less just output the original bytes as codes (there are\n // some details to this, but it is the idea). In order to achieve\n // compression, values greater then the input range (codes can be up to\n // 12-bit while input only 8-bit) represent a sequence of previously seen\n // inputs. The decompressor is able to build the same mapping while\n // decoding, so there is always a shared common knowledge between the\n // encoding and decoder, which is also important for \"timing\" aspects like\n // how to handle variable bit width code encoding.\n //\n // One obvious but very important consequence of the table system is there\n // is always a unique id (at most 12-bits) to map the runs. 'A' might be\n // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship\n // can be used for an effecient lookup strategy for the code mapping. We\n // need to know if a run has been seen before, and be able to map that run\n // to the output code. Since we start with known unique ids (input bytes),\n // and then from those build more unique ids (table entries), we can\n // continue this chain (almost like a linked list) to always have small\n // integer values that represent the current byte chains in the encoder.\n // This means instead of tracking the input bytes (AAAABCD) to know our\n // current state, we can track the table entry for AAAABC (it is guaranteed\n // to exist by the nature of the algorithm) and the next character D.\n // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n // unique. This allows us to create a simple lookup key for mapping input\n // sequences to codes (table indices) without having to store or search\n // any of the code sequences. So if 'AAAA' has a table entry of 12, the\n // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n // key. This leads to a integer value at most 20-bits, which can always\n // fit in an SMI value and be used as a fast sparse array / object key.\n\n // Output code for the current contents of the index buffer.\n var ib_code = index_stream[0] & code_mask; // Load first input index.\n var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n emit_code(clear_code); // Spec says first code should be a clear code.\n\n // First index already loaded, process the rest of the stream.\n for (var i = 1, il = index_stream.length; i < il; ++i) {\n var k = index_stream[i] & code_mask;\n var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n var cur_code = code_table[cur_key]; // buffer + k.\n\n // Check if we have to create a new code table entry.\n if (cur_code === undefined) {\n // We don't have buffer + k.\n // Emit index buffer (without k).\n // This is an inline version of emit_code, because this is the core\n // writing routine of the compressor (and V8 cannot inline emit_code\n // because it is a closure here in a different context). Additionally\n // we can call emit_byte_to_buffer less often, because we can have\n // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n // be 12-bits, so can safely have 18-bits there without overflow.\n // emit_code(ib_code);\n cur |= ib_code << cur_shift;\n cur_shift += cur_code_size;\n while (cur_shift >= 8) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n\n if (next_code === 4096) {\n // Table full, need a clear.\n emit_code(clear_code);\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_table = {};\n } else {\n // Table not full, insert a new entry.\n // Increase our variable bit code sizes if necessary. This is a bit\n // tricky as it is based on \"timing\" between the encoding and\n // decoder. From the encoders perspective this should happen after\n // we've already emitted the index buffer and are about to create the\n // first table entry that would overflow our current code bit size.\n if (next_code >= 1 << cur_code_size) ++cur_code_size;\n code_table[cur_key] = next_code++; // Insert into code table.\n }\n\n ib_code = k; // Index buffer to single input k.\n } else {\n ib_code = cur_code; // Index buffer to sequence in code table.\n }\n }\n\n emit_code(ib_code); // There will still be something in the index buffer.\n emit_code(eoi_code); // End Of Information.\n\n // Flush / finalize the sub-blocks stream to the buffer.\n emit_bytes_to_buffer(1);\n\n // Finish the sub-blocks, writing out any unfinished lengths and\n // terminating with a sub-block of length 0. If we have already started\n // but not yet used a sub-block it can just become the terminator.\n if (cur_subblock + 1 === p) {\n // Started but unused.\n buf[cur_subblock] = 0;\n } else {\n // Started and used, write length and additional terminator block.\n buf[cur_subblock] = p - cur_subblock - 1;\n buf[p++] = 0;\n }\n return p;\n}\n\nfunction GifReader(buf) {\n var p = 0;\n\n // - Header (GIF87a or GIF89a).\n if (\n buf[p++] !== 0x47 ||\n buf[p++] !== 0x49 ||\n buf[p++] !== 0x46 ||\n buf[p++] !== 0x38 ||\n ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n buf[p++] !== 0x61\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n // - Logical Screen Descriptor.\n var width = buf[p++] | (buf[p++] << 8);\n var height = buf[p++] | (buf[p++] << 8);\n var pf0 = buf[p++]; // .\n var global_palette_flag = pf0 >> 7;\n var num_global_colors_pow2 = pf0 & 0x7;\n var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n var background = buf[p++];\n buf[p++]; // Pixel aspect ratio (unused?).\n\n var global_palette_offset = null;\n var global_palette_size = null;\n\n if (global_palette_flag) {\n global_palette_offset = p;\n global_palette_size = num_global_colors;\n p += num_global_colors * 3; // Seek past palette.\n }\n\n var no_eof = true;\n\n var frames = [];\n\n var delay = 0;\n var transparent_index = null;\n var disposal = 0; // 0 - No disposal specified.\n var loop_count = null;\n\n this.width = width;\n this.height = height;\n\n while (no_eof && p < buf.length) {\n switch (buf[p++]) {\n case 0x21: // Graphics Control Extension Block\n switch (buf[p++]) {\n case 0xff: // Application specific block\n // Try if it's a Netscape block (with animation loop counter).\n if (\n buf[p] !== 0x0b || // 21 FF already read, check block size.\n // NETSCAPE2.0\n (buf[p + 1] == 0x4e &&\n buf[p + 2] == 0x45 &&\n buf[p + 3] == 0x54 &&\n buf[p + 4] == 0x53 &&\n buf[p + 5] == 0x43 &&\n buf[p + 6] == 0x41 &&\n buf[p + 7] == 0x50 &&\n buf[p + 8] == 0x45 &&\n buf[p + 9] == 0x32 &&\n buf[p + 10] == 0x2e &&\n buf[p + 11] == 0x30 &&\n // Sub-block\n buf[p + 12] == 0x03 &&\n buf[p + 13] == 0x01 &&\n buf[p + 16] == 0)\n ) {\n p += 14;\n loop_count = buf[p++] | (buf[p++] << 8);\n p++; // Skip terminator.\n } else {\n // We don't know what it is, just try to get past it.\n p += 12;\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n }\n break;\n\n case 0xf9: // Graphics Control Extension\n if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n var pf1 = buf[p++];\n delay = buf[p++] | (buf[p++] << 8);\n transparent_index = buf[p++];\n if ((pf1 & 1) === 0) transparent_index = null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // Skip terminator.\n break;\n\n case 0xfe: // Comment Extension.\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n // console.log(buf.slice(p, p+block_size).toString('ascii'));\n p += block_size;\n }\n break;\n\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n );\n }\n break;\n\n case 0x2c: // Image Descriptor.\n var x = buf[p++] | (buf[p++] << 8);\n var y = buf[p++] | (buf[p++] << 8);\n var w = buf[p++] | (buf[p++] << 8);\n var h = buf[p++] | (buf[p++] << 8);\n var pf2 = buf[p++];\n var local_palette_flag = pf2 >> 7;\n var interlace_flag = (pf2 >> 6) & 1;\n var num_local_colors_pow2 = pf2 & 0x7;\n var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n var palette_offset = global_palette_offset;\n var palette_size = global_palette_size;\n var has_local_palette = false;\n if (local_palette_flag) {\n var has_local_palette = true;\n palette_offset = p; // Override with local palette.\n palette_size = num_local_colors;\n p += num_local_colors * 3; // Seek past palette.\n }\n\n var data_offset = p;\n\n p++; // codesize\n while (true) {\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n\n frames.push({\n x: x,\n y: y,\n width: w,\n height: h,\n has_local_palette: has_local_palette,\n palette_offset: palette_offset,\n palette_size: palette_size,\n data_offset: data_offset,\n data_length: p - data_offset,\n transparent_index: transparent_index,\n interlaced: !!interlace_flag,\n delay: delay,\n disposal: disposal\n });\n break;\n\n case 0x3b: // Trailer Marker (end of file).\n no_eof = false;\n break;\n\n default:\n throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n break;\n }\n }\n\n this.numFrames = function() {\n return frames.length;\n };\n\n this.loopCount = function() {\n return loop_count;\n };\n\n this.frameInfo = function(frame_num) {\n if (frame_num < 0 || frame_num >= frames.length)\n throw new Error(\"Frame index out of range.\");\n return frames[frame_num];\n };\n\n this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = b;\n pixels[op++] = g;\n pixels[op++] = r;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n\n // I will go to copy and paste hell one day...\n this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = r;\n pixels[op++] = g;\n pixels[op++] = b;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n var min_code_size = code_stream[p++];\n\n var clear_code = 1 << min_code_size;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n // NOTE: This shares the same name as the encoder, but has a different\n // meaning here. Here this masks each code coming from the code stream.\n var code_mask = (1 << cur_code_size) - 1;\n var cur_shift = 0;\n var cur = 0;\n\n var op = 0; // Output pointer.\n\n var subblock_size = code_stream[p++];\n\n // TODO(deanm): Would using a TypedArray be any faster? At least it would\n // solve the fast mode / backing store uncertainty.\n // var code_table = Array(4096);\n var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n var prev_code = null; // Track code-1.\n\n while (true) {\n // Read up to two bytes, making sure we always 12-bits for max sized code.\n while (cur_shift < 16) {\n if (subblock_size === 0) break; // No more data to be read.\n\n cur |= code_stream[p++] << cur_shift;\n cur_shift += 8;\n\n if (subblock_size === 1) {\n // Never let it get to 0 to hold logic above.\n subblock_size = code_stream[p++]; // Next subblock.\n } else {\n --subblock_size;\n }\n }\n\n // TODO(deanm): We should never really get here, we should have received\n // and EOI.\n if (cur_shift < cur_code_size) break;\n\n var code = cur & code_mask;\n cur >>= cur_code_size;\n cur_shift -= cur_code_size;\n\n // TODO(deanm): Maybe should check that the first code was a clear code,\n // at least this is what you're supposed to do. But actually our encoder\n // now doesn't emit a clear code first anyway.\n if (code === clear_code) {\n // We don't actually have to clear the table. This could be a good idea\n // for greater error checking, but we don't really do any anyway. We\n // will just track it with next_code and overwrite old entries.\n\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_mask = (1 << cur_code_size) - 1;\n\n // Don't update prev_code ?\n prev_code = null;\n continue;\n } else if (code === eoi_code) {\n break;\n }\n\n // We have a similar situation as the decoder, where we want to store\n // variable length entries (code table entries), but we want to do in a\n // faster manner than an array of arrays. The code below stores sort of a\n // linked list within the code table, and then \"chases\" through it to\n // construct the dictionary entries. When a new entry is created, just the\n // last byte is stored, and the rest (prefix) of the entry is only\n // referenced by its table entry. Then the code chases through the\n // prefixes until it reaches a single byte code. We have to chase twice,\n // first to compute the length, and then to actually copy the data to the\n // output (backwards, since we know the length). The alternative would be\n // storing something in an intermediate stack, but that doesn't make any\n // more sense. I implemented an approach where it also stored the length\n // in the code table, although it's a bit tricky because you run out of\n // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n // entries are generally not the long). Even when I created benchmarks for\n // very long table entries the complexity did not seem worth it.\n // The code table stores the prefix entry in 12 bits and then the suffix\n // byte in 8 bits, so each entry is 20 bits.\n\n var chase_code = code < next_code ? code : prev_code;\n\n // Chase what we will output, either {CODE} or {CODE-1}.\n var chase_length = 0;\n var chase = chase_code;\n while (chase > clear_code) {\n chase = code_table[chase] >> 8;\n ++chase_length;\n }\n\n var k = chase;\n\n var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n if (op_end > output_length) {\n console.log(\"Warning, gif stream longer than expected.\");\n return;\n }\n\n // Already have the first byte from the chase, might as well write it fast.\n output[op++] = k;\n\n op += chase_length;\n var b = op; // Track pointer, writing backwards.\n\n if (chase_code !== code)\n // The case of emitting {CODE-1} + k.\n output[op++] = k;\n\n chase = chase_code;\n while (chase_length--) {\n chase = code_table[chase];\n output[--b] = chase & 0xff; // Write backwards.\n chase >>= 8; // Pull down to the prefix code.\n }\n\n if (prev_code !== null && next_code < 4096) {\n code_table[next_code++] = (prev_code << 8) | k;\n // TODO(deanm): Figure out this clearing vs code growth logic better. I\n // have an feeling that it should just happen somewhere else, for now it\n // is awkward between when we grow past the max and then hit a clear code.\n // For now just check if we hit the max 12-bits (then a clear code should\n // follow, also of course encoded in 12-bits).\n if (next_code >= code_mask + 1 && cur_code_size < 12) {\n ++cur_code_size;\n code_mask = (code_mask << 1) | 1;\n }\n }\n\n prev_code = code;\n }\n\n if (op !== output_length) {\n console.log(\"Warning, gif stream shorter than expected.\");\n }\n\n return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n var ffloor = Math.floor;\n var YTable = new Array(64);\n var UVTable = new Array(64);\n var fdtbl_Y = new Array(64);\n var fdtbl_UV = new Array(64);\n var YDC_HT;\n var UVDC_HT;\n var YAC_HT;\n var UVAC_HT;\n\n var bitcode = new Array(65535);\n var category = new Array(65535);\n var outputfDCTQuant = new Array(64);\n var DU = new Array(64);\n var byteout = [];\n var bytenew = 0;\n var bytepos = 7;\n\n var YDU = new Array(64);\n var UDU = new Array(64);\n var VDU = new Array(64);\n var clt = new Array(256);\n var RGB_YUV_TABLE = new Array(2048);\n var currentQuality;\n\n var ZigZag = [\n 0,\n 1,\n 5,\n 6,\n 14,\n 15,\n 27,\n 28,\n 2,\n 4,\n 7,\n 13,\n 16,\n 26,\n 29,\n 42,\n 3,\n 8,\n 12,\n 17,\n 25,\n 30,\n 41,\n 43,\n 9,\n 11,\n 18,\n 24,\n 31,\n 40,\n 44,\n 53,\n 10,\n 19,\n 23,\n 32,\n 39,\n 45,\n 52,\n 54,\n 20,\n 22,\n 33,\n 38,\n 46,\n 51,\n 55,\n 60,\n 21,\n 34,\n 37,\n 47,\n 50,\n 56,\n 59,\n 61,\n 35,\n 36,\n 48,\n 49,\n 57,\n 58,\n 62,\n 63\n ];\n\n var std_dc_luminance_nrcodes = [\n 0,\n 0,\n 1,\n 5,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_luminance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 3,\n 3,\n 2,\n 4,\n 3,\n 5,\n 5,\n 4,\n 4,\n 0,\n 0,\n 1,\n 0x7d\n ];\n var std_ac_luminance_values = [\n 0x01,\n 0x02,\n 0x03,\n 0x00,\n 0x04,\n 0x11,\n 0x05,\n 0x12,\n 0x21,\n 0x31,\n 0x41,\n 0x06,\n 0x13,\n 0x51,\n 0x61,\n 0x07,\n 0x22,\n 0x71,\n 0x14,\n 0x32,\n 0x81,\n 0x91,\n 0xa1,\n 0x08,\n 0x23,\n 0x42,\n 0xb1,\n 0xc1,\n 0x15,\n 0x52,\n 0xd1,\n 0xf0,\n 0x24,\n 0x33,\n 0x62,\n 0x72,\n 0x82,\n 0x09,\n 0x0a,\n 0x16,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x25,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x34,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe1,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf1,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n var std_dc_chrominance_nrcodes = [\n 0,\n 0,\n 3,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_chrominance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 2,\n 4,\n 4,\n 3,\n 4,\n 7,\n 5,\n 4,\n 4,\n 0,\n 1,\n 2,\n 0x77\n ];\n var std_ac_chrominance_values = [\n 0x00,\n 0x01,\n 0x02,\n 0x03,\n 0x11,\n 0x04,\n 0x05,\n 0x21,\n 0x31,\n 0x06,\n 0x12,\n 0x41,\n 0x51,\n 0x07,\n 0x61,\n 0x71,\n 0x13,\n 0x22,\n 0x32,\n 0x81,\n 0x08,\n 0x14,\n 0x42,\n 0x91,\n 0xa1,\n 0xb1,\n 0xc1,\n 0x09,\n 0x23,\n 0x33,\n 0x52,\n 0xf0,\n 0x15,\n 0x62,\n 0x72,\n 0xd1,\n 0x0a,\n 0x16,\n 0x24,\n 0x34,\n 0xe1,\n 0x25,\n 0xf1,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x82,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n function initQuantTables(sf) {\n var YQT = [\n 16,\n 11,\n 10,\n 16,\n 24,\n 40,\n 51,\n 61,\n 12,\n 12,\n 14,\n 19,\n 26,\n 58,\n 60,\n 55,\n 14,\n 13,\n 16,\n 24,\n 40,\n 57,\n 69,\n 56,\n 14,\n 17,\n 22,\n 29,\n 51,\n 87,\n 80,\n 62,\n 18,\n 22,\n 37,\n 56,\n 68,\n 109,\n 103,\n 77,\n 24,\n 35,\n 55,\n 64,\n 81,\n 104,\n 113,\n 92,\n 49,\n 64,\n 78,\n 87,\n 103,\n 121,\n 120,\n 101,\n 72,\n 92,\n 95,\n 98,\n 112,\n 100,\n 103,\n 99\n ];\n\n for (var i = 0; i < 64; i++) {\n var t = ffloor((YQT[i] * sf + 50) / 100);\n t = Math.min(Math.max(t, 1), 255);\n YTable[ZigZag[i]] = t;\n }\n var UVQT = [\n 17,\n 18,\n 24,\n 47,\n 99,\n 99,\n 99,\n 99,\n 18,\n 21,\n 26,\n 66,\n 99,\n 99,\n 99,\n 99,\n 24,\n 26,\n 56,\n 99,\n 99,\n 99,\n 99,\n 99,\n 47,\n 66,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99\n ];\n for (var j = 0; j < 64; j++) {\n var u = ffloor((UVQT[j] * sf + 50) / 100);\n u = Math.min(Math.max(u, 1), 255);\n UVTable[ZigZag[j]] = u;\n }\n var aasf = [\n 1.0,\n 1.387039845,\n 1.306562965,\n 1.175875602,\n 1.0,\n 0.785694958,\n 0.5411961,\n 0.275899379\n ];\n var k = 0;\n for (var row = 0; row < 8; row++) {\n for (var col = 0; col < 8; col++) {\n fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n k++;\n }\n }\n }\n\n function computeHuffmanTbl(nrcodes, std_table) {\n var codevalue = 0;\n var pos_in_table = 0;\n var HT = new Array();\n for (var k = 1; k <= 16; k++) {\n for (var j = 1; j <= nrcodes[k]; j++) {\n HT[std_table[pos_in_table]] = [];\n HT[std_table[pos_in_table]][0] = codevalue;\n HT[std_table[pos_in_table]][1] = k;\n pos_in_table++;\n codevalue++;\n }\n codevalue *= 2;\n }\n return HT;\n }\n\n function initHuffmanTbl() {\n YDC_HT = computeHuffmanTbl(\n std_dc_luminance_nrcodes,\n std_dc_luminance_values\n );\n UVDC_HT = computeHuffmanTbl(\n std_dc_chrominance_nrcodes,\n std_dc_chrominance_values\n );\n YAC_HT = computeHuffmanTbl(\n std_ac_luminance_nrcodes,\n std_ac_luminance_values\n );\n UVAC_HT = computeHuffmanTbl(\n std_ac_chrominance_nrcodes,\n std_ac_chrominance_values\n );\n }\n\n function initCategoryNumber() {\n var nrlower = 1;\n var nrupper = 2;\n for (var cat = 1; cat <= 15; cat++) {\n //Positive numbers\n for (var nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitcode[32767 + nr] = [];\n bitcode[32767 + nr][1] = cat;\n bitcode[32767 + nr][0] = nr;\n }\n //Negative numbers\n for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitcode[32767 + nrneg] = [];\n bitcode[32767 + nrneg][1] = cat;\n bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n function initRGBYUVTable() {\n for (var i = 0; i < 256; i++) {\n RGB_YUV_TABLE[i] = 19595 * i;\n RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n }\n }\n\n // IO functions\n function writeBits(bs) {\n var value = bs[0];\n var posval = bs[1] - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) {\n bytenew |= 1 << bytepos;\n }\n posval--;\n bytepos--;\n if (bytepos < 0) {\n if (bytenew == 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(bytenew);\n }\n bytepos = 7;\n bytenew = 0;\n }\n }\n }\n\n function writeByte(value) {\n //byteout.push(clt[value]); // write char directly instead of converting later\n byteout.push(value);\n }\n\n function writeWord(value) {\n writeByte((value >> 8) & 0xff);\n writeByte(value & 0xff);\n }\n\n // DCT & quantization core\n function fDCTQuant(data, fdtbl) {\n var d0, d1, d2, d3, d4, d5, d6, d7;\n /* Pass 1: process rows. */\n var dataOff = 0;\n var i;\n var I8 = 8;\n var I64 = 64;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 1];\n d2 = data[dataOff + 2];\n d3 = data[dataOff + 3];\n d4 = data[dataOff + 4];\n d5 = data[dataOff + 5];\n d6 = data[dataOff + 6];\n d7 = data[dataOff + 7];\n\n var tmp0 = d0 + d7;\n var tmp7 = d0 - d7;\n var tmp1 = d1 + d6;\n var tmp6 = d1 - d6;\n var tmp2 = d2 + d5;\n var tmp5 = d2 - d5;\n var tmp3 = d3 + d4;\n var tmp4 = d3 - d4;\n\n /* Even part */\n var tmp10 = tmp0 + tmp3; /* phase 2 */\n var tmp13 = tmp0 - tmp3;\n var tmp11 = tmp1 + tmp2;\n var tmp12 = tmp1 - tmp2;\n\n data[dataOff] = tmp10 + tmp11; /* phase 3 */\n data[dataOff + 4] = tmp10 - tmp11;\n\n var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n data[dataOff + 6] = tmp13 - z1;\n\n /* Odd part */\n tmp10 = tmp4 + tmp5; /* phase 2 */\n tmp11 = tmp5 + tmp6;\n tmp12 = tmp6 + tmp7;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n var z3 = tmp11 * 0.707106781; /* c4 */\n\n var z11 = tmp7 + z3; /* phase 5 */\n var z13 = tmp7 - z3;\n\n data[dataOff + 5] = z13 + z2; /* phase 6 */\n data[dataOff + 3] = z13 - z2;\n data[dataOff + 1] = z11 + z4;\n data[dataOff + 7] = z11 - z4;\n\n dataOff += 8; /* advance pointer to next row */\n }\n\n /* Pass 2: process columns. */\n dataOff = 0;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 8];\n d2 = data[dataOff + 16];\n d3 = data[dataOff + 24];\n d4 = data[dataOff + 32];\n d5 = data[dataOff + 40];\n d6 = data[dataOff + 48];\n d7 = data[dataOff + 56];\n\n var tmp0p2 = d0 + d7;\n var tmp7p2 = d0 - d7;\n var tmp1p2 = d1 + d6;\n var tmp6p2 = d1 - d6;\n var tmp2p2 = d2 + d5;\n var tmp5p2 = d2 - d5;\n var tmp3p2 = d3 + d4;\n var tmp4p2 = d3 - d4;\n\n /* Even part */\n var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n var tmp13p2 = tmp0p2 - tmp3p2;\n var tmp11p2 = tmp1p2 + tmp2p2;\n var tmp12p2 = tmp1p2 - tmp2p2;\n\n data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n data[dataOff + 48] = tmp13p2 - z1p2;\n\n /* Odd part */\n tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n tmp11p2 = tmp5p2 + tmp6p2;\n tmp12p2 = tmp6p2 + tmp7p2;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n var z13p2 = tmp7p2 - z3p2;\n\n data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n data[dataOff + 24] = z13p2 - z2p2;\n data[dataOff + 8] = z11p2 + z4p2;\n data[dataOff + 56] = z11p2 - z4p2;\n\n dataOff++; /* advance pointer to next column */\n }\n\n // Quantize/descale the coefficients\n var fDCTQuant;\n for (i = 0; i < I64; ++i) {\n // Apply the quantization and scaling factor & Round to nearest integer\n fDCTQuant = data[i] * fdtbl[i];\n outputfDCTQuant[i] =\n fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n //outputfDCTQuant[i] = fround(fDCTQuant);\n }\n return outputfDCTQuant;\n }\n\n function writeAPP0() {\n writeWord(0xffe0); // marker\n writeWord(16); // length\n writeByte(0x4a); // J\n writeByte(0x46); // F\n writeByte(0x49); // I\n writeByte(0x46); // F\n writeByte(0); // = \"JFIF\",'\\0'\n writeByte(1); // versionhi\n writeByte(1); // versionlo\n writeByte(0); // xyunits\n writeWord(1); // xdensity\n writeWord(1); // ydensity\n writeByte(0); // thumbnwidth\n writeByte(0); // thumbnheight\n }\n\n function writeSOF0(width, height) {\n writeWord(0xffc0); // marker\n writeWord(17); // length, truecolor YUV JPG\n writeByte(8); // precision\n writeWord(height);\n writeWord(width);\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0x11); // HVY\n writeByte(0); // QTY\n writeByte(2); // IdU\n writeByte(0x11); // HVU\n writeByte(1); // QTU\n writeByte(3); // IdV\n writeByte(0x11); // HVV\n writeByte(1); // QTV\n }\n\n function writeDQT() {\n writeWord(0xffdb); // marker\n writeWord(132); // length\n writeByte(0);\n for (var i = 0; i < 64; i++) {\n writeByte(YTable[i]);\n }\n writeByte(1);\n for (var j = 0; j < 64; j++) {\n writeByte(UVTable[j]);\n }\n }\n\n function writeDHT() {\n writeWord(0xffc4); // marker\n writeWord(0x01a2); // length\n\n writeByte(0); // HTYDCinfo\n for (var i = 0; i < 16; i++) {\n writeByte(std_dc_luminance_nrcodes[i + 1]);\n }\n for (var j = 0; j <= 11; j++) {\n writeByte(std_dc_luminance_values[j]);\n }\n\n writeByte(0x10); // HTYACinfo\n for (var k = 0; k < 16; k++) {\n writeByte(std_ac_luminance_nrcodes[k + 1]);\n }\n for (var l = 0; l <= 161; l++) {\n writeByte(std_ac_luminance_values[l]);\n }\n\n writeByte(1); // HTUDCinfo\n for (var m = 0; m < 16; m++) {\n writeByte(std_dc_chrominance_nrcodes[m + 1]);\n }\n for (var n = 0; n <= 11; n++) {\n writeByte(std_dc_chrominance_values[n]);\n }\n\n writeByte(0x11); // HTUACinfo\n for (var o = 0; o < 16; o++) {\n writeByte(std_ac_chrominance_nrcodes[o + 1]);\n }\n for (var p = 0; p <= 161; p++) {\n writeByte(std_ac_chrominance_values[p]);\n }\n }\n\n function writeSOS() {\n writeWord(0xffda); // marker\n writeWord(12); // length\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0); // HTY\n writeByte(2); // IdU\n writeByte(0x11); // HTU\n writeByte(3); // IdV\n writeByte(0x11); // HTV\n writeByte(0); // Ss\n writeByte(0x3f); // Se\n writeByte(0); // Bf\n }\n\n function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n var EOB = HTAC[0x00];\n var M16zeroes = HTAC[0xf0];\n var pos;\n var I16 = 16;\n var I63 = 63;\n var I64 = 64;\n var DU_DCT = fDCTQuant(CDU, fdtbl);\n //ZigZag reorder\n for (var j = 0; j < I64; ++j) {\n DU[ZigZag[j]] = DU_DCT[j];\n }\n var Diff = DU[0] - DC;\n DC = DU[0];\n //Encode DC\n if (Diff == 0) {\n writeBits(HTDC[0]); // Diff might be 0\n } else {\n pos = 32767 + Diff;\n writeBits(HTDC[category[pos]]);\n writeBits(bitcode[pos]);\n }\n //Encode ACs\n var end0pos = 63; // was const... which is crazy\n while (end0pos > 0 && DU[end0pos] == 0) {\n end0pos--;\n }\n //end0pos = first element in reverse order !=0\n if (end0pos == 0) {\n writeBits(EOB);\n return DC;\n }\n var i = 1;\n var lng;\n while (i <= end0pos) {\n var startpos = i;\n while (DU[i] == 0 && i <= end0pos) {\n ++i;\n }\n var nrzeroes = i - startpos;\n if (nrzeroes >= I16) {\n lng = nrzeroes >> 4;\n for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n writeBits(M16zeroes);\n nrzeroes = nrzeroes & 0xf;\n }\n pos = 32767 + DU[i];\n writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n writeBits(bitcode[pos]);\n i++;\n }\n if (end0pos != I63) {\n writeBits(EOB);\n }\n return DC;\n }\n\n function initCharLookupTable() {\n var sfcc = String.fromCharCode;\n for (var i = 0; i < 256; i++) {\n ///// ACHTUNG // 255\n clt[i] = sfcc(i);\n }\n }\n\n this.encode = function(\n image,\n quality // image data object\n ) {\n if (quality) setQuality(quality);\n\n // Initialize bit writer\n byteout = new Array();\n bytenew = 0;\n bytepos = 7;\n\n // Add JPEG headers\n writeWord(0xffd8); // SOI\n writeAPP0();\n writeDQT();\n writeSOF0(image.width, image.height);\n writeDHT();\n writeSOS();\n\n // Encode 8x8 macroblocks\n var DCY = 0;\n var DCU = 0;\n var DCV = 0;\n\n bytenew = 0;\n bytepos = 7;\n\n this.encode.displayName = \"_encode_\";\n\n var imageData = image.data;\n var width = image.width;\n var height = image.height;\n\n var quadWidth = width * 4;\n\n var x,\n y = 0;\n var r, g, b;\n var start, p, col, row, pos;\n while (y < height) {\n x = 0;\n while (x < quadWidth) {\n start = quadWidth * y + x;\n col = -1;\n row = 0;\n\n for (pos = 0; pos < 64; pos++) {\n row = pos >> 3; // /8\n col = (pos & 7) * 4; // %8\n p = start + row * quadWidth + col;\n\n if (y + row >= height) {\n // padding bottom\n p -= quadWidth * (y + 1 + row - height);\n }\n\n if (x + col >= quadWidth) {\n // padding right\n p -= x + col - quadWidth + 4;\n }\n\n r = imageData[p++];\n g = imageData[p++];\n b = imageData[p++];\n\n /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n // use lookup table (slightly faster)\n YDU[pos] =\n ((RGB_YUV_TABLE[r] +\n RGB_YUV_TABLE[(g + 256) >> 0] +\n RGB_YUV_TABLE[(b + 512) >> 0]) >>\n 16) -\n 128;\n UDU[pos] =\n ((RGB_YUV_TABLE[(r + 768) >> 0] +\n RGB_YUV_TABLE[(g + 1024) >> 0] +\n RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n 16) -\n 128;\n VDU[pos] =\n ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n RGB_YUV_TABLE[(g + 1536) >> 0] +\n RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n 16) -\n 128;\n }\n\n DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n x += 32;\n }\n y += 8;\n }\n\n ////////////////////////////////////////////////////////////////\n\n // Do the bit alignment of the EOI marker\n if (bytepos >= 0) {\n var fillbits = [];\n fillbits[1] = bytepos + 1;\n fillbits[0] = (1 << (bytepos + 1)) - 1;\n writeBits(fillbits);\n }\n\n writeWord(0xffd9); //EOI\n\n return new Uint8Array(byteout);\n };\n\n function setQuality(quality) {\n quality = Math.min(Math.max(quality, 1), 100);\n\n if (currentQuality == quality) return; // don't recalc if unchanged\n\n var sf =\n quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n initQuantTables(sf);\n currentQuality = quality;\n //console.log('Quality set to: '+quality +'%');\n }\n\n function init() {\n quality = quality || 50;\n // Create tables\n initCharLookupTable();\n initHuffmanTbl();\n initCategoryNumber();\n initRGBYUVTable();\n\n setQuality(quality);\n }\n init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n var reader = new GifReader(imageData);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = [];\n\n reader.decodeAndBlitFrameRGBA(0, pixels);\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n\n jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n this.pos = 0;\n this.buffer = buffer;\n this.datav = new DataView(buffer.buffer);\n this.is_with_alpha = !!is_with_alpha;\n this.bottom_up = true;\n this.flag =\n String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n this.pos += 2;\n if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n throw new Error(\"Invalid BMP File\");\n this.parseHeader();\n this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n this.fileSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.reserved = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.offset = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.headerSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.width = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.height = this.datav.getInt32(this.pos, true);\n this.pos += 4;\n this.planes = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.bitPP = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.compress = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.rawSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.hr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.vr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.colors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.importantColors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n\n if (this.bitPP === 16 && this.is_with_alpha) {\n this.bitPP = 15;\n }\n if (this.bitPP < 15) {\n var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n this.palette = new Array(len);\n for (var i = 0; i < len; i++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var quad = this.datav.getUint8(this.pos++, true);\n this.palette[i] = {\n red: red,\n green: green,\n blue: blue,\n quad: quad\n };\n }\n }\n if (this.height < 0) {\n this.height *= -1;\n this.bottom_up = false;\n }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n this.pos = this.offset;\n try {\n var bitn = \"bit\" + this.bitPP;\n var len = this.width * this.height * 4;\n this.data = new Uint8Array(len);\n\n this[bitn]();\n } catch (e) {\n console.log(\"bit decode error:\" + e);\n }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n var xlen = Math.ceil(this.width / 8);\n var mode = xlen % 4;\n var y;\n for (y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 8 * 4;\n for (var i = 0; i < 8; i++) {\n if (x * 8 + i < this.width) {\n var rgb = this.palette[(b >> (7 - i)) & 0x1];\n this.data[location + i * 4] = rgb.blue;\n this.data[location + i * 4 + 1] = rgb.green;\n this.data[location + i * 4 + 2] = rgb.red;\n this.data[location + i * 4 + 3] = 0xff;\n } else {\n break;\n }\n }\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n var xlen = Math.ceil(this.width / 2);\n var mode = xlen % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 2 * 4;\n\n var before = b >> 4;\n var after = b & 0x0f;\n\n var rgb = this.palette[before];\n this.data[location] = rgb.blue;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.red;\n this.data[location + 3] = 0xff;\n\n if (x * 2 + 1 >= this.width) break;\n\n rgb = this.palette[after];\n this.data[location + 4] = rgb.blue;\n this.data[location + 4 + 1] = rgb.green;\n this.data[location + 4 + 2] = rgb.red;\n this.data[location + 4 + 3] = 0xff;\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n var mode = this.width % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n if (b < this.palette.length) {\n var rgb = this.palette[b];\n this.data[location] = rgb.red;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.blue;\n this.data[location + 3] = 0xff;\n } else {\n this.data[location] = 0xff;\n this.data[location + 1] = 0xff;\n this.data[location + 2] = 0xff;\n this.data[location + 3] = 0xff;\n }\n }\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n var alpha = B >> 15 ? 0xff : 0x00;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n var _111111 = parseInt(\"111111\", 2),\n _1_6 = _111111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var alpha = 0xff;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n var red = (((B >> 11) / _1_5) * 255) | 0;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = 0xff;\n }\n //skip extra bytes\n this.pos += this.width % 4;\n }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var alpha = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n //this.pos += (this.width % 4);\n }\n};\n\nBmpDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { BmpDecoder };\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n var reader = new BmpDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","function WebPDecoder(imageData) {\n /** @license\n * Copyright 2011 Google Inc.\n *\n * This code is licensed under the same terms as WebM:\n * Software License Agreement: http://www.webmproject.org/license/software/\n * Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n * -----------------------------------------------------------------------------\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -----------------------------------------------------------------------------\n *\n * Copyright 2011-2017 Dominik Homberger\n * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n *\n * Author: Dominik Homberger (dominik.homberger@gmail.com)\n */\n\n var self = this;\n var UpsampleRgbLinePair,\n UpsampleBgrLinePair,\n UpsampleRgbaLinePair,\n UpsampleBgraLinePair,\n UpsampleArgbLinePair,\n UpsampleArgbLinePair,\n UpsampleRgba4444LinePair,\n UpsampleRgb565LinePair;\n\n function x(F) {\n if (!F) throw Error(\"assert :P\");\n }\n function fa(F, L, J) {\n for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n return !1;\n }\n function I(F, L, J, H, Z) {\n for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n }\n function M(F, L, J, H) {\n for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n }\n function V(F) {\n return new Int32Array(F);\n }\n function wa(F, L) {\n for (var J = [], H = 0; H < F; H++) J.push(new L());\n return J;\n }\n function wb() {\n function F(J, H, Z) {\n for (var O = Z[H], L = 0; L < O; L++) {\n J.push(Z.length > H + 1 ? [] : 0);\n if (Z.length < H + 1) break;\n F(J[L], H + 1, Z);\n }\n }\n var L = [];\n F(L, 0, [3, 11]);\n return L;\n }\n function Ed(F, L) {\n function J(H, O, F) {\n for (var Z = F[O], ma = 0; ma < Z; ma++) {\n H.push(F.length > O + 1 ? [] : new L());\n if (F.length < O + 1) break;\n J(H[ma], O + 1, F);\n }\n }\n var H = [];\n J(H, 0, F);\n return H;\n }\n var _WebPDecoder = function() {\n var self = this;\n function F() {\n V(55);\n }\n function L(a, b) {\n for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n return c ? (a & (c - 1)) + c : a;\n }\n function J(a, b, c, d, e) {\n x(!(d % c));\n do (d -= c), (a[b + d] = e);\n while (0 < d);\n }\n function H(a, b, c, d, e, f) {\n var g = b,\n h = 1 << c,\n k,\n l,\n m = V(16),\n n = V(16);\n x(0 != e);\n x(null != d);\n x(null != a);\n x(0 < c);\n for (l = 0; l < e; ++l) {\n if (15 < d[l]) return 0;\n ++m[d[l]];\n }\n if (m[0] == e) return 0;\n n[1] = 0;\n for (k = 1; 15 > k; ++k) {\n if (m[k] > 1 << k) return 0;\n n[k + 1] = n[k] + m[k];\n }\n for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n if (1 == n[15])\n return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n var r = -1,\n q = h - 1,\n t = 0,\n v = 1,\n p = 1,\n u,\n w = 1 << c;\n l = 0;\n k = 1;\n for (e = 2; k <= c; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k])\n (d = new O()),\n (d.g = k),\n (d.value = f[l++]),\n J(a, g + t, e, w, d),\n (t = L(t, k));\n }\n k = c + 1;\n for (e = 2; 15 >= k; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k]) {\n d = new O();\n if ((t & q) != r) {\n g += w;\n r = k;\n for (u = 1 << (r - c); 15 > r; ) {\n u -= m[r];\n if (0 >= u) break;\n ++r;\n u <<= 1;\n }\n u = r - c;\n w = 1 << u;\n h += w;\n r = t & q;\n a[b + r].g = u + c;\n a[b + r].value = g - b - r;\n }\n d.g = k - c;\n d.value = f[l++];\n J(a, g + (t >> c), e, w, d);\n t = L(t, k);\n }\n }\n return v != 2 * n[15] - 1 ? 0 : h;\n }\n function Z(a, b, c, d, e) {\n x(2328 >= e);\n if (512 >= e) var f = V(512);\n else if (((f = V(e)), null == f)) return 0;\n return H(a, b, c, d, e, f);\n }\n function O() {\n this.value = this.g = 0;\n }\n function Fd() {\n this.value = this.g = 0;\n }\n function Ub() {\n this.G = wa(5, O);\n this.H = V(5);\n this.jc = this.Qb = this.qb = this.nd = 0;\n this.pd = wa(xb, Fd);\n }\n function ma(a, b, c, d) {\n x(null != a);\n x(null != b);\n x(2147483648 > d);\n a.Ca = 254;\n a.I = 0;\n a.b = -8;\n a.Ka = 0;\n a.oa = b;\n a.pa = c;\n a.Jd = b;\n a.Yc = c + d;\n a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n Qa(a);\n }\n function na(a, b) {\n for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n return c;\n }\n function ca(a, b) {\n var c = na(a, b);\n return G(a) ? -c : c;\n }\n function cb(a, b, c, d) {\n var e,\n f = 0;\n x(null != a);\n x(null != b);\n x(4294967288 > d);\n a.Sb = d;\n a.Ra = 0;\n a.u = 0;\n a.h = 0;\n 4 < d && (d = 4);\n for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n a.Ra = f;\n a.bb = d;\n a.oa = b;\n a.pa = c;\n }\n function Vb(a) {\n for (; 8 <= a.u && a.bb < a.Sb; )\n (a.Ra >>>= 8),\n (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n ++a.bb,\n (a.u -= 8);\n db(a) && ((a.h = 1), (a.u = 0));\n }\n function D(a, b) {\n x(0 <= b);\n if (!a.h && b <= Gd) {\n var c = pb(a) & Hd[b];\n a.u += b;\n Vb(a);\n return c;\n }\n a.h = 1;\n return (a.u = 0);\n }\n function Wb() {\n this.b = this.Ca = this.I = 0;\n this.oa = [];\n this.pa = 0;\n this.Jd = [];\n this.Yc = 0;\n this.Zc = [];\n this.Ka = 0;\n }\n function Ra() {\n this.Ra = 0;\n this.oa = [];\n this.h = this.u = this.bb = this.Sb = this.pa = 0;\n }\n function pb(a) {\n return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n }\n function db(a) {\n x(a.bb <= a.Sb);\n return a.h || (a.bb == a.Sb && a.u > ob);\n }\n function qb(a, b) {\n a.u = b;\n a.h = db(a);\n }\n function Sa(a) {\n a.u >= Xb && (x(a.u >= Xb), Vb(a));\n }\n function Qa(a) {\n x(null != a && null != a.oa);\n a.pa < a.Zc\n ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n : (x(null != a && null != a.oa),\n a.pa < a.Yc\n ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n : a.Ka\n ? (a.b = 0)\n : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n }\n function G(a) {\n return na(a, 1);\n }\n function K(a, b) {\n var c = a.Ca;\n 0 > a.b && Qa(a);\n var d = a.b,\n e = (c * b) >>> 8,\n f = (a.I >>> d > e) + 0;\n f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n d = c;\n for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n d = 7 ^ (e + Id[d]);\n a.b -= d;\n a.Ca = (c << d) - 1;\n return f;\n }\n function ra(a, b, c) {\n a[b + 0] = (c >> 24) & 255;\n a[b + 1] = (c >> 16) & 255;\n a[b + 2] = (c >> 8) & 255;\n a[b + 3] = (c >> 0) & 255;\n }\n function Ta(a, b) {\n return (a[b + 0] << 0) | (a[b + 1] << 8);\n }\n function Yb(a, b) {\n return Ta(a, b) | (a[b + 2] << 16);\n }\n function Ha(a, b) {\n return Ta(a, b) | (Ta(a, b + 2) << 16);\n }\n function Zb(a, b) {\n var c = 1 << b;\n x(null != a);\n x(0 < b);\n a.X = V(c);\n if (null == a.X) return 0;\n a.Mb = 32 - b;\n a.Xa = b;\n return 1;\n }\n function $b(a, b) {\n x(null != a);\n x(null != b);\n x(a.Xa == b.Xa);\n I(b.X, 0, a.X, 0, 1 << b.Xa);\n }\n function ac() {\n this.X = [];\n this.Xa = this.Mb = 0;\n }\n function bc(a, b, c, d) {\n x(null != c);\n x(null != d);\n var e = c[0],\n f = d[0];\n 0 == e && (e = (a * f + b / 2) / b);\n 0 == f && (f = (b * e + a / 2) / a);\n if (0 >= e || 0 >= f) return 0;\n c[0] = e;\n d[0] = f;\n return 1;\n }\n function xa(a, b) {\n return (a + (1 << b) - 1) >>> b;\n }\n function yb(a, b) {\n return (\n (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n 0\n );\n }\n function X(a, b) {\n self[b] = function(b, d, e, f, g, h, k) {\n var c;\n for (c = 0; c < g; ++c) {\n var m = self[a](h[k + c - 1], e, f + c);\n h[k + c] = yb(b[d + c], m);\n }\n };\n }\n function Jd() {\n this.ud = this.hd = this.jd = 0;\n }\n function aa(a, b) {\n return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n }\n function sa(a) {\n if (0 <= a && 256 > a) return a;\n if (0 > a) return 0;\n if (255 < a) return 255;\n }\n function eb(a, b) {\n return sa(a + ((a - b + 0.5) >> 1));\n }\n function Ia(a, b, c) {\n return Math.abs(b - c) - Math.abs(a - c);\n }\n function cc(a, b, c, d, e, f, g) {\n d = f[g - 1];\n for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n }\n function Kd(a, b, c, d, e) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + f],\n h = (g >> 8) & 255,\n k = g & 16711935,\n k = k + ((h << 16) + h),\n k = k & 16711935;\n d[e + f] = ((g & 4278255360) + k) >>> 0;\n }\n }\n function dc(a, b) {\n b.jd = (a >> 0) & 255;\n b.hd = (a >> 8) & 255;\n b.ud = (a >> 16) & 255;\n }\n function Ld(a, b, c, d, e, f) {\n var g;\n for (g = 0; g < d; ++g) {\n var h = b[c + g],\n k = h >>> 8,\n l = h >>> 16,\n m = h,\n l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n l = l & 255,\n m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n m = m & 255;\n e[f + g] = (h & 4278255360) + (l << 16) + m;\n }\n }\n function ec(a, b, c, d, e) {\n self[b] = function(a, b, c, k, l, m, n, r, q) {\n for (k = n; k < r; ++k)\n for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n };\n self[a] = function(a, b, h, k, l, m, n) {\n var f = 8 >> a.b,\n g = a.Ea,\n t = a.K[0],\n v = a.w;\n if (8 > f)\n for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n var p = 0,\n u;\n for (u = 0; u < g; ++u)\n u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n }\n else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n };\n }\n function Md(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n }\n }\n function Nd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 24) & 255;\n }\n }\n function Od(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 240) | ((f >> 12) & 15),\n f = ((f >> 0) & 240) | ((f >> 28) & 15);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Pd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 248) | ((f >> 13) & 7),\n f = ((f >> 5) & 224) | ((f >> 3) & 31);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Qd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 16) & 255;\n }\n }\n function fb(a, b, c, d, e, f) {\n if (0 == f)\n for (c = b + c; b < c; )\n (f = a[b++]),\n ra(\n d,\n ((f[0] >> 24) |\n ((f[1] >> 8) & 65280) |\n ((f[2] << 8) & 16711680) |\n (f[3] << 24)) >>>\n 0\n ),\n (e += 32);\n else I(d, e, a, b, c);\n }\n function gb(a, b) {\n self[b][0] = self[a + \"0\"];\n self[b][1] = self[a + \"1\"];\n self[b][2] = self[a + \"2\"];\n self[b][3] = self[a + \"3\"];\n self[b][4] = self[a + \"4\"];\n self[b][5] = self[a + \"5\"];\n self[b][6] = self[a + \"6\"];\n self[b][7] = self[a + \"7\"];\n self[b][8] = self[a + \"8\"];\n self[b][9] = self[a + \"9\"];\n self[b][10] = self[a + \"10\"];\n self[b][11] = self[a + \"11\"];\n self[b][12] = self[a + \"12\"];\n self[b][13] = self[a + \"13\"];\n self[b][14] = self[a + \"0\"];\n self[b][15] = self[a + \"0\"];\n }\n function hb(a) {\n return a == zb || a == Ab || a == Ja || a == Bb;\n }\n function Rd() {\n this.eb = [];\n this.size = this.A = this.fb = 0;\n }\n function Sd() {\n this.y = [];\n this.f = [];\n this.ea = [];\n this.F = [];\n this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n }\n function Cb() {\n this.Rd = this.height = this.width = this.S = 0;\n this.f = {};\n this.f.RGBA = new Rd();\n this.f.kb = new Sd();\n this.sd = null;\n }\n function Td() {\n this.width = [0];\n this.height = [0];\n this.Pd = [0];\n this.Qd = [0];\n this.format = [0];\n }\n function Ud() {\n this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n }\n function Vd(a) {\n alert(\"todo:WebPSamplerProcessPlane\");\n return a.T;\n }\n function Wd(a, b) {\n var c = a.T,\n d = b.ba.f.RGBA,\n e = d.eb,\n f = d.fb + a.ka * d.A,\n g = P[b.ba.S],\n h = a.y,\n k = a.O,\n l = a.f,\n m = a.N,\n n = a.ea,\n r = a.W,\n q = b.cc,\n t = b.dc,\n v = b.Mc,\n p = b.Nc,\n u = a.ka,\n w = a.ka + a.T,\n y = a.U,\n A = (y + 1) >> 1;\n 0 == u\n ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n ++c);\n for (; u + 2 < w; u += 2)\n (q = l),\n (t = m),\n (v = n),\n (p = r),\n (m += a.Rc),\n (r += a.Rc),\n (f += 2 * d.A),\n (k += 2 * a.fa),\n g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n k += a.fa;\n a.j + w < a.o\n ? (I(b.ec, b.fc, h, k, y),\n I(b.cc, b.dc, l, m, A),\n I(b.Mc, b.Nc, n, r, A),\n c--)\n : w & 1 ||\n g(\n h,\n k,\n null,\n null,\n l,\n m,\n n,\n r,\n l,\n m,\n n,\n r,\n e,\n f + d.A,\n null,\n null,\n y\n );\n return c;\n }\n function Xd(a, b, c) {\n var d = a.F,\n e = [a.J];\n if (null != d) {\n var f = a.U,\n g = b.ba.S,\n h = g == ya || g == Ja;\n b = b.ba.f.RGBA;\n var k = [0],\n l = a.ka;\n k[0] = a.T;\n a.Kb &&\n (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n var m = b.eb,\n l = b.fb + l * b.A;\n a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n x(c == k);\n a && hb(g) && za(m, l, h, f, k, b.A);\n }\n return 0;\n }\n function gc(a) {\n var b = a.ma,\n c = b.ba.S,\n d = 11 > c,\n e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n b.memory = null;\n b.Ib = null;\n b.Jb = null;\n b.Nd = null;\n if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n e && hb(c) && ic();\n if (a.da) alert(\"todo:use_scaling\");\n else {\n if (d) {\n if (((b.Ib = Vd), a.Kb)) {\n c = (a.U + 1) >> 1;\n b.memory = V(a.U + 2 * c);\n if (null == b.memory) return 0;\n b.ec = b.memory;\n b.fc = 0;\n b.cc = b.ec;\n b.dc = b.fc + a.U;\n b.Mc = b.cc;\n b.Nc = b.dc + c;\n b.Ib = Wd;\n ic();\n }\n } else alert(\"todo:EmitYUV\");\n e && ((b.Jb = Xd), d && Aa());\n }\n if (d && !jc) {\n for (a = 0; 256 > a; ++a)\n (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n (Zd[a] = -22014 * (a - 128) + Ba),\n ($d[a] = -45773 * (a - 128)),\n (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n for (a = ta; a < Eb; ++a)\n (b = (76283 * (a - 16) + Ba) >> Wa),\n (be[a - ta] = ga(b, 255)),\n (ce[a - ta] = ga((b + 8) >> 4, 15));\n jc = 1;\n }\n return 1;\n }\n function kc(a) {\n var b = a.ma,\n c = a.U,\n d = a.T;\n x(!(a.ka & 1));\n if (0 >= c || 0 >= d) return 0;\n c = b.Ib(a, b);\n null != b.Jb && b.Jb(a, b, c);\n b.Dc += c;\n return 1;\n }\n function lc(a) {\n a.ma.memory = null;\n }\n function mc(a, b, c, d) {\n if (47 != D(a, 8)) return 0;\n b[0] = D(a, 14) + 1;\n c[0] = D(a, 14) + 1;\n d[0] = D(a, 1);\n return 0 != D(a, 3) ? 0 : !a.h;\n }\n function ib(a, b) {\n if (4 > a) return a + 1;\n var c = (a - 2) >> 1;\n return ((2 + (a & 1)) << c) + D(b, c) + 1;\n }\n function nc(a, b) {\n if (120 < b) return b - 120;\n var c = de[b - 1],\n c = (c >> 4) * a + (8 - (c & 15));\n return 1 <= c ? c : 1;\n }\n function ua(a, b, c) {\n var d = pb(c);\n b += d & 255;\n var e = a[b].g - 8;\n 0 < e &&\n (qb(c, c.u + 8),\n (d = pb(c)),\n (b += a[b].value),\n (b += d & ((1 << e) - 1)));\n qb(c, c.u + a[b].g);\n return a[b].value;\n }\n function ub(a, b, c) {\n c.g += a.g;\n c.value += (a.value << b) >>> 0;\n x(8 >= c.g);\n return a.g;\n }\n function ha(a, b, c) {\n var d = a.xc;\n b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n x(b < a.Wb);\n return a.Ya[b];\n }\n function oc(a, b, c, d) {\n var e = a.ab,\n f = a.c * b,\n g = a.C;\n b = g + b;\n var h = c,\n k = d;\n d = a.Ta;\n for (c = a.Ua; 0 < e--; ) {\n var l = a.gc[e],\n m = g,\n n = b,\n r = h,\n q = k,\n k = d,\n h = c,\n t = l.Ea;\n x(m < n);\n x(n <= l.nc);\n switch (l.hc) {\n case 2:\n pc(r, q, (n - m) * t, k, h);\n break;\n case 0:\n var v = l,\n p = m,\n u = n,\n w = k,\n y = h,\n A = v.Ea;\n 0 == p &&\n (ee(r, q, null, null, 1, w, y),\n cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n (q += A),\n (y += A),\n ++p);\n for (\n var E = 1 << v.b,\n B = E - 1,\n C = xa(A, v.b),\n N = v.K,\n v = v.w + (p >> v.b) * C;\n p < u;\n\n ) {\n var z = N,\n Q = v,\n S = 1;\n for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n var K = qc[(z[Q++] >> 8) & 15],\n D = (S & ~B) + E;\n D > A && (D = A);\n K(r, q + +S, w, y + S - A, D - S, w, y + S);\n S = D;\n }\n q += A;\n y += A;\n ++p;\n p & B || (v += C);\n }\n n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n break;\n case 1:\n t = r;\n u = q;\n r = l.Ea;\n q = 1 << l.b;\n w = q - 1;\n y = r & ~w;\n A = r - y;\n p = xa(r, l.b);\n E = l.K;\n for (l = l.w + (m >> l.b) * p; m < n; ) {\n B = E;\n C = l;\n N = new Jd();\n v = u + y;\n for (z = u + r; u < v; )\n dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n u < z &&\n (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n ++m;\n m & w || (l += p);\n }\n break;\n case 3:\n if (r == k && q == h && 0 < l.b) {\n y = (n - m) * xa(l.Ea, l.b);\n t = h + (n - m) * t - y;\n u = k;\n r = t;\n q = k;\n w = h;\n A = y;\n p = [];\n for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n rc(l, m, n, k, t, k, h);\n } else rc(l, m, n, r, q, k, h);\n }\n h = d;\n k = c;\n }\n k != c && I(d, c, h, k, f);\n }\n function ge(a, b) {\n var c = a.V,\n d = a.Ba + a.c * a.C,\n e = b - a.C;\n x(b <= a.l.o);\n x(16 >= e);\n if (0 < e) {\n var f = a.l,\n g = a.Ta,\n h = a.Ua,\n k = f.width;\n oc(a, e, c, d);\n h = [h];\n c = a.C;\n d = b;\n e = h;\n x(c < d);\n x(f.v < f.va);\n d > f.o && (d = f.o);\n if (c < f.j) {\n var l = f.j - c,\n c = f.j;\n e[0] += l * k;\n }\n c >= d\n ? (c = 0)\n : ((e[0] += 4 * f.v),\n (f.ka = c - f.j),\n (f.U = f.va - f.v),\n (f.T = d - c),\n (c = 1));\n if (c) {\n h = h[0];\n c = a.ca;\n if (11 > c.S) {\n for (\n var m = c.f.RGBA,\n d = c.S,\n e = f.U,\n f = f.T,\n l = m.eb,\n n = m.A,\n r = f,\n m = m.fb + a.Ma * m.A;\n 0 < r--;\n\n ) {\n var q = g,\n t = h,\n v = e,\n p = l,\n u = m;\n switch (d) {\n case Ca:\n sc(q, t, v, p, u);\n break;\n case Ua:\n Gb(q, t, v, p, u);\n break;\n case zb:\n Gb(q, t, v, p, u);\n za(p, u, 0, v, 1, 0);\n break;\n case tc:\n uc(q, t, v, p, u);\n break;\n case Va:\n fb(q, t, v, p, u, 1);\n break;\n case Ab:\n fb(q, t, v, p, u, 1);\n za(p, u, 0, v, 1, 0);\n break;\n case ya:\n fb(q, t, v, p, u, 0);\n break;\n case Ja:\n fb(q, t, v, p, u, 0);\n za(p, u, 1, v, 1, 0);\n break;\n case Db:\n Hb(q, t, v, p, u);\n break;\n case Bb:\n Hb(q, t, v, p, u);\n vc(p, u, v, 1, 0);\n break;\n case wc:\n xc(q, t, v, p, u);\n break;\n default:\n x(0);\n }\n h += k;\n m += n;\n }\n a.Ma += f;\n } else alert(\"todo:EmitRescaledRowsYUVA\");\n x(a.Ma <= c.height);\n }\n }\n a.C = b;\n x(a.C <= a.i);\n }\n function yc(a) {\n var b;\n if (0 < a.ua) return 0;\n for (b = 0; b < a.Wb; ++b) {\n var c = a.Ya[b].G,\n d = a.Ya[b].H;\n if (\n 0 < c[1][d[1] + 0].g ||\n 0 < c[2][d[2] + 0].g ||\n 0 < c[3][d[3] + 0].g\n )\n return 0;\n }\n return 1;\n }\n function zc(a, b, c, d, e, f) {\n if (0 != a.Z) {\n var g = a.qd,\n h = a.rd;\n for (x(null != ia[a.Z]); b < c; ++b)\n ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n a.qd = g;\n a.rd = h;\n }\n }\n function Ib(a, b) {\n var c = a.l.ma,\n d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n d = a.C < d ? d : a.C;\n x(b <= a.l.o);\n if (b > d) {\n var e = a.l.width,\n f = c.ca,\n g = c.tb + e * d,\n h = a.V,\n k = a.Ba + a.c * d,\n l = a.gc;\n x(1 == a.ab);\n x(3 == l[0].hc);\n he(l[0], d, b, h, k, f, g);\n zc(c, d, b, f, g, e);\n }\n a.C = a.Ma = b;\n }\n function Jb(a, b, c, d, e, f, g) {\n var h = a.$ / d,\n k = a.$ % d,\n l = a.m,\n m = a.s,\n n = c + a.$,\n r = n;\n e = c + d * e;\n var q = c + d * f,\n t = 280 + m.ua,\n v = a.Pb ? h : 16777216,\n p = 0 < m.ua ? m.Wa : null,\n u = m.wc,\n w = n < q ? ha(m, k, h) : null;\n x(a.C < f);\n x(q <= e);\n var y = !1;\n a: for (;;) {\n for (; y || n < q; ) {\n var A = 0;\n if (h >= v) {\n var v = a,\n E = n - c;\n x(v.Pb);\n v.wd = v.m;\n v.xd = E;\n 0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n v = h + ie;\n }\n k & u || (w = ha(m, k, h));\n x(null != w);\n w.Qb && ((b[n] = w.qb), (y = !0));\n if (!y)\n if ((Sa(l), w.jc)) {\n var A = l,\n E = b,\n B = n,\n C = w.pd[pb(A) & (xb - 1)];\n x(w.jc);\n 256 > C.g\n ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n 0 == A && (y = !0);\n } else A = ua(w.G[0], w.H[0], l);\n if (l.h) break;\n if (y || 256 > A) {\n if (!y)\n if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n else {\n Sa(l);\n y = ua(w.G[1], w.H[1], l);\n Sa(l);\n E = ua(w.G[2], w.H[2], l);\n B = ua(w.G[3], w.H[3], l);\n if (l.h) break;\n b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n }\n y = !1;\n ++n;\n ++k;\n if (\n k >= d &&\n ((k = 0),\n ++h,\n null != g && h <= f && !(h % 16) && g(a, h),\n null != p)\n )\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (280 > A) {\n A = ib(A - 256, l);\n E = ua(w.G[4], w.H[4], l);\n Sa(l);\n E = ib(E, l);\n E = nc(d, E);\n if (l.h) break;\n if (n - c < E || e - n < A) break a;\n else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n n += A;\n for (k += A; k >= d; )\n (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n x(n <= e);\n k & u && (w = ha(m, k, h));\n if (null != p)\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (A < t) {\n y = A - 280;\n for (x(null != p); r < n; )\n (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n A = n;\n E = p;\n x(!(y >>> E.Xa));\n b[A] = E.X[y];\n y = !0;\n } else break a;\n y || x(l.h == db(l));\n }\n if (a.Pb && l.h && n < e)\n x(a.m.h),\n (a.a = 5),\n (a.m = a.wd),\n (a.$ = a.xd),\n 0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n else if (l.h) break a;\n else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n return 1;\n }\n a.a = 3;\n return 0;\n }\n function Ac(a) {\n x(null != a);\n a.vc = null;\n a.yc = null;\n a.Ya = null;\n var b = a.Wa;\n null != b && (b.X = null);\n a.vb = null;\n x(null != a);\n }\n function Bc() {\n var a = new je();\n if (null == a) return null;\n a.a = 0;\n a.xb = Cc;\n gb(\"Predictor\", \"VP8LPredictors\");\n gb(\"Predictor\", \"VP8LPredictors_C\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n pc = Kd;\n Fb = Ld;\n sc = Md;\n Gb = Nd;\n Hb = Od;\n xc = Pd;\n uc = Qd;\n self.VP8LMapColor32b = ke;\n self.VP8LMapColor8b = le;\n return a;\n }\n function rb(a, b, c, d, e) {\n var f = 1,\n g = [a],\n h = [b],\n k = d.m,\n l = d.s,\n m = null,\n n = 0;\n a: for (;;) {\n if (c)\n for (; f && D(k, 1); ) {\n var r = g,\n q = h,\n t = d,\n v = 1,\n p = t.m,\n u = t.gc[t.ab],\n w = D(p, 2);\n if (t.Oc & (1 << w)) f = 0;\n else {\n t.Oc |= 1 << w;\n u.hc = w;\n u.Ea = r[0];\n u.nc = q[0];\n u.K = [null];\n ++t.ab;\n x(4 >= t.ab);\n switch (w) {\n case 0:\n case 1:\n u.b = D(p, 3) + 2;\n v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n u.K = u.K[0];\n break;\n case 3:\n var y = D(p, 8) + 1,\n A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n r[0] = xa(u.Ea, A);\n u.b = A;\n var v = rb(y, 1, 0, t, u.K),\n E;\n if ((E = v)) {\n var B,\n C = y,\n N = u,\n z = 1 << (8 >> N.b),\n Q = V(z);\n if (null == Q) E = 0;\n else {\n var S = N.K[0],\n K = N.w;\n Q[0] = N.K[0][0];\n for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n for (; B < 4 * z; ++B) Q[B] = 0;\n N.K[0] = null;\n N.K[0] = Q;\n E = 1;\n }\n }\n v = E;\n break;\n case 2:\n break;\n default:\n x(0);\n }\n f = v;\n }\n }\n g = g[0];\n h = h[0];\n if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n d.a = 3;\n break a;\n }\n var H;\n if ((H = f))\n b: {\n var F = d,\n G = g,\n L = h,\n J = n,\n T = c,\n Da,\n ba,\n X = F.m,\n R = F.s,\n P = [null],\n U,\n W = 1,\n aa = 0,\n na = me[J];\n c: for (;;) {\n if (T && D(X, 1)) {\n var ca = D(X, 3) + 2,\n ga = xa(G, ca),\n ka = xa(L, ca),\n qa = ga * ka;\n if (!rb(ga, ka, 0, F, P)) break c;\n P = P[0];\n R.xc = ca;\n for (Da = 0; Da < qa; ++Da) {\n var ia = (P[Da] >> 8) & 65535;\n P[Da] = ia;\n ia >= W && (W = ia + 1);\n }\n }\n if (X.h) break c;\n for (ba = 0; 5 > ba; ++ba) {\n var Y = Dc[ba];\n !ba && 0 < J && (Y += 1 << J);\n aa < Y && (aa = Y);\n }\n var ma = wa(W * na, O);\n var ua = W,\n va = wa(ua, Ub);\n if (null == va) var la = null;\n else x(65536 >= ua), (la = va);\n var ha = V(aa);\n if (null == la || null == ha || null == ma) {\n F.a = 1;\n break c;\n }\n var pa = ma;\n for (Da = U = 0; Da < W; ++Da) {\n var ja = la[Da],\n da = ja.G,\n ea = ja.H,\n Fa = 0,\n ra = 1,\n Ha = 0;\n for (ba = 0; 5 > ba; ++ba) {\n Y = Dc[ba];\n da[ba] = pa;\n ea[ba] = U;\n !ba && 0 < J && (Y += 1 << J);\n d: {\n var sa,\n za = Y,\n ta = F,\n oa = ha,\n db = pa,\n eb = U,\n Ia = 0,\n Ka = ta.m,\n fb = D(Ka, 1);\n M(oa, 0, 0, za);\n if (fb) {\n var gb = D(Ka, 1) + 1,\n hb = D(Ka, 1),\n Ja = D(Ka, 0 == hb ? 1 : 8);\n oa[Ja] = 1;\n 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n var ya = 1;\n } else {\n var Ua = V(19),\n Va = D(Ka, 4) + 4;\n if (19 < Va) {\n ta.a = 3;\n var Aa = 0;\n break d;\n }\n for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n var Ba = void 0,\n sb = void 0,\n Wa = ta,\n ib = Ua,\n Ca = za,\n Xa = oa,\n Oa = 0,\n La = Wa.m,\n Ya = 8,\n Za = wa(128, O);\n e: for (;;) {\n if (!Z(Za, 0, 7, ib, 19)) break e;\n if (D(La, 1)) {\n var kb = 2 + 2 * D(La, 3),\n Ba = 2 + D(La, kb);\n if (Ba > Ca) break e;\n } else Ba = Ca;\n for (sb = 0; sb < Ca && Ba--; ) {\n Sa(La);\n var $a = Za[0 + (pb(La) & 127)];\n qb(La, La.u + $a.g);\n var jb = $a.value;\n if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n else {\n var lb = 16 == jb,\n ab = jb - 16,\n mb = oe[ab],\n bb = D(La, pe[ab]) + mb;\n if (sb + bb > Ca) break e;\n else\n for (var nb = lb ? Ya : 0; 0 < bb--; )\n Xa[sb++] = nb;\n }\n }\n Oa = 1;\n break e;\n }\n Oa || (Wa.a = 3);\n ya = Oa;\n }\n (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n }\n if (0 == Aa) break c;\n ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n Fa += pa[U].g;\n U += Aa;\n if (3 >= ba) {\n var Pa = ha[0],\n tb;\n for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n Ha += Pa;\n }\n }\n ja.nd = ra;\n ja.Qb = 0;\n ra &&\n ((ja.qb =\n ((da[3][ea[3] + 0].value << 24) |\n (da[1][ea[1] + 0].value << 16) |\n da[2][ea[2] + 0].value) >>>\n 0),\n 0 == Fa &&\n 256 > da[0][ea[0] + 0].value &&\n ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n ja.jc = !ja.Qb && 6 > Ha;\n if (ja.jc) {\n var Ga,\n Ea = ja;\n for (Ga = 0; Ga < xb; ++Ga) {\n var Ma = Ga,\n Na = Ea.pd[Ma],\n vb = Ea.G[0][Ea.H[0] + Ma];\n 256 <= vb.value\n ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n : ((Na.g = 0),\n (Na.value = 0),\n (Ma >>= ub(vb, 8, Na)),\n (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n }\n }\n }\n R.vc = P;\n R.Wb = W;\n R.Ya = la;\n R.yc = ma;\n H = 1;\n break b;\n }\n H = 0;\n }\n f = H;\n if (!f) {\n d.a = 3;\n break a;\n }\n if (0 < n) {\n if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n d.a = 1;\n f = 0;\n break a;\n }\n } else l.ua = 0;\n var Qa = d,\n cb = g,\n ob = h,\n Ra = Qa.s,\n Ta = Ra.xc;\n Qa.c = cb;\n Qa.i = ob;\n Ra.md = xa(cb, Ta);\n Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n if (c) {\n d.xb = re;\n break a;\n }\n m = V(g * h);\n if (null == m) {\n d.a = 1;\n f = 0;\n break a;\n }\n f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n break a;\n }\n f\n ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n : Ac(l);\n return f;\n }\n function Ec(a, b) {\n var c = a.c * a.i,\n d = c + b + 16 * b;\n x(a.c <= b);\n a.V = V(d);\n if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n a.Ta = a.V;\n a.Ua = a.Ba + c + b;\n return 1;\n }\n function se(a, b) {\n var c = a.C,\n d = b - c,\n e = a.V,\n f = a.Ba + a.c * c;\n for (x(b <= a.l.o); 0 < d; ) {\n var g = 16 < d ? 16 : d,\n h = a.l.ma,\n k = a.l.width,\n l = k * g,\n m = h.ca,\n n = h.tb + k * c,\n r = a.Ta,\n q = a.Ua;\n oc(a, g, e, f);\n Fc(r, q, m, n, l);\n zc(h, c, c + g, m, n, k);\n d -= g;\n e += g * a.c;\n c += g;\n }\n x(c == b);\n a.C = a.Ma = b;\n }\n function te(a, b) {\n var c = [0],\n d = [0],\n e = [0];\n a: for (;;) {\n if (null == a) return 0;\n if (null == b) return (a.a = 2), 0;\n a.l = b;\n a.a = 0;\n cb(a.m, b.data, b.w, b.ha);\n if (!mc(a.m, c, d, e)) {\n a.a = 3;\n break a;\n }\n a.xb = Cc;\n b.width = c[0];\n b.height = d[0];\n if (!rb(c[0], d[0], 1, a, null)) break a;\n return 1;\n }\n x(0 != a.a);\n return 0;\n }\n function ue() {\n this.ub = this.yd = this.td = this.Rb = 0;\n }\n function ve() {\n this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n }\n function we() {\n this.Fb = this.Bb = this.Cb = 0;\n this.Zb = V(4);\n this.Lb = V(4);\n }\n function Gc() {\n this.Yb = wb();\n }\n function xe() {\n this.jb = V(3);\n this.Wc = Ed([4, 8], Gc);\n this.Xc = Ed([4, 17], Gc);\n }\n function ye() {\n this.Pc = this.wb = this.Tb = this.zd = 0;\n this.vd = new V(4);\n this.od = new V(4);\n }\n function Xa() {\n this.ld = this.La = this.dd = this.tc = 0;\n }\n function Hc() {\n this.Na = this.la = 0;\n }\n function ze() {\n this.Sc = [0, 0];\n this.Eb = [0, 0];\n this.Qc = [0, 0];\n this.ia = this.lc = 0;\n }\n function Kb() {\n this.ad = V(384);\n this.Za = 0;\n this.Ob = V(16);\n this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n }\n function Ae() {\n this.uc = this.M = this.Nb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.ya = Array(new Kb());\n this.aa = 0;\n this.l = new Oa();\n }\n function Ic() {\n this.y = V(16);\n this.f = V(8);\n this.ea = V(8);\n }\n function Be() {\n this.cb = this.a = 0;\n this.sc = \"\";\n this.m = new Wb();\n this.Od = new ue();\n this.Kc = new ve();\n this.ed = new ye();\n this.Qa = new we();\n this.Ic = this.$c = this.Aa = 0;\n this.D = new Ae();\n this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n this.Jc = wa(8, Wb);\n this.ia = 0;\n new F();\n this.pb = wa(4, ze);\n this.Pa = new xe();\n this.Bd = this.kc = 0;\n this.Ac = [];\n this.Bc = 0;\n this.zc = [0, 0, 0, 0];\n this.Gd = Array(new Ic());\n this.Hd = 0;\n this.rb = Array(new Hc());\n this.sb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.oc = [];\n this.pc = 0;\n this.sa = [];\n this.ta = 0;\n this.qa = [];\n this.ra = 0;\n this.Ha = [];\n this.B = this.R = this.Ia = 0;\n this.Ec = [];\n this.M = this.ja = this.Vb = this.Fc = 0;\n this.ya = Array(new Kb());\n this.L = this.aa = 0;\n this.gd = Ed([4, 2], Xa);\n this.ga = null;\n this.Fa = [];\n this.Cc = this.qc = this.P = 0;\n this.Gb = [];\n this.Uc = 0;\n this.mb = [];\n this.nb = 0;\n this.rc = [];\n this.Ga = this.Vc = 0;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function Oa() {\n this.T = this.U = this.ka = this.height = this.width = 0;\n this.y = [];\n this.f = [];\n this.ea = [];\n this.Rc = this.fa = this.W = this.N = this.O = 0;\n this.ma = \"void\";\n this.put = \"VP8IoPutHook\";\n this.ac = \"VP8IoSetupHook\";\n this.bc = \"VP8IoTeardownHook\";\n this.ha = this.Kb = 0;\n this.data = [];\n this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n this.F = [];\n this.J = 0;\n }\n function Ce() {\n var a = new Be();\n null != a &&\n ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n return a;\n }\n function T(a, b, c) {\n 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n return 0;\n }\n function Jc(a, b, c) {\n return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n }\n function Kc(a, b) {\n if (null == a) return 0;\n a.a = 0;\n a.sc = \"OK\";\n if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n var c = b.data;\n var d = b.w;\n var e = b.ha;\n if (4 > e) return T(a, 7, \"Truncated header.\");\n var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n var g = a.Od;\n g.Rb = !(f & 1);\n g.td = (f >> 1) & 7;\n g.yd = (f >> 4) & 1;\n g.ub = f >> 5;\n if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n d += 3;\n e -= 3;\n var h = a.Kc;\n if (g.Rb) {\n if (7 > e) return T(a, 7, \"cannot parse picture header\");\n if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n h.Td = c[d + 4] >> 6;\n h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n h.Ud = c[d + 6] >> 6;\n d += 7;\n e -= 7;\n a.za = (h.c + 15) >> 4;\n a.Ub = (h.i + 15) >> 4;\n b.width = h.c;\n b.height = h.i;\n b.Da = 0;\n b.j = 0;\n b.v = 0;\n b.va = b.width;\n b.o = b.height;\n b.da = 0;\n b.ib = b.width;\n b.hb = b.height;\n b.U = b.width;\n b.T = b.height;\n f = a.Pa;\n M(f.jb, 0, 255, f.jb.length);\n f = a.Qa;\n x(null != f);\n f.Cb = 0;\n f.Bb = 0;\n f.Fb = 1;\n M(f.Zb, 0, 0, f.Zb.length);\n M(f.Lb, 0, 0, f.Lb);\n }\n if (g.ub > e) return T(a, 7, \"bad partition length\");\n f = a.m;\n ma(f, c, d, g.ub);\n d += g.ub;\n e -= g.ub;\n g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n h = a.Qa;\n var k = a.Pa,\n l;\n x(null != f);\n x(null != h);\n h.Cb = G(f);\n if (h.Cb) {\n h.Bb = G(f);\n if (G(f)) {\n h.Fb = G(f);\n for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n }\n if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n } else h.Bb = 0;\n if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n h = a.ed;\n h.zd = G(f);\n h.Tb = na(f, 6);\n h.wb = na(f, 3);\n h.Pc = G(f);\n if (h.Pc && G(f)) {\n for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n }\n a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n l = d;\n var m = e;\n e = l;\n d = l + m;\n h = m;\n a.Xb = (1 << na(a.m, 2)) - 1;\n k = a.Xb;\n if (m < 3 * k) c = 7;\n else {\n l += 3 * k;\n h -= 3 * k;\n for (m = 0; m < k; ++m) {\n var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n n > h && (n = h);\n ma(a.Jc[+m], c, l, n);\n l += n;\n h -= n;\n e += 3;\n }\n ma(a.Jc[+k], c, l, h);\n c = l < d ? 0 : 5;\n }\n if (0 != c) return T(a, c, \"cannot parse partitions\");\n l = a.m;\n c = na(l, 7);\n e = G(l) ? ca(l, 4) : 0;\n d = G(l) ? ca(l, 4) : 0;\n h = G(l) ? ca(l, 4) : 0;\n k = G(l) ? ca(l, 4) : 0;\n l = G(l) ? ca(l, 4) : 0;\n m = a.Qa;\n for (n = 0; 4 > n; ++n) {\n if (m.Cb) {\n var r = m.Zb[n];\n m.Fb || (r += c);\n } else if (0 < n) {\n a.pb[n] = a.pb[0];\n continue;\n } else r = c;\n var q = a.pb[n];\n q.Sc[0] = Lb[ga(r + e, 127)];\n q.Sc[1] = Mb[ga(r + 0, 127)];\n q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n 8 > q.Eb[1] && (q.Eb[1] = 8);\n q.Qc[0] = Lb[ga(r + k, 117)];\n q.Qc[1] = Mb[ga(r + l, 127)];\n q.lc = r + l;\n }\n if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n G(f);\n g = a.Pa;\n for (c = 0; 4 > c; ++c) {\n for (e = 0; 8 > e; ++e)\n for (d = 0; 3 > d; ++d)\n for (h = 0; 11 > h; ++h)\n (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n (g.Wc[c][e].Yb[d][h] = k);\n for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n }\n a.kc = G(f);\n a.kc && (a.Bd = na(f, 8));\n return (a.cb = 1);\n }\n function De(a, b, c, d, e, f, g) {\n var h = b[e].Yb[c];\n for (c = 0; 16 > e; ++e) {\n if (!K(a, h[c + 0])) return e;\n for (; !K(a, h[c + 1]); )\n if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n var k = b[e + 1].Yb;\n if (K(a, h[c + 2])) {\n var l = a,\n m = h,\n n = c;\n var r = 0;\n if (K(l, m[n + 3]))\n if (K(l, m[n + 6])) {\n h = 0;\n r = K(l, m[n + 8]);\n m = K(l, m[n + 9 + r]);\n n = 2 * r + m;\n r = 0;\n for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n r += 3 + (8 << n);\n } else\n K(l, m[n + 7])\n ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n : (r = 5 + K(l, 159));\n else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n h = k[2];\n } else (r = 1), (h = k[1]);\n k = g + Ie[e];\n l = a;\n 0 > l.b && Qa(l);\n var m = l.b,\n n = l.Ca >> 1,\n q = (n - (l.I >> m)) >> 31;\n --l.b;\n l.Ca += q;\n l.Ca |= 1;\n l.I -= ((n + 1) & q) << m;\n f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n }\n return 16;\n }\n function Lc(a) {\n var b = a.rb[a.sb - 1];\n b.la = 0;\n b.Na = 0;\n M(a.zc, 0, 0, a.zc.length);\n a.ja = 0;\n }\n function Je(a, b) {\n for (a.M = 0; a.M < a.Va; ++a.M) {\n var c = a.Jc[a.M & a.Xb],\n d = a.m,\n e = a,\n f;\n for (f = 0; f < e.za; ++f) {\n var g = d;\n var h = e;\n var k = h.Ac,\n l = h.Bc + 4 * f,\n m = h.zc,\n n = h.ya[h.aa + f];\n h.Qa.Bb\n ? (n.$b = K(g, h.Pa.jb[0])\n ? 2 + K(g, h.Pa.jb[2])\n : K(g, h.Pa.jb[1]))\n : (n.$b = 0);\n h.kc && (n.Ad = K(g, h.Bd));\n n.Za = !K(g, 145) + 0;\n if (n.Za) {\n var r = n.Ob,\n q = 0;\n for (h = 0; 4 > h; ++h) {\n var t = m[0 + h];\n var v;\n for (v = 0; 4 > v; ++v) {\n t = Ke[k[l + v]][t];\n for (var p = Mc[K(g, t[0])]; 0 < p; )\n p = Mc[2 * p + K(g, t[p])];\n t = -p;\n k[l + v] = t;\n }\n I(r, q, k, l, 4);\n q += 4;\n m[0 + h] = t;\n }\n } else\n (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n (n.Ob[0] = t),\n M(k, l, t, 4),\n M(m, 0, t, 4);\n n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n }\n if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n for (; a.ja < a.za; ++a.ja) {\n d = a;\n e = c;\n g = d.rb[d.sb - 1];\n k = d.rb[d.sb + d.ja];\n f = d.ya[d.aa + d.ja];\n if ((l = d.kc ? f.Ad : 0))\n (g.la = k.la = 0),\n f.Za || (g.Na = k.Na = 0),\n (f.Hc = 0),\n (f.Gc = 0),\n (f.ia = 0);\n else {\n var u,\n w,\n g = k,\n k = e,\n l = d.Pa.Xc,\n m = d.ya[d.aa + d.ja],\n n = d.pb[m.$b];\n h = m.ad;\n r = 0;\n q = d.rb[d.sb - 1];\n t = v = 0;\n M(h, r, 0, 384);\n if (m.Za) {\n var y = 0;\n var A = l[3];\n } else {\n p = V(16);\n var E = g.Na + q.Na;\n E = oa(k, l[1], E, n.Eb, 0, p, 0);\n g.Na = q.Na = (0 < E) + 0;\n if (1 < E) Nc(p, 0, h, r);\n else {\n var B = (p[0] + 3) >> 3;\n for (p = 0; 256 > p; p += 16) h[r + p] = B;\n }\n y = 1;\n A = l[0];\n }\n var C = g.la & 15;\n var N = q.la & 15;\n for (p = 0; 4 > p; ++p) {\n var z = N & 1;\n for (B = w = 0; 4 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, A, E, n.Sc, y, h, r)),\n (z = E > y),\n (C = (C >> 1) | (z << 7)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 4;\n N = (N >> 1) | (z << 7);\n v = ((v << 8) | w) >>> 0;\n }\n A = C;\n y = N >> 4;\n for (u = 0; 4 > u; u += 2) {\n w = 0;\n C = g.la >> (4 + u);\n N = q.la >> (4 + u);\n for (p = 0; 2 > p; ++p) {\n z = N & 1;\n for (B = 0; 2 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n (z = 0 < E),\n (C = (C >> 1) | (z << 3)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 2;\n N = (N >> 1) | (z << 5);\n }\n t |= w << (4 * u);\n A |= (C << 4) << u;\n y |= (N & 240) << u;\n }\n g.la = A;\n q.la = y;\n m.Hc = v;\n m.Gc = t;\n m.ia = t & 43690 ? 0 : n.ia;\n l = !(v | t);\n }\n 0 < d.L &&\n ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n (d.wa[d.Y + d.ja].La |= !l));\n if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n }\n Lc(a);\n c = a;\n d = b;\n e = 1;\n f = c.D;\n g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n if (0 == c.Aa)\n a: {\n (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n w = c.D;\n f = w.Nb;\n t = Ya[c.L];\n g = t * c.R;\n k = (t / 2) * c.B;\n p = 16 * f * c.R;\n B = 8 * f * c.B;\n l = c.sa;\n m = c.ta - g + p;\n n = c.qa;\n h = c.ra - k + B;\n r = c.Ha;\n q = c.Ia - k + B;\n C = w.M;\n N = 0 == C;\n v = C >= c.Va - 1;\n 2 == c.Aa && Oc(c, w);\n if (w.uc)\n for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n var Q = E;\n y = w;\n A = z;\n var S = Q.D,\n D = S.Nb;\n u = Q.R;\n var S = S.wa[S.Y + y],\n F = Q.sa,\n H = Q.ta + 16 * D * u + 16 * y,\n J = S.dd,\n G = S.tc;\n if (0 != G)\n if ((x(3 <= G), 1 == Q.L))\n 0 < y && Pc(F, H, u, G + 4),\n S.La && Qc(F, H, u, G),\n 0 < A && Rc(F, H, u, G + 4),\n S.La && Sc(F, H, u, G);\n else {\n var L = Q.B,\n O = Q.qa,\n P = Q.ra + 8 * D * L + 8 * y,\n R = Q.Ha,\n Q = Q.Ia + 8 * D * L + 8 * y,\n D = S.ld;\n 0 < y &&\n (Tc(F, H, u, G + 4, J, D),\n Uc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n 0 < A &&\n (Xc(F, H, u, G + 4, J, D),\n Yc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n }\n }\n c.ia && alert(\"todo:DitherRow\");\n if (null != d.put) {\n w = 16 * C;\n C = 16 * (C + 1);\n N\n ? ((d.y = c.sa),\n (d.O = c.ta + p),\n (d.f = c.qa),\n (d.N = c.ra + B),\n (d.ea = c.Ha),\n (d.W = c.Ia + B))\n : ((w -= t),\n (d.y = l),\n (d.O = m),\n (d.f = n),\n (d.N = h),\n (d.ea = r),\n (d.W = q));\n v || (C -= t);\n C > d.o && (C = d.o);\n d.F = null;\n d.J = null;\n if (\n null != c.Fa &&\n 0 < c.Fa.length &&\n w < C &&\n ((d.J = Le(c, d, w, C - w)),\n (d.F = c.mb),\n null == d.F && 0 == d.F.length)\n ) {\n e = T(c, 3, \"Could not decode alpha data.\");\n break a;\n }\n w < d.j &&\n ((t = d.j - w),\n (w = d.j),\n x(!(t & 1)),\n (d.O += c.R * t),\n (d.N += c.B * (t >> 1)),\n (d.W += c.B * (t >> 1)),\n null != d.F && (d.J += d.width * t));\n w < C &&\n ((d.O += d.v),\n (d.N += d.v >> 1),\n (d.W += d.v >> 1),\n null != d.F && (d.J += d.v),\n (d.ka = w - d.j),\n (d.U = d.va - d.v),\n (d.T = C - w),\n (e = d.put(d)));\n }\n f + 1 != c.Ic ||\n v ||\n (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n }\n if (!e) return T(a, 6, \"Output aborted.\");\n }\n return 1;\n }\n function Me(a, b) {\n if (null == a) return 0;\n if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n if (!a.cb && !Kc(a, b)) return 0;\n x(a.cb);\n if (null == b.ac || b.ac(b)) {\n b.ob && (a.L = 0);\n var c = Ya[a.L];\n 2 == a.L\n ? ((a.yb = 0), (a.zb = 0))\n : ((a.yb = (b.v - c) >> 4),\n (a.zb = (b.j - c) >> 4),\n 0 > a.yb && (a.yb = 0),\n 0 > a.zb && (a.zb = 0));\n a.Va = (b.o + 15 + c) >> 4;\n a.Hb = (b.va + 15 + c) >> 4;\n a.Hb > a.za && (a.Hb = a.za);\n a.Va > a.Ub && (a.Va = a.Ub);\n if (0 < a.L) {\n var d = a.ed;\n for (c = 0; 4 > c; ++c) {\n var e;\n if (a.Qa.Cb) {\n var f = a.Qa.Lb[c];\n a.Qa.Fb || (f += d.Tb);\n } else f = d.Tb;\n for (e = 0; 1 >= e; ++e) {\n var g = a.gd[c][e],\n h = f;\n d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n h = 0 > h ? 0 : 63 < h ? 63 : h;\n if (0 < h) {\n var k = h;\n 0 < d.wb &&\n ((k = 4 < d.wb ? k >> 2 : k >> 1),\n k > 9 - d.wb && (k = 9 - d.wb));\n 1 > k && (k = 1);\n g.dd = k;\n g.tc = 2 * h + k;\n g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n } else g.tc = 0;\n g.La = e;\n }\n }\n }\n c = 0;\n } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n if ((c = 0 == c)) {\n if (c) {\n a.$c = 0;\n 0 < a.Aa || (a.Ic = Ne);\n b: {\n c = a.Ic;\n var k = a.za,\n d = 4 * k,\n l = 32 * k,\n m = k + 1,\n n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n r = (2 == a.Aa ? 2 : 1) * k;\n e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n g = d + 832 + e + f;\n if (g != g) c = 0;\n else {\n if (g > a.Vb) {\n a.Vb = 0;\n a.Ec = V(g);\n a.Fc = 0;\n if (null == a.Ec) {\n c = T(a, 1, \"no memory during frame initialization.\");\n break b;\n }\n a.Vb = g;\n }\n g = a.Ec;\n h = a.Fc;\n a.Ac = g;\n a.Bc = h;\n h += d;\n a.Gd = wa(l, Ic);\n a.Hd = 0;\n a.rb = wa(m + 1, Hc);\n a.sb = 1;\n a.wa = n ? wa(n, Xa) : null;\n a.Y = 0;\n a.D.Nb = 0;\n a.D.wa = a.wa;\n a.D.Y = a.Y;\n 0 < a.Aa && (a.D.Y += k);\n x(!0);\n a.oc = g;\n a.pc = h;\n h += 832;\n a.ya = wa(r, Kb);\n a.aa = 0;\n a.D.ya = a.ya;\n a.D.aa = a.aa;\n 2 == a.Aa && (a.D.aa += k);\n a.R = 16 * k;\n a.B = 8 * k;\n l = Ya[a.L];\n k = l * a.R;\n l = (l / 2) * a.B;\n a.sa = g;\n a.ta = h + k;\n a.qa = a.sa;\n a.ra = a.ta + 16 * c * a.R + l;\n a.Ha = a.qa;\n a.Ia = a.ra + 8 * c * a.B + l;\n a.$c = 0;\n h += e;\n a.mb = f ? g : null;\n a.nb = f ? h : null;\n x(h + f <= a.Fc + a.Vb);\n Lc(a);\n M(a.Ac, a.Bc, 0, d);\n c = 1;\n }\n }\n if (c) {\n b.ka = 0;\n b.y = a.sa;\n b.O = a.ta;\n b.f = a.qa;\n b.N = a.ra;\n b.ea = a.Ha;\n b.Vd = a.Ia;\n b.fa = a.R;\n b.Rc = a.B;\n b.F = null;\n b.J = 0;\n if (!ad) {\n for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n for (c = -1020; 1020 >= c; ++c)\n cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n for (c = -112; 112 >= c; ++c)\n dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n for (c = -255; 510 >= c; ++c)\n ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n ad = 1;\n }\n Nc = Oe;\n Za = Pe;\n Nb = Qe;\n pa = Re;\n Ob = Se;\n fd = Te;\n Xc = Ue;\n Tc = Ve;\n Yc = We;\n Uc = Xe;\n Zc = Ye;\n Vc = Ze;\n $c = $e;\n Wc = af;\n Rc = gd;\n Pc = hd;\n Sc = bf;\n Qc = cf;\n W[0] = df;\n W[1] = ef;\n W[2] = ff;\n W[3] = gf;\n W[4] = hf;\n W[5] = jf;\n W[6] = kf;\n W[7] = lf;\n W[8] = mf;\n W[9] = nf;\n Y[0] = of;\n Y[1] = pf;\n Y[2] = qf;\n Y[3] = rf;\n Y[4] = sf;\n Y[5] = tf;\n Y[6] = uf;\n ka[0] = vf;\n ka[1] = wf;\n ka[2] = xf;\n ka[3] = yf;\n ka[4] = zf;\n ka[5] = Af;\n ka[6] = Bf;\n c = 1;\n } else c = 0;\n }\n c && (c = Je(a, b));\n null != b.bc && b.bc(b);\n c &= 1;\n }\n if (!c) return 0;\n a.cb = 0;\n return c;\n }\n function qa(a, b, c, d, e) {\n e = a[b + c + 32 * d] + (e >> 3);\n a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n }\n function kb(a, b, c, d, e, f) {\n qa(a, b, 0, c, d + e);\n qa(a, b, 1, c, d + f);\n qa(a, b, 2, c, d - f);\n qa(a, b, 3, c, d - e);\n }\n function da(a) {\n return ((20091 * a) >> 16) + a;\n }\n function id(a, b, c, d) {\n var e = 0,\n f;\n var g = V(16);\n for (f = 0; 4 > f; ++f) {\n var h = a[b + 0] + a[b + 8];\n var k = a[b + 0] - a[b + 8];\n var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n g[e + 0] = h + m;\n g[e + 1] = k + l;\n g[e + 2] = k - l;\n g[e + 3] = h - m;\n e += 4;\n b++;\n }\n for (f = e = 0; 4 > f; ++f)\n (a = g[e + 0] + 4),\n (h = a + g[e + 8]),\n (k = a - g[e + 8]),\n (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n qa(c, d, 0, 0, h + m),\n qa(c, d, 1, 0, k + l),\n qa(c, d, 2, 0, k - l),\n qa(c, d, 3, 0, h - m),\n e++,\n (d += 32);\n }\n function Te(a, b, c, d) {\n var e = a[b + 0] + 4,\n f = (35468 * a[b + 4]) >> 16,\n g = da(a[b + 4]),\n h = (35468 * a[b + 1]) >> 16;\n a = da(a[b + 1]);\n kb(c, d, 0, e + g, a, h);\n kb(c, d, 1, e + f, a, h);\n kb(c, d, 2, e - f, a, h);\n kb(c, d, 3, e - g, a, h);\n }\n function Pe(a, b, c, d, e) {\n id(a, b, c, d);\n e && id(a, b + 16, c, d + 4);\n }\n function Qe(a, b, c, d) {\n Za(a, b + 0, c, d, 1);\n Za(a, b + 32, c, d + 128, 1);\n }\n function Re(a, b, c, d) {\n a = a[b + 0] + 4;\n var e;\n for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n }\n function Se(a, b, c, d) {\n a[b + 0] && pa(a, b + 0, c, d);\n a[b + 16] && pa(a, b + 16, c, d + 4);\n a[b + 32] && pa(a, b + 32, c, d + 128);\n a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n }\n function Oe(a, b, c, d) {\n var e = V(16),\n f;\n for (f = 0; 4 > f; ++f) {\n var g = a[b + 0 + f] + a[b + 12 + f];\n var h = a[b + 4 + f] + a[b + 8 + f];\n var k = a[b + 4 + f] - a[b + 8 + f];\n var l = a[b + 0 + f] - a[b + 12 + f];\n e[0 + f] = g + h;\n e[8 + f] = g - h;\n e[4 + f] = l + k;\n e[12 + f] = l - k;\n }\n for (f = 0; 4 > f; ++f)\n (a = e[0 + 4 * f] + 3),\n (g = a + e[3 + 4 * f]),\n (h = e[1 + 4 * f] + e[2 + 4 * f]),\n (k = e[1 + 4 * f] - e[2 + 4 * f]),\n (l = a - e[3 + 4 * f]),\n (c[d + 0] = (g + h) >> 3),\n (c[d + 16] = (l + k) >> 3),\n (c[d + 32] = (g - h) >> 3),\n (c[d + 48] = (l - k) >> 3),\n (d += 64);\n }\n function Pb(a, b, c) {\n var d = b - 32,\n e = R,\n f = 255 - a[d - 1],\n g;\n for (g = 0; g < c; ++g) {\n var h = e,\n k = f + a[b - 1],\n l;\n for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n b += 32;\n }\n }\n function ef(a, b) {\n Pb(a, b, 4);\n }\n function wf(a, b) {\n Pb(a, b, 8);\n }\n function pf(a, b) {\n Pb(a, b, 16);\n }\n function qf(a, b) {\n var c;\n for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n }\n function rf(a, b) {\n var c;\n for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n }\n function $a(a, b, c) {\n var d;\n for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n }\n function of(a, b) {\n var c = 16,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n $a(c >> 5, a, b);\n }\n function sf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n $a(c >> 4, a, b);\n }\n function tf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n $a(c >> 4, a, b);\n }\n function uf(a, b) {\n $a(128, a, b);\n }\n function z(a, b, c) {\n return (a + 2 * b + c + 2) >> 2;\n }\n function ff(a, b) {\n var c = b - 32,\n c = new Uint8Array([\n z(a[c - 1], a[c + 0], a[c + 1]),\n z(a[c + 0], a[c + 1], a[c + 2]),\n z(a[c + 1], a[c + 2], a[c + 3]),\n z(a[c + 2], a[c + 3], a[c + 4])\n ]),\n d;\n for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n }\n function gf(a, b) {\n var c = a[b - 1],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n ra(a, b + 32, 16843009 * z(c, d, e));\n ra(a, b + 64, 16843009 * z(d, e, f));\n ra(a, b + 96, 16843009 * z(e, f, f));\n }\n function df(a, b) {\n var c = 4,\n d;\n for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n c >>= 3;\n for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n }\n function hf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n a[b + 3 + 0] = z(l, k, h);\n }\n function kf(a, b) {\n var c = a[b + 1 - 32],\n d = a[b + 2 - 32],\n e = a[b + 3 - 32],\n f = a[b + 4 - 32],\n g = a[b + 5 - 32],\n h = a[b + 6 - 32],\n k = a[b + 7 - 32];\n a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, k);\n }\n function jf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n a[b + 3 + 0] = (k + l + 1) >> 1;\n a[b + 0 + 96] = z(e, d, c);\n a[b + 0 + 64] = z(d, c, f);\n a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n a[b + 3 + 32] = z(h, k, l);\n }\n function lf(a, b) {\n var c = a[b + 0 - 32],\n d = a[b + 1 - 32],\n e = a[b + 2 - 32],\n f = a[b + 3 - 32],\n g = a[b + 4 - 32],\n h = a[b + 5 - 32],\n k = a[b + 6 - 32],\n l = a[b + 7 - 32];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n a[b + 0 + 32] = z(c, d, e);\n a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 3 + 64] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, l);\n }\n function nf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n a[b + 1 + 0] = z(c, d, e);\n a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n b + 2 + 96\n ] = a[b + 3 + 96] = f;\n }\n function mf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96],\n g = a[b - 1 - 32],\n h = a[b + 0 - 32],\n k = a[b + 1 - 32],\n l = a[b + 2 - 32];\n a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n a[b + 0 + 96] = (f + e + 1) >> 1;\n a[b + 3 + 0] = z(h, k, l);\n a[b + 2 + 0] = z(g, h, k);\n a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n a[b + 1 + 96] = z(f, e, d);\n }\n function xf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n }\n function yf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n }\n function lb(a, b, c) {\n var d;\n for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n }\n function vf(a, b) {\n var c = 8,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n lb(c >> 4, a, b);\n }\n function Af(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n lb(c >> 3, a, b);\n }\n function zf(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n lb(c >> 3, a, b);\n }\n function Bf(a, b) {\n lb(128, a, b);\n }\n function ab(a, b, c) {\n var d = a[b - c],\n e = a[b + 0],\n f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n g = mb[112 + ((f + 4) >> 3)];\n a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n a[b + 0] = R[255 + e - g];\n }\n function jd(a, b, c, d) {\n var e = a[b + 0],\n f = a[b + c];\n return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n }\n function kd(a, b, c, d) {\n return (\n 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n );\n }\n function ld(a, b, c, d, e) {\n var f = a[b - 3 * c],\n g = a[b - 2 * c],\n h = a[b - c],\n k = a[b + 0],\n l = a[b + c],\n m = a[b + 2 * c],\n n = a[b + 3 * c];\n return 4 * U[255 + h - k] + U[255 + g - l] > d\n ? 0\n : U[255 + a[b - 4 * c] - f] <= e &&\n U[255 + f - g] <= e &&\n U[255 + g - h] <= e &&\n U[255 + n - m] <= e &&\n U[255 + m - l] <= e &&\n U[255 + l - k] <= e;\n }\n function gd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n }\n function hd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n }\n function bf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n }\n function cf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n }\n function ea(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - 2 * m],\n r = k[l - m],\n q = k[l + 0],\n t = k[l + m],\n v = k[l + 2 * m],\n p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n u = (27 * p + 63) >> 7,\n w = (18 * p + 63) >> 7,\n p = (9 * p + 63) >> 7;\n k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n k[l - 2 * m] = R[255 + n + w];\n k[l - m] = R[255 + r + u];\n k[l + 0] = R[255 + q - u];\n k[l + m] = R[255 + t - w];\n k[l + 2 * m] = R[255 + v - p];\n }\n b += d;\n }\n }\n function Fa(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - m],\n r = k[l + 0],\n q = k[l + m],\n t = 3 * (r - n),\n v = mb[112 + ((t + 4) >> 3)],\n t = mb[112 + ((t + 3) >> 3)],\n p = (v + 1) >> 1;\n k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n k[l - m] = R[255 + n + t];\n k[l + 0] = R[255 + r - v];\n k[l + m] = R[255 + q - p];\n }\n b += d;\n }\n }\n function Ue(a, b, c, d, e, f) {\n ea(a, b, c, 1, 16, d, e, f);\n }\n function Ve(a, b, c, d, e, f) {\n ea(a, b, 1, c, 16, d, e, f);\n }\n function Ye(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n }\n function Ze(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n }\n function We(a, b, c, d, e, f, g, h) {\n ea(a, b, e, 1, 8, f, g, h);\n ea(c, d, e, 1, 8, f, g, h);\n }\n function Xe(a, b, c, d, e, f, g, h) {\n ea(a, b, 1, e, 8, f, g, h);\n ea(c, d, 1, e, 8, f, g, h);\n }\n function $e(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n }\n function af(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4, 1, e, 8, f, g, h);\n Fa(c, d + 4, 1, e, 8, f, g, h);\n }\n function Cf() {\n this.ba = new Cb();\n this.ec = [];\n this.cc = [];\n this.Mc = [];\n this.Dc = this.Nc = this.dc = this.fc = 0;\n this.Oa = new Ud();\n this.memory = 0;\n this.Ib = \"OutputFunc\";\n this.Jb = \"OutputAlphaFunc\";\n this.Nd = \"OutputRowFunc\";\n }\n function md() {\n this.data = [];\n this.offset = this.kd = this.ha = this.w = 0;\n this.na = [];\n this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n }\n function Df() {\n this.nc = this.Ea = this.b = this.hc = 0;\n this.K = [];\n this.w = 0;\n }\n function Ef() {\n this.ua = 0;\n this.Wa = new ac();\n this.vb = new ac();\n this.md = this.xc = this.wc = 0;\n this.vc = [];\n this.Wb = 0;\n this.Ya = new Ub();\n this.yc = new O();\n }\n function je() {\n this.xb = this.a = 0;\n this.l = new Oa();\n this.ca = new Cb();\n this.V = [];\n this.Ba = 0;\n this.Ta = [];\n this.Ua = 0;\n this.m = new Ra();\n this.Pb = 0;\n this.wd = new Ra();\n this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n this.s = new Ef();\n this.ab = 0;\n this.gc = wa(4, Df);\n this.Oc = 0;\n }\n function Ff() {\n this.Lc = this.Z = this.$a = this.i = this.c = 0;\n this.l = new Oa();\n this.ic = 0;\n this.ca = [];\n this.tb = 0;\n this.qd = null;\n this.rd = 0;\n }\n function Rb(a, b, c, d, e, f, g) {\n a = null == a ? 0 : a[b + 0];\n for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n }\n function Gf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h;\n for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n }\n }\n function Hf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h = a[b + 0],\n k = h,\n l = h,\n m;\n for (m = 0; m < g; ++m)\n (h = a[b + m]),\n (k = l + h - k),\n (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n (k = h),\n (e[f + m] = l);\n }\n }\n function Le(a, b, c, d) {\n var e = b.width,\n f = b.o;\n x(null != a && null != b);\n if (0 > c || 0 >= d || c + d > f) return null;\n if (!a.Cc) {\n if (null == a.ga) {\n a.ga = new Ff();\n var g;\n (g = null == a.ga) ||\n ((g = b.width * b.o),\n x(0 == a.Gb.length),\n (a.Gb = V(g)),\n (a.Uc = 0),\n null == a.Gb\n ? (g = 0)\n : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n (g = !g));\n if (!g) {\n g = a.ga;\n var h = a.Fa,\n k = a.P,\n l = a.qc,\n m = a.mb,\n n = a.nb,\n r = k + 1,\n q = l - 1,\n t = g.l;\n x(null != h && null != m && null != b);\n ia[0] = null;\n ia[1] = Rb;\n ia[2] = Gf;\n ia[3] = Hf;\n g.ca = m;\n g.tb = n;\n g.c = b.width;\n g.i = b.height;\n x(0 < g.c && 0 < g.i);\n if (1 >= l) b = 0;\n else if (\n ((g.$a = (h[k + 0] >> 0) & 3),\n (g.Z = (h[k + 0] >> 2) & 3),\n (g.Lc = (h[k + 0] >> 4) & 3),\n (k = (h[k + 0] >> 6) & 3),\n 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n )\n b = 0;\n else if (\n ((t.put = kc),\n (t.ac = gc),\n (t.bc = lc),\n (t.ma = g),\n (t.width = b.width),\n (t.height = b.height),\n (t.Da = b.Da),\n (t.v = b.v),\n (t.va = b.va),\n (t.j = b.j),\n (t.o = b.o),\n g.$a)\n )\n b: {\n x(1 == g.$a), (b = Bc());\n c: for (;;) {\n if (null == b) {\n b = 0;\n break b;\n }\n x(null != g);\n g.mc = b;\n b.c = g.c;\n b.i = g.i;\n b.l = g.l;\n b.l.ma = g;\n b.l.width = g.c;\n b.l.height = g.i;\n b.a = 0;\n cb(b.m, h, r, q);\n if (!rb(g.c, g.i, 1, b, null)) break c;\n 1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n ? ((g.ic = 1),\n (h = b.c * b.i),\n (b.Ta = null),\n (b.Ua = 0),\n (b.V = V(h)),\n (b.Ba = 0),\n null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n : ((g.ic = 0), (b = Ec(b, g.c)));\n if (!b) break c;\n b = 1;\n break b;\n }\n g.mc = null;\n b = 0;\n }\n else b = q >= g.c * g.i;\n g = !b;\n }\n if (g) return null;\n 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n }\n x(null != a.ga);\n x(c + d <= f);\n a: {\n h = a.ga;\n b = h.c;\n f = h.l.o;\n if (0 == h.$a) {\n r = a.rc;\n q = a.Vc;\n t = a.Fa;\n k = a.P + 1 + c * b;\n l = a.mb;\n m = a.nb + c * b;\n x(k <= a.P + a.qc);\n if (0 != h.Z)\n for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n ia[h.Z](r, q, t, k, l, m, b),\n (r = l),\n (q = m),\n (m += b),\n (k += b);\n else\n for (g = 0; g < d; ++g)\n I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n a.rc = r;\n a.Vc = q;\n } else {\n x(null != h.mc);\n b = c + d;\n g = h.mc;\n x(null != g);\n x(b <= g.i);\n if (g.C >= b) b = 1;\n else if ((h.ic || Aa(), h.ic)) {\n var h = g.V,\n r = g.Ba,\n q = g.c,\n v = g.i,\n t = 1,\n k = g.$ / q,\n l = g.$ % q,\n m = g.m,\n n = g.s,\n p = g.$,\n u = q * v,\n w = q * b,\n y = n.wc,\n A = p < w ? ha(n, l, k) : null;\n x(p <= u);\n x(b <= v);\n x(yc(n));\n c: for (;;) {\n for (; !m.h && p < w; ) {\n l & y || (A = ha(n, l, k));\n x(null != A);\n Sa(m);\n v = ua(A.G[0], A.H[0], m);\n if (256 > v)\n (h[r + p] = v),\n ++p,\n ++l,\n l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n else if (280 > v) {\n var v = ib(v - 256, m);\n var E = ua(A.G[4], A.H[4], m);\n Sa(m);\n E = ib(E, m);\n E = nc(q, E);\n if (p >= E && u - p >= v) {\n var B;\n for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n } else {\n t = 0;\n break c;\n }\n p += v;\n for (l += v; l >= q; )\n (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n p < w && l & y && (A = ha(n, l, k));\n } else {\n t = 0;\n break c;\n }\n x(m.h == db(m));\n }\n Ib(g, k > b ? b : k);\n break c;\n }\n !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n b = t;\n } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n if (!b) {\n d = 0;\n break a;\n }\n }\n c + d >= f && (a.Cc = 1);\n d = 1;\n }\n if (!d) return null;\n if (\n a.Cc &&\n ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n )\n return alert(\"todo:WebPDequantizeLevels\"), null;\n }\n return a.nb + c * e;\n }\n function If(a, b, c, d, e, f) {\n for (; 0 < e--; ) {\n var g = a,\n h = b + (c ? 1 : 0),\n k = a,\n l = b + (c ? 0 : 3),\n m;\n for (m = 0; m < d; ++m) {\n var n = k[l + 4 * m];\n 255 != n &&\n ((n *= 32897),\n (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n }\n b += f;\n }\n }\n function Jf(a, b, c, d, e) {\n for (; 0 < d--; ) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + 2 * f + 0],\n h = a[b + 2 * f + 1],\n k = h & 15,\n l = 4369 * k,\n h = (((h & 240) | (h >> 4)) * l) >> 16;\n a[b + 2 * f + 0] =\n (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n a[b + 2 * f + 1] = (h & 240) | k;\n }\n b += e;\n }\n }\n function Kf(a, b, c, d, e, f, g, h) {\n var k = 255,\n l,\n m;\n for (m = 0; m < e; ++m) {\n for (l = 0; l < d; ++l) {\n var n = a[b + l];\n f[g + 4 * l] = n;\n k &= n;\n }\n b += c;\n g += h;\n }\n return 255 != k;\n }\n function Lf(a, b, c, d, e) {\n var f;\n for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n }\n function Aa() {\n za = If;\n vc = Jf;\n fc = Kf;\n Fc = Lf;\n }\n function va(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n var d,\n E = (y - 1) >> 1;\n var B = h[k + 0] | (l[m + 0] << 16);\n var C = n[r + 0] | (q[t + 0] << 16);\n x(null != a);\n var z = (3 * B + C + 131074) >> 2;\n b(a[e + 0], z & 255, z >> 16, v, p);\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + 0], z & 255, z >> 16, u, w));\n for (d = 1; d <= E; ++d) {\n var D = h[k + d] | (l[m + d] << 16);\n var G = n[r + d] | (q[t + d] << 16);\n var F = B + D + C + G + 524296;\n var H = (F + 2 * (D + C)) >> 3;\n F = (F + 2 * (B + G)) >> 3;\n z = (H + B) >> 1;\n B = (F + D) >> 1;\n b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n null != f &&\n ((z = (F + C) >> 1),\n (B = (H + G) >> 1),\n b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n B = D;\n C = G;\n }\n y & 1 ||\n ((z = (3 * B + C + 131074) >> 2),\n b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n };\n }\n function ic() {\n P[Ca] = Mf;\n P[Ua] = nd;\n P[tc] = Nf;\n P[Va] = od;\n P[ya] = pd;\n P[Db] = qd;\n P[wc] = Of;\n P[zb] = nd;\n P[Ab] = od;\n P[Ja] = pd;\n P[Bb] = qd;\n }\n function Sb(a) {\n return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n }\n function bb(a, b) {\n return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n }\n function nb(a, b, c) {\n return Sb(\n ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n );\n }\n function Pa(a, b) {\n return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n }\n function Ga(a, b, c, d, e) {\n d[e + 0] = bb(a, c);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = Pa(a, b);\n }\n function Tb(a, b, c, d, e) {\n d[e + 0] = Pa(a, b);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = bb(a, c);\n }\n function sd(a, b, c, d, e) {\n var f = nb(a, b, c);\n b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n d[e + 1] = b;\n }\n function td(a, b, c, d, e) {\n var f = (Pa(a, b) & 240) | 15;\n d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n d[e + 1] = f;\n }\n function ud(a, b, c, d, e) {\n d[e + 0] = 255;\n Ga(a, b, c, d, e + 1);\n }\n function vd(a, b, c, d, e) {\n Tb(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function wd(a, b, c, d, e) {\n Ga(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function la(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n) {\n for (var d = m + (n & -2) * c; m != d; )\n b(a[e + 0], f[g + 0], h[k + 0], l, m),\n b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n (e += 2),\n ++g,\n ++k,\n (m += 2 * c);\n n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n };\n }\n function xd(a, b, c) {\n return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n }\n function yd(a, b, c, d, e) {\n switch (a >>> 30) {\n case 3:\n Za(b, c, d, e, 0);\n break;\n case 2:\n fd(b, c, d, e);\n break;\n case 1:\n pa(b, c, d, e);\n }\n }\n function Oc(a, b) {\n var c,\n d,\n e = b.M,\n f = b.Nb,\n g = a.oc,\n h = a.pc + 40,\n k = a.oc,\n l = a.pc + 584,\n m = a.oc,\n n = a.pc + 600;\n for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n for (c = 0; 8 > c; ++c)\n (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n 0 < e\n ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n : (M(g, h - 32 - 1, 127, 21),\n M(k, l - 32 - 1, 127, 9),\n M(m, n - 32 - 1, 127, 9));\n for (d = 0; d < a.za; ++d) {\n var r = b.ya[b.aa + d];\n if (0 < d) {\n for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n for (c = -1; 8 > c; ++c)\n I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n }\n var q = a.Gd,\n t = a.Hd + d,\n v = r.ad,\n p = r.Hc;\n 0 < e &&\n (I(g, h - 32, q[t].y, 0, 16),\n I(k, l - 32, q[t].f, 0, 8),\n I(m, n - 32, q[t].ea, 0, 8));\n if (r.Za) {\n var u = g;\n var w = h - 32 + 16;\n 0 < e &&\n (d >= a.za - 1\n ? M(u, w, q[t].y[15], 4)\n : I(u, w, q[t + 1].y, 0, 4));\n for (c = 0; 4 > c; c++)\n u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n for (c = 0; 16 > c; ++c, p <<= 2)\n (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n c = r.Gc;\n u = xd(d, e, r.Dd);\n ka[u](k, l);\n ka[u](m, n);\n r = c >> 0;\n p = v;\n u = k;\n w = l;\n r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n c >>= 8;\n r = m;\n p = n;\n c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n e < a.Ub - 1 &&\n (I(q[t].y, 0, g, h + 480, 16),\n I(q[t].f, 0, k, l + 224, 8),\n I(q[t].ea, 0, m, n + 224, 8));\n c = 8 * f * a.B;\n q = a.sa;\n t = a.ta + 16 * d + 16 * f * a.R;\n v = a.qa;\n r = a.ra + 8 * d + c;\n p = a.Ha;\n u = a.Ia + 8 * d + c;\n for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n for (c = 0; 8 > c; ++c)\n I(v, r + c * a.B, k, l + 32 * c, 8),\n I(p, u + c * a.B, m, n + 32 * c, 8);\n }\n }\n function Ad(a, b, c, d, e, f, g, h, k) {\n var l = [0],\n m = [0],\n n = 0,\n r = null != k ? k.kd : 0,\n q = null != k ? k : new md();\n if (null == a || 12 > c) return 7;\n q.data = a;\n q.w = b;\n q.ha = c;\n b = [b];\n c = [c];\n q.gb = [q.gb];\n a: {\n var t = b;\n var v = c;\n var p = q.gb;\n x(null != a);\n x(null != v);\n x(null != p);\n p[0] = 0;\n if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n if (fa(a, t[0] + 8, \"WEBP\")) {\n p = 3;\n break a;\n }\n var u = Ha(a, t[0] + 4);\n if (12 > u || 4294967286 < u) {\n p = 3;\n break a;\n }\n if (r && u > v[0] - 8) {\n p = 7;\n break a;\n }\n p[0] = u;\n t[0] += 12;\n v[0] -= 12;\n }\n p = 0;\n }\n if (0 != p) return p;\n u = 0 < q.gb[0];\n for (c = c[0]; ; ) {\n t = [0];\n n = [n];\n a: {\n var w = a;\n v = b;\n p = c;\n var y = n,\n A = l,\n z = m,\n B = t;\n y[0] = 0;\n if (8 > p[0]) p = 7;\n else {\n if (!fa(w, v[0], \"VP8X\")) {\n if (10 != Ha(w, v[0] + 4)) {\n p = 3;\n break a;\n }\n if (18 > p[0]) {\n p = 7;\n break a;\n }\n var C = Ha(w, v[0] + 8);\n var D = 1 + Yb(w, v[0] + 12);\n w = 1 + Yb(w, v[0] + 15);\n if (2147483648 <= D * w) {\n p = 3;\n break a;\n }\n null != B && (B[0] = C);\n null != A && (A[0] = D);\n null != z && (z[0] = w);\n v[0] += 18;\n p[0] -= 18;\n y[0] = 1;\n }\n p = 0;\n }\n }\n n = n[0];\n t = t[0];\n if (0 != p) return p;\n v = !!(t & 2);\n if (!u && n) return 3;\n null != f && (f[0] = !!(t & 16));\n null != g && (g[0] = v);\n null != h && (h[0] = 0);\n g = l[0];\n t = m[0];\n if (n && v && null == k) {\n p = 0;\n break;\n }\n if (4 > c) {\n p = 7;\n break;\n }\n if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n c = [c];\n q.na = [q.na];\n q.P = [q.P];\n q.Sa = [q.Sa];\n a: {\n C = a;\n p = b;\n u = c;\n var y = q.gb,\n A = q.na,\n z = q.P,\n B = q.Sa;\n D = 22;\n x(null != C);\n x(null != u);\n w = p[0];\n var F = u[0];\n x(null != A);\n x(null != B);\n A[0] = null;\n z[0] = null;\n for (B[0] = 0; ; ) {\n p[0] = w;\n u[0] = F;\n if (8 > F) {\n p = 7;\n break a;\n }\n var G = Ha(C, w + 4);\n if (4294967286 < G) {\n p = 3;\n break a;\n }\n var H = (8 + G + 1) & -2;\n D += H;\n if (0 < y && D > y) {\n p = 3;\n break a;\n }\n if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n p = 0;\n break a;\n }\n if (F[0] < H) {\n p = 7;\n break a;\n }\n fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n w += H;\n F -= H;\n }\n }\n c = c[0];\n q.na = q.na[0];\n q.P = q.P[0];\n q.Sa = q.Sa[0];\n if (0 != p) break;\n }\n c = [c];\n q.Ja = [q.Ja];\n q.xa = [q.xa];\n a: if (\n ((y = a),\n (p = b),\n (u = c),\n (A = q.gb[0]),\n (z = q.Ja),\n (B = q.xa),\n (C = p[0]),\n (w = !fa(y, C, \"VP8 \")),\n (D = !fa(y, C, \"VP8L\")),\n x(null != y),\n x(null != u),\n x(null != z),\n x(null != B),\n 8 > u[0])\n )\n p = 7;\n else {\n if (w || D) {\n y = Ha(y, C + 4);\n if (12 <= A && y > A - 12) {\n p = 3;\n break a;\n }\n if (r && y > u[0] - 8) {\n p = 7;\n break a;\n }\n z[0] = y;\n p[0] += 8;\n u[0] -= 8;\n B[0] = D;\n } else\n (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n (z[0] = u[0]);\n p = 0;\n }\n c = c[0];\n q.Ja = q.Ja[0];\n q.xa = q.xa[0];\n b = b[0];\n if (0 != p) break;\n if (4294967286 < q.Ja) return 3;\n null == h || v || (h[0] = q.xa ? 2 : 1);\n g = [g];\n t = [t];\n if (q.xa) {\n if (5 > c) {\n p = 7;\n break;\n }\n h = g;\n r = t;\n v = f;\n null == a || 5 > c\n ? (a = 0)\n : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n ? ((u = [0]),\n (y = [0]),\n (A = [0]),\n (z = new Ra()),\n cb(z, a, b, c),\n mc(z, u, y, A)\n ? (null != h && (h[0] = u[0]),\n null != r && (r[0] = y[0]),\n null != v && (v[0] = A[0]),\n (a = 1))\n : (a = 0))\n : (a = 0);\n } else {\n if (10 > c) {\n p = 7;\n break;\n }\n h = t;\n null == a || 10 > c || !Jc(a, b + 3, c - 3)\n ? (a = 0)\n : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n r & 1 ||\n 3 < ((r >> 1) & 7) ||\n !((r >> 4) & 1) ||\n r >> 5 >= q.Ja ||\n !v ||\n !a\n ? (a = 0)\n : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n }\n if (!a) return 3;\n g = g[0];\n t = t[0];\n if (n && (l[0] != g || m[0] != t)) return 3;\n null != k &&\n ((k[0] = q),\n (k.offset = b - k.w),\n x(4294967286 > b - k.w),\n x(k.offset == k.ha - c));\n break;\n }\n return 0 == p || (7 == p && n && null == k)\n ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n null != d && (d[0] = g),\n null != e && (e[0] = t),\n 0)\n : p;\n }\n function hc(a, b, c) {\n var d = b.width,\n e = b.height,\n f = 0,\n g = 0,\n h = d,\n k = e;\n b.Da = null != a && 0 < a.Da;\n if (\n b.Da &&\n ((h = a.cd),\n (k = a.bd),\n (f = a.v),\n (g = a.j),\n 11 > c || ((f &= -2), (g &= -2)),\n 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n )\n return 0;\n b.v = f;\n b.j = g;\n b.va = f + h;\n b.o = g + k;\n b.U = h;\n b.T = k;\n b.da = null != a && 0 < a.da;\n if (b.da) {\n c = [a.ib];\n f = [a.hb];\n if (!bc(h, k, c, f)) return 0;\n b.ib = c[0];\n b.hb = f[0];\n }\n b.ob = null != a && a.ob;\n b.Kb = null == a || !a.Sd;\n b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n return 1;\n }\n function Bd(a) {\n if (null == a) return 2;\n if (11 > a.S) {\n var b = a.f.RGBA;\n b.fb += (a.height - 1) * b.A;\n b.A = -b.A;\n } else\n (b = a.f.kb),\n (a = a.height),\n (b.O += (a - 1) * b.fa),\n (b.fa = -b.fa),\n (b.N += ((a - 1) >> 1) * b.Ab),\n (b.Ab = -b.Ab),\n (b.W += ((a - 1) >> 1) * b.Db),\n (b.Db = -b.Db),\n null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n return 0;\n }\n function Cd(a, b, c, d) {\n if (null == d || 0 >= a || 0 >= b) return 2;\n if (null != c) {\n if (c.Da) {\n var e = c.cd,\n f = c.bd,\n g = c.v & -2,\n h = c.j & -2;\n if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n return 2;\n a = e;\n b = f;\n }\n if (c.da) {\n e = [c.ib];\n f = [c.hb];\n if (!bc(a, b, e, f)) return 2;\n a = e[0];\n b = f[0];\n }\n }\n d.width = a;\n d.height = b;\n a: {\n var k = d.width;\n var l = d.height;\n a = d.S;\n if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n else {\n if (0 >= d.Rd && null == d.sd) {\n var g = (f = e = b = 0),\n h = k * Dd[a],\n m = h * l;\n 11 > a ||\n ((b = (k + 1) / 2),\n (f = ((l + 1) / 2) * b),\n 12 == a && ((e = k), (g = e * l)));\n l = V(m + 2 * f + g);\n if (null == l) {\n a = 1;\n break a;\n }\n d.sd = l;\n 11 > a\n ? ((k = d.f.RGBA),\n (k.eb = l),\n (k.fb = 0),\n (k.A = h),\n (k.size = m))\n : ((k = d.f.kb),\n (k.y = l),\n (k.O = 0),\n (k.fa = h),\n (k.Fd = m),\n (k.f = l),\n (k.N = 0 + m),\n (k.Ab = b),\n (k.Cd = f),\n (k.ea = l),\n (k.W = 0 + m + f),\n (k.Db = b),\n (k.Ed = f),\n 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n (k.Tc = g),\n (k.lb = e));\n }\n b = 1;\n e = d.S;\n f = d.width;\n g = d.height;\n if (e >= Ca && 13 > e)\n if (11 > e)\n (a = d.f.RGBA),\n (h = Math.abs(a.A)),\n (b &= h * (g - 1) + f <= a.size),\n (b &= h >= f * Dd[e]),\n (b &= null != a.eb);\n else {\n a = d.f.kb;\n h = (f + 1) / 2;\n m = (g + 1) / 2;\n k = Math.abs(a.fa);\n var l = Math.abs(a.Ab),\n n = Math.abs(a.Db),\n r = Math.abs(a.lb),\n q = r * (g - 1) + f;\n b &= k * (g - 1) + f <= a.Fd;\n b &= l * (m - 1) + h <= a.Cd;\n b &= n * (m - 1) + h <= a.Ed;\n b = b & (k >= f) & (l >= h) & (n >= h);\n b &= null != a.y;\n b &= null != a.f;\n b &= null != a.ea;\n 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n }\n else b = 0;\n a = b ? 0 : 2;\n }\n }\n if (0 != a) return a;\n null != c && c.fd && (a = Bd(d));\n return a;\n }\n var xb = 64,\n Hd = [\n 0,\n 1,\n 3,\n 7,\n 15,\n 31,\n 63,\n 127,\n 255,\n 511,\n 1023,\n 2047,\n 4095,\n 8191,\n 16383,\n 32767,\n 65535,\n 131071,\n 262143,\n 524287,\n 1048575,\n 2097151,\n 4194303,\n 8388607,\n 16777215\n ],\n Gd = 24,\n ob = 32,\n Xb = 8,\n Id = [\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7\n ];\n X(\"Predictor0\", \"PredictorAdd0\");\n self.Predictor0 = function() {\n return 4278190080;\n };\n self.Predictor1 = function(a) {\n return a;\n };\n self.Predictor2 = function(a, b, c) {\n return b[c + 0];\n };\n self.Predictor3 = function(a, b, c) {\n return b[c + 1];\n };\n self.Predictor4 = function(a, b, c) {\n return b[c - 1];\n };\n self.Predictor5 = function(a, b, c) {\n return aa(aa(a, b[c + 1]), b[c + 0]);\n };\n self.Predictor6 = function(a, b, c) {\n return aa(a, b[c - 1]);\n };\n self.Predictor7 = function(a, b, c) {\n return aa(a, b[c + 0]);\n };\n self.Predictor8 = function(a, b, c) {\n return aa(b[c - 1], b[c + 0]);\n };\n self.Predictor9 = function(a, b, c) {\n return aa(b[c + 0], b[c + 1]);\n };\n self.Predictor10 = function(a, b, c) {\n return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n };\n self.Predictor11 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return 0 >=\n Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n Ia(d & 255, a & 255, b & 255)\n ? d\n : a;\n };\n self.Predictor12 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return (\n ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n 16) |\n (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n sa((a & 255) + (d & 255) - (b & 255))) >>>\n 0\n );\n };\n self.Predictor13 = function(a, b, c) {\n var d = b[c - 1];\n a = aa(a, b[c + 0]);\n return (\n ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n 0\n );\n };\n var ee = self.PredictorAdd0;\n self.PredictorAdd1 = cc;\n X(\"Predictor2\", \"PredictorAdd2\");\n X(\"Predictor3\", \"PredictorAdd3\");\n X(\"Predictor4\", \"PredictorAdd4\");\n X(\"Predictor5\", \"PredictorAdd5\");\n X(\"Predictor6\", \"PredictorAdd6\");\n X(\"Predictor7\", \"PredictorAdd7\");\n X(\"Predictor8\", \"PredictorAdd8\");\n X(\"Predictor9\", \"PredictorAdd9\");\n X(\"Predictor10\", \"PredictorAdd10\");\n X(\"Predictor11\", \"PredictorAdd11\");\n X(\"Predictor12\", \"PredictorAdd12\");\n X(\"Predictor13\", \"PredictorAdd13\");\n var fe = self.PredictorAdd2;\n ec(\n \"ColorIndexInverseTransform\",\n \"MapARGB\",\n \"32b\",\n function(a) {\n return (a >> 8) & 255;\n },\n function(a) {\n return a;\n }\n );\n ec(\n \"VP8LColorIndexInverseTransformAlpha\",\n \"MapAlpha\",\n \"8b\",\n function(a) {\n return a;\n },\n function(a) {\n return (a >> 8) & 255;\n }\n );\n var rc = self.ColorIndexInverseTransform,\n ke = self.MapARGB,\n he = self.VP8LColorIndexInverseTransformAlpha,\n le = self.MapAlpha,\n pc,\n qc = (self.VP8LPredictorsAdd = []);\n qc.length = 16;\n (self.VP8LPredictors = []).length = 16;\n (self.VP8LPredictorsAdd_C = []).length = 16;\n (self.VP8LPredictors_C = []).length = 16;\n var Fb,\n sc,\n Gb,\n Hb,\n xc,\n uc,\n bd = V(511),\n cd = V(2041),\n dd = V(225),\n ed = V(767),\n ad = 0,\n Qb = cd,\n mb = dd,\n R = ed,\n U = bd,\n Ca = 0,\n Ua = 1,\n tc = 2,\n Va = 3,\n ya = 4,\n Db = 5,\n wc = 6,\n zb = 7,\n Ab = 8,\n Ja = 9,\n Bb = 10,\n pe = [2, 3, 7],\n oe = [3, 3, 11],\n Dc = [280, 256, 256, 256, 40],\n qe = [0, 1, 1, 1, 0],\n ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n de = [\n 24,\n 7,\n 23,\n 25,\n 40,\n 6,\n 39,\n 41,\n 22,\n 26,\n 38,\n 42,\n 56,\n 5,\n 55,\n 57,\n 21,\n 27,\n 54,\n 58,\n 37,\n 43,\n 72,\n 4,\n 71,\n 73,\n 20,\n 28,\n 53,\n 59,\n 70,\n 74,\n 36,\n 44,\n 88,\n 69,\n 75,\n 52,\n 60,\n 3,\n 87,\n 89,\n 19,\n 29,\n 86,\n 90,\n 35,\n 45,\n 68,\n 76,\n 85,\n 91,\n 51,\n 61,\n 104,\n 2,\n 103,\n 105,\n 18,\n 30,\n 102,\n 106,\n 34,\n 46,\n 84,\n 92,\n 67,\n 77,\n 101,\n 107,\n 50,\n 62,\n 120,\n 1,\n 119,\n 121,\n 83,\n 93,\n 17,\n 31,\n 100,\n 108,\n 66,\n 78,\n 118,\n 122,\n 33,\n 47,\n 117,\n 123,\n 49,\n 63,\n 99,\n 109,\n 82,\n 94,\n 0,\n 116,\n 124,\n 65,\n 79,\n 16,\n 32,\n 98,\n 110,\n 48,\n 115,\n 125,\n 81,\n 95,\n 64,\n 114,\n 126,\n 97,\n 111,\n 80,\n 113,\n 127,\n 96,\n 112\n ],\n me = [\n 2954,\n 2956,\n 2958,\n 2962,\n 2970,\n 2986,\n 3018,\n 3082,\n 3212,\n 3468,\n 3980,\n 5004\n ],\n ie = 8,\n Lb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 17,\n 18,\n 19,\n 20,\n 20,\n 21,\n 21,\n 22,\n 22,\n 23,\n 23,\n 24,\n 25,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70,\n 71,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 79,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 91,\n 93,\n 95,\n 96,\n 98,\n 100,\n 101,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 118,\n 122,\n 124,\n 126,\n 128,\n 130,\n 132,\n 134,\n 136,\n 138,\n 140,\n 143,\n 145,\n 148,\n 151,\n 154,\n 157\n ],\n Mb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 60,\n 62,\n 64,\n 66,\n 68,\n 70,\n 72,\n 74,\n 76,\n 78,\n 80,\n 82,\n 84,\n 86,\n 88,\n 90,\n 92,\n 94,\n 96,\n 98,\n 100,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 119,\n 122,\n 125,\n 128,\n 131,\n 134,\n 137,\n 140,\n 143,\n 146,\n 149,\n 152,\n 155,\n 158,\n 161,\n 164,\n 167,\n 170,\n 173,\n 177,\n 181,\n 185,\n 189,\n 193,\n 197,\n 201,\n 205,\n 209,\n 213,\n 217,\n 221,\n 225,\n 229,\n 234,\n 239,\n 245,\n 249,\n 254,\n 259,\n 264,\n 269,\n 274,\n 279,\n 284\n ],\n oa = null,\n He = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n ],\n Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n Fe = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ]\n ],\n Ke = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36]\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111, 32, 75, 80],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22]\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22, 64, 171, 36, 225, 114],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51]\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82]\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73, 154],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47]\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98]\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26]\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160, 1],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40]\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128]\n ],\n [\n [190, 80, 35, 99, 180, 80, 126, 54, 45],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24]\n ]\n ],\n Ee = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ]\n ],\n Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n Nc,\n Y = [],\n W = [],\n ka = [],\n Za,\n fd,\n Nb,\n pa,\n Ob,\n Xc,\n Tc,\n Yc,\n Uc,\n Zc,\n Vc,\n $c,\n Wc,\n Rc,\n Pc,\n Sc,\n Qc,\n re = 1,\n Cc = 2,\n ia = [],\n za,\n vc,\n fc,\n Fc,\n P = [];\n va(\"UpsampleRgbLinePair\", Ga, 3);\n va(\"UpsampleBgrLinePair\", Tb, 3);\n va(\"UpsampleRgbaLinePair\", wd, 4);\n va(\"UpsampleBgraLinePair\", vd, 4);\n va(\"UpsampleArgbLinePair\", ud, 4);\n va(\"UpsampleRgba4444LinePair\", td, 2);\n va(\"UpsampleRgb565LinePair\", sd, 2);\n var Mf = self.UpsampleRgbLinePair,\n Nf = self.UpsampleBgrLinePair,\n nd = self.UpsampleRgbaLinePair,\n od = self.UpsampleBgraLinePair,\n pd = self.UpsampleArgbLinePair,\n qd = self.UpsampleRgba4444LinePair,\n Of = self.UpsampleRgb565LinePair,\n Wa = 16,\n Ba = 1 << (Wa - 1),\n ta = -227,\n Eb = 482,\n rd = 6,\n Pf = (256 << rd) - 1,\n jc = 0,\n Yd = V(256),\n ae = V(256),\n $d = V(256),\n Zd = V(256),\n be = V(Eb - ta),\n ce = V(Eb - ta);\n la(\"YuvToRgbRow\", Ga, 3);\n la(\"YuvToBgrRow\", Tb, 3);\n la(\"YuvToRgbaRow\", wd, 4);\n la(\"YuvToBgraRow\", vd, 4);\n la(\"YuvToArgbRow\", ud, 4);\n la(\"YuvToRgba4444Row\", td, 2);\n la(\"YuvToRgb565Row\", sd, 2);\n var zd = [\n 0,\n 4,\n 8,\n 12,\n 128,\n 132,\n 136,\n 140,\n 256,\n 260,\n 264,\n 268,\n 384,\n 388,\n 392,\n 396\n ],\n Ya = [0, 2, 8],\n Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n Ne = 1;\n this.WebPDecodeRGBA = function(a, b, c, d, e) {\n var f = Ua;\n var g = new Cf(),\n h = new Cb();\n g.ba = h;\n h.S = f;\n h.width = [h.width];\n h.height = [h.height];\n var k = h.width;\n var l = h.height,\n m = new Td();\n if (null == m || null == a) var n = 2;\n else\n x(null != m),\n (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n 0 != n\n ? (k = 0)\n : (null != k && (k[0] = m.width[0]),\n null != l && (l[0] = m.height[0]),\n (k = 1));\n if (k) {\n h.width = h.width[0];\n h.height = h.height[0];\n null != d && (d[0] = h.width);\n null != e && (e[0] = h.height);\n b: {\n d = new Oa();\n e = new md();\n e.data = a;\n e.w = b;\n e.ha = c;\n e.kd = 1;\n b = [0];\n x(null != e);\n a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n (0 == a || 7 == a) && b[0] && (a = 4);\n b = a;\n if (0 == b) {\n x(null != g);\n d.data = e.data;\n d.w = e.w + e.offset;\n d.ha = e.ha - e.offset;\n d.put = kc;\n d.ac = gc;\n d.bc = lc;\n d.ma = g;\n if (e.xa) {\n a = Bc();\n if (null == a) {\n g = 1;\n break b;\n }\n if (te(a, d)) {\n b = Cd(d.width, d.height, g.Oa, g.ba);\n if ((d = 0 == b)) {\n c: {\n d = a;\n d: for (;;) {\n if (null == d) {\n d = 0;\n break c;\n }\n x(null != d.s.yc);\n x(null != d.s.Ya);\n x(0 < d.s.Wb);\n c = d.l;\n x(null != c);\n e = c.ma;\n x(null != e);\n if (0 != d.xb) {\n d.ca = e.ba;\n d.tb = e.tb;\n x(null != d.ca);\n if (!hc(e.Oa, c, Va)) {\n d.a = 2;\n break d;\n }\n if (!Ec(d, c.width)) break d;\n if (c.da) break d;\n (c.da || hb(d.ca.S)) && Aa();\n 11 > d.ca.S ||\n (alert(\"todo:WebPInitConvertARGBToYUV\"),\n null != d.ca.f.kb.F && Aa());\n if (\n d.Pb &&\n 0 < d.s.ua &&\n null == d.s.vb.X &&\n !Zb(d.s.vb, d.s.Wa.Xa)\n ) {\n d.a = 1;\n break d;\n }\n d.xb = 0;\n }\n if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n e.Dc = d.Ma;\n d = 1;\n break c;\n }\n x(0 != d.a);\n d = 0;\n }\n d = !d;\n }\n d && (b = a.a);\n } else b = a.a;\n } else {\n a = new Ce();\n if (null == a) {\n g = 1;\n break b;\n }\n a.Fa = e.na;\n a.P = e.P;\n a.qc = e.Sa;\n if (Kc(a, d)) {\n if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n a.Aa = 0;\n c = g.Oa;\n e = a;\n x(null != e);\n if (null != c) {\n k = c.Md;\n k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n if (0 < k) {\n for (l = m = 0; 4 > l; ++l)\n (n = e.pb[l]),\n 12 > n.lc &&\n (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n (m |= n.ia);\n m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n }\n e.Ga = c.Id;\n 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n }\n Me(a, d) || (b = a.a);\n }\n } else b = a.a;\n }\n 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n }\n g = b;\n }\n f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n } else f = null;\n return f;\n };\n var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n };\n new _WebPDecoder();\n\n /** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n function memcmp(data, data_off, str, size) {\n for (var i = 0; i < size; i++)\n if (data[data_off + i] != str.charCodeAt(i)) return true;\n return false;\n }\n\n function GetTag(data, data_off) {\n var str = \"\";\n for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n return str;\n }\n\n function GetLE16(data, data_off) {\n return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n }\n\n function GetLE24(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16)) >>>\n 0\n );\n }\n\n function GetLE32(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16) |\n (data[data_off + 3] << 24)) >>>\n 0\n );\n }\n\n function WebPRiffParser(src, src_off) {\n var imagearray = {};\n var i = 0;\n var alpha_chunk = false;\n var alpha_size = 0;\n var alpha_offset = 0;\n imagearray[\"frames\"] = [];\n if (memcmp(src, src_off, \"RIFF\", 4)) return;\n src_off += 4;\n var riff_size = GetLE32(src, src_off) + 8;\n src_off += 8;\n\n while (src_off < src.length) {\n var fourcc = GetTag(src, src_off);\n src_off += 4;\n\n var payload_size = GetLE32(src, src_off);\n src_off += 4;\n var payload_size_padded = payload_size + (payload_size & 1);\n\n switch (fourcc) {\n case \"VP8 \":\n case \"VP8L\":\n if (typeof imagearray[\"frames\"][i] === \"undefined\")\n imagearray[\"frames\"][i] = {};\n var obj = imagearray[\"frames\"][i];\n var height = [0];\n var width = [0];\n obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n obj[\"src_size\"] = alpha_size + payload_size + 8;\n //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n i++;\n if (alpha_chunk) {\n alpha_chunk = false;\n alpha_size = 0;\n alpha_offset = 0;\n }\n break;\n case \"VP8X\":\n var obj = (imagearray[\"header\"] = {});\n var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n var src_off_ = src_off + 4;\n var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n var canvas_height = (obj[\"canvas_height\"] =\n 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n break;\n case \"ALPH\":\n alpha_chunk = true;\n alpha_size = payload_size_padded + 8;\n alpha_offset = src_off - 8;\n break;\n\n case \"ANIM\":\n var obj = imagearray[\"header\"];\n var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n src_off_ = src_off + 4;\n\n var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n src_off_ += 2;\n break;\n case \"ANMF\":\n var offset_x = 0,\n offset_y = 0,\n width = 0,\n height = 0,\n duration = 0,\n blend = 0,\n dispose = 0,\n temp = 0;\n var obj = (imagearray[\"frames\"][i] = {});\n obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"duration\"] = duration = GetLE24(src, src_off);\n src_off += 3;\n temp = src[src_off++];\n obj[\"dispose\"] = dispose = temp & 1;\n obj[\"blend\"] = blend = (temp >> 1) & 1;\n break;\n default:\n }\n if (fourcc != \"ANMF\") src_off += payload_size_padded;\n }\n return imagearray;\n }\n\n var height = [0];\n var width = [0];\n var pixels = [];\n var webpdecoder = new _WebPDecoder();\n\n var response = imageData;\n var imagearray = WebPRiffParser(response, 0);\n imagearray[\"response\"] = response;\n imagearray[\"rgbaoutput\"] = true;\n imagearray[\"dataurl\"] = false;\n\n var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n if (header) {\n header[\"loop_counter\"] = header[\"loop_count\"];\n height = [header[\"canvas_height\"]];\n width = [header[\"canvas_width\"]];\n\n var blend = false;\n for (var f = 0; f < frames.length; f++)\n if (frames[f][\"blend\"] == 0) {\n blend = true;\n break;\n }\n }\n\n var frame = frames[0];\n var rgba = webpdecoder.WebPDecodeRGBA(\n response,\n frame[\"src_off\"],\n frame[\"src_size\"],\n width,\n height\n );\n frame[\"rgba\"] = rgba;\n frame[\"imgwidth\"] = width[0];\n frame[\"imgheight\"] = height[0];\n\n for (var i = 0; i < width[0] * height[0] * 4; i++) {\n pixels[i] = rgba[i];\n }\n\n this.width = width;\n this.height = height;\n this.data = pixels;\n return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n var reader = new WebPDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name processRGBA\n * @function\n *\n * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n * RGBA array data can be obtained from DOM canvas getImageData.\n * @ignore\n */\n jsPDFAPI.processRGBA = function(imageData, index, alias) {\n \"use strict\";\n\n var imagePixels = imageData.data;\n var length = imagePixels.length;\n // jsPDF takes alpha data separately so extract that.\n var rgbOut = new Uint8Array((length / 4) * 3);\n var alphaOut = new Uint8Array(length / 4);\n var outIndex = 0;\n var alphaIndex = 0;\n\n for (var i = 0; i < length; i += 4) {\n var r = imagePixels[i];\n var g = imagePixels[i + 1];\n var b = imagePixels[i + 2];\n var alpha = imagePixels[i + 3];\n rgbOut[outIndex++] = r;\n rgbOut[outIndex++] = g;\n rgbOut[outIndex++] = b;\n alphaOut[alphaIndex++] = alpha;\n }\n\n var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n return {\n alpha: alphaData,\n data: rgbData,\n index: index,\n alias: alias,\n colorSpace: \"DeviceRGB\",\n bitsPerComponent: 8,\n width: imageData.width,\n height: imageData.height\n };\n };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Add Language Tag to the generated PDF\n *\n * @name setLanguage\n * @function\n * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF()\n * doc.text(10, 10, 'This is a test')\n * doc.setLanguage(\"en-US\")\n * doc.save('english.pdf')\n */\n jsPDFAPI.setLanguage = function(langCode) {\n \"use strict\";\n\n var langCodes = {\n af: \"Afrikaans\",\n sq: \"Albanian\",\n ar: \"Arabic (Standard)\",\n \"ar-DZ\": \"Arabic (Algeria)\",\n \"ar-BH\": \"Arabic (Bahrain)\",\n \"ar-EG\": \"Arabic (Egypt)\",\n \"ar-IQ\": \"Arabic (Iraq)\",\n \"ar-JO\": \"Arabic (Jordan)\",\n \"ar-KW\": \"Arabic (Kuwait)\",\n \"ar-LB\": \"Arabic (Lebanon)\",\n \"ar-LY\": \"Arabic (Libya)\",\n \"ar-MA\": \"Arabic (Morocco)\",\n \"ar-OM\": \"Arabic (Oman)\",\n \"ar-QA\": \"Arabic (Qatar)\",\n \"ar-SA\": \"Arabic (Saudi Arabia)\",\n \"ar-SY\": \"Arabic (Syria)\",\n \"ar-TN\": \"Arabic (Tunisia)\",\n \"ar-AE\": \"Arabic (U.A.E.)\",\n \"ar-YE\": \"Arabic (Yemen)\",\n an: \"Aragonese\",\n hy: \"Armenian\",\n as: \"Assamese\",\n ast: \"Asturian\",\n az: \"Azerbaijani\",\n eu: \"Basque\",\n be: \"Belarusian\",\n bn: \"Bengali\",\n bs: \"Bosnian\",\n br: \"Breton\",\n bg: \"Bulgarian\",\n my: \"Burmese\",\n ca: \"Catalan\",\n ch: \"Chamorro\",\n ce: \"Chechen\",\n zh: \"Chinese\",\n \"zh-HK\": \"Chinese (Hong Kong)\",\n \"zh-CN\": \"Chinese (PRC)\",\n \"zh-SG\": \"Chinese (Singapore)\",\n \"zh-TW\": \"Chinese (Taiwan)\",\n cv: \"Chuvash\",\n co: \"Corsican\",\n cr: \"Cree\",\n hr: \"Croatian\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch (Standard)\",\n \"nl-BE\": \"Dutch (Belgian)\",\n en: \"English\",\n \"en-AU\": \"English (Australia)\",\n \"en-BZ\": \"English (Belize)\",\n \"en-CA\": \"English (Canada)\",\n \"en-IE\": \"English (Ireland)\",\n \"en-JM\": \"English (Jamaica)\",\n \"en-NZ\": \"English (New Zealand)\",\n \"en-PH\": \"English (Philippines)\",\n \"en-ZA\": \"English (South Africa)\",\n \"en-TT\": \"English (Trinidad & Tobago)\",\n \"en-GB\": \"English (United Kingdom)\",\n \"en-US\": \"English (United States)\",\n \"en-ZW\": \"English (Zimbabwe)\",\n eo: \"Esperanto\",\n et: \"Estonian\",\n fo: \"Faeroese\",\n fj: \"Fijian\",\n fi: \"Finnish\",\n fr: \"French (Standard)\",\n \"fr-BE\": \"French (Belgium)\",\n \"fr-CA\": \"French (Canada)\",\n \"fr-FR\": \"French (France)\",\n \"fr-LU\": \"French (Luxembourg)\",\n \"fr-MC\": \"French (Monaco)\",\n \"fr-CH\": \"French (Switzerland)\",\n fy: \"Frisian\",\n fur: \"Friulian\",\n gd: \"Gaelic (Scots)\",\n \"gd-IE\": \"Gaelic (Irish)\",\n gl: \"Galacian\",\n ka: \"Georgian\",\n de: \"German (Standard)\",\n \"de-AT\": \"German (Austria)\",\n \"de-DE\": \"German (Germany)\",\n \"de-LI\": \"German (Liechtenstein)\",\n \"de-LU\": \"German (Luxembourg)\",\n \"de-CH\": \"German (Switzerland)\",\n el: \"Greek\",\n gu: \"Gujurati\",\n ht: \"Haitian\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n is: \"Icelandic\",\n id: \"Indonesian\",\n iu: \"Inuktitut\",\n ga: \"Irish\",\n it: \"Italian (Standard)\",\n \"it-CH\": \"Italian (Switzerland)\",\n ja: \"Japanese\",\n kn: \"Kannada\",\n ks: \"Kashmiri\",\n kk: \"Kazakh\",\n km: \"Khmer\",\n ky: \"Kirghiz\",\n tlh: \"Klingon\",\n ko: \"Korean\",\n \"ko-KP\": \"Korean (North Korea)\",\n \"ko-KR\": \"Korean (South Korea)\",\n la: \"Latin\",\n lv: \"Latvian\",\n lt: \"Lithuanian\",\n lb: \"Luxembourgish\",\n mk: \"North Macedonia\",\n ms: \"Malay\",\n ml: \"Malayalam\",\n mt: \"Maltese\",\n mi: \"Maori\",\n mr: \"Marathi\",\n mo: \"Moldavian\",\n nv: \"Navajo\",\n ng: \"Ndonga\",\n ne: \"Nepali\",\n no: \"Norwegian\",\n nb: \"Norwegian (Bokmal)\",\n nn: \"Norwegian (Nynorsk)\",\n oc: \"Occitan\",\n or: \"Oriya\",\n om: \"Oromo\",\n fa: \"Persian\",\n \"fa-IR\": \"Persian/Iran\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n \"pt-BR\": \"Portuguese (Brazil)\",\n pa: \"Punjabi\",\n \"pa-IN\": \"Punjabi (India)\",\n \"pa-PK\": \"Punjabi (Pakistan)\",\n qu: \"Quechua\",\n rm: \"Rhaeto-Romanic\",\n ro: \"Romanian\",\n \"ro-MO\": \"Romanian (Moldavia)\",\n ru: \"Russian\",\n \"ru-MO\": \"Russian (Moldavia)\",\n sz: \"Sami (Lappish)\",\n sg: \"Sango\",\n sa: \"Sanskrit\",\n sc: \"Sardinian\",\n sd: \"Sindhi\",\n si: \"Singhalese\",\n sr: \"Serbian\",\n sk: \"Slovak\",\n sl: \"Slovenian\",\n so: \"Somani\",\n sb: \"Sorbian\",\n es: \"Spanish\",\n \"es-AR\": \"Spanish (Argentina)\",\n \"es-BO\": \"Spanish (Bolivia)\",\n \"es-CL\": \"Spanish (Chile)\",\n \"es-CO\": \"Spanish (Colombia)\",\n \"es-CR\": \"Spanish (Costa Rica)\",\n \"es-DO\": \"Spanish (Dominican Republic)\",\n \"es-EC\": \"Spanish (Ecuador)\",\n \"es-SV\": \"Spanish (El Salvador)\",\n \"es-GT\": \"Spanish (Guatemala)\",\n \"es-HN\": \"Spanish (Honduras)\",\n \"es-MX\": \"Spanish (Mexico)\",\n \"es-NI\": \"Spanish (Nicaragua)\",\n \"es-PA\": \"Spanish (Panama)\",\n \"es-PY\": \"Spanish (Paraguay)\",\n \"es-PE\": \"Spanish (Peru)\",\n \"es-PR\": \"Spanish (Puerto Rico)\",\n \"es-ES\": \"Spanish (Spain)\",\n \"es-UY\": \"Spanish (Uruguay)\",\n \"es-VE\": \"Spanish (Venezuela)\",\n sx: \"Sutu\",\n sw: \"Swahili\",\n sv: \"Swedish\",\n \"sv-FI\": \"Swedish (Finland)\",\n \"sv-SV\": \"Swedish (Sweden)\",\n ta: \"Tamil\",\n tt: \"Tatar\",\n te: \"Teluga\",\n th: \"Thai\",\n tig: \"Tigre\",\n ts: \"Tsonga\",\n tn: \"Tswana\",\n tr: \"Turkish\",\n tk: \"Turkmen\",\n uk: \"Ukrainian\",\n hsb: \"Upper Sorbian\",\n ur: \"Urdu\",\n ve: \"Venda\",\n vi: \"Vietnamese\",\n vo: \"Volapuk\",\n wa: \"Walloon\",\n cy: \"Welsh\",\n xh: \"Xhosa\",\n ji: \"Yiddish\",\n zu: \"Zulu\"\n };\n\n if (this.internal.languageSettings === undefined) {\n this.internal.languageSettings = {};\n this.internal.languageSettings.isSubscribed = false;\n }\n\n if (langCodes[langCode] !== undefined) {\n this.internal.languageSettings.languageCode = langCode;\n if (this.internal.languageSettings.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.write(\n \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n );\n });\n this.internal.languageSettings.isSubscribed = true;\n }\n }\n return this;\n };\n})(jsPDF.API);\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n \"use strict\";\n /**\n * Returns an array of length matching length of the 'word' string, with each\n * cell occupied by the width of the char in that position.\n *\n * @name getCharWidthsArray\n * @function\n * @param {string} text\n * @param {Object} options\n * @returns {Array}\n */\n var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n options = options || {};\n\n var activeFont = options.font || this.internal.getFont();\n var fontSize = options.fontSize || this.internal.getFontSize();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n\n var widths = options.widths\n ? options.widths\n : activeFont.metadata.Unicode.widths;\n var widthsFractionOf = widths.fof ? widths.fof : 1;\n var kerning = options.kerning\n ? options.kerning\n : activeFont.metadata.Unicode.kerning;\n var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n var doKerning = options.doKerning === false ? false : true;\n var kerningValue = 0;\n\n var i;\n var length = text.length;\n var char_code;\n var prior_char_code = 0; //for kerning\n var default_char_width = widths[0] || widthsFractionOf;\n var output = [];\n\n for (i = 0; i < length; i++) {\n char_code = text.charCodeAt(i);\n\n if (typeof activeFont.metadata.widthOfString === \"function\") {\n output.push(\n (activeFont.metadata.widthOfGlyph(\n activeFont.metadata.characterToGlyph(char_code)\n ) +\n charSpace * (1000 / fontSize) || 0) / 1000\n );\n } else {\n if (\n doKerning &&\n typeof kerning[char_code] === \"object\" &&\n !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n ) {\n kerningValue =\n kerning[char_code][prior_char_code] / kerningFractionOf;\n } else {\n kerningValue = 0;\n }\n output.push(\n (widths[char_code] || default_char_width) / widthsFractionOf +\n kerningValue\n );\n }\n prior_char_code = char_code;\n }\n\n return output;\n });\n\n /**\n * Returns a widths of string in a given font, if the font size is set as 1 point.\n *\n * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n * of the string will be that much.\n *\n * Multiply by font size to get actual width in *points*\n * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n *\n * @name getStringUnitWidth\n * @public\n * @function\n * @param {string} text\n * @param {string} options\n * @returns {number} result\n */\n var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n options = options || {};\n\n var fontSize = options.fontSize || this.internal.getFontSize();\n var font = options.font || this.internal.getFont();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n var result = 0;\n\n if (API.processArabic) {\n text = API.processArabic(text);\n }\n\n if (typeof font.metadata.widthOfString === \"function\") {\n result =\n font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n } else {\n result = getCharWidthsArray\n .apply(this, arguments)\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n }\n return result;\n });\n\n /**\n returns array of lines\n */\n var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n var answer = [];\n\n // 1st, chop off the piece that can fit on the hanging line.\n var i = 0,\n l = word.length,\n workingLen = 0;\n while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n workingLen += widths_array[i];\n i++;\n }\n // this is first line.\n answer.push(word.slice(0, i));\n\n // 2nd. Split the rest into maxLen pieces.\n var startOfLine = i;\n workingLen = 0;\n while (i !== l) {\n if (workingLen + widths_array[i] > maxLen) {\n answer.push(word.slice(startOfLine, i));\n workingLen = 0;\n startOfLine = i;\n }\n workingLen += widths_array[i];\n i++;\n }\n if (startOfLine !== i) {\n answer.push(word.slice(startOfLine, i));\n }\n\n return answer;\n };\n\n // Note, all sizing inputs for this function must be in \"font measurement units\"\n // By default, for PDF, it's \"point\".\n var splitParagraphIntoLines = function(text, maxlen, options) {\n // at this time works only on Western scripts, ones with space char\n // separating the words. Feel free to expand.\n\n if (!options) {\n options = {};\n }\n\n var line = [],\n lines = [line],\n line_length = options.textIndent || 0,\n separator_length = 0,\n current_word_length = 0,\n word,\n widths_array,\n words = text.split(\" \"),\n spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n i,\n l,\n tmp,\n lineIndent;\n\n if (options.lineIndent === -1) {\n lineIndent = words[0].length + 2;\n } else {\n lineIndent = options.lineIndent || 0;\n }\n if (lineIndent) {\n var pad = Array(lineIndent).join(\" \"),\n wrds = [];\n words.map(function(wrd) {\n wrd = wrd.split(/\\s*\\n/);\n if (wrd.length > 1) {\n wrds = wrds.concat(\n wrd.map(function(wrd, idx) {\n return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n })\n );\n } else {\n wrds.push(wrd[0]);\n }\n });\n words = wrds;\n lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n }\n\n for (i = 0, l = words.length; i < l; i++) {\n var force = 0;\n\n word = words[i];\n if (lineIndent && word[0] == \"\\n\") {\n word = word.substr(1);\n force = 1;\n }\n widths_array = getCharWidthsArray.apply(this, [word, options]);\n current_word_length = widths_array.reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n\n if (\n line_length + separator_length + current_word_length > maxlen ||\n force\n ) {\n if (current_word_length > maxlen) {\n // this happens when you have space-less long URLs for example.\n // we just chop these to size. We do NOT insert hiphens\n tmp = splitLongWord.apply(this, [\n word,\n widths_array,\n maxlen - (line_length + separator_length),\n maxlen\n ]);\n // first line we add to existing line object\n line.push(tmp.shift()); // it's ok to have extra space indicator there\n // last line we make into new line object\n line = [tmp.pop()];\n // lines in the middle we apped to lines object as whole lines\n while (tmp.length) {\n lines.push([tmp.shift()]); // single fragment occupies whole line\n }\n current_word_length = widths_array\n .slice(word.length - (line[0] ? line[0].length : 0))\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n } else {\n // just put it on a new line\n line = [word];\n }\n\n // now we attach new line to lines\n lines.push(line);\n line_length = current_word_length + lineIndent;\n separator_length = spaceCharWidth;\n } else {\n line.push(word);\n\n line_length += separator_length + current_word_length;\n separator_length = spaceCharWidth;\n }\n }\n\n var postProcess;\n if (lineIndent) {\n postProcess = function(ln, idx) {\n return (idx ? pad : \"\") + ln.join(\" \");\n };\n } else {\n postProcess = function(ln) {\n return ln.join(\" \");\n };\n }\n\n return lines.map(postProcess);\n };\n\n /**\n * Splits a given string into an array of strings. Uses 'size' value\n * (in measurement units declared as default for the jsPDF instance)\n * and the font's \"widths\" and \"Kerning\" tables, where available, to\n * determine display length of a given string for a given font.\n *\n * We use character's 100% of unit size (height) as width when Width\n * table or other default width is not available.\n *\n * @name splitTextToSize\n * @public\n * @function\n * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n * @param {Object} options Optional flags needed for chopper to do the right thing.\n * @returns {Array} array Array with strings chopped to size.\n */\n API.splitTextToSize = function(text, maxlen, options) {\n \"use strict\";\n\n options = options || {};\n\n var fsize = options.fontSize || this.internal.getFontSize(),\n newOptions = function(options) {\n var widths = {\n 0: 1\n },\n kerning = {};\n\n if (!options.widths || !options.kerning) {\n var f = this.internal.getFont(options.fontName, options.fontStyle),\n encoding = \"Unicode\";\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n // Actual JavaScript-native String's 16bit char codes used.\n // no multi-byte logic here\n\n if (f.metadata[encoding]) {\n return {\n widths: f.metadata[encoding].widths || widths,\n kerning: f.metadata[encoding].kerning || kerning\n };\n } else {\n return {\n font: f.metadata,\n fontSize: this.internal.getFontSize(),\n charSpace: this.internal.getCharSpace()\n };\n }\n } else {\n return {\n widths: options.widths,\n kerning: options.kerning\n };\n }\n }.call(this, options);\n\n // first we split on end-of-line chars\n var paragraphs;\n if (Array.isArray(text)) {\n paragraphs = text;\n } else {\n paragraphs = String(text).split(/\\r?\\n/);\n }\n\n // now we convert size (max length of line) into \"font size units\"\n // at present time, the \"font size unit\" is always 'point'\n // 'proportional' means, \"in proportion to font size\"\n var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n // this may change in the future?\n // until then, proportional_maxlen is likely to be in 'points'\n\n // If first line is to be indented (shorter or longer) than maxLen\n // we indicate that by using CSS-style \"text-indent\" option.\n // here it's in font units too (which is likely 'points')\n // it can be negative (which makes the first line longer than maxLen)\n newOptions.textIndent = options.textIndent\n ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n : 0;\n newOptions.lineIndent = options.lineIndent;\n\n var i,\n l,\n output = [];\n for (i = 0, l = paragraphs.length; i < l; i++) {\n output = output.concat(\n splitParagraphIntoLines.apply(this, [\n paragraphs[i],\n fontUnit_maxLen,\n newOptions\n ])\n );\n }\n\n return output;\n };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n \"use strict\";\n API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n var decoded = \"0123456789abcdef\",\n encoded = \"klmnopqrstuvwxyz\",\n mappingUncompress = {},\n mappingCompress = {};\n\n for (var i = 0; i < encoded.length; i++) {\n mappingUncompress[encoded[i]] = decoded[i];\n mappingCompress[decoded[i]] = encoded[i];\n }\n\n var hex = function(value) {\n return \"0x\" + parseInt(value, 10).toString(16);\n };\n\n var compress = (API.__fontmetrics__.compress = function(data) {\n var vals = [\"{\"];\n var value, keystring, valuestring, numberprefix;\n\n for (var key in data) {\n value = data[key];\n\n if (!isNaN(parseInt(key, 10))) {\n key = parseInt(key, 10);\n keystring = hex(key).slice(2);\n keystring =\n keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n } else {\n keystring = \"'\" + key + \"'\";\n }\n\n if (typeof value == \"number\") {\n if (value < 0) {\n valuestring = hex(value).slice(3);\n numberprefix = \"-\";\n } else {\n valuestring = hex(value).slice(2);\n numberprefix = \"\";\n }\n valuestring =\n numberprefix +\n valuestring.slice(0, -1) +\n mappingCompress[valuestring.slice(-1)];\n } else {\n if (typeof value === \"object\") {\n valuestring = compress(value);\n } else {\n throw new Error(\n \"Don't know what to do with value type \" + typeof value + \".\"\n );\n }\n }\n vals.push(keystring + valuestring);\n }\n vals.push(\"}\");\n return vals.join(\"\");\n });\n\n /**\n * Uncompresses data compressed into custom, base16-like format.\n *\n * @public\n * @function\n * @param\n * @returns {Type}\n */\n var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n if (typeof data !== \"string\") {\n throw new Error(\"Invalid argument passed to uncompress.\");\n }\n\n var output = {},\n sign = 1,\n stringparts, // undef. will be [] in string mode\n activeobject = output,\n parentchain = [],\n parent_key_pair,\n keyparts = \"\",\n valueparts = \"\",\n key, // undef. will be Truthy when Key is resolved.\n datalen = data.length - 1, // stripping ending }\n ch;\n\n for (var i = 1; i < datalen; i += 1) {\n // - { } ' are special.\n\n ch = data[i];\n\n if (ch == \"'\") {\n if (stringparts) {\n // end of string mode\n key = stringparts.join(\"\");\n stringparts = undefined;\n } else {\n // start of string mode\n stringparts = [];\n }\n } else if (stringparts) {\n stringparts.push(ch);\n } else if (ch == \"{\") {\n // start of object\n parentchain.push([activeobject, key]);\n activeobject = {};\n key = undefined;\n } else if (ch == \"}\") {\n // end of object\n parent_key_pair = parentchain.pop();\n parent_key_pair[0][parent_key_pair[1]] = activeobject;\n key = undefined;\n activeobject = parent_key_pair[0];\n } else if (ch == \"-\") {\n sign = -1;\n } else {\n // must be number\n if (key === undefined) {\n if (mappingUncompress.hasOwnProperty(ch)) {\n keyparts += mappingUncompress[ch];\n key = parseInt(keyparts, 16) * sign;\n sign = +1;\n keyparts = \"\";\n } else {\n keyparts += ch;\n }\n } else {\n if (mappingUncompress.hasOwnProperty(ch)) {\n valueparts += mappingUncompress[ch];\n activeobject[key] = parseInt(valueparts, 16) * sign;\n sign = +1;\n key = undefined;\n valueparts = \"\";\n } else {\n valueparts += ch;\n }\n }\n }\n }\n return output;\n });\n\n // encoding = 'Unicode'\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n // Actual 16bit char codes used.\n // no multi-byte logic here\n\n // Unicode characters to WinAnsiEncoding:\n // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n // as well as give strings with some (supported by these fonts) Unicode characters and\n // these will be mapped to win cp1252\n // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n var encodingBlock = {\n codePages: [\"WinAnsiEncoding\"],\n WinAnsiEncoding: uncompress(\n \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n )\n };\n var encodings = {\n Unicode: {\n Courier: encodingBlock,\n \"Courier-Bold\": encodingBlock,\n \"Courier-BoldOblique\": encodingBlock,\n \"Courier-Oblique\": encodingBlock,\n Helvetica: encodingBlock,\n \"Helvetica-Bold\": encodingBlock,\n \"Helvetica-BoldOblique\": encodingBlock,\n \"Helvetica-Oblique\": encodingBlock,\n \"Times-Roman\": encodingBlock,\n \"Times-Bold\": encodingBlock,\n \"Times-BoldItalic\": encodingBlock,\n \"Times-Italic\": encodingBlock\n //\t, 'Symbol'\n //\t, 'ZapfDingbats'\n }\n };\n\n var fontMetrics = {\n Unicode: {\n // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n // width is 476/1000 or 47.6% of its height (regardless of font size)\n // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n \"Courier-Oblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-BoldItalic\": uncompress(\n \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n \"Helvetica-Bold\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-BoldOblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-Bold\": uncompress(\n \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n Symbol: uncompress(\n \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n ),\n Helvetica: uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n ),\n \"Helvetica-BoldOblique\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Times-Italic\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n ),\n \"Times-Roman\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n ),\n \"Helvetica-Oblique\": uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n )\n }\n };\n\n /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n API.events.push([\n \"addFont\",\n function(data) {\n var font = data.font;\n\n var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n if (metrics) {\n font.metadata[\"Unicode\"] = {};\n font.metadata[\"Unicode\"].widths = metrics.widths;\n font.metadata[\"Unicode\"].kerning = metrics.kerning;\n }\n\n var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n if (encodingBlock) {\n font.metadata[\"Unicode\"].encoding = encodingBlock;\n font.encoding = encodingBlock.codePages[0];\n }\n }\n ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n\n var binaryStringToUint8Array = function(binary_string) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n };\n\n var addFont = function(font, file) {\n // eslint-disable-next-line no-control-regex\n if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n file = binaryStringToUint8Array(file);\n } else {\n file = binaryStringToUint8Array(atob(file));\n }\n font.metadata = jsPDF.API.TTFFont.open(file);\n font.metadata.Unicode = font.metadata.Unicode || {\n encoding: {},\n kerning: {},\n widths: []\n };\n font.metadata.glyIdsUsed = [0];\n };\n\n jsPDF.API.events.push([\n \"addFont\",\n function(data) {\n var file = undefined;\n var font = data.font;\n var instance = data.instance;\n if (font.isStandardFont) {\n return;\n }\n if (typeof instance !== \"undefined\") {\n if (instance.existsFileInVFS(font.postScriptName) === false) {\n file = instance.loadFile(font.postScriptName);\n } else {\n file = instance.getFileFromVFS(font.postScriptName);\n }\n if (typeof file !== \"string\") {\n throw new Error(\n \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n addFont(font, file);\n } else {\n throw new Error(\n \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n }\n ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadCanvg() {\n return (function() {\n if (globalObject[\"canvg\"]) {\n return Promise.resolve(globalObject[\"canvg\"]);\n }\n\n return import(\"canvg\");\n\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load canvg: \" + e));\n })\n .then(function(canvg) {\n return canvg.default ? canvg.default : canvg;\n });\n }\n\n /**\n * Parses SVG XML and saves it as image into the PDF.\n *\n * Depends on canvas-element and canvg\n *\n * @name addSvgAsImage\n * @public\n * @function\n * @param {string} SVG-Data as Text\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n * @param {string} alias of SVG-Image (if used multiple times)\n * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation of the image in degrees (0-359)\n *\n * @returns jsPDF jsPDF-instance\n */\n jsPDFAPI.addSvgAsImage = function(\n svg,\n x,\n y,\n w,\n h,\n alias,\n compression,\n rotation\n ) {\n if (isNaN(x) || isNaN(y)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n }\n\n if (isNaN(w) || isNaN(h)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n throw new Error(\n \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n );\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"#fff\"; /// set white fill style\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var options = {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true\n };\n var doc = this;\n return loadCanvg()\n .then(\n function(canvg) {\n return canvg.fromString(ctx, svg, options);\n },\n function() {\n return Promise.reject(new Error(\"Could not load canvg.\"));\n }\n )\n .then(function(instance) {\n return instance.render(options);\n })\n .then(function() {\n doc.addImage(\n canvas.toDataURL(\"image/jpeg\", 1.0),\n x,\n y,\n w,\n h,\n compression,\n rotation\n );\n });\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * @name putTotalPages\n * @function\n * @param {string} pageExpression Regular Expression\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.putTotalPages = function(pageExpression) {\n \"use strict\";\n\n var replaceExpression;\n var totalNumberOfPages = 0;\n if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n replaceExpression = new RegExp(pageExpression, \"g\");\n totalNumberOfPages = this.internal.getNumberOfPages();\n } else {\n replaceExpression = new RegExp(\n this.pdfEscape16(pageExpression, this.internal.getFont()),\n \"g\"\n );\n totalNumberOfPages = this.pdfEscape16(\n this.internal.getNumberOfPages() + \"\",\n this.internal.getFont()\n );\n }\n\n for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n for (var i = 0; i < this.internal.pages[n].length; i++) {\n this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n replaceExpression,\n totalNumberOfPages\n );\n }\n }\n\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * Set the ViewerPreferences of the generated PDF\n *\n * @name viewerPreferences\n * @function\n * @public\n * @param {Object} options Array with the ViewerPreferences
    \n * Example: doc.viewerPreferences({\"FitWindow\":true});
    \n *
    \n * You can set following preferences:
    \n *
    \n * HideToolbar (boolean)
    \n * Default value: false
    \n *
    \n * HideMenubar (boolean)
    \n * Default value: false.
    \n *
    \n * HideWindowUI (boolean)
    \n * Default value: false.
    \n *
    \n * FitWindow (boolean)
    \n * Default value: false.
    \n *
    \n * CenterWindow (boolean)
    \n * Default value: false
    \n *
    \n * DisplayDocTitle (boolean)
    \n * Default value: false.
    \n *
    \n * NonFullScreenPageMode (string)
    \n * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    \n * Default value: UseNone
    \n *
    \n * Direction (string)
    \n * Possible values: L2R, R2L
    \n * Default value: L2R.
    \n *
    \n * ViewArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * ViewClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * PrintScaling (string)
    \n * Possible values: AppDefault, None
    \n * Default value: AppDefault.
    \n *
    \n * Duplex (string)
    \n * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n * Default value: none
    \n *
    \n * PickTrayByPDFSize (boolean)
    \n * Default value: false
    \n *
    \n * PrintPageRange (Array)
    \n * Example: [[1,5], [7,9]]
    \n * Default value: as defined by PDF viewer application
    \n *
    \n * NumCopies (Number)
    \n * Possible values: 1, 2, 3, 4, 5
    \n * Default value: 1
    \n *
    \n * For more information see the PDF Reference, sixth edition on Page 577\n * @param {boolean} doReset True to reset the settings\n * @function\n * @returns jsPDF jsPDF-instance\n * @example\n * var doc = new jsPDF()\n * doc.text('This is a test', 10, 10)\n * doc.viewerPreferences({'FitWindow': true}, true)\n * doc.save(\"viewerPreferences.pdf\")\n *\n * // Example printing 10 copies, using cropbox, and hiding UI.\n * doc.viewerPreferences({\n * 'HideWindowUI': true,\n * 'PrintArea': 'CropBox',\n * 'NumCopies': 10\n * })\n */\n jsPDFAPI.viewerPreferences = function(options, doReset) {\n options = options || {};\n doReset = doReset || false;\n\n var configuration;\n var configurationTemplate = {\n HideToolbar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideMenubar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideWindowUI: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n FitWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n CenterWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n DisplayDocTitle: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.4\n },\n NonFullScreenPageMode: {\n defaultValue: \"UseNone\",\n value: \"UseNone\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n pdfVersion: 1.3\n },\n Direction: {\n defaultValue: \"L2R\",\n value: \"L2R\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"L2R\", \"R2L\"],\n pdfVersion: 1.3\n },\n ViewArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n ViewClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintScaling: {\n defaultValue: \"AppDefault\",\n value: \"AppDefault\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"AppDefault\", \"None\"],\n pdfVersion: 1.6\n },\n Duplex: {\n defaultValue: \"\",\n value: \"none\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\n \"Simplex\",\n \"DuplexFlipShortEdge\",\n \"DuplexFlipLongEdge\",\n \"none\"\n ],\n pdfVersion: 1.7\n },\n PickTrayByPDFSize: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.7\n },\n PrintPageRange: {\n defaultValue: \"\",\n value: \"\",\n type: \"array\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n },\n NumCopies: {\n defaultValue: 1,\n value: 1,\n type: \"integer\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n }\n };\n\n var configurationKeys = Object.keys(configurationTemplate);\n\n var rangeArray = [];\n var i = 0;\n var j = 0;\n var k = 0;\n var isValid;\n\n var method;\n var value;\n\n function arrayContainsElement(array, element) {\n var iterator;\n var result = false;\n\n for (iterator = 0; iterator < array.length; iterator += 1) {\n if (array[iterator] === element) {\n result = true;\n }\n }\n return result;\n }\n\n if (this.internal.viewerpreferences === undefined) {\n this.internal.viewerpreferences = {};\n this.internal.viewerpreferences.configuration = JSON.parse(\n JSON.stringify(configurationTemplate)\n );\n this.internal.viewerpreferences.isSubscribed = false;\n }\n configuration = this.internal.viewerpreferences.configuration;\n\n if (options === \"reset\" || doReset === true) {\n var len = configurationKeys.length;\n\n for (k = 0; k < len; k += 1) {\n configuration[configurationKeys[k]].value =\n configuration[configurationKeys[k]].defaultValue;\n configuration[configurationKeys[k]].explicitSet = false;\n }\n }\n\n if (typeof options === \"object\") {\n for (method in options) {\n value = options[method];\n if (\n arrayContainsElement(configurationKeys, method) &&\n value !== undefined\n ) {\n if (\n configuration[method].type === \"boolean\" &&\n typeof value === \"boolean\"\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"name\" &&\n arrayContainsElement(configuration[method].valueSet, value)\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"integer\" &&\n Number.isInteger(value)\n ) {\n configuration[method].value = value;\n } else if (configuration[method].type === \"array\") {\n for (i = 0; i < value.length; i += 1) {\n isValid = true;\n if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n rangeArray.push(String(value[i] - 1));\n } else if (value[i].length > 1) {\n for (j = 0; j < value[i].length; j += 1) {\n if (typeof value[i][j] !== \"number\") {\n isValid = false;\n }\n }\n if (isValid === true) {\n rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n }\n }\n }\n configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n } else {\n configuration[method].value = configuration[method].defaultValue;\n }\n\n configuration[method].explicitSet = true;\n }\n }\n }\n\n if (this.internal.viewerpreferences.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n var pdfDict = [];\n var vPref;\n for (vPref in configuration) {\n if (configuration[vPref].explicitSet === true) {\n if (configuration[vPref].type === \"name\") {\n pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n } else {\n pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n }\n }\n }\n if (pdfDict.length !== 0) {\n this.internal.write(\n \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n );\n }\n });\n this.internal.viewerpreferences.isSubscribed = true;\n }\n\n this.internal.viewerpreferences.configuration = configuration;\n return this;\n };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var postPutResources = function() {\n var xmpmeta_beginning = '';\n var rdf_beginning =\n '';\n var rdf_ending = \"\";\n var xmpmeta_ending = \"\";\n var utf8_xmpmeta_beginning = unescape(\n encodeURIComponent(xmpmeta_beginning)\n );\n var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n var utf8_metadata = unescape(\n encodeURIComponent(this.internal.__metadata__.metadata)\n );\n var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n var total_len =\n utf8_rdf_beginning.length +\n utf8_metadata.length +\n utf8_rdf_ending.length +\n utf8_xmpmeta_beginning.length +\n utf8_xmpmeta_ending.length;\n\n this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n this.internal.write(\n \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n );\n this.internal.write(\"stream\");\n this.internal.write(\n utf8_xmpmeta_beginning +\n utf8_rdf_beginning +\n utf8_metadata +\n utf8_rdf_ending +\n utf8_xmpmeta_ending\n );\n this.internal.write(\"endstream\");\n this.internal.write(\"endobj\");\n };\n\n var putCatalog = function() {\n if (this.internal.__metadata__.metadata_object_number) {\n this.internal.write(\n \"/Metadata \" +\n this.internal.__metadata__.metadata_object_number +\n \" 0 R\"\n );\n }\n };\n\n /**\n * Adds XMP formatted metadata to PDF\n *\n * @name addMetadata\n * @function\n * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n * @returns {jsPDF} jsPDF-instance\n */\n jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n if (typeof this.internal.__metadata__ === \"undefined\") {\n this.internal.__metadata__ = {\n metadata: metadata,\n namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n };\n this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n this.internal.events.subscribe(\"postPutResources\", postPutResources);\n }\n return this;\n };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n var jsPDFAPI = jsPDF.API;\n\n /***************************************************************************************************/\n /* function : pdfEscape16 */\n /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n /* the corresponding glyph id and width, and then adding padding to the string. */\n /***************************************************************************************************/\n var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n var widths = font.metadata.Unicode.widths;\n var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n var ar = [\"\"];\n for (var i = 0, l = text.length, t; i < l; ++i) {\n t = font.metadata.characterToGlyph(text.charCodeAt(i));\n font.metadata.glyIdsUsed.push(t);\n font.metadata.toUnicode[t] = text.charCodeAt(i);\n if (widths.indexOf(t) == -1) {\n widths.push(t);\n widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n }\n if (t == \"0\") {\n //Spaces are not allowed in cmap.\n return ar.join(\"\");\n } else {\n t = t.toString(16);\n ar.push(padz[4 - t.length], t);\n }\n }\n return ar.join(\"\");\n });\n\n var toUnicodeCmap = function(map) {\n var code, codes, range, unicode, unicodeMap, _i, _len;\n unicodeMap =\n \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\";\n codes = Object.keys(map).sort(function(a, b) {\n return a - b;\n });\n\n range = [];\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (range.length >= 100) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\";\n range = [];\n }\n\n if (\n map[code] !== undefined &&\n map[code] !== null &&\n typeof map[code].toString === \"function\"\n ) {\n unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n code = (\"0000\" + (+code).toString(16)).slice(-4);\n range.push(\"<\" + code + \"><\" + unicode + \">\");\n }\n }\n\n if (range.length) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\\n\";\n }\n unicodeMap +=\n \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n return unicodeMap;\n };\n\n var identityHFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"Identity-H\"\n ) {\n //Tag with Identity-H\n var widths = font.metadata.Unicode.widths;\n var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Type /FontDescriptor\");\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/Flags \" + font.metadata.flags);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\">>\");\n out(\"endobj\");\n\n var DescendantFont = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n out(\"/CIDToGIDMap /Identity\");\n out(\"/DW 1000\");\n out(\"/Subtype /CIDFontType2\");\n out(\"/CIDSystemInfo\");\n out(\"<<\");\n out(\"/Supplement 0\");\n out(\"/Registry (Adobe)\");\n out(\"/Ordering (\" + font.encoding + \")\");\n out(\">>\");\n out(\">>\");\n out(\"endobj\");\n\n font.objectNumber = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/Subtype /Type0\");\n out(\"/ToUnicode \" + cmap + \" 0 R\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/Encoding /\" + font.encoding);\n out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n out(\">>\");\n out(\"endobj\");\n\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n identityHFunction(args);\n }\n ]);\n\n var winAnsiEncodingFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"WinAnsiEncoding\"\n ) {\n //Tag with WinAnsi encoding\n var data = font.metadata.rawData;\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/Type /FontDescriptor\");\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/Flags 96\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\">>\");\n out(\"endobj\");\n font.objectNumber = newObject();\n for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n font.metadata.hmtx.widths[j] = parseInt(\n font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n ); //Change the width of Em units to Point units.\n }\n out(\n \"<>\"\n );\n out(\"endobj\");\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n winAnsiEncodingFunction(args);\n }\n ]);\n\n var utf8TextFunction = function(args) {\n var text = args.text || \"\";\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n\n var pdfEscape = mutex.pdfEscape;\n var activeFontKey = mutex.activeFontKey;\n var fonts = mutex.fonts;\n var key = activeFontKey;\n\n var str = \"\",\n s = 0,\n cmapConfirm;\n var strText = \"\";\n var encoding = fonts[key].encoding;\n\n if (fonts[key].encoding !== \"Identity-H\") {\n return {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n }\n strText = text;\n\n key = activeFontKey;\n if (Array.isArray(text)) {\n strText = text[0];\n }\n for (s = 0; s < strText.length; s += 1) {\n if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n cmapConfirm =\n fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n /*\n if (Object.prototype.toString.call(text) === '[object Array]') {\n var i = 0;\n // for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n } else {\n\n }\n //}\n\n } else {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n }*/\n }\n if (!cmapConfirm) {\n if (\n strText[s].charCodeAt(0) < 256 &&\n fonts[key].metadata.hasOwnProperty(\"Unicode\")\n ) {\n str += strText[s];\n } else {\n str += \"\";\n }\n } else {\n str += strText[s];\n }\n }\n var result = \"\";\n if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n //For the default 13 font\n result = pdfEscape(str, key)\n .split(\"\")\n .map(function(cv) {\n return cv.charCodeAt(0).toString(16);\n })\n .join(\"\");\n } else if (encoding === \"Identity-H\") {\n result = pdfEscape16(str, fonts[key]);\n }\n mutex.isHex = true;\n\n return {\n text: result,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n };\n\n var utf8EscapeFunction = function(parms) {\n var text = parms.text || \"\",\n x = parms.x,\n y = parms.y,\n options = parms.options,\n mutex = parms.mutex;\n var tmpText = [];\n var args = {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n\n if (Array.isArray(text)) {\n var i = 0;\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n if (text[i].length === 3) {\n tmpText.push([\n utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n .text,\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n }\n parms.text = tmpText;\n } else {\n parms.text = utf8TextFunction(\n Object.assign({}, args, { text: text })\n ).text;\n }\n };\n\n jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var _initializeVFS = function() {\n if (typeof this.internal.vFS === \"undefined\") {\n this.internal.vFS = {};\n }\n return true;\n };\n\n /**\n * Check if the file exists in the vFS\n *\n * @name existsFileInVFS\n * @function\n * @param {string} Possible filename in the vFS.\n * @returns {boolean}\n * @example\n * doc.existsFileInVFS(\"someFile.txt\");\n */\n jsPDFAPI.existsFileInVFS = function(filename) {\n _initializeVFS.call(this);\n return typeof this.internal.vFS[filename] !== \"undefined\";\n };\n\n /**\n * Add a file to the vFS\n *\n * @name addFileToVFS\n * @function\n * @param {string} filename The name of the file which should be added.\n * @param {string} filecontent The content of the file.\n * @returns {jsPDF}\n * @example\n * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n */\n jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n _initializeVFS.call(this);\n this.internal.vFS[filename] = filecontent;\n return this;\n };\n\n /**\n * Get the file from the vFS\n *\n * @name getFileFromVFS\n * @function\n * @param {string} The name of the file which gets requested.\n * @returns {string}\n * @example\n * doc.getFileFromVFS(\"someFile.txt\");\n */\n jsPDFAPI.getFileFromVFS = function(filename) {\n _initializeVFS.call(this);\n\n if (typeof this.internal.vFS[filename] !== \"undefined\") {\n return this.internal.vFS[filename];\n }\n return null;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n \"use strict\";\n /**\n * Table of Unicode types.\n *\n * Generated by:\n *\n * var bidi = require(\"./bidi/index\");\n * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n *\n * for( var i = 0; i < bidi_accumulate.length; i++) {\n * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n * }\n * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n *\n * Based on:\n * https://github.com/mathiasbynens/unicode-8.0.0\n */\n var bidiUnicodeTypes = [\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"S\",\n \"B\",\n \"S\",\n \"WS\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"B\",\n \"B\",\n \"S\",\n \"WS\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"CS\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"EN\",\n \"EN\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"N\",\n \"N\",\n \"AL\",\n \"ET\",\n \"ET\",\n \"AL\",\n \"CS\",\n \"AL\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"ET\",\n \"AN\",\n \"AN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"L\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"B\",\n \"LRE\",\n \"RLE\",\n \"PDF\",\n \"LRO\",\n \"RLO\",\n \"CS\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"N\",\n \"LRI\",\n \"RLI\",\n \"FSI\",\n \"PDI\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"NSM\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"ES\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"N\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\"\n ];\n\n /**\n * Unicode Bidi algorithm compliant Bidi engine.\n * For reference see http://unicode.org/reports/tr9/\n */\n\n /**\n * constructor ( options )\n *\n * Initializes Bidi engine\n *\n * @param {Object} See 'setOptions' below for detailed description.\n * options are cashed between invocation of 'doBidiReorder' method\n *\n * sample usage pattern of BidiEngine:\n * var opt = {\n * \tisInputVisual: true,\n * \tisInputRtl: false,\n * \tisOutputVisual: false,\n * \tisOutputRtl: false,\n * \tisSymmetricSwapping: true\n * }\n * var sourceToTarget = [], levels = [];\n * var bidiEng = Globalize.bidiEngine(opt);\n * var src = \"text string to be reordered\";\n * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n */\n\n jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n var _STATE_TABLE_LTR = [\n [0, 3, 0, 1, 0, 0, 0],\n [0, 3, 0, 1, 2, 2, 0],\n [0, 3, 0, 0x11, 2, 0, 1],\n [0, 3, 5, 5, 4, 1, 0],\n [0, 3, 0x15, 0x15, 4, 0, 1],\n [0, 3, 5, 5, 4, 2, 0]\n ];\n\n var _STATE_TABLE_RTL = [\n [2, 0, 1, 1, 0, 1, 0],\n [2, 0, 1, 1, 0, 2, 0],\n [2, 0, 2, 1, 3, 2, 0],\n [2, 0, 2, 0x21, 3, 1, 1]\n ];\n\n var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n var _UNICODE_RANGES_MAP = {\n 0: 0,\n 5: 1,\n 6: 2,\n 7: 3,\n 0x20: 4,\n 0xfb: 5,\n 0xfe: 6,\n 0xff: 7\n };\n\n var _SWAP_TABLE = [\n \"\\u0028\",\n \"\\u0029\",\n \"\\u0028\",\n \"\\u003C\",\n \"\\u003E\",\n \"\\u003C\",\n \"\\u005B\",\n \"\\u005D\",\n \"\\u005B\",\n \"\\u007B\",\n \"\\u007D\",\n \"\\u007B\",\n \"\\u00AB\",\n \"\\u00BB\",\n \"\\u00AB\",\n \"\\u2039\",\n \"\\u203A\",\n \"\\u2039\",\n \"\\u2045\",\n \"\\u2046\",\n \"\\u2045\",\n \"\\u207D\",\n \"\\u207E\",\n \"\\u207D\",\n \"\\u208D\",\n \"\\u208E\",\n \"\\u208D\",\n \"\\u2264\",\n \"\\u2265\",\n \"\\u2264\",\n \"\\u2329\",\n \"\\u232A\",\n \"\\u2329\",\n \"\\uFE59\",\n \"\\uFE5A\",\n \"\\uFE59\",\n \"\\uFE5B\",\n \"\\uFE5C\",\n \"\\uFE5B\",\n \"\\uFE5D\",\n \"\\uFE5E\",\n \"\\uFE5D\",\n \"\\uFE64\",\n \"\\uFE65\",\n \"\\uFE64\"\n ];\n\n var _LTR_RANGES_REG_EXPR = new RegExp(\n /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n );\n\n var _lastArabic = false,\n _hasUbatAl,\n _hasUbatB,\n _hasUbatS,\n DIR_LTR = 0,\n DIR_RTL = 1,\n _isInVisual,\n _isInRtl,\n _isOutVisual,\n _isOutRtl,\n _isSymmetricSwapping,\n _dir = DIR_LTR;\n\n this.__bidiEngine__ = {};\n\n var _init = function(text, sourceToTargetMap) {\n if (sourceToTargetMap) {\n for (var i = 0; i < text.length; i++) {\n sourceToTargetMap[i] = i;\n }\n }\n if (_isInRtl === undefined) {\n _isInRtl = _isContextualDirRtl(text);\n }\n if (_isOutRtl === undefined) {\n _isOutRtl = _isContextualDirRtl(text);\n }\n };\n\n // for reference see 3.2 in http://unicode.org/reports/tr9/\n //\n var _getCharType = function(ch) {\n var charCode = ch.charCodeAt(),\n range = charCode >> 8,\n rangeIdx = _UNICODE_RANGES_MAP[range];\n\n if (rangeIdx !== undefined) {\n return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n } else if (range === 0xfc || range === 0xfd) {\n return \"AL\";\n } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n //unlikely case\n return \"L\";\n } else if (range === 8) {\n // even less likely\n return \"R\";\n }\n return \"N\"; //undefined type, mark as neutral\n };\n\n var _isContextualDirRtl = function(text) {\n for (var i = 0, charType; i < text.length; i++) {\n charType = _getCharType(text.charAt(i));\n if (charType === \"L\") {\n return false;\n } else if (charType === \"R\") {\n return true;\n }\n }\n return false;\n };\n\n // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n //\n var _resolveCharType = function(chars, types, resolvedTypes, index) {\n var cType = types[index],\n wType,\n nType,\n i,\n len;\n switch (cType) {\n case \"L\":\n case \"R\":\n _lastArabic = false;\n break;\n case \"N\":\n case \"AN\":\n break;\n\n case \"EN\":\n if (_lastArabic) {\n cType = \"AN\";\n }\n break;\n\n case \"AL\":\n _lastArabic = true;\n _hasUbatAl = true;\n cType = \"R\";\n break;\n\n case \"WS\":\n cType = \"N\";\n break;\n\n case \"CS\":\n if (\n index < 1 ||\n index + 1 >= types.length ||\n ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n ) {\n cType = \"N\";\n } else if (_lastArabic) {\n nType = \"AN\";\n }\n cType = nType === wType ? nType : \"N\";\n break;\n\n case \"ES\":\n wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n cType =\n wType === \"EN\" &&\n index + 1 < types.length &&\n types[index + 1] === \"EN\"\n ? \"EN\"\n : \"N\";\n break;\n\n case \"ET\":\n if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n cType = \"EN\";\n break;\n } else if (_lastArabic) {\n cType = \"N\";\n break;\n }\n i = index + 1;\n len = types.length;\n while (i < len && types[i] === \"ET\") {\n i++;\n }\n if (i < len && types[i] === \"EN\") {\n cType = \"EN\";\n } else {\n cType = \"N\";\n }\n break;\n\n case \"NSM\":\n if (_isInVisual && !_isInRtl) {\n //V->L\n len = types.length;\n i = index + 1;\n while (i < len && types[i] === \"NSM\") {\n i++;\n }\n if (i < len) {\n var c = chars[index];\n var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n wType = types[i];\n if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n cType = \"R\";\n break;\n }\n }\n }\n if (index < 1 || (wType = types[index - 1]) === \"B\") {\n cType = \"N\";\n } else {\n cType = resolvedTypes[index - 1];\n }\n break;\n\n case \"B\":\n _lastArabic = false;\n _hasUbatB = true;\n cType = _dir;\n break;\n\n case \"S\":\n _hasUbatS = true;\n cType = \"N\";\n break;\n\n case \"LRE\":\n case \"RLE\":\n case \"LRO\":\n case \"RLO\":\n case \"PDF\":\n _lastArabic = false;\n break;\n case \"BN\":\n cType = \"N\";\n break;\n }\n return cType;\n };\n\n var _handleUbatS = function(types, levels, length) {\n for (var i = 0; i < length; i++) {\n if (types[i] === \"S\") {\n levels[i] = _dir;\n for (var j = i - 1; j >= 0; j--) {\n if (types[j] === \"WS\") {\n levels[j] = _dir;\n } else {\n break;\n }\n }\n }\n }\n };\n\n var _invertString = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\");\n if (levels) {\n _computeLevels(charArray, levels, { hiLevel: _dir });\n }\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return charArray.join(\"\");\n };\n\n // For reference see 3.3 in http://unicode.org/reports/tr9/\n //\n var _computeLevels = function(chars, levels, params) {\n var action,\n condition,\n i,\n index,\n newLevel,\n prevState,\n condPos = -1,\n len = chars.length,\n newState = 0,\n resolvedTypes = [],\n stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n types = [];\n\n _lastArabic = false;\n _hasUbatAl = false;\n _hasUbatB = false;\n _hasUbatS = false;\n for (i = 0; i < len; i++) {\n types[i] = _getCharType(chars[i]);\n }\n for (index = 0; index < len; index++) {\n prevState = newState;\n resolvedTypes[index] = _resolveCharType(\n chars,\n types,\n resolvedTypes,\n index\n );\n newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n action = newState & 0xf0;\n newState &= 0x0f;\n levels[index] = newLevel = stateTable[newState][5];\n if (action > 0) {\n if (action === 0x10) {\n for (i = condPos; i < index; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n condition = stateTable[newState][6];\n if (condition) {\n if (condPos === -1) {\n condPos = index;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < index; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (types[index] === \"B\") {\n levels[index] = 0;\n }\n params.hiLevel |= newLevel;\n }\n if (_hasUbatS) {\n _handleUbatS(types, levels, len);\n }\n };\n\n // for reference see 3.4 in http://unicode.org/reports/tr9/\n //\n var _invertByLevel = function(\n level,\n charArray,\n sourceToTargetMap,\n levels,\n params\n ) {\n if (params.hiLevel < level) {\n return;\n }\n if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return;\n }\n var ch,\n high,\n end,\n low,\n len = charArray.length,\n start = 0;\n\n while (start < len) {\n if (levels[start] >= level) {\n end = start + 1;\n while (end < len && levels[end] >= level) {\n end++;\n }\n for (low = start, high = end - 1; low < high; low++, high--) {\n ch = charArray[low];\n charArray[low] = charArray[high];\n charArray[high] = ch;\n if (sourceToTargetMap) {\n ch = sourceToTargetMap[low];\n sourceToTargetMap[low] = sourceToTargetMap[high];\n sourceToTargetMap[high] = ch;\n }\n }\n start = end;\n }\n start++;\n }\n };\n\n // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n //\n var _symmetricSwap = function(charArray, levels, params) {\n if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n for (var i = 0, index; i < charArray.length; i++) {\n if (levels[i] === 1) {\n index = _SWAP_TABLE.indexOf(charArray[i]);\n if (index >= 0) {\n charArray[i] = _SWAP_TABLE[index + 1];\n }\n }\n }\n }\n };\n\n var _reorder = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\"),\n params = { hiLevel: _dir };\n\n if (!levels) {\n levels = [];\n }\n _computeLevels(charArray, levels, params);\n _symmetricSwap(charArray, levels, params);\n _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n return charArray.join(\"\");\n };\n\n // doBidiReorder( text, sourceToTargetMap, levels )\n // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n // Returns reordered string\n // @text [String]:\n // - input string to be reordered, this is input parameter\n // $sourceToTargetMap [Array] (optional)\n // - resultant mapping between input and output strings, this is output parameter\n // $levels [Array] (optional)\n // - array of calculated Bidi levels, , this is output parameter\n this.__bidiEngine__.doBidiReorder = function(\n text,\n sourceToTargetMap,\n levels\n ) {\n _init(text, sourceToTargetMap);\n if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n // LLTR->VLTR, LRTL->VLTR\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n // VRTL->VLTR, VLTR->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _invertString(text, sourceToTargetMap, levels);\n } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n // LLTR->VRTL, LRTL->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n // VLTR->LLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // VLTR->LRTL, VRTL->LLTR\n text = _invertString(text, sourceToTargetMap);\n if (_isInRtl) {\n //LLTR -> VLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else {\n //LRTL -> VRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n }\n } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n // VRTL->LRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // LRTL->LLTR, LLTR->LRTL\n var isSymmetricSwappingOrig = _isSymmetricSwapping;\n if (_isInRtl) {\n //LRTL->LLTR\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n _dir = DIR_LTR;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n } else {\n //LLTR->LRTL\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n _dir = DIR_RTL;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n text = _invertString(text, sourceToTargetMap);\n }\n }\n return text;\n };\n\n /**\n * @name setOptions( options )\n * @function\n * Sets options for Bidi conversion\n * @param {Object}:\n * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n */\n this.__bidiEngine__.setOptions = function(options) {\n if (options) {\n _isInVisual = options.isInputVisual;\n _isOutVisual = options.isOutputVisual;\n _isInRtl = options.isInputRtl;\n _isOutRtl = options.isOutputRtl;\n _isSymmetricSwapping = options.isSymmetricSwapping;\n }\n };\n\n this.__bidiEngine__.setOptions(options);\n return this.__bidiEngine__;\n };\n\n var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n var bidiEngineFunction = function(args) {\n var text = args.text;\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n var lang = options.lang;\n var tmpText = [];\n\n options.isInputVisual =\n typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n bidiEngine.setOptions(options);\n\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n tmpText.push([\n bidiEngine.doBidiReorder(text[i][0]),\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n }\n }\n args.text = tmpText;\n } else {\n args.text = bidiEngine.doBidiReorder(text);\n }\n bidiEngine.setOptions({ isInputVisual: true });\n };\n\n jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font *\n * Start Data : 2017. 01. 22. *\n * Comment : TEXT API *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n /************************************************************************/\n /* function : open */\n /* comment : Decode the encoded ttf content and create a TTFFont object. */\n /************************************************************************/\n TTFFont.open = function(file) {\n return new TTFFont(file);\n };\n /***************************************************************/\n /* function : TTFFont gernerator */\n /* comment : Decode TTF contents are parsed, Data, */\n /* Subset object is created, and registerTTF function is called.*/\n /***************************************************************/\n function TTFFont(rawData) {\n var data;\n this.rawData = rawData;\n data = this.contents = new Data(rawData);\n this.contents.pos = 4;\n if (data.readString(4) === \"ttcf\") {\n throw new Error(\"TTCF not supported.\");\n } else {\n data.pos = 0;\n this.parse();\n this.subset = new Subset(this);\n this.registerTTF();\n }\n }\n /********************************************************/\n /* function : parse */\n /* comment : TTF Parses the file contents by each table.*/\n /********************************************************/\n TTFFont.prototype.parse = function() {\n this.directory = new Directory(this.contents);\n this.head = new HeadTable(this);\n this.name = new NameTable(this);\n this.cmap = new CmapTable(this);\n this.toUnicode = {};\n this.hhea = new HheaTable(this);\n this.maxp = new MaxpTable(this);\n this.hmtx = new HmtxTable(this);\n this.post = new PostTable(this);\n this.os2 = new OS2Table(this);\n this.loca = new LocaTable(this);\n this.glyf = new GlyfTable(this);\n this.ascender =\n (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n this.decender =\n (this.os2.exists && this.os2.decender) || this.hhea.decender;\n this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n return (this.bbox = [\n this.head.xMin,\n this.head.yMin,\n this.head.xMax,\n this.head.yMax\n ]);\n };\n /***************************************************************/\n /* function : registerTTF */\n /* comment : Get the value to assign pdf font descriptors. */\n /***************************************************************/\n TTFFont.prototype.registerTTF = function() {\n var e, hi, low, raw, _ref;\n this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n this.bbox = function() {\n var _i, _len, _ref, _results;\n _ref = this.bbox;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n e = _ref[_i];\n _results.push(Math.round(e * this.scaleFactor));\n }\n return _results;\n }.call(this);\n this.stemV = 0;\n if (this.post.exists) {\n raw = this.post.italic_angle;\n hi = raw >> 16;\n low = raw & 0xff;\n if ((hi & 0x8000) !== 0) {\n hi = -((hi ^ 0xffff) + 1);\n }\n this.italicAngle = +(\"\" + hi + \".\" + low);\n } else {\n this.italicAngle = 0;\n }\n this.ascender = Math.round(this.ascender * this.scaleFactor);\n this.decender = Math.round(this.decender * this.scaleFactor);\n this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n this.isSerif =\n (_ref = this.familyClass) === 1 ||\n _ref === 2 ||\n _ref === 3 ||\n _ref === 4 ||\n _ref === 5 ||\n _ref === 7;\n this.isScript = this.familyClass === 10;\n this.flags = 0;\n if (this.post.isFixedPitch) {\n this.flags |= 1 << 0;\n }\n if (this.isSerif) {\n this.flags |= 1 << 1;\n }\n if (this.isScript) {\n this.flags |= 1 << 3;\n }\n if (this.italicAngle !== 0) {\n this.flags |= 1 << 6;\n }\n this.flags |= 1 << 5;\n if (!this.cmap.unicode) {\n throw new Error(\"No unicode cmap for font\");\n }\n };\n TTFFont.prototype.characterToGlyph = function(character) {\n var _ref;\n return (\n ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n 0\n );\n };\n TTFFont.prototype.widthOfGlyph = function(glyph) {\n var scale;\n scale = 1000.0 / this.head.unitsPerEm;\n return this.hmtx.forGlyph(glyph).advance * scale;\n };\n TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n var charCode, i, scale, width, _ref;\n string = \"\" + string;\n width = 0;\n for (\n i = 0, _ref = string.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n charCode = string.charCodeAt(i);\n width +=\n this.widthOfGlyph(this.characterToGlyph(charCode)) +\n charSpace * (1000 / size) || 0;\n }\n scale = size / 1000;\n return width * scale;\n };\n TTFFont.prototype.lineHeight = function(size, includeGap) {\n var gap;\n if (includeGap == null) {\n includeGap = false;\n }\n gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.decender) / 1000) * size;\n };\n return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n function Data(data) {\n this.data = data != null ? data : [];\n this.pos = 0;\n this.length = this.data.length;\n }\n Data.prototype.readByte = function() {\n return this.data[this.pos++];\n };\n Data.prototype.writeByte = function(byte) {\n return (this.data[this.pos++] = byte);\n };\n Data.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.readByte() * 0x1000000;\n b2 = this.readByte() << 16;\n b3 = this.readByte() << 8;\n b4 = this.readByte();\n return b1 + b2 + b3 + b4;\n };\n Data.prototype.writeUInt32 = function(val) {\n this.writeByte((val >>> 24) & 0xff);\n this.writeByte((val >> 16) & 0xff);\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt32 = function() {\n var int;\n int = this.readUInt32();\n if (int >= 0x80000000) {\n return int - 0x100000000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt32 = function(val) {\n if (val < 0) {\n val += 0x100000000;\n }\n return this.writeUInt32(val);\n };\n Data.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.readByte() << 8;\n b2 = this.readByte();\n return b1 | b2;\n };\n Data.prototype.writeUInt16 = function(val) {\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt16 = function() {\n var int;\n int = this.readUInt16();\n if (int >= 0x8000) {\n return int - 0x10000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt16 = function(val) {\n if (val < 0) {\n val += 0x10000;\n }\n return this.writeUInt16(val);\n };\n Data.prototype.readString = function(length) {\n var i, ret;\n ret = [];\n for (\n i = 0;\n 0 <= length ? i < length : i > length;\n i = 0 <= length ? ++i : --i\n ) {\n ret[i] = String.fromCharCode(this.readByte());\n }\n return ret.join(\"\");\n };\n Data.prototype.writeString = function(val) {\n var i, _ref, _results;\n _results = [];\n for (\n i = 0, _ref = val.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n _results.push(this.writeByte(val.charCodeAt(i)));\n }\n return _results;\n };\n /*Data.prototype.stringAt = function (pos, length) {\n this.pos = pos;\n return this.readString(length);\n };*/\n Data.prototype.readShort = function() {\n return this.readInt16();\n };\n Data.prototype.writeShort = function(val) {\n return this.writeInt16(val);\n };\n Data.prototype.readLongLong = function() {\n var b1, b2, b3, b4, b5, b6, b7, b8;\n b1 = this.readByte();\n b2 = this.readByte();\n b3 = this.readByte();\n b4 = this.readByte();\n b5 = this.readByte();\n b6 = this.readByte();\n b7 = this.readByte();\n b8 = this.readByte();\n if (b1 & 0x80) {\n return (\n ((b1 ^ 0xff) * 0x100000000000000 +\n (b2 ^ 0xff) * 0x1000000000000 +\n (b3 ^ 0xff) * 0x10000000000 +\n (b4 ^ 0xff) * 0x100000000 +\n (b5 ^ 0xff) * 0x1000000 +\n (b6 ^ 0xff) * 0x10000 +\n (b7 ^ 0xff) * 0x100 +\n (b8 ^ 0xff) +\n 1) *\n -1\n );\n }\n return (\n b1 * 0x100000000000000 +\n b2 * 0x1000000000000 +\n b3 * 0x10000000000 +\n b4 * 0x100000000 +\n b5 * 0x1000000 +\n b6 * 0x10000 +\n b7 * 0x100 +\n b8\n );\n };\n Data.prototype.writeLongLong = function(val) {\n var high, low;\n high = Math.floor(val / 0x100000000);\n low = val & 0xffffffff;\n this.writeByte((high >> 24) & 0xff);\n this.writeByte((high >> 16) & 0xff);\n this.writeByte((high >> 8) & 0xff);\n this.writeByte(high & 0xff);\n this.writeByte((low >> 24) & 0xff);\n this.writeByte((low >> 16) & 0xff);\n this.writeByte((low >> 8) & 0xff);\n return this.writeByte(low & 0xff);\n };\n Data.prototype.readInt = function() {\n return this.readInt32();\n };\n Data.prototype.writeInt = function(val) {\n return this.writeInt32(val);\n };\n /*Data.prototype.slice = function (start, end) {\n return this.data.slice(start, end);\n };*/\n Data.prototype.read = function(bytes) {\n var buf, i;\n buf = [];\n for (\n i = 0;\n 0 <= bytes ? i < bytes : i > bytes;\n i = 0 <= bytes ? ++i : --i\n ) {\n buf.push(this.readByte());\n }\n return buf;\n };\n Data.prototype.write = function(bytes) {\n var byte, i, _len, _results;\n _results = [];\n for (i = 0, _len = bytes.length; i < _len; i++) {\n byte = bytes[i];\n _results.push(this.writeByte(byte));\n }\n return _results;\n };\n return Data;\n})();\n\nvar Directory = (function() {\n var checksum;\n\n /*****************************************************************************************************/\n /* function : Directory generator */\n /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n /*****************************************************************************************************/\n function Directory(data) {\n var entry, i, _ref;\n this.scalarType = data.readInt();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n this.tables = {};\n for (\n i = 0, _ref = this.tableCount;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n entry = {\n tag: data.readString(4),\n checksum: data.readInt(),\n offset: data.readInt(),\n length: data.readInt()\n };\n this.tables[entry.tag] = entry;\n }\n }\n /********************************************************************************************************/\n /* function : encode */\n /* comment : It encodes and stores the font table object and information used for the directory object. */\n /********************************************************************************************************/\n Directory.prototype.encode = function(tables) {\n var adjustment,\n directory,\n directoryLength,\n entrySelector,\n headOffset,\n log2,\n offset,\n rangeShift,\n searchRange,\n sum,\n table,\n tableCount,\n tableData,\n tag;\n tableCount = Object.keys(tables).length;\n log2 = Math.log(2);\n searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n entrySelector = Math.floor(searchRange / log2);\n rangeShift = tableCount * 16 - searchRange;\n directory = new Data();\n directory.writeInt(this.scalarType);\n directory.writeShort(tableCount);\n directory.writeShort(searchRange);\n directory.writeShort(entrySelector);\n directory.writeShort(rangeShift);\n directoryLength = tableCount * 16;\n offset = directory.pos + directoryLength;\n headOffset = null;\n tableData = [];\n for (tag in tables) {\n table = tables[tag];\n directory.writeString(tag);\n directory.writeInt(checksum(table));\n directory.writeInt(offset);\n directory.writeInt(table.length);\n tableData = tableData.concat(table);\n if (tag === \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.push(0);\n offset++;\n }\n }\n directory.write(tableData);\n sum = checksum(directory.data);\n adjustment = 0xb1b0afba - sum;\n directory.pos = headOffset + 8;\n directory.writeUInt32(adjustment);\n return directory.data;\n };\n /***************************************************************/\n /* function : checksum */\n /* comment : Duplicate the table for the tag. */\n /***************************************************************/\n checksum = function(data) {\n var i, sum, tmp, _ref;\n data = __slice.call(data);\n while (data.length % 4) {\n data.push(0);\n }\n tmp = new Data(data);\n sum = 0;\n for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n sum += tmp.readUInt32();\n }\n return sum & 0xffffffff;\n };\n return Directory;\n})();\n\nvar Table,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) {\n for (var key in parent) {\n if (__hasProp.call(parent, key)) child[key] = parent[key];\n }\n\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n\n/***************************************************************/\n/* function : Table */\n/* comment : Save info for each table, and parse the table. */\n/***************************************************************/\nTable = (function() {\n function Table(file) {\n var info;\n this.file = file;\n info = this.file.directory.tables[this.tag];\n this.exists = !!info;\n if (info) {\n (this.offset = info.offset), (this.length = info.length);\n this.parse(this.file.contents);\n }\n }\n Table.prototype.parse = function() {};\n Table.prototype.encode = function() {};\n Table.prototype.raw = function() {\n if (!this.exists) {\n return null;\n }\n this.file.contents.pos = this.offset;\n return this.file.contents.read(this.length);\n };\n return Table;\n})();\n\nvar HeadTable = (function(_super) {\n __extends(HeadTable, _super);\n\n function HeadTable() {\n return HeadTable.__super__.constructor.apply(this, arguments);\n }\n HeadTable.prototype.tag = \"head\";\n HeadTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.revision = data.readInt();\n this.checkSumAdjustment = data.readInt();\n this.magicNumber = data.readInt();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.readLongLong();\n this.modified = data.readLongLong();\n this.xMin = data.readShort();\n this.yMin = data.readShort();\n this.xMax = data.readShort();\n this.yMax = data.readShort();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort();\n this.indexToLocFormat = data.readShort();\n return (this.glyphDataFormat = data.readShort());\n };\n HeadTable.prototype.encode = function(indexToLocFormat) {\n var table;\n table = new Data();\n table.writeInt(this.version);\n table.writeInt(this.revision);\n table.writeInt(this.checkSumAdjustment);\n table.writeInt(this.magicNumber);\n table.writeShort(this.flags);\n table.writeShort(this.unitsPerEm);\n table.writeLongLong(this.created);\n table.writeLongLong(this.modified);\n table.writeShort(this.xMin);\n table.writeShort(this.yMin);\n table.writeShort(this.xMax);\n table.writeShort(this.yMax);\n table.writeShort(this.macStyle);\n table.writeShort(this.lowestRecPPEM);\n table.writeShort(this.fontDirectionHint);\n table.writeShort(indexToLocFormat);\n table.writeShort(this.glyphDataFormat);\n return table.data;\n };\n return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n function CmapEntry(data, offset) {\n var code,\n count,\n endCode,\n glyphId,\n glyphIds,\n i,\n idDelta,\n idRangeOffset,\n index,\n saveOffset,\n segCount,\n segCountX2,\n start,\n startCode,\n tail,\n _j,\n _k,\n _len;\n this.platformID = data.readUInt16();\n this.encodingID = data.readShort();\n this.offset = offset + data.readInt();\n saveOffset = data.pos;\n data.pos = this.offset;\n this.format = data.readUInt16();\n this.length = data.readUInt16();\n this.language = data.readUInt16();\n this.isUnicode =\n (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n (this.platformID === 0 && this.format === 4);\n this.codeMap = {};\n switch (this.format) {\n case 0:\n for (i = 0; i < 256; ++i) {\n this.codeMap[i] = data.readByte();\n }\n break;\n case 4:\n segCountX2 = data.readUInt16();\n segCount = segCountX2 / 2;\n data.pos += 6;\n endCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n data.pos += 2;\n startCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idDelta = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idRangeOffset = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n count = (this.length - data.pos + this.offset) / 2;\n glyphIds = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= count ? _j < count : _j > count;\n i = 0 <= count ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n tail = endCode[i];\n start = startCode[i];\n for (\n code = _k = start;\n start <= tail ? _k <= tail : _k >= tail;\n code = start <= tail ? ++_k : --_k\n ) {\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n this.codeMap[code] = glyphId & 0xffff;\n }\n }\n }\n data.pos = saveOffset;\n }\n CmapEntry.encode = function(charmap, encoding) {\n var charMap,\n code,\n codeMap,\n codes,\n delta,\n deltas,\n diff,\n endCode,\n endCodes,\n entrySelector,\n glyphIDs,\n i,\n id,\n indexes,\n last,\n map,\n nextID,\n offset,\n old,\n rangeOffsets,\n rangeShift,\n searchRange,\n segCount,\n segCountX2,\n startCode,\n startCodes,\n startGlyph,\n subtable,\n _i,\n _j,\n _k,\n _l,\n _len,\n _len1,\n _len2,\n _len3,\n _len4,\n _len5,\n _len6,\n _len7,\n _m,\n _n,\n _name,\n _o,\n _p,\n _q;\n subtable = new Data();\n codes = Object.keys(charmap).sort(function(a, b) {\n return a - b;\n });\n switch (encoding) {\n case \"macroman\":\n id = 0;\n indexes = (function() {\n var _results = [];\n for (i = 0; i < 256; ++i) {\n _results.push(0);\n }\n return _results;\n })();\n map = {\n 0: 0\n };\n codeMap = {};\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (map[(_name = charmap[code])] == null) {\n map[_name] = ++id;\n }\n codeMap[code] = {\n old: charmap[code],\n new: map[charmap[code]]\n };\n indexes[code] = map[charmap[code]];\n }\n subtable.writeUInt16(1);\n subtable.writeUInt16(0);\n subtable.writeUInt32(12);\n subtable.writeUInt16(0);\n subtable.writeUInt16(262);\n subtable.writeUInt16(0);\n subtable.write(indexes);\n return {\n charMap: codeMap,\n subtable: subtable.data,\n maxGlyphID: id + 1\n };\n case \"unicode\":\n startCodes = [];\n endCodes = [];\n nextID = 0;\n map = {};\n charMap = {};\n last = diff = null;\n for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n code = codes[_j];\n old = charmap[code];\n if (map[old] == null) {\n map[old] = ++nextID;\n }\n charMap[code] = {\n old: old,\n new: map[old]\n };\n delta = map[old] - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xffff);\n startCodes.push(0xffff);\n segCount = startCodes.length;\n segCountX2 = segCount * 2;\n searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n entrySelector = Math.log(searchRange / 2) / Math.LN2;\n rangeShift = 2 * segCount - searchRange;\n deltas = [];\n rangeOffsets = [];\n glyphIDs = [];\n for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n startCode = startCodes[i];\n endCode = endCodes[i];\n if (startCode === 0xffff) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n startGlyph = charMap[startCode][\"new\"];\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n for (\n code = _l = startCode;\n startCode <= endCode ? _l <= endCode : _l >= endCode;\n code = startCode <= endCode ? ++_l : --_l\n ) {\n glyphIDs.push(charMap[code][\"new\"]);\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n subtable.writeUInt16(3);\n subtable.writeUInt16(1);\n subtable.writeUInt32(12);\n subtable.writeUInt16(4);\n subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n subtable.writeUInt16(0);\n subtable.writeUInt16(segCountX2);\n subtable.writeUInt16(searchRange);\n subtable.writeUInt16(entrySelector);\n subtable.writeUInt16(rangeShift);\n for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n code = endCodes[_m];\n subtable.writeUInt16(code);\n }\n subtable.writeUInt16(0);\n for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n code = startCodes[_n];\n subtable.writeUInt16(code);\n }\n for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n delta = deltas[_o];\n subtable.writeUInt16(delta);\n }\n for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n offset = rangeOffsets[_p];\n subtable.writeUInt16(offset);\n }\n for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n id = glyphIDs[_q];\n subtable.writeUInt16(id);\n }\n return {\n charMap: charMap,\n subtable: subtable.data,\n maxGlyphID: nextID + 1\n };\n }\n };\n return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n __extends(CmapTable, _super);\n\n function CmapTable() {\n return CmapTable.__super__.constructor.apply(this, arguments);\n }\n CmapTable.prototype.tag = \"cmap\";\n CmapTable.prototype.parse = function(data) {\n var entry, i, tableCount;\n data.pos = this.offset;\n this.version = data.readUInt16();\n tableCount = data.readUInt16();\n this.tables = [];\n this.unicode = null;\n for (\n i = 0;\n 0 <= tableCount ? i < tableCount : i > tableCount;\n i = 0 <= tableCount ? ++i : --i\n ) {\n entry = new CmapEntry(data, this.offset);\n this.tables.push(entry);\n if (entry.isUnicode) {\n if (this.unicode == null) {\n this.unicode = entry;\n }\n }\n }\n return true;\n };\n /*************************************************************************/\n /* function : encode */\n /* comment : Encode the cmap table corresponding to the input character. */\n /*************************************************************************/\n CmapTable.encode = function(charmap, encoding) {\n var result, table;\n if (encoding == null) {\n encoding = \"macroman\";\n }\n result = CmapEntry.encode(charmap, encoding);\n table = new Data();\n table.writeUInt16(0);\n table.writeUInt16(1);\n result.table = table.data.concat(result.subtable);\n return result;\n };\n return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n __extends(HheaTable, _super);\n\n function HheaTable() {\n return HheaTable.__super__.constructor.apply(this, arguments);\n }\n HheaTable.prototype.tag = \"hhea\";\n HheaTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.ascender = data.readShort();\n this.decender = data.readShort();\n this.lineGap = data.readShort();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort();\n this.minRightSideBearing = data.readShort();\n this.xMaxExtent = data.readShort();\n this.caretSlopeRise = data.readShort();\n this.caretSlopeRun = data.readShort();\n this.caretOffset = data.readShort();\n data.pos += 4 * 2;\n this.metricDataFormat = data.readShort();\n return (this.numberOfMetrics = data.readUInt16());\n };\n /*HheaTable.prototype.encode = function (ids) {\n var i, table, _i, _ref;\n table = new Data;\n table.writeInt(this.version);\n table.writeShort(this.ascender);\n table.writeShort(this.decender);\n table.writeShort(this.lineGap);\n table.writeShort(this.advanceWidthMax);\n table.writeShort(this.minLeftSideBearing);\n table.writeShort(this.minRightSideBearing);\n table.writeShort(this.xMaxExtent);\n table.writeShort(this.caretSlopeRise);\n table.writeShort(this.caretSlopeRun);\n table.writeShort(this.caretOffset);\n for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n table.writeByte(0);\n }\n table.writeShort(this.metricDataFormat);\n table.writeUInt16(ids.length);\n return table.data;\n };*/\n return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n __extends(OS2Table, _super);\n\n function OS2Table() {\n return OS2Table.__super__.constructor.apply(this, arguments);\n }\n OS2Table.prototype.tag = \"OS/2\";\n OS2Table.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readUInt16();\n this.averageCharWidth = data.readShort();\n this.weightClass = data.readUInt16();\n this.widthClass = data.readUInt16();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort();\n this.ySubscriptYSize = data.readShort();\n this.ySubscriptXOffset = data.readShort();\n this.ySubscriptYOffset = data.readShort();\n this.ySuperscriptXSize = data.readShort();\n this.ySuperscriptYSize = data.readShort();\n this.ySuperscriptXOffset = data.readShort();\n this.ySuperscriptYOffset = data.readShort();\n this.yStrikeoutSize = data.readShort();\n this.yStrikeoutPosition = data.readShort();\n this.familyClass = data.readShort();\n this.panose = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 10; ++i) {\n _results.push(data.readByte());\n }\n return _results;\n })();\n this.charRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 4; ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort();\n this.descent = data.readShort();\n this.lineGap = data.readShort();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 2; i = ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n return (this.maxContext = data.readShort());\n }\n }\n };\n /*OS2Table.prototype.encode = function () {\n return this.raw();\n };*/\n return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n var POSTSCRIPT_GLYPHS;\n __extends(PostTable, _super);\n\n function PostTable() {\n return PostTable.__super__.constructor.apply(this, arguments);\n }\n PostTable.prototype.tag = \"post\";\n PostTable.prototype.parse = function(data) {\n var length, numberOfGlyphs, _results;\n data.pos = this.offset;\n this.format = data.readInt();\n this.italicAngle = data.readInt();\n this.underlinePosition = data.readShort();\n this.underlineThickness = data.readShort();\n this.isFixedPitch = data.readInt();\n this.minMemType42 = data.readInt();\n this.maxMemType42 = data.readInt();\n this.minMemType1 = data.readInt();\n this.maxMemType1 = data.readInt();\n switch (this.format) {\n case 0x00010000:\n break;\n case 0x00020000:\n numberOfGlyphs = data.readUInt16();\n this.glyphNameIndex = [];\n var i;\n for (\n i = 0;\n 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n i = 0 <= numberOfGlyphs ? ++i : --i\n ) {\n this.glyphNameIndex.push(data.readUInt16());\n }\n this.names = [];\n _results = [];\n while (data.pos < this.offset + this.length) {\n length = data.readByte();\n _results.push(this.names.push(data.readString(length)));\n }\n return _results;\n case 0x00025000:\n numberOfGlyphs = data.readUInt16();\n return (this.offsets = data.read(numberOfGlyphs));\n case 0x00030000:\n break;\n case 0x00040000:\n return (this.map = function() {\n var _j, _ref, _results1;\n _results1 = [];\n for (\n i = _j = 0, _ref = this.file.maxp.numGlyphs;\n 0 <= _ref ? _j < _ref : _j > _ref;\n i = 0 <= _ref ? ++_j : --_j\n ) {\n _results1.push(data.readUInt32());\n }\n return _results1;\n }.call(this));\n }\n };\n /*PostTable.prototype.glyphFor = function (code) {\n var index;\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 0x00020000:\n index = this.glyphNameIndex[code];\n if (index <= 257) {\n return POSTSCRIPT_GLYPHS[index];\n }\n else {\n return this.names[index - 258] || '.notdef';\n }\n break;\n case 0x00025000:\n return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n case 0x00030000:\n return '.notdef';\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };*/\n /*PostTable.prototype.encode = function (mapping) {\n var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n if (!this.exists) {\n return null;\n }\n raw = this.raw();\n if (this.format === 0x00030000) {\n return raw;\n }\n table = new Data(raw.slice(0, 32));\n table.writeUInt32(0x00020000);\n table.pos = 32;\n indexes = [];\n strings = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n post = this.glyphFor(id);\n position = POSTSCRIPT_GLYPHS.indexOf(post);\n if (position !== -1) {\n indexes.push(position);\n }\n else {\n indexes.push(257 + strings.length);\n strings.push(post);\n }\n }\n table.writeUInt16(Object.keys(mapping).length);\n for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n index = indexes[_j];\n table.writeUInt16(index);\n }\n for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n string = strings[_k];\n table.writeByte(string.length);\n table.writeString(string);\n }\n return table.data;\n };*/\n POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\\nbracketleft backslash bracketright asciicircum underscore grave\\na b c d e f g h i j k l m n o p q r s t u v w x y z\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n /\\s+/g\n );\n return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n function NameEntry(raw, entry) {\n this.raw = raw;\n this.length = raw.length;\n this.platformID = entry.platformID;\n this.encodingID = entry.encodingID;\n this.languageID = entry.languageID;\n }\n return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n var subsetTag;\n __extends(NameTable, _super);\n\n function NameTable() {\n return NameTable.__super__.constructor.apply(this, arguments);\n }\n NameTable.prototype.tag = \"name\";\n NameTable.prototype.parse = function(data) {\n var count,\n entries,\n entry,\n i,\n name,\n stringOffset,\n strings,\n text,\n _j,\n _len,\n _name;\n data.pos = this.offset;\n data.readShort(); //format\n count = data.readShort();\n stringOffset = data.readShort();\n entries = [];\n for (\n i = 0;\n 0 <= count ? i < count : i > count;\n i = 0 <= count ? ++i : --i\n ) {\n entries.push({\n platformID: data.readShort(),\n encodingID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: this.offset + stringOffset + data.readShort()\n });\n }\n strings = {};\n for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n entry = entries[i];\n data.pos = entry.offset;\n text = data.readString(entry.length);\n name = new NameEntry(text, entry);\n if (strings[(_name = entry.nameID)] == null) {\n strings[_name] = [];\n }\n strings[entry.nameID].push(name);\n }\n this.strings = strings;\n this.copyright = strings[0];\n this.fontFamily = strings[1];\n this.fontSubfamily = strings[2];\n this.uniqueSubfamily = strings[3];\n this.fontName = strings[4];\n this.version = strings[5];\n try {\n this.postscriptName = strings[6][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n } catch (e) {\n this.postscriptName = strings[4][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n }\n this.trademark = strings[7];\n this.manufacturer = strings[8];\n this.designer = strings[9];\n this.description = strings[10];\n this.vendorUrl = strings[11];\n this.designerUrl = strings[12];\n this.license = strings[13];\n this.licenseUrl = strings[14];\n this.preferredFamily = strings[15];\n this.preferredSubfamily = strings[17];\n this.compatibleFull = strings[18];\n return (this.sampleText = strings[19]);\n };\n subsetTag = \"AAAAAA\";\n /*NameTable.prototype.encode = function () {\n var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n strings = {};\n _ref = this.strings;\n for (id in _ref) {\n val = _ref[id];\n strings[id] = val;\n }\n postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n platformID: 1\n , encodingID: 0\n , languageID: 0\n });\n strings[6] = [postscriptName];\n subsetTag = successorOf(subsetTag);\n strCount = 0;\n for (id in strings) {\n list = strings[id];\n if (list != null) {\n strCount += list.length;\n }\n }\n table = new Data;\n strTable = new Data;\n table.writeShort(0);\n table.writeShort(strCount);\n table.writeShort(6 + 12 * strCount);\n for (nameID in strings) {\n list = strings[nameID];\n if (list != null) {\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n string = list[_i];\n table.writeShort(string.platformID);\n table.writeShort(string.encodingID);\n table.writeShort(string.languageID);\n table.writeShort(nameID);\n table.writeShort(string.length);\n table.writeShort(strTable.pos);\n strTable.writeString(string.raw);\n }\n }\n }\n return nameTable = {\n postscriptName: postscriptName.raw\n , table: table.data.concat(strTable.data)\n };\n };*/\n return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n __extends(MaxpTable, _super);\n\n function MaxpTable() {\n return MaxpTable.__super__.constructor.apply(this, arguments);\n }\n MaxpTable.prototype.tag = \"maxp\";\n MaxpTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.numGlyphs = data.readUInt16();\n this.maxPoints = data.readUInt16();\n this.maxContours = data.readUInt16();\n this.maxCompositePoints = data.readUInt16();\n this.maxComponentContours = data.readUInt16();\n this.maxZones = data.readUInt16();\n this.maxTwilightPoints = data.readUInt16();\n this.maxStorage = data.readUInt16();\n this.maxFunctionDefs = data.readUInt16();\n this.maxInstructionDefs = data.readUInt16();\n this.maxStackElements = data.readUInt16();\n this.maxSizeOfInstructions = data.readUInt16();\n this.maxComponentElements = data.readUInt16();\n return (this.maxComponentDepth = data.readUInt16());\n };\n /*MaxpTable.prototype.encode = function (ids) {\n var table;\n table = new Data;\n table.writeInt(this.version);\n table.writeUInt16(ids.length);\n table.writeUInt16(this.maxPoints);\n table.writeUInt16(this.maxContours);\n table.writeUInt16(this.maxCompositePoints);\n table.writeUInt16(this.maxComponentContours);\n table.writeUInt16(this.maxZones);\n table.writeUInt16(this.maxTwilightPoints);\n table.writeUInt16(this.maxStorage);\n table.writeUInt16(this.maxFunctionDefs);\n table.writeUInt16(this.maxInstructionDefs);\n table.writeUInt16(this.maxStackElements);\n table.writeUInt16(this.maxSizeOfInstructions);\n table.writeUInt16(this.maxComponentElements);\n table.writeUInt16(this.maxComponentDepth);\n return table.data;\n };*/\n return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n __extends(HmtxTable, _super);\n\n function HmtxTable() {\n return HmtxTable.__super__.constructor.apply(this, arguments);\n }\n HmtxTable.prototype.tag = \"hmtx\";\n HmtxTable.prototype.parse = function(data) {\n var i, last, lsbCount, m, _j, _ref, _results;\n data.pos = this.offset;\n this.metrics = [];\n for (\n i = 0, _ref = this.file.hhea.numberOfMetrics;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n this.metrics.push({\n advance: data.readUInt16(),\n lsb: data.readInt16()\n });\n }\n lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n this.leftSideBearings = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(data.readInt16());\n }\n return _results;\n })();\n this.widths = function() {\n var _j, _len, _ref1, _results;\n _ref1 = this.metrics;\n _results = [];\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n m = _ref1[_j];\n _results.push(m.advance);\n }\n return _results;\n }.call(this);\n last = this.widths[this.widths.length - 1];\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(this.widths.push(last));\n }\n return _results;\n };\n /***************************************************************/\n /* function : forGlyph */\n /* comment : Returns the advance width and lsb for this glyph. */\n /***************************************************************/\n HmtxTable.prototype.forGlyph = function(id) {\n if (id in this.metrics) {\n return this.metrics[id];\n }\n return {\n advance: this.metrics[this.metrics.length - 1].advance,\n lsb: this.leftSideBearings[id - this.metrics.length]\n };\n };\n /*HmtxTable.prototype.encode = function (mapping) {\n var id, metric, table, _i, _len;\n table = new Data;\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n metric = this.forGlyph(id);\n table.writeUInt16(metric.advance);\n table.writeUInt16(metric.lsb);\n }\n return table.data;\n };*/\n return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n __extends(GlyfTable, _super);\n\n function GlyfTable() {\n return GlyfTable.__super__.constructor.apply(this, arguments);\n }\n GlyfTable.prototype.tag = \"glyf\";\n GlyfTable.prototype.parse = function() {\n return (this.cache = {});\n };\n GlyfTable.prototype.glyphFor = function(id) {\n var data,\n index,\n length,\n loca,\n numberOfContours,\n raw,\n xMax,\n xMin,\n yMax,\n yMin;\n if (id in this.cache) {\n return this.cache[id];\n }\n loca = this.file.loca;\n data = this.file.contents;\n index = loca.indexOf(id);\n length = loca.lengthOf(id);\n if (length === 0) {\n return (this.cache[id] = null);\n }\n data.pos = this.offset + index;\n raw = new Data(data.read(length));\n numberOfContours = raw.readShort();\n xMin = raw.readShort();\n yMin = raw.readShort();\n xMax = raw.readShort();\n yMax = raw.readShort();\n if (numberOfContours === -1) {\n this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n } else {\n this.cache[id] = new SimpleGlyph(\n raw,\n numberOfContours,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n return this.cache[id];\n };\n GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n var glyph, id, offsets, table, _i, _len;\n table = [];\n offsets = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n glyph = glyphs[id];\n offsets.push(table.length);\n if (glyph) {\n table = table.concat(glyph.encode(old2new));\n }\n }\n offsets.push(table.length);\n return {\n table: table,\n offsets: offsets\n };\n };\n return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n /**************************************************************************/\n /* function : SimpleGlyph */\n /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n /**************************************************************************/\n function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n this.raw = raw;\n this.numberOfContours = numberOfContours;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = false;\n }\n SimpleGlyph.prototype.encode = function() {\n return this.raw.data;\n };\n return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n var ARG_1_AND_2_ARE_WORDS,\n MORE_COMPONENTS,\n WE_HAVE_AN_X_AND_Y_SCALE,\n WE_HAVE_A_SCALE,\n WE_HAVE_A_TWO_BY_TWO,\n WE_HAVE_INSTRUCTIONS;\n ARG_1_AND_2_ARE_WORDS = 0x0001;\n WE_HAVE_A_SCALE = 0x0008;\n MORE_COMPONENTS = 0x0020;\n WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n WE_HAVE_A_TWO_BY_TWO = 0x0080;\n WE_HAVE_INSTRUCTIONS = 0x0100;\n\n /********************************************************************************************************************/\n /* function : CompoundGlypg generator */\n /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n /********************************************************************************************************************/\n function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n var data, flags;\n this.raw = raw;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = true;\n this.glyphIDs = [];\n this.glyphOffsets = [];\n data = this.raw;\n while (true) {\n flags = data.readShort();\n this.glyphOffsets.push(data.pos);\n this.glyphIDs.push(data.readUInt16());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n data.pos += 4;\n } else {\n data.pos += 2;\n }\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.pos += 8;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.pos += 4;\n } else if (flags & WE_HAVE_A_SCALE) {\n data.pos += 2;\n }\n }\n }\n /****************************************************************************************************************/\n /* function : CompoundGlypg encode */\n /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n /****************************************************************************************************************/\n CompoundGlyph.prototype.encode = function() {\n var i, result, _len, _ref;\n result = new Data(__slice.call(this.raw.data));\n _ref = this.glyphIDs;\n for (i = 0, _len = _ref.length; i < _len; ++i) {\n result.pos = this.glyphOffsets[i];\n }\n return result.data;\n };\n return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n __extends(LocaTable, _super);\n\n function LocaTable() {\n return LocaTable.__super__.constructor.apply(this, arguments);\n }\n LocaTable.prototype.tag = \"loca\";\n LocaTable.prototype.parse = function(data) {\n var format, i;\n data.pos = this.offset;\n format = this.file.head.indexToLocFormat;\n if (format === 0) {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 2) {\n _results.push(data.readUInt16() * 2);\n }\n return _results;\n }.call(this));\n } else {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 4) {\n _results.push(data.readUInt32());\n }\n return _results;\n }.call(this));\n }\n };\n LocaTable.prototype.indexOf = function(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n var LocaTable = new Uint32Array(this.offsets.length);\n var glyfPtr = 0;\n var listGlyf = 0;\n for (var k = 0; k < LocaTable.length; ++k) {\n LocaTable[k] = glyfPtr;\n if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n ++listGlyf;\n LocaTable[k] = glyfPtr;\n var start = this.offsets[k];\n var len = this.offsets[k + 1] - start;\n if (len > 0) {\n glyfPtr += len;\n }\n }\n }\n var newLocaTable = new Array(LocaTable.length * 4);\n for (var j = 0; j < LocaTable.length; ++j) {\n newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n }\n return newLocaTable;\n };\n return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n var key, ret, val;\n ret = {};\n for (key in object) {\n val = object[key];\n ret[val] = key;\n }\n return ret;\n};\n\n/*var successorOf = function (input) {\n var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n alphabet = 'abcdefghijklmnopqrstuvwxyz';\n length = alphabet.length;\n result = input;\n i = input.length;\n while (i >= 0) {\n last = input.charAt(--i);\n if (isNaN(last)) {\n index = alphabet.indexOf(last.toLowerCase());\n if (index === -1) {\n next = last;\n carry = true;\n }\n else {\n next = alphabet.charAt((index + 1) % length);\n isUpperCase = last === last.toUpperCase();\n if (isUpperCase) {\n next = next.toUpperCase();\n }\n carry = index + 1 >= length;\n if (carry && i === 0) {\n added = isUpperCase ? 'A' : 'a';\n result = added + next + result.slice(1);\n break;\n }\n }\n }\n else {\n next = +last + 1;\n carry = next > 9;\n if (carry) {\n next = 0;\n }\n if (carry && i === 0) {\n result = '1' + next + result.slice(1);\n break;\n }\n }\n result = result.slice(0, i) + next + result.slice(i + 1);\n if (!carry) {\n break;\n }\n }\n return result;\n };*/\n\nvar Subset = (function() {\n function Subset(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.next = 33;\n }\n /*Subset.prototype.use = function (character) {\n var i, _i, _ref;\n if (typeof character === 'string') {\n for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.use(character.charCodeAt(i));\n }\n return;\n }\n if (!this.unicodes[character]) {\n this.subset[this.next] = character;\n return this.unicodes[character] = this.next++;\n }\n };*/\n /*Subset.prototype.encodeText = function (text) {\n var char, i, string, _i, _ref;\n string = '';\n for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n char = this.unicodes[text.charCodeAt(i)];\n string += String.fromCharCode(char);\n }\n return string;\n };*/\n /***************************************************************/\n /* function : generateCmap */\n /* comment : Returns the unicode cmap for this font. */\n /***************************************************************/\n Subset.prototype.generateCmap = function() {\n var mapping, roman, unicode, unicodeCmap, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n mapping = {};\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n mapping[roman] = unicodeCmap[unicode];\n }\n return mapping;\n };\n /*Subset.prototype.glyphIDs = function () {\n var ret, roman, unicode, unicodeCmap, val, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n ret = [0];\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n val = unicodeCmap[unicode];\n if ((val != null) && __indexOf.call(ret, val) < 0) {\n ret.push(val);\n }\n }\n return ret.sort();\n };*/\n /******************************************************************/\n /* function : glyphsFor */\n /* comment : Returns simple glyph objects for the input character.*/\n /******************************************************************/\n Subset.prototype.glyphsFor = function(glyphIDs) {\n var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n glyphs = {};\n for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n id = glyphIDs[_i];\n glyphs[id] = this.font.glyf.glyphFor(id);\n }\n additionalIDs = [];\n for (id in glyphs) {\n glyph = glyphs[id];\n if (glyph != null ? glyph.compound : void 0) {\n additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n }\n }\n if (additionalIDs.length > 0) {\n _ref = this.glyphsFor(additionalIDs);\n for (id in _ref) {\n glyph = _ref[id];\n glyphs[id] = glyph;\n }\n }\n return glyphs;\n };\n /***************************************************************/\n /* function : encode */\n /* comment : Encode various tables for the characters you use. */\n /***************************************************************/\n Subset.prototype.encode = function(glyID, indexToLocFormat) {\n var cmap,\n code,\n glyf,\n glyphs,\n id,\n ids,\n loca,\n new2old,\n newIDs,\n nextGlyphID,\n old2new,\n oldID,\n oldIDs,\n tables,\n _ref;\n cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n glyphs = this.glyphsFor(glyID);\n old2new = {\n 0: 0\n };\n _ref = cmap.charMap;\n for (code in _ref) {\n ids = _ref[code];\n old2new[ids.old] = ids[\"new\"];\n }\n nextGlyphID = cmap.maxGlyphID;\n for (oldID in glyphs) {\n if (!(oldID in old2new)) {\n old2new[oldID] = nextGlyphID++;\n }\n }\n new2old = invert(old2new);\n newIDs = Object.keys(new2old).sort(function(a, b) {\n return a - b;\n });\n oldIDs = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n id = newIDs[_i];\n _results.push(new2old[id]);\n }\n return _results;\n })();\n glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n loca = this.font.loca.encode(glyf.offsets, oldIDs);\n tables = {\n cmap: this.font.cmap.raw(),\n glyf: glyf.table,\n loca: loca,\n hmtx: this.font.hmtx.raw(),\n hhea: this.font.hhea.raw(),\n maxp: this.font.maxp.raw(),\n post: this.font.post.raw(),\n name: this.font.name.raw(),\n head: this.font.head.encode(indexToLocFormat)\n };\n if (this.font.os2.exists) {\n tables[\"OS/2\"] = this.font.os2.raw();\n }\n return this.font.directory.encode(tables);\n };\n return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n var pad;\n\n function PDFObject() {}\n pad = function(str, length) {\n return (Array(length + 1).join(\"0\") + str).slice(-length);\n };\n /*****************************************************************************/\n /* function : convert */\n /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n /*****************************************************************************/\n PDFObject.convert = function(object) {\n var e, items, key, out, val;\n if (Array.isArray(object)) {\n items = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = object.length; _i < _len; _i++) {\n e = object[_i];\n _results.push(PDFObject.convert(e));\n }\n return _results;\n })().join(\" \");\n return \"[\" + items + \"]\";\n } else if (typeof object === \"string\") {\n return \"/\" + object;\n } else if (object != null ? object.isString : void 0) {\n return \"(\" + object + \")\";\n } else if (object instanceof Date) {\n return (\n \"(D:\" +\n pad(object.getUTCFullYear(), 4) +\n pad(object.getUTCMonth(), 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n \"Z)\"\n );\n } else if ({}.toString.call(object) === \"[object Object]\") {\n out = [\"<<\"];\n for (key in object) {\n val = object[key];\n out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n }\n out.push(\">>\");\n return out.join(\"\\n\");\n } else {\n return \"\" + object;\n }\n };\n return PDFObject;\n})();\n"],"names":["globalObject","window","global","self","consoleLog","console","log","apply","arguments","consoleWarn","str","warn","call","consoleError","error","bom","blob","opts","autoBom","test","type","Blob","String","fromCharCode","download","url","name","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","_global","HTMLAnchorElement","prototype","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","navigator","msSaveOrOpenBlob","popup","title","body","innerText","force","isSafari","HTMLElement","safari","isChromeIOS","userAgent","FileReader","reader","onloadend","result","replace","readAsDataURL","RGBColor","color_string","ok","charAt","substr","toLowerCase","channels","simple_colors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","color_defs","re","example","process","bits","parseInt","i","length","processor","exec","r","g","b","isNaN","toRGB","toHex","toString","atob","btoa","bind","md5cycle","x","k","c","d","ff","gg","hh","ii","add32","cmn","q","s","t","md51","n","state","md5blk","substring","tail","charCodeAt","md5blks","hex_chr","split","rhex","j","hex","join","singleToByteString","toByteString","map","md5Bin","md5","md5Check","lsw","msw","repeat","num","Array","rc4","key","data","lastKey","lastState","out","permissionOptions","print","modify","copy","PDFSecurity","permissions","userPassword","ownerPassword","fileId","v","protection","forEach","perm","Error","padding","paddedUserPassword","paddedOwnerPassword","O","processOwnerPassword","P","encryptionKey","lsbFirstWord","hexToBytes","U","toHexString","byteString","byte","slice","bytes","push","encryptor","objectId","generation","toPDFName","strLength","charCode","hexStr","paddingHexStr","PubSub","context","topics","subscribe","topic","callback","once","hasOwnProperty","token","Math","random","unsubscribe","Object","keys","publish","args","tokens","sub","ex","message","getTopics","GState","parameters","supported","p","indexOf","id","objectNumber","equals","other","ignore","count","Pattern","gState","matrix","ShadingPattern","coords","colors","TilingPattern","boundingBox","xStep","yStep","stream","cloneIndex","jsPDF","options","orientation","unit","format","compressPdf","filters","userUnit","precision","floatPrecision","defaultPathOperation","encryptionOptions","compress","encryption","userPermissions","abs","putOnlyUsedFonts","usedFonts","API","internal","__private__","pdfVersion","getPdfVersion","setPdfVersion","value","pageFormats","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","dl","letter","legal","ledger","tabloid","getPageFormats","getPageFormat","ApiMode","COMPAT","ADVANCED","apiMode","advancedAPI","saveGraphicsState","Matrix","scaleFactor","getPageHeight","setFontSize","getFontSize","compatAPI","restoreGraphicsState","combineFontStyleAndFontWeight","fontStyle","fontWeight","doSwitch","isAdvancedAPI","advancedApiModeTrap","methodName","roundToPrecision","number","parmPrecision","tmpPrecision","toFixed","hpf","f2","f3","scale","transformY","y","transformScaleY","setPrecision","getFileId","setFileId","toUpperCase","floor","creationDate","convertDateToPDFDate","parmDate","tzoffset","getTimezoneOffset","tzsign","tzhour","tzmin","timeZoneString","padd2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","parmPDFDate","year","month","date","hour","minutes","seconds","resultingDate","Date","setCreationDate","tmpCreationDateString","regexPDFCreationDate","getCreationDate","padd2Hex","hexString","offsets","content","contentLength","additionalObjects","pages","currentPage","hasCustomDestination","outputDestination","resetDocument","rootDictionaryObjId","newObjectDeferred","resourceDictionaryObjId","setCustomOutputDestination","destination","setOutputDestination","resetCustomOutputDestination","string","write","getArrayBuffer","len","ab","ArrayBuffer","u8","Uint8Array","standardFonts","getStandardFonts","activeFontSize","fontSize","size","R2L","setR2L","getR2L","zoomMode","setZoomMode","zoom","validZoomModes","undefined","getZoomMode","pageMode","setPageMode","pmode","validPageModes","getPageMode","layoutMode","setLayoutMode","layout","validLayoutModes","getLayoutMode","setDisplayMode","documentProperties","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","properties","property","setDocumentProperty","fonts","fontmap","activeFontKey","fontStateStack","patterns","patternMap","gStates","gStatesMap","activeGState","page","pagesContext","events","hotfixes","renderTargets","renderTargetMap","renderTargetStack","pageX","pageY","pageMatrix","sx","shy","shx","sy","tx","ty","_matrix","defineProperty","get","set","atan2","decompose","separator","multiply","f","scaleX","sqrt","shear","scaleY","translate","rotate","skew","inversed","quot","aInv","bInv","cInv","dInv","eInv","fInv","applyToPoint","pt","Point","applyToRectangle","rect","pt1","pt2","w","h","Rectangle","clone","matrixMult","m1","m2","identityMatrix","unitMatrix","addPattern","pattern","prefix","patternKey","addShadingPattern","beginTilingPattern","beginNewRenderTarget","endTilingPattern","pop","restore","newObject","oid","newObjectDeferredBegin","doOutput","newAdditionalObject","objId","obj","decodeColorString","color","colorEncoded","floatVal","parseFloat","colorAsRGB","encodeColorString","ch1","ch2","ch3","ch4","letterArray","pdfColorType","rgbColor","getFilters","putStream","alreadyAppliedFilters","addLength1","valueOfLength1","processedData","keyValues","additionalKeyValues","processDataByFilters","reverseChain","filterAsString","isArray","decodeParmsArray","putPage","pageNumber","pageObjectNumber","pageContentsObjId","contentsObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageContent","putPages","pageObjectNumbers","kids","putFont","font","isAlreadyPutted","postScriptName","encoding","putFonts","fontKey","putXObject","xObject","width","height","putXObjects","xObjectKey","interpolateAndEncodeRGBStream","numberSamples","tValues","dT","offset","unshift","index","aColor","bColor","round","trim","putShadingPattern","funcObjectNumber","putTilingPattern","deferredResourceDictionaryIds","resourcesObjectId","patternObjectId","resourcesOid","objectOid","putPatterns","putGState","putGStates","gStateKey","putXobjectDict","putEncryptionDict","putFontDict","putShadingPatternDict","putTilingPatternDict","putGStatesDict","putResourceDictionary","objectIds","putResources","Number","MAX_SAFE_INTEGER","putAdditionalObjects","addFontToFontDictionary","fontName","addFont","isStandardFont","metadata","instance","addFonts","arrayOfFonts","l","parts","dictionary","SAFE","__safeCall","fn","foo","__safeCallWrapper","stack","m","alert","bar","to8bitStream","text","flags","sourceEncoding","encodingBlock","outputEncoding","newtext","isUnicode","ch","bch","autoencode","codePages","noBOM","pdfEscape","beginPage","_setPage","_addPage","parmFormat","parmOrientation","dimensions","min","setLineWidth","lineWidth","strokeColor","lineCapID","lineJoinID","_deletePage","splice","setPage","getNumberOfPages","getFont","fontNameLowerCase","disableWarning","noFallback","putInfo","version","putCatalog","tmpRootDictionaryObjId","pcn","putTrailer","putHeader","putXRef","buildDocument","offsetOfXRef","getBlob","output","filename","save","dataURI","pdfDocument","unescape","encodeURIComponent","pdfObjectUrl","integrity","htmlForNewWindow","JSON","stringify","nW","pdfJsUrl","htmlForPDFjsNewWindow","PDFjsNewWindow","scope","documentElement","querySelector","contentWindow","PDFViewerApplication","htmlForDataURLNewWindow","dataURLNewWindow","hasHotfix","hotfixName","getEncryptor","getPageInfo","pageNumberOneBased","getPageInfoByObjId","getCurrentPageInfo","addPage","insertPage","beforePage","movePage","targetPage","tmpPages","tmpPagesContext","deletePage","transform","payload","da","angle","align","charSpace","maxWidth","horizontalScale","tmp","transformationMatrix","xtra","isHex","lineHeight","lineHeightFactor","ESC","TabLen","transformTextToSpecialArray","sa","concat","curDa","shift","processTextByFunction","processingFunction","tmpResult","textIsOfTypeString","tmpTextIsOfTypeString","match","descent","baseline","splitTextToSize","reduce","acc","textLine","mutex","PI","rotationDirection","cos","sin","activeCharSpace","setCharSpace","getCharSpace","lang","renderingMode","parmRenderingMode","stroke","usedRenderingMode","leading","pageWidth","pageSize","getWidth","activeFont","lineWidths","assign","wordSpacingPerLine","newY","getStringUnitWidth","doKerning","prevWidth","newX","getHorizontalCoordinate","getVerticalCoordinate","doReversing","posX","posY","reverse","activeFontEncoding","STRING","ARRAY","variant","wordSpacing","generatePosition","parmPosX","parmPosY","parmTransformationMatrix","position","lineIndex","textColor","clip","rule","clipEvenOdd","discardPath","isValidStyle","style","validStyleVariants","setDefaultPathOperation","operator","getStyle","op","close","fill","fillWithOptionalPattern","fillEvenOdd","fillStroke","fillStrokeEvenOdd","fillWithPattern","putStyle","cloneTilingPattern","patternData","patternId","clipRuleFromStyle","setGState","moveTo","lineTo","curveTo","x1","y1","x2","y2","x3","y3","line","lines","closed","scalex","scaley","leg","x4","y4","path","triangle","roundedRect","rx","ry","MyArc","SQRT2","ellipse","lx","ly","circle","setFont","getFontEntry","getFontList","list","encodingOptions","getLineWidth","setLineDash","setLineDashPattern","dashArray","dashPhase","getLineHeight","setLineHeightFactor","getLineHeightFactor","pageHeight","getHorizontalCoordinateString","getVerticalCoordinateString","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","getTextColor","setTextColor","CapJoinStyles","butt","but","miter","rounded","projecting","project","square","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","addGState","duplicate","fontState","setCurrentTransformationMatrix","comment","_x","enumerable","_y","_type","_w","_h","RenderTarget","getPageWidth","setPageWidth","setPageHeight","endFormObject","newXObject","xObjectId","beginFormObject","doFormObject","getFormObject","returnPromise","unload","Promise","resolve","reject","plugin","newEvents","eventname","handler_and_args","getCoordinateString","collections","setWidth","getHeight","setHeight","getPDFVersion","configurable","jsPDFAPI","pdfUnescape","f5","__acroform__","inherit","child","parent","create","constructor","createFormXObject","formObject","xobj","AcroFormXObject","AcroFormAppearance","BBox","setBit","bitPosition","bitMask","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","coordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","calculateAppearanceStream","appearanceStreamContent","V","DV","_V","calcRes","calculateX","maxFontSize","returnValue","textSplit","multiline","word","lineSpacing","borderPadding","isSmallerThanWidth","lastLine","TextWidth","calculateFontSpace","FieldWidth","FontSize","textHeight","startY","startX","lastY","firstWordInLine","lastWordInLine","lastLength","currWord","lineCount","Line","isWithNewLine","nextLineIsSmaller","isLastWord","currLine","textAlign","acroformPluginTemplate","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","annotReferenceCallback","acroformPlugin","Fields","hasAnnotation","createAnnotationReference","putForm","object","findEntry","entry","annotations","find","putCatalogCallback","AcroFormDictionaryCallback","_eventID","createFieldCallback","fieldArray","standardFields","Kids","fieldObject","keyValueList","oldRect","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","appearance","appearanceStreamString","createXFormObjectCallback","initializeAcroForm","AcroFormField","FieldNum","parse","AcroFormDictionary","arrayToPdfArray","array","getMatches","regex","matches","pdfArrayToStringArray","toPdfString","AcroFormPDFObject","_objId","_scope","writable","getOwnPropertyNames","filter","getOwnPropertyDescriptor","_BBox","_stream","_Kids","_DA","_F","Boolean","F","_Ff","_Rect","_FT","_T","AcroFormChildClass","_fontName","_fontStyle","_fontSize","_maxFontSize","_color","AcroFormTextField","_DV","AcroFormButton","_hasAppearanceStream","_page","Ff","_Q","AcroFormChoiceField","FT","_TI","_Opt","getOptions","setOptions","sort","addOption","removeOption","allEntries","combo","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","edit","_MK","CA","_AS","AcroFormPushButton","pushButton","AcroFormRadioButton","radio","_parent","_optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","Parent","addField","AcroFormCheckBox","CheckBox","_MaxLen","isInteger","AcroFormPasswordField","password","N","On","YesNormal","D","YesPushDown","Off","OffPushDown","encodedColor","DotRadius","Bezier_C","DotRadiusBezier","kc","dc","Cross","cross","calculateCross","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","namespace","__addimage__","UNKNOWN","ARRAY_APPLY_BATCH","imageFileTypeHeaders","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","imageData","fallbackFormat","headerSchemata","compareResult","fileType","Uint8ClampedArray","isArrayBufferView","putImage","image","colorSpace","color_spaces","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","arrayBufferToBinaryString","putResourcesCallback","images","putXObjectsDictCallback","checkCompressValue","image_compression","NONE","initialize","getImages","getImageIndex","notDefined","generateAliasFromImageData","sHashCode","isImageTypeSupported","isDOMElement","nodeType","getImageDataFromElement","element","nodeName","hasAttribute","src","getAttribute","tmpImageData","loadFile","mimeType","toDataURL","checkImagesForAlias","alias","determineWidthAndHeight","writeImageToPDF","rotation","dims","coord","vcoord","f4","rotationTransformationMatrix","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","FAST","MEDIUM","SLOW","hash","byteLength","validateStringAsBase64","possibleBase64String","extractImageFromDataUrl","dataUrl","dataUrlParts","extractedInfo","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","binary_string","buffer","buf","subarray","addImage","compression","processImageData","dataAsBinaryString","convertBase64ToBinaryString","stringData","throwError","base64Info","rawData","getImageProperties","notEmpty","addPageData","pageInfo","putPageData","pageAnnos","anno","found","escape","objText","objPopup","encryptorText","bounds","contents","popoff","loc","_nameMap","top","finalBounds","info","magFactor","left","createAnnotation","link","textWithLink","totalLineWidth","getTextWidth","linkHeight","linkWidth","numOfLines","ceil","txtWidth","arabicSubstitionA","ligatures","arabic_diacritics","alfletter","noChangeInForm","isolatedForm","finalForm","initialForm","medialForm","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","letters","tmpLigatures","effectedLetters","isArabicDiacritic","getCorrectForm","currentChar","beforeChar","nextChar","parseArabic","currentLetter","prevLetter","nextLetter","words","newWords","processArabic","tmpText","autoPrint","refAutoPrintTag","addJS","Canvas","jsPdfInstance","_width","getContext","pageWrapXEnabled","pageWrapX","_height","pageWrapYEnabled","pageWrapY","_childNodes","_style","contextType","contextAttributes","pdf","context2d","_canvas","canvas","NO_MARGINS","bottom","right","px2pt","printingHeaderRow","_initialize","__cell__","headerFunction","margins","_reset","lastCell","Cell","_text","_lineNumber","_align","lineNumber","toArray","setHeaderFunction","func","getTextDimensions","amountOfLines","tempWidth","max","cellAddPage","cell","currentCell","tableHeaderRow","printHeaders","printHeaderRow","table","headers","config","headerNames","headerLabels","headerAligns","columnMatrix","columnWidths","column","columnMinWidths","tableHeaderConfigs","autoSize","css","headerBackgroundColor","headerTextColor","table_font_size","header","prompt","headerName","rec","row","rowHeight","calculateLineHeight","setTableHeaderRow","pv","cv","rowStart","Function","cellData","cellStart","col","table_x","table_y","model","new_page","tableHeaderCell","tempHeaderConf","currentTextColor","toLookup","arr","lookup","fontStyleOrder","italic","oblique","normal","fontStretchOrder","fontStretchLookup","fontWeights","fontWeightsLookup","normalizeFontStretch","stretch","normalizeFontStyle","normalizeFontWeight","weight","normalizeFontFace","fontFace","family","ref","buildFontFaceMap","fontFaces","normalized","searchFromPivot","matchingSet","order","pivot","dir","resolveFontStretch","resolveFontStyle","ordering","resolveFontWeight","defaultGenericFontFamilies","fixed","monospace","terminal","cursive","fantasy","serif","systemFonts","icon","menu","ruleToString","resolveFontFace","fontFaceMap","rules","defaultFontFamily","genericFontFamilies","eatWhiteSpace","input","trimLeft","parseQuotedFontFamily","quote","current","parseNonQuotedFontFamily","defaultFont","parseFontFamily","parsed","remaining","ContextLayer","ctx","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","margin","prevPageLastElemOffset","ignoreClearRect","_ctx","Context2D","parentNode","_pdf","_pageWrapXEnabled","_pageWrapYEnabled","_posX","_posY","_autoPaging","lastBreak","pageBreaks","_ctxStack","rgba","getRGBA","_fontFaceMap","getFontFaceMap","fontMap","convertedFontFaces","convertToFontFaces","styles","_fontFaces","fontVariant","fontFamily","rxFontSize","fontSizeUnit","jsPdfFontName","fallbackFonts","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","pathPreProcess","beginPath","closePath","pathBegin","quadraticCurveTo","cpx","cpy","pt0","bezierCurveTo","cp1x","cp1y","cp2x","cp2y","arc","radius","startAngle","endAngle","counterclockwise","isIdentity","xpt","x_radPt","x_radPt0","pow","arcTo","fillRect","strokeRect","clearRect","doStackPush","tmpPageNumber","ctxStack","doStackPop","rxRgb","rxRgba","rxTransparent","isCanvasGradient","getColor","fillText","degs","rad2deg","putText","strokeText","measureText","TextMetrics","scalewidth","scaleheight","setTransform","hasMargins","drawImage","img","swidth","sheight","imageProperties","factorX","factorY","clipFactorX","clipFactorY","decomposedTransformationMatrix","xRect","pageArray","getPagesByPath","sortPages","clipPath","autoPaging","pageWidthMinusMargins","topMargin","firstPageHeight","pageHeightMinusMargins","previousPageHeightSum","tmpPaths","pathPositionRedo","drawPaths","tmpRect","needsClipping","yOffset","rectOfQuadraticCurve","getQuadraticCurveBoundary","rectOfBezierCurve","getBezierCurveBoundary","paths","isClip","oldLineWidth","origPath","xPath","tmpPath","moves","delta","begin","start","deltas","iii","began","arcs","drawArc","drawLine","drawLines","doClip","getBaseline","getTextBottom","yBaseLine","createLinearGradient","canvasGradient","colorStops","addColorStop","createPattern","createRadialGradient","includeMove","curves","createArc","curve","doMove","drawCurve","textDimensions","yBottom","yTop","baselineRect","textBounds","oldSize","pageHeightMinusBottomMargin","pageWidthMinusRightMargin","textBoundsOnPage","doSlice","croppedText","baseLineRectOnPage","prevX","prevY","anticlockwise","EPSILON","twoPi","halfPi","totalAngle","sgn","remain","createSmallArc","q1","q2","k2","ar","cos_ar","sin_ar","ey","midX1","midY1","midX2","midY2","resultX1","resultX2","resultY1","resultY2","ax","ay","bx","by","cx","cy","dx","dy","tobx","toby","tocx","tocy","todx","tody","px","py","qx","qy","minx","miny","maxx","maxy","toqx","toqy","torx","tory","totx","toty","getPrevLineDashValue","prevLineDash","nextLineDash","ASCII85Encode","ASCII85Decode","z","ASCIIHexEncode","ASCIIHexDecode","regexCheckIfHex","RegExp","FlateEncode","zlibSync","origData","filterChain","sync","browserRequest","loadImageFile","request","sanitizeUnicode","dataLength","charArray","StringFromCharCode","overrideMimeType","responseText","loadHtml2Canvas","catch","then","html2canvas","default","loadDomPurify","dompurify","objType","tagName","opt","el","className","innerHTML","sanitize","cloneNode","javascriptEnabled","createTextNode","nodeValue","firstChild","nextSibling","appendChild","addEventListener","scrollTop","scrollLeft","Worker","root","convert","template","setProgress","promise","__proto__","prop","container","overlay","progress","val","enableLinks","backgroundColor","from","getType","from_main","to","toContainer","toCanvas","toImg","toPdf","prereqs","checkSrc","checkPageSize","setPageSize","thenList","toContainer_main","overlayCSS","overflow","zIndex","containerCSS","display","windowWidth","clientWidth","scrollWidth","offsetWidth","source","scrollHeight","offsetHeight","clientHeight","clear","border","float","checkContainer","contains","toCanvas_main","onrendered","toCanvas_post","onRendered","removeChild","toContext2d","toContext2d_main","async","allowTaint","scrollX","scrollY","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","toContext2d_post","checkCanvas","toImg_main","imgData","quality","checkContext2d","toPdf_main","outputImg","outputPdf","checkPdf","outputPdf_main","checkImg","outputImg_main","save_main","doCallback","doCallback_main","fns","set_prop","setMargin","set_jsPDF","set_opt","set_main","cbk","get_main","setMargin_main","toPx","setPageSize_main","getPageSize","inner","ratio","updateProgress","onFulfilled","onRejected","thenCore","then_main","then_pre","then_post","thenBase","isNative","selfPromise","returnVal","thenExternal","thenList_forEach","catchExternal","msg","error_main","using","export","run","format_as_string","err","html","worker","jsNamesObj","jsJsObj","javascript","namesOid","outline","children","render","createNamedDestinations","totalPages","dests","names2Oid","makeRef","add","item","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","markers","getJpegInfo","numcomponents","blockLength","processJPEG","bpc","APNG_BLEND_OP_SOURCE","APNG_DISPOSE_OP_BACKGROUND","APNG_DISPOSE_OP_PREVIOUS","makeImage","scratchCanvas","scratchCtx","chunkSize","palLen","delayDen","delayNum","frame","section","palShort","_i","_j","_ref","pos","animation","readUInt32","_results","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","Infinity","frames","read","xOffset","readUInt16","delay","disposeOp","blendOp","indexed","grayscale","rgb","hasAlphaChannel","pixelBitlength","decodePixels","pixelBytes","fullPixels","_this","unzlibSync","pass","x0","y0","abyte","pa","paeth","pb","pc","pixels","scanlineLength","upper","upperLeft","_k","_l","_m","isFull","fullPos","partPos","decodePalette","ret","_ref1","copyToImageData","alpha","_decodedPalette","hasBrowserCanvas","putImageData","Image","decodeFrames","_len","createImageData","renderFrame","prev","animate","doFrame","frameNumber","_timeout","stopAnimation","clearTimeout","_png","canCompress","hasCompressionJS","compressBytes","lineLength","colorsPerPixel","level","filter_method","filterUp","filterSub","filterAverage","filterPaeth","applyPngFilterMethod","dat","filter_methods","getFilterMethods","prevLine","results","ind","getIndexOfSmallestSum","filterNone","up","upLeft","paethPredictor","pLeft","pUp","pUpLeft","arrays","sum","getPredictorFromCompression","processPNG","trns","pal","smask","alphaData","hasColors","pixel","pDiff","pbl","trans","total","GifReader","pf0","global_palette_flag","num_global_colors_pow2","num_global_colors","background","global_palette_offset","global_palette_size","no_eof","transparent_index","disposal","loop_count","block_size","pf1","pf2","local_palette_flag","interlace_flag","num_local_colors_pow2","num_local_colors","palette_offset","palette_size","has_local_palette","data_offset","data_length","interlaced","loopCount","frameInfo","frame_num","decodeAndBlitFrameBGRA","num_pixels","index_stream","GifReaderLZWOutputIndexStream","framewidth","framestride","xleft","opbeg","opend","scanstride","interlaceskip","il","decodeAndBlitFrameRGBA","code_stream","output_length","min_code_size","clear_code","eoi_code","next_code","cur_code_size","code_mask","cur_shift","cur","subblock_size","code_table","prev_code","code","chase_code","chase_length","chase","op_end","JPEGEncoder","ffloor","YTable","UVTable","fdtbl_Y","fdtbl_UV","YDC_HT","UVDC_HT","YAC_HT","UVAC_HT","bitcode","category","outputfDCTQuant","DU","byteout","bytenew","bytepos","YDU","UDU","VDU","clt","RGB_YUV_TABLE","currentQuality","ZigZag","std_dc_luminance_nrcodes","std_dc_luminance_values","std_ac_luminance_nrcodes","std_ac_luminance_values","std_dc_chrominance_nrcodes","std_dc_chrominance_values","std_ac_chrominance_nrcodes","std_ac_chrominance_values","initQuantTables","sf","YQT","UVQT","u","aasf","computeHuffmanTbl","nrcodes","std_table","codevalue","pos_in_table","HT","initHuffmanTbl","initCategoryNumber","nrlower","nrupper","cat","nr","nrneg","initRGBYUVTable","writeBits","bs","posval","writeByte","writeWord","fDCTQuant","fdtbl","d0","d1","d2","d3","d4","d5","d6","d7","dataOff","I8","I64","tmp0","tmp7","tmp1","tmp6","tmp2","tmp5","tmp3","tmp4","tmp10","tmp13","tmp11","tmp12","z1","z5","z2","z4","z3","z11","z13","tmp0p2","tmp7p2","tmp1p2","tmp6p2","tmp2p2","tmp5p2","tmp3p2","tmp4p2","tmp10p2","tmp13p2","tmp11p2","tmp12p2","z1p2","z5p2","z2p2","z4p2","z3p2","z11p2","z13p2","writeAPP0","writeSOF0","writeDQT","writeDHT","o","writeSOS","processDU","CDU","DC","HTDC","HTAC","EOB","M16zeroes","I16","I63","DU_DCT","Diff","end0pos","lng","startpos","nrzeroes","nrmarker","initCharLookupTable","sfcc","encode","setQuality","DCY","DCU","DCV","displayName","quadWidth","fillbits","init","processGIF89A","qu","rawImageData","encoder","processGIF87A","BmpDecoder","is_with_alpha","datav","DataView","bottom_up","flag","parseHeader","parseBGR","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","hr","vr","importantColors","getUint8","quad","bitn","bit1","xlen","mode","bit4","before","after","bit8","bit15","dif_w","_11111","_1_5","B","bit16","_111111","_1_6","bit24","bit32","getData","processBMP","WebPDecoder","fa","L","J","H","I","Z","M","wa","wb","Ed","ma","_WebPDecoder","Fd","Ub","G","jc","Qb","qb","nd","pd","xb","Ca","Ka","oa","Jd","Yc","Zc","Qa","na","K","ca","cb","Sb","Ra","bb","Vb","ob","db","Gd","Hd","Wb","Sa","Xb","Id","ra","Ta","Yb","Ha","Zb","X","Mb","Xa","$b","ac","bc","xa","yb","ud","hd","jd","aa","eb","Ia","cc","Kd","Ld","ec","Ea","Md","Nd","Od","Pd","Qd","fb","gb","hb","zb","Ab","Ja","Bb","Rd","A","Sd","ea","Tc","Cd","lb","Db","W","Cb","S","RGBA","kb","sd","Td","Ud","fd","ib","bd","cd","Da","Vd","T","Wd","ba","ka","Mc","Nc","fc","Rc","Xd","ya","Kb","za","gc","Ua","Va","memory","Ib","Jb","hc","Oa","ic","Aa","Yd","Ba","Wa","Zd","$d","ae","ta","Eb","be","ga","ce","Dc","lc","mc","nc","de","ua","ub","ha","xc","vc","md","Ya","oc","C","ee","E","Q","fe","qc","Fb","rc","ge","va","Ma","sc","Gb","tc","uc","Hb","wc","yc","zc","qd","rd","ia","tb","he","$","Pb","wd","xd","vb","ie","Ac","Bc","je","Cc","VP8LMapColor32b","ke","VP8LMapColor8b","le","rb","Oc","R","me","qa","Y","la","ja","Fa","ne","sb","La","Za","$a","jb","mb","oe","pe","nb","qe","Pa","Ga","Na","Ec","se","Fc","te","ue","yd","td","Rb","ve","we","Lb","Gc","xe","Wc","Xc","ye","Pc","Tb","zd","vd","od","ld","dd","Hc","ze","Sc","Qc","ad","Ob","Ad","Dd","Ae","Nb","Ic","Be","Kc","ed","$c","Jc","Bd","gd","Uc","Vc","put","Ce","De","Ee","Fe","Ge","He","Ie","Lc","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","kd","Cf","Df","Ef","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Qf","WebPDecodeRGBA","memcmp","data_off","GetTag","GetLE16","GetLE24","GetLE32","WebPRiffParser","src_off","imagearray","alpha_chunk","alpha_size","alpha_offset","riff_size","fourcc","payload_size","payload_size_padded","feature_flags","src_off_","canvas_width","canvas_height","bgcolor","offset_x","offset_y","duration","blend","dispose","temp","webpdecoder","processWEBP","processRGBA","imagePixels","rgbOut","alphaOut","outIndex","alphaIndex","rgbData","setLanguage","langCode","langCodes","sq","an","hy","as","ast","az","eu","bn","br","bg","my","zh","co","cr","cs","nl","en","eo","et","fo","fj","fi","fr","fy","fur","gl","gu","ht","hi","hu","is","iu","it","kn","ks","kk","km","ky","tlh","ko","lv","lt","mk","ms","ml","mt","mi","mr","mo","nv","ng","no","nn","or","om","pl","rm","ro","ru","sz","sg","si","sr","sk","sl","so","es","sw","sv","tt","th","tig","ts","tn","tr","tk","uk","hsb","ur","vi","vo","xh","ji","zu","languageSettings","isSubscribed","languageCode","getCharWidthsArray","widths","Unicode","widthsFractionOf","fof","kerning","kerningFractionOf","kerningValue","char_code","prior_char_code","default_char_width","widthOfString","widthOfGlyph","characterToGlyph","splitLongWord","widths_array","firstLineMaxLen","maxLen","answer","workingLen","startOfLine","splitParagraphIntoLines","maxlen","line_length","textIndent","separator_length","current_word_length","spaceCharWidth","lineIndent","pad","wrds","wrd","idx","postProcess","ln","fsize","newOptions","paragraphs","fontUnit_maxLen","__fontmetrics__","decoded","encoded","mappingUncompress","mappingCompress","vals","keystring","valuestring","numberprefix","uncompress","sign","stringparts","activeobject","parentchain","parent_key_pair","keyparts","valueparts","datalen","WinAnsiEncoding","encodings","Courier","fontMetrics","Symbol","ZapfDingbats","metrics","file","TTFFont","glyIdsUsed","existsFileInVFS","getFileFromVFS","loadCanvg","canvg","addSvgAsImage","svg","ignoreMouse","ignoreAnimation","ignoreDimensions","doc","fromString","putTotalPages","pageExpression","replaceExpression","totalNumberOfPages","pdfEscape16","viewerPreferences","doReset","configuration","configurationTemplate","HideToolbar","defaultValue","explicitSet","valueSet","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","configurationKeys","rangeArray","isValid","method","arrayContainsElement","iterator","viewerpreferences","pdfDict","vPref","postPutResources","xmpmeta_beginning","rdf_beginning","__metadata__","namespaceuri","rdf_ending","xmpmeta_ending","utf8_xmpmeta_beginning","utf8_rdf_beginning","utf8_metadata","utf8_rdf_ending","utf8_xmpmeta_ending","total_len","metadata_object_number","addMetadata","padz","toUnicode","toUnicodeCmap","codes","range","unicode","unicodeMap","identityHFunction","subset","pdfOutput","pdfOutput2","fontTable","cmap","cmapData","fontDescriptor","PDFObject","bbox","stemV","italicAngle","ascender","decender","capHeight","DescendantFont","winAnsiEncodingFunction","hmtx","head","unitsPerEm","utf8TextFunction","cmapConfirm","strText","codeMap","utf8EscapeFunction","parms","_initializeVFS","vFS","addFileToVFS","filecontent","bidiUnicodeTypes","__bidiEngine__","_UNICODE_TYPES","_bidiUnicodeTypes","_STATE_TABLE_LTR","_STATE_TABLE_RTL","_TYPE_NAMES_MAP","EN","AN","_UNICODE_RANGES_MAP","_SWAP_TABLE","_LTR_RANGES_REG_EXPR","_lastArabic","_hasUbatB","_hasUbatS","DIR_LTR","DIR_RTL","_isInVisual","_isInRtl","_isOutVisual","_isOutRtl","_isSymmetricSwapping","_dir","_init","sourceToTargetMap","_isContextualDirRtl","_getCharType","rangeIdx","charType","_resolveCharType","chars","types","resolvedTypes","cType","wType","nType","rtlCandidate","_handleUbatS","levels","_invertString","_computeLevels","hiLevel","params","action","condition","newLevel","prevState","condPos","newState","stateTable","_invertByLevel","high","end","low","_symmetricSwap","_reorder","doBidiReorder","isSymmetricSwappingOrig","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","bidiEngine","bidiEngineFunction","Data","readString","Subset","registerTTF","directory","Directory","HeadTable","NameTable","CmapTable","hhea","HheaTable","maxp","MaxpTable","HmtxTable","post","PostTable","os2","OS2Table","loca","LocaTable","glyf","GlyfTable","exists","lineGap","xMin","yMin","xMax","yMax","raw","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","character","glyph","forGlyph","advance","includeGap","gap","readByte","writeUInt32","readInt32","int","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","checksum","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","adjustment","directoryLength","headOffset","log2","tableData","__slice","Table","__hasProp","__extends","ctor","__super__","_super","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","CmapEntry","endCode","glyphId","glyphIds","idDelta","idRangeOffset","saveOffset","segCount","segCountX2","startCode","platformID","encodingID","language","charmap","charMap","diff","endCodes","glyphIDs","indexes","last","nextID","old","rangeOffsets","startCodes","startGlyph","subtable","_len1","_len2","_len3","_len4","_len5","_len6","_len7","_n","_name","_o","_p","_q","new","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","numberOfGlyphs","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","_results1","numGlyphs","NameEntry","languageID","entries","stringOffset","strings","nameID","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","lsbCount","lsb","leftSideBearings","cache","glyphFor","numberOfContours","lengthOf","CompoundGlyph","SimpleGlyph","glyphs","mapping","old2new","compound","ARG_1_AND_2_ARE_WORDS","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_SCALE","WE_HAVE_A_TWO_BY_TWO","glyphOffsets","activeGlyphs","glyfPtr","listGlyf","newLocaTable","invert","unicodes","next","generateCmap","roman","unicodeCmap","glyphsFor","additionalIDs","glyID","ids","new2old","newIDs","nextGlyphID","oldID","oldIDs","items","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"mappings":"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"} \ No newline at end of file diff --git a/lib/jspdf/jspdf.es.min.js b/lib/jspdf/jspdf.es.min.js new file mode 100644 index 0000000..31f5acd --- /dev/null +++ b/lib/jspdf/jspdf.es.min.js @@ -0,0 +1,332 @@ +/** @license + * + * jsPDF - PDF Document creation from JavaScript + * Version 2.5.1 Built on 2022-01-28T15:37:57.791Z + * CommitID 00000000 + * + * Copyright (c) 2010-2021 James Hall , https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +import t from"@babel/runtime/helpers/typeof";import{zlibSync as e,unzlibSync as r}from"fflate";var n=function(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this}();function i(){n.console&&"function"==typeof n.console.log&&n.console.log.apply(n.console,arguments)}var a={log:i,warn:function(t){n.console&&("function"==typeof n.console.warn?n.console.warn.apply(n.console,arguments):i.call(null,arguments))},error:function(t){n.console&&("function"==typeof n.console.error?n.console.error.apply(n.console,arguments):i(t))}};function o(t,e,r){var n=new XMLHttpRequest;n.open("GET",t),n.responseType="blob",n.onload=function(){l(n.response,e,r)},n.onerror=function(){a.error("could not download file")},n.send()}function s(t){var e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch(t){}return e.status>=200&&e.status<=299}function c(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(r){var e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}var u,h,l=n.saveAs||("object"!==("undefined"==typeof window?"undefined":t(window))||window!==n?function(){}:"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype?function(t,e,r){var i=n.URL||n.webkitURL,a=document.createElement("a");e=e||t.name||"download",a.download=e,a.rel="noopener","string"==typeof t?(a.href=t,a.origin!==location.origin?s(a.href)?o(t,e,r):c(a,a.target="_blank"):c(a)):(a.href=i.createObjectURL(t),setTimeout((function(){i.revokeObjectURL(a.href)}),4e4),setTimeout((function(){c(a)}),0))}:"msSaveOrOpenBlob"in navigator?function(e,r,n){if(r=r||e.name||"download","string"==typeof e)if(s(e))o(e,r,n);else{var i=document.createElement("a");i.href=e,i.target="_blank",setTimeout((function(){c(i)}))}else navigator.msSaveOrOpenBlob(function(e,r){return void 0===r?r={autoBom:!1}:"object"!==t(r)&&(a.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,n),r)}:function(e,r,i,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return o(e,r,i);var s="application/octet-stream"===e.type,c=/constructor/i.test(n.HTMLElement)||n.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&c)&&"object"===("undefined"==typeof FileReader?"undefined":t(FileReader))){var h=new FileReader;h.onloadend=function(){var t=h.result;t=u?t:t.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=t:location=t,a=null},h.readAsDataURL(e)}else{var l=n.URL||n.webkitURL,f=l.createObjectURL(e);a?a.location=f:location.href=f,a=null,setTimeout((function(){l.revokeObjectURL(f)}),4e4)}}); +/** + * A class to parse color values + * @author Stoyan Stefanov + * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} + * @license Use it if you like it + */function f(t){var e;t=t||"",this.ok=!1,"#"==t.charAt(0)&&(t=t.substr(1,6));t={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"}[t=(t=t.replace(/ /g,"")).toLowerCase()]||t;for(var r=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],n=0;n255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),r=this.b.toString(16);return 1==t.length&&(t="0"+t),1==e.length&&(e="0"+e),1==r.length&&(r="0"+r),"#"+t+e+r}} +/** + * @license + * Joseph Myers does not specify a particular license for his work. + * + * Author: Joseph Myers + * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js + * + * Modified by: Owen Leong + */ +function d(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r=g(r,n,i,a,e[0],7,-680876936),a=g(a,r,n,i,e[1],12,-389564586),i=g(i,a,r,n,e[2],17,606105819),n=g(n,i,a,r,e[3],22,-1044525330),r=g(r,n,i,a,e[4],7,-176418897),a=g(a,r,n,i,e[5],12,1200080426),i=g(i,a,r,n,e[6],17,-1473231341),n=g(n,i,a,r,e[7],22,-45705983),r=g(r,n,i,a,e[8],7,1770035416),a=g(a,r,n,i,e[9],12,-1958414417),i=g(i,a,r,n,e[10],17,-42063),n=g(n,i,a,r,e[11],22,-1990404162),r=g(r,n,i,a,e[12],7,1804603682),a=g(a,r,n,i,e[13],12,-40341101),i=g(i,a,r,n,e[14],17,-1502002290),r=m(r,n=g(n,i,a,r,e[15],22,1236535329),i,a,e[1],5,-165796510),a=m(a,r,n,i,e[6],9,-1069501632),i=m(i,a,r,n,e[11],14,643717713),n=m(n,i,a,r,e[0],20,-373897302),r=m(r,n,i,a,e[5],5,-701558691),a=m(a,r,n,i,e[10],9,38016083),i=m(i,a,r,n,e[15],14,-660478335),n=m(n,i,a,r,e[4],20,-405537848),r=m(r,n,i,a,e[9],5,568446438),a=m(a,r,n,i,e[14],9,-1019803690),i=m(i,a,r,n,e[3],14,-187363961),n=m(n,i,a,r,e[8],20,1163531501),r=m(r,n,i,a,e[13],5,-1444681467),a=m(a,r,n,i,e[2],9,-51403784),i=m(i,a,r,n,e[7],14,1735328473),r=v(r,n=m(n,i,a,r,e[12],20,-1926607734),i,a,e[5],4,-378558),a=v(a,r,n,i,e[8],11,-2022574463),i=v(i,a,r,n,e[11],16,1839030562),n=v(n,i,a,r,e[14],23,-35309556),r=v(r,n,i,a,e[1],4,-1530992060),a=v(a,r,n,i,e[4],11,1272893353),i=v(i,a,r,n,e[7],16,-155497632),n=v(n,i,a,r,e[10],23,-1094730640),r=v(r,n,i,a,e[13],4,681279174),a=v(a,r,n,i,e[0],11,-358537222),i=v(i,a,r,n,e[3],16,-722521979),n=v(n,i,a,r,e[6],23,76029189),r=v(r,n,i,a,e[9],4,-640364487),a=v(a,r,n,i,e[12],11,-421815835),i=v(i,a,r,n,e[15],16,530742520),r=b(r,n=v(n,i,a,r,e[2],23,-995338651),i,a,e[0],6,-198630844),a=b(a,r,n,i,e[7],10,1126891415),i=b(i,a,r,n,e[14],15,-1416354905),n=b(n,i,a,r,e[5],21,-57434055),r=b(r,n,i,a,e[12],6,1700485571),a=b(a,r,n,i,e[3],10,-1894986606),i=b(i,a,r,n,e[10],15,-1051523),n=b(n,i,a,r,e[1],21,-2054922799),r=b(r,n,i,a,e[8],6,1873313359),a=b(a,r,n,i,e[15],10,-30611744),i=b(i,a,r,n,e[6],15,-1560198380),n=b(n,i,a,r,e[13],21,1309151649),r=b(r,n,i,a,e[4],6,-145523070),a=b(a,r,n,i,e[11],10,-1120210379),i=b(i,a,r,n,e[2],15,718787259),n=b(n,i,a,r,e[9],21,-343485551),t[0]=_(r,t[0]),t[1]=_(n,t[1]),t[2]=_(i,t[2]),t[3]=_(a,t[3])}function p(t,e,r,n,i,a){return e=_(_(e,t),_(n,a)),_(e<>>32-i,r)}function g(t,e,r,n,i,a,o){return p(e&r|~e&n,t,e,i,a,o)}function m(t,e,r,n,i,a,o){return p(e&n|r&~n,t,e,i,a,o)}function v(t,e,r,n,i,a,o){return p(e^r^n,t,e,i,a,o)}function b(t,e,r,n,i,a,o){return p(r^(e|~n),t,e,i,a,o)}function y(t){var e,r=t.length,n=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=t.length;e+=64)d(n,w(t.substring(e-64,e)));t=t.substring(e-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e>2]|=t.charCodeAt(e)<<(e%4<<3);if(i[e>>2]|=128<<(e%4<<3),e>55)for(d(n,i),e=0;e<16;e++)i[e]=0;return i[14]=8*r,d(n,i),n}function w(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}u=n.atob.bind(n),h=n.btoa.bind(n);var N="0123456789abcdef".split("");function L(t){for(var e="",r=0;r<4;r++)e+=N[t>>8*r+4&15]+N[t>>8*r&15];return e}function A(t){return String.fromCharCode((255&t)>>0,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function x(t){return y(t).map(A).join("")}var S="5d41402abc4b2a76b9719d911017c592"!=function(t){for(var e=0;e>16)+(e>>16)+(r>>16)<<16|65535&r}return t+e&4294967295} +/** + * @license + * FPDF is released under a permissive license: there is no usage restriction. + * You may embed it freely in your application (commercial or not), with or + * without modifications. + * + * Reference: http://www.fpdf.org/en/script/script37.php + */function P(t,e){var r,n,i,a;if(t!==r){for(var o=(i=t,a=1+(256/t.length>>0),new Array(a+1).join(i)),s=[],c=0;c<256;c++)s[c]=c;var u=0;for(c=0;c<256;c++){var h=s[c];u=(u+h+o.charCodeAt(c))%256,s[c]=s[u],s[u]=h}r=t,n=s}else s=n;var l=e.length,f=0,d=0,p="";for(c=0;c€/\f©þdSiz";var a=(e+this.padding).substr(0,32),o=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=x(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=P(this.encryptionKey,this.padding)}function F(t){if(/[^\u0000-\u00ff]/.test(t))throw new Error("Invalid PDF Name Object: "+t+", Only accept ASCII characters.");for(var e="",r=t.length,n=0;n126)e+="#"+("0"+i.toString(16)).slice(-2);else e+=t[n]}return e}function C(e){if("object"!==t(e))throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)");var r={};this.subscribe=function(t,e,n){if(n=n||!1,"string"!=typeof t||"function"!=typeof e||"boolean"!=typeof n)throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)");r.hasOwnProperty(t)||(r[t]={});var i=Math.random().toString(35);return r[t][i]=[e,!!n],i},this.unsubscribe=function(t){for(var e in r)if(r[e][t])return delete r[e][t],0===Object.keys(r[e]).length&&delete r[e],!0;return!1},this.publish=function(t){if(r.hasOwnProperty(t)){var i=Array.prototype.slice.call(arguments,1),o=[];for(var s in r[t]){var c=r[t][s];try{c[0].apply(e,i)}catch(t){n.console&&a.error("jsPDF PubSub Error",t.message,t)}c[1]&&o.push(s)}o.length&&o.forEach(this.unsubscribe)}},this.getTopics=function(){return r}}function j(t){if(!(this instanceof j))return new j(t);var e="opacity,stroke-opacity".split(",");for(var r in t)t.hasOwnProperty(r)&&e.indexOf(r)>=0&&(this[r]=t[r]);this.id="",this.objectNumber=-1}function O(t,e){this.gState=t,this.matrix=e,this.id="",this.objectNumber=-1}function B(t,e,r,n,i){if(!(this instanceof B))return new B(t,e,r,n,i);this.type="axial"===t?2:3,this.coords=e,this.colors=r,O.call(this,n,i)}function M(t,e,r,n,i){if(!(this instanceof M))return new M(t,e,r,n,i);this.boundingBox=t,this.xStep=e,this.yStep=r,this.stream="",this.cloneIndex=0,O.call(this,n,i)}function E(e){var r,i="string"==typeof arguments[0]?arguments[0]:"p",o=arguments[1],s=arguments[2],c=arguments[3],u=[],d=1,p=16,g="S",m=null;"object"===t(e=e||{})&&(i=e.orientation,o=e.unit||o,s=e.format||s,c=e.compress||e.compressPdf||c,null!==(m=e.encryption||null)&&(m.userPassword=m.userPassword||"",m.ownerPassword=m.ownerPassword||"",m.userPermissions=m.userPermissions||[]),d="number"==typeof e.userUnit?Math.abs(e.userUnit):1,void 0!==e.precision&&(r=e.precision),void 0!==e.floatPrecision&&(p=e.floatPrecision),g=e.defaultPathOperation||"S"),u=e.filters||(!0===c?["FlateEncode"]:u),o=o||"mm",i=(""+(i||"P")).toLowerCase();var v=e.putOnlyUsedFonts||!1,b={},y={internal:{},__private__:{}};y.__private__.PubSub=C;var w="1.3",N=y.__private__.getPdfVersion=function(){return w};y.__private__.setPdfVersion=function(t){w=t};var L={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};y.__private__.getPageFormats=function(){return L};var A=y.__private__.getPageFormat=function(t){return L[t]};s=s||"a4";var x={COMPAT:"compat",ADVANCED:"advanced"},S=x.COMPAT;function _(){this.saveGraphicsState(),lt(new Vt(_t,0,0,-_t,0,Rr()*_t).toString()+" cm"),this.setFontSize(this.getFontSize()/_t),g="n",S=x.ADVANCED}function P(){this.restoreGraphicsState(),g="S",S=x.COMPAT}var k=y.__private__.combineFontStyleAndFontWeight=function(t,e){if("bold"==t&&"normal"==e||"bold"==t&&400==e||"normal"==t&&"italic"==e||"bold"==t&&"italic"==e)throw new Error("Invalid Combination of fontweight and fontstyle");return e&&(t=400==e||"normal"===e?"italic"===t?"italic":"normal":700!=e&&"bold"!==e||"normal"!==t?(700==e?"bold":e)+""+t:"bold"),t};y.advancedAPI=function(t){var e=S===x.COMPAT;return e&&_.call(this),"function"!=typeof t||(t(this),e&&P.call(this)),this},y.compatAPI=function(t){var e=S===x.ADVANCED;return e&&P.call(this),"function"!=typeof t||(t(this),e&&_.call(this)),this},y.isAdvancedAPI=function(){return S===x.ADVANCED};var O,q=function(t){if(S!==x.ADVANCED)throw new Error(t+" is only available in 'advanced' API mode. You need to call advancedAPI() first.")},D=y.roundToPrecision=y.__private__.roundToPrecision=function(t,e){var n=r||e;if(isNaN(t)||isNaN(n))throw new Error("Invalid argument passed to jsPDF.roundToPrecision");return t.toFixed(n).replace(/0+$/,"")};O=y.hpf=y.__private__.hpf="number"==typeof p?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,p)}:"smart"===p?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,t>-1&&t<1?16:5)}:function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,16)};var R=y.f2=y.__private__.f2=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f2");return D(t,2)},T=y.__private__.f3=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f3");return D(t,3)},U=y.scale=y.__private__.scale=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.scale");return S===x.COMPAT?t*_t:S===x.ADVANCED?t:void 0},z=function(t){return S===x.COMPAT?Rr()-t:S===x.ADVANCED?t:void 0},H=function(t){return U(z(t))};y.__private__.setPrecision=y.setPrecision=function(t){"number"==typeof parseInt(t,10)&&(r=parseInt(t,10))};var W,V="00000000000000000000000000000000",G=y.__private__.getFileId=function(){return V},Y=y.__private__.setFileId=function(t){return V=void 0!==t&&/^[a-fA-F0-9]{32}$/.test(t)?t.toUpperCase():V.split("").map((function(){return"ABCDEF0123456789".charAt(Math.floor(16*Math.random()))})).join(""),null!==m&&(Ye=new I(m.userPermissions,m.userPassword,m.ownerPassword,V)),V};y.setFileId=function(t){return Y(t),this},y.getFileId=function(){return G()};var J=y.__private__.convertDateToPDFDate=function(t){var e=t.getTimezoneOffset(),r=e<0?"+":"-",n=Math.floor(Math.abs(e/60)),i=Math.abs(e%60),a=[r,Q(n),"'",Q(i),"'"].join("");return["D:",t.getFullYear(),Q(t.getMonth()+1),Q(t.getDate()),Q(t.getHours()),Q(t.getMinutes()),Q(t.getSeconds()),a].join("")},X=y.__private__.convertPDFDateToDate=function(t){var e=parseInt(t.substr(2,4),10),r=parseInt(t.substr(6,2),10)-1,n=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),a=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return new Date(e,r,n,i,a,o,0)},K=y.__private__.setCreationDate=function(t){var e;if(void 0===t&&(t=new Date),t instanceof Date)e=J(t);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t))throw new Error("Invalid argument passed to jsPDF.setCreationDate");e=t}return W=e},Z=y.__private__.getCreationDate=function(t){var e=W;return"jsDate"===t&&(e=X(W)),e};y.setCreationDate=function(t){return K(t),this},y.getCreationDate=function(t){return Z(t)};var $,Q=y.__private__.padd2=function(t){return("0"+parseInt(t)).slice(-2)},tt=y.__private__.padd2Hex=function(t){return("00"+(t=t.toString())).substr(t.length)},et=0,rt=[],nt=[],it=0,at=[],ot=[],st=!1,ct=nt,ut=function(){et=0,it=0,nt=[],rt=[],at=[],Qt=Kt(),te=Kt()};y.__private__.setCustomOutputDestination=function(t){st=!0,ct=t};var ht=function(t){st||(ct=t)};y.__private__.resetCustomOutputDestination=function(){st=!1,ct=nt};var lt=y.__private__.out=function(t){return t=t.toString(),it+=t.length+1,ct.push(t),ct},ft=y.__private__.write=function(t){return lt(1===arguments.length?t.toString():Array.prototype.join.call(arguments," "))},dt=y.__private__.getArrayBuffer=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r);e--;)n[e]=t.charCodeAt(e);return r},pt=[["Helvetica","helvetica","normal","WinAnsiEncoding"],["Helvetica-Bold","helvetica","bold","WinAnsiEncoding"],["Helvetica-Oblique","helvetica","italic","WinAnsiEncoding"],["Helvetica-BoldOblique","helvetica","bolditalic","WinAnsiEncoding"],["Courier","courier","normal","WinAnsiEncoding"],["Courier-Bold","courier","bold","WinAnsiEncoding"],["Courier-Oblique","courier","italic","WinAnsiEncoding"],["Courier-BoldOblique","courier","bolditalic","WinAnsiEncoding"],["Times-Roman","times","normal","WinAnsiEncoding"],["Times-Bold","times","bold","WinAnsiEncoding"],["Times-Italic","times","italic","WinAnsiEncoding"],["Times-BoldItalic","times","bolditalic","WinAnsiEncoding"],["ZapfDingbats","zapfdingbats","normal",null],["Symbol","symbol","normal",null]];y.__private__.getStandardFonts=function(){return pt};var gt=e.fontSize||16;y.__private__.setFontSize=y.setFontSize=function(t){return gt=S===x.ADVANCED?t/_t:t,this};var mt,vt=y.__private__.getFontSize=y.getFontSize=function(){return S===x.COMPAT?gt:gt*_t},bt=e.R2L||!1;y.__private__.setR2L=y.setR2L=function(t){return bt=t,this},y.__private__.getR2L=y.getR2L=function(){return bt};var yt,wt=y.__private__.setZoomMode=function(t){var e=[void 0,null,"fullwidth","fullheight","fullpage","original"];if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(t))mt=t;else if(isNaN(t)){if(-1===e.indexOf(t))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "'+t+'" is not recognized.');mt=t}else mt=parseInt(t,10)};y.__private__.getZoomMode=function(){return mt};var Nt,Lt=y.__private__.setPageMode=function(t){if(-1==[void 0,null,"UseNone","UseOutlines","UseThumbs","FullScreen"].indexOf(t))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "'+t+'" is not recognized.');yt=t};y.__private__.getPageMode=function(){return yt};var At=y.__private__.setLayoutMode=function(t){if(-1==[void 0,null,"continuous","single","twoleft","tworight","two"].indexOf(t))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "'+t+'" is not recognized.');Nt=t};y.__private__.getLayoutMode=function(){return Nt},y.__private__.setDisplayMode=y.setDisplayMode=function(t,e,r){return wt(t),At(e),Lt(r),this};var xt={title:"",subject:"",author:"",keywords:"",creator:""};y.__private__.getDocumentProperty=function(t){if(-1===Object.keys(xt).indexOf(t))throw new Error("Invalid argument passed to jsPDF.getDocumentProperty");return xt[t]},y.__private__.getDocumentProperties=function(){return xt},y.__private__.setDocumentProperties=y.setProperties=y.setDocumentProperties=function(t){for(var e in xt)xt.hasOwnProperty(e)&&t[e]&&(xt[e]=t[e]);return this},y.__private__.setDocumentProperty=function(t,e){if(-1===Object.keys(xt).indexOf(t))throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty");return xt[t]=e};var St,_t,Pt,kt,It,Ft={},Ct={},jt=[],Ot={},Bt={},Mt={},Et={},qt=null,Dt=0,Rt=[],Tt=new C(y),Ut=e.hotfixes||[],zt={},Ht={},Wt=[],Vt=function t(e,r,n,i,a,o){if(!(this instanceof t))return new t(e,r,n,i,a,o);isNaN(e)&&(e=1),isNaN(r)&&(r=0),isNaN(n)&&(n=0),isNaN(i)&&(i=1),isNaN(a)&&(a=0),isNaN(o)&&(o=0),this._matrix=[e,r,n,i,a,o]};Object.defineProperty(Vt.prototype,"sx",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Vt.prototype,"shy",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Vt.prototype,"shx",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Vt.prototype,"sy",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Vt.prototype,"tx",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Vt.prototype,"ty",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Vt.prototype,"a",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Vt.prototype,"b",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Vt.prototype,"c",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Vt.prototype,"d",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Vt.prototype,"e",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Vt.prototype,"f",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Vt.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Vt.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Vt.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Vt.prototype,"isIdentity",{get:function(){return 1===this.sx&&(0===this.shy&&(0===this.shx&&(1===this.sy&&(0===this.tx&&0===this.ty))))}}),Vt.prototype.join=function(t){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(O).join(t)},Vt.prototype.multiply=function(t){var e=t.sx*this.sx+t.shy*this.shx,r=t.sx*this.shy+t.shy*this.sy,n=t.shx*this.sx+t.sy*this.shx,i=t.shx*this.shy+t.sy*this.sy,a=t.tx*this.sx+t.ty*this.shx+this.tx,o=t.tx*this.shy+t.ty*this.sy+this.ty;return new Vt(e,r,n,i,a,o)},Vt.prototype.decompose=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(t*t+e*e),s=(t/=o)*r+(e/=o)*n;r-=t*s,n-=e*s;var c=Math.sqrt(r*r+n*n);return s/=c,t*(n/=c)>16&255,i=u>>8&255,a=255&u}if(void 0===i||void 0===o&&n===i&&i===a)if("string"==typeof n)r=n+" "+s[0];else switch(e.precision){case 2:r=R(n/255)+" "+s[0];break;case 3:default:r=T(n/255)+" "+s[0]}else if(void 0===o||"object"===t(o)){if(o&&!isNaN(o.a)&&0===o.a)return r=["1.","1.","1.",s[1]].join(" ");if("string"==typeof n)r=[n,i,a,s[1]].join(" ");else switch(e.precision){case 2:r=[R(n/255),R(i/255),R(a/255),s[1]].join(" ");break;default:case 3:r=[T(n/255),T(i/255),T(a/255),s[1]].join(" ")}}else if("string"==typeof n)r=[n,i,a,o,s[2]].join(" ");else switch(e.precision){case 2:r=[R(n),R(i),R(a),R(o),s[2]].join(" ");break;case 3:default:r=[T(n),T(i),T(a),T(o),s[2]].join(" ")}return r},ne=y.__private__.getFilters=function(){return u},ie=y.__private__.putStream=function(t){var e=(t=t||{}).data||"",r=t.filters||ne(),n=t.alreadyAppliedFilters||[],i=t.addLength1||!1,a=e.length,o=t.objectId,s=function(t){return t};if(null!==m&&void 0===o)throw new Error("ObjectId must be passed to putStream for file encryption");null!==m&&(s=Ye.encryptor(o,0));var c={};!0===r&&(r=["FlateEncode"]);var u=t.additionalKeyValues||[],h=(c=void 0!==E.API.processDataByFilters?E.API.processDataByFilters(e,r):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(" "):n.toString());if(0!==c.data.length&&(u.push({key:"Length",value:c.data.length}),!0===i&&u.push({key:"Length1",value:a})),0!=h.length)if(h.split("/").length-1==1)u.push({key:"Filter",value:h});else{u.push({key:"Filter",value:"["+h+"]"});for(var l=0;l>"),0!==c.data.length&&(lt("stream"),lt(s(c.data)),lt("endstream"))},ae=y.__private__.putPage=function(t){var e=t.number,r=t.data,n=t.objId,i=t.contentsObjId;Zt(n,!0),lt("<>"),lt("endobj");var a=r.join("\n");return S===x.ADVANCED&&(a+="\nQ"),Zt(i,!0),ie({data:a,filters:ne(),objectId:i}),lt("endobj"),n},oe=y.__private__.putPages=function(){var t,e,r=[];for(t=1;t<=Dt;t++)Rt[t].objId=Kt(),Rt[t].contentsObjId=Kt();for(t=1;t<=Dt;t++)r.push(ae({number:t,data:ot[t],objId:Rt[t].objId,contentsObjId:Rt[t].contentsObjId,mediaBox:Rt[t].mediaBox,cropBox:Rt[t].cropBox,bleedBox:Rt[t].bleedBox,trimBox:Rt[t].trimBox,artBox:Rt[t].artBox,userUnit:Rt[t].userUnit,rootDictionaryObjId:Qt,resourceDictionaryObjId:te}));Zt(Qt,!0),lt("<>"),lt("endobj"),Tt.publish("postPutPages")},se=function(t){Tt.publish("putFont",{font:t,out:lt,newObject:Xt,putStream:ie}),!0!==t.isAlreadyPutted&&(t.objectNumber=Xt(),lt("<<"),lt("/Type /Font"),lt("/BaseFont /"+F(t.postScriptName)),lt("/Subtype /Type1"),"string"==typeof t.encoding&<("/Encoding /"+t.encoding),lt("/FirstChar 32"),lt("/LastChar 255"),lt(">>"),lt("endobj"))},ce=function(){for(var t in Ft)Ft.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&se(Ft[t])},ue=function(t){t.objectNumber=Xt();var e=[];e.push({key:"Type",value:"/XObject"}),e.push({key:"Subtype",value:"/Form"}),e.push({key:"BBox",value:"["+[O(t.x),O(t.y),O(t.x+t.width),O(t.y+t.height)].join(" ")+"]"}),e.push({key:"Matrix",value:"["+t.matrix.toString()+"]"});var r=t.pages[1].join("\n");ie({data:r,additionalKeyValues:e,objectId:t.objectNumber}),lt("endobj")},he=function(){for(var t in zt)zt.hasOwnProperty(t)&&ue(zt[t])},le=function(t,e){var r,n=[],i=1/(e-1);for(r=0;r<1;r+=i)n.push(r);if(n.push(1),0!=t[0].offset){var a={offset:0,color:t[0].color};t.unshift(a)}if(1!=t[t.length-1].offset){var o={offset:1,color:t[t.length-1].color};t.push(o)}for(var s="",c=0,u=0;ut[c+1].offset;)c++;var h=t[c].offset,l=(r-h)/(t[c+1].offset-h),f=t[c].color,d=t[c+1].color;s+=tt(Math.round((1-l)*f[0]+l*d[0]).toString(16))+tt(Math.round((1-l)*f[1]+l*d[1]).toString(16))+tt(Math.round((1-l)*f[2]+l*d[2]).toString(16))}return s.trim()},fe=function(t,e){e||(e=21);var r=Xt(),n=le(t.colors,e),i=[];i.push({key:"FunctionType",value:"0"}),i.push({key:"Domain",value:"[0.0 1.0]"}),i.push({key:"Size",value:"["+e+"]"}),i.push({key:"BitsPerSample",value:"8"}),i.push({key:"Range",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),i.push({key:"Decode",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),ie({data:n,additionalKeyValues:i,alreadyAppliedFilters:["/ASCIIHexDecode"],objectId:r}),lt("endobj"),t.objectNumber=Xt(),lt("<< /ShadingType "+t.type),lt("/ColorSpace /DeviceRGB");var a="/Coords ["+O(parseFloat(t.coords[0]))+" "+O(parseFloat(t.coords[1]))+" ";2===t.type?a+=O(parseFloat(t.coords[2]))+" "+O(parseFloat(t.coords[3])):a+=O(parseFloat(t.coords[2]))+" "+O(parseFloat(t.coords[3]))+" "+O(parseFloat(t.coords[4]))+" "+O(parseFloat(t.coords[5])),lt(a+="]"),t.matrix&<("/Matrix ["+t.matrix.toString()+"]"),lt("/Function "+r+" 0 R"),lt("/Extend [true true]"),lt(">>"),lt("endobj")},de=function(t,e){var r=Kt(),n=Xt();e.push({resourcesOid:r,objectOid:n}),t.objectNumber=n;var i=[];i.push({key:"Type",value:"/Pattern"}),i.push({key:"PatternType",value:"1"}),i.push({key:"PaintType",value:"1"}),i.push({key:"TilingType",value:"1"}),i.push({key:"BBox",value:"["+t.boundingBox.map(O).join(" ")+"]"}),i.push({key:"XStep",value:O(t.xStep)}),i.push({key:"YStep",value:O(t.yStep)}),i.push({key:"Resources",value:r+" 0 R"}),t.matrix&&i.push({key:"Matrix",value:"["+t.matrix.toString()+"]"}),ie({data:t.stream,additionalKeyValues:i,objectId:t.objectNumber}),lt("endobj")},pe=function(t){var e;for(e in Ot)Ot.hasOwnProperty(e)&&(Ot[e]instanceof B?fe(Ot[e]):Ot[e]instanceof M&&de(Ot[e],t))},ge=function(t){for(var e in t.objectNumber=Xt(),lt("<<"),t)switch(e){case"opacity":lt("/ca "+R(t[e]));break;case"stroke-opacity":lt("/CA "+R(t[e]))}lt(">>"),lt("endobj")},me=function(){var t;for(t in Mt)Mt.hasOwnProperty(t)&&ge(Mt[t])},ve=function(){for(var t in lt("/XObject <<"),zt)zt.hasOwnProperty(t)&&zt[t].objectNumber>=0&<("/"+t+" "+zt[t].objectNumber+" 0 R");Tt.publish("putXobjectDict"),lt(">>")},be=function(){Ye.oid=Xt(),lt("<<"),lt("/Filter /Standard"),lt("/V "+Ye.v),lt("/R "+Ye.r),lt("/U <"+Ye.toHexString(Ye.U)+">"),lt("/O <"+Ye.toHexString(Ye.O)+">"),lt("/P "+Ye.P),lt(">>"),lt("endobj")},ye=function(){for(var t in lt("/Font <<"),Ft)Ft.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&<("/"+t+" "+Ft[t].objectNumber+" 0 R");lt(">>")},we=function(){if(Object.keys(Ot).length>0){for(var t in lt("/Shading <<"),Ot)Ot.hasOwnProperty(t)&&Ot[t]instanceof B&&Ot[t].objectNumber>=0&<("/"+t+" "+Ot[t].objectNumber+" 0 R");Tt.publish("putShadingPatternDict"),lt(">>")}},Ne=function(t){if(Object.keys(Ot).length>0){for(var e in lt("/Pattern <<"),Ot)Ot.hasOwnProperty(e)&&Ot[e]instanceof y.TilingPattern&&Ot[e].objectNumber>=0&&Ot[e].objectNumber>")}},Le=function(){if(Object.keys(Mt).length>0){var t;for(t in lt("/ExtGState <<"),Mt)Mt.hasOwnProperty(t)&&Mt[t].objectNumber>=0&<("/"+t+" "+Mt[t].objectNumber+" 0 R");Tt.publish("putGStateDict"),lt(">>")}},Ae=function(t){Zt(t.resourcesOid,!0),lt("<<"),lt("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"),ye(),we(),Ne(t.objectOid),Le(),ve(),lt(">>"),lt("endobj")},xe=function(){var t=[];ce(),me(),he(),pe(t),Tt.publish("putResources"),t.forEach(Ae),Ae({resourcesOid:te,objectOid:Number.MAX_SAFE_INTEGER}),Tt.publish("postPutResources")},Se=function(){Tt.publish("putAdditionalObjects");for(var t=0;t>8&&(c=!0);t=s.join("")}for(r=t.length;void 0===c&&0!==r;)t.charCodeAt(r-1)>>8&&(c=!0),r--;if(!c)return t;for(s=e.noBOM?[]:[254,255],r=0,n=t.length;r>8)>>8)throw new Error("Character at position "+r+" of string '"+t+"' exceeds 16bits. Cannot be encoded into UCS-2 BE");s.push(h),s.push(u-(h<<8))}return String.fromCharCode.apply(void 0,s)},Ce=y.__private__.pdfEscape=y.pdfEscape=function(t,e){return Fe(t,e).replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},je=y.__private__.beginPage=function(t){ot[++Dt]=[],Rt[Dt]={objId:0,contentsObjId:0,userUnit:Number(d),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(t[0]),topRightY:Number(t[1])}},Me(Dt),ht(ot[$])},Oe=function(t,e){var r,n,o;switch(i=e||i,"string"==typeof t&&(r=A(t.toLowerCase()),Array.isArray(r)&&(n=r[0],o=r[1])),Array.isArray(t)&&(n=t[0]*_t,o=t[1]*_t),isNaN(n)&&(n=s[0],o=s[1]),(n>14400||o>14400)&&(a.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"),n=Math.min(14400,n),o=Math.min(14400,o)),s=[n,o],i.substr(0,1)){case"l":o>n&&(s=[o,n]);break;case"p":n>o&&(s=[o,n])}je(s),pr(fr),lt(Lr),0!==kr&<(kr+" J"),0!==Ir&<(Ir+" j"),Tt.publish("addPage",{pageNumber:Dt})},Be=function(t){t>0&&t<=Dt&&(ot.splice(t,1),Rt.splice(t,1),Dt--,$>Dt&&($=Dt),this.setPage($))},Me=function(t){t>0&&t<=Dt&&($=t)},Ee=y.__private__.getNumberOfPages=y.getNumberOfPages=function(){return ot.length-1},qe=function(t,e,r){var n,i=void 0;return r=r||{},t=void 0!==t?t:Ft[St].fontName,e=void 0!==e?e:Ft[St].fontStyle,n=t.toLowerCase(),void 0!==Ct[n]&&void 0!==Ct[n][e]?i=Ct[n][e]:void 0!==Ct[t]&&void 0!==Ct[t][e]?i=Ct[t][e]:!1===r.disableWarning&&a.warn("Unable to look up font label for font '"+t+"', '"+e+"'. Refer to getFontList() for available fonts."),i||r.noFallback||null==(i=Ct.times[e])&&(i=Ct.times.normal),i},De=y.__private__.putInfo=function(){var t=Xt(),e=function(t){return t};for(var r in null!==m&&(e=Ye.encryptor(t,0)),lt("<<"),lt("/Producer ("+Ce(e("jsPDF "+E.version))+")"),xt)xt.hasOwnProperty(r)&&xt[r]&<("/"+r.substr(0,1).toUpperCase()+r.substr(1)+" ("+Ce(e(xt[r]))+")");lt("/CreationDate ("+Ce(e(W))+")"),lt(">>"),lt("endobj")},Re=y.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||Qt;switch(Xt(),lt("<<"),lt("/Type /Catalog"),lt("/Pages "+e+" 0 R"),mt||(mt="fullwidth"),mt){case"fullwidth":lt("/OpenAction [3 0 R /FitH null]");break;case"fullheight":lt("/OpenAction [3 0 R /FitV null]");break;case"fullpage":lt("/OpenAction [3 0 R /Fit]");break;case"original":lt("/OpenAction [3 0 R /XYZ null null 1]");break;default:var r=""+mt;"%"===r.substr(r.length-1)&&(mt=parseInt(mt)/100),"number"==typeof mt&<("/OpenAction [3 0 R /XYZ null null "+R(mt)+"]")}switch(Nt||(Nt="continuous"),Nt){case"continuous":lt("/PageLayout /OneColumn");break;case"single":lt("/PageLayout /SinglePage");break;case"two":case"twoleft":lt("/PageLayout /TwoColumnLeft");break;case"tworight":lt("/PageLayout /TwoColumnRight")}yt&<("/PageMode /"+yt),Tt.publish("putCatalog"),lt(">>"),lt("endobj")},Te=y.__private__.putTrailer=function(){lt("trailer"),lt("<<"),lt("/Size "+(et+1)),lt("/Root "+et+" 0 R"),lt("/Info "+(et-1)+" 0 R"),null!==m&<("/Encrypt "+Ye.oid+" 0 R"),lt("/ID [ <"+V+"> <"+V+"> ]"),lt(">>")},Ue=y.__private__.putHeader=function(){lt("%PDF-"+w),lt("%ºß¬à")},ze=y.__private__.putXRef=function(){var t="0000000000";lt("xref"),lt("0 "+(et+1)),lt("0000000000 65535 f ");for(var e=1;e<=et;e++){"function"==typeof rt[e]?lt((t+rt[e]()).slice(-10)+" 00000 n "):void 0!==rt[e]?lt((t+rt[e]).slice(-10)+" 00000 n "):lt("0000000000 00000 n ")}},He=y.__private__.buildDocument=function(){ut(),ht(nt),Tt.publish("buildDocument"),Ue(),oe(),Se(),xe(),null!==m&&be(),De(),Re();var t=it;return ze(),Te(),lt("startxref"),lt(""+t),lt("%%EOF"),ht(ot[$]),nt.join("\n")},We=y.__private__.getBlob=function(t){return new Blob([dt(t)],{type:"application/pdf"})},Ve=y.output=y.__private__.output=Ie((function(t,e){switch("string"==typeof(e=e||{})?e={filename:e}:e.filename=e.filename||"generated.pdf",t){case void 0:return He();case"save":y.save(e.filename);break;case"arraybuffer":return dt(He());case"blob":return We(He());case"bloburi":case"bloburl":if(void 0!==n.URL&&"function"==typeof n.URL.createObjectURL)return n.URL&&n.URL.createObjectURL(We(He()))||void 0;a.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.");break;case"datauristring":case"dataurlstring":var r="",i=He();try{r=h(i)}catch(t){r=h(unescape(encodeURIComponent(i)))}return"data:application/pdf;filename="+e.filename+";base64,"+r;case"pdfobjectnewwindow":if("[object Window]"===Object.prototype.toString.call(n)){var o="https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js",s=' integrity="sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==" crossorigin="anonymous"';e.pdfObjectUrl&&(o=e.pdfObjectUrl,s="");var c='\";\r\n var nW = globalObject.open();\r\n\r\n if (nW !== null) {\r\n nW.document.write(htmlForNewWindow);\r\n }\r\n return nW;\r\n } else {\r\n throw new Error(\r\n \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n case \"pdfjsnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n var htmlForPDFjsNewWindow =\r\n \"\" +\r\n \"\" +\r\n '' +\r\n \"\";\r\n var dataURLNewWindow = globalObject.open();\r\n if (dataURLNewWindow !== null) {\r\n dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n dataURLNewWindow.document.title = options.filename;\r\n }\r\n if (dataURLNewWindow || typeof safari === \"undefined\")\r\n return dataURLNewWindow;\r\n } else {\r\n throw new Error(\r\n \"The option dataurlnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n break;\r\n case \"datauri\":\r\n case \"dataurl\":\r\n return (globalObject.document.location.href = this.output(\r\n \"datauristring\",\r\n options\r\n ));\r\n default:\r\n return null;\r\n }\r\n }));\r\n\r\n /**\r\n * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n * @param {string} hotfixName - The name of the hotfix to check.\r\n * @returns {boolean}\r\n */\r\n var hasHotfix = function(hotfixName) {\r\n return (\r\n Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n );\r\n };\r\n\r\n switch (unit) {\r\n case \"pt\":\r\n scaleFactor = 1;\r\n break;\r\n case \"mm\":\r\n scaleFactor = 72 / 25.4;\r\n break;\r\n case \"cm\":\r\n scaleFactor = 72 / 2.54;\r\n break;\r\n case \"in\":\r\n scaleFactor = 72;\r\n break;\r\n case \"px\":\r\n if (hasHotfix(\"px_scaling\") == true) {\r\n scaleFactor = 72 / 96;\r\n } else {\r\n scaleFactor = 96 / 72;\r\n }\r\n break;\r\n case \"pc\":\r\n scaleFactor = 12;\r\n break;\r\n case \"em\":\r\n scaleFactor = 12;\r\n break;\r\n case \"ex\":\r\n scaleFactor = 6;\r\n break;\r\n default:\r\n if (typeof unit === \"number\") {\r\n scaleFactor = unit;\r\n } else {\r\n throw new Error(\"Invalid unit: \" + unit);\r\n }\r\n }\r\n\r\n var encryption = null;\r\n setCreationDate();\r\n setFileId();\r\n\r\n var getEncryptor = function(objectId) {\r\n if (encryptionOptions !== null) {\r\n return encryption.encryptor(objectId, 0);\r\n }\r\n return function(data) {\r\n return data;\r\n };\r\n };\r\n\r\n //---------------------------------------\r\n // Public API\r\n\r\n var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n pageNumberOneBased\r\n ) {\r\n if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n }\r\n var objId = pagesContext[pageNumberOneBased].objId;\r\n return {\r\n objId: objId,\r\n pageNumber: pageNumberOneBased,\r\n pageContext: pagesContext[pageNumberOneBased]\r\n };\r\n });\r\n\r\n var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n objId\r\n ) {\r\n if (isNaN(objId) || objId % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n }\r\n for (var pageNumber in pagesContext) {\r\n if (pagesContext[pageNumber].objId === objId) {\r\n break;\r\n }\r\n }\r\n return getPageInfo(pageNumber);\r\n });\r\n\r\n var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n return {\r\n objId: pagesContext[currentPage].objId,\r\n pageNumber: currentPage,\r\n pageContext: pagesContext[currentPage]\r\n };\r\n });\r\n\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addPage\r\n */\r\n API.addPage = function() {\r\n _addPage.apply(this, arguments);\r\n return this;\r\n };\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name setPage\r\n * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n * @example\r\n * doc = jsPDF()\r\n * doc.addPage()\r\n * doc.addPage()\r\n * doc.text('I am on page 3', 10, 10)\r\n * doc.setPage(1)\r\n * doc.text('I am on page 1', 10, 10)\r\n */\r\n API.setPage = function() {\r\n _setPage.apply(this, arguments);\r\n setOutputDestination.call(this, pages[currentPage]);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name insertPage\r\n * @memberof jsPDF#\r\n *\r\n * @function\r\n * @instance\r\n * @param {Object} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.insertPage = function(beforePage) {\r\n this.addPage();\r\n this.movePage(currentPage, beforePage);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name movePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {number} targetPage\r\n * @param {number} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.movePage = function(targetPage, beforePage) {\r\n var tmpPages, tmpPagesContext;\r\n if (targetPage > beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var i = targetPage; i > beforePage; i--) {\r\n pages[i] = pages[i - 1];\r\n pagesContext[i] = pagesContext[i - 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n } else if (targetPage < beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var j = targetPage; j < beforePage; j++) {\r\n pages[j] = pages[j + 1];\r\n pagesContext[j] = pagesContext[j + 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Deletes a page from the PDF.\r\n * @name deletePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @param {number} targetPage\r\n * @instance\r\n * @returns {jsPDF}\r\n */\r\n API.deletePage = function() {\r\n _deletePage.apply(this, arguments);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n *\r\n * @function\r\n * @instance\r\n * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n * @param {number} [options.charSpace=0] - The space between each letter.\r\n * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n * @param {Object} [options.flags] - Flags for to8bitStream.\r\n * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n *\r\n * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name text\r\n */\r\n API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n /*\r\n * Inserts something like this into PDF\r\n * BT\r\n * /F1 16 Tf % Font name + size\r\n * 16 TL % How many units down for next line in multiline text\r\n * 0 g % color\r\n * 28.35 813.54 Td % position\r\n * (line one) Tj\r\n * T* (line two) Tj\r\n * T* (line three) Tj\r\n * ET\r\n */\r\n options = options || {};\r\n var scope = options.scope || this;\r\n var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n // in effort to make all calls have similar signature like\r\n // function(data, coordinates... , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (\r\n typeof text === \"number\" &&\r\n typeof x === \"number\" &&\r\n (typeof y === \"string\" || Array.isArray(y))\r\n ) {\r\n var tmp = y;\r\n y = x;\r\n x = text;\r\n text = tmp;\r\n }\r\n\r\n var transformationMatrix;\r\n\r\n if (arguments[3] instanceof Matrix === false) {\r\n flags = arguments[3];\r\n angle = arguments[4];\r\n align = arguments[5];\r\n\r\n if (typeof flags !== \"object\" || flags === null) {\r\n if (typeof angle === \"string\") {\r\n align = angle;\r\n angle = null;\r\n }\r\n if (typeof flags === \"string\") {\r\n align = flags;\r\n flags = null;\r\n }\r\n if (typeof flags === \"number\") {\r\n angle = flags;\r\n flags = null;\r\n }\r\n options = {\r\n flags: flags,\r\n angle: angle,\r\n align: align\r\n };\r\n }\r\n } else {\r\n advancedApiModeTrap(\r\n \"The transform parameter of text() with a Matrix value\"\r\n );\r\n transformationMatrix = transform;\r\n }\r\n\r\n if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n }\r\n\r\n if (text.length === 0) {\r\n return scope;\r\n }\r\n\r\n var xtra = \"\";\r\n var isHex = false;\r\n var lineHeight =\r\n typeof options.lineHeightFactor === \"number\"\r\n ? options.lineHeightFactor\r\n : lineHeightFactor;\r\n var scaleFactor = scope.internal.scaleFactor;\r\n\r\n function ESC(s) {\r\n s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n return pdfEscape(s, flags);\r\n }\r\n\r\n function transformTextToSpecialArray(text) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(curDa);\r\n } else {\r\n if (\r\n Array.isArray(text) &&\r\n (curDa.length === 1 ||\r\n (curDa[1] === undefined && curDa[2] === undefined))\r\n ) {\r\n da.push(curDa[0]);\r\n } else {\r\n da.push([curDa[0], curDa[1], curDa[2]]);\r\n }\r\n }\r\n }\r\n return da;\r\n }\r\n\r\n function processTextByFunction(text, processingFunction) {\r\n var result;\r\n if (typeof text === \"string\") {\r\n result = processingFunction(text)[0];\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n var tmpResult;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(processingFunction(curDa)[0]);\r\n } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n }\r\n }\r\n result = da;\r\n }\r\n return result;\r\n }\r\n\r\n //Check if text is of type String\r\n var textIsOfTypeString = false;\r\n var tmpTextIsOfTypeString = true;\r\n\r\n if (typeof text === \"string\") {\r\n textIsOfTypeString = true;\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (\r\n typeof curDa !== \"string\" ||\r\n (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n ) {\r\n tmpTextIsOfTypeString = false;\r\n }\r\n }\r\n textIsOfTypeString = tmpTextIsOfTypeString;\r\n }\r\n if (textIsOfTypeString === false) {\r\n throw new Error(\r\n 'Type of text must be string or Array. \"' +\r\n text +\r\n '\" is not recognized.'\r\n );\r\n }\r\n\r\n //If there are any newlines in text, we assume\r\n //the user wanted to print multiple lines, so break the\r\n //text up into an array. If the text is already an array,\r\n //we assume the user knows what they are doing.\r\n //Convert text into an array anyway to simplify\r\n //later code.\r\n\r\n if (typeof text === \"string\") {\r\n if (text.match(/[\\r?\\n]/)) {\r\n text = text.split(/\\r\\n|\\r|\\n/g);\r\n } else {\r\n text = [text];\r\n }\r\n }\r\n\r\n //baseline\r\n var height = activeFontSize / scope.internal.scaleFactor;\r\n var descent = height * (lineHeight - 1);\r\n\r\n switch (options.baseline) {\r\n case \"bottom\":\r\n y -= descent;\r\n break;\r\n case \"top\":\r\n y += height - descent;\r\n break;\r\n case \"hanging\":\r\n y += height - 2 * descent;\r\n break;\r\n case \"middle\":\r\n y += height / 2 - descent;\r\n break;\r\n case \"ideographic\":\r\n case \"alphabetic\":\r\n default:\r\n // do nothing, everything is fine\r\n break;\r\n }\r\n\r\n //multiline\r\n maxWidth = options.maxWidth || 0;\r\n\r\n if (maxWidth > 0) {\r\n if (typeof text === \"string\") {\r\n text = scope.splitTextToSize(text, maxWidth);\r\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n text = text.reduce(function(acc, textLine) {\r\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n }, []);\r\n }\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"preProcessText\", payload);\r\n\r\n text = payload.text;\r\n options = payload.options;\r\n\r\n //angle\r\n angle = options.angle;\r\n\r\n if (\r\n transformationMatrix instanceof Matrix === false &&\r\n angle &&\r\n typeof angle === \"number\"\r\n ) {\r\n angle *= Math.PI / 180;\r\n\r\n if (options.rotationDirection === 0) {\r\n angle = -angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n angle = -angle;\r\n }\r\n\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n } else if (angle && angle instanceof Matrix) {\r\n transformationMatrix = angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n transformationMatrix = identityMatrix;\r\n }\r\n\r\n //charSpace\r\n\r\n charSpace = options.charSpace || activeCharSpace;\r\n\r\n if (typeof charSpace !== \"undefined\") {\r\n xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n this.setCharSpace(this.getCharSpace() || 0);\r\n }\r\n\r\n horizontalScale = options.horizontalScale;\r\n if (typeof horizontalScale !== \"undefined\") {\r\n xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n }\r\n\r\n //lang\r\n\r\n var lang = options.lang;\r\n\r\n if (lang) {\r\n // xtra += \"/Lang (\" + lang +\")\\n\";\r\n }\r\n\r\n //renderingMode\r\n var renderingMode = -1;\r\n var parmRenderingMode =\r\n typeof options.renderingMode !== \"undefined\"\r\n ? options.renderingMode\r\n : options.stroke;\r\n var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n switch (parmRenderingMode) {\r\n case 0:\r\n case false:\r\n case \"fill\":\r\n renderingMode = 0;\r\n break;\r\n case 1:\r\n case true:\r\n case \"stroke\":\r\n renderingMode = 1;\r\n break;\r\n case 2:\r\n case \"fillThenStroke\":\r\n renderingMode = 2;\r\n break;\r\n case 3:\r\n case \"invisible\":\r\n renderingMode = 3;\r\n break;\r\n case 4:\r\n case \"fillAndAddForClipping\":\r\n renderingMode = 4;\r\n break;\r\n case 5:\r\n case \"strokeAndAddPathForClipping\":\r\n renderingMode = 5;\r\n break;\r\n case 6:\r\n case \"fillThenStrokeAndAddToPathForClipping\":\r\n renderingMode = 6;\r\n break;\r\n case 7:\r\n case \"addToPathForClipping\":\r\n renderingMode = 7;\r\n break;\r\n }\r\n\r\n var usedRenderingMode =\r\n typeof pageContext.usedRenderingMode !== \"undefined\"\r\n ? pageContext.usedRenderingMode\r\n : -1;\r\n\r\n //if the coder wrote it explicitly to use a specific\r\n //renderingMode, then use it\r\n if (renderingMode !== -1) {\r\n xtra += renderingMode + \" Tr\\n\";\r\n //otherwise check if we used the rendering Mode already\r\n //if so then set the rendering Mode...\r\n } else if (usedRenderingMode !== -1) {\r\n xtra += \"0 Tr\\n\";\r\n }\r\n\r\n if (renderingMode !== -1) {\r\n pageContext.usedRenderingMode = renderingMode;\r\n }\r\n\r\n //align\r\n align = options.align || \"left\";\r\n var leading = activeFontSize * lineHeight;\r\n var pageWidth = scope.internal.pageSize.getWidth();\r\n var activeFont = fonts[activeFontKey];\r\n charSpace = options.charSpace || activeCharSpace;\r\n maxWidth = options.maxWidth || 0;\r\n\r\n var lineWidths;\r\n flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n var wordSpacingPerLine = [];\r\n\r\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n da = transformTextToSpecialArray(text);\r\n var newY;\r\n if (align !== \"left\") {\r\n lineWidths = da.map(function(v) {\r\n return (\r\n (scope.getStringUnitWidth(v, {\r\n font: activeFont,\r\n charSpace: charSpace,\r\n fontSize: activeFontSize,\r\n doKerning: false\r\n }) *\r\n activeFontSize) /\r\n scaleFactor\r\n );\r\n });\r\n }\r\n //The first line uses the \"main\" Td setting,\r\n //and the subsequent lines are offset by the\r\n //previous line's x coordinate.\r\n var prevWidth = 0;\r\n var newX;\r\n if (align === \"right\") {\r\n //The passed in x coordinate defines the\r\n //rightmost point of the text.\r\n x -= lineWidths[0];\r\n text = [];\r\n len = da.length;\r\n for (var i = 0; i < len; i++) {\r\n if (i === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale(prevWidth - lineWidths[i]);\r\n newY = -leading;\r\n }\r\n text.push([da[i], newX, newY]);\r\n prevWidth = lineWidths[i];\r\n }\r\n } else if (align === \"center\") {\r\n //The passed in x coordinate defines\r\n //the center point.\r\n x -= lineWidths[0] / 2;\r\n text = [];\r\n len = da.length;\r\n for (var j = 0; j < len; j++) {\r\n if (j === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale((prevWidth - lineWidths[j]) / 2);\r\n newY = -leading;\r\n }\r\n text.push([da[j], newX, newY]);\r\n prevWidth = lineWidths[j];\r\n }\r\n } else if (align === \"left\") {\r\n text = [];\r\n len = da.length;\r\n for (var h = 0; h < len; h++) {\r\n text.push(da[h]);\r\n }\r\n } else if (align === \"justify\") {\r\n text = [];\r\n len = da.length;\r\n maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n for (var l = 0; l < len; l++) {\r\n newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n if (l < len - 1) {\r\n wordSpacingPerLine.push(\r\n hpf(\r\n scale(\r\n (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n )\r\n )\r\n );\r\n } else {\r\n wordSpacingPerLine.push(0);\r\n }\r\n text.push([da[l], newX, newY]);\r\n }\r\n } else {\r\n throw new Error(\r\n 'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n );\r\n }\r\n }\r\n\r\n //R2L\r\n var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n if (doReversing === true) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [\r\n text\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\"),\r\n posX,\r\n posY\r\n ];\r\n });\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"postProcessText\", payload);\r\n\r\n text = payload.text;\r\n isHex = payload.mutex.isHex || false;\r\n\r\n //Escaping\r\n var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n if (\r\n activeFontEncoding === \"WinAnsiEncoding\" ||\r\n activeFontEncoding === \"StandardEncoding\"\r\n ) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [ESC(text), posX, posY];\r\n });\r\n }\r\n\r\n da = transformTextToSpecialArray(text);\r\n\r\n text = [];\r\n var STRING = 0;\r\n var ARRAY = 1;\r\n var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n var posX;\r\n var posY;\r\n var content;\r\n var wordSpacing = \"\";\r\n\r\n var generatePosition = function(\r\n parmPosX,\r\n parmPosY,\r\n parmTransformationMatrix\r\n ) {\r\n var position = \"\";\r\n if (parmTransformationMatrix instanceof Matrix) {\r\n // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n // in the coordinate system established by this matrix\r\n if (typeof options.angle === \"number\") {\r\n parmTransformationMatrix = matrixMult(\r\n parmTransformationMatrix,\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n );\r\n } else {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, -1, 0, 0),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n } else {\r\n position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n }\r\n return position;\r\n };\r\n\r\n for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n wordSpacing = \"\";\r\n\r\n switch (variant) {\r\n case ARRAY:\r\n content =\r\n (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n posX = parseFloat(da[lineIndex][1]);\r\n posY = parseFloat(da[lineIndex][2]);\r\n break;\r\n case STRING:\r\n content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n posX = getHorizontalCoordinate(x);\r\n posY = getVerticalCoordinate(y);\r\n break;\r\n }\r\n\r\n if (\r\n typeof wordSpacingPerLine !== \"undefined\" &&\r\n typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n ) {\r\n wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n }\r\n\r\n if (lineIndex === 0) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n } else if (variant === STRING) {\r\n text.push(wordSpacing + content);\r\n } else if (variant === ARRAY) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n }\r\n }\r\n\r\n text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n text += \" Tj\\n\";\r\n\r\n var result = \"BT\\n/\";\r\n result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n result += textColor + \"\\n\";\r\n result += xtra;\r\n result += text;\r\n result += \"ET\";\r\n\r\n out(result);\r\n usedFonts[activeFontKey] = true;\r\n return scope;\r\n };\r\n\r\n // PDF supports these path painting and clip path operators:\r\n //\r\n // S - stroke\r\n // s - close/stroke\r\n // f (F) - fill non-zero\r\n // f* - fill evenodd\r\n // B - fill stroke nonzero\r\n // B* - fill stroke evenodd\r\n // b - close fill stroke nonzero\r\n // b* - close fill stroke evenodd\r\n // n - nothing (consume path)\r\n // W - clip nonzero\r\n // W* - clip evenodd\r\n //\r\n // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n // method.\r\n /**\r\n *\r\n * @name clip\r\n * @function\r\n * @instance\r\n * @param {string} rule Only possible value is 'evenodd'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description All .clip() after calling drawing ops with a style argument of null.\r\n */\r\n var clip = (API.__private__.clip = API.clip = function(rule) {\r\n // Call .clip() after calling drawing ops with a style argument of null\r\n // W is the PDF clipping op\r\n if (\"evenodd\" === rule) {\r\n out(\"W*\");\r\n } else {\r\n out(\"W\");\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * @name clipEvenOdd\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n * that this will NOT consume the current path. In order to only use this path for clipping call\r\n * {@link API.discardPath} afterwards.\r\n */\r\n API.clipEvenOdd = function() {\r\n return clip(\"evenodd\");\r\n };\r\n\r\n /**\r\n * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n * @name discardPath\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.discardPath = API.discardPath = function() {\r\n out(\"n\");\r\n return this;\r\n };\r\n\r\n var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n var validStyleVariants = [\r\n undefined,\r\n null,\r\n \"S\",\r\n \"D\",\r\n \"F\",\r\n \"DF\",\r\n \"FD\",\r\n \"f\",\r\n \"f*\",\r\n \"B\",\r\n \"B*\",\r\n \"n\"\r\n ];\r\n var result = false;\r\n if (validStyleVariants.indexOf(style) !== -1) {\r\n result = true;\r\n }\r\n return result;\r\n });\r\n\r\n API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n operator\r\n ) {\r\n if (isValidStyle(operator)) {\r\n defaultPathOperation = operator;\r\n }\r\n return this;\r\n };\r\n\r\n var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n // see path-painting operators in PDF spec\r\n var op = defaultPathOperation; // stroke\r\n\r\n switch (style) {\r\n case \"D\":\r\n case \"S\":\r\n op = \"S\"; // stroke\r\n break;\r\n case \"F\":\r\n op = \"f\"; // fill\r\n break;\r\n case \"FD\":\r\n case \"DF\":\r\n op = \"B\";\r\n break;\r\n case \"f\":\r\n case \"f*\":\r\n case \"B\":\r\n case \"B*\":\r\n /*\r\n Allow direct use of these PDF path-painting operators:\r\n - f fill using nonzero winding number rule\r\n - f* fill using even-odd rule\r\n - B fill then stroke with fill using non-zero winding number rule\r\n - B* fill then stroke with fill using even-odd rule\r\n */\r\n op = style;\r\n break;\r\n }\r\n return op;\r\n });\r\n\r\n /**\r\n * Close the current path. The PDF \"h\" operator.\r\n * @name close\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n var close = (API.close = function() {\r\n out(\"h\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Stroke the path. The PDF \"S\" operator.\r\n * @name stroke\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.stroke = function() {\r\n out(\"S\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n * @name fill\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fill = function(pattern) {\r\n fillWithOptionalPattern(\"f\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the even-odd rule. The PDF f* operator.\r\n * @see API.fill\r\n * @name fillEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"f*\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStroke\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStroke = function(pattern) {\r\n fillWithOptionalPattern(\"B\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStrokeEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStrokeEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"B*\", pattern);\r\n return this;\r\n };\r\n\r\n var fillWithOptionalPattern = function(style, pattern) {\r\n if (typeof pattern === \"object\") {\r\n fillWithPattern(pattern, style);\r\n } else {\r\n out(style);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n if (\r\n style === null ||\r\n (apiMode === ApiMode.ADVANCED && style === undefined)\r\n ) {\r\n return;\r\n }\r\n\r\n style = getStyle(style);\r\n\r\n // stroking / filling / both the path\r\n out(style);\r\n };\r\n\r\n function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n var clone = new TilingPattern(\r\n boundingBox || this.boundingBox,\r\n xStep || this.xStep,\r\n yStep || this.yStep,\r\n this.gState,\r\n matrix || this.matrix\r\n );\r\n clone.stream = this.stream;\r\n var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n addPattern(key, clone);\r\n return clone;\r\n }\r\n\r\n var fillWithPattern = function(patternData, style) {\r\n var patternId = patternMap[patternData.key];\r\n var pattern = patterns[patternId];\r\n\r\n if (pattern instanceof ShadingPattern) {\r\n out(\"q\");\r\n\r\n out(clipRuleFromStyle(style));\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n out(patternData.matrix.toString() + \" cm\");\r\n out(\"/\" + patternId + \" sh\");\r\n out(\"Q\");\r\n } else if (pattern instanceof TilingPattern) {\r\n // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n // so we must flip them\r\n var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n if (patternData.matrix) {\r\n matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n // for each use\r\n patternId = cloneTilingPattern.call(\r\n pattern,\r\n patternData.key,\r\n patternData.boundingBox,\r\n patternData.xStep,\r\n patternData.yStep,\r\n matrix\r\n ).id;\r\n }\r\n\r\n out(\"q\");\r\n out(\"/Pattern cs\");\r\n out(\"/\" + patternId + \" scn\");\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n\r\n out(style);\r\n out(\"Q\");\r\n }\r\n };\r\n\r\n var clipRuleFromStyle = function(style) {\r\n switch (style) {\r\n case \"f\":\r\n case \"F\":\r\n return \"W n\";\r\n case \"f*\":\r\n return \"W* n\";\r\n case \"B\":\r\n return \"W S\";\r\n case \"B*\":\r\n return \"W* S\";\r\n\r\n // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n case \"S\":\r\n return \"W S\";\r\n case \"n\":\r\n return \"W n\";\r\n }\r\n };\r\n\r\n /**\r\n * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @name moveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var moveTo = (API.moveTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @memberof jsPDF#\r\n * @name lineTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var lineTo = (API.lineTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x3\r\n * @param {number} y3\r\n * @memberof jsPDF#\r\n * @name curveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n out(\r\n [\r\n hpf(scale(x1)),\r\n hpf(transformScaleY(y1)),\r\n hpf(scale(x2)),\r\n hpf(transformScaleY(y2)),\r\n hpf(scale(x3)),\r\n hpf(transformScaleY(y3)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n return this;\r\n });\r\n\r\n /**\r\n * Draw a line on the current page.\r\n *\r\n * @name line\r\n * @function\r\n * @instance\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n } else {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n }\r\n };\r\n\r\n /**\r\n * @typedef {Object} PatternData\r\n * {Matrix|undefined} matrix\r\n * {Number|undefined} xStep\r\n * {Number|undefined} yStep\r\n * {Array.|undefined} boundingBox\r\n */\r\n\r\n /**\r\n * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n * All data points in `lines` are relative to last line origin.\r\n * `x`, `y` become x1,y1 for first line / curve in the set.\r\n * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n *\r\n * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name lines\r\n */\r\n API.__private__.lines = API.lines = function(\r\n lines,\r\n x,\r\n y,\r\n scale,\r\n style,\r\n closed\r\n ) {\r\n var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n // in effort to make all calls have similar signature like\r\n // function(content, coordinateX, coordinateY , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (typeof lines === \"number\") {\r\n tmp = y;\r\n y = x;\r\n x = lines;\r\n lines = tmp;\r\n }\r\n\r\n scale = scale || [1, 1];\r\n closed = closed || false;\r\n\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n !Array.isArray(lines) ||\r\n !Array.isArray(scale) ||\r\n !isValidStyle(style) ||\r\n typeof closed !== \"boolean\"\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n }\r\n\r\n // starting point\r\n moveTo(x, y);\r\n\r\n scalex = scale[0];\r\n scaley = scale[1];\r\n l = lines.length;\r\n //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n x4 = x; // last / ending point = starting point for first item.\r\n y4 = y; // last / ending point = starting point for first item.\r\n\r\n for (i = 0; i < l; i++) {\r\n leg = lines[i];\r\n if (leg.length === 2) {\r\n // simple line\r\n x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n lineTo(x4, y4);\r\n } else {\r\n // bezier curve\r\n x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n curveTo(x2, y2, x3, y3, x4, y4);\r\n }\r\n }\r\n\r\n if (closed) {\r\n close();\r\n }\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n * six and \"h\" an empty array (or undefined).\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name path\r\n */\r\n API.path = function(lines) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var leg = lines[i];\r\n var coords = leg.c;\r\n switch (leg.op) {\r\n case \"m\":\r\n moveTo(coords[0], coords[1]);\r\n break;\r\n case \"l\":\r\n lineTo(coords[0], coords[1]);\r\n break;\r\n case \"c\":\r\n curveTo.apply(this, coords);\r\n break;\r\n case \"h\":\r\n close();\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name rect\r\n */\r\n API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n h = -h;\r\n }\r\n\r\n out(\r\n [\r\n hpf(scale(x)),\r\n hpf(transformScaleY(y)),\r\n hpf(scale(w)),\r\n hpf(scale(h)),\r\n \"re\"\r\n ].join(\" \")\r\n );\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a triangle to PDF.\r\n *\r\n * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name triangle\r\n */\r\n API.__private__.triangle = API.triangle = function(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n style\r\n ) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n isNaN(x3) ||\r\n isNaN(y3) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n }\r\n this.lines(\r\n [\r\n [x2 - x1, y2 - y1], // vector to point 2\r\n [x3 - x2, y3 - y2], // vector to point 3\r\n [x1 - x3, y1 - y3] // closing vector back to point 1\r\n ],\r\n x1,\r\n y1, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle with rounded corners to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name roundedRect\r\n */\r\n API.__private__.roundedRect = API.roundedRect = function(\r\n x,\r\n y,\r\n w,\r\n h,\r\n rx,\r\n ry,\r\n style\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(w) ||\r\n isNaN(h) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n }\r\n var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n rx = Math.min(rx, w * 0.5);\r\n ry = Math.min(ry, h * 0.5);\r\n\r\n this.lines(\r\n [\r\n [w - 2 * rx, 0],\r\n [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n [0, h - 2 * ry],\r\n [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n [-w + 2 * rx, 0],\r\n [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n [0, -h + 2 * ry],\r\n [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n ],\r\n x + rx,\r\n y, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an ellipse to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name ellipse\r\n */\r\n API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n }\r\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n moveTo(x + rx, y);\r\n curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an circle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} r Radius (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name circle\r\n */\r\n API.__private__.circle = API.circle = function(x, y, r, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n }\r\n return this.ellipse(x, y, r, r, style);\r\n };\r\n\r\n /**\r\n * Sets text font face, variant for upcoming text elements.\r\n * See output of jsPDF.getFontList() for possible font names, styles.\r\n *\r\n * @param {string} fontName Font name or family. Example: \"times\".\r\n * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFont\r\n */\r\n API.setFont = function(fontName, fontStyle, fontWeight) {\r\n if (fontWeight) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n activeFontKey = getFont(fontName, fontStyle, {\r\n disableWarning: false\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets text font face, variant for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {Object}\r\n * @memberof jsPDF#\r\n * @name getFont\r\n */\r\n var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n return fonts[getFont.apply(API, arguments)];\r\n });\r\n\r\n /**\r\n * Returns an object - a tree of fontName to fontStyle relationships available to\r\n * active PDF document.\r\n *\r\n * @public\r\n * @function\r\n * @instance\r\n * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n * @memberof jsPDF#\r\n * @name getFontList\r\n */\r\n API.__private__.getFontList = API.getFontList = function() {\r\n var list = {},\r\n fontName,\r\n fontStyle;\r\n\r\n for (fontName in fontmap) {\r\n if (fontmap.hasOwnProperty(fontName)) {\r\n list[fontName] = [];\r\n for (fontStyle in fontmap[fontName]) {\r\n if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n list[fontName].push(fontStyle);\r\n }\r\n }\r\n }\r\n }\r\n return list;\r\n };\r\n\r\n /**\r\n * Add a custom font to the current instance.\r\n *\r\n * @param {string} postScriptName PDF specification full name for the font.\r\n * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n * @param {string} fontStyle Style of the Font.\r\n * @param {number | string} fontWeight Weight of the Font.\r\n * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @name addFont\r\n * @returns {string} fontId\r\n */\r\n API.addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n fontWeight,\r\n encoding\r\n ) {\r\n var encodingOptions = [\r\n \"StandardEncoding\",\r\n \"MacRomanEncoding\",\r\n \"Identity-H\",\r\n \"WinAnsiEncoding\"\r\n ];\r\n if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n //IE 11 fix\r\n encoding = arguments[3];\r\n } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n encoding = encoding || \"Identity-H\";\r\n return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n };\r\n\r\n var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n /**\r\n * Gets the line width, default: 0.200025.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineWidth\r\n * @memberof jsPDF#\r\n * @name getLineWidth\r\n */\r\n var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n return lineWidth;\r\n });\r\n\r\n /**\r\n * Sets line width for upcoming lines.\r\n *\r\n * @param {number} width Line width (in units declared at inception of PDF document).\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineWidth\r\n */\r\n var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n width\r\n ) {\r\n lineWidth = width;\r\n out(hpf(scale(width)) + \" w\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Sets the dash pattern for upcoming lines.\r\n *\r\n * To reset the settings simply call the method without any parameters.\r\n * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n * @param {number} dashPhase The phase lines start with.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineDashPattern\r\n */\r\n API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n dashArray,\r\n dashPhase\r\n ) {\r\n dashArray = dashArray || [];\r\n dashPhase = dashPhase || 0;\r\n\r\n if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n }\r\n\r\n dashArray = dashArray\r\n .map(function(x) {\r\n return hpf(scale(x));\r\n })\r\n .join(\" \");\r\n dashPhase = hpf(scale(dashPhase));\r\n\r\n out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n return this;\r\n };\r\n\r\n var lineHeightFactor;\r\n\r\n var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n });\r\n\r\n API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n };\r\n\r\n /**\r\n * Sets the LineHeightFactor of proportion.\r\n *\r\n * @param {number} value LineHeightFactor value. Default: 1.15.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineHeightFactor\r\n */\r\n var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n value\r\n ) {\r\n value = value || 1.15;\r\n if (typeof value === \"number\") {\r\n lineHeightFactor = value;\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * Gets the LineHeightFactor, default: 1.15.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineHeightFactor\r\n * @memberof jsPDF#\r\n * @name getLineHeightFactor\r\n */\r\n var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n return lineHeightFactor;\r\n });\r\n\r\n setLineHeightFactor(options.lineHeight);\r\n\r\n var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n value\r\n ) {\r\n return scale(value);\r\n });\r\n\r\n var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n value\r\n ) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n return value;\r\n } else {\r\n var pageHeight =\r\n pagesContext[currentPage].mediaBox.topRightY -\r\n pagesContext[currentPage].mediaBox.bottomLeftY;\r\n return pageHeight - scale(value);\r\n }\r\n });\r\n\r\n var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getHorizontalCoordinate(value));\r\n });\r\n\r\n var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getVerticalCoordinate(value));\r\n });\r\n\r\n var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n /**\r\n * Gets the stroke color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getDrawColor\r\n */\r\n API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n return decodeColorString(strokeColor);\r\n };\r\n\r\n /**\r\n * Sets the stroke color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDrawColor\r\n */\r\n API.__private__.setStrokeColor = API.setDrawColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"draw\",\r\n precision: 2\r\n };\r\n\r\n strokeColor = encodeColorString(options);\r\n out(strokeColor);\r\n return this;\r\n };\r\n\r\n var fillColor = options.fillColor || \"0 g\";\r\n\r\n /**\r\n * Gets the fill color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getFillColor\r\n */\r\n API.__private__.getFillColor = API.getFillColor = function() {\r\n return decodeColorString(fillColor);\r\n };\r\n\r\n /**\r\n * Sets the fill color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFillColor\r\n */\r\n API.__private__.setFillColor = API.setFillColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"fill\",\r\n precision: 2\r\n };\r\n\r\n fillColor = encodeColorString(options);\r\n out(fillColor);\r\n return this;\r\n };\r\n\r\n var textColor = options.textColor || \"0 g\";\r\n /**\r\n * Gets the text color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getTextColor\r\n */\r\n var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n return decodeColorString(textColor);\r\n });\r\n /**\r\n * Sets the text color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setTextColor\r\n */\r\n API.__private__.setTextColor = API.setTextColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"text\",\r\n precision: 3\r\n };\r\n textColor = encodeColorString(options);\r\n\r\n return this;\r\n };\r\n\r\n var activeCharSpace = options.charSpace;\r\n\r\n /**\r\n * Get global value of CharSpace.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} charSpace\r\n * @memberof jsPDF#\r\n * @name getCharSpace\r\n */\r\n var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n return parseFloat(activeCharSpace || 0);\r\n });\r\n\r\n /**\r\n * Set global value of CharSpace.\r\n *\r\n * @param {number} charSpace\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setCharSpace\r\n */\r\n API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n if (isNaN(charSpace)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n }\r\n activeCharSpace = charSpace;\r\n return this;\r\n };\r\n\r\n var lineCapID = 0;\r\n /**\r\n * Is an Object providing a mapping from human-readable to\r\n * integer flag values designating the varieties of line cap\r\n * and join styles.\r\n *\r\n * @memberof jsPDF#\r\n * @name CapJoinStyles\r\n */\r\n API.CapJoinStyles = {\r\n 0: 0,\r\n butt: 0,\r\n but: 0,\r\n miter: 0,\r\n 1: 1,\r\n round: 1,\r\n rounded: 1,\r\n circle: 1,\r\n 2: 2,\r\n projecting: 2,\r\n project: 2,\r\n square: 2,\r\n bevel: 2\r\n };\r\n\r\n /**\r\n * Sets the line cap styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line cap.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineCap\r\n */\r\n API.__private__.setLineCap = API.setLineCap = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line cap style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineCapID = id;\r\n out(id + \" J\");\r\n\r\n return this;\r\n };\r\n\r\n var lineJoinID = 0;\r\n /**\r\n * Sets the line join styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line join.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineJoin\r\n */\r\n API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line join style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineJoinID = id;\r\n out(id + \" j\");\r\n\r\n return this;\r\n };\r\n\r\n var miterLimit;\r\n /**\r\n * Sets the miterLimit property, which effects the maximum miter length.\r\n *\r\n * @param {number} length The length of the miter\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineMiterLimit\r\n */\r\n API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n length\r\n ) {\r\n length = length || 0;\r\n if (isNaN(length)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n }\r\n out(hpf(scale(length)) + \" M\");\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * An object representing a pdf graphics state.\r\n * @class GState\r\n */\r\n\r\n /**\r\n *\r\n * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n * Supported are: opacity, stroke-opacity\r\n * @constructor\r\n */\r\n API.GState = GState;\r\n\r\n /**\r\n * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n * it will be added before use.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setGState\r\n */\r\n API.setGState = function(gState) {\r\n if (typeof gState === \"string\") {\r\n gState = gStates[gStatesMap[gState]];\r\n } else {\r\n gState = addGState(null, gState);\r\n }\r\n\r\n if (!gState.equals(activeGState)) {\r\n out(\"/\" + gState.id + \" gs\");\r\n activeGState = gState;\r\n }\r\n };\r\n\r\n /**\r\n * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n * @param {String} key Might also be null, if no later reference to this gState is needed\r\n * @param {Object} gState The gState object\r\n */\r\n var addGState = function(key, gState) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (key && gStatesMap[key]) return;\r\n var duplicate = false;\r\n for (var s in gStates) {\r\n if (gStates.hasOwnProperty(s)) {\r\n if (gStates[s].equals(gState)) {\r\n duplicate = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (duplicate) {\r\n gState = gStates[s];\r\n } else {\r\n var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n gStates[gStateKey] = gState;\r\n gState.id = gStateKey;\r\n }\r\n\r\n // several user keys may point to the same GState object\r\n key && (gStatesMap[key] = gState.id);\r\n\r\n events.publish(\"addGState\", gState);\r\n\r\n return gState;\r\n };\r\n\r\n /**\r\n * Adds a new {@link GState} for later use. See {@link setGState}.\r\n * @param {String} key\r\n * @param {GState} gState\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addGState\r\n */\r\n API.addGState = function(key, gState) {\r\n addGState(key, gState);\r\n return this;\r\n };\r\n\r\n /**\r\n * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n * fill and stroke colors etc.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name saveGraphicsState\r\n */\r\n API.saveGraphicsState = function() {\r\n out(\"q\");\r\n // as we cannot set font key and size independently we must keep track of both\r\n fontStateStack.push({\r\n key: activeFontKey,\r\n size: activeFontSize,\r\n color: textColor\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name restoreGraphicsState\r\n */\r\n API.restoreGraphicsState = function() {\r\n out(\"Q\");\r\n\r\n // restore previous font state\r\n var fontState = fontStateStack.pop();\r\n activeFontKey = fontState.key;\r\n activeFontSize = fontState.size;\r\n textColor = fontState.color;\r\n\r\n activeGState = null;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Appends this matrix to the left of all previously applied matrices.\r\n *\r\n * @param {Matrix} matrix\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setCurrentTransformationMatrix\r\n */\r\n API.setCurrentTransformationMatrix = function(matrix) {\r\n out(matrix.toString() + \" cm\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Inserts a debug comment into the generated pdf.\r\n * @function\r\n * @instance\r\n * @param {String} text\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name comment\r\n */\r\n API.comment = function(text) {\r\n out(\"#\" + text);\r\n return this;\r\n };\r\n\r\n /**\r\n * Point\r\n */\r\n var Point = function(x, y) {\r\n var _x = x || 0;\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n get: function() {\r\n return _x;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _x = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _y = y || 0;\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n get: function() {\r\n return _y;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _y = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _type = \"pt\";\r\n Object.defineProperty(this, \"type\", {\r\n enumerable: true,\r\n get: function() {\r\n return _type;\r\n },\r\n set: function(value) {\r\n _type = value.toString();\r\n }\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Rectangle\r\n */\r\n var Rectangle = function(x, y, w, h) {\r\n Point.call(this, x, y);\r\n this.type = \"rect\";\r\n\r\n var _w = w || 0;\r\n Object.defineProperty(this, \"w\", {\r\n enumerable: true,\r\n get: function() {\r\n return _w;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _w = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _h = h || 0;\r\n Object.defineProperty(this, \"h\", {\r\n enumerable: true,\r\n get: function() {\r\n return _h;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _h = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * FormObject/RenderTarget\r\n */\r\n\r\n var RenderTarget = function() {\r\n this.page = page;\r\n this.currentPage = currentPage;\r\n this.pages = pages.slice(0);\r\n this.pagesContext = pagesContext.slice(0);\r\n this.x = pageX;\r\n this.y = pageY;\r\n this.matrix = pageMatrix;\r\n this.width = getPageWidth(currentPage);\r\n this.height = getPageHeight(currentPage);\r\n this.outputDestination = outputDestination;\r\n\r\n this.id = \"\"; // set by endFormObject()\r\n this.objectNumber = -1; // will be set by putXObject()\r\n };\r\n\r\n RenderTarget.prototype.restore = function() {\r\n page = this.page;\r\n currentPage = this.currentPage;\r\n pagesContext = this.pagesContext;\r\n pages = this.pages;\r\n pageX = this.x;\r\n pageY = this.y;\r\n pageMatrix = this.matrix;\r\n setPageWidth(currentPage, this.width);\r\n setPageHeight(currentPage, this.height);\r\n outputDestination = this.outputDestination;\r\n };\r\n\r\n var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n // save current state\r\n renderTargetStack.push(new RenderTarget());\r\n\r\n // clear pages\r\n page = currentPage = 0;\r\n pages = [];\r\n pageX = x;\r\n pageY = y;\r\n\r\n pageMatrix = matrix;\r\n\r\n beginPage([width, height]);\r\n };\r\n\r\n var endFormObject = function(key) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (renderTargetMap[key]) {\r\n renderTargetStack.pop().restore();\r\n return;\r\n }\r\n\r\n // save the created xObject\r\n var newXObject = new RenderTarget();\r\n\r\n var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n newXObject.id = xObjectId;\r\n\r\n renderTargetMap[key] = xObjectId;\r\n renderTargets[xObjectId] = newXObject;\r\n\r\n events.publish(\"addFormObject\", newXObject);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n /**\r\n * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n * {@link doFormObject}. Nested form objects are possible.\r\n * x, y, width, height set the bounding box that is used to clip the content.\r\n *\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n * the parent's.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name beginFormObject\r\n */\r\n API.beginFormObject = function(x, y, width, height, matrix) {\r\n // The user can set the output target to a new form object. Nested form objects are possible.\r\n // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n // the PDF-Spec states:\r\n // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n // recommended although not required\"\r\n beginNewRenderTarget(x, y, width, height, matrix);\r\n return this;\r\n };\r\n\r\n /**\r\n * Completes and saves the form object.\r\n * @param {String} key The key by which this form object can be referenced.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name endFormObject\r\n */\r\n API.endFormObject = function(key) {\r\n endFormObject(key);\r\n return this;\r\n };\r\n\r\n /**\r\n * Draws the specified form object by referencing to the respective pdf XObject created with\r\n * {@link API.beginFormObject} and {@link endFormObject}.\r\n * The location is determined by matrix.\r\n *\r\n * @param {String} key The key to the form object.\r\n * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name doFormObject\r\n */\r\n API.doFormObject = function(key, matrix) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n out(\"q\");\r\n out(matrix.toString() + \" cm\");\r\n out(\"/\" + xObject.id + \" Do\");\r\n out(\"Q\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Returns the form object specified by key.\r\n * @param key {String}\r\n * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name getFormObject\r\n */\r\n API.getFormObject = function(key) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n return {\r\n x: xObject.x,\r\n y: xObject.y,\r\n width: xObject.width,\r\n height: xObject.height,\r\n matrix: xObject.matrix\r\n };\r\n };\r\n\r\n /**\r\n * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n * Uses FileSaver.js-method saveAs.\r\n *\r\n * @memberof jsPDF#\r\n * @name save\r\n * @function\r\n * @instance\r\n * @param {string} filename The filename including extension.\r\n * @param {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n * @returns {jsPDF|Promise} jsPDF-instance */\r\n API.save = function(filename, options) {\r\n filename = filename || \"generated.pdf\";\r\n\r\n options = options || {};\r\n options.returnPromise = options.returnPromise || false;\r\n\r\n if (options.returnPromise === false) {\r\n saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n return this;\r\n } else {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n var result = saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n resolve(result);\r\n } catch (e) {\r\n reject(e.message);\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n // applying plugins (more methods) ON TOP of built-in API.\r\n // this is intentional as we allow plugins to override\r\n // built-ins\r\n for (var plugin in jsPDF.API) {\r\n if (jsPDF.API.hasOwnProperty(plugin)) {\r\n if (plugin === \"events\" && jsPDF.API.events.length) {\r\n (function(events, newEvents) {\r\n // jsPDF.API.events is a JS Array of Arrays\r\n // where each Array is a pair of event name, handler\r\n // Events were added by plugins to the jsPDF instantiator.\r\n // These are always added to the new instance and some ran\r\n // during instantiation.\r\n var eventname, handler_and_args, i;\r\n\r\n for (i = newEvents.length - 1; i !== -1; i--) {\r\n // subscribe takes 3 args: 'topic', function, runonce_flag\r\n // if undefined, runonce is false.\r\n // users can attach callback directly,\r\n // or they can attach an array with [callback, runonce_flag]\r\n // that's what the \"apply\" magic is for below.\r\n eventname = newEvents[i][0];\r\n handler_and_args = newEvents[i][1];\r\n events.subscribe.apply(\r\n events,\r\n [eventname].concat(\r\n typeof handler_and_args === \"function\"\r\n ? [handler_and_args]\r\n : handler_and_args\r\n )\r\n );\r\n }\r\n })(events, jsPDF.API.events);\r\n } else {\r\n API[plugin] = jsPDF.API[plugin];\r\n }\r\n }\r\n }\r\n\r\n var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightX -\r\n pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightX =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n });\r\n\r\n var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightY -\r\n pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightY =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n });\r\n\r\n /**\r\n * Object exposing internal API to plugins\r\n * @public\r\n * @ignore\r\n */\r\n API.internal = {\r\n pdfEscape: pdfEscape,\r\n getStyle: getStyle,\r\n getFont: getFontEntry,\r\n getFontSize: getFontSize,\r\n getCharSpace: getCharSpace,\r\n getTextColor: getTextColor,\r\n getLineHeight: getLineHeight,\r\n getLineHeightFactor: getLineHeightFactor,\r\n getLineWidth: getLineWidth,\r\n write: write,\r\n getHorizontalCoordinate: getHorizontalCoordinate,\r\n getVerticalCoordinate: getVerticalCoordinate,\r\n getCoordinateString: getHorizontalCoordinateString,\r\n getVerticalCoordinateString: getVerticalCoordinateString,\r\n collections: {},\r\n newObject: newObject,\r\n newAdditionalObject: newAdditionalObject,\r\n newObjectDeferred: newObjectDeferred,\r\n newObjectDeferredBegin: newObjectDeferredBegin,\r\n getFilters: getFilters,\r\n putStream: putStream,\r\n events: events,\r\n scaleFactor: scaleFactor,\r\n pageSize: {\r\n getWidth: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n setWidth: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n getHeight: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n setHeight: function(value) {\r\n setPageHeight(currentPage, value);\r\n }\r\n },\r\n encryptionOptions: encryptionOptions,\r\n encryption: encryption,\r\n getEncryptor: getEncryptor,\r\n output: output,\r\n getNumberOfPages: getNumberOfPages,\r\n pages: pages,\r\n out: out,\r\n f2: f2,\r\n f3: f3,\r\n getPageInfo: getPageInfo,\r\n getPageInfoByObjId: getPageInfoByObjId,\r\n getCurrentPageInfo: getCurrentPageInfo,\r\n getPDFVersion: getPdfVersion,\r\n Point: Point,\r\n Rectangle: Rectangle,\r\n Matrix: Matrix,\r\n hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n };\r\n\r\n Object.defineProperty(API.internal.pageSize, \"width\", {\r\n get: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n set: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(API.internal.pageSize, \"height\", {\r\n get: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n set: function(value) {\r\n setPageHeight(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // continuing initialization of jsPDF Document object\r\n //////////////////////////////////////////////////////\r\n // Add the first page automatically\r\n addFonts.call(API, standardFonts);\r\n activeFontKey = \"F1\";\r\n _addPage(format, orientation);\r\n\r\n events.publish(\"initialized\");\r\n return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n * // 'this' will be ref to internal API object. see jsPDF source\r\n * // , so you can refer to built-in methods like so:\r\n * // this.line(....)\r\n * // this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\(/g, \"\\\\(\")\n .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n return value\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\\(/g, \"(\")\n .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n var xobj = new AcroFormXObject();\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number |= bitMask;\n\n return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number &= ~bitMask;\n\n return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n );\n }\n return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n );\n }\n return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n );\n }\n return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n );\n }\n return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n args,\n scope\n) {\n var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n var x = args[0];\n var y = args[1];\n var w = args[2];\n var h = args[3];\n\n var coordinates = {};\n\n coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n return [\n Number(f2(coordinates.lowerLeft_X)),\n Number(f2(coordinates.lowerLeft_Y)),\n Number(f2(coordinates.upperRight_X)),\n Number(f2(coordinates.upperRight_Y))\n ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n if (formObject.appearanceStreamContent) {\n return formObject.appearanceStreamContent;\n }\n\n if (!formObject.V && !formObject.DV) {\n return;\n }\n\n // else calculate it\n\n var stream = [];\n var text = formObject._V || formObject.DV;\n var calcRes = calculateX(formObject, text);\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n\n //PDF 32000-1:2008, page 444\n stream.push(\"/Tx BMC\");\n stream.push(\"q\");\n stream.push(\"BT\"); // Begin Text\n stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n stream.push(calcRes.text);\n stream.push(\"ET\"); // End Text\n stream.push(\"Q\");\n stream.push(\"EMC\");\n\n var appearanceStreamContent = createFormXObject(formObject);\n appearanceStreamContent.scope = formObject.scope;\n appearanceStreamContent.stream = stream.join(\"\\n\");\n return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n var maxFontSize =\n formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n var returnValue = {\n text: \"\",\n fontSize: \"\"\n };\n // Remove Brackets\n text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n text =\n text.substr(text.length - 1) == \")\"\n ? text.substr(0, text.length - 1)\n : text;\n // split into array of words\n var textSplit = text.split(\" \");\n if (formObject.multiline) {\n textSplit = textSplit.map(word => word.split(\"\\n\"));\n } else {\n textSplit = textSplit.map(word => [word]);\n }\n\n var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n var lineSpacing = 2;\n var borderPadding = 2;\n\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n height = height < 0 ? -height : height;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n width = width < 0 ? -width : width;\n\n var isSmallerThanWidth = function(i, lastLine, fontSize) {\n if (i + 1 < textSplit.length) {\n var tmp = lastLine + \" \" + textSplit[i + 1][0];\n var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n var FieldWidth = width - 2 * borderPadding;\n return TextWidth <= FieldWidth;\n } else {\n return false;\n }\n };\n\n fontSize++;\n FontSize: while (fontSize > 0) {\n text = \"\";\n fontSize--;\n var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n var startY = formObject.multiline\n ? height - fontSize\n : (height - textHeight) / 2;\n startY += lineSpacing;\n var startX;\n\n var lastY = startY;\n var firstWordInLine = 0,\n lastWordInLine = 0;\n var lastLength;\n var currWord = 0;\n\n if (fontSize <= 0) {\n // In case, the Text doesn't fit at all\n fontSize = 12;\n text = \"(...) Tj\\n\";\n text +=\n \"% Width of Text: \" +\n calculateFontSpace(text, formObject, fontSize).width +\n \", FieldWidth:\" +\n width +\n \"\\n\";\n break;\n }\n\n var lastLine = \"\";\n var lineCount = 0;\n Line: for (var i = 0; i < textSplit.length; i++) {\n if (textSplit.hasOwnProperty(i)) {\n let isWithNewLine = false;\n if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n continue FontSize;\n }\n\n lastLine += textSplit[i][currWord];\n isWithNewLine = true;\n lastWordInLine = i;\n i--;\n } else {\n lastLine += textSplit[i][currWord] + \" \";\n lastLine =\n lastLine.substr(lastLine.length - 1) == \" \"\n ? lastLine.substr(0, lastLine.length - 1)\n : lastLine;\n var key = parseInt(i);\n var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n var isLastWord = i >= textSplit.length - 1;\n\n if (nextLineIsSmaller && !isLastWord) {\n lastLine += \" \";\n currWord = 0;\n continue; // Line\n } else if (!nextLineIsSmaller && !isLastWord) {\n if (!formObject.multiline) {\n continue FontSize;\n } else {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the\n // FieldObject\n continue FontSize;\n }\n lastWordInLine = key;\n // go on\n }\n } else if (isLastWord) {\n lastWordInLine = key;\n } else {\n if (\n formObject.multiline &&\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the FieldObject\n continue FontSize;\n }\n }\n }\n // Remove last blank\n\n var line = \"\";\n\n for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n var currLine = textSplit[x];\n if (formObject.multiline) {\n if (x === lastWordInLine) {\n line += currLine[currWord] + \" \";\n currWord = (currWord + 1) % currLine.length;\n continue;\n }\n if (x === firstWordInLine) {\n line += currLine[currLine.length - 1] + \" \";\n continue;\n }\n }\n line += currLine[0] + \" \";\n }\n\n // Remove last blank\n line =\n line.substr(line.length - 1) == \" \"\n ? line.substr(0, line.length - 1)\n : line;\n // lastLength -= blankSpace.width;\n lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n // Calculate startX\n switch (formObject.textAlign) {\n case \"right\":\n startX = width - lastLength - borderPadding;\n break;\n case \"center\":\n startX = (width - lastLength) / 2;\n break;\n case \"left\":\n default:\n startX = borderPadding;\n break;\n }\n text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n // reset X in PDF\n text += -f2(startX) + \" 0 Td\\n\";\n\n // After a Line, adjust y position\n lastY = -(fontSize + lineSpacing);\n\n // Reset for next iteration step\n lastLength = 0;\n firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n lineCount++;\n\n lastLine = \"\";\n continue Line;\n }\n }\n break;\n }\n\n returnValue.text = text;\n returnValue.fontSize = fontSize;\n\n return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n var font = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n );\n var width =\n formObject.scope.getStringUnitWidth(text, {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) * parseFloat(fontSize);\n var height =\n formObject.scope.getStringUnitWidth(\"3\", {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) *\n parseFloat(fontSize) *\n 1.5;\n return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n fields: [],\n xForms: [],\n /**\n * acroFormDictionaryRoot contains information about the AcroForm\n * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n * 1: The Object ID of the Root\n */\n acroFormDictionaryRoot: null,\n /**\n * After the PDF gets evaluated, the reference to the root has to be\n * reset, this indicates, whether the root has already been printed\n * out\n */\n printedOut: false,\n internal: null,\n isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n //set objId to undefined and force it to get a new objId on buildDocument\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n for (var i in fields) {\n if (fields.hasOwnProperty(i)) {\n var formObject = fields[i];\n //set objId to undefined and force it to get a new objId on buildDocument\n formObject.objId = undefined;\n // add Annot Reference!\n if (formObject.hasAnnotation) {\n // If theres an Annotation Widget in the Form Object, put the\n // Reference in the /Annot array\n createAnnotationReference(formObject, scope);\n }\n }\n }\n};\n\nvar putForm = function(formObject) {\n if (formObject.scope.internal.acroformPlugin.printedOut) {\n formObject.scope.internal.acroformPlugin.printedOut = false;\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n }\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n formObject\n );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n var options = {\n type: \"reference\",\n object: object\n };\n var findEntry = function(entry) {\n return entry.type === options.type && entry.object === options.object;\n };\n if (\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.find(findEntry) === undefined\n ) {\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.push(options);\n }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n // Put reference to AcroForm to DocumentCatalog\n if (\n typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n ) {\n // for safety, shouldn't normally be the case\n scope.internal.write(\n \"/AcroForm \" +\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n \" \" +\n 0 +\n \" R\"\n );\n } else {\n throw new Error(\"putCatalogCallback: Root missing.\");\n }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n // Remove event\n scope.internal.events.unsubscribe(\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n );\n delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n var standardFields = !fieldArray;\n\n if (!fieldArray) {\n // in case there is no fieldArray specified, we want to print out\n // the Fields of the AcroForm\n // Print out Root\n scope.internal.newObjectDeferredBegin(\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n true\n );\n scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n }\n\n fieldArray =\n fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var fieldObject = fieldArray[i];\n var keyValueList = [];\n var oldRect = fieldObject.Rect;\n\n if (fieldObject.Rect) {\n fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n }\n\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n fieldObject\n );\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.getKeyValueListForStream === \"function\"\n ) {\n keyValueList = fieldObject.getKeyValueListForStream();\n }\n\n fieldObject.Rect = oldRect;\n\n if (\n fieldObject.hasAppearanceStream &&\n !fieldObject.appearanceStreamContent\n ) {\n // Calculate Appearance\n var appearance = calculateAppearanceStream(fieldObject);\n keyValueList.push({ key: \"AP\", value: \"<>\" });\n\n scope.internal.acroformPlugin.xForms.push(appearance);\n }\n\n // Assume AppearanceStreamContent is a Array with N,R,D (at least\n // one of them!)\n if (fieldObject.appearanceStreamContent) {\n var appearanceStreamString = \"\";\n // Iterate over N,R and D\n for (var k in fieldObject.appearanceStreamContent) {\n if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n var value = fieldObject.appearanceStreamContent[k];\n appearanceStreamString += \"/\" + k + \" \";\n appearanceStreamString += \"<<\";\n if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n // appearanceStream is an Array or Object!\n for (var i in value) {\n if (value.hasOwnProperty(i)) {\n var obj = value[i];\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order\n // to get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n // In case the XForm is already used, e.g. OffState\n // of CheckBoxes, don't add it\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n }\n } else {\n obj = value;\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order to\n // get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj;\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n appearanceStreamString += \">>\";\n }\n }\n\n // appearance stream is a normal Object..\n keyValueList.push({\n key: \"AP\",\n value: \"<<\\n\" + appearanceStreamString + \">>\"\n });\n }\n\n scope.internal.putStream({\n additionalKeyValues: keyValueList,\n objectId: fieldObject.objId\n });\n\n scope.internal.out(\"endobj\");\n }\n }\n if (standardFields) {\n createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var key = i;\n var fieldObject = fieldArray[i];\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.putStream === \"function\"\n ) {\n fieldObject.putStream();\n }\n delete fieldArray[key];\n }\n }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n formObject.scope = scope;\n if (\n scope.internal !== undefined &&\n (scope.internal.acroformPlugin === undefined ||\n scope.internal.acroformPlugin.isInitialized === false)\n ) {\n AcroFormField.FieldNum = 0;\n scope.internal.acroformPlugin = JSON.parse(\n JSON.stringify(acroformPluginTemplate)\n );\n if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n throw new Error(\"Exception while creating AcroformDictionary\");\n }\n scaleFactor = scope.internal.scaleFactor;\n // The Object Number of the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n // add Callback for creating the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n \"postPutResources\",\n function() {\n AcroFormDictionaryCallback(scope);\n }\n );\n\n scope.internal.events.subscribe(\"buildDocument\", function() {\n annotReferenceCallback(scope);\n }); // buildDocument\n\n // Register event, that is triggered when the DocumentCatalog is\n // written, in order to add /AcroForm\n\n scope.internal.events.subscribe(\"putCatalog\", function() {\n putCatalogCallback(scope);\n });\n\n // Register event, that creates all Fields\n scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n createFieldCallback(fieldArray, scope);\n });\n\n scope.internal.acroformPlugin.isInitialized = true;\n }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n array,\n objId,\n scope\n) {\n var encryptor = function(data) {\n return data;\n };\n if (Array.isArray(array)) {\n var content = \"[\";\n for (var i = 0; i < array.length; i++) {\n if (i !== 0) {\n content += \" \";\n }\n switch (typeof array[i]) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n content += array[i].toString();\n break;\n case \"string\":\n if (array[i].substr(0, 1) !== \"/\") {\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n } else {\n content += array[i].toString();\n }\n break;\n }\n }\n content += \"]\";\n return content;\n }\n throw new Error(\n \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n );\n});\nfunction getMatches(string, regex, index) {\n index || (index = 1); // default to the first capturing group\n var matches = [];\n var match;\n while ((match = regex.exec(string))) {\n matches.push(match[index]);\n }\n return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n var result = [];\n if (typeof array === \"string\") {\n result = getMatches(array, /\\((.*?)\\)/g);\n }\n return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n var encryptor = function(data) {\n return data;\n };\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n string = string || \"\";\n string.toString();\n string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n this._objId = undefined;\n this._scope = undefined;\n\n /**\n * @name AcroFormPDFObject#objId\n * @type {any}\n */\n Object.defineProperty(this, \"objId\", {\n get: function() {\n if (typeof this._objId === \"undefined\") {\n if (typeof this.scope === \"undefined\") {\n return undefined;\n }\n this._objId = this.scope.internal.newObjectDeferred();\n }\n return this._objId;\n },\n set: function(value) {\n this._objId = value;\n }\n });\n Object.defineProperty(this, \"scope\", {\n value: this._scope,\n writable: true\n });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n var keyValueList = this.getKeyValueListForStream();\n this.scope.internal.putStream({\n data: this.stream,\n additionalKeyValues: keyValueList,\n objectId: this.objId\n });\n this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n var keyValueList = [];\n var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n return (\n key != \"content\" &&\n key != \"appearanceStreamContent\" &&\n key != \"scope\" &&\n key != \"objId\" &&\n key.substring(0, 1) != \"_\"\n );\n });\n\n for (var i in keys) {\n if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n var key = keys[i];\n var value = this[key];\n\n if (value) {\n if (Array.isArray(value)) {\n keyValueList.push({\n key: key,\n value: arrayToPdfArray(value, this.objId, this.scope)\n });\n } else if (value instanceof AcroFormPDFObject) {\n // In case it is a reference to another PDFObject,\n // take the reference number\n value.scope = this.scope;\n keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n } else if (typeof value !== \"function\") {\n keyValueList.push({ key: key, value: value });\n }\n }\n }\n }\n return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n AcroFormPDFObject.call(this);\n\n Object.defineProperty(this, \"Type\", {\n value: \"/XObject\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"Subtype\", {\n value: \"/Form\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"FormType\", {\n value: 1,\n configurable: false,\n writable: true\n });\n\n var _BBox = [];\n Object.defineProperty(this, \"BBox\", {\n configurable: false,\n get: function() {\n return _BBox;\n },\n set: function(value) {\n _BBox = value;\n }\n });\n\n Object.defineProperty(this, \"Resources\", {\n value: \"2 0 R\",\n configurable: false,\n writable: true\n });\n\n var _stream;\n Object.defineProperty(this, \"stream\", {\n enumerable: false,\n configurable: true,\n set: function(value) {\n _stream = value.trim();\n },\n get: function() {\n if (_stream) {\n return _stream;\n } else {\n return null;\n }\n }\n });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n AcroFormPDFObject.call(this);\n\n var _Kids = [];\n\n Object.defineProperty(this, \"Kids\", {\n enumerable: false,\n configurable: true,\n get: function() {\n if (_Kids.length > 0) {\n return _Kids;\n } else {\n return undefined;\n }\n }\n });\n Object.defineProperty(this, \"Fields\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Kids;\n }\n });\n\n // Default Appearance\n var _DA;\n Object.defineProperty(this, \"DA\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DA) {\n return undefined;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n },\n set: function(value) {\n _DA = value;\n }\n });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n AcroFormPDFObject.call(this);\n\n //Annotation-Flag See Table 165\n var _F = 4;\n Object.defineProperty(this, \"F\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _F;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _F = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute F supplied.'\n );\n }\n }\n });\n\n /**\n * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n *\n * @name AcroFormField#showWhenPrinted\n * @default true\n * @type {boolean}\n */\n Object.defineProperty(this, \"showWhenPrinted\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(_F, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.F = setBitForPdf(_F, 3);\n } else {\n this.F = clearBitForPdf(_F, 3);\n }\n }\n });\n\n var _Ff = 0;\n Object.defineProperty(this, \"Ff\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Ff;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _Ff = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Ff supplied.'\n );\n }\n }\n });\n\n var _Rect = [];\n Object.defineProperty(this, \"Rect\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (_Rect.length === 0) {\n return undefined;\n }\n return _Rect;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Rect = value;\n } else {\n _Rect = [];\n }\n }\n });\n\n /**\n * The x-position of the field.\n *\n * @name AcroFormField#x\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[0])) {\n return 0;\n }\n return _Rect[0];\n },\n set: function(value) {\n _Rect[0] = value;\n }\n });\n\n /**\n * The y-position of the field.\n *\n * @name AcroFormField#y\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[1])) {\n return 0;\n }\n return _Rect[1];\n },\n set: function(value) {\n _Rect[1] = value;\n }\n });\n\n /**\n * The width of the field.\n *\n * @name AcroFormField#width\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[2])) {\n return 0;\n }\n return _Rect[2];\n },\n set: function(value) {\n _Rect[2] = value;\n }\n });\n\n /**\n * The height of the field.\n *\n * @name AcroFormField#height\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[3])) {\n return 0;\n }\n return _Rect[3];\n },\n set: function(value) {\n _Rect[3] = value;\n }\n });\n\n var _FT = \"\";\n Object.defineProperty(this, \"FT\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _FT;\n },\n set: function(value) {\n switch (value) {\n case \"/Btn\":\n case \"/Tx\":\n case \"/Ch\":\n case \"/Sig\":\n _FT = value;\n break;\n default:\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute FT supplied.'\n );\n }\n }\n });\n\n var _T = null;\n\n Object.defineProperty(this, \"T\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (!_T || _T.length < 1) {\n // In case of a Child from a Radio´Group, you don't need a FieldName\n if (this instanceof AcroFormChildClass) {\n return undefined;\n }\n _T = \"FieldObject\" + AcroFormField.FieldNum++;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n },\n set: function(value) {\n _T = value.toString();\n }\n });\n\n /**\n * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n *\n * @name AcroFormField#fieldName\n * @default null\n * @type {string}\n */\n Object.defineProperty(this, \"fieldName\", {\n configurable: true,\n enumerable: true,\n get: function() {\n return _T;\n },\n set: function(value) {\n _T = value;\n }\n });\n\n var _fontName = \"helvetica\";\n /**\n * The fontName of the font to be used.\n *\n * @name AcroFormField#fontName\n * @default 'helvetica'\n * @type {string}\n */\n Object.defineProperty(this, \"fontName\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontName;\n },\n set: function(value) {\n _fontName = value;\n }\n });\n\n var _fontStyle = \"normal\";\n /**\n * The fontStyle of the font to be used.\n *\n * @name AcroFormField#fontStyle\n * @default 'normal'\n * @type {string}\n */\n Object.defineProperty(this, \"fontStyle\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontStyle;\n },\n set: function(value) {\n _fontStyle = value;\n }\n });\n\n var _fontSize = 0;\n /**\n * The fontSize of the font to be used.\n *\n * @name AcroFormField#fontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"fontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontSize;\n },\n set: function(value) {\n _fontSize = value;\n }\n });\n\n var _maxFontSize = undefined;\n /**\n * The maximum fontSize of the font to be used.\n *\n * @name AcroFormField#maxFontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"maxFontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (_maxFontSize === undefined) {\n // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n return 50 / scaleFactor;\n } else {\n return _maxFontSize;\n }\n },\n set: function(value) {\n _maxFontSize = value;\n }\n });\n\n var _color = \"black\";\n /**\n * The color of the text\n *\n * @name AcroFormField#color\n * @default 'black'\n * @type {string|rgba}\n */\n Object.defineProperty(this, \"color\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _color;\n },\n set: function(value) {\n _color = value;\n }\n });\n\n var _DA = \"/F1 0 Tf 0 g\";\n // Defines the default appearance (Needed for variable Text)\n Object.defineProperty(this, \"DA\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (\n !_DA ||\n this instanceof AcroFormChildClass ||\n this instanceof AcroFormTextField\n ) {\n return undefined;\n }\n return toPdfString(_DA, this.objId, this.scope);\n },\n set: function(value) {\n value = value.toString();\n _DA = value;\n }\n });\n\n var _DV = null;\n Object.defineProperty(this, \"DV\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DV) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_DV, this.objId, this.scope);\n }\n return _DV;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _DV = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _DV = pdfUnescape(value);\n }\n } else {\n _DV = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n *\n * @name AcroFormField#defaultValue\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"defaultValue\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_DV.substr(1, _DV.length - 1));\n } else {\n return _DV;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _DV = \"/\" + value;\n } else {\n _DV = value;\n }\n }\n });\n\n var _V = null;\n Object.defineProperty(this, \"_V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n return _V;\n },\n set: function(value) {\n this.V = value;\n }\n });\n Object.defineProperty(this, \"V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_V, this.objId, this.scope);\n }\n return _V;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _V = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _V = pdfUnescape(value);\n }\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n *\n * @name AcroFormField#value\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"value\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_V.substr(1, _V.length - 1));\n } else {\n return _V;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _V = \"/\" + value;\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * Check if field has annotations\n *\n * @name AcroFormField#hasAnnotation\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAnnotation\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.Rect;\n }\n });\n\n Object.defineProperty(this, \"Type\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Annot\" : null;\n }\n });\n\n Object.defineProperty(this, \"Subtype\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Widget\" : null;\n }\n });\n\n var _hasAppearanceStream = false;\n /**\n * true if field has an appearanceStream\n *\n * @name AcroFormField#hasAppearanceStream\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _hasAppearanceStream;\n },\n set: function(value) {\n value = Boolean(value);\n _hasAppearanceStream = value;\n }\n });\n\n /**\n * The page on which the AcroFormField is placed\n *\n * @name AcroFormField#page\n * @type {number}\n */\n var _page;\n Object.defineProperty(this, \"page\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_page) {\n return undefined;\n }\n return _page;\n },\n set: function(value) {\n _page = value;\n }\n });\n\n /**\n * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n *\n * @name AcroFormField#readOnly\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"readOnly\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 1));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 1);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 1);\n }\n }\n });\n\n /**\n * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n *\n * @name AcroFormField#required\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 2));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 2);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 2);\n }\n }\n });\n\n /**\n * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n *\n * @name AcroFormField#noExport\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"noExport\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 3);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 3);\n }\n }\n });\n\n var _Q = null;\n Object.defineProperty(this, \"Q\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (_Q === null) {\n return undefined;\n }\n return _Q;\n },\n set: function(value) {\n if ([0, 1, 2].indexOf(value) !== -1) {\n _Q = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Q supplied.'\n );\n }\n }\n });\n\n /**\n * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n * 'left', 'center', 'right'\n *\n * @name AcroFormField#textAlign\n * @default 'left'\n * @type {string}\n */\n Object.defineProperty(this, \"textAlign\", {\n get: function() {\n var result;\n switch (_Q) {\n case 0:\n default:\n result = \"left\";\n break;\n case 1:\n result = \"center\";\n break;\n case 2:\n result = \"right\";\n break;\n }\n return result;\n },\n configurable: true,\n enumerable: true,\n set: function(value) {\n switch (value) {\n case \"right\":\n case 2:\n _Q = 2;\n break;\n case \"center\":\n case 1:\n _Q = 1;\n break;\n case \"left\":\n case 0:\n default:\n _Q = 0;\n }\n }\n });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n AcroFormField.call(this);\n // Field Type = Choice Field\n this.FT = \"/Ch\";\n // options\n this.V = \"()\";\n\n this.fontName = \"zapfdingbats\";\n // Top Index\n var _TI = 0;\n\n Object.defineProperty(this, \"TI\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n /**\n * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n *\n * @name AcroFormChoiceField#topIndex\n * @default 0\n * @type {number}\n */\n Object.defineProperty(this, \"topIndex\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n var _Opt = [];\n Object.defineProperty(this, \"Opt\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return arrayToPdfArray(_Opt, this.objId, this.scope);\n },\n set: function(value) {\n _Opt = pdfArrayToStringArray(value);\n }\n });\n\n /**\n * @memberof AcroFormChoiceField\n * @name getOptions\n * @function\n * @instance\n * @returns {array} array of Options\n */\n this.getOptions = function() {\n return _Opt;\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name setOptions\n * @function\n * @instance\n * @param {array} value\n */\n this.setOptions = function(value) {\n _Opt = value;\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name addOption\n * @function\n * @instance\n * @param {string} value\n */\n this.addOption = function(value) {\n value = value || \"\";\n value = value.toString();\n _Opt.push(value);\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name removeOption\n * @function\n * @instance\n * @param {string} value\n * @param {boolean} allEntries (default: false)\n */\n this.removeOption = function(value, allEntries) {\n allEntries = allEntries || false;\n value = value || \"\";\n value = value.toString();\n\n while (_Opt.indexOf(value) !== -1) {\n _Opt.splice(_Opt.indexOf(value), 1);\n if (allEntries === false) {\n break;\n }\n }\n };\n\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n *\n * @name AcroFormChoiceField#combo\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"combo\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 18));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 18);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 18);\n }\n }\n });\n\n /**\n * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n *\n * @name AcroFormChoiceField#edit\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"edit\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 19));\n },\n set: function(value) {\n //PDF 32000-1:2008, page 444\n if (this.combo === true) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 19);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 19);\n }\n }\n }\n });\n\n /**\n * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n *\n * @name AcroFormChoiceField#sort\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"sort\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 20));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 20);\n _Opt.sort();\n } else {\n this.Ff = clearBitForPdf(this.Ff, 20);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n *\n * @name AcroFormChoiceField#multiSelect\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 22));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 22);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 22);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n *\n * @name AcroFormChoiceField#doNotSpellCheck\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n *\n * @name AcroFormChoiceField#commitOnSelChange\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"commitOnSelChange\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 27));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 27);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 27);\n }\n }\n });\n\n this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n AcroFormChoiceField.call(this);\n this.fontName = \"helvetica\";\n\n //PDF 32000-1:2008, page 444\n this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n AcroFormListBox.call(this);\n this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n AcroFormComboBox.call(this);\n this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n AcroFormField.call(this);\n this.FT = \"/Btn\";\n\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n *\n * @name AcroFormButton#noToggleToOff\n * @type {boolean}\n */\n Object.defineProperty(this, \"noToggleToOff\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 15));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 15);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 15);\n }\n }\n });\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n *\n * @name AcroFormButton#radio\n * @type {boolean}\n */\n Object.defineProperty(this, \"radio\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 16));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 16);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 16);\n }\n }\n });\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n *\n * @name AcroFormButton#pushButton\n * @type {boolean}\n */\n Object.defineProperty(this, \"pushButton\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 17));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 17);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 17);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n *\n * @name AcroFormButton#radioIsUnison\n * @type {boolean}\n */\n Object.defineProperty(this, \"radioIsUnison\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n if (Object.keys(_MK).length !== 0) {\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n }\n return undefined;\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n AcroFormButton.call(this);\n this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n AcroFormButton.call(this);\n this.radio = true;\n this.pushButton = false;\n\n var _Kids = [];\n Object.defineProperty(this, \"Kids\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _Kids;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Kids = value;\n } else {\n _Kids = [];\n }\n }\n });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n AcroFormField.call(this);\n\n var _parent;\n Object.defineProperty(this, \"Parent\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _parent;\n },\n set: function(value) {\n _parent = value;\n }\n });\n\n var _optionName;\n Object.defineProperty(this, \"optionName\", {\n enumerable: false,\n configurable: true,\n get: function() {\n return _optionName;\n },\n set: function(value) {\n _optionName = value;\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n this.caption = \"l\";\n this.appearanceState = \"Off\";\n // todo: set AppearanceType as variable that can be set from the\n // outside...\n this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n // The Default appearanceType is the Circle\n this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n this.optionName\n );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n throw new Error(\n \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n );\n }\n for (var objId in this.Kids) {\n if (this.Kids.hasOwnProperty(objId)) {\n var child = this.Kids[objId];\n child.appearanceStreamContent = appearance.createAppearanceStream(\n child.optionName\n );\n child.caption = appearance.getCA();\n }\n }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n // Create new Child for RadioGroup\n var child = new AcroFormChildClass();\n child.Parent = this;\n child.optionName = name;\n // Add to Parent\n this.Kids.push(child);\n\n addField.call(this.scope, child);\n\n return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n AcroFormButton.call(this);\n\n this.fontName = \"zapfdingbats\";\n this.caption = \"3\";\n this.appearanceState = \"On\";\n this.value = \"On\";\n this.textAlign = \"center\";\n this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n AcroFormField.call(this);\n this.FT = \"/Tx\";\n\n /**\n * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n *\n * @name AcroFormTextField#multiline\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiline\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 13));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 13);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 13);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n *\n * @name AcroFormTextField#fileSelect\n * @type {boolean}\n */\n Object.defineProperty(this, \"fileSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 21));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 21);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 21);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n *\n * @name AcroFormTextField#doNotSpellCheck\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n *\n * @name AcroFormTextField#doNotScroll\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotScroll\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 24));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 24);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 24);\n }\n }\n });\n\n /**\n * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n *\n * @name AcroFormTextField#comb\n * @type {boolean}\n */\n Object.defineProperty(this, \"comb\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 25));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 25);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 25);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n *\n * @name AcroFormTextField#richText\n * @type {boolean}\n */\n Object.defineProperty(this, \"richText\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MaxLen = null;\n Object.defineProperty(this, \"MaxLen\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n _MaxLen = value;\n }\n });\n\n /**\n * (Optional; inheritable) The maximum length of the field’s text, in characters.\n *\n * @name AcroFormTextField#maxLength\n * @type {number}\n */\n Object.defineProperty(this, \"maxLength\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n if (Number.isInteger(value)) {\n _MaxLen = value;\n }\n }\n });\n\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.V || this.DV;\n }\n });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n AcroFormTextField.call(this);\n\n /**\n * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n *\n * @name AcroFormTextField#password\n * @type {boolean}\n */\n Object.defineProperty(this, \"password\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 14));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 14);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 14);\n }\n }\n });\n this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n CheckBox: {\n createAppearanceStream: function() {\n var appearance = {\n N: {\n On: AcroFormAppearance.CheckBox.YesNormal\n },\n D: {\n On: AcroFormAppearance.CheckBox.YesPushDown,\n Off: AcroFormAppearance.CheckBox.OffPushDown\n }\n };\n\n return appearance;\n },\n /**\n * Returns the standard On Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"BMC\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(\"BT\");\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n stream.push(\"EMC\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var stream = [];\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"1 g\");\n stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(\"0 g\");\n stream.push(\"BT\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n /**\n * Returns the standard Off Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n RadioButton: {\n Circle: {\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Circle.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Circle.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"l\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n // Make the Radius of the Circle relative to min(height, width) of formObject\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n var c = AcroFormAppearance.internal.Bezier_C;\n var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n /*\n * The Following is a Circle created with Bezier-Curves.\n */\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n var dc = Number(\n (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n );\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n stream.push(\"0 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n \"\" +\n DotRadius +\n \" \" +\n dc +\n \" \" +\n dc +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n dc +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n dc +\n \" -\" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n dc +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n dc +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n Cross: {\n /**\n * Creates the Actual AppearanceDictionary-References\n *\n * @param {string} name\n * @returns {Object}\n * @ignore\n */\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Cross.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Cross.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"8\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n }\n },\n\n /**\n * Returns the standard Appearance\n *\n * @returns {AcroFormXObject}\n */\n createDefaultAppearanceStream: function(formObject) {\n // Set Helvetica to Standard Font (size: auto)\n // Color: Black\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var fontSize = formObject.fontSize;\n var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n return result;\n }\n};\n\nAcroFormAppearance.internal = {\n Bezier_C: 0.551915024494,\n\n calculateCross: function(formObject) {\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var a = Math.min(width, height);\n\n var cross = {\n x1: {\n // upperLeft\n x: (width - a) / 2,\n y: (height - a) / 2 + a // height - borderPadding\n },\n x2: {\n // lowerRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 // borderPadding\n },\n x3: {\n // lowerLeft\n x: (width - a) / 2,\n y: (height - a) / 2 // borderPadding\n },\n x4: {\n // upperRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 + a // height - borderPadding\n }\n };\n\n return cross;\n }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[2]);\n }\n return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[3]);\n }\n return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n initializeAcroForm(this, fieldObject);\n\n if (fieldObject instanceof AcroFormField) {\n putForm(fieldObject);\n } else {\n throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n }\n fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n AcroForm,\n AcroFormChoiceField,\n AcroFormListBox,\n AcroFormComboBox,\n AcroFormEditBox,\n AcroFormButton,\n AcroFormPushButton,\n AcroFormRadioButton,\n AcroFormCheckBox,\n AcroFormTextField,\n AcroFormPasswordField,\n AcroFormAppearance\n};\n","function toLookup(arr) {\n return arr.reduce(function(lookup, name, index) {\n lookup[name] = index;\n\n return lookup;\n }, {});\n}\n\nvar fontStyleOrder = {\n italic: [\"italic\", \"oblique\", \"normal\"],\n oblique: [\"oblique\", \"italic\", \"normal\"],\n normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n \"ultra-condensed\",\n \"extra-condensed\",\n \"condensed\",\n \"semi-condensed\",\n \"normal\",\n \"semi-expanded\",\n \"expanded\",\n \"extra-expanded\",\n \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n stretch = stretch || \"normal\";\n\n return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n style = style || \"normal\";\n\n return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n if (!weight) {\n return 400;\n }\n\n if (typeof weight === \"number\") {\n // Ignore values which aren't valid font-weights.\n return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n }\n\n if (/^\\d00$/.test(weight)) {\n return parseInt(weight);\n }\n\n switch (weight) {\n case \"bold\":\n return 700;\n\n case \"normal\":\n default:\n return 400;\n }\n}\n\nexport function normalizeFontFace(fontFace) {\n var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n var style = normalizeFontStyle(fontFace.style);\n var weight = normalizeFontWeight(fontFace.weight);\n var stretch = normalizeFontStretch(fontFace.stretch);\n\n return {\n family: family,\n style: style,\n weight: weight,\n stretch: stretch,\n src: fontFace.src || [],\n\n // The ref property maps this font-face to the font\n // added by the .addFont() method.\n ref: fontFace.ref || {\n name: family,\n style: [stretch, style, weight].join(\" \")\n }\n };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n var map = {};\n\n for (var i = 0; i < fontFaces.length; ++i) {\n var normalized = normalizeFontFace(fontFaces[i]);\n\n var name = normalized.family;\n var stretch = normalized.stretch;\n var style = normalized.style;\n var weight = normalized.weight;\n\n map[name] = map[name] || {};\n\n map[name][stretch] = map[name][stretch] || {};\n map[name][stretch][style] = map[name][stretch][style] || {};\n map[name][stretch][style][weight] = normalized;\n }\n\n return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n var i;\n\n for (i = pivot; i >= 0 && i < order.length; i += dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n\n for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n if (matchingSet[stretch]) {\n return matchingSet[stretch];\n }\n\n var pivot = fontStretchLookup[stretch];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-stretch value for \" + stretch\n );\n }\n\n return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n if (matchingSet[fontStyle]) {\n return matchingSet[fontStyle];\n }\n\n var ordering = fontStyleOrder[fontStyle];\n\n for (var i = 0; i < ordering.length; ++i) {\n if (matchingSet[ordering[i]]) {\n return matchingSet[ordering[i]];\n }\n }\n\n // Since a font-family cannot exist without having at least one style value\n // we should never reach this point.\n throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n if (matchingSet[weight]) {\n return matchingSet[weight];\n }\n\n if (weight === 400 && matchingSet[500]) {\n return matchingSet[500];\n }\n\n if (weight === 500 && matchingSet[400]) {\n return matchingSet[400];\n }\n\n var pivot = fontWeightsLookup[weight];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = weight < 400 ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-weight for value \" + weight\n );\n }\n\n return match;\n}\n\nvar defaultGenericFontFamilies = {\n \"sans-serif\": \"helvetica\",\n fixed: \"courier\",\n monospace: \"courier\",\n terminal: \"courier\",\n cursive: \"times\",\n fantasy: \"times\",\n serif: \"times\"\n};\n\nvar systemFonts = {\n caption: \"times\",\n icon: \"times\",\n menu: \"times\",\n \"message-box\": \"times\",\n \"small-caption\": \"times\",\n \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n opts = opts || {};\n\n var defaultFontFamily = opts.defaultFontFamily || \"times\";\n var genericFontFamilies = Object.assign(\n {},\n defaultGenericFontFamilies,\n opts.genericFontFamilies || {}\n );\n\n var rule = null;\n var matches = null;\n\n for (var i = 0; i < rules.length; ++i) {\n rule = normalizeFontFace(rules[i]);\n\n if (genericFontFamilies[rule.family]) {\n rule.family = genericFontFamilies[rule.family];\n }\n\n if (fontFaceMap.hasOwnProperty(rule.family)) {\n matches = fontFaceMap[rule.family];\n\n break;\n }\n }\n\n // Always fallback to a known font family.\n matches = matches || fontFaceMap[defaultFontFamily];\n\n if (!matches) {\n // At this point we should definitiely have a font family, but if we\n // don't there is something wrong with our configuration\n throw new Error(\n \"Could not find a font-family for the rule '\" +\n ruleToString(rule) +\n \"' and default family '\" +\n defaultFontFamily +\n \"'.\"\n );\n }\n\n matches = resolveFontStretch(rule.stretch, matches);\n matches = resolveFontStyle(rule.style, matches);\n matches = resolveFontWeight(rule.weight, matches);\n\n if (!matches) {\n // We should've fount\n throw new Error(\n \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n );\n }\n\n return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n var index = 0;\n\n while (index < input.length) {\n var current = input.charAt(index);\n\n if (current === quote) {\n return [input.substring(0, index), input.substring(index + 1)];\n }\n\n index += 1;\n }\n\n // Unexpected end of input\n return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n //\n // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n //\n // Breakdown of regexp:\n // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n // [a-z_] - allow a-z and underscore at beginning of input\n // [a-z0-9_-]* - after that, anything goes\n var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n // non quoted value contains illegal characters\n if (match === null) {\n return null;\n }\n\n return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n var result = [];\n var ch, parsed;\n var remaining = input.trim();\n\n if (remaining === \"\") {\n return defaultFont;\n }\n\n if (remaining in systemFonts) {\n return [systemFonts[remaining]];\n }\n\n while (remaining !== \"\") {\n parsed = null;\n remaining = eatWhiteSpace(remaining);\n ch = remaining.charAt(0);\n\n switch (ch) {\n case '\"':\n case \"'\":\n parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n break;\n\n default:\n parsed = parseNonQuotedFontFamily(remaining);\n break;\n }\n\n if (parsed === null) {\n return defaultFont;\n }\n\n result.push(parsed[0]);\n\n remaining = eatWhiteSpace(parsed[1]);\n\n // We expect end of input or a comma separator here\n if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n return defaultFont;\n }\n\n remaining = remaining.replace(/^,/, \"\");\n }\n\n return result;\n}\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namespace = \"addImage_\";\n jsPDFAPI.__addimage__ = {};\n\n var UNKNOWN = \"UNKNOWN\";\n\n // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n // With too small batch iteration will be slow as more calls are made,\n // higher values cause larger and slower garbage collection.\n var ARRAY_APPLY_BATCH = 8192;\n\n var imageFileTypeHeaders = {\n PNG: [[0x89, 0x50, 0x4e, 0x47]],\n TIFF: [\n [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n [0x49, 0x49, 0x2a, 0x00] //Intel\n ],\n JPEG: [\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe0,\n undefined,\n undefined,\n 0x4a,\n 0x46,\n 0x49,\n 0x46,\n 0x00\n ], //JFIF\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe1,\n undefined,\n undefined,\n 0x45,\n 0x78,\n 0x69,\n 0x66,\n 0x00,\n 0x00\n ], //Exif\n [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n ],\n JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n WEBP: [\n [\n 0x52,\n 0x49,\n 0x46,\n 0x46,\n undefined,\n undefined,\n undefined,\n undefined,\n 0x57,\n 0x45,\n 0x42,\n 0x50\n ]\n ],\n BMP: [\n [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n [0x42, 0x41], //BA - OS/2 struct bitmap array\n [0x43, 0x49], //CI - OS/2 struct color icon\n [0x43, 0x50], //CP - OS/2 const color pointer\n [0x49, 0x43], //IC - OS/2 struct icon\n [0x50, 0x54] //PT - OS/2 pointer\n ]\n };\n\n /**\n * Recognize filetype of Image by magic-bytes\n *\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n *\n * @name getImageFileTypeByImageData\n * @public\n * @function\n * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n *\n * @returns {string} filetype of Image\n */\n var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n imageData,\n fallbackFormat\n ) {\n fallbackFormat = fallbackFormat || UNKNOWN;\n var i;\n var j;\n var result = UNKNOWN;\n var headerSchemata;\n var compareResult;\n var fileType;\n\n if (\n fallbackFormat === \"RGBA\" ||\n (imageData.data !== undefined &&\n imageData.data instanceof Uint8ClampedArray &&\n \"height\" in imageData &&\n \"width\" in imageData)\n ) {\n return \"RGBA\";\n }\n\n if (isArrayBufferView(imageData)) {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData[j]) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n } else {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n }\n\n if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n result = fallbackFormat;\n }\n return result;\n });\n\n // Image functionality ported from pdf.js\n var putImage = function(image) {\n var out = this.internal.write;\n var putStream = this.internal.putStream;\n var getFilters = this.internal.getFilters;\n\n var filter = getFilters();\n while (filter.indexOf(\"FlateEncode\") !== -1) {\n filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n }\n\n image.objectId = this.internal.newObject();\n\n var additionalKeyValues = [];\n additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n additionalKeyValues.push({ key: \"Width\", value: image.width });\n additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n if (image.colorSpace === color_spaces.INDEXED) {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value:\n \"[/Indexed /DeviceRGB \" +\n // if an indexed png defines more than one colour with transparency, we've created a sMask\n (image.palette.length / 3 - 1) +\n \" \" +\n (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n ? image.objectId + 2\n : image.objectId + 1) +\n \" 0 R]\"\n });\n } else {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value: \"/\" + image.colorSpace\n });\n if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n }\n }\n additionalKeyValues.push({\n key: \"BitsPerComponent\",\n value: image.bitsPerComponent\n });\n if (\n \"decodeParameters\" in image &&\n typeof image.decodeParameters !== \"undefined\"\n ) {\n additionalKeyValues.push({\n key: \"DecodeParms\",\n value: \"<<\" + image.decodeParameters + \">>\"\n });\n }\n if (\"transparency\" in image && Array.isArray(image.transparency)) {\n var transparency = \"\",\n i = 0,\n len = image.transparency.length;\n for (; i < len; i++)\n transparency +=\n image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n additionalKeyValues.push({\n key: \"Mask\",\n value: \"[\" + transparency + \"]\"\n });\n }\n if (typeof image.sMask !== \"undefined\") {\n additionalKeyValues.push({\n key: \"SMask\",\n value: image.objectId + 1 + \" 0 R\"\n });\n }\n\n var alreadyAppliedFilters =\n typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n putStream({\n data: image.data,\n additionalKeyValues: additionalKeyValues,\n alreadyAppliedFilters: alreadyAppliedFilters,\n objectId: image.objectId\n });\n\n out(\"endobj\");\n\n // Soft mask\n if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n var decodeParameters =\n \"/Predictor \" +\n image.predictor +\n \" /Colors 1 /BitsPerComponent \" +\n image.bitsPerComponent +\n \" /Columns \" +\n image.width;\n var sMask = {\n width: image.width,\n height: image.height,\n colorSpace: \"DeviceGray\",\n bitsPerComponent: image.bitsPerComponent,\n decodeParameters: decodeParameters,\n data: image.sMask\n };\n if (\"filter\" in image) {\n sMask.filter = image.filter;\n }\n putImage.call(this, sMask);\n }\n\n //Palette\n if (image.colorSpace === color_spaces.INDEXED) {\n var objId = this.internal.newObject();\n //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n //putStream(zlib.compress(img['pal']));\n putStream({\n data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n objectId: objId\n });\n out(\"endobj\");\n }\n };\n var putResourcesCallback = function() {\n var images = this.internal.collections[namespace + \"images\"];\n for (var i in images) {\n putImage.call(this, images[i]);\n }\n };\n var putXObjectsDictCallback = function() {\n var images = this.internal.collections[namespace + \"images\"],\n out = this.internal.write,\n image;\n for (var i in images) {\n image = images[i];\n out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n }\n };\n\n var checkCompressValue = function(value) {\n if (value && typeof value === \"string\") value = value.toUpperCase();\n return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n };\n\n var initialize = function() {\n if (!this.internal.collections[namespace + \"images\"]) {\n this.internal.collections[namespace + \"images\"] = {};\n this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n }\n };\n\n var getImages = function() {\n var images = this.internal.collections[namespace + \"images\"];\n initialize.call(this);\n return images;\n };\n var getImageIndex = function() {\n return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n };\n var notDefined = function(value) {\n return typeof value === \"undefined\" || value === null || value.length === 0;\n };\n var generateAliasFromImageData = function(imageData) {\n if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n return sHashCode(imageData);\n } else if (isArrayBufferView(imageData.data)) {\n return sHashCode(imageData.data);\n }\n\n return null;\n };\n\n var isImageTypeSupported = function(type) {\n return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n };\n\n var isDOMElement = function(object) {\n return typeof object === \"object\" && object.nodeType === 1;\n };\n\n var getImageDataFromElement = function(element, format) {\n //if element is an image which uses data url definition, just return the dataurl\n if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n var src = \"\" + element.getAttribute(\"src\");\n\n //is base64 encoded dataUrl, directly process it\n if (src.indexOf(\"data:image/\") === 0) {\n return atob(\n unescape(src)\n .split(\"base64,\")\n .pop()\n );\n }\n\n //it is probably an url, try to load it\n var tmpImageData = jsPDFAPI.loadFile(src, true);\n if (tmpImageData !== undefined) {\n return tmpImageData;\n }\n }\n\n if (element.nodeName === \"CANVAS\") {\n if (element.width === 0 || element.height === 0) {\n throw new Error(\n \"Given canvas must have data. Canvas width: \" +\n element.width +\n \", height: \" +\n element.height\n );\n }\n var mimeType;\n switch (format) {\n case \"PNG\":\n mimeType = \"image/png\";\n break;\n case \"WEBP\":\n mimeType = \"image/webp\";\n break;\n case \"JPEG\":\n case \"JPG\":\n default:\n mimeType = \"image/jpeg\";\n break;\n }\n return atob(\n element\n .toDataURL(mimeType, 1.0)\n .split(\"base64,\")\n .pop()\n );\n }\n };\n\n var checkImagesForAlias = function(alias) {\n var images = this.internal.collections[namespace + \"images\"];\n if (images) {\n for (var e in images) {\n if (alias === images[e].alias) {\n return images[e];\n }\n }\n }\n };\n\n var determineWidthAndHeight = function(width, height, image) {\n if (!width && !height) {\n width = -96;\n height = -96;\n }\n if (width < 0) {\n width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n }\n if (height < 0) {\n height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n }\n if (width === 0) {\n width = (height * image.width) / image.height;\n }\n if (height === 0) {\n height = (width * image.height) / image.width;\n }\n\n return [width, height];\n };\n\n var writeImageToPDF = function(x, y, width, height, image, rotation) {\n var dims = determineWidthAndHeight.call(this, width, height, image),\n coord = this.internal.getCoordinateString,\n vcoord = this.internal.getVerticalCoordinateString;\n\n var images = getImages.call(this);\n\n width = dims[0];\n height = dims[1];\n images[image.index] = image;\n\n if (rotation) {\n rotation *= Math.PI / 180;\n var c = Math.cos(rotation);\n var s = Math.sin(rotation);\n //like in pdf Reference do it 4 digits instead of 2\n var f4 = function(number) {\n return number.toFixed(4);\n };\n var rotationTransformationMatrix = [\n f4(c),\n f4(s),\n f4(s * -1),\n f4(c),\n 0,\n 0,\n \"cm\"\n ];\n }\n this.internal.write(\"q\"); //Save graphics state\n if (rotation) {\n this.internal.write(\n [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n ); //Translate\n this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n this.internal.write(\n [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n ); //Scale\n } else {\n this.internal.write(\n [\n coord(width),\n \"0\",\n \"0\",\n coord(height),\n coord(x),\n vcoord(y + height),\n \"cm\"\n ].join(\" \")\n ); //Translate and Scale\n }\n\n if (this.isAdvancedAPI()) {\n // draw image bottom up when in \"advanced\" API mode\n this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n }\n\n this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n this.internal.write(\"Q\"); //Restore graphics state\n };\n\n /**\n * COLOR SPACES\n */\n var color_spaces = (jsPDFAPI.color_spaces = {\n DEVICE_RGB: \"DeviceRGB\",\n DEVICE_GRAY: \"DeviceGray\",\n DEVICE_CMYK: \"DeviceCMYK\",\n CAL_GREY: \"CalGray\",\n CAL_RGB: \"CalRGB\",\n LAB: \"Lab\",\n ICC_BASED: \"ICCBased\",\n INDEXED: \"Indexed\",\n PATTERN: \"Pattern\",\n SEPARATION: \"Separation\",\n DEVICE_N: \"DeviceN\"\n });\n\n /**\n * DECODE METHODS\n */\n jsPDFAPI.decode = {\n DCT_DECODE: \"DCTDecode\",\n FLATE_DECODE: \"FlateDecode\",\n LZW_DECODE: \"LZWDecode\",\n JPX_DECODE: \"JPXDecode\",\n JBIG2_DECODE: \"JBIG2Decode\",\n ASCII85_DECODE: \"ASCII85Decode\",\n ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n RUN_LENGTH_DECODE: \"RunLengthDecode\",\n CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n };\n\n /**\n * IMAGE COMPRESSION TYPES\n */\n var image_compression = (jsPDFAPI.image_compression = {\n NONE: \"NONE\",\n FAST: \"FAST\",\n MEDIUM: \"MEDIUM\",\n SLOW: \"SLOW\"\n });\n\n /**\n * @name sHashCode\n * @function\n * @param {string} data\n * @returns {string}\n */\n var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n var hash = 0,\n i,\n len;\n\n if (typeof data === \"string\") {\n len = data.length;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n } else if (isArrayBufferView(data)) {\n len = data.byteLength / 2;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data[i];\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n });\n\n /**\n * Validates if given String is a valid Base64-String\n *\n * @name validateStringAsBase64\n * @public\n * @function\n * @param {String} possible Base64-String\n *\n * @returns {boolean}\n */\n var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n possibleBase64String\n ) {\n possibleBase64String = possibleBase64String || \"\";\n possibleBase64String.toString().trim();\n\n var result = true;\n\n if (possibleBase64String.length === 0) {\n result = false;\n }\n\n if (possibleBase64String.length % 4 !== 0) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9+/]+$/.test(\n possibleBase64String.substr(0, possibleBase64String.length - 2)\n ) === false\n ) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n possibleBase64String.substr(-2)\n ) === false\n ) {\n result = false;\n }\n return result;\n });\n\n /**\n * Strips out and returns info from a valid base64 data URI\n *\n * @name extractImageFromDataUrl\n * @function\n * @param {string} dataUrl a valid data URI of format 'data:[][;base64],'\n * @returns {Array}an Array containing the following\n * [0] the complete data URI\n * [1] \n * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n * [4] \n */\n var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n dataUrl\n ) {\n dataUrl = dataUrl || \"\";\n var dataUrlParts = dataUrl.split(\"base64,\");\n var result = null;\n\n if (dataUrlParts.length === 2) {\n var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n dataUrlParts[0]\n );\n if (Array.isArray(extractedInfo)) {\n result = {\n mimeType: extractedInfo[1],\n charset: extractedInfo[2],\n data: dataUrlParts[1]\n };\n }\n }\n return result;\n });\n\n /**\n * Check to see if ArrayBuffer is supported\n *\n * @name supportsArrayBuffer\n * @function\n * @returns {boolean}\n */\n var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n return (\n typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n );\n });\n\n /**\n * Tests supplied object to determine if ArrayBuffer\n *\n * @name isArrayBuffer\n * @function\n * @param {Object} object an Object\n *\n * @returns {boolean}\n */\n jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n return supportsArrayBuffer() && object instanceof ArrayBuffer;\n };\n\n /**\n * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n *\n * @name isArrayBufferView\n * @function\n * @param {Object} object an Object\n * @returns {boolean}\n */\n var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n object\n ) {\n return (\n supportsArrayBuffer() &&\n typeof Uint32Array !== \"undefined\" &&\n (object instanceof Int8Array ||\n object instanceof Uint8Array ||\n (typeof Uint8ClampedArray !== \"undefined\" &&\n object instanceof Uint8ClampedArray) ||\n object instanceof Int16Array ||\n object instanceof Uint16Array ||\n object instanceof Int32Array ||\n object instanceof Uint32Array ||\n object instanceof Float32Array ||\n object instanceof Float64Array)\n );\n });\n\n /**\n * Convert Binary String to ArrayBuffer\n *\n * @name binaryStringToUint8Array\n * @public\n * @function\n * @param {string} BinaryString with ImageData\n * @returns {Uint8Array}\n */\n var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n binary_string\n ) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n });\n\n /**\n * Convert the Buffer to a Binary String\n *\n * @name arrayBufferToBinaryString\n * @public\n * @function\n * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n *\n * @returns {String}\n */\n var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n buffer\n ) {\n var out = \"\";\n // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n // Do not copy the array if input is already an array.\n var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n // Limit the amount of characters being parsed to prevent overflow.\n // Note that while TextDecoder would be faster, it does not have the same\n // functionality as fromCharCode with any provided encodings as of 3/2021.\n out += String.fromCharCode.apply(\n null,\n buf.subarray(i, i + ARRAY_APPLY_BATCH)\n );\n }\n return out;\n });\n\n /**\n * Possible parameter for addImage, an RGBA buffer with size.\n *\n * @typedef {Object} RGBAData\n * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n * @property {number} width - Image width as the data does not carry this information in itself.\n * @property {number} height - Image height as the data does not carry this information in itself.\n */\n\n /**\n * Adds an Image to the PDF.\n *\n * @name addImage\n * @public\n * @function\n * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width width of the image (in units declared at inception of PDF document)\n * @param {number} height height of the Image (in units declared at inception of PDF document)\n * @param {string} alias alias of the image (if used multiple times)\n * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation rotation of the image in degrees (0-359)\n *\n * @returns jsPDF\n */\n jsPDFAPI.addImage = function() {\n var imageData, format, x, y, w, h, alias, compression, rotation;\n\n imageData = arguments[0];\n if (typeof arguments[1] === \"number\") {\n format = UNKNOWN;\n x = arguments[1];\n y = arguments[2];\n w = arguments[3];\n h = arguments[4];\n alias = arguments[5];\n compression = arguments[6];\n rotation = arguments[7];\n } else {\n format = arguments[1];\n x = arguments[2];\n y = arguments[3];\n w = arguments[4];\n h = arguments[5];\n alias = arguments[6];\n compression = arguments[7];\n rotation = arguments[8];\n }\n\n if (\n typeof imageData === \"object\" &&\n !isDOMElement(imageData) &&\n \"imageData\" in imageData\n ) {\n var options = imageData;\n\n imageData = options.imageData;\n format = options.format || format || UNKNOWN;\n x = options.x || x || 0;\n y = options.y || y || 0;\n w = options.w || options.width || w;\n h = options.h || options.height || h;\n alias = options.alias || alias;\n compression = options.compression || compression;\n rotation = options.rotation || options.angle || rotation;\n }\n\n //If compression is not explicitly set, determine if we should use compression\n var filter = this.internal.getFilters();\n if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n compression = \"SLOW\";\n }\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n }\n\n initialize.call(this);\n\n var image = processImageData.call(\n this,\n imageData,\n format,\n alias,\n compression\n );\n\n writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n return this;\n };\n\n var processImageData = function(imageData, format, alias, compression) {\n var result, dataAsBinaryString;\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n imageData = unescape(imageData);\n var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData !== \"\") {\n imageData = tmpImageData;\n } else {\n tmpImageData = jsPDFAPI.loadFile(imageData, true);\n if (tmpImageData !== undefined) {\n imageData = tmpImageData;\n }\n }\n }\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData, format);\n }\n\n format = getImageFileTypeByImageData(imageData, format);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n // now do the heavy lifting\n\n if (notDefined(alias)) {\n alias = generateAliasFromImageData(imageData);\n }\n result = checkImagesForAlias.call(this, alias);\n\n if (!result) {\n if (supportsArrayBuffer()) {\n // no need to convert if imageData is already uint8array\n if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n dataAsBinaryString = imageData;\n imageData = binaryStringToUint8Array(imageData);\n }\n }\n\n result = this[\"process\" + format.toUpperCase()](\n imageData,\n getImageIndex.call(this),\n alias,\n checkCompressValue(compression),\n dataAsBinaryString\n );\n }\n\n if (!result) {\n throw new Error(\"An unknown error occurred whilst processing the image.\");\n }\n return result;\n };\n\n /**\n * @name convertBase64ToBinaryString\n * @function\n * @param {string} stringData\n * @returns {string} binary string\n */\n var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n stringData,\n throwError\n ) {\n throwError = typeof throwError === \"boolean\" ? throwError : true;\n var base64Info;\n var imageData = \"\";\n var rawData;\n\n if (typeof stringData === \"string\") {\n base64Info = extractImageFromDataUrl(stringData);\n rawData = base64Info !== null ? base64Info.data : stringData;\n\n try {\n imageData = atob(rawData);\n } catch (e) {\n if (throwError) {\n if (!validateStringAsBase64(rawData)) {\n throw new Error(\n \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n );\n } else {\n throw new Error(\n \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n );\n }\n }\n }\n }\n return imageData;\n });\n\n /**\n * @name getImageProperties\n * @function\n * @param {Object} imageData\n * @returns {Object}\n */\n jsPDFAPI.getImageProperties = function(imageData) {\n var image;\n var tmpImageData = \"\";\n var format;\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData);\n }\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData === \"\") {\n tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n }\n imageData = tmpImageData;\n }\n\n format = getImageFileTypeByImageData(imageData);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n imageData = binaryStringToUint8Array(imageData);\n }\n\n image = this[\"process\" + format.toUpperCase()](imageData);\n\n if (!image) {\n throw new Error(\"An unknown error occurred whilst processing the image\");\n }\n\n image.fileType = format;\n\n return image;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n *
    \n * This plugin current supports
    \n *
  11. Goto Page (set pageNumber and top in options)\n *
  12. Goto Name (set name and top in options)\n *
  13. Goto URL (set url in options)\n *

    \n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n * (set magFactor in options). XYZ is the default.\n *

    \n *

    \n * Links, Text, Popup, and FreeText are supported.\n *

    \n *

    \n * Options In PDF spec Not Implemented Yet\n *

  14. link border\n *
  15. named target\n *
  16. page coordinates\n *
  17. destination page scaling and layout\n *
  18. actions other than URL and GotoPage\n *
  19. background / hover actions\n *

    \n * @name annotations\n * @module\n */\n\n/*\n Destination Magnification Factors\n See PDF 1.3 Page 386 for meanings and options\n\n [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var notEmpty = function(obj) {\n if (typeof obj != \"undefined\") {\n if (obj != \"\") {\n return true;\n }\n }\n };\n\n jsPDF.API.events.push([\n \"addPage\",\n function(addPageData) {\n var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n pageInfo.pageContext.annotations = [];\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putPage\",\n function(putPageData) {\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal\n .getVerticalCoordinateString;\n var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n var pageAnnos = putPageData.pageContext.annotations;\n\n var anno, rect, line;\n var found = false;\n for (var a = 0; a < pageAnnos.length && !found; a++) {\n anno = pageAnnos[a];\n switch (anno.type) {\n case \"link\":\n if (\n notEmpty(anno.options.url) ||\n notEmpty(anno.options.pageNumber)\n ) {\n found = true;\n }\n break;\n case \"reference\":\n case \"text\":\n case \"freetext\":\n found = true;\n break;\n }\n }\n if (found == false) {\n return;\n }\n\n this.internal.write(\"/Annots [\");\n for (var i = 0; i < pageAnnos.length; i++) {\n anno = pageAnnos[i];\n var escape = this.internal.pdfEscape;\n var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n switch (anno.type) {\n case \"reference\":\n // References to Widget Annotations (for AcroForm Fields)\n this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n break;\n case \"text\":\n // Create a an object for both the text and the popup\n var objText = this.internal.newAdditionalObject();\n var objPopup = this.internal.newAdditionalObject();\n var encryptorText = this.internal.getEncryptor(objText.objId);\n\n var title = anno.title || \"Note\";\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n\n line =\n \"<>\";\n objText.content = line;\n\n var parent = objText.objId + \" 0 R\";\n var popoff = 30;\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x + popoff) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(\n anno.bounds.x + anno.bounds.w + popoff\n ) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n line =\n \"<>\";\n objPopup.content = line;\n\n this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n break;\n case \"freetext\":\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \"] \";\n var color = anno.color || \"#000000\";\n line =\n \"<>\";\n this.internal.write(line);\n break;\n case \"link\":\n if (anno.options.name) {\n var loc = this.annotations._nameMap[anno.options.name];\n anno.options.pageNumber = loc.page;\n anno.options.top = loc.y;\n } else {\n if (!anno.options.top) {\n anno.options.top = 0;\n }\n }\n\n rect =\n \"/Rect [\" +\n anno.finalBounds.x +\n \" \" +\n anno.finalBounds.y +\n \" \" +\n anno.finalBounds.w +\n \" \" +\n anno.finalBounds.h +\n \"] \";\n\n line = \"\";\n if (anno.options.url) {\n line =\n \"<>\";\n } else if (anno.options.pageNumber) {\n // first page is 0\n var info = this.internal.getPageInfo(anno.options.pageNumber);\n line =\n \"<>\";\n this.internal.write(line);\n }\n break;\n }\n }\n this.internal.write(\"]\");\n }\n ]);\n\n /**\n * @name createAnnotation\n * @function\n * @param {Object} options\n */\n jsPDFAPI.createAnnotation = function(options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n switch (options.type) {\n case \"link\":\n this.link(\n options.bounds.x,\n options.bounds.y,\n options.bounds.w,\n options.bounds.h,\n options\n );\n break;\n case \"text\":\n case \"freetext\":\n pageInfo.pageContext.annotations.push(options);\n break;\n }\n };\n\n /**\n * Create a link\n *\n * valid options\n *
  20. pageNumber or url [required]\n *

    If pageNumber is specified, top and zoom may also be specified

    \n * @name link\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {Object} options\n */\n jsPDFAPI.link = function(x, y, w, h, options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n pageInfo.pageContext.annotations.push({\n finalBounds: {\n x: getHorizontalCoordinateString(x),\n y: getVerticalCoordinateString(y),\n w: getHorizontalCoordinateString(x + w),\n h: getVerticalCoordinateString(y + h)\n },\n options: options,\n type: \"link\"\n });\n };\n\n /**\n * Currently only supports single line text.\n * Returns the width of the text/link\n *\n * @name textWithLink\n * @function\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {Object} options\n * @returns {number} width the width of the text/link\n */\n jsPDFAPI.textWithLink = function(text, x, y, options) {\n var totalLineWidth = this.getTextWidth(text);\n var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n var linkHeight, linkWidth;\n\n // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n if (options.maxWidth !== undefined) {\n var { maxWidth } = options;\n linkWidth = maxWidth;\n var numOfLines = this.splitTextToSize(text, linkWidth).length;\n linkHeight = Math.ceil(lineHeight * numOfLines);\n } else {\n linkWidth = totalLineWidth;\n linkHeight = lineHeight;\n }\n\n this.text(text, x, y, options);\n\n //TODO We really need the text baseline height to do this correctly.\n // Or ability to draw text on top, bottom, center, or baseline.\n y += lineHeight * 0.2;\n //handle x position based on the align option\n if (options.align === \"center\") {\n x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n }\n if (options.align === \"right\") {\n x = x - totalLineWidth;\n }\n this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n return totalLineWidth;\n };\n\n //TODO move into external library\n /**\n * @name getTextWidth\n * @function\n * @param {string} text\n * @returns {number} txtWidth\n */\n jsPDFAPI.getTextWidth = function(text) {\n var fontSize = this.internal.getFontSize();\n var txtWidth =\n (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n return txtWidth;\n };\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n * Arabic Substition A\n */\n var arabicSubstitionA = {\n 0x0621: [0xfe80], // ARABIC LETTER HAMZA\n 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n };\n\n /*\n var ligaturesSubstitutionA = {\n 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n };\n */\n\n var ligatures = {\n 0xfedf: {\n 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n },\n 0xfee0: {\n 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n },\n 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n 0x0651: {\n 0x064c: 0xfc5e, // Shadda + Dammatan\n 0x064d: 0xfc5f, // Shadda + Kasratan\n 0x064e: 0xfc60, // Shadda + Fatha\n 0x064f: 0xfc61, // Shadda + Damma\n 0x0650: 0xfc62 // Shadda + Kasra\n }\n };\n\n var arabic_diacritics = {\n 1612: 64606, // Shadda + Dammatan\n 1613: 64607, // Shadda + Kasratan\n 1614: 64608, // Shadda + Fatha\n 1615: 64609, // Shadda + Damma\n 1616: 64610 // Shadda + Kasra\n };\n\n var alfletter = [1570, 1571, 1573, 1575];\n\n var noChangeInForm = -1;\n var isolatedForm = 0;\n var finalForm = 1;\n var initialForm = 2;\n var medialForm = 3;\n\n jsPDFAPI.__arabicParser__ = {};\n\n //private\n var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n letter\n ) {\n return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n });\n\n var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n letter\n ) {\n return (\n typeof letter === \"string\" &&\n /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n letter\n )\n );\n });\n\n var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n );\n });\n\n var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n );\n };\n\n var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n );\n };\n\n var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length == 4\n );\n });\n\n var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n letters\n ) {\n var i = 0;\n var tmpLigatures = ligatures;\n var result = \"\";\n var effectedLetters = 0;\n\n for (i = 0; i < letters.length; i += 1) {\n if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n effectedLetters++;\n tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n if (typeof tmpLigatures === \"number\") {\n result += String.fromCharCode(tmpLigatures);\n tmpLigatures = ligatures;\n effectedLetters = 0;\n }\n if (i === letters.length - 1) {\n tmpLigatures = ligatures;\n result += letters.charAt(i - (effectedLetters - 1));\n i = i - (effectedLetters - 1);\n effectedLetters = 0;\n }\n } else {\n tmpLigatures = ligatures;\n result += letters.charAt(i - effectedLetters);\n i = i - effectedLetters;\n effectedLetters = 0;\n }\n }\n\n return result;\n });\n\n jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n return (\n letter !== undefined &&\n arabic_diacritics[letter.charCodeAt(0)] !== undefined\n );\n };\n\n var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n currentChar,\n beforeChar,\n nextChar\n ) {\n if (!isArabicLetter(currentChar)) {\n return -1;\n }\n\n if (isInArabicSubstitutionA(currentChar) === false) {\n return noChangeInForm;\n }\n if (\n !arabicLetterHasFinalForm(currentChar) ||\n (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n ) {\n return isolatedForm;\n }\n\n if (\n arabicLetterHasMedialForm(currentChar) &&\n isArabicLetter(beforeChar) &&\n !isArabicEndLetter(beforeChar) &&\n isArabicLetter(nextChar) &&\n arabicLetterHasFinalForm(nextChar)\n ) {\n return medialForm;\n }\n\n if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n return finalForm;\n }\n return initialForm;\n });\n\n /**\n * @name processArabic\n * @function\n * @param {string} text\n * @returns {string}\n */\n var parseArabic = function(text) {\n text = text || \"\";\n\n var result = \"\";\n var i = 0;\n var j = 0;\n var position = 0;\n var currentLetter = \"\";\n var prevLetter = \"\";\n var nextLetter = \"\";\n\n var words = text.split(\"\\\\s+\");\n var newWords = [];\n for (i = 0; i < words.length; i += 1) {\n newWords.push(\"\");\n for (j = 0; j < words[i].length; j += 1) {\n currentLetter = words[i][j];\n prevLetter = words[i][j - 1];\n nextLetter = words[i][j + 1];\n if (isArabicLetter(currentLetter)) {\n position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n if (position !== -1) {\n newWords[i] += String.fromCharCode(\n arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n );\n } else {\n newWords[i] += currentLetter;\n }\n } else {\n newWords[i] += currentLetter;\n }\n }\n\n newWords[i] = resolveLigatures(newWords[i]);\n }\n result = newWords.join(\" \");\n\n return result;\n };\n\n var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n var text =\n typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n var tmpText = [];\n var result;\n\n if (Array.isArray(text)) {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n } else {\n tmpText.push([parseArabic(text[i])]);\n }\n }\n result = tmpText;\n } else {\n result = parseArabic(text);\n }\n if (typeof arguments[0] === \"string\") {\n return result;\n } else {\n arguments[0].text = result;\n return arguments[0];\n }\n });\n\n jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n *\n * @name autoPrint\n * @function\n * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF();\n * doc.text(10, 10, 'This is a test');\n * doc.autoPrint({variant: 'non-conform'});\n * doc.save('autoprint.pdf');\n */\n jsPDFAPI.autoPrint = function(options) {\n \"use strict\";\n var refAutoPrintTag;\n options = options || {};\n options.variant = options.variant || \"non-conform\";\n\n switch (options.variant) {\n case \"javascript\":\n //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n this.addJS(\"print({});\");\n break;\n case \"non-conform\":\n default:\n this.internal.events.subscribe(\"postPutResources\", function() {\n refAutoPrintTag = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /Named\");\n this.internal.out(\"/Type /Action\");\n this.internal.out(\"/N /Print\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n });\n break;\n }\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @class Canvas\n * @classdesc A Canvas Wrapper for jsPDF\n */\n var Canvas = function() {\n var jsPdfInstance = undefined;\n Object.defineProperty(this, \"pdf\", {\n get: function() {\n return jsPdfInstance;\n },\n set: function(value) {\n jsPdfInstance = value;\n }\n });\n\n var _width = 150;\n /**\n * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n * This is one of the two properties, the other being width, that controls the size of the canvas.\n *\n * @name width\n */\n Object.defineProperty(this, \"width\", {\n get: function() {\n return _width;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _width = 150;\n } else {\n _width = value;\n }\n if (this.getContext(\"2d\").pageWrapXEnabled) {\n this.getContext(\"2d\").pageWrapX = _width + 1;\n }\n }\n });\n\n var _height = 300;\n /**\n * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n * This is one of the two properties, the other being height, that controls the size of the canvas.\n *\n * @name height\n */\n Object.defineProperty(this, \"height\", {\n get: function() {\n return _height;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _height = 300;\n } else {\n _height = value;\n }\n if (this.getContext(\"2d\").pageWrapYEnabled) {\n this.getContext(\"2d\").pageWrapY = _height + 1;\n }\n }\n });\n\n var _childNodes = [];\n Object.defineProperty(this, \"childNodes\", {\n get: function() {\n return _childNodes;\n },\n set: function(value) {\n _childNodes = value;\n }\n });\n\n var _style = {};\n Object.defineProperty(this, \"style\", {\n get: function() {\n return _style;\n },\n set: function(value) {\n _style = value;\n }\n });\n\n Object.defineProperty(this, \"parentNode\", {});\n };\n\n /**\n * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n *\n * @name getContext\n * @function\n * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n * @param {object} contextAttributes\n */\n Canvas.prototype.getContext = function(contextType, contextAttributes) {\n contextType = contextType || \"2d\";\n var key;\n\n if (contextType !== \"2d\") {\n return null;\n }\n for (key in contextAttributes) {\n if (this.pdf.context2d.hasOwnProperty(key)) {\n this.pdf.context2d[key] = contextAttributes[key];\n }\n }\n this.pdf.context2d._canvas = this;\n return this.pdf.context2d;\n };\n\n /**\n * The toDataURL() method is just a stub to throw an error if accidently called.\n *\n * @name toDataURL\n * @function\n */\n Canvas.prototype.toDataURL = function() {\n throw new Error(\"toDataURL is not implemented.\");\n };\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n this.canvas = new Canvas();\n this.canvas.pdf = this;\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n var px2pt = (0.264583 * 72) / 25.4;\n var printingHeaderRow = false;\n\n var _initialize = function() {\n if (typeof this.internal.__cell__ === \"undefined\") {\n this.internal.__cell__ = {};\n this.internal.__cell__.padding = 3;\n this.internal.__cell__.headerFunction = undefined;\n this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n this.internal.__cell__.margins.width = this.getPageWidth();\n _reset.call(this);\n }\n };\n\n var _reset = function() {\n this.internal.__cell__.lastCell = new Cell();\n this.internal.__cell__.pages = 1;\n };\n\n var Cell = function() {\n var _x = arguments[0];\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n get: function() {\n return _x;\n },\n set: function(value) {\n _x = value;\n }\n });\n var _y = arguments[1];\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n get: function() {\n return _y;\n },\n set: function(value) {\n _y = value;\n }\n });\n var _width = arguments[2];\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n _width = value;\n }\n });\n var _height = arguments[3];\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n get: function() {\n return _height;\n },\n set: function(value) {\n _height = value;\n }\n });\n var _text = arguments[4];\n Object.defineProperty(this, \"text\", {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = value;\n }\n });\n var _lineNumber = arguments[5];\n Object.defineProperty(this, \"lineNumber\", {\n enumerable: true,\n get: function() {\n return _lineNumber;\n },\n set: function(value) {\n _lineNumber = value;\n }\n });\n var _align = arguments[6];\n Object.defineProperty(this, \"align\", {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n _align = value;\n }\n });\n\n return this;\n };\n\n Cell.prototype.clone = function() {\n return new Cell(\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n );\n };\n\n Cell.prototype.toArray = function() {\n return [\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n ];\n };\n\n /**\n * @name setHeaderFunction\n * @function\n * @param {function} func\n */\n jsPDFAPI.setHeaderFunction = function(func) {\n _initialize.call(this);\n this.internal.__cell__.headerFunction =\n typeof func === \"function\" ? func : undefined;\n return this;\n };\n\n /**\n * @name getTextDimensions\n * @function\n * @param {string} txt\n * @returns {Object} dimensions\n */\n jsPDFAPI.getTextDimensions = function(text, options) {\n _initialize.call(this);\n options = options || {};\n var fontSize = options.fontSize || this.getFontSize();\n var font = options.font || this.getFont();\n var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n var width = 0;\n var amountOfLines = 0;\n var height = 0;\n var tempWidth = 0;\n var scope = this;\n\n if (!Array.isArray(text) && typeof text !== \"string\") {\n if (typeof text === \"number\") {\n text = String(text);\n } else {\n throw new Error(\n \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n );\n }\n }\n\n const maxWidth = options.maxWidth;\n if (maxWidth > 0) {\n if (typeof text === \"string\") {\n text = this.splitTextToSize(text, maxWidth);\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n text = text.reduce(function(acc, textLine) {\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n }, []);\n }\n } else {\n // Without the else clause, it will not work if you do not pass along maxWidth\n text = Array.isArray(text) ? text : [text];\n }\n\n for (var i = 0; i < text.length; i++) {\n tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n if (width < tempWidth) {\n width = tempWidth;\n }\n }\n\n if (width !== 0) {\n amountOfLines = text.length;\n }\n\n width = width / scaleFactor;\n height = Math.max(\n (amountOfLines * fontSize * this.getLineHeightFactor() -\n fontSize * (this.getLineHeightFactor() - 1)) /\n scaleFactor,\n 0\n );\n return { w: width, h: height };\n };\n\n /**\n * @name cellAddPage\n * @function\n */\n jsPDFAPI.cellAddPage = function() {\n _initialize.call(this);\n\n this.addPage();\n\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n this.internal.__cell__.lastCell = new Cell(\n margins.left,\n margins.top,\n undefined,\n undefined\n );\n this.internal.__cell__.pages += 1;\n\n return this;\n };\n\n /**\n * @name cell\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} text\n * @param {number} lineNumber lineNumber\n * @param {string} align\n * @return {jsPDF} jsPDF-instance\n */\n var cell = (jsPDFAPI.cell = function() {\n var currentCell;\n\n if (arguments[0] instanceof Cell) {\n currentCell = arguments[0];\n } else {\n currentCell = new Cell(\n arguments[0],\n arguments[1],\n arguments[2],\n arguments[3],\n arguments[4],\n arguments[5]\n );\n }\n _initialize.call(this);\n var lastCell = this.internal.__cell__.lastCell;\n var padding = this.internal.__cell__.padding;\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n var printHeaders = this.internal.__cell__.printHeaders;\n // If this is not the first cell, we must change its position\n if (typeof lastCell.lineNumber !== \"undefined\") {\n if (lastCell.lineNumber === currentCell.lineNumber) {\n //Same line\n currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n currentCell.y = lastCell.y || 0;\n } else {\n //New line\n if (\n lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n this.getPageHeight()\n ) {\n this.cellAddPage();\n currentCell.y = margins.top;\n if (printHeaders && tableHeaderRow) {\n this.printHeaderRow(currentCell.lineNumber, true);\n currentCell.y += tableHeaderRow[0].height;\n }\n } else {\n currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n }\n }\n }\n\n if (typeof currentCell.text[0] !== \"undefined\") {\n this.rect(\n currentCell.x,\n currentCell.y,\n currentCell.width,\n currentCell.height,\n printingHeaderRow === true ? \"FD\" : undefined\n );\n if (currentCell.align === \"right\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width - padding,\n currentCell.y + padding,\n { align: \"right\", baseline: \"top\" }\n );\n } else if (currentCell.align === \"center\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width / 2,\n currentCell.y + padding,\n {\n align: \"center\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n } else {\n this.text(\n currentCell.text,\n currentCell.x + padding,\n currentCell.y + padding,\n {\n align: \"left\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n }\n }\n this.internal.__cell__.lastCell = currentCell;\n return this;\n });\n\n /**\n * Create a table from a set of data.\n * @name table\n * @function\n * @param {Integer} [x] : left-position for top-left corner of table\n * @param {Integer} [y] top-position for top-left corner of table\n * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n * @param {Object} [config.margins] margin values for left, top, bottom, and width\n * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n * @param {Object} [config.padding] cell-padding in pt to use (optional)\n * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n * @param {Object} [config.headerTextColor] default is #000 (optional)\n * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.table = function(x, y, data, headers, config) {\n _initialize.call(this);\n if (!data) {\n throw new Error(\"No data for PDF table.\");\n }\n\n config = config || {};\n\n var headerNames = [],\n headerLabels = [],\n headerAligns = [],\n i,\n columnMatrix = {},\n columnWidths = {},\n column,\n columnMinWidths = [],\n j,\n tableHeaderConfigs = [],\n //set up defaults. If a value is provided in config, defaults will be overwritten:\n autoSize = config.autoSize || false,\n printHeaders = config.printHeaders === false ? false : true,\n fontSize =\n config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n ? config.css[\"font-size\"] * 16\n : config.fontSize || 12,\n margins =\n config.margins ||\n Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n padding = typeof config.padding === \"number\" ? config.padding : 3,\n headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n headerTextColor = config.headerTextColor || \"#000\";\n\n _reset.call(this);\n\n this.internal.__cell__.printHeaders = printHeaders;\n this.internal.__cell__.margins = margins;\n this.internal.__cell__.table_font_size = fontSize;\n this.internal.__cell__.padding = padding;\n this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n this.internal.__cell__.headerTextColor = headerTextColor;\n this.setFontSize(fontSize);\n\n // Set header values\n if (headers === undefined || headers === null) {\n // No headers defined so we derive from data\n headerNames = Object.keys(data[0]);\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n headerNames = headers.map(function(header) {\n return header.name;\n });\n headerLabels = headers.map(function(header) {\n return header.prompt || header.name || \"\";\n });\n headerAligns = headers.map(function(header) {\n return header.align || \"left\";\n });\n // Split header configs into names and prompts\n for (i = 0; i < headers.length; i += 1) {\n columnWidths[headers[i].name] = headers[i].width * px2pt;\n }\n } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n headerNames = headers;\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n }\n\n if (\n autoSize ||\n (Array.isArray(headers) && typeof headers[0] === \"string\")\n ) {\n var headerName;\n for (i = 0; i < headerNames.length; i += 1) {\n headerName = headerNames[i];\n\n // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n columnMatrix[headerName] = data.map(function(rec) {\n return rec[headerName];\n });\n\n // get header width\n this.setFont(undefined, \"bold\");\n columnMinWidths.push(\n this.getTextDimensions(headerLabels[i], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n column = columnMatrix[headerName];\n\n // get cell widths\n this.setFont(undefined, \"normal\");\n for (j = 0; j < column.length; j += 1) {\n columnMinWidths.push(\n this.getTextDimensions(column[j], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n }\n\n // get final column width\n columnWidths[headerName] =\n Math.max.apply(null, columnMinWidths) + padding + padding;\n\n //have to reset\n columnMinWidths = [];\n }\n }\n\n // -- Construct the table\n\n if (printHeaders) {\n var row = {};\n for (i = 0; i < headerNames.length; i += 1) {\n row[headerNames[i]] = {};\n row[headerNames[i]].text = headerLabels[i];\n row[headerNames[i]].align = headerAligns[i];\n }\n\n var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n // Construct the header row\n tableHeaderConfigs = headerNames.map(function(value) {\n return new Cell(\n x,\n y,\n columnWidths[value],\n rowHeight,\n row[value].text,\n undefined,\n row[value].align\n );\n });\n\n // Store the table header config\n this.setTableHeaderRow(tableHeaderConfigs);\n\n // Print the header for the start of the table\n this.printHeaderRow(1, false);\n }\n\n // Construct the data rows\n\n var align = headers.reduce(function(pv, cv) {\n pv[cv.name] = cv.align;\n return pv;\n }, {});\n for (i = 0; i < data.length; i += 1) {\n if (\"rowStart\" in config && config.rowStart instanceof Function) {\n config.rowStart(\n {\n row: i,\n data: data[i]\n },\n this\n );\n }\n var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n for (j = 0; j < headerNames.length; j += 1) {\n var cellData = data[i][headerNames[j]];\n if (\"cellStart\" in config && config.cellStart instanceof Function) {\n config.cellStart(\n {\n row: i,\n col: j,\n data: cellData\n },\n this\n );\n }\n cell.call(\n this,\n new Cell(\n x,\n y,\n columnWidths[headerNames[j]],\n lineHeight,\n cellData,\n i + 2,\n align[headerNames[j]]\n )\n );\n }\n }\n this.internal.__cell__.table_x = x;\n this.internal.__cell__.table_y = y;\n return this;\n };\n\n /**\n * Calculate the height for containing the highest column\n *\n * @name calculateLineHeight\n * @function\n * @param {Object[]} model is the line of data we want to calculate the height of\n * @param {Integer[]} columnWidths is size of each column\n * @returns {number} lineHeight\n * @private\n */\n var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n var padding = this.internal.__cell__.padding;\n var fontSize = this.internal.__cell__.table_font_size;\n var scaleFactor = this.internal.scaleFactor;\n\n return Object.keys(model)\n .map(function(key) {\n var value = model[key];\n return this.splitTextToSize(\n value.hasOwnProperty(\"text\") ? value.text : value,\n columnWidths[key] - padding - padding\n );\n }, this)\n .map(function(value) {\n return (\n (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n padding +\n padding\n );\n }, this)\n .reduce(function(pv, cv) {\n return Math.max(pv, cv);\n }, 0);\n };\n\n /**\n * Store the config for outputting a table header\n *\n * @name setTableHeaderRow\n * @function\n * @param {Object[]} config\n * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n * except the lineNumber parameter is excluded\n */\n jsPDFAPI.setTableHeaderRow = function(config) {\n _initialize.call(this);\n this.internal.__cell__.tableHeaderRow = config;\n };\n\n /**\n * Output the store header row\n *\n * @name printHeaderRow\n * @function\n * @param {number} lineNumber The line number to output the header at\n * @param {boolean} new_page\n */\n jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n _initialize.call(this);\n if (!this.internal.__cell__.tableHeaderRow) {\n throw new Error(\"Property tableHeaderRow does not exist.\");\n }\n\n var tableHeaderCell;\n\n printingHeaderRow = true;\n if (typeof this.internal.__cell__.headerFunction === \"function\") {\n var position = this.internal.__cell__.headerFunction(\n this,\n this.internal.__cell__.pages\n );\n this.internal.__cell__.lastCell = new Cell(\n position[0],\n position[1],\n position[2],\n position[3],\n undefined,\n -1\n );\n }\n this.setFont(undefined, \"bold\");\n\n var tempHeaderConf = [];\n for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n if (new_page) {\n tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n tempHeaderConf.push(tableHeaderCell);\n }\n tableHeaderCell.lineNumber = lineNumber;\n var currentTextColor = this.getTextColor();\n this.setTextColor(this.internal.__cell__.headerTextColor);\n this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n cell.call(this, tableHeaderCell);\n this.setTextColor(currentTextColor);\n }\n if (tempHeaderConf.length > 0) {\n this.setTableHeaderRow(tempHeaderConf);\n }\n this.setFont(undefined, \"normal\");\n printingHeaderRow = false;\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n var jsNamesObj, jsJsObj, text;\n /**\n * @name addJS\n * @function\n * @param {string} javascript The javascript to be embedded into the PDF-file.\n * @returns {jsPDF}\n */\n jsPDFAPI.addJS = function(javascript) {\n text = javascript;\n this.internal.events.subscribe(\"postPutResources\", function() {\n jsNamesObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n\n jsJsObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /JavaScript\");\n this.internal.out(\"/JS (\" + text + \")\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n this.internal.events.subscribe(\"putCatalog\", function() {\n if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n this.internal.out(\"/Names <>\");\n }\n });\n return this;\n };\n})(jsPDF.API);\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n buildFontFaceMap,\r\n parseFontFamily,\r\n resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n \"use strict\";\r\n var ContextLayer = function(ctx) {\r\n ctx = ctx || {};\r\n this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n this.strokeOpacity = ctx.strokeOpacity || 1;\r\n this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n this.fillStyle = ctx.fillStyle || \"#000000\";\r\n this.isFillTransparent = ctx.isFillTransparent || false;\r\n this.fillOpacity = ctx.fillOpacity || 1;\r\n this.font = ctx.font || \"10px sans-serif\";\r\n this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n this.textAlign = ctx.textAlign || \"left\";\r\n this.lineWidth = ctx.lineWidth || 1;\r\n this.lineJoin = ctx.lineJoin || \"miter\";\r\n this.lineCap = ctx.lineCap || \"butt\";\r\n this.path = ctx.path || [];\r\n this.transform =\r\n typeof ctx.transform !== \"undefined\"\r\n ? ctx.transform.clone()\r\n : new Matrix();\r\n this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n this.globalAlpha = ctx.globalAlpha || 1.0;\r\n this.clip_path = ctx.clip_path || [];\r\n this.currentPoint = ctx.currentPoint || new Point();\r\n this.miterLimit = ctx.miterLimit || 10.0;\r\n this.lastPoint = ctx.lastPoint || new Point();\r\n this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n this.lineDash = ctx.lineDash || [];\r\n this.margin = ctx.margin || [0, 0, 0, 0];\r\n this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n this.ignoreClearRect =\r\n typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n return this;\r\n };\r\n\r\n //stub\r\n var f2,\r\n getHorizontalCoordinateString,\r\n getVerticalCoordinateString,\r\n getHorizontalCoordinate,\r\n getVerticalCoordinate,\r\n Point,\r\n Rectangle,\r\n Matrix,\r\n _ctx;\r\n jsPDFAPI.events.push([\r\n \"initialized\",\r\n function() {\r\n this.context2d = new Context2D(this);\r\n\r\n f2 = this.internal.f2;\r\n getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n Point = this.internal.Point;\r\n Rectangle = this.internal.Rectangle;\r\n Matrix = this.internal.Matrix;\r\n _ctx = new ContextLayer();\r\n }\r\n ]);\r\n\r\n var Context2D = function(pdf) {\r\n Object.defineProperty(this, \"canvas\", {\r\n get: function() {\r\n return { parentNode: false, style: false };\r\n }\r\n });\r\n\r\n var _pdf = pdf;\r\n Object.defineProperty(this, \"pdf\", {\r\n get: function() {\r\n return _pdf;\r\n }\r\n });\r\n\r\n var _pageWrapXEnabled = false;\r\n /**\r\n * @name pageWrapXEnabled\r\n * @type {boolean}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n get: function() {\r\n return _pageWrapXEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapXEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _pageWrapYEnabled = false;\r\n /**\r\n * @name pageWrapYEnabled\r\n * @type {boolean}\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n get: function() {\r\n return _pageWrapYEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapYEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _posX = 0;\r\n /**\r\n * @name posX\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posX\", {\r\n get: function() {\r\n return _posX;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posX = value;\r\n }\r\n }\r\n });\r\n\r\n var _posY = 0;\r\n /**\r\n * @name posY\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posY\", {\r\n get: function() {\r\n return _posY;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posY = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n * @name margin\r\n * @type {number|number[]}\r\n * @default [0, 0, 0, 0]\r\n */\r\n Object.defineProperty(this, \"margin\", {\r\n get: function() {\r\n return _ctx.margin;\r\n },\r\n set: function(value) {\r\n var margin;\r\n if (typeof value === \"number\") {\r\n margin = [value, value, value, value];\r\n } else {\r\n margin = new Array(4);\r\n margin[0] = value[0];\r\n margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n }\r\n _ctx.margin = margin;\r\n }\r\n });\r\n\r\n var _autoPaging = false;\r\n /**\r\n * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n * pages if required.\r\n *\r\n * Context2d supports different modes:\r\n *
      \r\n *
    • \r\n * false: Auto paging is disabled.\r\n *
    • \r\n *
    • \r\n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\r\n * slice text in half, making it difficult to read.\r\n *
    • \r\n *
    • \r\n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\r\n * mostly of a single column of text.\r\n *
    • \r\n *
    \r\n * @name Context2D#autoPaging\r\n * @type {boolean|\"slice\"|\"text\"}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"autoPaging\", {\r\n get: function() {\r\n return _autoPaging;\r\n },\r\n set: function(value) {\r\n _autoPaging = value;\r\n }\r\n });\r\n\r\n var lastBreak = 0;\r\n /**\r\n * @name lastBreak\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"lastBreak\", {\r\n get: function() {\r\n return lastBreak;\r\n },\r\n set: function(value) {\r\n lastBreak = value;\r\n }\r\n });\r\n\r\n var pageBreaks = [];\r\n /**\r\n * Y Position of page breaks.\r\n * @name pageBreaks\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"pageBreaks\", {\r\n get: function() {\r\n return pageBreaks;\r\n },\r\n set: function(value) {\r\n pageBreaks = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctx\r\n * @type {object}\r\n * @default {}\r\n */\r\n Object.defineProperty(this, \"ctx\", {\r\n get: function() {\r\n return _ctx;\r\n },\r\n set: function(value) {\r\n if (value instanceof ContextLayer) {\r\n _ctx = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * @name path\r\n * @type {array}\r\n * @default []\r\n */\r\n Object.defineProperty(this, \"path\", {\r\n get: function() {\r\n return _ctx.path;\r\n },\r\n set: function(value) {\r\n _ctx.path = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctxStack\r\n * @type {array}\r\n * @default []\r\n */\r\n var _ctxStack = [];\r\n Object.defineProperty(this, \"ctxStack\", {\r\n get: function() {\r\n return _ctxStack;\r\n },\r\n set: function(value) {\r\n _ctxStack = value;\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n *\r\n * @name fillStyle\r\n * @default #000000\r\n * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    \r\n * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    \r\n * A pattern object to use to fill the drawing (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"fillStyle\", {\r\n get: function() {\r\n return this.ctx.fillStyle;\r\n },\r\n set: function(value) {\r\n var rgba;\r\n rgba = getRGBA(value);\r\n\r\n this.ctx.fillStyle = rgba.style;\r\n this.ctx.isFillTransparent = rgba.a === 0;\r\n this.ctx.fillOpacity = rgba.a;\r\n\r\n this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used for strokes\r\n *\r\n * @name strokeStyle\r\n * @default #000000\r\n * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"strokeStyle\", {\r\n get: function() {\r\n return this.ctx.strokeStyle;\r\n },\r\n set: function(value) {\r\n var rgba = getRGBA(value);\r\n\r\n this.ctx.strokeStyle = rgba.style;\r\n this.ctx.isStrokeTransparent = rgba.a === 0;\r\n this.ctx.strokeOpacity = rgba.a;\r\n\r\n if (rgba.a === 0) {\r\n this.pdf.setDrawColor(255, 255, 255);\r\n } else if (rgba.a === 1) {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n } else {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the style of the end caps for a line\r\n *\r\n * @name lineCap\r\n * @default butt\r\n * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    \r\n * round A rounded end cap is added to each end of the line
    \r\n * square A square end cap is added to each end of the line
    \r\n */\r\n Object.defineProperty(this, \"lineCap\", {\r\n get: function() {\r\n return this.ctx.lineCap;\r\n },\r\n set: function(value) {\r\n if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n this.ctx.lineCap = value;\r\n this.pdf.setLineCap(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the current line width\r\n *\r\n * @name lineWidth\r\n * @default 1\r\n * @property {number} lineWidth The current line width, in pixels\r\n */\r\n Object.defineProperty(this, \"lineWidth\", {\r\n get: function() {\r\n return this.ctx.lineWidth;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.lineWidth = value;\r\n this.pdf.setLineWidth(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the type of corner created, when two lines meet\r\n */\r\n Object.defineProperty(this, \"lineJoin\", {\r\n get: function() {\r\n return this.ctx.lineJoin;\r\n },\r\n set: function(value) {\r\n if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n this.ctx.lineJoin = value;\r\n this.pdf.setLineJoin(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n *\r\n * @name miterLimit\r\n * @default 10\r\n */\r\n Object.defineProperty(this, \"miterLimit\", {\r\n get: function() {\r\n return this.ctx.miterLimit;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.miterLimit = value;\r\n this.pdf.setMiterLimit(value);\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textBaseline\", {\r\n get: function() {\r\n return this.ctx.textBaseline;\r\n },\r\n set: function(value) {\r\n this.ctx.textBaseline = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textAlign\", {\r\n get: function() {\r\n return this.ctx.textAlign;\r\n },\r\n set: function(value) {\r\n if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n this.ctx.textAlign = value;\r\n }\r\n }\r\n });\r\n\r\n var _fontFaceMap = null;\r\n\r\n function getFontFaceMap(pdf, fontFaces) {\r\n if (_fontFaceMap === null) {\r\n var fontMap = pdf.getFontList();\r\n\r\n var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n }\r\n\r\n return _fontFaceMap;\r\n }\r\n\r\n function convertToFontFaces(fontMap) {\r\n var fontFaces = [];\r\n\r\n Object.keys(fontMap).forEach(function(family) {\r\n var styles = fontMap[family];\r\n\r\n styles.forEach(function(style) {\r\n var fontFace = null;\r\n\r\n switch (style) {\r\n case \"bold\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\"\r\n };\r\n break;\r\n\r\n case \"italic\":\r\n fontFace = {\r\n family: family,\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"bolditalic\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\",\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"\":\r\n case \"normal\":\r\n fontFace = {\r\n family: family\r\n };\r\n break;\r\n }\r\n\r\n // If font-face is still null here, it is a font with some styling we don't recognize and\r\n // cannot map or it is a font added via the fontFaces option of .html().\r\n if (fontFace !== null) {\r\n fontFace.ref = {\r\n name: family,\r\n style: style\r\n };\r\n\r\n fontFaces.push(fontFace);\r\n }\r\n });\r\n });\r\n\r\n return fontFaces;\r\n }\r\n\r\n var _fontFaces = null;\r\n /**\r\n * A map of available font-faces, as passed in the options of\r\n * .html(). If set a limited implementation of the font style matching\r\n * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n * will be used. If not set it will fallback to previous behavior.\r\n */\r\n\r\n Object.defineProperty(this, \"fontFaces\", {\r\n get: function() {\r\n return _fontFaces;\r\n },\r\n set: function(value) {\r\n _fontFaceMap = null;\r\n _fontFaces = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"font\", {\r\n get: function() {\r\n return this.ctx.font;\r\n },\r\n set: function(value) {\r\n this.ctx.font = value;\r\n var rx, matches;\r\n\r\n //source: https://stackoverflow.com/a/10136041\r\n // eslint-disable-next-line no-useless-escape\r\n rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n matches = rx.exec(value);\r\n if (matches !== null) {\r\n var fontStyle = matches[1];\r\n var fontVariant = matches[2];\r\n var fontWeight = matches[3];\r\n var fontSize = matches[4];\r\n var lineHeight = matches[5];\r\n var fontFamily = matches[6];\r\n } else {\r\n return;\r\n }\r\n var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n if (\"px\" === fontSizeUnit) {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n } else if (\"em\" === fontSizeUnit) {\r\n fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n } else {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n }\r\n\r\n this.pdf.setFontSize(fontSize);\r\n var parts = parseFontFamily(fontFamily);\r\n\r\n if (this.fontFaces) {\r\n var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n var rules = parts.map(function(ff) {\r\n return {\r\n family: ff,\r\n stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n weight: fontWeight,\r\n style: fontStyle\r\n };\r\n });\r\n\r\n var font = resolveFontFace(fontFaceMap, rules);\r\n this.pdf.setFont(font.ref.name, font.ref.style);\r\n return;\r\n }\r\n\r\n var style = \"\";\r\n if (\r\n fontWeight === \"bold\" ||\r\n parseInt(fontWeight, 10) >= 700 ||\r\n fontStyle === \"bold\"\r\n ) {\r\n style = \"bold\";\r\n }\r\n\r\n if (fontStyle === \"italic\") {\r\n style += \"italic\";\r\n }\r\n\r\n if (style.length === 0) {\r\n style = \"normal\";\r\n }\r\n var jsPdfFontName = \"\";\r\n\r\n var fallbackFonts = {\r\n arial: \"Helvetica\",\r\n Arial: \"Helvetica\",\r\n verdana: \"Helvetica\",\r\n Verdana: \"Helvetica\",\r\n helvetica: \"Helvetica\",\r\n Helvetica: \"Helvetica\",\r\n \"sans-serif\": \"Helvetica\",\r\n fixed: \"Courier\",\r\n monospace: \"Courier\",\r\n terminal: \"Courier\",\r\n cursive: \"Times\",\r\n fantasy: \"Times\",\r\n serif: \"Times\"\r\n };\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n if (\r\n this.pdf.internal.getFont(parts[i], style, {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n break;\r\n } else if (\r\n style === \"bolditalic\" &&\r\n this.pdf.internal.getFont(parts[i], \"bold\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"bold\";\r\n } else if (\r\n this.pdf.internal.getFont(parts[i], \"normal\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"normal\";\r\n break;\r\n }\r\n }\r\n if (jsPdfFontName === \"\") {\r\n for (var j = 0; j < parts.length; j++) {\r\n if (fallbackFonts[parts[j]]) {\r\n jsPdfFontName = fallbackFonts[parts[j]];\r\n break;\r\n }\r\n }\r\n }\r\n jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n this.pdf.setFont(jsPdfFontName, style);\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalCompositeOperation\", {\r\n get: function() {\r\n return this.ctx.globalCompositeOperation;\r\n },\r\n set: function(value) {\r\n this.ctx.globalCompositeOperation = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalAlpha\", {\r\n get: function() {\r\n return this.ctx.globalAlpha;\r\n },\r\n set: function(value) {\r\n this.ctx.globalAlpha = value;\r\n }\r\n });\r\n\r\n /**\r\n * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n *\r\n * @name lineDashOffset\r\n * @default 0.0\r\n */\r\n Object.defineProperty(this, \"lineDashOffset\", {\r\n get: function() {\r\n return this.ctx.lineDashOffset;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDashOffset = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"lineDash\", {\r\n get: function() {\r\n return this.ctx.lineDash;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDash = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"ignoreClearRect\", {\r\n get: function() {\r\n return this.ctx.ignoreClearRect;\r\n },\r\n set: function(value) {\r\n this.ctx.ignoreClearRect = Boolean(value);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets the line dash pattern used when stroking lines.\r\n * @name setLineDash\r\n * @function\r\n * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n */\r\n Context2D.prototype.setLineDash = function(dashArray) {\r\n this.lineDash = dashArray;\r\n };\r\n\r\n /**\r\n * gets the current line dash pattern.\r\n * @name getLineDash\r\n * @function\r\n * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n */\r\n Context2D.prototype.getLineDash = function() {\r\n if (this.lineDash.length % 2) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n return this.lineDash.concat(this.lineDash);\r\n } else {\r\n // The copied value is returned to prevent contamination from outside.\r\n return this.lineDash.slice();\r\n }\r\n };\r\n\r\n Context2D.prototype.fill = function() {\r\n pathPreProcess.call(this, \"fill\", false);\r\n };\r\n\r\n /**\r\n * Actually draws the path you have defined\r\n *\r\n * @name stroke\r\n * @function\r\n * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n */\r\n Context2D.prototype.stroke = function() {\r\n pathPreProcess.call(this, \"stroke\", false);\r\n };\r\n\r\n /**\r\n * Begins a path, or resets the current\r\n *\r\n * @name beginPath\r\n * @function\r\n * @description The beginPath() method begins a path, or resets the current path.\r\n */\r\n Context2D.prototype.beginPath = function() {\r\n this.path = [\r\n {\r\n type: \"begin\"\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Moves the path to the specified point in the canvas, without creating a line\r\n *\r\n * @name moveTo\r\n * @function\r\n * @param x {Number} The x-coordinate of where to move the path to\r\n * @param y {Number} The y-coordinate of where to move the path to\r\n */\r\n Context2D.prototype.moveTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"mt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(x, y);\r\n };\r\n\r\n /**\r\n * Creates a path from the current point back to the starting point\r\n *\r\n * @name closePath\r\n * @function\r\n * @description The closePath() method creates a path from the current point back to the starting point.\r\n */\r\n Context2D.prototype.closePath = function() {\r\n var pathBegin = new Point(0, 0);\r\n var i = 0;\r\n for (i = this.path.length - 1; i !== -1; i--) {\r\n if (this.path[i].type === \"begin\") {\r\n if (\r\n typeof this.path[i + 1] === \"object\" &&\r\n typeof this.path[i + 1].x === \"number\"\r\n ) {\r\n pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n break;\r\n }\r\n }\r\n }\r\n this.path.push({\r\n type: \"close\"\r\n });\r\n this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n };\r\n\r\n /**\r\n * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n *\r\n * @name lineTo\r\n * @function\r\n * @param x The x-coordinate of where to create the line to\r\n * @param y The y-coordinate of where to create the line to\r\n * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n */\r\n Context2D.prototype.lineTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"lt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n };\r\n\r\n /**\r\n * Clips a region of any shape and size from the original canvas\r\n *\r\n * @name clip\r\n * @function\r\n * @description The clip() method clips a region of any shape and size from the original canvas.\r\n */\r\n Context2D.prototype.clip = function() {\r\n this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n pathPreProcess.call(this, null, true);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name quadraticCurveTo\r\n * @function\r\n * @param cpx {Number} The x-coordinate of the Bézier control point\r\n * @param cpy {Number} The y-coordinate of the Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n console.error(\r\n \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n );\r\n }\r\n\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n this.path.push({\r\n type: \"qct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name bezierCurveTo\r\n * @function\r\n * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(cp1x) ||\r\n isNaN(cp1y) ||\r\n isNaN(cp2x) ||\r\n isNaN(cp2y)\r\n ) {\r\n console.error(\r\n \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n );\r\n }\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n this.path.push({\r\n type: \"bct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x2: pt2.x,\r\n y2: pt2.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates an arc/curve (used to create circles, or parts of circles)\r\n *\r\n * @name arc\r\n * @function\r\n * @param x {Number} The x-coordinate of the center of the circle\r\n * @param y {Number} The y-coordinate of the center of the circle\r\n * @param radius {Number} The radius of the circle\r\n * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n * @param endAngle {Number} The ending angle, in radians\r\n * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n */\r\n Context2D.prototype.arc = function(\r\n x,\r\n y,\r\n radius,\r\n startAngle,\r\n endAngle,\r\n counterclockwise\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(radius) ||\r\n isNaN(startAngle) ||\r\n isNaN(endAngle)\r\n ) {\r\n console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n }\r\n counterclockwise = Boolean(counterclockwise);\r\n\r\n if (!this.ctx.transform.isIdentity) {\r\n var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n x = xpt.x;\r\n y = xpt.y;\r\n\r\n var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n radius = Math.sqrt(\r\n Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n );\r\n }\r\n if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n startAngle = 0;\r\n endAngle = 2 * Math.PI;\r\n }\r\n\r\n this.path.push({\r\n type: \"arc\",\r\n x: x,\r\n y: y,\r\n radius: radius,\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n counterclockwise: counterclockwise\r\n });\r\n // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n };\r\n\r\n /**\r\n * Creates an arc/curve between two tangents\r\n *\r\n * @name arcTo\r\n * @function\r\n * @param x1 {Number} The x-coordinate of the first tangent\r\n * @param y1 {Number} The y-coordinate of the first tangent\r\n * @param x2 {Number} The x-coordinate of the second tangent\r\n * @param y2 {Number} The y-coordinate of the second tangent\r\n * @param radius The radius of the arc\r\n * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n throw new Error(\"arcTo not implemented.\");\r\n };\r\n\r\n /**\r\n * Creates a rectangle\r\n *\r\n * @name rect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The rect() method creates a rectangle.\r\n */\r\n Context2D.prototype.rect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n }\r\n this.moveTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x + w, y + h);\r\n this.lineTo(x, y + h);\r\n this.lineTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x, y);\r\n };\r\n\r\n /**\r\n * Draws a \"filled\" rectangle\r\n *\r\n * @name fillRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n */\r\n Context2D.prototype.fillRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n }\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n var tmp = {};\r\n if (this.lineCap !== \"butt\") {\r\n tmp.lineCap = this.lineCap;\r\n this.lineCap = \"butt\";\r\n }\r\n if (this.lineJoin !== \"miter\") {\r\n tmp.lineJoin = this.lineJoin;\r\n this.lineJoin = \"miter\";\r\n }\r\n\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.fill();\r\n\r\n if (tmp.hasOwnProperty(\"lineCap\")) {\r\n this.lineCap = tmp.lineCap;\r\n }\r\n if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n this.lineJoin = tmp.lineJoin;\r\n }\r\n };\r\n\r\n /**\r\n * Draws a rectangle (no fill)\r\n *\r\n * @name strokeRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n */\r\n Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.stroke();\r\n };\r\n\r\n /**\r\n * Clears the specified pixels within a given rectangle\r\n *\r\n * @name clearRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle to clear, in pixels\r\n * @param h {Number} The height of the rectangle to clear, in pixels\r\n * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    \r\n * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n *\r\n */\r\n Context2D.prototype.clearRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n }\r\n if (this.ignoreClearRect) {\r\n return;\r\n }\r\n\r\n this.fillStyle = \"#ffffff\";\r\n this.fillRect(x, y, w, h);\r\n };\r\n\r\n /**\r\n * Saves the state of the current context\r\n *\r\n * @name save\r\n * @function\r\n */\r\n Context2D.prototype.save = function(doStackPush) {\r\n doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPush) {\r\n this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n var ctx = new ContextLayer(this.ctx);\r\n this.ctxStack.push(this.ctx);\r\n this.ctx = ctx;\r\n }\r\n };\r\n\r\n /**\r\n * Returns previously saved path state and attributes\r\n *\r\n * @name restore\r\n * @function\r\n */\r\n Context2D.prototype.restore = function(doStackPop) {\r\n doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"Q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPop && this.ctxStack.length !== 0) {\r\n this.ctx = this.ctxStack.pop();\r\n this.fillStyle = this.ctx.fillStyle;\r\n this.strokeStyle = this.ctx.strokeStyle;\r\n this.font = this.ctx.font;\r\n this.lineCap = this.ctx.lineCap;\r\n this.lineWidth = this.ctx.lineWidth;\r\n this.lineJoin = this.ctx.lineJoin;\r\n this.lineDash = this.ctx.lineDash;\r\n this.lineDashOffset = this.ctx.lineDashOffset;\r\n }\r\n };\r\n\r\n /**\r\n * @name toDataURL\r\n * @function\r\n */\r\n Context2D.prototype.toDataURL = function() {\r\n throw new Error(\"toDataUrl not implemented.\");\r\n };\r\n\r\n //helper functions\r\n\r\n /**\r\n * Get the decimal values of r, g, b and a\r\n *\r\n * @name getRGBA\r\n * @function\r\n * @private\r\n * @ignore\r\n */\r\n var getRGBA = function(style) {\r\n var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n var r, g, b, a;\r\n\r\n if (style.isCanvasGradient === true) {\r\n style = style.getColor();\r\n }\r\n\r\n if (!style) {\r\n return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n }\r\n\r\n if (rxTransparent.test(style)) {\r\n r = 0;\r\n g = 0;\r\n b = 0;\r\n a = 0;\r\n } else {\r\n var matches = rxRgb.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = 1;\r\n } else {\r\n matches = rxRgba.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = parseFloat(matches[4]);\r\n } else {\r\n a = 1;\r\n\r\n if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(style);\r\n if (rgbColor.ok) {\r\n style = rgbColor.toHex();\r\n } else {\r\n style = \"#000000\";\r\n }\r\n }\r\n\r\n if (style.length === 4) {\r\n r = style.substring(1, 2);\r\n r += r;\r\n g = style.substring(2, 3);\r\n g += g;\r\n b = style.substring(3, 4);\r\n b += b;\r\n } else {\r\n r = style.substring(1, 3);\r\n g = style.substring(3, 5);\r\n b = style.substring(5, 7);\r\n }\r\n r = parseInt(r, 16);\r\n g = parseInt(g, 16);\r\n b = parseInt(b, 16);\r\n }\r\n }\r\n }\r\n return { r: r, g: g, b: b, a: a, style: style };\r\n };\r\n\r\n /**\r\n * @name isFillTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isFillTransparent = function() {\r\n return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n };\r\n\r\n /**\r\n * @name isStrokeTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isStrokeTransparent = function() {\r\n return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n };\r\n\r\n /**\r\n * Draws \"filled\" text on the canvas\r\n *\r\n * @name fillText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n }\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n // We only use X axis as scale hint\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Draws text on the canvas (no fill)\r\n *\r\n * @name strokeText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n renderingMode: \"stroke\",\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Returns an object that contains the width of the specified text\r\n *\r\n * @name measureText\r\n * @function\r\n * @param text {String} The text to be measured\r\n * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n * @returns {Number}\r\n */\r\n Context2D.prototype.measureText = function(text) {\r\n if (typeof text !== \"string\") {\r\n console.error(\r\n \"jsPDF.context2d.measureText: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n );\r\n }\r\n var pdf = this.pdf;\r\n var k = this.pdf.internal.scaleFactor;\r\n\r\n var fontSize = pdf.internal.getFontSize();\r\n var txtWidth =\r\n (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n var TextMetrics = function(options) {\r\n options = options || {};\r\n var _width = options.width || 0;\r\n Object.defineProperty(this, \"width\", {\r\n get: function() {\r\n return _width;\r\n }\r\n });\r\n return this;\r\n };\r\n return new TextMetrics({ width: txtWidth });\r\n };\r\n\r\n //Transformations\r\n\r\n /**\r\n * Scales the current drawing bigger or smaller\r\n *\r\n * @name scale\r\n * @function\r\n * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @description The scale() method scales the current drawing, bigger or smaller.\r\n */\r\n Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n }\r\n var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Rotates the current drawing\r\n *\r\n * @name rotate\r\n * @function\r\n * @param angle {Number} The rotation angle, in radians.\r\n * @description To calculate from degrees to radians: degrees*Math.PI/180.
    \r\n * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n */\r\n Context2D.prototype.rotate = function(angle) {\r\n if (isNaN(angle)) {\r\n console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n }\r\n var matrix = new Matrix(\r\n Math.cos(angle),\r\n Math.sin(angle),\r\n -Math.sin(angle),\r\n Math.cos(angle),\r\n 0.0,\r\n 0.0\r\n );\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Remaps the (0,0) position on the canvas\r\n *\r\n * @name translate\r\n * @function\r\n * @param x {Number} The value to add to horizontal (x) coordinates\r\n * @param y {Number} The value to add to vertical (y) coordinates\r\n * @description The translate() method remaps the (0,0) position on the canvas.\r\n */\r\n Context2D.prototype.translate = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n }\r\n var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Replaces the current transformation matrix for the drawing\r\n *\r\n * @name transform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n }\r\n var matrix = new Matrix(a, b, c, d, e, f);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Resets the current transform to the identity matrix. Then runs transform()\r\n *\r\n * @name setTransform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n a = isNaN(a) ? 1 : a;\r\n b = isNaN(b) ? 0 : b;\r\n c = isNaN(c) ? 0 : c;\r\n d = isNaN(d) ? 1 : d;\r\n e = isNaN(e) ? 0 : e;\r\n f = isNaN(f) ? 0 : f;\r\n this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n };\r\n\r\n /**\r\n * Should only be used if pageWrapYEnabled is true\r\n *\r\n * @name setPageByYPosition\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns One-based Page Number\r\n */\r\n var setPageByYPosition = function(y) {\r\n if (this.pageWrapYEnabled) {\r\n this.lastBreak = 0;\r\n var manualBreaks = 0;\r\n var autoBreaks = 0;\r\n for (var i = 0; i < this.pageBreaks.length; i++) {\r\n if (y >= this.pageBreaks[i]) {\r\n manualBreaks++;\r\n if (this.lastBreak === 0) {\r\n autoBreaks++;\r\n }\r\n var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n this.lastBreak = this.pageBreaks[i];\r\n var pagesSinceLastBreak = Math.floor(\r\n spaceBetweenLastBreak / this.pageWrapY\r\n );\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n }\r\n if (this.lastBreak === 0) {\r\n var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n return autoBreaks + manualBreaks;\r\n } else {\r\n return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n }\r\n };\r\n\r\n var hasMargins = function() {\r\n return (\r\n this.margin[0] > 0 ||\r\n this.margin[1] > 0 ||\r\n this.margin[2] > 0 ||\r\n this.margin[3] > 0\r\n );\r\n };\r\n\r\n /**\r\n * Draws an image, canvas, or video onto the canvas\r\n *\r\n * @function\r\n * @param img {} Specifies the image, canvas, or video element to use\r\n * @param sx {Number} Optional. The x coordinate where to start clipping\r\n * @param sy {Number} Optional. The y coordinate where to start clipping\r\n * @param swidth {Number} Optional. The width of the clipped image\r\n * @param sheight {Number} Optional. The height of the clipped image\r\n * @param x {Number} The x coordinate where to place the image on the canvas\r\n * @param y {Number} The y coordinate where to place the image on the canvas\r\n * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n */\r\n Context2D.prototype.drawImage = function(\r\n img,\r\n sx,\r\n sy,\r\n swidth,\r\n sheight,\r\n x,\r\n y,\r\n width,\r\n height\r\n ) {\r\n var imageProperties = this.pdf.getImageProperties(img);\r\n var factorX = 1;\r\n var factorY = 1;\r\n var isClip;\r\n\r\n var clipFactorX = 1;\r\n var clipFactorY = 1;\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n isClip = true;\r\n clipFactorX = width / swidth;\r\n clipFactorY = height / sheight;\r\n factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n }\r\n\r\n //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n if (typeof x === \"undefined\") {\r\n x = sx;\r\n y = sy;\r\n sx = 0;\r\n sy = 0;\r\n }\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n width = swidth;\r\n height = sheight;\r\n }\r\n if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n width = imageProperties.width;\r\n height = imageProperties.height;\r\n }\r\n\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n var xRect = matrix.applyToRectangle(\r\n new Rectangle(\r\n x - sx * clipFactorX,\r\n y - sy * clipFactorY,\r\n swidth * factorX,\r\n sheight * factorY\r\n )\r\n );\r\n var pageArray = getPagesByPath.call(this, xRect);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n tmpRect = pathPositionRedo(\r\n [tmpRect],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n tmpRect.x,\r\n tmpRect.y,\r\n tmpRect.w,\r\n tmpRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n xRect.x,\r\n xRect.y,\r\n xRect.w,\r\n xRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n }\r\n };\r\n\r\n var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n var result = [];\r\n pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n pageWrapY =\r\n pageWrapY ||\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n switch (path.type) {\r\n default:\r\n case \"mt\":\r\n case \"lt\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n break;\r\n case \"arc\":\r\n result.push(\r\n Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n );\r\n break;\r\n case \"qct\":\r\n var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"bct\":\r\n var rectOfBezierCurve = getBezierCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x2,\r\n path.y2,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"rect\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n }\r\n\r\n for (var i = 0; i < result.length; i += 1) {\r\n while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n addPage.call(this);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var addPage = function() {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var font = this.font;\r\n var lineCap = this.lineCap;\r\n var lineWidth = this.lineWidth;\r\n var lineJoin = this.lineJoin;\r\n this.pdf.addPage();\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.font = font;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n };\r\n\r\n var pathPositionRedo = function(paths, x, y) {\r\n for (var i = 0; i < paths.length; i++) {\r\n switch (paths[i].type) {\r\n case \"bct\":\r\n paths[i].x2 += x;\r\n paths[i].y2 += y;\r\n case \"qct\":\r\n paths[i].x1 += x;\r\n paths[i].y1 += y;\r\n case \"mt\":\r\n case \"lt\":\r\n case \"arc\":\r\n default:\r\n paths[i].x += x;\r\n paths[i].y += y;\r\n }\r\n }\r\n return paths;\r\n };\r\n\r\n var sortPages = function(pages) {\r\n return pages.sort(function(a, b) {\r\n return a - b;\r\n });\r\n };\r\n\r\n var pathPreProcess = function(rule, isClip) {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var lineCap = this.lineCap;\r\n var oldLineWidth = this.lineWidth;\r\n var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n var lineJoin = this.lineJoin;\r\n\r\n var origPath = JSON.parse(JSON.stringify(this.path));\r\n var xPath = JSON.parse(JSON.stringify(this.path));\r\n var clipPath;\r\n var tmpPath;\r\n var pages = [];\r\n\r\n for (var i = 0; i < xPath.length; i++) {\r\n if (typeof xPath[i].x !== \"undefined\") {\r\n var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n for (var ii = 0; ii < page.length; ii += 1) {\r\n if (pages.indexOf(page[ii]) === -1) {\r\n pages.push(page[ii]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var j = 0; j < pages.length; j++) {\r\n while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n addPage.call(this);\r\n }\r\n }\r\n sortPages(pages);\r\n\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var k = min; k < max + 1; k++) {\r\n this.pdf.setPage(k);\r\n\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, rule, true);\r\n this.path = tmpPaths;\r\n }\r\n tmpPath = JSON.parse(JSON.stringify(origPath));\r\n this.path = pathPositionRedo(\r\n tmpPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n if (isClip === false || k === 0) {\r\n const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n drawPaths.call(this, rule, isClip);\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n this.lineWidth = oldLineWidth;\r\n }\r\n } else {\r\n this.lineWidth = lineWidth;\r\n drawPaths.call(this, rule, isClip);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n this.path = origPath;\r\n };\r\n\r\n /**\r\n * Processes the paths\r\n *\r\n * @function\r\n * @param rule {String}\r\n * @param isClip {Boolean}\r\n * @private\r\n * @ignore\r\n */\r\n var drawPaths = function(rule, isClip) {\r\n if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var moves = [];\r\n\r\n //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n var delta;\r\n var xPath = this.path;\r\n for (var i = 0; i < xPath.length; i++) {\r\n var pt = xPath[i];\r\n\r\n switch (pt.type) {\r\n case \"begin\":\r\n moves.push({\r\n begin: true\r\n });\r\n break;\r\n\r\n case \"close\":\r\n moves.push({\r\n close: true\r\n });\r\n break;\r\n\r\n case \"mt\":\r\n moves.push({\r\n start: pt,\r\n deltas: [],\r\n abs: []\r\n });\r\n break;\r\n\r\n case \"lt\":\r\n var iii = moves.length;\r\n if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n if (iii > 0) {\r\n for (iii; iii >= 0; iii--) {\r\n if (\r\n moves[iii - 1].close !== true &&\r\n moves[iii - 1].begin !== true\r\n ) {\r\n moves[iii - 1].deltas.push(delta);\r\n moves[iii - 1].abs.push(pt);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"bct\":\r\n delta = [\r\n pt.x1 - xPath[i - 1].x,\r\n pt.y1 - xPath[i - 1].y,\r\n pt.x2 - xPath[i - 1].x,\r\n pt.y2 - xPath[i - 1].y,\r\n pt.x - xPath[i - 1].x,\r\n pt.y - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"qct\":\r\n var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n var x3 = pt.x;\r\n var y3 = pt.y;\r\n delta = [\r\n x1 - xPath[i - 1].x,\r\n y1 - xPath[i - 1].y,\r\n x2 - xPath[i - 1].x,\r\n y2 - xPath[i - 1].y,\r\n x3 - xPath[i - 1].x,\r\n y3 - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"arc\":\r\n moves.push({\r\n deltas: [],\r\n abs: [],\r\n arc: true\r\n });\r\n\r\n if (Array.isArray(moves[moves.length - 1].abs)) {\r\n moves[moves.length - 1].abs.push(pt);\r\n }\r\n break;\r\n }\r\n }\r\n var style;\r\n if (!isClip) {\r\n if (rule === \"stroke\") {\r\n style = \"stroke\";\r\n } else {\r\n style = \"fill\";\r\n }\r\n } else {\r\n style = null;\r\n }\r\n\r\n var began = false;\r\n for (var k = 0; k < moves.length; k++) {\r\n if (moves[k].arc) {\r\n var arcs = moves[k].abs;\r\n\r\n for (var ii = 0; ii < arcs.length; ii++) {\r\n var arc = arcs[ii];\r\n\r\n if (arc.type === \"arc\") {\r\n drawArc.call(\r\n this,\r\n arc.x,\r\n arc.y,\r\n arc.radius,\r\n arc.startAngle,\r\n arc.endAngle,\r\n arc.counterclockwise,\r\n undefined,\r\n isClip,\r\n !began\r\n );\r\n } else {\r\n drawLine.call(this, arc.x, arc.y);\r\n }\r\n began = true;\r\n }\r\n } else if (moves[k].close === true) {\r\n this.pdf.internal.out(\"h\");\r\n began = false;\r\n } else if (moves[k].begin !== true) {\r\n var x = moves[k].start.x;\r\n var y = moves[k].start.y;\r\n drawLines.call(this, moves[k].deltas, x, y);\r\n began = true;\r\n }\r\n }\r\n\r\n if (style) {\r\n putStyle.call(this, style);\r\n }\r\n if (isClip) {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var getBaseline = function(y) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n switch (this.ctx.textBaseline) {\r\n case \"bottom\":\r\n return y - descent;\r\n case \"top\":\r\n return y + height - descent;\r\n case \"hanging\":\r\n return y + height - 2 * descent;\r\n case \"middle\":\r\n return y + height / 2 - descent;\r\n case \"ideographic\":\r\n // TODO not implemented\r\n return y;\r\n case \"alphabetic\":\r\n default:\r\n return y;\r\n }\r\n };\r\n\r\n var getTextBottom = function(yBaseLine) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n return yBaseLine + descent;\r\n };\r\n\r\n Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n var canvasGradient = function canvasGradient() {};\r\n\r\n canvasGradient.colorStops = [];\r\n canvasGradient.addColorStop = function(offset, color) {\r\n this.colorStops.push([offset, color]);\r\n };\r\n\r\n canvasGradient.getColor = function() {\r\n if (this.colorStops.length === 0) {\r\n return \"#000000\";\r\n }\r\n\r\n return this.colorStops[0][1];\r\n };\r\n\r\n canvasGradient.isCanvasGradient = true;\r\n return canvasGradient;\r\n };\r\n Context2D.prototype.createPattern = function createPattern() {\r\n return this.createLinearGradient();\r\n };\r\n Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n return this.createLinearGradient();\r\n };\r\n\r\n /**\r\n *\r\n * @param x Edge point X\r\n * @param y Edge point Y\r\n * @param r Radius\r\n * @param a1 start angle\r\n * @param a2 end angle\r\n * @param counterclockwise\r\n * @param style\r\n * @param isClip\r\n */\r\n var drawArc = function(\r\n x,\r\n y,\r\n r,\r\n a1,\r\n a2,\r\n counterclockwise,\r\n style,\r\n isClip,\r\n includeMove\r\n ) {\r\n // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n for (var i = 0; i < curves.length; i++) {\r\n var curve = curves[i];\r\n if (i === 0) {\r\n if (includeMove) {\r\n doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n } else {\r\n drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n }\r\n }\r\n drawCurve.call(\r\n this,\r\n x,\r\n y,\r\n curve.x2,\r\n curve.y2,\r\n curve.x3,\r\n curve.y3,\r\n curve.x4,\r\n curve.y4\r\n );\r\n }\r\n\r\n if (!isClip) {\r\n putStyle.call(this, style);\r\n } else {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n switch (style) {\r\n case \"stroke\":\r\n this.pdf.internal.out(\"S\");\r\n break;\r\n case \"fill\":\r\n this.pdf.internal.out(\"f\");\r\n break;\r\n }\r\n };\r\n\r\n var doClip = function() {\r\n this.pdf.clip();\r\n this.pdf.discardPath();\r\n };\r\n\r\n var doMove = function(x, y) {\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x) +\r\n \" \" +\r\n getVerticalCoordinateString(y) +\r\n \" m\"\r\n );\r\n };\r\n\r\n var putText = function(options) {\r\n var textAlign;\r\n switch (options.align) {\r\n case \"right\":\r\n case \"end\":\r\n textAlign = \"right\";\r\n break;\r\n case \"center\":\r\n textAlign = \"center\";\r\n break;\r\n case \"left\":\r\n case \"start\":\r\n default:\r\n textAlign = \"left\";\r\n break;\r\n }\r\n\r\n var textDimensions = this.pdf.getTextDimensions(options.text);\r\n var yBaseLine = getBaseline.call(this, options.y);\r\n var yBottom = getTextBottom.call(this, yBaseLine);\r\n var yTop = yBottom - textDimensions.h;\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n var baselineRect = this.ctx.transform.applyToRectangle(\r\n new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n );\r\n var textBounds = matrix.applyToRectangle(\r\n new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n );\r\n var pageArray = getPagesByPath.call(this, textBounds);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath, oldSize, oldLineWidth;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusBottomMargin =\r\n this.pdf.internal.pageSize.height - this.margin[2];\r\n var pageHeightMinusMargins =\r\n pageHeightMinusBottomMargin - this.margin[0];\r\n var pageWidthMinusRightMargin =\r\n this.pdf.internal.pageSize.width - this.margin[1];\r\n var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -1 * previousPageHeightSum + topMargin\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var textBoundsOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(textBounds))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n\r\n var doSlice = this.autoPaging !== \"text\";\r\n\r\n if (\r\n doSlice ||\r\n textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n ) {\r\n if (\r\n doSlice ||\r\n (textBoundsOnPage.y >= topMargin &&\r\n textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n ) {\r\n var croppedText = doSlice\r\n ? options.text\r\n : this.pdf.splitTextToSize(\r\n options.text,\r\n options.maxWidth ||\r\n pageWidthMinusRightMargin - textBoundsOnPage.x\r\n )[0];\r\n var baseLineRectOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(baselineRect))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum +\r\n topMargin +\r\n this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping =\r\n doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n\r\n this.pdf.text(\r\n croppedText,\r\n baseLineRectOnPage.x,\r\n baseLineRectOnPage.y,\r\n {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode\r\n }\r\n );\r\n\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n // This text is the last element of the page, but it got cut off due to the margin\r\n // so we render it in the next page\r\n\r\n if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n // As a result, all other elements have their y offset increased\r\n this.ctx.prevPageLastElemOffset +=\r\n pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n }\r\n }\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n } else {\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode,\r\n maxWidth: options.maxWidth\r\n });\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n };\r\n\r\n var drawLine = function(x, y, prevX, prevY) {\r\n prevX = prevX || 0;\r\n prevY = prevY || 0;\r\n\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x + prevX) +\r\n \" \" +\r\n getVerticalCoordinateString(y + prevY) +\r\n \" l\"\r\n );\r\n };\r\n\r\n var drawLines = function(lines, x, y) {\r\n return this.pdf.lines(lines, x, y, null, null);\r\n };\r\n\r\n var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n this.pdf.internal.out(\r\n [\r\n f2(getHorizontalCoordinate(x1 + x)),\r\n f2(getVerticalCoordinate(y1 + y)),\r\n f2(getHorizontalCoordinate(x2 + x)),\r\n f2(getVerticalCoordinate(y2 + y)),\r\n f2(getHorizontalCoordinate(x3 + x)),\r\n f2(getVerticalCoordinate(y3 + y)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n };\r\n\r\n /**\r\n * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n *\r\n * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n * @function createArc\r\n */\r\n var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n var twoPi = Math.PI * 2;\r\n var halfPi = Math.PI / 2.0;\r\n\r\n while (startAngle > endAngle) {\r\n startAngle = startAngle - twoPi;\r\n }\r\n var totalAngle = Math.abs(endAngle - startAngle);\r\n if (totalAngle < twoPi) {\r\n if (anticlockwise) {\r\n totalAngle = twoPi - totalAngle;\r\n }\r\n }\r\n\r\n // Compute the sequence of arc curves, up to PI/2 at a time.\r\n var curves = [];\r\n\r\n // clockwise or counterclockwise\r\n var sgn = anticlockwise ? -1 : +1;\r\n\r\n var a1 = startAngle;\r\n for (; totalAngle > EPSILON; ) {\r\n var remain = sgn * Math.min(totalAngle, halfPi);\r\n var a2 = a1 + remain;\r\n curves.push(createSmallArc.call(this, radius, a1, a2));\r\n totalAngle -= Math.abs(a2 - a1);\r\n a1 = a2;\r\n }\r\n\r\n return curves;\r\n };\r\n\r\n /**\r\n * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n *\r\n * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n *\r\n * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n */\r\n var createSmallArc = function(r, a1, a2) {\r\n var a = (a2 - a1) / 2.0;\r\n\r\n var x4 = r * Math.cos(a);\r\n var y4 = r * Math.sin(a);\r\n var x1 = x4;\r\n var y1 = -y4;\r\n\r\n var q1 = x1 * x1 + y1 * y1;\r\n var q2 = q1 + x1 * x4 + y1 * y4;\r\n var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n var x2 = x1 - k2 * y1;\r\n var y2 = y1 + k2 * x1;\r\n var x3 = x2;\r\n var y3 = -y2;\r\n\r\n var ar = a + a1;\r\n var cos_ar = Math.cos(ar);\r\n var sin_ar = Math.sin(ar);\r\n\r\n return {\r\n x1: r * Math.cos(a1),\r\n y1: r * Math.sin(a1),\r\n x2: x2 * cos_ar - y2 * sin_ar,\r\n y2: x2 * sin_ar + y2 * cos_ar,\r\n x3: x3 * cos_ar - y3 * sin_ar,\r\n y3: x3 * sin_ar + y3 * cos_ar,\r\n x4: r * Math.cos(a2),\r\n y4: r * Math.sin(a2)\r\n };\r\n };\r\n\r\n var rad2deg = function(value) {\r\n return (value * 180) / Math.PI;\r\n };\r\n\r\n var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n var midX1 = sx + (cpx - sx) * 0.5;\r\n var midY1 = sy + (cpy - sy) * 0.5;\r\n var midX2 = ex + (cpx - ex) * 0.5;\r\n var midY2 = ey + (cpy - ey) * 0.5;\r\n var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n return new Rectangle(\r\n resultX1,\r\n resultY1,\r\n resultX2 - resultX1,\r\n resultY2 - resultY1\r\n );\r\n };\r\n\r\n //De Casteljau algorithm\r\n var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n var tobx = bx - ax;\r\n var toby = by - ay;\r\n var tocx = cx - bx;\r\n var tocy = cy - by;\r\n var todx = dx - cx;\r\n var tody = dy - cy;\r\n var precision = 40;\r\n var d,\r\n i,\r\n px,\r\n py,\r\n qx,\r\n qy,\r\n rx,\r\n ry,\r\n tx,\r\n ty,\r\n sx,\r\n sy,\r\n x,\r\n y,\r\n minx,\r\n miny,\r\n maxx,\r\n maxy,\r\n toqx,\r\n toqy,\r\n torx,\r\n tory,\r\n totx,\r\n toty;\r\n for (i = 0; i < precision + 1; i++) {\r\n d = i / precision;\r\n px = ax + d * tobx;\r\n py = ay + d * toby;\r\n qx = bx + d * tocx;\r\n qy = by + d * tocy;\r\n rx = cx + d * todx;\r\n ry = cy + d * tody;\r\n toqx = qx - px;\r\n toqy = qy - py;\r\n torx = rx - qx;\r\n tory = ry - qy;\r\n\r\n sx = px + d * toqx;\r\n sy = py + d * toqy;\r\n tx = qx + d * torx;\r\n ty = qy + d * tory;\r\n totx = tx - sx;\r\n toty = ty - sy;\r\n\r\n x = sx + d * totx;\r\n y = sy + d * toty;\r\n if (i == 0) {\r\n minx = x;\r\n miny = y;\r\n maxx = x;\r\n maxy = y;\r\n } else {\r\n minx = Math.min(minx, x);\r\n miny = Math.min(miny, y);\r\n maxx = Math.max(maxx, x);\r\n maxy = Math.max(maxy, y);\r\n }\r\n }\r\n return new Rectangle(\r\n Math.round(minx),\r\n Math.round(miny),\r\n Math.round(maxx - minx),\r\n Math.round(maxy - miny)\r\n );\r\n };\r\n\r\n var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n return JSON.stringify({\r\n lineDash: lineDash,\r\n lineDashOffset: lineDashOffset\r\n });\r\n };\r\n\r\n var setLineDash = function() {\r\n // Avoid unnecessary line dash declarations.\r\n if (\r\n !this.prevLineDash &&\r\n !this.ctx.lineDash.length &&\r\n !this.ctx.lineDashOffset\r\n ) {\r\n return;\r\n }\r\n\r\n // Avoid unnecessary line dash declarations.\r\n const nextLineDash = getPrevLineDashValue(\r\n this.ctx.lineDash,\r\n this.ctx.lineDashOffset\r\n );\r\n if (this.prevLineDash !== nextLineDash) {\r\n this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n this.prevLineDash = nextLineDash;\r\n }\r\n };\r\n})(jsPDF.API);\r\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var ASCII85Encode = function(a) {\n var b, c, d, e, f, g, h, i, j, k;\n // eslint-disable-next-line no-control-regex\n for (\n !/[^\\x00-\\xFF]/.test(a),\n b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n a += b,\n c = [],\n d = 0,\n e = a.length;\n e > d;\n d += 4\n )\n (f =\n (a.charCodeAt(d) << 24) +\n (a.charCodeAt(d + 1) << 16) +\n (a.charCodeAt(d + 2) << 8) +\n a.charCodeAt(d + 3)),\n 0 !== f\n ? ((k = f % 85),\n (f = (f - k) / 85),\n (j = f % 85),\n (f = (f - j) / 85),\n (i = f % 85),\n (f = (f - i) / 85),\n (h = f % 85),\n (f = (f - h) / 85),\n (g = f % 85),\n c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n : c.push(122);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(c, b.length),\n String.fromCharCode.apply(String, c) + \"~>\"\n );\n };\n\n var ASCII85Decode = function(a) {\n var c,\n d,\n e,\n f,\n g,\n h = String,\n l = \"length\",\n w = 255,\n x = \"charCodeAt\",\n y = \"slice\",\n z = \"replace\";\n for (\n \"~>\" === a[y](-2),\n a = a[y](0, -2)\n [z](/\\s/g, \"\")\n [z](\"z\", \"!!!!!\"),\n c = \"uuuuu\"[y](a[l] % 5 || 5),\n a += c,\n e = [],\n f = 0,\n g = a[l];\n g > f;\n f += 5\n )\n (d =\n 52200625 * (a[x](f) - 33) +\n 614125 * (a[x](f + 1) - 33) +\n 7225 * (a[x](f + 2) - 33) +\n 85 * (a[x](f + 3) - 33) +\n (a[x](f + 4) - 33)),\n e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(e, c[l]),\n h.fromCharCode.apply(h, e)\n );\n };\n\n var ASCIIHexEncode = function(value) {\n return (\n value\n .split(\"\")\n .map(function(value) {\n return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n })\n .join(\"\") + \">\"\n );\n };\n\n var ASCIIHexDecode = function(value) {\n var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n value = value.replace(/\\s/g, \"\");\n if (value.indexOf(\">\") !== -1) {\n value = value.substr(0, value.indexOf(\">\"));\n }\n if (value.length % 2) {\n value += \"0\";\n }\n if (regexCheckIfHex.test(value) === false) {\n return \"\";\n }\n var result = \"\";\n for (var i = 0; i < value.length; i += 2) {\n result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n }\n return result;\n };\n /*\n var FlatePredictors = {\n None: 1,\n TIFF: 2,\n PNG_None: 10,\n PNG_Sub: 11,\n PNG_Up: 12,\n PNG_Average: 13,\n PNG_Paeth: 14,\n PNG_Optimum: 15\n };\n */\n\n var FlateEncode = function(data) {\n var arr = new Uint8Array(data.length);\n var i = data.length;\n while (i--) {\n arr[i] = data.charCodeAt(i);\n }\n arr = zlibSync(arr);\n data = arr.reduce(function(data, byte) {\n return data + String.fromCharCode(byte);\n }, \"\");\n return data;\n };\n\n jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n \"use strict\";\n var i = 0;\n var data = origData || \"\";\n var reverseChain = [];\n filterChain = filterChain || [];\n\n if (typeof filterChain === \"string\") {\n filterChain = [filterChain];\n }\n\n for (i = 0; i < filterChain.length; i += 1) {\n switch (filterChain[i]) {\n case \"ASCII85Decode\":\n case \"/ASCII85Decode\":\n data = ASCII85Decode(data);\n reverseChain.push(\"/ASCII85Encode\");\n break;\n case \"ASCII85Encode\":\n case \"/ASCII85Encode\":\n data = ASCII85Encode(data);\n reverseChain.push(\"/ASCII85Decode\");\n break;\n case \"ASCIIHexDecode\":\n case \"/ASCIIHexDecode\":\n data = ASCIIHexDecode(data);\n reverseChain.push(\"/ASCIIHexEncode\");\n break;\n case \"ASCIIHexEncode\":\n case \"/ASCIIHexEncode\":\n data = ASCIIHexEncode(data);\n reverseChain.push(\"/ASCIIHexDecode\");\n break;\n case \"FlateEncode\":\n case \"/FlateEncode\":\n data = FlateEncode(data);\n reverseChain.push(\"/FlateDecode\");\n break;\n default:\n throw new Error(\n 'The filter: \"' + filterChain[i] + '\" is not implemented'\n );\n }\n }\n\n return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name loadFile\n * @function\n * @param {string} url\n * @param {boolean} sync\n * @param {function} callback\n * @returns {string|undefined} result\n */\n jsPDFAPI.loadFile = function(url, sync, callback) {\n return browserRequest(url, sync, callback);\n\n };\n\n /**\n * @name loadImageFile\n * @function\n * @param {string} path\n * @param {boolean} sync\n * @param {function} callback\n */\n jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n function browserRequest(url, sync, callback) {\n sync = sync === false ? false : true;\n callback = typeof callback === \"function\" ? callback : function() {};\n var result = undefined;\n\n var xhr = function(url, sync, callback) {\n var request = new XMLHttpRequest();\n var i = 0;\n\n var sanitizeUnicode = function(data) {\n var dataLength = data.length;\n var charArray = [];\n var StringFromCharCode = String.fromCharCode;\n\n //Transform Unicode to ASCII\n for (i = 0; i < dataLength; i += 1) {\n charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n }\n return charArray.join(\"\");\n };\n\n request.open(\"GET\", url, !sync);\n // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n if (sync === false) {\n request.onload = function() {\n if (request.status === 200) {\n callback(sanitizeUnicode(this.responseText));\n } else {\n callback(undefined);\n }\n };\n }\n request.send(null);\n\n if (sync && request.status === 200) {\n return sanitizeUnicode(request.responseText);\n }\n };\n try {\n result = xhr(url, sync, callback);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return result;\n }\n\n function nodeReadFile(url, sync, callback) {\n sync = sync === false ? false : true;\n var result = undefined;\n\n var fs = require(\"fs\");\n var path = require(\"path\");\n\n url = path.resolve(url);\n if (sync) {\n try {\n result = fs.readFileSync(url, { encoding: \"latin1\" });\n } catch (e) {\n return undefined;\n }\n } else {\n fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n if (!callback) {\n return;\n }\n if (err) {\n callback(undefined);\n }\n callback(data);\n });\n }\n\n return result;\n }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadHtml2Canvas() {\n return (function() {\n if (globalObject[\"html2canvas\"]) {\n return Promise.resolve(globalObject[\"html2canvas\"]);\n }\n\n return import(\"html2canvas\");\n\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n })\n .then(function(html2canvas) {\n return html2canvas.default ? html2canvas.default : html2canvas;\n });\n }\n\n function loadDomPurify() {\n return (function() {\n if (globalObject[\"DOMPurify\"]) {\n return Promise.resolve(globalObject[\"DOMPurify\"]);\n }\n\n return import(\"dompurify\");\n\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n })\n .then(function(dompurify) {\n return dompurify.default ? dompurify.default : dompurify;\n });\n }\n\n /**\n * Determine the type of a variable/object.\n *\n * @private\n * @ignore\n */\n var objType = function(obj) {\n var type = typeof obj;\n if (type === \"undefined\") return \"undefined\";\n else if (type === \"string\" || obj instanceof String) return \"string\";\n else if (type === \"number\" || obj instanceof Number) return \"number\";\n else if (type === \"function\" || obj instanceof Function) return \"function\";\n else if (!!obj && obj.constructor === Array) return \"array\";\n else if (obj && obj.nodeType === 1) return \"element\";\n else if (type === \"object\") return \"object\";\n else return \"unknown\";\n };\n\n /**\n * Create an HTML element with optional className, innerHTML, and style.\n *\n * @private\n * @ignore\n */\n var createElement = function(tagName, opt) {\n var el = document.createElement(tagName);\n if (opt.className) el.className = opt.className;\n if (opt.innerHTML && opt.dompurify) {\n el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n }\n for (var key in opt.style) {\n el.style[key] = opt.style[key];\n }\n return el;\n };\n\n /**\n * Deep-clone a node and preserve contents/properties.\n *\n * @private\n * @ignore\n */\n var cloneNode = function(node, javascriptEnabled) {\n // Recursively clone the node.\n var clone =\n node.nodeType === 3\n ? document.createTextNode(node.nodeValue)\n : node.cloneNode(false);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (\n javascriptEnabled === true ||\n child.nodeType !== 1 ||\n child.nodeName !== \"SCRIPT\"\n ) {\n clone.appendChild(cloneNode(child, javascriptEnabled));\n }\n }\n\n if (node.nodeType === 1) {\n // Preserve contents/properties of special nodes.\n if (node.nodeName === \"CANVAS\") {\n clone.width = node.width;\n clone.height = node.height;\n clone.getContext(\"2d\").drawImage(node, 0, 0);\n } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n clone.value = node.value;\n }\n\n // Preserve the node's scroll position when it loads.\n clone.addEventListener(\n \"load\",\n function() {\n clone.scrollTop = node.scrollTop;\n clone.scrollLeft = node.scrollLeft;\n },\n true\n );\n }\n\n // Return the cloned node.\n return clone;\n };\n\n /* ----- CONSTRUCTOR ----- */\n\n var Worker = function Worker(opt) {\n // Create the root parent for the proto chain, and the starting Worker.\n var root = Object.assign(\n Worker.convert(Promise.resolve()),\n JSON.parse(JSON.stringify(Worker.template))\n );\n var self = Worker.convert(Promise.resolve(), root);\n\n // Set progress, optional settings, and return.\n self = self.setProgress(1, Worker, 1, [Worker]);\n self = self.set(opt);\n return self;\n };\n\n // Boilerplate for subclassing Promise.\n Worker.prototype = Object.create(Promise.prototype);\n Worker.prototype.constructor = Worker;\n\n // Converts/casts promises into Workers.\n Worker.convert = function convert(promise, inherit) {\n // Uses prototypal inheritance to receive changes made to ancestors' properties.\n promise.__proto__ = inherit || Worker.prototype;\n return promise;\n };\n\n Worker.template = {\n prop: {\n src: null,\n container: null,\n overlay: null,\n canvas: null,\n img: null,\n pdf: null,\n pageSize: null,\n callback: function() {}\n },\n progress: {\n val: 0,\n state: null,\n n: 0,\n stack: []\n },\n opt: {\n filename: \"file.pdf\",\n margin: [0, 0, 0, 0],\n enableLinks: true,\n x: 0,\n y: 0,\n html2canvas: {},\n jsPDF: {},\n backgroundColor: \"transparent\"\n }\n };\n\n /* ----- FROM / TO ----- */\n\n Worker.prototype.from = function from(src, type) {\n function getType(src) {\n switch (objType(src)) {\n case \"string\":\n return \"string\";\n case \"element\":\n return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n default:\n return \"unknown\";\n }\n }\n\n return this.then(function from_main() {\n type = type || getType(src);\n switch (type) {\n case \"string\":\n return this.then(loadDomPurify).then(function(dompurify) {\n return this.set({\n src: createElement(\"div\", {\n innerHTML: src,\n dompurify: dompurify\n })\n });\n });\n case \"element\":\n return this.set({ src: src });\n case \"canvas\":\n return this.set({ canvas: src });\n case \"img\":\n return this.set({ img: src });\n default:\n return this.error(\"Unknown source type.\");\n }\n });\n };\n\n Worker.prototype.to = function to(target) {\n // Route the 'to' request to the appropriate method.\n switch (target) {\n case \"container\":\n return this.toContainer();\n case \"canvas\":\n return this.toCanvas();\n case \"img\":\n return this.toImg();\n case \"pdf\":\n return this.toPdf();\n default:\n return this.error(\"Invalid target.\");\n }\n };\n\n Worker.prototype.toContainer = function toContainer() {\n // Set up function prerequisites.\n var prereqs = [\n function checkSrc() {\n return (\n this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n );\n },\n function checkPageSize() {\n return this.prop.pageSize || this.setPageSize();\n }\n ];\n return this.thenList(prereqs).then(function toContainer_main() {\n // Define the CSS styles for the container and its overlay parent.\n var overlayCSS = {\n position: \"fixed\",\n overflow: \"hidden\",\n zIndex: 1000,\n left: \"-100000px\",\n right: 0,\n bottom: 0,\n top: 0\n };\n var containerCSS = {\n position: \"relative\",\n display: \"inline-block\",\n width:\n (typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.windowWidth\n : Math.max(\n this.prop.src.clientWidth,\n this.prop.src.scrollWidth,\n this.prop.src.offsetWidth\n )) + \"px\",\n left: 0,\n right: 0,\n top: 0,\n margin: \"auto\",\n backgroundColor: this.opt.backgroundColor\n }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n var source = cloneNode(\n this.prop.src,\n this.opt.html2canvas.javascriptEnabled\n );\n\n if (source.tagName === \"BODY\") {\n containerCSS.height =\n Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) + \"px\";\n }\n\n this.prop.overlay = createElement(\"div\", {\n className: \"html2pdf__overlay\",\n style: overlayCSS\n });\n this.prop.container = createElement(\"div\", {\n className: \"html2pdf__container\",\n style: containerCSS\n });\n this.prop.container.appendChild(source);\n this.prop.container.firstChild.appendChild(\n createElement(\"div\", {\n style: {\n clear: \"both\",\n border: \"0 none transparent\",\n margin: 0,\n padding: 0,\n height: 0\n }\n })\n );\n this.prop.container.style.float = \"none\";\n this.prop.overlay.appendChild(this.prop.container);\n document.body.appendChild(this.prop.overlay);\n this.prop.container.firstChild.style.position = \"relative\";\n this.prop.container.height =\n Math.max(\n this.prop.container.firstChild.clientHeight,\n this.prop.container.firstChild.scrollHeight,\n this.prop.container.firstChild.offsetHeight\n ) + \"px\";\n });\n };\n\n Worker.prototype.toCanvas = function toCanvas() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toCanvas_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var options = Object.assign({}, this.opt.html2canvas);\n delete options.onrendered;\n\n return html2canvas(this.prop.container, options);\n })\n .then(function toCanvas_post(canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toContext2d = function toContext2d() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toContext2d_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n\n var pdf = this.opt.jsPDF;\n var fontFaces = this.opt.fontFaces;\n\n var scale =\n typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.width / this.opt.windowWidth\n : 1;\n\n var options = Object.assign(\n {\n async: true,\n allowTaint: true,\n scale: scale,\n scrollX: this.opt.scrollX || 0,\n scrollY: this.opt.scrollY || 0,\n backgroundColor: \"#ffffff\",\n imageTimeout: 15000,\n logging: true,\n proxy: null,\n removeContainer: true,\n foreignObjectRendering: false,\n useCORS: false\n },\n this.opt.html2canvas\n );\n delete options.onrendered;\n\n pdf.context2d.autoPaging =\n typeof this.opt.autoPaging === \"undefined\"\n ? true\n : this.opt.autoPaging;\n pdf.context2d.posX = this.opt.x;\n pdf.context2d.posY = this.opt.y;\n pdf.context2d.margin = this.opt.margin;\n pdf.context2d.fontFaces = fontFaces;\n\n if (fontFaces) {\n for (var i = 0; i < fontFaces.length; ++i) {\n var font = fontFaces[i];\n var src = font.src.find(function(src) {\n return src.format === \"truetype\";\n });\n\n if (src) {\n pdf.addFont(src.url, font.ref.name, font.ref.style);\n }\n }\n }\n\n options.windowHeight = options.windowHeight || 0;\n options.windowHeight =\n options.windowHeight == 0\n ? Math.max(\n this.prop.container.clientHeight,\n this.prop.container.scrollHeight,\n this.prop.container.offsetHeight\n )\n : options.windowHeight;\n\n pdf.context2d.save(true);\n return html2canvas(this.prop.container, options);\n })\n .then(function toContext2d_post(canvas) {\n this.opt.jsPDF.context2d.restore(true);\n\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toImg = function toImg() {\n // Set up function prerequisites.\n var prereqs = [\n function checkCanvas() {\n return this.prop.canvas || this.toCanvas();\n }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toImg_main() {\n var imgData = this.prop.canvas.toDataURL(\n \"image/\" + this.opt.image.type,\n this.opt.image.quality\n );\n this.prop.img = document.createElement(\"img\");\n this.prop.img.src = imgData;\n });\n };\n\n Worker.prototype.toPdf = function toPdf() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContext2d() {\n return this.toContext2d();\n }\n //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toPdf_main() {\n // Create local copies of frequently used properties.\n this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n });\n };\n\n /* ----- OUTPUT / SAVE ----- */\n\n Worker.prototype.output = function output(type, options, src) {\n // Redirect requests to the correct function (outputPdf / outputImg).\n src = src || \"pdf\";\n if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n return this.outputImg(type, options);\n } else {\n return this.outputPdf(type, options);\n }\n };\n\n Worker.prototype.outputPdf = function outputPdf(type, options) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputPdf_main() {\n /* Currently implemented output types:\n * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n * save(options), arraybuffer, blob, bloburi/bloburl,\n * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n */\n return this.prop.pdf.output(type, options);\n });\n };\n\n Worker.prototype.outputImg = function outputImg(type) {\n // Set up function prerequisites.\n var prereqs = [\n function checkImg() {\n return this.prop.img || this.toImg();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputImg_main() {\n switch (type) {\n case undefined:\n case \"img\":\n return this.prop.img;\n case \"datauristring\":\n case \"dataurlstring\":\n return this.prop.img.src;\n case \"datauri\":\n case \"dataurl\":\n return (document.location.href = this.prop.img.src);\n default:\n throw 'Image output type \"' + type + '\" is not supported.';\n }\n });\n };\n\n Worker.prototype.save = function save(filename) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs)\n .set(filename ? { filename: filename } : null)\n .then(function save_main() {\n this.prop.pdf.save(this.opt.filename);\n });\n };\n\n Worker.prototype.doCallback = function doCallback() {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs).then(function doCallback_main() {\n this.prop.callback(this.prop.pdf);\n });\n };\n\n /* ----- SET / GET ----- */\n\n Worker.prototype.set = function set(opt) {\n // TODO: Implement ordered pairs?\n\n // Silently ignore invalid or empty input.\n if (objType(opt) !== \"object\") {\n return this;\n }\n\n // Build an array of setter functions to queue.\n var fns = Object.keys(opt || {}).map(function(key) {\n if (key in Worker.template.prop) {\n // Set pre-defined properties.\n return function set_prop() {\n this.prop[key] = opt[key];\n };\n } else {\n switch (key) {\n case \"margin\":\n return this.setMargin.bind(this, opt.margin);\n case \"jsPDF\":\n return function set_jsPDF() {\n this.opt.jsPDF = opt.jsPDF;\n return this.setPageSize();\n };\n case \"pageSize\":\n return this.setPageSize.bind(this, opt.pageSize);\n default:\n // Set any other properties in opt.\n return function set_opt() {\n this.opt[key] = opt[key];\n };\n }\n }\n }, this);\n\n // Set properties within the promise chain.\n return this.then(function set_main() {\n return this.thenList(fns);\n });\n };\n\n Worker.prototype.get = function get(key, cbk) {\n return this.then(function get_main() {\n // Fetch the requested property, either as a predefined prop or in opt.\n var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n return cbk ? cbk(val) : val;\n });\n };\n\n Worker.prototype.setMargin = function setMargin(margin) {\n return this.then(function setMargin_main() {\n // Parse the margin property.\n switch (objType(margin)) {\n case \"number\":\n margin = [margin, margin, margin, margin];\n // eslint-disable-next-line no-fallthrough\n case \"array\":\n if (margin.length === 2) {\n margin = [margin[0], margin[1], margin[0], margin[1]];\n }\n if (margin.length === 4) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return this.error(\"Invalid margin array.\");\n }\n\n // Set the margin property, then update pageSize.\n this.opt.margin = margin;\n }).then(this.setPageSize);\n };\n\n Worker.prototype.setPageSize = function setPageSize(pageSize) {\n function toPx(val, k) {\n return Math.floor(((val * k) / 72) * 96);\n }\n\n return this.then(function setPageSize_main() {\n // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n // Add 'inner' field if not present.\n if (!pageSize.hasOwnProperty(\"inner\")) {\n pageSize.inner = {\n width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n };\n pageSize.inner.px = {\n width: toPx(pageSize.inner.width, pageSize.k),\n height: toPx(pageSize.inner.height, pageSize.k)\n };\n pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n }\n\n // Attach pageSize to this.\n this.prop.pageSize = pageSize;\n });\n };\n\n Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n // Immediately update all progress values.\n if (val != null) this.progress.val = val;\n if (state != null) this.progress.state = state;\n if (n != null) this.progress.n = n;\n if (stack != null) this.progress.stack = stack;\n this.progress.ratio = this.progress.val / this.progress.state;\n\n // Return this for command chaining.\n return this;\n };\n\n Worker.prototype.updateProgress = function updateProgress(\n val,\n state,\n n,\n stack\n ) {\n // Immediately update all progress values, using setProgress.\n return this.setProgress(\n val ? this.progress.val + val : null,\n state ? state : null,\n n ? this.progress.n + n : null,\n stack ? this.progress.stack.concat(stack) : null\n );\n };\n\n /* ----- PROMISE MAPPING ----- */\n\n Worker.prototype.then = function then(onFulfilled, onRejected) {\n // Wrap `this` for encapsulation.\n var self = this;\n\n return this.thenCore(onFulfilled, onRejected, function then_main(\n onFulfilled,\n onRejected\n ) {\n // Update progress while queuing, calling, and resolving `then`.\n self.updateProgress(null, null, 1, [onFulfilled]);\n return Promise.prototype.then\n .call(this, function then_pre(val) {\n self.updateProgress(null, onFulfilled);\n return val;\n })\n .then(onFulfilled, onRejected)\n .then(function then_post(val) {\n self.updateProgress(1);\n return val;\n });\n });\n };\n\n Worker.prototype.thenCore = function thenCore(\n onFulfilled,\n onRejected,\n thenBase\n ) {\n // Handle optional thenBase parameter.\n thenBase = thenBase || Promise.prototype.then;\n\n // Wrap `this` for encapsulation and bind it to the promise handlers.\n var self = this;\n if (onFulfilled) {\n onFulfilled = onFulfilled.bind(self);\n }\n if (onRejected) {\n onRejected = onRejected.bind(self);\n }\n\n // Cast self into a Promise to avoid polyfills recursively defining `then`.\n var isNative =\n Promise.toString().indexOf(\"[native code]\") !== -1 &&\n Promise.name === \"Promise\";\n var selfPromise = isNative\n ? self\n : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n // Return the promise, after casting it into a Worker and preserving props.\n var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n return Worker.convert(returnVal, self.__proto__);\n };\n\n Worker.prototype.thenExternal = function thenExternal(\n onFulfilled,\n onRejected\n ) {\n // Call `then` and return a standard promise (exits the Worker chain).\n return Promise.prototype.then.call(this, onFulfilled, onRejected);\n };\n\n Worker.prototype.thenList = function thenList(fns) {\n // Queue a series of promise 'factories' into the promise chain.\n var self = this;\n fns.forEach(function thenList_forEach(fn) {\n self = self.thenCore(fn);\n });\n return self;\n };\n\n Worker.prototype[\"catch\"] = function(onRejected) {\n // Bind `this` to the promise handler, call `catch`, and return a Worker.\n if (onRejected) {\n onRejected = onRejected.bind(this);\n }\n var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n return Worker.convert(returnVal, this);\n };\n\n Worker.prototype.catchExternal = function catchExternal(onRejected) {\n // Call `catch` and return a standard promise (exits the Worker chain).\n return Promise.prototype[\"catch\"].call(this, onRejected);\n };\n\n Worker.prototype.error = function error(msg) {\n // Throw the error in the Promise chain.\n return this.then(function error_main() {\n throw new Error(msg);\n });\n };\n\n /* ----- ALIASES ----- */\n\n Worker.prototype.using = Worker.prototype.set;\n Worker.prototype.saveAs = Worker.prototype.save;\n Worker.prototype.export = Worker.prototype.output;\n Worker.prototype.run = Worker.prototype.then;\n\n // Get dimensions of a PDF page, as determined by jsPDF.\n jsPDF.getPageSize = function(orientation, unit, format) {\n // Decode options object\n if (typeof orientation === \"object\") {\n var options = orientation;\n orientation = options.orientation;\n unit = options.unit || unit;\n format = options.format || format;\n }\n\n // Default options\n unit = unit || \"mm\";\n format = format || \"a4\";\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n var format_as_string = (\"\" + format).toLowerCase();\n\n // Size in pt of various paper formats\n var pageFormats = {\n a0: [2383.94, 3370.39],\n a1: [1683.78, 2383.94],\n a2: [1190.55, 1683.78],\n a3: [841.89, 1190.55],\n a4: [595.28, 841.89],\n a5: [419.53, 595.28],\n a6: [297.64, 419.53],\n a7: [209.76, 297.64],\n a8: [147.4, 209.76],\n a9: [104.88, 147.4],\n a10: [73.7, 104.88],\n b0: [2834.65, 4008.19],\n b1: [2004.09, 2834.65],\n b2: [1417.32, 2004.09],\n b3: [1000.63, 1417.32],\n b4: [708.66, 1000.63],\n b5: [498.9, 708.66],\n b6: [354.33, 498.9],\n b7: [249.45, 354.33],\n b8: [175.75, 249.45],\n b9: [124.72, 175.75],\n b10: [87.87, 124.72],\n c0: [2599.37, 3676.54],\n c1: [1836.85, 2599.37],\n c2: [1298.27, 1836.85],\n c3: [918.43, 1298.27],\n c4: [649.13, 918.43],\n c5: [459.21, 649.13],\n c6: [323.15, 459.21],\n c7: [229.61, 323.15],\n c8: [161.57, 229.61],\n c9: [113.39, 161.57],\n c10: [79.37, 113.39],\n dl: [311.81, 623.62],\n letter: [612, 792],\n \"government-letter\": [576, 756],\n legal: [612, 1008],\n \"junior-legal\": [576, 360],\n ledger: [1224, 792],\n tabloid: [792, 1224],\n \"credit-card\": [153, 243]\n };\n\n var k;\n // Unit conversion\n switch (unit) {\n case \"pt\":\n k = 1;\n break;\n case \"mm\":\n k = 72 / 25.4;\n break;\n case \"cm\":\n k = 72 / 2.54;\n break;\n case \"in\":\n k = 72;\n break;\n case \"px\":\n k = 72 / 96;\n break;\n case \"pc\":\n k = 12;\n break;\n case \"em\":\n k = 12;\n break;\n case \"ex\":\n k = 6;\n break;\n default:\n throw \"Invalid unit: \" + unit;\n }\n var pageHeight = 0;\n var pageWidth = 0;\n\n // Dimensions are stored as user units and converted to points on output\n if (pageFormats.hasOwnProperty(format_as_string)) {\n pageHeight = pageFormats[format_as_string][1] / k;\n pageWidth = pageFormats[format_as_string][0] / k;\n } else {\n try {\n pageHeight = format[1];\n pageWidth = format[0];\n } catch (err) {\n throw new Error(\"Invalid format: \" + format);\n }\n }\n\n var tmp;\n // Handle page orientation\n if (orientation === \"p\" || orientation === \"portrait\") {\n orientation = \"p\";\n if (pageWidth > pageHeight) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else if (orientation === \"l\" || orientation === \"landscape\") {\n orientation = \"l\";\n if (pageHeight > pageWidth) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else {\n throw \"Invalid orientation: \" + orientation;\n }\n\n // Return information (k is the unit conversion ratio from pts)\n var info = {\n width: pageWidth,\n height: pageHeight,\n unit: unit,\n k: k,\n orientation: orientation\n };\n return info;\n };\n\n /**\n * @typedef FontFace\n *\n * The font-face type implements an interface similar to that of the font-face CSS rule,\n * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n * is updated.\n *\n * All properties expect values similar to those in the font-face CSS rule. A difference\n * is the font-family, which do not need to be enclosed in double-quotes when containing\n * spaces like in CSS.\n *\n * @property {string} family The name of the font-family.\n * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n * @property {string} [src] url A URL to a font of a specific format.\n * @property {string} [src] format Format of the font referenced by the URL.\n */\n\n /**\n * Generate a PDF from an HTML element or string using.\n *\n * @name html\n * @function\n * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n * @param {Object} [options] Collection of settings\n * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n *
      \n *
    • \n * false: Auto paging is disabled.\n *
    • \n *
    • \n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\n * slice text in half, making it difficult to read.\n *
    • \n *
    • \n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\n * mostly of a single column of text.\n *
    • \n *
    \n * Default is true.\n * @param {string} [options.filename] name of the file\n * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n * @param {jsPDF} [options.jsPDF] jsPDF instance\n * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is\n * specified or the windowWidth option is NOT specified.\n * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n * html2canvas.windowWidth option, this option affects the actual container size while rendering and\n * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified.\n *\n * @example\n * var doc = new jsPDF();\n *\n * doc.html(document.body, {\n * callback: function (doc) {\n * doc.save();\n * },\n * x: 10,\n * y: 10\n * });\n */\n jsPDFAPI.html = function(src, options) {\n \"use strict\";\n\n options = options || {};\n options.callback = options.callback || function() {};\n options.html2canvas = options.html2canvas || {};\n options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n options.jsPDF = options.jsPDF || this;\n options.fontFaces = options.fontFaces\n ? options.fontFaces.map(normalizeFontFace)\n : null;\n\n // Create a new worker with the given options.\n var worker = new Worker(options);\n\n if (!options.worker) {\n // If worker is not set to true, perform the traditional 'simple' operation.\n return worker.from(src).doCallback();\n } else {\n // Otherwise, return the worker for new Promise-based operation.\n return worker;\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namesOid;\n //var destsGoto = [];\n\n jsPDFAPI.events.push([\n \"postPutResources\",\n function() {\n var pdf = this;\n var rx = /^(\\d+) 0 obj$/;\n\n // Write action goto objects for each page\n // this.outline.destsGoto = [];\n // for (var i = 0; i < totalPages; i++) {\n // var id = pdf.internal.newObject();\n // this.outline.destsGoto.push(id);\n // pdf.internal.write(\"<> endobj\");\n // }\n //\n // for (var i = 0; i < dests.length; i++) {\n // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n // R\");\n // }\n //\n if (this.outline.root.children.length > 0) {\n var lines = pdf.outline.render().split(/\\r\\n/);\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var m = rx.exec(line);\n if (m != null) {\n var oid = m[1];\n pdf.internal.newObjectDeferredBegin(oid, false);\n }\n pdf.internal.write(line);\n }\n }\n\n // This code will write named destination for each page reference\n // (page_1, etc)\n if (this.outline.createNamedDestinations) {\n var totalPages = this.internal.pages.length;\n // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n // follow 5, 7, 9, etc\n // Write destination objects for each page\n var dests = [];\n for (var i = 0; i < totalPages; i++) {\n var id = pdf.internal.newObject();\n dests.push(id);\n var info = pdf.internal.getPageInfo(i + 1);\n pdf.internal.write(\n \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n );\n }\n\n // assign a name for each destination\n var names2Oid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Names [ \");\n for (var i = 0; i < dests.length; i++) {\n pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n }\n pdf.internal.write(\" ] >>\", \"endobj\");\n\n // var kids = pdf.internal.newObject();\n // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n // pdf.internal.write(' ] >>', 'endobj');\n\n namesOid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n pdf.internal.write(\">>\", \"endobj\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putCatalog\",\n function() {\n var pdf = this;\n if (pdf.outline.root.children.length > 0) {\n pdf.internal.write(\n \"/Outlines\",\n this.outline.makeRef(this.outline.root)\n );\n if (this.outline.createNamedDestinations) {\n pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n }\n // Open with Bookmarks showing\n // pdf.internal.write(\"/PageMode /UseOutlines\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n var pdf = this;\n\n pdf.outline = {\n createNamedDestinations: false,\n root: {\n children: []\n }\n };\n\n /**\n * Options: pageNumber\n */\n pdf.outline.add = function(parent, title, options) {\n var item = {\n title: title,\n options: options,\n children: []\n };\n if (parent == null) {\n parent = this.root;\n }\n parent.children.push(item);\n return item;\n };\n\n pdf.outline.render = function() {\n this.ctx = {};\n this.ctx.val = \"\";\n this.ctx.pdf = pdf;\n\n this.genIds_r(this.root);\n this.renderRoot(this.root);\n this.renderItems(this.root);\n\n return this.ctx.val;\n };\n\n pdf.outline.genIds_r = function(node) {\n node.id = pdf.internal.newObjectDeferred();\n for (var i = 0; i < node.children.length; i++) {\n this.genIds_r(node.children[i]);\n }\n };\n\n pdf.outline.renderRoot = function(node) {\n this.objStart(node);\n this.line(\"/Type /Outlines\");\n if (node.children.length > 0) {\n this.line(\"/First \" + this.makeRef(node.children[0]));\n this.line(\n \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n );\n }\n this.line(\n \"/Count \" +\n this.count_r(\n {\n count: 0\n },\n node\n )\n );\n this.objEnd();\n };\n\n pdf.outline.renderItems = function(node) {\n var getVerticalCoordinateString = this.ctx.pdf.internal\n .getVerticalCoordinateString;\n for (var i = 0; i < node.children.length; i++) {\n var item = node.children[i];\n this.objStart(item);\n\n this.line(\"/Title \" + this.makeString(item.title));\n\n this.line(\"/Parent \" + this.makeRef(node));\n if (i > 0) {\n this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n }\n if (i < node.children.length - 1) {\n this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n }\n if (item.children.length > 0) {\n this.line(\"/First \" + this.makeRef(item.children[0]));\n this.line(\n \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n );\n }\n\n var count = (this.count = this.count_r(\n {\n count: 0\n },\n item\n ));\n if (count > 0) {\n this.line(\"/Count \" + count);\n }\n\n if (item.options) {\n if (item.options.pageNumber) {\n // Explicit Destination\n //WARNING this assumes page ids are 3,5,7, etc.\n var info = pdf.internal.getPageInfo(item.options.pageNumber);\n this.line(\n \"/Dest \" +\n \"[\" +\n info.objId +\n \" 0 R /XYZ 0 \" +\n getVerticalCoordinateString(0) +\n \" 0]\"\n );\n // this line does not work on all clients (pageNumber instead of page ref)\n //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n // Named Destination\n // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n // Action Destination\n // var id = pdf.internal.newObject();\n // pdf.internal.write('<> endobj');\n // this.line('/A ' + id + ' 0 R' );\n }\n }\n this.objEnd();\n }\n for (var z = 0; z < node.children.length; z++) {\n this.renderItems(node.children[z]);\n }\n };\n\n pdf.outline.line = function(text) {\n this.ctx.val += text + \"\\r\\n\";\n };\n\n pdf.outline.makeRef = function(node) {\n return node.id + \" 0 R\";\n };\n\n pdf.outline.makeString = function(val) {\n return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n };\n\n pdf.outline.objStart = function(node) {\n this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n };\n\n pdf.outline.objEnd = function() {\n this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n };\n\n pdf.outline.count_r = function(ctx, node) {\n for (var i = 0; i < node.children.length; i++) {\n ctx.count++;\n this.count_r(ctx, node.children[i]);\n }\n return ctx.count;\n };\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * 0xc0 (SOF) Huffman - Baseline DCT\n * 0xc1 (SOF) Huffman - Extended sequential DCT\n * 0xc2 Progressive DCT (SOF2)\n * 0xc3 Spatial (sequential) lossless (SOF3)\n * 0xc4 Differential sequential DCT (SOF5)\n * 0xc5 Differential progressive DCT (SOF6)\n * 0xc6 Differential spatial (SOF7)\n * 0xc7\n */\n var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n //takes a string imgData containing the raw bytes of\n //a jpeg image and returns [width, height]\n //Algorithm from: http://www.64lines.com/jpeg-width-height\n var getJpegInfo = function(imgData) {\n var width, height, numcomponents;\n var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n var len = imgData.length;\n var result = { width: 0, height: 0, numcomponents: 1 };\n for (var i = 4; i < len; i += 2) {\n i += blockLength;\n if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n numcomponents = imgData.charCodeAt(i + 9);\n result = { width: width, height: height, numcomponents: numcomponents };\n break;\n } else {\n blockLength =\n imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n }\n }\n return result;\n };\n\n /**\n * @ignore\n */\n jsPDFAPI.processJPEG = function(\n data,\n index,\n alias,\n compression,\n dataAsBinaryString,\n colorSpace\n ) {\n var filter = this.decode.DCT_DECODE,\n bpc = 8,\n dims,\n result = null;\n\n if (\n typeof data === \"string\" ||\n this.__addimage__.isArrayBuffer(data) ||\n this.__addimage__.isArrayBufferView(data)\n ) {\n // if we already have a stored binary string rep use that\n data = dataAsBinaryString || data;\n data = this.__addimage__.isArrayBuffer(data)\n ? new Uint8Array(data)\n : data;\n data = this.__addimage__.isArrayBufferView(data)\n ? this.__addimage__.arrayBufferToBinaryString(data)\n : data;\n\n dims = getJpegInfo(data);\n switch (dims.numcomponents) {\n case 1:\n colorSpace = this.color_spaces.DEVICE_GRAY;\n break;\n case 4:\n colorSpace = this.color_spaces.DEVICE_CMYK;\n break;\n case 3:\n colorSpace = this.color_spaces.DEVICE_RGB;\n break;\n }\n\n result = {\n data: data,\n width: dims.width,\n height: dims.height,\n colorSpace: colorSpace,\n bitsPerComponent: bpc,\n filter: filter,\n index: index,\n alias: alias\n };\n }\n return result;\n };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n var APNG_BLEND_OP_OVER,\n APNG_BLEND_OP_SOURCE,\n APNG_DISPOSE_OP_BACKGROUND,\n APNG_DISPOSE_OP_NONE,\n APNG_DISPOSE_OP_PREVIOUS,\n makeImage,\n scratchCanvas,\n scratchCtx;\n\n APNG_DISPOSE_OP_NONE = 0;\n\n APNG_DISPOSE_OP_BACKGROUND = 1;\n\n APNG_DISPOSE_OP_PREVIOUS = 2;\n\n APNG_BLEND_OP_SOURCE = 0;\n\n APNG_BLEND_OP_OVER = 1;\n\n function PNG(data) {\n var chunkSize,\n colors,\n palLen,\n delayDen,\n delayNum,\n frame,\n i,\n index,\n key,\n section,\n palShort,\n text,\n _i,\n _j,\n _ref;\n this.data = data;\n this.pos = 8;\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.animation = null;\n this.text = {};\n frame = null;\n while (true) {\n chunkSize = this.readUInt32();\n section = function() {\n var _i, _results;\n _results = [];\n for (i = _i = 0; _i < 4; i = ++_i) {\n _results.push(String.fromCharCode(this.data[this.pos++]));\n }\n return _results;\n }\n .call(this)\n .join(\"\");\n switch (section) {\n case \"IHDR\":\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n case \"acTL\":\n this.animation = {\n numFrames: this.readUInt32(),\n numPlays: this.readUInt32() || Infinity,\n frames: []\n };\n break;\n case \"PLTE\":\n this.palette = this.read(chunkSize);\n break;\n case \"fcTL\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.pos += 4;\n frame = {\n width: this.readUInt32(),\n height: this.readUInt32(),\n xOffset: this.readUInt32(),\n yOffset: this.readUInt32()\n };\n delayNum = this.readUInt16();\n delayDen = this.readUInt16() || 100;\n frame.delay = (1000 * delayNum) / delayDen;\n frame.disposeOp = this.data[this.pos++];\n frame.blendOp = this.data[this.pos++];\n frame.data = [];\n break;\n case \"IDAT\":\n case \"fdAT\":\n if (section === \"fdAT\") {\n this.pos += 4;\n chunkSize -= 4;\n }\n data = (frame != null ? frame.data : void 0) || this.imgData;\n for (\n i = _i = 0;\n 0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n i = 0 <= chunkSize ? ++_i : --_i\n ) {\n data.push(this.data[this.pos++]);\n }\n break;\n case \"tRNS\":\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n palLen = this.palette.length / 3;\n this.transparency.indexed = this.read(chunkSize);\n if (this.transparency.indexed.length > palLen)\n throw new Error(\"More transparent colors than palette size\");\n /*\n * According to the PNG spec trns should be increased to the same size as palette if shorter\n */\n //palShort = 255 - this.transparency.indexed.length;\n palShort = palLen - this.transparency.indexed.length;\n if (palShort > 0) {\n for (\n i = _j = 0;\n 0 <= palShort ? _j < palShort : _j > palShort;\n i = 0 <= palShort ? ++_j : --_j\n ) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n this.transparency.rgb = this.read(chunkSize);\n }\n break;\n case \"tEXt\":\n text = this.read(chunkSize);\n index = text.indexOf(0);\n key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n case \"IEND\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.colors = function() {\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n return 1;\n case 2:\n case 6:\n return 3;\n }\n }.call(this);\n this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n this.colorSpace = function() {\n switch (this.colors) {\n case 1:\n return \"DeviceGray\";\n case 3:\n return \"DeviceRGB\";\n }\n }.call(this);\n this.imgData = new Uint8Array(this.imgData);\n return;\n default:\n this.pos += chunkSize;\n }\n this.pos += 4;\n if (this.pos > this.data.length) {\n throw new Error(\"Incomplete or corrupt PNG file\");\n }\n }\n }\n\n PNG.prototype.read = function(bytes) {\n var i, _i, _results;\n _results = [];\n for (\n i = _i = 0;\n 0 <= bytes ? _i < bytes : _i > bytes;\n i = 0 <= bytes ? ++_i : --_i\n ) {\n _results.push(this.data[this.pos++]);\n }\n return _results;\n };\n\n PNG.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.data[this.pos++] << 24;\n b2 = this.data[this.pos++] << 16;\n b3 = this.data[this.pos++] << 8;\n b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n PNG.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.data[this.pos++] << 8;\n b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n PNG.prototype.decodePixels = function(data) {\n var pixelBytes = this.pixelBitlength / 8;\n var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n var pos = 0;\n var _this = this;\n\n if (data == null) {\n data = this.imgData;\n }\n if (data.length === 0) {\n return new Uint8Array(0);\n }\n\n data = unzlibSync(data);\n function pass(x0, y0, dx, dy) {\n var abyte,\n c,\n col,\n i,\n left,\n length,\n p,\n pa,\n paeth,\n pb,\n pc,\n pixels,\n row,\n scanlineLength,\n upper,\n upperLeft,\n _i,\n _j,\n _k,\n _l,\n _m;\n var w = Math.ceil((_this.width - x0) / dx),\n h = Math.ceil((_this.height - y0) / dy);\n var isFull = _this.width == w && _this.height == h;\n scanlineLength = pixelBytes * w;\n pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n length = data.length;\n row = 0;\n c = 0;\n while (row < h && pos < length) {\n switch (data[pos++]) {\n case 0:\n for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n pixels[c++] = data[pos++];\n }\n break;\n case 1:\n for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n abyte = data[pos++];\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n pixels[c++] = (abyte + left) % 256;\n }\n break;\n case 2:\n for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (upper + abyte) % 256;\n }\n break;\n case 3:\n for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n case 4:\n for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n pixels[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n p = left + upper - upperLeft;\n pa = Math.abs(p - left);\n pb = Math.abs(p - upper);\n pc = Math.abs(p - upperLeft);\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n pixels[c++] = (abyte + paeth) % 256;\n }\n break;\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n if (!isFull) {\n var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n var partPos = row * scanlineLength;\n for (i = 0; i < w; i += 1) {\n for (var j = 0; j < pixelBytes; j += 1)\n fullPixels[fullPos++] = pixels[partPos++];\n fullPos += (dx - 1) * pixelBytes;\n }\n }\n row++;\n }\n }\n if (_this.interlaceMethod == 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n /* NOTE these seem to follow the pattern:\n * pass(x, 0, 2*x, 2*x);\n * pass(0, x, x, 2*x);\n * with x being 4, 2, 1.\n */\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1);\n }\n return fullPixels;\n };\n\n PNG.prototype.decodePalette = function() {\n var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n palette = this.palette;\n transparency = this.transparency.indexed || [];\n ret = new Uint8Array((transparency.length || 0) + palette.length);\n pos = 0;\n length = palette.length;\n c = 0;\n for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n }\n return ret;\n };\n\n PNG.prototype.copyToImageData = function(imageData, pixels) {\n var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n colors = this.colors;\n palette = null;\n alpha = this.hasAlphaChannel;\n if (this.palette.length) {\n palette =\n (_ref = this._decodedPalette) != null\n ? _ref\n : (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n data = imageData.data || imageData;\n length = data.length;\n input = palette || pixels;\n i = j = 0;\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n PNG.prototype.decode = function() {\n var ret;\n ret = new Uint8Array(this.width * this.height * 4);\n this.copyToImageData(ret, this.decodePixels());\n return ret;\n };\n\n var hasBrowserCanvas = function() {\n if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n try {\n scratchCanvas = globalObject.document.createElement(\"canvas\");\n scratchCtx = scratchCanvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n };\n\n hasBrowserCanvas();\n\n makeImage = function(imageData) {\n if (hasBrowserCanvas() === true) {\n var img;\n scratchCtx.width = imageData.width;\n scratchCtx.height = imageData.height;\n scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n scratchCtx.putImageData(imageData, 0, 0);\n img = new Image();\n img.src = scratchCanvas.toDataURL();\n return img;\n }\n throw new Error(\"This method requires a Browser with Canvas-capability.\");\n };\n\n PNG.prototype.decodeFrames = function(ctx) {\n var frame, i, imageData, pixels, _i, _len, _ref, _results;\n if (!this.animation) {\n return;\n }\n _ref = this.animation.frames;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n frame = _ref[i];\n imageData = ctx.createImageData(frame.width, frame.height);\n pixels = this.decodePixels(new Uint8Array(frame.data));\n this.copyToImageData(imageData, pixels);\n frame.imageData = imageData;\n _results.push((frame.image = makeImage(imageData)));\n }\n return _results;\n };\n\n PNG.prototype.renderFrame = function(ctx, number) {\n var frame, frames, prev;\n frames = this.animation.frames;\n frame = frames[number];\n prev = frames[number - 1];\n if (number === 0) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n ) {\n ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n } else if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n ) {\n ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n }\n if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n }\n return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n };\n\n PNG.prototype.animate = function(ctx) {\n var doFrame,\n frameNumber,\n frames,\n numFrames,\n numPlays,\n _ref,\n _this = this;\n frameNumber = 0;\n (_ref = this.animation),\n (numFrames = _ref.numFrames),\n (frames = _ref.frames),\n (numPlays = _ref.numPlays);\n return (doFrame = function() {\n var f, frame;\n f = frameNumber++ % numFrames;\n frame = frames[f];\n _this.renderFrame(ctx, f);\n if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n }\n })();\n };\n\n PNG.prototype.stopAnimation = function() {\n var _ref;\n return clearTimeout(\n (_ref = this.animation) != null ? _ref._timeout : void 0\n );\n };\n\n PNG.prototype.render = function(canvas) {\n var ctx, data;\n if (canvas._png) {\n canvas._png.stopAnimation();\n }\n canvas._png = this;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx = canvas.getContext(\"2d\");\n if (this.animation) {\n this.decodeFrames(ctx);\n return this.animate(ctx);\n } else {\n data = ctx.createImageData(this.width, this.height);\n this.copyToImageData(data, this.decodePixels());\n return ctx.putImageData(data, 0, 0);\n }\n };\n\n return PNG;\n})();\n\nexport { PNG };\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n \"use strict\";\n /**\n * Returns an array of length matching length of the 'word' string, with each\n * cell occupied by the width of the char in that position.\n *\n * @name getCharWidthsArray\n * @function\n * @param {string} text\n * @param {Object} options\n * @returns {Array}\n */\n var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n options = options || {};\n\n var activeFont = options.font || this.internal.getFont();\n var fontSize = options.fontSize || this.internal.getFontSize();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n\n var widths = options.widths\n ? options.widths\n : activeFont.metadata.Unicode.widths;\n var widthsFractionOf = widths.fof ? widths.fof : 1;\n var kerning = options.kerning\n ? options.kerning\n : activeFont.metadata.Unicode.kerning;\n var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n var doKerning = options.doKerning === false ? false : true;\n var kerningValue = 0;\n\n var i;\n var length = text.length;\n var char_code;\n var prior_char_code = 0; //for kerning\n var default_char_width = widths[0] || widthsFractionOf;\n var output = [];\n\n for (i = 0; i < length; i++) {\n char_code = text.charCodeAt(i);\n\n if (typeof activeFont.metadata.widthOfString === \"function\") {\n output.push(\n (activeFont.metadata.widthOfGlyph(\n activeFont.metadata.characterToGlyph(char_code)\n ) +\n charSpace * (1000 / fontSize) || 0) / 1000\n );\n } else {\n if (\n doKerning &&\n typeof kerning[char_code] === \"object\" &&\n !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n ) {\n kerningValue =\n kerning[char_code][prior_char_code] / kerningFractionOf;\n } else {\n kerningValue = 0;\n }\n output.push(\n (widths[char_code] || default_char_width) / widthsFractionOf +\n kerningValue\n );\n }\n prior_char_code = char_code;\n }\n\n return output;\n });\n\n /**\n * Returns a widths of string in a given font, if the font size is set as 1 point.\n *\n * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n * of the string will be that much.\n *\n * Multiply by font size to get actual width in *points*\n * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n *\n * @name getStringUnitWidth\n * @public\n * @function\n * @param {string} text\n * @param {string} options\n * @returns {number} result\n */\n var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n options = options || {};\n\n var fontSize = options.fontSize || this.internal.getFontSize();\n var font = options.font || this.internal.getFont();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n var result = 0;\n\n if (API.processArabic) {\n text = API.processArabic(text);\n }\n\n if (typeof font.metadata.widthOfString === \"function\") {\n result =\n font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n } else {\n result = getCharWidthsArray\n .apply(this, arguments)\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n }\n return result;\n });\n\n /**\n returns array of lines\n */\n var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n var answer = [];\n\n // 1st, chop off the piece that can fit on the hanging line.\n var i = 0,\n l = word.length,\n workingLen = 0;\n while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n workingLen += widths_array[i];\n i++;\n }\n // this is first line.\n answer.push(word.slice(0, i));\n\n // 2nd. Split the rest into maxLen pieces.\n var startOfLine = i;\n workingLen = 0;\n while (i !== l) {\n if (workingLen + widths_array[i] > maxLen) {\n answer.push(word.slice(startOfLine, i));\n workingLen = 0;\n startOfLine = i;\n }\n workingLen += widths_array[i];\n i++;\n }\n if (startOfLine !== i) {\n answer.push(word.slice(startOfLine, i));\n }\n\n return answer;\n };\n\n // Note, all sizing inputs for this function must be in \"font measurement units\"\n // By default, for PDF, it's \"point\".\n var splitParagraphIntoLines = function(text, maxlen, options) {\n // at this time works only on Western scripts, ones with space char\n // separating the words. Feel free to expand.\n\n if (!options) {\n options = {};\n }\n\n var line = [],\n lines = [line],\n line_length = options.textIndent || 0,\n separator_length = 0,\n current_word_length = 0,\n word,\n widths_array,\n words = text.split(\" \"),\n spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n i,\n l,\n tmp,\n lineIndent;\n\n if (options.lineIndent === -1) {\n lineIndent = words[0].length + 2;\n } else {\n lineIndent = options.lineIndent || 0;\n }\n if (lineIndent) {\n var pad = Array(lineIndent).join(\" \"),\n wrds = [];\n words.map(function(wrd) {\n wrd = wrd.split(/\\s*\\n/);\n if (wrd.length > 1) {\n wrds = wrds.concat(\n wrd.map(function(wrd, idx) {\n return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n })\n );\n } else {\n wrds.push(wrd[0]);\n }\n });\n words = wrds;\n lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n }\n\n for (i = 0, l = words.length; i < l; i++) {\n var force = 0;\n\n word = words[i];\n if (lineIndent && word[0] == \"\\n\") {\n word = word.substr(1);\n force = 1;\n }\n widths_array = getCharWidthsArray.apply(this, [word, options]);\n current_word_length = widths_array.reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n\n if (\n line_length + separator_length + current_word_length > maxlen ||\n force\n ) {\n if (current_word_length > maxlen) {\n // this happens when you have space-less long URLs for example.\n // we just chop these to size. We do NOT insert hiphens\n tmp = splitLongWord.apply(this, [\n word,\n widths_array,\n maxlen - (line_length + separator_length),\n maxlen\n ]);\n // first line we add to existing line object\n line.push(tmp.shift()); // it's ok to have extra space indicator there\n // last line we make into new line object\n line = [tmp.pop()];\n // lines in the middle we apped to lines object as whole lines\n while (tmp.length) {\n lines.push([tmp.shift()]); // single fragment occupies whole line\n }\n current_word_length = widths_array\n .slice(word.length - (line[0] ? line[0].length : 0))\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n } else {\n // just put it on a new line\n line = [word];\n }\n\n // now we attach new line to lines\n lines.push(line);\n line_length = current_word_length + lineIndent;\n separator_length = spaceCharWidth;\n } else {\n line.push(word);\n\n line_length += separator_length + current_word_length;\n separator_length = spaceCharWidth;\n }\n }\n\n var postProcess;\n if (lineIndent) {\n postProcess = function(ln, idx) {\n return (idx ? pad : \"\") + ln.join(\" \");\n };\n } else {\n postProcess = function(ln) {\n return ln.join(\" \");\n };\n }\n\n return lines.map(postProcess);\n };\n\n /**\n * Splits a given string into an array of strings. Uses 'size' value\n * (in measurement units declared as default for the jsPDF instance)\n * and the font's \"widths\" and \"Kerning\" tables, where available, to\n * determine display length of a given string for a given font.\n *\n * We use character's 100% of unit size (height) as width when Width\n * table or other default width is not available.\n *\n * @name splitTextToSize\n * @public\n * @function\n * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n * @param {Object} options Optional flags needed for chopper to do the right thing.\n * @returns {Array} array Array with strings chopped to size.\n */\n API.splitTextToSize = function(text, maxlen, options) {\n \"use strict\";\n\n options = options || {};\n\n var fsize = options.fontSize || this.internal.getFontSize(),\n newOptions = function(options) {\n var widths = {\n 0: 1\n },\n kerning = {};\n\n if (!options.widths || !options.kerning) {\n var f = this.internal.getFont(options.fontName, options.fontStyle),\n encoding = \"Unicode\";\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n // Actual JavaScript-native String's 16bit char codes used.\n // no multi-byte logic here\n\n if (f.metadata[encoding]) {\n return {\n widths: f.metadata[encoding].widths || widths,\n kerning: f.metadata[encoding].kerning || kerning\n };\n } else {\n return {\n font: f.metadata,\n fontSize: this.internal.getFontSize(),\n charSpace: this.internal.getCharSpace()\n };\n }\n } else {\n return {\n widths: options.widths,\n kerning: options.kerning\n };\n }\n }.call(this, options);\n\n // first we split on end-of-line chars\n var paragraphs;\n if (Array.isArray(text)) {\n paragraphs = text;\n } else {\n paragraphs = String(text).split(/\\r?\\n/);\n }\n\n // now we convert size (max length of line) into \"font size units\"\n // at present time, the \"font size unit\" is always 'point'\n // 'proportional' means, \"in proportion to font size\"\n var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n // this may change in the future?\n // until then, proportional_maxlen is likely to be in 'points'\n\n // If first line is to be indented (shorter or longer) than maxLen\n // we indicate that by using CSS-style \"text-indent\" option.\n // here it's in font units too (which is likely 'points')\n // it can be negative (which makes the first line longer than maxLen)\n newOptions.textIndent = options.textIndent\n ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n : 0;\n newOptions.lineIndent = options.lineIndent;\n\n var i,\n l,\n output = [];\n for (i = 0, l = paragraphs.length; i < l; i++) {\n output = output.concat(\n splitParagraphIntoLines.apply(this, [\n paragraphs[i],\n fontUnit_maxLen,\n newOptions\n ])\n );\n }\n\n return output;\n };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee , 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n var p = 0;\n\n var gopts = gopts === undefined ? {} : gopts;\n var loop_count = gopts.loop === undefined ? null : gopts.loop;\n var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n function check_palette_and_num_colors(palette) {\n var num_colors = palette.length;\n if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n throw new Error(\n \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n );\n }\n return num_colors;\n }\n\n // - Header.\n buf[p++] = 0x47;\n buf[p++] = 0x49;\n buf[p++] = 0x46; // GIF\n buf[p++] = 0x38;\n buf[p++] = 0x39;\n buf[p++] = 0x61; // 89a\n\n // Handling of Global Color Table (palette) and background index.\n var gp_num_colors_pow2 = 0;\n var background = 0;\n if (global_palette !== null) {\n var gp_num_colors = check_palette_and_num_colors(global_palette);\n while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n gp_num_colors = 1 << gp_num_colors_pow2;\n --gp_num_colors_pow2;\n if (gopts.background !== undefined) {\n background = gopts.background;\n if (background >= gp_num_colors)\n throw new Error(\"Background index out of range.\");\n // The GIF spec states that a background index of 0 should be ignored, so\n // this is probably a mistake and you really want to set it to another\n // slot in the palette. But actually in the end most browsers, etc end\n // up ignoring this almost completely (including for dispose background).\n if (background === 0)\n throw new Error(\"Background index explicitly passed as 0.\");\n }\n }\n\n // - Logical Screen Descriptor.\n // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n buf[p++] = width & 0xff;\n buf[p++] = (width >> 8) & 0xff;\n buf[p++] = height & 0xff;\n buf[p++] = (height >> 8) & 0xff;\n // NOTE: Indicates 0-bpp original color resolution (unused?).\n buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n buf[p++] = background; // Background Color Index.\n buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n // - Global Color Table\n if (global_palette !== null) {\n for (var i = 0, il = global_palette.length; i < il; ++i) {\n var rgb = global_palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n if (loop_count !== null) {\n // Netscape block for looping.\n if (loop_count < 0 || loop_count > 65535)\n throw new Error(\"Loop count invalid.\");\n // Extension code, label, and length.\n buf[p++] = 0x21;\n buf[p++] = 0xff;\n buf[p++] = 0x0b;\n // NETSCAPE2.0\n buf[p++] = 0x4e;\n buf[p++] = 0x45;\n buf[p++] = 0x54;\n buf[p++] = 0x53;\n buf[p++] = 0x43;\n buf[p++] = 0x41;\n buf[p++] = 0x50;\n buf[p++] = 0x45;\n buf[p++] = 0x32;\n buf[p++] = 0x2e;\n buf[p++] = 0x30;\n // Sub-block\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loop_count & 0xff;\n buf[p++] = (loop_count >> 8) & 0xff;\n buf[p++] = 0x00; // Terminator.\n }\n\n var ended = false;\n\n this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n if (ended === true) {\n --p;\n ended = false;\n } // Un-end.\n\n opts = opts === undefined ? {} : opts;\n\n // TODO(deanm): Bounds check x, y. Do they need to be within the virtual\n // canvas width/height, I imagine?\n if (x < 0 || y < 0 || x > 65535 || y > 65535)\n throw new Error(\"x/y invalid.\");\n\n if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n if (indexed_pixels.length < w * h)\n throw new Error(\"Not enough pixels for the frame size.\");\n\n var using_local_palette = true;\n var palette = opts.palette;\n if (palette === undefined || palette === null) {\n using_local_palette = false;\n palette = global_palette;\n }\n\n if (palette === undefined || palette === null)\n throw new Error(\"Must supply either a local or global palette.\");\n\n var num_colors = check_palette_and_num_colors(palette);\n\n // Compute the min_code_size (power of 2), destroying num_colors.\n var min_code_size = 0;\n while ((num_colors >>= 1)) ++min_code_size;\n num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n var delay = opts.delay === undefined ? 0 : opts.delay;\n\n // From the spec:\n // 0 - No disposal specified. The decoder is\n // not required to take any action.\n // 1 - Do not dispose. The graphic is to be left\n // in place.\n // 2 - Restore to background color. The area used by the\n // graphic must be restored to the background color.\n // 3 - Restore to previous. The decoder is required to\n // restore the area overwritten by the graphic with\n // what was there prior to rendering the graphic.\n // 4-7 - To be defined.\n // NOTE(deanm): Dispose background doesn't really work, apparently most\n // browsers ignore the background palette index and clear to transparency.\n var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n if (disposal < 0 || disposal > 3)\n // 4-7 is reserved.\n throw new Error(\"Disposal out of range.\");\n\n var use_transparency = false;\n var transparent_index = 0;\n if (opts.transparent !== undefined && opts.transparent !== null) {\n use_transparency = true;\n transparent_index = opts.transparent;\n if (transparent_index < 0 || transparent_index >= num_colors)\n throw new Error(\"Transparent color index.\");\n }\n\n if (disposal !== 0 || use_transparency || delay !== 0) {\n // - Graphics Control Extension\n buf[p++] = 0x21;\n buf[p++] = 0xf9; // Extension / Label.\n buf[p++] = 4; // Byte size.\n\n buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n buf[p++] = delay & 0xff;\n buf[p++] = (delay >> 8) & 0xff;\n buf[p++] = transparent_index; // Transparent color index.\n buf[p++] = 0; // Block Terminator.\n }\n\n // - Image Descriptor\n buf[p++] = 0x2c; // Image Seperator.\n buf[p++] = x & 0xff;\n buf[p++] = (x >> 8) & 0xff; // Left.\n buf[p++] = y & 0xff;\n buf[p++] = (y >> 8) & 0xff; // Top.\n buf[p++] = w & 0xff;\n buf[p++] = (w >> 8) & 0xff;\n buf[p++] = h & 0xff;\n buf[p++] = (h >> 8) & 0xff;\n // NOTE: No sort flag (unused?).\n // TODO(deanm): Support interlace.\n buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n // - Local Color Table\n if (using_local_palette === true) {\n for (var i = 0, il = palette.length; i < il; ++i) {\n var rgb = palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n p = GifWriterOutputLZWCodeStream(\n buf,\n p,\n min_code_size < 2 ? 2 : min_code_size,\n indexed_pixels\n );\n\n return p;\n };\n\n this.end = function() {\n if (ended === false) {\n buf[p++] = 0x3b; // Trailer.\n ended = true;\n }\n return p;\n };\n\n this.getOutputBuffer = function() {\n return buf;\n };\n this.setOutputBuffer = function(v) {\n buf = v;\n };\n this.getOutputBufferPosition = function() {\n return p;\n };\n this.setOutputBufferPosition = function(v) {\n p = v;\n };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n buf[p++] = min_code_size;\n var cur_subblock = p++; // Pointing at the length field.\n\n var clear_code = 1 << min_code_size;\n var code_mask = clear_code - 1;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n var cur_shift = 0;\n // We have at most 12-bit codes, so we should have to hold a max of 19\n // bits here (and then we would write out).\n var cur = 0;\n\n function emit_bytes_to_buffer(bit_block_size) {\n while (cur_shift >= bit_block_size) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n }\n\n function emit_code(c) {\n cur |= c << cur_shift;\n cur_shift += cur_code_size;\n emit_bytes_to_buffer(8);\n }\n\n // I am not an expert on the topic, and I don't want to write a thesis.\n // However, it is good to outline here the basic algorithm and the few data\n // structures and optimizations here that make this implementation fast.\n // The basic idea behind LZW is to build a table of previously seen runs\n // addressed by a short id (herein called output code). All data is\n // referenced by a code, which represents one or more values from the\n // original input stream. All input bytes can be referenced as the same\n // value as an output code. So if you didn't want any compression, you\n // could more or less just output the original bytes as codes (there are\n // some details to this, but it is the idea). In order to achieve\n // compression, values greater then the input range (codes can be up to\n // 12-bit while input only 8-bit) represent a sequence of previously seen\n // inputs. The decompressor is able to build the same mapping while\n // decoding, so there is always a shared common knowledge between the\n // encoding and decoder, which is also important for \"timing\" aspects like\n // how to handle variable bit width code encoding.\n //\n // One obvious but very important consequence of the table system is there\n // is always a unique id (at most 12-bits) to map the runs. 'A' might be\n // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship\n // can be used for an effecient lookup strategy for the code mapping. We\n // need to know if a run has been seen before, and be able to map that run\n // to the output code. Since we start with known unique ids (input bytes),\n // and then from those build more unique ids (table entries), we can\n // continue this chain (almost like a linked list) to always have small\n // integer values that represent the current byte chains in the encoder.\n // This means instead of tracking the input bytes (AAAABCD) to know our\n // current state, we can track the table entry for AAAABC (it is guaranteed\n // to exist by the nature of the algorithm) and the next character D.\n // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n // unique. This allows us to create a simple lookup key for mapping input\n // sequences to codes (table indices) without having to store or search\n // any of the code sequences. So if 'AAAA' has a table entry of 12, the\n // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n // key. This leads to a integer value at most 20-bits, which can always\n // fit in an SMI value and be used as a fast sparse array / object key.\n\n // Output code for the current contents of the index buffer.\n var ib_code = index_stream[0] & code_mask; // Load first input index.\n var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n emit_code(clear_code); // Spec says first code should be a clear code.\n\n // First index already loaded, process the rest of the stream.\n for (var i = 1, il = index_stream.length; i < il; ++i) {\n var k = index_stream[i] & code_mask;\n var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n var cur_code = code_table[cur_key]; // buffer + k.\n\n // Check if we have to create a new code table entry.\n if (cur_code === undefined) {\n // We don't have buffer + k.\n // Emit index buffer (without k).\n // This is an inline version of emit_code, because this is the core\n // writing routine of the compressor (and V8 cannot inline emit_code\n // because it is a closure here in a different context). Additionally\n // we can call emit_byte_to_buffer less often, because we can have\n // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n // be 12-bits, so can safely have 18-bits there without overflow.\n // emit_code(ib_code);\n cur |= ib_code << cur_shift;\n cur_shift += cur_code_size;\n while (cur_shift >= 8) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n\n if (next_code === 4096) {\n // Table full, need a clear.\n emit_code(clear_code);\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_table = {};\n } else {\n // Table not full, insert a new entry.\n // Increase our variable bit code sizes if necessary. This is a bit\n // tricky as it is based on \"timing\" between the encoding and\n // decoder. From the encoders perspective this should happen after\n // we've already emitted the index buffer and are about to create the\n // first table entry that would overflow our current code bit size.\n if (next_code >= 1 << cur_code_size) ++cur_code_size;\n code_table[cur_key] = next_code++; // Insert into code table.\n }\n\n ib_code = k; // Index buffer to single input k.\n } else {\n ib_code = cur_code; // Index buffer to sequence in code table.\n }\n }\n\n emit_code(ib_code); // There will still be something in the index buffer.\n emit_code(eoi_code); // End Of Information.\n\n // Flush / finalize the sub-blocks stream to the buffer.\n emit_bytes_to_buffer(1);\n\n // Finish the sub-blocks, writing out any unfinished lengths and\n // terminating with a sub-block of length 0. If we have already started\n // but not yet used a sub-block it can just become the terminator.\n if (cur_subblock + 1 === p) {\n // Started but unused.\n buf[cur_subblock] = 0;\n } else {\n // Started and used, write length and additional terminator block.\n buf[cur_subblock] = p - cur_subblock - 1;\n buf[p++] = 0;\n }\n return p;\n}\n\nfunction GifReader(buf) {\n var p = 0;\n\n // - Header (GIF87a or GIF89a).\n if (\n buf[p++] !== 0x47 ||\n buf[p++] !== 0x49 ||\n buf[p++] !== 0x46 ||\n buf[p++] !== 0x38 ||\n ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n buf[p++] !== 0x61\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n // - Logical Screen Descriptor.\n var width = buf[p++] | (buf[p++] << 8);\n var height = buf[p++] | (buf[p++] << 8);\n var pf0 = buf[p++]; // .\n var global_palette_flag = pf0 >> 7;\n var num_global_colors_pow2 = pf0 & 0x7;\n var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n var background = buf[p++];\n buf[p++]; // Pixel aspect ratio (unused?).\n\n var global_palette_offset = null;\n var global_palette_size = null;\n\n if (global_palette_flag) {\n global_palette_offset = p;\n global_palette_size = num_global_colors;\n p += num_global_colors * 3; // Seek past palette.\n }\n\n var no_eof = true;\n\n var frames = [];\n\n var delay = 0;\n var transparent_index = null;\n var disposal = 0; // 0 - No disposal specified.\n var loop_count = null;\n\n this.width = width;\n this.height = height;\n\n while (no_eof && p < buf.length) {\n switch (buf[p++]) {\n case 0x21: // Graphics Control Extension Block\n switch (buf[p++]) {\n case 0xff: // Application specific block\n // Try if it's a Netscape block (with animation loop counter).\n if (\n buf[p] !== 0x0b || // 21 FF already read, check block size.\n // NETSCAPE2.0\n (buf[p + 1] == 0x4e &&\n buf[p + 2] == 0x45 &&\n buf[p + 3] == 0x54 &&\n buf[p + 4] == 0x53 &&\n buf[p + 5] == 0x43 &&\n buf[p + 6] == 0x41 &&\n buf[p + 7] == 0x50 &&\n buf[p + 8] == 0x45 &&\n buf[p + 9] == 0x32 &&\n buf[p + 10] == 0x2e &&\n buf[p + 11] == 0x30 &&\n // Sub-block\n buf[p + 12] == 0x03 &&\n buf[p + 13] == 0x01 &&\n buf[p + 16] == 0)\n ) {\n p += 14;\n loop_count = buf[p++] | (buf[p++] << 8);\n p++; // Skip terminator.\n } else {\n // We don't know what it is, just try to get past it.\n p += 12;\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n }\n break;\n\n case 0xf9: // Graphics Control Extension\n if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n var pf1 = buf[p++];\n delay = buf[p++] | (buf[p++] << 8);\n transparent_index = buf[p++];\n if ((pf1 & 1) === 0) transparent_index = null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // Skip terminator.\n break;\n\n case 0xfe: // Comment Extension.\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n // console.log(buf.slice(p, p+block_size).toString('ascii'));\n p += block_size;\n }\n break;\n\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n );\n }\n break;\n\n case 0x2c: // Image Descriptor.\n var x = buf[p++] | (buf[p++] << 8);\n var y = buf[p++] | (buf[p++] << 8);\n var w = buf[p++] | (buf[p++] << 8);\n var h = buf[p++] | (buf[p++] << 8);\n var pf2 = buf[p++];\n var local_palette_flag = pf2 >> 7;\n var interlace_flag = (pf2 >> 6) & 1;\n var num_local_colors_pow2 = pf2 & 0x7;\n var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n var palette_offset = global_palette_offset;\n var palette_size = global_palette_size;\n var has_local_palette = false;\n if (local_palette_flag) {\n var has_local_palette = true;\n palette_offset = p; // Override with local palette.\n palette_size = num_local_colors;\n p += num_local_colors * 3; // Seek past palette.\n }\n\n var data_offset = p;\n\n p++; // codesize\n while (true) {\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n\n frames.push({\n x: x,\n y: y,\n width: w,\n height: h,\n has_local_palette: has_local_palette,\n palette_offset: palette_offset,\n palette_size: palette_size,\n data_offset: data_offset,\n data_length: p - data_offset,\n transparent_index: transparent_index,\n interlaced: !!interlace_flag,\n delay: delay,\n disposal: disposal\n });\n break;\n\n case 0x3b: // Trailer Marker (end of file).\n no_eof = false;\n break;\n\n default:\n throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n break;\n }\n }\n\n this.numFrames = function() {\n return frames.length;\n };\n\n this.loopCount = function() {\n return loop_count;\n };\n\n this.frameInfo = function(frame_num) {\n if (frame_num < 0 || frame_num >= frames.length)\n throw new Error(\"Frame index out of range.\");\n return frames[frame_num];\n };\n\n this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = b;\n pixels[op++] = g;\n pixels[op++] = r;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n\n // I will go to copy and paste hell one day...\n this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = r;\n pixels[op++] = g;\n pixels[op++] = b;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n var min_code_size = code_stream[p++];\n\n var clear_code = 1 << min_code_size;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n // NOTE: This shares the same name as the encoder, but has a different\n // meaning here. Here this masks each code coming from the code stream.\n var code_mask = (1 << cur_code_size) - 1;\n var cur_shift = 0;\n var cur = 0;\n\n var op = 0; // Output pointer.\n\n var subblock_size = code_stream[p++];\n\n // TODO(deanm): Would using a TypedArray be any faster? At least it would\n // solve the fast mode / backing store uncertainty.\n // var code_table = Array(4096);\n var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n var prev_code = null; // Track code-1.\n\n while (true) {\n // Read up to two bytes, making sure we always 12-bits for max sized code.\n while (cur_shift < 16) {\n if (subblock_size === 0) break; // No more data to be read.\n\n cur |= code_stream[p++] << cur_shift;\n cur_shift += 8;\n\n if (subblock_size === 1) {\n // Never let it get to 0 to hold logic above.\n subblock_size = code_stream[p++]; // Next subblock.\n } else {\n --subblock_size;\n }\n }\n\n // TODO(deanm): We should never really get here, we should have received\n // and EOI.\n if (cur_shift < cur_code_size) break;\n\n var code = cur & code_mask;\n cur >>= cur_code_size;\n cur_shift -= cur_code_size;\n\n // TODO(deanm): Maybe should check that the first code was a clear code,\n // at least this is what you're supposed to do. But actually our encoder\n // now doesn't emit a clear code first anyway.\n if (code === clear_code) {\n // We don't actually have to clear the table. This could be a good idea\n // for greater error checking, but we don't really do any anyway. We\n // will just track it with next_code and overwrite old entries.\n\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_mask = (1 << cur_code_size) - 1;\n\n // Don't update prev_code ?\n prev_code = null;\n continue;\n } else if (code === eoi_code) {\n break;\n }\n\n // We have a similar situation as the decoder, where we want to store\n // variable length entries (code table entries), but we want to do in a\n // faster manner than an array of arrays. The code below stores sort of a\n // linked list within the code table, and then \"chases\" through it to\n // construct the dictionary entries. When a new entry is created, just the\n // last byte is stored, and the rest (prefix) of the entry is only\n // referenced by its table entry. Then the code chases through the\n // prefixes until it reaches a single byte code. We have to chase twice,\n // first to compute the length, and then to actually copy the data to the\n // output (backwards, since we know the length). The alternative would be\n // storing something in an intermediate stack, but that doesn't make any\n // more sense. I implemented an approach where it also stored the length\n // in the code table, although it's a bit tricky because you run out of\n // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n // entries are generally not the long). Even when I created benchmarks for\n // very long table entries the complexity did not seem worth it.\n // The code table stores the prefix entry in 12 bits and then the suffix\n // byte in 8 bits, so each entry is 20 bits.\n\n var chase_code = code < next_code ? code : prev_code;\n\n // Chase what we will output, either {CODE} or {CODE-1}.\n var chase_length = 0;\n var chase = chase_code;\n while (chase > clear_code) {\n chase = code_table[chase] >> 8;\n ++chase_length;\n }\n\n var k = chase;\n\n var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n if (op_end > output_length) {\n console.log(\"Warning, gif stream longer than expected.\");\n return;\n }\n\n // Already have the first byte from the chase, might as well write it fast.\n output[op++] = k;\n\n op += chase_length;\n var b = op; // Track pointer, writing backwards.\n\n if (chase_code !== code)\n // The case of emitting {CODE-1} + k.\n output[op++] = k;\n\n chase = chase_code;\n while (chase_length--) {\n chase = code_table[chase];\n output[--b] = chase & 0xff; // Write backwards.\n chase >>= 8; // Pull down to the prefix code.\n }\n\n if (prev_code !== null && next_code < 4096) {\n code_table[next_code++] = (prev_code << 8) | k;\n // TODO(deanm): Figure out this clearing vs code growth logic better. I\n // have an feeling that it should just happen somewhere else, for now it\n // is awkward between when we grow past the max and then hit a clear code.\n // For now just check if we hit the max 12-bits (then a clear code should\n // follow, also of course encoded in 12-bits).\n if (next_code >= code_mask + 1 && cur_code_size < 12) {\n ++cur_code_size;\n code_mask = (code_mask << 1) | 1;\n }\n }\n\n prev_code = code;\n }\n\n if (op !== output_length) {\n console.log(\"Warning, gif stream shorter than expected.\");\n }\n\n return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n var ffloor = Math.floor;\n var YTable = new Array(64);\n var UVTable = new Array(64);\n var fdtbl_Y = new Array(64);\n var fdtbl_UV = new Array(64);\n var YDC_HT;\n var UVDC_HT;\n var YAC_HT;\n var UVAC_HT;\n\n var bitcode = new Array(65535);\n var category = new Array(65535);\n var outputfDCTQuant = new Array(64);\n var DU = new Array(64);\n var byteout = [];\n var bytenew = 0;\n var bytepos = 7;\n\n var YDU = new Array(64);\n var UDU = new Array(64);\n var VDU = new Array(64);\n var clt = new Array(256);\n var RGB_YUV_TABLE = new Array(2048);\n var currentQuality;\n\n var ZigZag = [\n 0,\n 1,\n 5,\n 6,\n 14,\n 15,\n 27,\n 28,\n 2,\n 4,\n 7,\n 13,\n 16,\n 26,\n 29,\n 42,\n 3,\n 8,\n 12,\n 17,\n 25,\n 30,\n 41,\n 43,\n 9,\n 11,\n 18,\n 24,\n 31,\n 40,\n 44,\n 53,\n 10,\n 19,\n 23,\n 32,\n 39,\n 45,\n 52,\n 54,\n 20,\n 22,\n 33,\n 38,\n 46,\n 51,\n 55,\n 60,\n 21,\n 34,\n 37,\n 47,\n 50,\n 56,\n 59,\n 61,\n 35,\n 36,\n 48,\n 49,\n 57,\n 58,\n 62,\n 63\n ];\n\n var std_dc_luminance_nrcodes = [\n 0,\n 0,\n 1,\n 5,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_luminance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 3,\n 3,\n 2,\n 4,\n 3,\n 5,\n 5,\n 4,\n 4,\n 0,\n 0,\n 1,\n 0x7d\n ];\n var std_ac_luminance_values = [\n 0x01,\n 0x02,\n 0x03,\n 0x00,\n 0x04,\n 0x11,\n 0x05,\n 0x12,\n 0x21,\n 0x31,\n 0x41,\n 0x06,\n 0x13,\n 0x51,\n 0x61,\n 0x07,\n 0x22,\n 0x71,\n 0x14,\n 0x32,\n 0x81,\n 0x91,\n 0xa1,\n 0x08,\n 0x23,\n 0x42,\n 0xb1,\n 0xc1,\n 0x15,\n 0x52,\n 0xd1,\n 0xf0,\n 0x24,\n 0x33,\n 0x62,\n 0x72,\n 0x82,\n 0x09,\n 0x0a,\n 0x16,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x25,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x34,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe1,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf1,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n var std_dc_chrominance_nrcodes = [\n 0,\n 0,\n 3,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_chrominance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 2,\n 4,\n 4,\n 3,\n 4,\n 7,\n 5,\n 4,\n 4,\n 0,\n 1,\n 2,\n 0x77\n ];\n var std_ac_chrominance_values = [\n 0x00,\n 0x01,\n 0x02,\n 0x03,\n 0x11,\n 0x04,\n 0x05,\n 0x21,\n 0x31,\n 0x06,\n 0x12,\n 0x41,\n 0x51,\n 0x07,\n 0x61,\n 0x71,\n 0x13,\n 0x22,\n 0x32,\n 0x81,\n 0x08,\n 0x14,\n 0x42,\n 0x91,\n 0xa1,\n 0xb1,\n 0xc1,\n 0x09,\n 0x23,\n 0x33,\n 0x52,\n 0xf0,\n 0x15,\n 0x62,\n 0x72,\n 0xd1,\n 0x0a,\n 0x16,\n 0x24,\n 0x34,\n 0xe1,\n 0x25,\n 0xf1,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x82,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n function initQuantTables(sf) {\n var YQT = [\n 16,\n 11,\n 10,\n 16,\n 24,\n 40,\n 51,\n 61,\n 12,\n 12,\n 14,\n 19,\n 26,\n 58,\n 60,\n 55,\n 14,\n 13,\n 16,\n 24,\n 40,\n 57,\n 69,\n 56,\n 14,\n 17,\n 22,\n 29,\n 51,\n 87,\n 80,\n 62,\n 18,\n 22,\n 37,\n 56,\n 68,\n 109,\n 103,\n 77,\n 24,\n 35,\n 55,\n 64,\n 81,\n 104,\n 113,\n 92,\n 49,\n 64,\n 78,\n 87,\n 103,\n 121,\n 120,\n 101,\n 72,\n 92,\n 95,\n 98,\n 112,\n 100,\n 103,\n 99\n ];\n\n for (var i = 0; i < 64; i++) {\n var t = ffloor((YQT[i] * sf + 50) / 100);\n t = Math.min(Math.max(t, 1), 255);\n YTable[ZigZag[i]] = t;\n }\n var UVQT = [\n 17,\n 18,\n 24,\n 47,\n 99,\n 99,\n 99,\n 99,\n 18,\n 21,\n 26,\n 66,\n 99,\n 99,\n 99,\n 99,\n 24,\n 26,\n 56,\n 99,\n 99,\n 99,\n 99,\n 99,\n 47,\n 66,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99\n ];\n for (var j = 0; j < 64; j++) {\n var u = ffloor((UVQT[j] * sf + 50) / 100);\n u = Math.min(Math.max(u, 1), 255);\n UVTable[ZigZag[j]] = u;\n }\n var aasf = [\n 1.0,\n 1.387039845,\n 1.306562965,\n 1.175875602,\n 1.0,\n 0.785694958,\n 0.5411961,\n 0.275899379\n ];\n var k = 0;\n for (var row = 0; row < 8; row++) {\n for (var col = 0; col < 8; col++) {\n fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n k++;\n }\n }\n }\n\n function computeHuffmanTbl(nrcodes, std_table) {\n var codevalue = 0;\n var pos_in_table = 0;\n var HT = new Array();\n for (var k = 1; k <= 16; k++) {\n for (var j = 1; j <= nrcodes[k]; j++) {\n HT[std_table[pos_in_table]] = [];\n HT[std_table[pos_in_table]][0] = codevalue;\n HT[std_table[pos_in_table]][1] = k;\n pos_in_table++;\n codevalue++;\n }\n codevalue *= 2;\n }\n return HT;\n }\n\n function initHuffmanTbl() {\n YDC_HT = computeHuffmanTbl(\n std_dc_luminance_nrcodes,\n std_dc_luminance_values\n );\n UVDC_HT = computeHuffmanTbl(\n std_dc_chrominance_nrcodes,\n std_dc_chrominance_values\n );\n YAC_HT = computeHuffmanTbl(\n std_ac_luminance_nrcodes,\n std_ac_luminance_values\n );\n UVAC_HT = computeHuffmanTbl(\n std_ac_chrominance_nrcodes,\n std_ac_chrominance_values\n );\n }\n\n function initCategoryNumber() {\n var nrlower = 1;\n var nrupper = 2;\n for (var cat = 1; cat <= 15; cat++) {\n //Positive numbers\n for (var nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitcode[32767 + nr] = [];\n bitcode[32767 + nr][1] = cat;\n bitcode[32767 + nr][0] = nr;\n }\n //Negative numbers\n for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitcode[32767 + nrneg] = [];\n bitcode[32767 + nrneg][1] = cat;\n bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n function initRGBYUVTable() {\n for (var i = 0; i < 256; i++) {\n RGB_YUV_TABLE[i] = 19595 * i;\n RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n }\n }\n\n // IO functions\n function writeBits(bs) {\n var value = bs[0];\n var posval = bs[1] - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) {\n bytenew |= 1 << bytepos;\n }\n posval--;\n bytepos--;\n if (bytepos < 0) {\n if (bytenew == 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(bytenew);\n }\n bytepos = 7;\n bytenew = 0;\n }\n }\n }\n\n function writeByte(value) {\n //byteout.push(clt[value]); // write char directly instead of converting later\n byteout.push(value);\n }\n\n function writeWord(value) {\n writeByte((value >> 8) & 0xff);\n writeByte(value & 0xff);\n }\n\n // DCT & quantization core\n function fDCTQuant(data, fdtbl) {\n var d0, d1, d2, d3, d4, d5, d6, d7;\n /* Pass 1: process rows. */\n var dataOff = 0;\n var i;\n var I8 = 8;\n var I64 = 64;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 1];\n d2 = data[dataOff + 2];\n d3 = data[dataOff + 3];\n d4 = data[dataOff + 4];\n d5 = data[dataOff + 5];\n d6 = data[dataOff + 6];\n d7 = data[dataOff + 7];\n\n var tmp0 = d0 + d7;\n var tmp7 = d0 - d7;\n var tmp1 = d1 + d6;\n var tmp6 = d1 - d6;\n var tmp2 = d2 + d5;\n var tmp5 = d2 - d5;\n var tmp3 = d3 + d4;\n var tmp4 = d3 - d4;\n\n /* Even part */\n var tmp10 = tmp0 + tmp3; /* phase 2 */\n var tmp13 = tmp0 - tmp3;\n var tmp11 = tmp1 + tmp2;\n var tmp12 = tmp1 - tmp2;\n\n data[dataOff] = tmp10 + tmp11; /* phase 3 */\n data[dataOff + 4] = tmp10 - tmp11;\n\n var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n data[dataOff + 6] = tmp13 - z1;\n\n /* Odd part */\n tmp10 = tmp4 + tmp5; /* phase 2 */\n tmp11 = tmp5 + tmp6;\n tmp12 = tmp6 + tmp7;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n var z3 = tmp11 * 0.707106781; /* c4 */\n\n var z11 = tmp7 + z3; /* phase 5 */\n var z13 = tmp7 - z3;\n\n data[dataOff + 5] = z13 + z2; /* phase 6 */\n data[dataOff + 3] = z13 - z2;\n data[dataOff + 1] = z11 + z4;\n data[dataOff + 7] = z11 - z4;\n\n dataOff += 8; /* advance pointer to next row */\n }\n\n /* Pass 2: process columns. */\n dataOff = 0;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 8];\n d2 = data[dataOff + 16];\n d3 = data[dataOff + 24];\n d4 = data[dataOff + 32];\n d5 = data[dataOff + 40];\n d6 = data[dataOff + 48];\n d7 = data[dataOff + 56];\n\n var tmp0p2 = d0 + d7;\n var tmp7p2 = d0 - d7;\n var tmp1p2 = d1 + d6;\n var tmp6p2 = d1 - d6;\n var tmp2p2 = d2 + d5;\n var tmp5p2 = d2 - d5;\n var tmp3p2 = d3 + d4;\n var tmp4p2 = d3 - d4;\n\n /* Even part */\n var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n var tmp13p2 = tmp0p2 - tmp3p2;\n var tmp11p2 = tmp1p2 + tmp2p2;\n var tmp12p2 = tmp1p2 - tmp2p2;\n\n data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n data[dataOff + 48] = tmp13p2 - z1p2;\n\n /* Odd part */\n tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n tmp11p2 = tmp5p2 + tmp6p2;\n tmp12p2 = tmp6p2 + tmp7p2;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n var z13p2 = tmp7p2 - z3p2;\n\n data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n data[dataOff + 24] = z13p2 - z2p2;\n data[dataOff + 8] = z11p2 + z4p2;\n data[dataOff + 56] = z11p2 - z4p2;\n\n dataOff++; /* advance pointer to next column */\n }\n\n // Quantize/descale the coefficients\n var fDCTQuant;\n for (i = 0; i < I64; ++i) {\n // Apply the quantization and scaling factor & Round to nearest integer\n fDCTQuant = data[i] * fdtbl[i];\n outputfDCTQuant[i] =\n fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n //outputfDCTQuant[i] = fround(fDCTQuant);\n }\n return outputfDCTQuant;\n }\n\n function writeAPP0() {\n writeWord(0xffe0); // marker\n writeWord(16); // length\n writeByte(0x4a); // J\n writeByte(0x46); // F\n writeByte(0x49); // I\n writeByte(0x46); // F\n writeByte(0); // = \"JFIF\",'\\0'\n writeByte(1); // versionhi\n writeByte(1); // versionlo\n writeByte(0); // xyunits\n writeWord(1); // xdensity\n writeWord(1); // ydensity\n writeByte(0); // thumbnwidth\n writeByte(0); // thumbnheight\n }\n\n function writeSOF0(width, height) {\n writeWord(0xffc0); // marker\n writeWord(17); // length, truecolor YUV JPG\n writeByte(8); // precision\n writeWord(height);\n writeWord(width);\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0x11); // HVY\n writeByte(0); // QTY\n writeByte(2); // IdU\n writeByte(0x11); // HVU\n writeByte(1); // QTU\n writeByte(3); // IdV\n writeByte(0x11); // HVV\n writeByte(1); // QTV\n }\n\n function writeDQT() {\n writeWord(0xffdb); // marker\n writeWord(132); // length\n writeByte(0);\n for (var i = 0; i < 64; i++) {\n writeByte(YTable[i]);\n }\n writeByte(1);\n for (var j = 0; j < 64; j++) {\n writeByte(UVTable[j]);\n }\n }\n\n function writeDHT() {\n writeWord(0xffc4); // marker\n writeWord(0x01a2); // length\n\n writeByte(0); // HTYDCinfo\n for (var i = 0; i < 16; i++) {\n writeByte(std_dc_luminance_nrcodes[i + 1]);\n }\n for (var j = 0; j <= 11; j++) {\n writeByte(std_dc_luminance_values[j]);\n }\n\n writeByte(0x10); // HTYACinfo\n for (var k = 0; k < 16; k++) {\n writeByte(std_ac_luminance_nrcodes[k + 1]);\n }\n for (var l = 0; l <= 161; l++) {\n writeByte(std_ac_luminance_values[l]);\n }\n\n writeByte(1); // HTUDCinfo\n for (var m = 0; m < 16; m++) {\n writeByte(std_dc_chrominance_nrcodes[m + 1]);\n }\n for (var n = 0; n <= 11; n++) {\n writeByte(std_dc_chrominance_values[n]);\n }\n\n writeByte(0x11); // HTUACinfo\n for (var o = 0; o < 16; o++) {\n writeByte(std_ac_chrominance_nrcodes[o + 1]);\n }\n for (var p = 0; p <= 161; p++) {\n writeByte(std_ac_chrominance_values[p]);\n }\n }\n\n function writeSOS() {\n writeWord(0xffda); // marker\n writeWord(12); // length\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0); // HTY\n writeByte(2); // IdU\n writeByte(0x11); // HTU\n writeByte(3); // IdV\n writeByte(0x11); // HTV\n writeByte(0); // Ss\n writeByte(0x3f); // Se\n writeByte(0); // Bf\n }\n\n function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n var EOB = HTAC[0x00];\n var M16zeroes = HTAC[0xf0];\n var pos;\n var I16 = 16;\n var I63 = 63;\n var I64 = 64;\n var DU_DCT = fDCTQuant(CDU, fdtbl);\n //ZigZag reorder\n for (var j = 0; j < I64; ++j) {\n DU[ZigZag[j]] = DU_DCT[j];\n }\n var Diff = DU[0] - DC;\n DC = DU[0];\n //Encode DC\n if (Diff == 0) {\n writeBits(HTDC[0]); // Diff might be 0\n } else {\n pos = 32767 + Diff;\n writeBits(HTDC[category[pos]]);\n writeBits(bitcode[pos]);\n }\n //Encode ACs\n var end0pos = 63; // was const... which is crazy\n while (end0pos > 0 && DU[end0pos] == 0) {\n end0pos--;\n }\n //end0pos = first element in reverse order !=0\n if (end0pos == 0) {\n writeBits(EOB);\n return DC;\n }\n var i = 1;\n var lng;\n while (i <= end0pos) {\n var startpos = i;\n while (DU[i] == 0 && i <= end0pos) {\n ++i;\n }\n var nrzeroes = i - startpos;\n if (nrzeroes >= I16) {\n lng = nrzeroes >> 4;\n for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n writeBits(M16zeroes);\n nrzeroes = nrzeroes & 0xf;\n }\n pos = 32767 + DU[i];\n writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n writeBits(bitcode[pos]);\n i++;\n }\n if (end0pos != I63) {\n writeBits(EOB);\n }\n return DC;\n }\n\n function initCharLookupTable() {\n var sfcc = String.fromCharCode;\n for (var i = 0; i < 256; i++) {\n ///// ACHTUNG // 255\n clt[i] = sfcc(i);\n }\n }\n\n this.encode = function(\n image,\n quality // image data object\n ) {\n if (quality) setQuality(quality);\n\n // Initialize bit writer\n byteout = new Array();\n bytenew = 0;\n bytepos = 7;\n\n // Add JPEG headers\n writeWord(0xffd8); // SOI\n writeAPP0();\n writeDQT();\n writeSOF0(image.width, image.height);\n writeDHT();\n writeSOS();\n\n // Encode 8x8 macroblocks\n var DCY = 0;\n var DCU = 0;\n var DCV = 0;\n\n bytenew = 0;\n bytepos = 7;\n\n this.encode.displayName = \"_encode_\";\n\n var imageData = image.data;\n var width = image.width;\n var height = image.height;\n\n var quadWidth = width * 4;\n\n var x,\n y = 0;\n var r, g, b;\n var start, p, col, row, pos;\n while (y < height) {\n x = 0;\n while (x < quadWidth) {\n start = quadWidth * y + x;\n col = -1;\n row = 0;\n\n for (pos = 0; pos < 64; pos++) {\n row = pos >> 3; // /8\n col = (pos & 7) * 4; // %8\n p = start + row * quadWidth + col;\n\n if (y + row >= height) {\n // padding bottom\n p -= quadWidth * (y + 1 + row - height);\n }\n\n if (x + col >= quadWidth) {\n // padding right\n p -= x + col - quadWidth + 4;\n }\n\n r = imageData[p++];\n g = imageData[p++];\n b = imageData[p++];\n\n /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n // use lookup table (slightly faster)\n YDU[pos] =\n ((RGB_YUV_TABLE[r] +\n RGB_YUV_TABLE[(g + 256) >> 0] +\n RGB_YUV_TABLE[(b + 512) >> 0]) >>\n 16) -\n 128;\n UDU[pos] =\n ((RGB_YUV_TABLE[(r + 768) >> 0] +\n RGB_YUV_TABLE[(g + 1024) >> 0] +\n RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n 16) -\n 128;\n VDU[pos] =\n ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n RGB_YUV_TABLE[(g + 1536) >> 0] +\n RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n 16) -\n 128;\n }\n\n DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n x += 32;\n }\n y += 8;\n }\n\n ////////////////////////////////////////////////////////////////\n\n // Do the bit alignment of the EOI marker\n if (bytepos >= 0) {\n var fillbits = [];\n fillbits[1] = bytepos + 1;\n fillbits[0] = (1 << (bytepos + 1)) - 1;\n writeBits(fillbits);\n }\n\n writeWord(0xffd9); //EOI\n\n return new Uint8Array(byteout);\n };\n\n function setQuality(quality) {\n quality = Math.min(Math.max(quality, 1), 100);\n\n if (currentQuality == quality) return; // don't recalc if unchanged\n\n var sf =\n quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n initQuantTables(sf);\n currentQuality = quality;\n //console.log('Quality set to: '+quality +'%');\n }\n\n function init() {\n quality = quality || 50;\n // Create tables\n initCharLookupTable();\n initHuffmanTbl();\n initCategoryNumber();\n initRGBYUVTable();\n\n setQuality(quality);\n }\n init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n this.pos = 0;\n this.buffer = buffer;\n this.datav = new DataView(buffer.buffer);\n this.is_with_alpha = !!is_with_alpha;\n this.bottom_up = true;\n this.flag =\n String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n this.pos += 2;\n if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n throw new Error(\"Invalid BMP File\");\n this.parseHeader();\n this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n this.fileSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.reserved = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.offset = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.headerSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.width = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.height = this.datav.getInt32(this.pos, true);\n this.pos += 4;\n this.planes = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.bitPP = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.compress = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.rawSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.hr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.vr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.colors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.importantColors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n\n if (this.bitPP === 16 && this.is_with_alpha) {\n this.bitPP = 15;\n }\n if (this.bitPP < 15) {\n var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n this.palette = new Array(len);\n for (var i = 0; i < len; i++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var quad = this.datav.getUint8(this.pos++, true);\n this.palette[i] = {\n red: red,\n green: green,\n blue: blue,\n quad: quad\n };\n }\n }\n if (this.height < 0) {\n this.height *= -1;\n this.bottom_up = false;\n }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n this.pos = this.offset;\n try {\n var bitn = \"bit\" + this.bitPP;\n var len = this.width * this.height * 4;\n this.data = new Uint8Array(len);\n\n this[bitn]();\n } catch (e) {\n console.log(\"bit decode error:\" + e);\n }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n var xlen = Math.ceil(this.width / 8);\n var mode = xlen % 4;\n var y;\n for (y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 8 * 4;\n for (var i = 0; i < 8; i++) {\n if (x * 8 + i < this.width) {\n var rgb = this.palette[(b >> (7 - i)) & 0x1];\n this.data[location + i * 4] = rgb.blue;\n this.data[location + i * 4 + 1] = rgb.green;\n this.data[location + i * 4 + 2] = rgb.red;\n this.data[location + i * 4 + 3] = 0xff;\n } else {\n break;\n }\n }\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n var xlen = Math.ceil(this.width / 2);\n var mode = xlen % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 2 * 4;\n\n var before = b >> 4;\n var after = b & 0x0f;\n\n var rgb = this.palette[before];\n this.data[location] = rgb.blue;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.red;\n this.data[location + 3] = 0xff;\n\n if (x * 2 + 1 >= this.width) break;\n\n rgb = this.palette[after];\n this.data[location + 4] = rgb.blue;\n this.data[location + 4 + 1] = rgb.green;\n this.data[location + 4 + 2] = rgb.red;\n this.data[location + 4 + 3] = 0xff;\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n var mode = this.width % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n if (b < this.palette.length) {\n var rgb = this.palette[b];\n this.data[location] = rgb.red;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.blue;\n this.data[location + 3] = 0xff;\n } else {\n this.data[location] = 0xff;\n this.data[location + 1] = 0xff;\n this.data[location + 2] = 0xff;\n this.data[location + 3] = 0xff;\n }\n }\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n var alpha = B >> 15 ? 0xff : 0x00;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n var _111111 = parseInt(\"111111\", 2),\n _1_6 = _111111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var alpha = 0xff;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n var red = (((B >> 11) / _1_5) * 255) | 0;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = 0xff;\n }\n //skip extra bytes\n this.pos += this.width % 4;\n }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var alpha = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n //this.pos += (this.width % 4);\n }\n};\n\nBmpDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { BmpDecoder };\n","function WebPDecoder(imageData) {\n /** @license\n * Copyright 2011 Google Inc.\n *\n * This code is licensed under the same terms as WebM:\n * Software License Agreement: http://www.webmproject.org/license/software/\n * Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n * -----------------------------------------------------------------------------\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -----------------------------------------------------------------------------\n *\n * Copyright 2011-2017 Dominik Homberger\n * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n *\n * Author: Dominik Homberger (dominik.homberger@gmail.com)\n */\n\n var self = this;\n var UpsampleRgbLinePair,\n UpsampleBgrLinePair,\n UpsampleRgbaLinePair,\n UpsampleBgraLinePair,\n UpsampleArgbLinePair,\n UpsampleArgbLinePair,\n UpsampleRgba4444LinePair,\n UpsampleRgb565LinePair;\n\n function x(F) {\n if (!F) throw Error(\"assert :P\");\n }\n function fa(F, L, J) {\n for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n return !1;\n }\n function I(F, L, J, H, Z) {\n for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n }\n function M(F, L, J, H) {\n for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n }\n function V(F) {\n return new Int32Array(F);\n }\n function wa(F, L) {\n for (var J = [], H = 0; H < F; H++) J.push(new L());\n return J;\n }\n function wb() {\n function F(J, H, Z) {\n for (var O = Z[H], L = 0; L < O; L++) {\n J.push(Z.length > H + 1 ? [] : 0);\n if (Z.length < H + 1) break;\n F(J[L], H + 1, Z);\n }\n }\n var L = [];\n F(L, 0, [3, 11]);\n return L;\n }\n function Ed(F, L) {\n function J(H, O, F) {\n for (var Z = F[O], ma = 0; ma < Z; ma++) {\n H.push(F.length > O + 1 ? [] : new L());\n if (F.length < O + 1) break;\n J(H[ma], O + 1, F);\n }\n }\n var H = [];\n J(H, 0, F);\n return H;\n }\n var _WebPDecoder = function() {\n var self = this;\n function F() {\n V(55);\n }\n function L(a, b) {\n for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n return c ? (a & (c - 1)) + c : a;\n }\n function J(a, b, c, d, e) {\n x(!(d % c));\n do (d -= c), (a[b + d] = e);\n while (0 < d);\n }\n function H(a, b, c, d, e, f) {\n var g = b,\n h = 1 << c,\n k,\n l,\n m = V(16),\n n = V(16);\n x(0 != e);\n x(null != d);\n x(null != a);\n x(0 < c);\n for (l = 0; l < e; ++l) {\n if (15 < d[l]) return 0;\n ++m[d[l]];\n }\n if (m[0] == e) return 0;\n n[1] = 0;\n for (k = 1; 15 > k; ++k) {\n if (m[k] > 1 << k) return 0;\n n[k + 1] = n[k] + m[k];\n }\n for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n if (1 == n[15])\n return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n var r = -1,\n q = h - 1,\n t = 0,\n v = 1,\n p = 1,\n u,\n w = 1 << c;\n l = 0;\n k = 1;\n for (e = 2; k <= c; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k])\n (d = new O()),\n (d.g = k),\n (d.value = f[l++]),\n J(a, g + t, e, w, d),\n (t = L(t, k));\n }\n k = c + 1;\n for (e = 2; 15 >= k; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k]) {\n d = new O();\n if ((t & q) != r) {\n g += w;\n r = k;\n for (u = 1 << (r - c); 15 > r; ) {\n u -= m[r];\n if (0 >= u) break;\n ++r;\n u <<= 1;\n }\n u = r - c;\n w = 1 << u;\n h += w;\n r = t & q;\n a[b + r].g = u + c;\n a[b + r].value = g - b - r;\n }\n d.g = k - c;\n d.value = f[l++];\n J(a, g + (t >> c), e, w, d);\n t = L(t, k);\n }\n }\n return v != 2 * n[15] - 1 ? 0 : h;\n }\n function Z(a, b, c, d, e) {\n x(2328 >= e);\n if (512 >= e) var f = V(512);\n else if (((f = V(e)), null == f)) return 0;\n return H(a, b, c, d, e, f);\n }\n function O() {\n this.value = this.g = 0;\n }\n function Fd() {\n this.value = this.g = 0;\n }\n function Ub() {\n this.G = wa(5, O);\n this.H = V(5);\n this.jc = this.Qb = this.qb = this.nd = 0;\n this.pd = wa(xb, Fd);\n }\n function ma(a, b, c, d) {\n x(null != a);\n x(null != b);\n x(2147483648 > d);\n a.Ca = 254;\n a.I = 0;\n a.b = -8;\n a.Ka = 0;\n a.oa = b;\n a.pa = c;\n a.Jd = b;\n a.Yc = c + d;\n a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n Qa(a);\n }\n function na(a, b) {\n for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n return c;\n }\n function ca(a, b) {\n var c = na(a, b);\n return G(a) ? -c : c;\n }\n function cb(a, b, c, d) {\n var e,\n f = 0;\n x(null != a);\n x(null != b);\n x(4294967288 > d);\n a.Sb = d;\n a.Ra = 0;\n a.u = 0;\n a.h = 0;\n 4 < d && (d = 4);\n for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n a.Ra = f;\n a.bb = d;\n a.oa = b;\n a.pa = c;\n }\n function Vb(a) {\n for (; 8 <= a.u && a.bb < a.Sb; )\n (a.Ra >>>= 8),\n (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n ++a.bb,\n (a.u -= 8);\n db(a) && ((a.h = 1), (a.u = 0));\n }\n function D(a, b) {\n x(0 <= b);\n if (!a.h && b <= Gd) {\n var c = pb(a) & Hd[b];\n a.u += b;\n Vb(a);\n return c;\n }\n a.h = 1;\n return (a.u = 0);\n }\n function Wb() {\n this.b = this.Ca = this.I = 0;\n this.oa = [];\n this.pa = 0;\n this.Jd = [];\n this.Yc = 0;\n this.Zc = [];\n this.Ka = 0;\n }\n function Ra() {\n this.Ra = 0;\n this.oa = [];\n this.h = this.u = this.bb = this.Sb = this.pa = 0;\n }\n function pb(a) {\n return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n }\n function db(a) {\n x(a.bb <= a.Sb);\n return a.h || (a.bb == a.Sb && a.u > ob);\n }\n function qb(a, b) {\n a.u = b;\n a.h = db(a);\n }\n function Sa(a) {\n a.u >= Xb && (x(a.u >= Xb), Vb(a));\n }\n function Qa(a) {\n x(null != a && null != a.oa);\n a.pa < a.Zc\n ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n : (x(null != a && null != a.oa),\n a.pa < a.Yc\n ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n : a.Ka\n ? (a.b = 0)\n : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n }\n function G(a) {\n return na(a, 1);\n }\n function K(a, b) {\n var c = a.Ca;\n 0 > a.b && Qa(a);\n var d = a.b,\n e = (c * b) >>> 8,\n f = (a.I >>> d > e) + 0;\n f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n d = c;\n for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n d = 7 ^ (e + Id[d]);\n a.b -= d;\n a.Ca = (c << d) - 1;\n return f;\n }\n function ra(a, b, c) {\n a[b + 0] = (c >> 24) & 255;\n a[b + 1] = (c >> 16) & 255;\n a[b + 2] = (c >> 8) & 255;\n a[b + 3] = (c >> 0) & 255;\n }\n function Ta(a, b) {\n return (a[b + 0] << 0) | (a[b + 1] << 8);\n }\n function Yb(a, b) {\n return Ta(a, b) | (a[b + 2] << 16);\n }\n function Ha(a, b) {\n return Ta(a, b) | (Ta(a, b + 2) << 16);\n }\n function Zb(a, b) {\n var c = 1 << b;\n x(null != a);\n x(0 < b);\n a.X = V(c);\n if (null == a.X) return 0;\n a.Mb = 32 - b;\n a.Xa = b;\n return 1;\n }\n function $b(a, b) {\n x(null != a);\n x(null != b);\n x(a.Xa == b.Xa);\n I(b.X, 0, a.X, 0, 1 << b.Xa);\n }\n function ac() {\n this.X = [];\n this.Xa = this.Mb = 0;\n }\n function bc(a, b, c, d) {\n x(null != c);\n x(null != d);\n var e = c[0],\n f = d[0];\n 0 == e && (e = (a * f + b / 2) / b);\n 0 == f && (f = (b * e + a / 2) / a);\n if (0 >= e || 0 >= f) return 0;\n c[0] = e;\n d[0] = f;\n return 1;\n }\n function xa(a, b) {\n return (a + (1 << b) - 1) >>> b;\n }\n function yb(a, b) {\n return (\n (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n 0\n );\n }\n function X(a, b) {\n self[b] = function(b, d, e, f, g, h, k) {\n var c;\n for (c = 0; c < g; ++c) {\n var m = self[a](h[k + c - 1], e, f + c);\n h[k + c] = yb(b[d + c], m);\n }\n };\n }\n function Jd() {\n this.ud = this.hd = this.jd = 0;\n }\n function aa(a, b) {\n return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n }\n function sa(a) {\n if (0 <= a && 256 > a) return a;\n if (0 > a) return 0;\n if (255 < a) return 255;\n }\n function eb(a, b) {\n return sa(a + ((a - b + 0.5) >> 1));\n }\n function Ia(a, b, c) {\n return Math.abs(b - c) - Math.abs(a - c);\n }\n function cc(a, b, c, d, e, f, g) {\n d = f[g - 1];\n for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n }\n function Kd(a, b, c, d, e) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + f],\n h = (g >> 8) & 255,\n k = g & 16711935,\n k = k + ((h << 16) + h),\n k = k & 16711935;\n d[e + f] = ((g & 4278255360) + k) >>> 0;\n }\n }\n function dc(a, b) {\n b.jd = (a >> 0) & 255;\n b.hd = (a >> 8) & 255;\n b.ud = (a >> 16) & 255;\n }\n function Ld(a, b, c, d, e, f) {\n var g;\n for (g = 0; g < d; ++g) {\n var h = b[c + g],\n k = h >>> 8,\n l = h >>> 16,\n m = h,\n l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n l = l & 255,\n m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n m = m & 255;\n e[f + g] = (h & 4278255360) + (l << 16) + m;\n }\n }\n function ec(a, b, c, d, e) {\n self[b] = function(a, b, c, k, l, m, n, r, q) {\n for (k = n; k < r; ++k)\n for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n };\n self[a] = function(a, b, h, k, l, m, n) {\n var f = 8 >> a.b,\n g = a.Ea,\n t = a.K[0],\n v = a.w;\n if (8 > f)\n for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n var p = 0,\n u;\n for (u = 0; u < g; ++u)\n u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n }\n else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n };\n }\n function Md(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n }\n }\n function Nd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 24) & 255;\n }\n }\n function Od(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 240) | ((f >> 12) & 15),\n f = ((f >> 0) & 240) | ((f >> 28) & 15);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Pd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 248) | ((f >> 13) & 7),\n f = ((f >> 5) & 224) | ((f >> 3) & 31);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Qd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 16) & 255;\n }\n }\n function fb(a, b, c, d, e, f) {\n if (0 == f)\n for (c = b + c; b < c; )\n (f = a[b++]),\n ra(\n d,\n ((f[0] >> 24) |\n ((f[1] >> 8) & 65280) |\n ((f[2] << 8) & 16711680) |\n (f[3] << 24)) >>>\n 0\n ),\n (e += 32);\n else I(d, e, a, b, c);\n }\n function gb(a, b) {\n self[b][0] = self[a + \"0\"];\n self[b][1] = self[a + \"1\"];\n self[b][2] = self[a + \"2\"];\n self[b][3] = self[a + \"3\"];\n self[b][4] = self[a + \"4\"];\n self[b][5] = self[a + \"5\"];\n self[b][6] = self[a + \"6\"];\n self[b][7] = self[a + \"7\"];\n self[b][8] = self[a + \"8\"];\n self[b][9] = self[a + \"9\"];\n self[b][10] = self[a + \"10\"];\n self[b][11] = self[a + \"11\"];\n self[b][12] = self[a + \"12\"];\n self[b][13] = self[a + \"13\"];\n self[b][14] = self[a + \"0\"];\n self[b][15] = self[a + \"0\"];\n }\n function hb(a) {\n return a == zb || a == Ab || a == Ja || a == Bb;\n }\n function Rd() {\n this.eb = [];\n this.size = this.A = this.fb = 0;\n }\n function Sd() {\n this.y = [];\n this.f = [];\n this.ea = [];\n this.F = [];\n this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n }\n function Cb() {\n this.Rd = this.height = this.width = this.S = 0;\n this.f = {};\n this.f.RGBA = new Rd();\n this.f.kb = new Sd();\n this.sd = null;\n }\n function Td() {\n this.width = [0];\n this.height = [0];\n this.Pd = [0];\n this.Qd = [0];\n this.format = [0];\n }\n function Ud() {\n this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n }\n function Vd(a) {\n alert(\"todo:WebPSamplerProcessPlane\");\n return a.T;\n }\n function Wd(a, b) {\n var c = a.T,\n d = b.ba.f.RGBA,\n e = d.eb,\n f = d.fb + a.ka * d.A,\n g = P[b.ba.S],\n h = a.y,\n k = a.O,\n l = a.f,\n m = a.N,\n n = a.ea,\n r = a.W,\n q = b.cc,\n t = b.dc,\n v = b.Mc,\n p = b.Nc,\n u = a.ka,\n w = a.ka + a.T,\n y = a.U,\n A = (y + 1) >> 1;\n 0 == u\n ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n ++c);\n for (; u + 2 < w; u += 2)\n (q = l),\n (t = m),\n (v = n),\n (p = r),\n (m += a.Rc),\n (r += a.Rc),\n (f += 2 * d.A),\n (k += 2 * a.fa),\n g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n k += a.fa;\n a.j + w < a.o\n ? (I(b.ec, b.fc, h, k, y),\n I(b.cc, b.dc, l, m, A),\n I(b.Mc, b.Nc, n, r, A),\n c--)\n : w & 1 ||\n g(\n h,\n k,\n null,\n null,\n l,\n m,\n n,\n r,\n l,\n m,\n n,\n r,\n e,\n f + d.A,\n null,\n null,\n y\n );\n return c;\n }\n function Xd(a, b, c) {\n var d = a.F,\n e = [a.J];\n if (null != d) {\n var f = a.U,\n g = b.ba.S,\n h = g == ya || g == Ja;\n b = b.ba.f.RGBA;\n var k = [0],\n l = a.ka;\n k[0] = a.T;\n a.Kb &&\n (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n var m = b.eb,\n l = b.fb + l * b.A;\n a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n x(c == k);\n a && hb(g) && za(m, l, h, f, k, b.A);\n }\n return 0;\n }\n function gc(a) {\n var b = a.ma,\n c = b.ba.S,\n d = 11 > c,\n e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n b.memory = null;\n b.Ib = null;\n b.Jb = null;\n b.Nd = null;\n if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n e && hb(c) && ic();\n if (a.da) alert(\"todo:use_scaling\");\n else {\n if (d) {\n if (((b.Ib = Vd), a.Kb)) {\n c = (a.U + 1) >> 1;\n b.memory = V(a.U + 2 * c);\n if (null == b.memory) return 0;\n b.ec = b.memory;\n b.fc = 0;\n b.cc = b.ec;\n b.dc = b.fc + a.U;\n b.Mc = b.cc;\n b.Nc = b.dc + c;\n b.Ib = Wd;\n ic();\n }\n } else alert(\"todo:EmitYUV\");\n e && ((b.Jb = Xd), d && Aa());\n }\n if (d && !jc) {\n for (a = 0; 256 > a; ++a)\n (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n (Zd[a] = -22014 * (a - 128) + Ba),\n ($d[a] = -45773 * (a - 128)),\n (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n for (a = ta; a < Eb; ++a)\n (b = (76283 * (a - 16) + Ba) >> Wa),\n (be[a - ta] = ga(b, 255)),\n (ce[a - ta] = ga((b + 8) >> 4, 15));\n jc = 1;\n }\n return 1;\n }\n function kc(a) {\n var b = a.ma,\n c = a.U,\n d = a.T;\n x(!(a.ka & 1));\n if (0 >= c || 0 >= d) return 0;\n c = b.Ib(a, b);\n null != b.Jb && b.Jb(a, b, c);\n b.Dc += c;\n return 1;\n }\n function lc(a) {\n a.ma.memory = null;\n }\n function mc(a, b, c, d) {\n if (47 != D(a, 8)) return 0;\n b[0] = D(a, 14) + 1;\n c[0] = D(a, 14) + 1;\n d[0] = D(a, 1);\n return 0 != D(a, 3) ? 0 : !a.h;\n }\n function ib(a, b) {\n if (4 > a) return a + 1;\n var c = (a - 2) >> 1;\n return ((2 + (a & 1)) << c) + D(b, c) + 1;\n }\n function nc(a, b) {\n if (120 < b) return b - 120;\n var c = de[b - 1],\n c = (c >> 4) * a + (8 - (c & 15));\n return 1 <= c ? c : 1;\n }\n function ua(a, b, c) {\n var d = pb(c);\n b += d & 255;\n var e = a[b].g - 8;\n 0 < e &&\n (qb(c, c.u + 8),\n (d = pb(c)),\n (b += a[b].value),\n (b += d & ((1 << e) - 1)));\n qb(c, c.u + a[b].g);\n return a[b].value;\n }\n function ub(a, b, c) {\n c.g += a.g;\n c.value += (a.value << b) >>> 0;\n x(8 >= c.g);\n return a.g;\n }\n function ha(a, b, c) {\n var d = a.xc;\n b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n x(b < a.Wb);\n return a.Ya[b];\n }\n function oc(a, b, c, d) {\n var e = a.ab,\n f = a.c * b,\n g = a.C;\n b = g + b;\n var h = c,\n k = d;\n d = a.Ta;\n for (c = a.Ua; 0 < e--; ) {\n var l = a.gc[e],\n m = g,\n n = b,\n r = h,\n q = k,\n k = d,\n h = c,\n t = l.Ea;\n x(m < n);\n x(n <= l.nc);\n switch (l.hc) {\n case 2:\n pc(r, q, (n - m) * t, k, h);\n break;\n case 0:\n var v = l,\n p = m,\n u = n,\n w = k,\n y = h,\n A = v.Ea;\n 0 == p &&\n (ee(r, q, null, null, 1, w, y),\n cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n (q += A),\n (y += A),\n ++p);\n for (\n var E = 1 << v.b,\n B = E - 1,\n C = xa(A, v.b),\n N = v.K,\n v = v.w + (p >> v.b) * C;\n p < u;\n\n ) {\n var z = N,\n Q = v,\n S = 1;\n for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n var K = qc[(z[Q++] >> 8) & 15],\n D = (S & ~B) + E;\n D > A && (D = A);\n K(r, q + +S, w, y + S - A, D - S, w, y + S);\n S = D;\n }\n q += A;\n y += A;\n ++p;\n p & B || (v += C);\n }\n n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n break;\n case 1:\n t = r;\n u = q;\n r = l.Ea;\n q = 1 << l.b;\n w = q - 1;\n y = r & ~w;\n A = r - y;\n p = xa(r, l.b);\n E = l.K;\n for (l = l.w + (m >> l.b) * p; m < n; ) {\n B = E;\n C = l;\n N = new Jd();\n v = u + y;\n for (z = u + r; u < v; )\n dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n u < z &&\n (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n ++m;\n m & w || (l += p);\n }\n break;\n case 3:\n if (r == k && q == h && 0 < l.b) {\n y = (n - m) * xa(l.Ea, l.b);\n t = h + (n - m) * t - y;\n u = k;\n r = t;\n q = k;\n w = h;\n A = y;\n p = [];\n for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n rc(l, m, n, k, t, k, h);\n } else rc(l, m, n, r, q, k, h);\n }\n h = d;\n k = c;\n }\n k != c && I(d, c, h, k, f);\n }\n function ge(a, b) {\n var c = a.V,\n d = a.Ba + a.c * a.C,\n e = b - a.C;\n x(b <= a.l.o);\n x(16 >= e);\n if (0 < e) {\n var f = a.l,\n g = a.Ta,\n h = a.Ua,\n k = f.width;\n oc(a, e, c, d);\n h = [h];\n c = a.C;\n d = b;\n e = h;\n x(c < d);\n x(f.v < f.va);\n d > f.o && (d = f.o);\n if (c < f.j) {\n var l = f.j - c,\n c = f.j;\n e[0] += l * k;\n }\n c >= d\n ? (c = 0)\n : ((e[0] += 4 * f.v),\n (f.ka = c - f.j),\n (f.U = f.va - f.v),\n (f.T = d - c),\n (c = 1));\n if (c) {\n h = h[0];\n c = a.ca;\n if (11 > c.S) {\n for (\n var m = c.f.RGBA,\n d = c.S,\n e = f.U,\n f = f.T,\n l = m.eb,\n n = m.A,\n r = f,\n m = m.fb + a.Ma * m.A;\n 0 < r--;\n\n ) {\n var q = g,\n t = h,\n v = e,\n p = l,\n u = m;\n switch (d) {\n case Ca:\n sc(q, t, v, p, u);\n break;\n case Ua:\n Gb(q, t, v, p, u);\n break;\n case zb:\n Gb(q, t, v, p, u);\n za(p, u, 0, v, 1, 0);\n break;\n case tc:\n uc(q, t, v, p, u);\n break;\n case Va:\n fb(q, t, v, p, u, 1);\n break;\n case Ab:\n fb(q, t, v, p, u, 1);\n za(p, u, 0, v, 1, 0);\n break;\n case ya:\n fb(q, t, v, p, u, 0);\n break;\n case Ja:\n fb(q, t, v, p, u, 0);\n za(p, u, 1, v, 1, 0);\n break;\n case Db:\n Hb(q, t, v, p, u);\n break;\n case Bb:\n Hb(q, t, v, p, u);\n vc(p, u, v, 1, 0);\n break;\n case wc:\n xc(q, t, v, p, u);\n break;\n default:\n x(0);\n }\n h += k;\n m += n;\n }\n a.Ma += f;\n } else alert(\"todo:EmitRescaledRowsYUVA\");\n x(a.Ma <= c.height);\n }\n }\n a.C = b;\n x(a.C <= a.i);\n }\n function yc(a) {\n var b;\n if (0 < a.ua) return 0;\n for (b = 0; b < a.Wb; ++b) {\n var c = a.Ya[b].G,\n d = a.Ya[b].H;\n if (\n 0 < c[1][d[1] + 0].g ||\n 0 < c[2][d[2] + 0].g ||\n 0 < c[3][d[3] + 0].g\n )\n return 0;\n }\n return 1;\n }\n function zc(a, b, c, d, e, f) {\n if (0 != a.Z) {\n var g = a.qd,\n h = a.rd;\n for (x(null != ia[a.Z]); b < c; ++b)\n ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n a.qd = g;\n a.rd = h;\n }\n }\n function Ib(a, b) {\n var c = a.l.ma,\n d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n d = a.C < d ? d : a.C;\n x(b <= a.l.o);\n if (b > d) {\n var e = a.l.width,\n f = c.ca,\n g = c.tb + e * d,\n h = a.V,\n k = a.Ba + a.c * d,\n l = a.gc;\n x(1 == a.ab);\n x(3 == l[0].hc);\n he(l[0], d, b, h, k, f, g);\n zc(c, d, b, f, g, e);\n }\n a.C = a.Ma = b;\n }\n function Jb(a, b, c, d, e, f, g) {\n var h = a.$ / d,\n k = a.$ % d,\n l = a.m,\n m = a.s,\n n = c + a.$,\n r = n;\n e = c + d * e;\n var q = c + d * f,\n t = 280 + m.ua,\n v = a.Pb ? h : 16777216,\n p = 0 < m.ua ? m.Wa : null,\n u = m.wc,\n w = n < q ? ha(m, k, h) : null;\n x(a.C < f);\n x(q <= e);\n var y = !1;\n a: for (;;) {\n for (; y || n < q; ) {\n var A = 0;\n if (h >= v) {\n var v = a,\n E = n - c;\n x(v.Pb);\n v.wd = v.m;\n v.xd = E;\n 0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n v = h + ie;\n }\n k & u || (w = ha(m, k, h));\n x(null != w);\n w.Qb && ((b[n] = w.qb), (y = !0));\n if (!y)\n if ((Sa(l), w.jc)) {\n var A = l,\n E = b,\n B = n,\n C = w.pd[pb(A) & (xb - 1)];\n x(w.jc);\n 256 > C.g\n ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n 0 == A && (y = !0);\n } else A = ua(w.G[0], w.H[0], l);\n if (l.h) break;\n if (y || 256 > A) {\n if (!y)\n if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n else {\n Sa(l);\n y = ua(w.G[1], w.H[1], l);\n Sa(l);\n E = ua(w.G[2], w.H[2], l);\n B = ua(w.G[3], w.H[3], l);\n if (l.h) break;\n b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n }\n y = !1;\n ++n;\n ++k;\n if (\n k >= d &&\n ((k = 0),\n ++h,\n null != g && h <= f && !(h % 16) && g(a, h),\n null != p)\n )\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (280 > A) {\n A = ib(A - 256, l);\n E = ua(w.G[4], w.H[4], l);\n Sa(l);\n E = ib(E, l);\n E = nc(d, E);\n if (l.h) break;\n if (n - c < E || e - n < A) break a;\n else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n n += A;\n for (k += A; k >= d; )\n (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n x(n <= e);\n k & u && (w = ha(m, k, h));\n if (null != p)\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (A < t) {\n y = A - 280;\n for (x(null != p); r < n; )\n (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n A = n;\n E = p;\n x(!(y >>> E.Xa));\n b[A] = E.X[y];\n y = !0;\n } else break a;\n y || x(l.h == db(l));\n }\n if (a.Pb && l.h && n < e)\n x(a.m.h),\n (a.a = 5),\n (a.m = a.wd),\n (a.$ = a.xd),\n 0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n else if (l.h) break a;\n else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n return 1;\n }\n a.a = 3;\n return 0;\n }\n function Ac(a) {\n x(null != a);\n a.vc = null;\n a.yc = null;\n a.Ya = null;\n var b = a.Wa;\n null != b && (b.X = null);\n a.vb = null;\n x(null != a);\n }\n function Bc() {\n var a = new je();\n if (null == a) return null;\n a.a = 0;\n a.xb = Cc;\n gb(\"Predictor\", \"VP8LPredictors\");\n gb(\"Predictor\", \"VP8LPredictors_C\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n pc = Kd;\n Fb = Ld;\n sc = Md;\n Gb = Nd;\n Hb = Od;\n xc = Pd;\n uc = Qd;\n self.VP8LMapColor32b = ke;\n self.VP8LMapColor8b = le;\n return a;\n }\n function rb(a, b, c, d, e) {\n var f = 1,\n g = [a],\n h = [b],\n k = d.m,\n l = d.s,\n m = null,\n n = 0;\n a: for (;;) {\n if (c)\n for (; f && D(k, 1); ) {\n var r = g,\n q = h,\n t = d,\n v = 1,\n p = t.m,\n u = t.gc[t.ab],\n w = D(p, 2);\n if (t.Oc & (1 << w)) f = 0;\n else {\n t.Oc |= 1 << w;\n u.hc = w;\n u.Ea = r[0];\n u.nc = q[0];\n u.K = [null];\n ++t.ab;\n x(4 >= t.ab);\n switch (w) {\n case 0:\n case 1:\n u.b = D(p, 3) + 2;\n v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n u.K = u.K[0];\n break;\n case 3:\n var y = D(p, 8) + 1,\n A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n r[0] = xa(u.Ea, A);\n u.b = A;\n var v = rb(y, 1, 0, t, u.K),\n E;\n if ((E = v)) {\n var B,\n C = y,\n N = u,\n z = 1 << (8 >> N.b),\n Q = V(z);\n if (null == Q) E = 0;\n else {\n var S = N.K[0],\n K = N.w;\n Q[0] = N.K[0][0];\n for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n for (; B < 4 * z; ++B) Q[B] = 0;\n N.K[0] = null;\n N.K[0] = Q;\n E = 1;\n }\n }\n v = E;\n break;\n case 2:\n break;\n default:\n x(0);\n }\n f = v;\n }\n }\n g = g[0];\n h = h[0];\n if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n d.a = 3;\n break a;\n }\n var H;\n if ((H = f))\n b: {\n var F = d,\n G = g,\n L = h,\n J = n,\n T = c,\n Da,\n ba,\n X = F.m,\n R = F.s,\n P = [null],\n U,\n W = 1,\n aa = 0,\n na = me[J];\n c: for (;;) {\n if (T && D(X, 1)) {\n var ca = D(X, 3) + 2,\n ga = xa(G, ca),\n ka = xa(L, ca),\n qa = ga * ka;\n if (!rb(ga, ka, 0, F, P)) break c;\n P = P[0];\n R.xc = ca;\n for (Da = 0; Da < qa; ++Da) {\n var ia = (P[Da] >> 8) & 65535;\n P[Da] = ia;\n ia >= W && (W = ia + 1);\n }\n }\n if (X.h) break c;\n for (ba = 0; 5 > ba; ++ba) {\n var Y = Dc[ba];\n !ba && 0 < J && (Y += 1 << J);\n aa < Y && (aa = Y);\n }\n var ma = wa(W * na, O);\n var ua = W,\n va = wa(ua, Ub);\n if (null == va) var la = null;\n else x(65536 >= ua), (la = va);\n var ha = V(aa);\n if (null == la || null == ha || null == ma) {\n F.a = 1;\n break c;\n }\n var pa = ma;\n for (Da = U = 0; Da < W; ++Da) {\n var ja = la[Da],\n da = ja.G,\n ea = ja.H,\n Fa = 0,\n ra = 1,\n Ha = 0;\n for (ba = 0; 5 > ba; ++ba) {\n Y = Dc[ba];\n da[ba] = pa;\n ea[ba] = U;\n !ba && 0 < J && (Y += 1 << J);\n d: {\n var sa,\n za = Y,\n ta = F,\n oa = ha,\n db = pa,\n eb = U,\n Ia = 0,\n Ka = ta.m,\n fb = D(Ka, 1);\n M(oa, 0, 0, za);\n if (fb) {\n var gb = D(Ka, 1) + 1,\n hb = D(Ka, 1),\n Ja = D(Ka, 0 == hb ? 1 : 8);\n oa[Ja] = 1;\n 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n var ya = 1;\n } else {\n var Ua = V(19),\n Va = D(Ka, 4) + 4;\n if (19 < Va) {\n ta.a = 3;\n var Aa = 0;\n break d;\n }\n for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n var Ba = void 0,\n sb = void 0,\n Wa = ta,\n ib = Ua,\n Ca = za,\n Xa = oa,\n Oa = 0,\n La = Wa.m,\n Ya = 8,\n Za = wa(128, O);\n e: for (;;) {\n if (!Z(Za, 0, 7, ib, 19)) break e;\n if (D(La, 1)) {\n var kb = 2 + 2 * D(La, 3),\n Ba = 2 + D(La, kb);\n if (Ba > Ca) break e;\n } else Ba = Ca;\n for (sb = 0; sb < Ca && Ba--; ) {\n Sa(La);\n var $a = Za[0 + (pb(La) & 127)];\n qb(La, La.u + $a.g);\n var jb = $a.value;\n if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n else {\n var lb = 16 == jb,\n ab = jb - 16,\n mb = oe[ab],\n bb = D(La, pe[ab]) + mb;\n if (sb + bb > Ca) break e;\n else\n for (var nb = lb ? Ya : 0; 0 < bb--; )\n Xa[sb++] = nb;\n }\n }\n Oa = 1;\n break e;\n }\n Oa || (Wa.a = 3);\n ya = Oa;\n }\n (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n }\n if (0 == Aa) break c;\n ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n Fa += pa[U].g;\n U += Aa;\n if (3 >= ba) {\n var Pa = ha[0],\n tb;\n for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n Ha += Pa;\n }\n }\n ja.nd = ra;\n ja.Qb = 0;\n ra &&\n ((ja.qb =\n ((da[3][ea[3] + 0].value << 24) |\n (da[1][ea[1] + 0].value << 16) |\n da[2][ea[2] + 0].value) >>>\n 0),\n 0 == Fa &&\n 256 > da[0][ea[0] + 0].value &&\n ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n ja.jc = !ja.Qb && 6 > Ha;\n if (ja.jc) {\n var Ga,\n Ea = ja;\n for (Ga = 0; Ga < xb; ++Ga) {\n var Ma = Ga,\n Na = Ea.pd[Ma],\n vb = Ea.G[0][Ea.H[0] + Ma];\n 256 <= vb.value\n ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n : ((Na.g = 0),\n (Na.value = 0),\n (Ma >>= ub(vb, 8, Na)),\n (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n }\n }\n }\n R.vc = P;\n R.Wb = W;\n R.Ya = la;\n R.yc = ma;\n H = 1;\n break b;\n }\n H = 0;\n }\n f = H;\n if (!f) {\n d.a = 3;\n break a;\n }\n if (0 < n) {\n if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n d.a = 1;\n f = 0;\n break a;\n }\n } else l.ua = 0;\n var Qa = d,\n cb = g,\n ob = h,\n Ra = Qa.s,\n Ta = Ra.xc;\n Qa.c = cb;\n Qa.i = ob;\n Ra.md = xa(cb, Ta);\n Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n if (c) {\n d.xb = re;\n break a;\n }\n m = V(g * h);\n if (null == m) {\n d.a = 1;\n f = 0;\n break a;\n }\n f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n break a;\n }\n f\n ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n : Ac(l);\n return f;\n }\n function Ec(a, b) {\n var c = a.c * a.i,\n d = c + b + 16 * b;\n x(a.c <= b);\n a.V = V(d);\n if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n a.Ta = a.V;\n a.Ua = a.Ba + c + b;\n return 1;\n }\n function se(a, b) {\n var c = a.C,\n d = b - c,\n e = a.V,\n f = a.Ba + a.c * c;\n for (x(b <= a.l.o); 0 < d; ) {\n var g = 16 < d ? 16 : d,\n h = a.l.ma,\n k = a.l.width,\n l = k * g,\n m = h.ca,\n n = h.tb + k * c,\n r = a.Ta,\n q = a.Ua;\n oc(a, g, e, f);\n Fc(r, q, m, n, l);\n zc(h, c, c + g, m, n, k);\n d -= g;\n e += g * a.c;\n c += g;\n }\n x(c == b);\n a.C = a.Ma = b;\n }\n function te(a, b) {\n var c = [0],\n d = [0],\n e = [0];\n a: for (;;) {\n if (null == a) return 0;\n if (null == b) return (a.a = 2), 0;\n a.l = b;\n a.a = 0;\n cb(a.m, b.data, b.w, b.ha);\n if (!mc(a.m, c, d, e)) {\n a.a = 3;\n break a;\n }\n a.xb = Cc;\n b.width = c[0];\n b.height = d[0];\n if (!rb(c[0], d[0], 1, a, null)) break a;\n return 1;\n }\n x(0 != a.a);\n return 0;\n }\n function ue() {\n this.ub = this.yd = this.td = this.Rb = 0;\n }\n function ve() {\n this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n }\n function we() {\n this.Fb = this.Bb = this.Cb = 0;\n this.Zb = V(4);\n this.Lb = V(4);\n }\n function Gc() {\n this.Yb = wb();\n }\n function xe() {\n this.jb = V(3);\n this.Wc = Ed([4, 8], Gc);\n this.Xc = Ed([4, 17], Gc);\n }\n function ye() {\n this.Pc = this.wb = this.Tb = this.zd = 0;\n this.vd = new V(4);\n this.od = new V(4);\n }\n function Xa() {\n this.ld = this.La = this.dd = this.tc = 0;\n }\n function Hc() {\n this.Na = this.la = 0;\n }\n function ze() {\n this.Sc = [0, 0];\n this.Eb = [0, 0];\n this.Qc = [0, 0];\n this.ia = this.lc = 0;\n }\n function Kb() {\n this.ad = V(384);\n this.Za = 0;\n this.Ob = V(16);\n this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n }\n function Ae() {\n this.uc = this.M = this.Nb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.ya = Array(new Kb());\n this.aa = 0;\n this.l = new Oa();\n }\n function Ic() {\n this.y = V(16);\n this.f = V(8);\n this.ea = V(8);\n }\n function Be() {\n this.cb = this.a = 0;\n this.sc = \"\";\n this.m = new Wb();\n this.Od = new ue();\n this.Kc = new ve();\n this.ed = new ye();\n this.Qa = new we();\n this.Ic = this.$c = this.Aa = 0;\n this.D = new Ae();\n this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n this.Jc = wa(8, Wb);\n this.ia = 0;\n new F();\n this.pb = wa(4, ze);\n this.Pa = new xe();\n this.Bd = this.kc = 0;\n this.Ac = [];\n this.Bc = 0;\n this.zc = [0, 0, 0, 0];\n this.Gd = Array(new Ic());\n this.Hd = 0;\n this.rb = Array(new Hc());\n this.sb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.oc = [];\n this.pc = 0;\n this.sa = [];\n this.ta = 0;\n this.qa = [];\n this.ra = 0;\n this.Ha = [];\n this.B = this.R = this.Ia = 0;\n this.Ec = [];\n this.M = this.ja = this.Vb = this.Fc = 0;\n this.ya = Array(new Kb());\n this.L = this.aa = 0;\n this.gd = Ed([4, 2], Xa);\n this.ga = null;\n this.Fa = [];\n this.Cc = this.qc = this.P = 0;\n this.Gb = [];\n this.Uc = 0;\n this.mb = [];\n this.nb = 0;\n this.rc = [];\n this.Ga = this.Vc = 0;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function Oa() {\n this.T = this.U = this.ka = this.height = this.width = 0;\n this.y = [];\n this.f = [];\n this.ea = [];\n this.Rc = this.fa = this.W = this.N = this.O = 0;\n this.ma = \"void\";\n this.put = \"VP8IoPutHook\";\n this.ac = \"VP8IoSetupHook\";\n this.bc = \"VP8IoTeardownHook\";\n this.ha = this.Kb = 0;\n this.data = [];\n this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n this.F = [];\n this.J = 0;\n }\n function Ce() {\n var a = new Be();\n null != a &&\n ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n return a;\n }\n function T(a, b, c) {\n 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n return 0;\n }\n function Jc(a, b, c) {\n return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n }\n function Kc(a, b) {\n if (null == a) return 0;\n a.a = 0;\n a.sc = \"OK\";\n if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n var c = b.data;\n var d = b.w;\n var e = b.ha;\n if (4 > e) return T(a, 7, \"Truncated header.\");\n var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n var g = a.Od;\n g.Rb = !(f & 1);\n g.td = (f >> 1) & 7;\n g.yd = (f >> 4) & 1;\n g.ub = f >> 5;\n if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n d += 3;\n e -= 3;\n var h = a.Kc;\n if (g.Rb) {\n if (7 > e) return T(a, 7, \"cannot parse picture header\");\n if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n h.Td = c[d + 4] >> 6;\n h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n h.Ud = c[d + 6] >> 6;\n d += 7;\n e -= 7;\n a.za = (h.c + 15) >> 4;\n a.Ub = (h.i + 15) >> 4;\n b.width = h.c;\n b.height = h.i;\n b.Da = 0;\n b.j = 0;\n b.v = 0;\n b.va = b.width;\n b.o = b.height;\n b.da = 0;\n b.ib = b.width;\n b.hb = b.height;\n b.U = b.width;\n b.T = b.height;\n f = a.Pa;\n M(f.jb, 0, 255, f.jb.length);\n f = a.Qa;\n x(null != f);\n f.Cb = 0;\n f.Bb = 0;\n f.Fb = 1;\n M(f.Zb, 0, 0, f.Zb.length);\n M(f.Lb, 0, 0, f.Lb);\n }\n if (g.ub > e) return T(a, 7, \"bad partition length\");\n f = a.m;\n ma(f, c, d, g.ub);\n d += g.ub;\n e -= g.ub;\n g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n h = a.Qa;\n var k = a.Pa,\n l;\n x(null != f);\n x(null != h);\n h.Cb = G(f);\n if (h.Cb) {\n h.Bb = G(f);\n if (G(f)) {\n h.Fb = G(f);\n for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n }\n if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n } else h.Bb = 0;\n if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n h = a.ed;\n h.zd = G(f);\n h.Tb = na(f, 6);\n h.wb = na(f, 3);\n h.Pc = G(f);\n if (h.Pc && G(f)) {\n for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n }\n a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n l = d;\n var m = e;\n e = l;\n d = l + m;\n h = m;\n a.Xb = (1 << na(a.m, 2)) - 1;\n k = a.Xb;\n if (m < 3 * k) c = 7;\n else {\n l += 3 * k;\n h -= 3 * k;\n for (m = 0; m < k; ++m) {\n var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n n > h && (n = h);\n ma(a.Jc[+m], c, l, n);\n l += n;\n h -= n;\n e += 3;\n }\n ma(a.Jc[+k], c, l, h);\n c = l < d ? 0 : 5;\n }\n if (0 != c) return T(a, c, \"cannot parse partitions\");\n l = a.m;\n c = na(l, 7);\n e = G(l) ? ca(l, 4) : 0;\n d = G(l) ? ca(l, 4) : 0;\n h = G(l) ? ca(l, 4) : 0;\n k = G(l) ? ca(l, 4) : 0;\n l = G(l) ? ca(l, 4) : 0;\n m = a.Qa;\n for (n = 0; 4 > n; ++n) {\n if (m.Cb) {\n var r = m.Zb[n];\n m.Fb || (r += c);\n } else if (0 < n) {\n a.pb[n] = a.pb[0];\n continue;\n } else r = c;\n var q = a.pb[n];\n q.Sc[0] = Lb[ga(r + e, 127)];\n q.Sc[1] = Mb[ga(r + 0, 127)];\n q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n 8 > q.Eb[1] && (q.Eb[1] = 8);\n q.Qc[0] = Lb[ga(r + k, 117)];\n q.Qc[1] = Mb[ga(r + l, 127)];\n q.lc = r + l;\n }\n if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n G(f);\n g = a.Pa;\n for (c = 0; 4 > c; ++c) {\n for (e = 0; 8 > e; ++e)\n for (d = 0; 3 > d; ++d)\n for (h = 0; 11 > h; ++h)\n (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n (g.Wc[c][e].Yb[d][h] = k);\n for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n }\n a.kc = G(f);\n a.kc && (a.Bd = na(f, 8));\n return (a.cb = 1);\n }\n function De(a, b, c, d, e, f, g) {\n var h = b[e].Yb[c];\n for (c = 0; 16 > e; ++e) {\n if (!K(a, h[c + 0])) return e;\n for (; !K(a, h[c + 1]); )\n if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n var k = b[e + 1].Yb;\n if (K(a, h[c + 2])) {\n var l = a,\n m = h,\n n = c;\n var r = 0;\n if (K(l, m[n + 3]))\n if (K(l, m[n + 6])) {\n h = 0;\n r = K(l, m[n + 8]);\n m = K(l, m[n + 9 + r]);\n n = 2 * r + m;\n r = 0;\n for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n r += 3 + (8 << n);\n } else\n K(l, m[n + 7])\n ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n : (r = 5 + K(l, 159));\n else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n h = k[2];\n } else (r = 1), (h = k[1]);\n k = g + Ie[e];\n l = a;\n 0 > l.b && Qa(l);\n var m = l.b,\n n = l.Ca >> 1,\n q = (n - (l.I >> m)) >> 31;\n --l.b;\n l.Ca += q;\n l.Ca |= 1;\n l.I -= ((n + 1) & q) << m;\n f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n }\n return 16;\n }\n function Lc(a) {\n var b = a.rb[a.sb - 1];\n b.la = 0;\n b.Na = 0;\n M(a.zc, 0, 0, a.zc.length);\n a.ja = 0;\n }\n function Je(a, b) {\n for (a.M = 0; a.M < a.Va; ++a.M) {\n var c = a.Jc[a.M & a.Xb],\n d = a.m,\n e = a,\n f;\n for (f = 0; f < e.za; ++f) {\n var g = d;\n var h = e;\n var k = h.Ac,\n l = h.Bc + 4 * f,\n m = h.zc,\n n = h.ya[h.aa + f];\n h.Qa.Bb\n ? (n.$b = K(g, h.Pa.jb[0])\n ? 2 + K(g, h.Pa.jb[2])\n : K(g, h.Pa.jb[1]))\n : (n.$b = 0);\n h.kc && (n.Ad = K(g, h.Bd));\n n.Za = !K(g, 145) + 0;\n if (n.Za) {\n var r = n.Ob,\n q = 0;\n for (h = 0; 4 > h; ++h) {\n var t = m[0 + h];\n var v;\n for (v = 0; 4 > v; ++v) {\n t = Ke[k[l + v]][t];\n for (var p = Mc[K(g, t[0])]; 0 < p; )\n p = Mc[2 * p + K(g, t[p])];\n t = -p;\n k[l + v] = t;\n }\n I(r, q, k, l, 4);\n q += 4;\n m[0 + h] = t;\n }\n } else\n (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n (n.Ob[0] = t),\n M(k, l, t, 4),\n M(m, 0, t, 4);\n n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n }\n if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n for (; a.ja < a.za; ++a.ja) {\n d = a;\n e = c;\n g = d.rb[d.sb - 1];\n k = d.rb[d.sb + d.ja];\n f = d.ya[d.aa + d.ja];\n if ((l = d.kc ? f.Ad : 0))\n (g.la = k.la = 0),\n f.Za || (g.Na = k.Na = 0),\n (f.Hc = 0),\n (f.Gc = 0),\n (f.ia = 0);\n else {\n var u,\n w,\n g = k,\n k = e,\n l = d.Pa.Xc,\n m = d.ya[d.aa + d.ja],\n n = d.pb[m.$b];\n h = m.ad;\n r = 0;\n q = d.rb[d.sb - 1];\n t = v = 0;\n M(h, r, 0, 384);\n if (m.Za) {\n var y = 0;\n var A = l[3];\n } else {\n p = V(16);\n var E = g.Na + q.Na;\n E = oa(k, l[1], E, n.Eb, 0, p, 0);\n g.Na = q.Na = (0 < E) + 0;\n if (1 < E) Nc(p, 0, h, r);\n else {\n var B = (p[0] + 3) >> 3;\n for (p = 0; 256 > p; p += 16) h[r + p] = B;\n }\n y = 1;\n A = l[0];\n }\n var C = g.la & 15;\n var N = q.la & 15;\n for (p = 0; 4 > p; ++p) {\n var z = N & 1;\n for (B = w = 0; 4 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, A, E, n.Sc, y, h, r)),\n (z = E > y),\n (C = (C >> 1) | (z << 7)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 4;\n N = (N >> 1) | (z << 7);\n v = ((v << 8) | w) >>> 0;\n }\n A = C;\n y = N >> 4;\n for (u = 0; 4 > u; u += 2) {\n w = 0;\n C = g.la >> (4 + u);\n N = q.la >> (4 + u);\n for (p = 0; 2 > p; ++p) {\n z = N & 1;\n for (B = 0; 2 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n (z = 0 < E),\n (C = (C >> 1) | (z << 3)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 2;\n N = (N >> 1) | (z << 5);\n }\n t |= w << (4 * u);\n A |= (C << 4) << u;\n y |= (N & 240) << u;\n }\n g.la = A;\n q.la = y;\n m.Hc = v;\n m.Gc = t;\n m.ia = t & 43690 ? 0 : n.ia;\n l = !(v | t);\n }\n 0 < d.L &&\n ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n (d.wa[d.Y + d.ja].La |= !l));\n if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n }\n Lc(a);\n c = a;\n d = b;\n e = 1;\n f = c.D;\n g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n if (0 == c.Aa)\n a: {\n (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n w = c.D;\n f = w.Nb;\n t = Ya[c.L];\n g = t * c.R;\n k = (t / 2) * c.B;\n p = 16 * f * c.R;\n B = 8 * f * c.B;\n l = c.sa;\n m = c.ta - g + p;\n n = c.qa;\n h = c.ra - k + B;\n r = c.Ha;\n q = c.Ia - k + B;\n C = w.M;\n N = 0 == C;\n v = C >= c.Va - 1;\n 2 == c.Aa && Oc(c, w);\n if (w.uc)\n for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n var Q = E;\n y = w;\n A = z;\n var S = Q.D,\n D = S.Nb;\n u = Q.R;\n var S = S.wa[S.Y + y],\n F = Q.sa,\n H = Q.ta + 16 * D * u + 16 * y,\n J = S.dd,\n G = S.tc;\n if (0 != G)\n if ((x(3 <= G), 1 == Q.L))\n 0 < y && Pc(F, H, u, G + 4),\n S.La && Qc(F, H, u, G),\n 0 < A && Rc(F, H, u, G + 4),\n S.La && Sc(F, H, u, G);\n else {\n var L = Q.B,\n O = Q.qa,\n P = Q.ra + 8 * D * L + 8 * y,\n R = Q.Ha,\n Q = Q.Ia + 8 * D * L + 8 * y,\n D = S.ld;\n 0 < y &&\n (Tc(F, H, u, G + 4, J, D),\n Uc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n 0 < A &&\n (Xc(F, H, u, G + 4, J, D),\n Yc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n }\n }\n c.ia && alert(\"todo:DitherRow\");\n if (null != d.put) {\n w = 16 * C;\n C = 16 * (C + 1);\n N\n ? ((d.y = c.sa),\n (d.O = c.ta + p),\n (d.f = c.qa),\n (d.N = c.ra + B),\n (d.ea = c.Ha),\n (d.W = c.Ia + B))\n : ((w -= t),\n (d.y = l),\n (d.O = m),\n (d.f = n),\n (d.N = h),\n (d.ea = r),\n (d.W = q));\n v || (C -= t);\n C > d.o && (C = d.o);\n d.F = null;\n d.J = null;\n if (\n null != c.Fa &&\n 0 < c.Fa.length &&\n w < C &&\n ((d.J = Le(c, d, w, C - w)),\n (d.F = c.mb),\n null == d.F && 0 == d.F.length)\n ) {\n e = T(c, 3, \"Could not decode alpha data.\");\n break a;\n }\n w < d.j &&\n ((t = d.j - w),\n (w = d.j),\n x(!(t & 1)),\n (d.O += c.R * t),\n (d.N += c.B * (t >> 1)),\n (d.W += c.B * (t >> 1)),\n null != d.F && (d.J += d.width * t));\n w < C &&\n ((d.O += d.v),\n (d.N += d.v >> 1),\n (d.W += d.v >> 1),\n null != d.F && (d.J += d.v),\n (d.ka = w - d.j),\n (d.U = d.va - d.v),\n (d.T = C - w),\n (e = d.put(d)));\n }\n f + 1 != c.Ic ||\n v ||\n (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n }\n if (!e) return T(a, 6, \"Output aborted.\");\n }\n return 1;\n }\n function Me(a, b) {\n if (null == a) return 0;\n if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n if (!a.cb && !Kc(a, b)) return 0;\n x(a.cb);\n if (null == b.ac || b.ac(b)) {\n b.ob && (a.L = 0);\n var c = Ya[a.L];\n 2 == a.L\n ? ((a.yb = 0), (a.zb = 0))\n : ((a.yb = (b.v - c) >> 4),\n (a.zb = (b.j - c) >> 4),\n 0 > a.yb && (a.yb = 0),\n 0 > a.zb && (a.zb = 0));\n a.Va = (b.o + 15 + c) >> 4;\n a.Hb = (b.va + 15 + c) >> 4;\n a.Hb > a.za && (a.Hb = a.za);\n a.Va > a.Ub && (a.Va = a.Ub);\n if (0 < a.L) {\n var d = a.ed;\n for (c = 0; 4 > c; ++c) {\n var e;\n if (a.Qa.Cb) {\n var f = a.Qa.Lb[c];\n a.Qa.Fb || (f += d.Tb);\n } else f = d.Tb;\n for (e = 0; 1 >= e; ++e) {\n var g = a.gd[c][e],\n h = f;\n d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n h = 0 > h ? 0 : 63 < h ? 63 : h;\n if (0 < h) {\n var k = h;\n 0 < d.wb &&\n ((k = 4 < d.wb ? k >> 2 : k >> 1),\n k > 9 - d.wb && (k = 9 - d.wb));\n 1 > k && (k = 1);\n g.dd = k;\n g.tc = 2 * h + k;\n g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n } else g.tc = 0;\n g.La = e;\n }\n }\n }\n c = 0;\n } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n if ((c = 0 == c)) {\n if (c) {\n a.$c = 0;\n 0 < a.Aa || (a.Ic = Ne);\n b: {\n c = a.Ic;\n var k = a.za,\n d = 4 * k,\n l = 32 * k,\n m = k + 1,\n n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n r = (2 == a.Aa ? 2 : 1) * k;\n e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n g = d + 832 + e + f;\n if (g != g) c = 0;\n else {\n if (g > a.Vb) {\n a.Vb = 0;\n a.Ec = V(g);\n a.Fc = 0;\n if (null == a.Ec) {\n c = T(a, 1, \"no memory during frame initialization.\");\n break b;\n }\n a.Vb = g;\n }\n g = a.Ec;\n h = a.Fc;\n a.Ac = g;\n a.Bc = h;\n h += d;\n a.Gd = wa(l, Ic);\n a.Hd = 0;\n a.rb = wa(m + 1, Hc);\n a.sb = 1;\n a.wa = n ? wa(n, Xa) : null;\n a.Y = 0;\n a.D.Nb = 0;\n a.D.wa = a.wa;\n a.D.Y = a.Y;\n 0 < a.Aa && (a.D.Y += k);\n x(!0);\n a.oc = g;\n a.pc = h;\n h += 832;\n a.ya = wa(r, Kb);\n a.aa = 0;\n a.D.ya = a.ya;\n a.D.aa = a.aa;\n 2 == a.Aa && (a.D.aa += k);\n a.R = 16 * k;\n a.B = 8 * k;\n l = Ya[a.L];\n k = l * a.R;\n l = (l / 2) * a.B;\n a.sa = g;\n a.ta = h + k;\n a.qa = a.sa;\n a.ra = a.ta + 16 * c * a.R + l;\n a.Ha = a.qa;\n a.Ia = a.ra + 8 * c * a.B + l;\n a.$c = 0;\n h += e;\n a.mb = f ? g : null;\n a.nb = f ? h : null;\n x(h + f <= a.Fc + a.Vb);\n Lc(a);\n M(a.Ac, a.Bc, 0, d);\n c = 1;\n }\n }\n if (c) {\n b.ka = 0;\n b.y = a.sa;\n b.O = a.ta;\n b.f = a.qa;\n b.N = a.ra;\n b.ea = a.Ha;\n b.Vd = a.Ia;\n b.fa = a.R;\n b.Rc = a.B;\n b.F = null;\n b.J = 0;\n if (!ad) {\n for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n for (c = -1020; 1020 >= c; ++c)\n cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n for (c = -112; 112 >= c; ++c)\n dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n for (c = -255; 510 >= c; ++c)\n ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n ad = 1;\n }\n Nc = Oe;\n Za = Pe;\n Nb = Qe;\n pa = Re;\n Ob = Se;\n fd = Te;\n Xc = Ue;\n Tc = Ve;\n Yc = We;\n Uc = Xe;\n Zc = Ye;\n Vc = Ze;\n $c = $e;\n Wc = af;\n Rc = gd;\n Pc = hd;\n Sc = bf;\n Qc = cf;\n W[0] = df;\n W[1] = ef;\n W[2] = ff;\n W[3] = gf;\n W[4] = hf;\n W[5] = jf;\n W[6] = kf;\n W[7] = lf;\n W[8] = mf;\n W[9] = nf;\n Y[0] = of;\n Y[1] = pf;\n Y[2] = qf;\n Y[3] = rf;\n Y[4] = sf;\n Y[5] = tf;\n Y[6] = uf;\n ka[0] = vf;\n ka[1] = wf;\n ka[2] = xf;\n ka[3] = yf;\n ka[4] = zf;\n ka[5] = Af;\n ka[6] = Bf;\n c = 1;\n } else c = 0;\n }\n c && (c = Je(a, b));\n null != b.bc && b.bc(b);\n c &= 1;\n }\n if (!c) return 0;\n a.cb = 0;\n return c;\n }\n function qa(a, b, c, d, e) {\n e = a[b + c + 32 * d] + (e >> 3);\n a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n }\n function kb(a, b, c, d, e, f) {\n qa(a, b, 0, c, d + e);\n qa(a, b, 1, c, d + f);\n qa(a, b, 2, c, d - f);\n qa(a, b, 3, c, d - e);\n }\n function da(a) {\n return ((20091 * a) >> 16) + a;\n }\n function id(a, b, c, d) {\n var e = 0,\n f;\n var g = V(16);\n for (f = 0; 4 > f; ++f) {\n var h = a[b + 0] + a[b + 8];\n var k = a[b + 0] - a[b + 8];\n var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n g[e + 0] = h + m;\n g[e + 1] = k + l;\n g[e + 2] = k - l;\n g[e + 3] = h - m;\n e += 4;\n b++;\n }\n for (f = e = 0; 4 > f; ++f)\n (a = g[e + 0] + 4),\n (h = a + g[e + 8]),\n (k = a - g[e + 8]),\n (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n qa(c, d, 0, 0, h + m),\n qa(c, d, 1, 0, k + l),\n qa(c, d, 2, 0, k - l),\n qa(c, d, 3, 0, h - m),\n e++,\n (d += 32);\n }\n function Te(a, b, c, d) {\n var e = a[b + 0] + 4,\n f = (35468 * a[b + 4]) >> 16,\n g = da(a[b + 4]),\n h = (35468 * a[b + 1]) >> 16;\n a = da(a[b + 1]);\n kb(c, d, 0, e + g, a, h);\n kb(c, d, 1, e + f, a, h);\n kb(c, d, 2, e - f, a, h);\n kb(c, d, 3, e - g, a, h);\n }\n function Pe(a, b, c, d, e) {\n id(a, b, c, d);\n e && id(a, b + 16, c, d + 4);\n }\n function Qe(a, b, c, d) {\n Za(a, b + 0, c, d, 1);\n Za(a, b + 32, c, d + 128, 1);\n }\n function Re(a, b, c, d) {\n a = a[b + 0] + 4;\n var e;\n for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n }\n function Se(a, b, c, d) {\n a[b + 0] && pa(a, b + 0, c, d);\n a[b + 16] && pa(a, b + 16, c, d + 4);\n a[b + 32] && pa(a, b + 32, c, d + 128);\n a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n }\n function Oe(a, b, c, d) {\n var e = V(16),\n f;\n for (f = 0; 4 > f; ++f) {\n var g = a[b + 0 + f] + a[b + 12 + f];\n var h = a[b + 4 + f] + a[b + 8 + f];\n var k = a[b + 4 + f] - a[b + 8 + f];\n var l = a[b + 0 + f] - a[b + 12 + f];\n e[0 + f] = g + h;\n e[8 + f] = g - h;\n e[4 + f] = l + k;\n e[12 + f] = l - k;\n }\n for (f = 0; 4 > f; ++f)\n (a = e[0 + 4 * f] + 3),\n (g = a + e[3 + 4 * f]),\n (h = e[1 + 4 * f] + e[2 + 4 * f]),\n (k = e[1 + 4 * f] - e[2 + 4 * f]),\n (l = a - e[3 + 4 * f]),\n (c[d + 0] = (g + h) >> 3),\n (c[d + 16] = (l + k) >> 3),\n (c[d + 32] = (g - h) >> 3),\n (c[d + 48] = (l - k) >> 3),\n (d += 64);\n }\n function Pb(a, b, c) {\n var d = b - 32,\n e = R,\n f = 255 - a[d - 1],\n g;\n for (g = 0; g < c; ++g) {\n var h = e,\n k = f + a[b - 1],\n l;\n for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n b += 32;\n }\n }\n function ef(a, b) {\n Pb(a, b, 4);\n }\n function wf(a, b) {\n Pb(a, b, 8);\n }\n function pf(a, b) {\n Pb(a, b, 16);\n }\n function qf(a, b) {\n var c;\n for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n }\n function rf(a, b) {\n var c;\n for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n }\n function $a(a, b, c) {\n var d;\n for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n }\n function of(a, b) {\n var c = 16,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n $a(c >> 5, a, b);\n }\n function sf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n $a(c >> 4, a, b);\n }\n function tf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n $a(c >> 4, a, b);\n }\n function uf(a, b) {\n $a(128, a, b);\n }\n function z(a, b, c) {\n return (a + 2 * b + c + 2) >> 2;\n }\n function ff(a, b) {\n var c = b - 32,\n c = new Uint8Array([\n z(a[c - 1], a[c + 0], a[c + 1]),\n z(a[c + 0], a[c + 1], a[c + 2]),\n z(a[c + 1], a[c + 2], a[c + 3]),\n z(a[c + 2], a[c + 3], a[c + 4])\n ]),\n d;\n for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n }\n function gf(a, b) {\n var c = a[b - 1],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n ra(a, b + 32, 16843009 * z(c, d, e));\n ra(a, b + 64, 16843009 * z(d, e, f));\n ra(a, b + 96, 16843009 * z(e, f, f));\n }\n function df(a, b) {\n var c = 4,\n d;\n for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n c >>= 3;\n for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n }\n function hf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n a[b + 3 + 0] = z(l, k, h);\n }\n function kf(a, b) {\n var c = a[b + 1 - 32],\n d = a[b + 2 - 32],\n e = a[b + 3 - 32],\n f = a[b + 4 - 32],\n g = a[b + 5 - 32],\n h = a[b + 6 - 32],\n k = a[b + 7 - 32];\n a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, k);\n }\n function jf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n a[b + 3 + 0] = (k + l + 1) >> 1;\n a[b + 0 + 96] = z(e, d, c);\n a[b + 0 + 64] = z(d, c, f);\n a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n a[b + 3 + 32] = z(h, k, l);\n }\n function lf(a, b) {\n var c = a[b + 0 - 32],\n d = a[b + 1 - 32],\n e = a[b + 2 - 32],\n f = a[b + 3 - 32],\n g = a[b + 4 - 32],\n h = a[b + 5 - 32],\n k = a[b + 6 - 32],\n l = a[b + 7 - 32];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n a[b + 0 + 32] = z(c, d, e);\n a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 3 + 64] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, l);\n }\n function nf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n a[b + 1 + 0] = z(c, d, e);\n a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n b + 2 + 96\n ] = a[b + 3 + 96] = f;\n }\n function mf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96],\n g = a[b - 1 - 32],\n h = a[b + 0 - 32],\n k = a[b + 1 - 32],\n l = a[b + 2 - 32];\n a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n a[b + 0 + 96] = (f + e + 1) >> 1;\n a[b + 3 + 0] = z(h, k, l);\n a[b + 2 + 0] = z(g, h, k);\n a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n a[b + 1 + 96] = z(f, e, d);\n }\n function xf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n }\n function yf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n }\n function lb(a, b, c) {\n var d;\n for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n }\n function vf(a, b) {\n var c = 8,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n lb(c >> 4, a, b);\n }\n function Af(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n lb(c >> 3, a, b);\n }\n function zf(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n lb(c >> 3, a, b);\n }\n function Bf(a, b) {\n lb(128, a, b);\n }\n function ab(a, b, c) {\n var d = a[b - c],\n e = a[b + 0],\n f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n g = mb[112 + ((f + 4) >> 3)];\n a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n a[b + 0] = R[255 + e - g];\n }\n function jd(a, b, c, d) {\n var e = a[b + 0],\n f = a[b + c];\n return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n }\n function kd(a, b, c, d) {\n return (\n 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n );\n }\n function ld(a, b, c, d, e) {\n var f = a[b - 3 * c],\n g = a[b - 2 * c],\n h = a[b - c],\n k = a[b + 0],\n l = a[b + c],\n m = a[b + 2 * c],\n n = a[b + 3 * c];\n return 4 * U[255 + h - k] + U[255 + g - l] > d\n ? 0\n : U[255 + a[b - 4 * c] - f] <= e &&\n U[255 + f - g] <= e &&\n U[255 + g - h] <= e &&\n U[255 + n - m] <= e &&\n U[255 + m - l] <= e &&\n U[255 + l - k] <= e;\n }\n function gd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n }\n function hd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n }\n function bf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n }\n function cf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n }\n function ea(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - 2 * m],\n r = k[l - m],\n q = k[l + 0],\n t = k[l + m],\n v = k[l + 2 * m],\n p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n u = (27 * p + 63) >> 7,\n w = (18 * p + 63) >> 7,\n p = (9 * p + 63) >> 7;\n k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n k[l - 2 * m] = R[255 + n + w];\n k[l - m] = R[255 + r + u];\n k[l + 0] = R[255 + q - u];\n k[l + m] = R[255 + t - w];\n k[l + 2 * m] = R[255 + v - p];\n }\n b += d;\n }\n }\n function Fa(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - m],\n r = k[l + 0],\n q = k[l + m],\n t = 3 * (r - n),\n v = mb[112 + ((t + 4) >> 3)],\n t = mb[112 + ((t + 3) >> 3)],\n p = (v + 1) >> 1;\n k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n k[l - m] = R[255 + n + t];\n k[l + 0] = R[255 + r - v];\n k[l + m] = R[255 + q - p];\n }\n b += d;\n }\n }\n function Ue(a, b, c, d, e, f) {\n ea(a, b, c, 1, 16, d, e, f);\n }\n function Ve(a, b, c, d, e, f) {\n ea(a, b, 1, c, 16, d, e, f);\n }\n function Ye(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n }\n function Ze(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n }\n function We(a, b, c, d, e, f, g, h) {\n ea(a, b, e, 1, 8, f, g, h);\n ea(c, d, e, 1, 8, f, g, h);\n }\n function Xe(a, b, c, d, e, f, g, h) {\n ea(a, b, 1, e, 8, f, g, h);\n ea(c, d, 1, e, 8, f, g, h);\n }\n function $e(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n }\n function af(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4, 1, e, 8, f, g, h);\n Fa(c, d + 4, 1, e, 8, f, g, h);\n }\n function Cf() {\n this.ba = new Cb();\n this.ec = [];\n this.cc = [];\n this.Mc = [];\n this.Dc = this.Nc = this.dc = this.fc = 0;\n this.Oa = new Ud();\n this.memory = 0;\n this.Ib = \"OutputFunc\";\n this.Jb = \"OutputAlphaFunc\";\n this.Nd = \"OutputRowFunc\";\n }\n function md() {\n this.data = [];\n this.offset = this.kd = this.ha = this.w = 0;\n this.na = [];\n this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n }\n function Df() {\n this.nc = this.Ea = this.b = this.hc = 0;\n this.K = [];\n this.w = 0;\n }\n function Ef() {\n this.ua = 0;\n this.Wa = new ac();\n this.vb = new ac();\n this.md = this.xc = this.wc = 0;\n this.vc = [];\n this.Wb = 0;\n this.Ya = new Ub();\n this.yc = new O();\n }\n function je() {\n this.xb = this.a = 0;\n this.l = new Oa();\n this.ca = new Cb();\n this.V = [];\n this.Ba = 0;\n this.Ta = [];\n this.Ua = 0;\n this.m = new Ra();\n this.Pb = 0;\n this.wd = new Ra();\n this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n this.s = new Ef();\n this.ab = 0;\n this.gc = wa(4, Df);\n this.Oc = 0;\n }\n function Ff() {\n this.Lc = this.Z = this.$a = this.i = this.c = 0;\n this.l = new Oa();\n this.ic = 0;\n this.ca = [];\n this.tb = 0;\n this.qd = null;\n this.rd = 0;\n }\n function Rb(a, b, c, d, e, f, g) {\n a = null == a ? 0 : a[b + 0];\n for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n }\n function Gf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h;\n for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n }\n }\n function Hf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h = a[b + 0],\n k = h,\n l = h,\n m;\n for (m = 0; m < g; ++m)\n (h = a[b + m]),\n (k = l + h - k),\n (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n (k = h),\n (e[f + m] = l);\n }\n }\n function Le(a, b, c, d) {\n var e = b.width,\n f = b.o;\n x(null != a && null != b);\n if (0 > c || 0 >= d || c + d > f) return null;\n if (!a.Cc) {\n if (null == a.ga) {\n a.ga = new Ff();\n var g;\n (g = null == a.ga) ||\n ((g = b.width * b.o),\n x(0 == a.Gb.length),\n (a.Gb = V(g)),\n (a.Uc = 0),\n null == a.Gb\n ? (g = 0)\n : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n (g = !g));\n if (!g) {\n g = a.ga;\n var h = a.Fa,\n k = a.P,\n l = a.qc,\n m = a.mb,\n n = a.nb,\n r = k + 1,\n q = l - 1,\n t = g.l;\n x(null != h && null != m && null != b);\n ia[0] = null;\n ia[1] = Rb;\n ia[2] = Gf;\n ia[3] = Hf;\n g.ca = m;\n g.tb = n;\n g.c = b.width;\n g.i = b.height;\n x(0 < g.c && 0 < g.i);\n if (1 >= l) b = 0;\n else if (\n ((g.$a = (h[k + 0] >> 0) & 3),\n (g.Z = (h[k + 0] >> 2) & 3),\n (g.Lc = (h[k + 0] >> 4) & 3),\n (k = (h[k + 0] >> 6) & 3),\n 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n )\n b = 0;\n else if (\n ((t.put = kc),\n (t.ac = gc),\n (t.bc = lc),\n (t.ma = g),\n (t.width = b.width),\n (t.height = b.height),\n (t.Da = b.Da),\n (t.v = b.v),\n (t.va = b.va),\n (t.j = b.j),\n (t.o = b.o),\n g.$a)\n )\n b: {\n x(1 == g.$a), (b = Bc());\n c: for (;;) {\n if (null == b) {\n b = 0;\n break b;\n }\n x(null != g);\n g.mc = b;\n b.c = g.c;\n b.i = g.i;\n b.l = g.l;\n b.l.ma = g;\n b.l.width = g.c;\n b.l.height = g.i;\n b.a = 0;\n cb(b.m, h, r, q);\n if (!rb(g.c, g.i, 1, b, null)) break c;\n 1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n ? ((g.ic = 1),\n (h = b.c * b.i),\n (b.Ta = null),\n (b.Ua = 0),\n (b.V = V(h)),\n (b.Ba = 0),\n null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n : ((g.ic = 0), (b = Ec(b, g.c)));\n if (!b) break c;\n b = 1;\n break b;\n }\n g.mc = null;\n b = 0;\n }\n else b = q >= g.c * g.i;\n g = !b;\n }\n if (g) return null;\n 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n }\n x(null != a.ga);\n x(c + d <= f);\n a: {\n h = a.ga;\n b = h.c;\n f = h.l.o;\n if (0 == h.$a) {\n r = a.rc;\n q = a.Vc;\n t = a.Fa;\n k = a.P + 1 + c * b;\n l = a.mb;\n m = a.nb + c * b;\n x(k <= a.P + a.qc);\n if (0 != h.Z)\n for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n ia[h.Z](r, q, t, k, l, m, b),\n (r = l),\n (q = m),\n (m += b),\n (k += b);\n else\n for (g = 0; g < d; ++g)\n I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n a.rc = r;\n a.Vc = q;\n } else {\n x(null != h.mc);\n b = c + d;\n g = h.mc;\n x(null != g);\n x(b <= g.i);\n if (g.C >= b) b = 1;\n else if ((h.ic || Aa(), h.ic)) {\n var h = g.V,\n r = g.Ba,\n q = g.c,\n v = g.i,\n t = 1,\n k = g.$ / q,\n l = g.$ % q,\n m = g.m,\n n = g.s,\n p = g.$,\n u = q * v,\n w = q * b,\n y = n.wc,\n A = p < w ? ha(n, l, k) : null;\n x(p <= u);\n x(b <= v);\n x(yc(n));\n c: for (;;) {\n for (; !m.h && p < w; ) {\n l & y || (A = ha(n, l, k));\n x(null != A);\n Sa(m);\n v = ua(A.G[0], A.H[0], m);\n if (256 > v)\n (h[r + p] = v),\n ++p,\n ++l,\n l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n else if (280 > v) {\n var v = ib(v - 256, m);\n var E = ua(A.G[4], A.H[4], m);\n Sa(m);\n E = ib(E, m);\n E = nc(q, E);\n if (p >= E && u - p >= v) {\n var B;\n for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n } else {\n t = 0;\n break c;\n }\n p += v;\n for (l += v; l >= q; )\n (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n p < w && l & y && (A = ha(n, l, k));\n } else {\n t = 0;\n break c;\n }\n x(m.h == db(m));\n }\n Ib(g, k > b ? b : k);\n break c;\n }\n !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n b = t;\n } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n if (!b) {\n d = 0;\n break a;\n }\n }\n c + d >= f && (a.Cc = 1);\n d = 1;\n }\n if (!d) return null;\n if (\n a.Cc &&\n ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n )\n return alert(\"todo:WebPDequantizeLevels\"), null;\n }\n return a.nb + c * e;\n }\n function If(a, b, c, d, e, f) {\n for (; 0 < e--; ) {\n var g = a,\n h = b + (c ? 1 : 0),\n k = a,\n l = b + (c ? 0 : 3),\n m;\n for (m = 0; m < d; ++m) {\n var n = k[l + 4 * m];\n 255 != n &&\n ((n *= 32897),\n (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n }\n b += f;\n }\n }\n function Jf(a, b, c, d, e) {\n for (; 0 < d--; ) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + 2 * f + 0],\n h = a[b + 2 * f + 1],\n k = h & 15,\n l = 4369 * k,\n h = (((h & 240) | (h >> 4)) * l) >> 16;\n a[b + 2 * f + 0] =\n (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n a[b + 2 * f + 1] = (h & 240) | k;\n }\n b += e;\n }\n }\n function Kf(a, b, c, d, e, f, g, h) {\n var k = 255,\n l,\n m;\n for (m = 0; m < e; ++m) {\n for (l = 0; l < d; ++l) {\n var n = a[b + l];\n f[g + 4 * l] = n;\n k &= n;\n }\n b += c;\n g += h;\n }\n return 255 != k;\n }\n function Lf(a, b, c, d, e) {\n var f;\n for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n }\n function Aa() {\n za = If;\n vc = Jf;\n fc = Kf;\n Fc = Lf;\n }\n function va(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n var d,\n E = (y - 1) >> 1;\n var B = h[k + 0] | (l[m + 0] << 16);\n var C = n[r + 0] | (q[t + 0] << 16);\n x(null != a);\n var z = (3 * B + C + 131074) >> 2;\n b(a[e + 0], z & 255, z >> 16, v, p);\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + 0], z & 255, z >> 16, u, w));\n for (d = 1; d <= E; ++d) {\n var D = h[k + d] | (l[m + d] << 16);\n var G = n[r + d] | (q[t + d] << 16);\n var F = B + D + C + G + 524296;\n var H = (F + 2 * (D + C)) >> 3;\n F = (F + 2 * (B + G)) >> 3;\n z = (H + B) >> 1;\n B = (F + D) >> 1;\n b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n null != f &&\n ((z = (F + C) >> 1),\n (B = (H + G) >> 1),\n b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n B = D;\n C = G;\n }\n y & 1 ||\n ((z = (3 * B + C + 131074) >> 2),\n b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n };\n }\n function ic() {\n P[Ca] = Mf;\n P[Ua] = nd;\n P[tc] = Nf;\n P[Va] = od;\n P[ya] = pd;\n P[Db] = qd;\n P[wc] = Of;\n P[zb] = nd;\n P[Ab] = od;\n P[Ja] = pd;\n P[Bb] = qd;\n }\n function Sb(a) {\n return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n }\n function bb(a, b) {\n return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n }\n function nb(a, b, c) {\n return Sb(\n ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n );\n }\n function Pa(a, b) {\n return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n }\n function Ga(a, b, c, d, e) {\n d[e + 0] = bb(a, c);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = Pa(a, b);\n }\n function Tb(a, b, c, d, e) {\n d[e + 0] = Pa(a, b);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = bb(a, c);\n }\n function sd(a, b, c, d, e) {\n var f = nb(a, b, c);\n b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n d[e + 1] = b;\n }\n function td(a, b, c, d, e) {\n var f = (Pa(a, b) & 240) | 15;\n d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n d[e + 1] = f;\n }\n function ud(a, b, c, d, e) {\n d[e + 0] = 255;\n Ga(a, b, c, d, e + 1);\n }\n function vd(a, b, c, d, e) {\n Tb(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function wd(a, b, c, d, e) {\n Ga(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function la(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n) {\n for (var d = m + (n & -2) * c; m != d; )\n b(a[e + 0], f[g + 0], h[k + 0], l, m),\n b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n (e += 2),\n ++g,\n ++k,\n (m += 2 * c);\n n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n };\n }\n function xd(a, b, c) {\n return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n }\n function yd(a, b, c, d, e) {\n switch (a >>> 30) {\n case 3:\n Za(b, c, d, e, 0);\n break;\n case 2:\n fd(b, c, d, e);\n break;\n case 1:\n pa(b, c, d, e);\n }\n }\n function Oc(a, b) {\n var c,\n d,\n e = b.M,\n f = b.Nb,\n g = a.oc,\n h = a.pc + 40,\n k = a.oc,\n l = a.pc + 584,\n m = a.oc,\n n = a.pc + 600;\n for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n for (c = 0; 8 > c; ++c)\n (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n 0 < e\n ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n : (M(g, h - 32 - 1, 127, 21),\n M(k, l - 32 - 1, 127, 9),\n M(m, n - 32 - 1, 127, 9));\n for (d = 0; d < a.za; ++d) {\n var r = b.ya[b.aa + d];\n if (0 < d) {\n for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n for (c = -1; 8 > c; ++c)\n I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n }\n var q = a.Gd,\n t = a.Hd + d,\n v = r.ad,\n p = r.Hc;\n 0 < e &&\n (I(g, h - 32, q[t].y, 0, 16),\n I(k, l - 32, q[t].f, 0, 8),\n I(m, n - 32, q[t].ea, 0, 8));\n if (r.Za) {\n var u = g;\n var w = h - 32 + 16;\n 0 < e &&\n (d >= a.za - 1\n ? M(u, w, q[t].y[15], 4)\n : I(u, w, q[t + 1].y, 0, 4));\n for (c = 0; 4 > c; c++)\n u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n for (c = 0; 16 > c; ++c, p <<= 2)\n (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n c = r.Gc;\n u = xd(d, e, r.Dd);\n ka[u](k, l);\n ka[u](m, n);\n r = c >> 0;\n p = v;\n u = k;\n w = l;\n r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n c >>= 8;\n r = m;\n p = n;\n c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n e < a.Ub - 1 &&\n (I(q[t].y, 0, g, h + 480, 16),\n I(q[t].f, 0, k, l + 224, 8),\n I(q[t].ea, 0, m, n + 224, 8));\n c = 8 * f * a.B;\n q = a.sa;\n t = a.ta + 16 * d + 16 * f * a.R;\n v = a.qa;\n r = a.ra + 8 * d + c;\n p = a.Ha;\n u = a.Ia + 8 * d + c;\n for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n for (c = 0; 8 > c; ++c)\n I(v, r + c * a.B, k, l + 32 * c, 8),\n I(p, u + c * a.B, m, n + 32 * c, 8);\n }\n }\n function Ad(a, b, c, d, e, f, g, h, k) {\n var l = [0],\n m = [0],\n n = 0,\n r = null != k ? k.kd : 0,\n q = null != k ? k : new md();\n if (null == a || 12 > c) return 7;\n q.data = a;\n q.w = b;\n q.ha = c;\n b = [b];\n c = [c];\n q.gb = [q.gb];\n a: {\n var t = b;\n var v = c;\n var p = q.gb;\n x(null != a);\n x(null != v);\n x(null != p);\n p[0] = 0;\n if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n if (fa(a, t[0] + 8, \"WEBP\")) {\n p = 3;\n break a;\n }\n var u = Ha(a, t[0] + 4);\n if (12 > u || 4294967286 < u) {\n p = 3;\n break a;\n }\n if (r && u > v[0] - 8) {\n p = 7;\n break a;\n }\n p[0] = u;\n t[0] += 12;\n v[0] -= 12;\n }\n p = 0;\n }\n if (0 != p) return p;\n u = 0 < q.gb[0];\n for (c = c[0]; ; ) {\n t = [0];\n n = [n];\n a: {\n var w = a;\n v = b;\n p = c;\n var y = n,\n A = l,\n z = m,\n B = t;\n y[0] = 0;\n if (8 > p[0]) p = 7;\n else {\n if (!fa(w, v[0], \"VP8X\")) {\n if (10 != Ha(w, v[0] + 4)) {\n p = 3;\n break a;\n }\n if (18 > p[0]) {\n p = 7;\n break a;\n }\n var C = Ha(w, v[0] + 8);\n var D = 1 + Yb(w, v[0] + 12);\n w = 1 + Yb(w, v[0] + 15);\n if (2147483648 <= D * w) {\n p = 3;\n break a;\n }\n null != B && (B[0] = C);\n null != A && (A[0] = D);\n null != z && (z[0] = w);\n v[0] += 18;\n p[0] -= 18;\n y[0] = 1;\n }\n p = 0;\n }\n }\n n = n[0];\n t = t[0];\n if (0 != p) return p;\n v = !!(t & 2);\n if (!u && n) return 3;\n null != f && (f[0] = !!(t & 16));\n null != g && (g[0] = v);\n null != h && (h[0] = 0);\n g = l[0];\n t = m[0];\n if (n && v && null == k) {\n p = 0;\n break;\n }\n if (4 > c) {\n p = 7;\n break;\n }\n if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n c = [c];\n q.na = [q.na];\n q.P = [q.P];\n q.Sa = [q.Sa];\n a: {\n C = a;\n p = b;\n u = c;\n var y = q.gb,\n A = q.na,\n z = q.P,\n B = q.Sa;\n D = 22;\n x(null != C);\n x(null != u);\n w = p[0];\n var F = u[0];\n x(null != A);\n x(null != B);\n A[0] = null;\n z[0] = null;\n for (B[0] = 0; ; ) {\n p[0] = w;\n u[0] = F;\n if (8 > F) {\n p = 7;\n break a;\n }\n var G = Ha(C, w + 4);\n if (4294967286 < G) {\n p = 3;\n break a;\n }\n var H = (8 + G + 1) & -2;\n D += H;\n if (0 < y && D > y) {\n p = 3;\n break a;\n }\n if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n p = 0;\n break a;\n }\n if (F[0] < H) {\n p = 7;\n break a;\n }\n fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n w += H;\n F -= H;\n }\n }\n c = c[0];\n q.na = q.na[0];\n q.P = q.P[0];\n q.Sa = q.Sa[0];\n if (0 != p) break;\n }\n c = [c];\n q.Ja = [q.Ja];\n q.xa = [q.xa];\n a: if (\n ((y = a),\n (p = b),\n (u = c),\n (A = q.gb[0]),\n (z = q.Ja),\n (B = q.xa),\n (C = p[0]),\n (w = !fa(y, C, \"VP8 \")),\n (D = !fa(y, C, \"VP8L\")),\n x(null != y),\n x(null != u),\n x(null != z),\n x(null != B),\n 8 > u[0])\n )\n p = 7;\n else {\n if (w || D) {\n y = Ha(y, C + 4);\n if (12 <= A && y > A - 12) {\n p = 3;\n break a;\n }\n if (r && y > u[0] - 8) {\n p = 7;\n break a;\n }\n z[0] = y;\n p[0] += 8;\n u[0] -= 8;\n B[0] = D;\n } else\n (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n (z[0] = u[0]);\n p = 0;\n }\n c = c[0];\n q.Ja = q.Ja[0];\n q.xa = q.xa[0];\n b = b[0];\n if (0 != p) break;\n if (4294967286 < q.Ja) return 3;\n null == h || v || (h[0] = q.xa ? 2 : 1);\n g = [g];\n t = [t];\n if (q.xa) {\n if (5 > c) {\n p = 7;\n break;\n }\n h = g;\n r = t;\n v = f;\n null == a || 5 > c\n ? (a = 0)\n : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n ? ((u = [0]),\n (y = [0]),\n (A = [0]),\n (z = new Ra()),\n cb(z, a, b, c),\n mc(z, u, y, A)\n ? (null != h && (h[0] = u[0]),\n null != r && (r[0] = y[0]),\n null != v && (v[0] = A[0]),\n (a = 1))\n : (a = 0))\n : (a = 0);\n } else {\n if (10 > c) {\n p = 7;\n break;\n }\n h = t;\n null == a || 10 > c || !Jc(a, b + 3, c - 3)\n ? (a = 0)\n : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n r & 1 ||\n 3 < ((r >> 1) & 7) ||\n !((r >> 4) & 1) ||\n r >> 5 >= q.Ja ||\n !v ||\n !a\n ? (a = 0)\n : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n }\n if (!a) return 3;\n g = g[0];\n t = t[0];\n if (n && (l[0] != g || m[0] != t)) return 3;\n null != k &&\n ((k[0] = q),\n (k.offset = b - k.w),\n x(4294967286 > b - k.w),\n x(k.offset == k.ha - c));\n break;\n }\n return 0 == p || (7 == p && n && null == k)\n ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n null != d && (d[0] = g),\n null != e && (e[0] = t),\n 0)\n : p;\n }\n function hc(a, b, c) {\n var d = b.width,\n e = b.height,\n f = 0,\n g = 0,\n h = d,\n k = e;\n b.Da = null != a && 0 < a.Da;\n if (\n b.Da &&\n ((h = a.cd),\n (k = a.bd),\n (f = a.v),\n (g = a.j),\n 11 > c || ((f &= -2), (g &= -2)),\n 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n )\n return 0;\n b.v = f;\n b.j = g;\n b.va = f + h;\n b.o = g + k;\n b.U = h;\n b.T = k;\n b.da = null != a && 0 < a.da;\n if (b.da) {\n c = [a.ib];\n f = [a.hb];\n if (!bc(h, k, c, f)) return 0;\n b.ib = c[0];\n b.hb = f[0];\n }\n b.ob = null != a && a.ob;\n b.Kb = null == a || !a.Sd;\n b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n return 1;\n }\n function Bd(a) {\n if (null == a) return 2;\n if (11 > a.S) {\n var b = a.f.RGBA;\n b.fb += (a.height - 1) * b.A;\n b.A = -b.A;\n } else\n (b = a.f.kb),\n (a = a.height),\n (b.O += (a - 1) * b.fa),\n (b.fa = -b.fa),\n (b.N += ((a - 1) >> 1) * b.Ab),\n (b.Ab = -b.Ab),\n (b.W += ((a - 1) >> 1) * b.Db),\n (b.Db = -b.Db),\n null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n return 0;\n }\n function Cd(a, b, c, d) {\n if (null == d || 0 >= a || 0 >= b) return 2;\n if (null != c) {\n if (c.Da) {\n var e = c.cd,\n f = c.bd,\n g = c.v & -2,\n h = c.j & -2;\n if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n return 2;\n a = e;\n b = f;\n }\n if (c.da) {\n e = [c.ib];\n f = [c.hb];\n if (!bc(a, b, e, f)) return 2;\n a = e[0];\n b = f[0];\n }\n }\n d.width = a;\n d.height = b;\n a: {\n var k = d.width;\n var l = d.height;\n a = d.S;\n if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n else {\n if (0 >= d.Rd && null == d.sd) {\n var g = (f = e = b = 0),\n h = k * Dd[a],\n m = h * l;\n 11 > a ||\n ((b = (k + 1) / 2),\n (f = ((l + 1) / 2) * b),\n 12 == a && ((e = k), (g = e * l)));\n l = V(m + 2 * f + g);\n if (null == l) {\n a = 1;\n break a;\n }\n d.sd = l;\n 11 > a\n ? ((k = d.f.RGBA),\n (k.eb = l),\n (k.fb = 0),\n (k.A = h),\n (k.size = m))\n : ((k = d.f.kb),\n (k.y = l),\n (k.O = 0),\n (k.fa = h),\n (k.Fd = m),\n (k.f = l),\n (k.N = 0 + m),\n (k.Ab = b),\n (k.Cd = f),\n (k.ea = l),\n (k.W = 0 + m + f),\n (k.Db = b),\n (k.Ed = f),\n 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n (k.Tc = g),\n (k.lb = e));\n }\n b = 1;\n e = d.S;\n f = d.width;\n g = d.height;\n if (e >= Ca && 13 > e)\n if (11 > e)\n (a = d.f.RGBA),\n (h = Math.abs(a.A)),\n (b &= h * (g - 1) + f <= a.size),\n (b &= h >= f * Dd[e]),\n (b &= null != a.eb);\n else {\n a = d.f.kb;\n h = (f + 1) / 2;\n m = (g + 1) / 2;\n k = Math.abs(a.fa);\n var l = Math.abs(a.Ab),\n n = Math.abs(a.Db),\n r = Math.abs(a.lb),\n q = r * (g - 1) + f;\n b &= k * (g - 1) + f <= a.Fd;\n b &= l * (m - 1) + h <= a.Cd;\n b &= n * (m - 1) + h <= a.Ed;\n b = b & (k >= f) & (l >= h) & (n >= h);\n b &= null != a.y;\n b &= null != a.f;\n b &= null != a.ea;\n 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n }\n else b = 0;\n a = b ? 0 : 2;\n }\n }\n if (0 != a) return a;\n null != c && c.fd && (a = Bd(d));\n return a;\n }\n var xb = 64,\n Hd = [\n 0,\n 1,\n 3,\n 7,\n 15,\n 31,\n 63,\n 127,\n 255,\n 511,\n 1023,\n 2047,\n 4095,\n 8191,\n 16383,\n 32767,\n 65535,\n 131071,\n 262143,\n 524287,\n 1048575,\n 2097151,\n 4194303,\n 8388607,\n 16777215\n ],\n Gd = 24,\n ob = 32,\n Xb = 8,\n Id = [\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7\n ];\n X(\"Predictor0\", \"PredictorAdd0\");\n self.Predictor0 = function() {\n return 4278190080;\n };\n self.Predictor1 = function(a) {\n return a;\n };\n self.Predictor2 = function(a, b, c) {\n return b[c + 0];\n };\n self.Predictor3 = function(a, b, c) {\n return b[c + 1];\n };\n self.Predictor4 = function(a, b, c) {\n return b[c - 1];\n };\n self.Predictor5 = function(a, b, c) {\n return aa(aa(a, b[c + 1]), b[c + 0]);\n };\n self.Predictor6 = function(a, b, c) {\n return aa(a, b[c - 1]);\n };\n self.Predictor7 = function(a, b, c) {\n return aa(a, b[c + 0]);\n };\n self.Predictor8 = function(a, b, c) {\n return aa(b[c - 1], b[c + 0]);\n };\n self.Predictor9 = function(a, b, c) {\n return aa(b[c + 0], b[c + 1]);\n };\n self.Predictor10 = function(a, b, c) {\n return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n };\n self.Predictor11 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return 0 >=\n Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n Ia(d & 255, a & 255, b & 255)\n ? d\n : a;\n };\n self.Predictor12 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return (\n ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n 16) |\n (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n sa((a & 255) + (d & 255) - (b & 255))) >>>\n 0\n );\n };\n self.Predictor13 = function(a, b, c) {\n var d = b[c - 1];\n a = aa(a, b[c + 0]);\n return (\n ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n 0\n );\n };\n var ee = self.PredictorAdd0;\n self.PredictorAdd1 = cc;\n X(\"Predictor2\", \"PredictorAdd2\");\n X(\"Predictor3\", \"PredictorAdd3\");\n X(\"Predictor4\", \"PredictorAdd4\");\n X(\"Predictor5\", \"PredictorAdd5\");\n X(\"Predictor6\", \"PredictorAdd6\");\n X(\"Predictor7\", \"PredictorAdd7\");\n X(\"Predictor8\", \"PredictorAdd8\");\n X(\"Predictor9\", \"PredictorAdd9\");\n X(\"Predictor10\", \"PredictorAdd10\");\n X(\"Predictor11\", \"PredictorAdd11\");\n X(\"Predictor12\", \"PredictorAdd12\");\n X(\"Predictor13\", \"PredictorAdd13\");\n var fe = self.PredictorAdd2;\n ec(\n \"ColorIndexInverseTransform\",\n \"MapARGB\",\n \"32b\",\n function(a) {\n return (a >> 8) & 255;\n },\n function(a) {\n return a;\n }\n );\n ec(\n \"VP8LColorIndexInverseTransformAlpha\",\n \"MapAlpha\",\n \"8b\",\n function(a) {\n return a;\n },\n function(a) {\n return (a >> 8) & 255;\n }\n );\n var rc = self.ColorIndexInverseTransform,\n ke = self.MapARGB,\n he = self.VP8LColorIndexInverseTransformAlpha,\n le = self.MapAlpha,\n pc,\n qc = (self.VP8LPredictorsAdd = []);\n qc.length = 16;\n (self.VP8LPredictors = []).length = 16;\n (self.VP8LPredictorsAdd_C = []).length = 16;\n (self.VP8LPredictors_C = []).length = 16;\n var Fb,\n sc,\n Gb,\n Hb,\n xc,\n uc,\n bd = V(511),\n cd = V(2041),\n dd = V(225),\n ed = V(767),\n ad = 0,\n Qb = cd,\n mb = dd,\n R = ed,\n U = bd,\n Ca = 0,\n Ua = 1,\n tc = 2,\n Va = 3,\n ya = 4,\n Db = 5,\n wc = 6,\n zb = 7,\n Ab = 8,\n Ja = 9,\n Bb = 10,\n pe = [2, 3, 7],\n oe = [3, 3, 11],\n Dc = [280, 256, 256, 256, 40],\n qe = [0, 1, 1, 1, 0],\n ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n de = [\n 24,\n 7,\n 23,\n 25,\n 40,\n 6,\n 39,\n 41,\n 22,\n 26,\n 38,\n 42,\n 56,\n 5,\n 55,\n 57,\n 21,\n 27,\n 54,\n 58,\n 37,\n 43,\n 72,\n 4,\n 71,\n 73,\n 20,\n 28,\n 53,\n 59,\n 70,\n 74,\n 36,\n 44,\n 88,\n 69,\n 75,\n 52,\n 60,\n 3,\n 87,\n 89,\n 19,\n 29,\n 86,\n 90,\n 35,\n 45,\n 68,\n 76,\n 85,\n 91,\n 51,\n 61,\n 104,\n 2,\n 103,\n 105,\n 18,\n 30,\n 102,\n 106,\n 34,\n 46,\n 84,\n 92,\n 67,\n 77,\n 101,\n 107,\n 50,\n 62,\n 120,\n 1,\n 119,\n 121,\n 83,\n 93,\n 17,\n 31,\n 100,\n 108,\n 66,\n 78,\n 118,\n 122,\n 33,\n 47,\n 117,\n 123,\n 49,\n 63,\n 99,\n 109,\n 82,\n 94,\n 0,\n 116,\n 124,\n 65,\n 79,\n 16,\n 32,\n 98,\n 110,\n 48,\n 115,\n 125,\n 81,\n 95,\n 64,\n 114,\n 126,\n 97,\n 111,\n 80,\n 113,\n 127,\n 96,\n 112\n ],\n me = [\n 2954,\n 2956,\n 2958,\n 2962,\n 2970,\n 2986,\n 3018,\n 3082,\n 3212,\n 3468,\n 3980,\n 5004\n ],\n ie = 8,\n Lb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 17,\n 18,\n 19,\n 20,\n 20,\n 21,\n 21,\n 22,\n 22,\n 23,\n 23,\n 24,\n 25,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70,\n 71,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 79,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 91,\n 93,\n 95,\n 96,\n 98,\n 100,\n 101,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 118,\n 122,\n 124,\n 126,\n 128,\n 130,\n 132,\n 134,\n 136,\n 138,\n 140,\n 143,\n 145,\n 148,\n 151,\n 154,\n 157\n ],\n Mb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 60,\n 62,\n 64,\n 66,\n 68,\n 70,\n 72,\n 74,\n 76,\n 78,\n 80,\n 82,\n 84,\n 86,\n 88,\n 90,\n 92,\n 94,\n 96,\n 98,\n 100,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 119,\n 122,\n 125,\n 128,\n 131,\n 134,\n 137,\n 140,\n 143,\n 146,\n 149,\n 152,\n 155,\n 158,\n 161,\n 164,\n 167,\n 170,\n 173,\n 177,\n 181,\n 185,\n 189,\n 193,\n 197,\n 201,\n 205,\n 209,\n 213,\n 217,\n 221,\n 225,\n 229,\n 234,\n 239,\n 245,\n 249,\n 254,\n 259,\n 264,\n 269,\n 274,\n 279,\n 284\n ],\n oa = null,\n He = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n ],\n Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n Fe = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ]\n ],\n Ke = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36]\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111, 32, 75, 80],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22]\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22, 64, 171, 36, 225, 114],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51]\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82]\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73, 154],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47]\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98]\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26]\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160, 1],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40]\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128]\n ],\n [\n [190, 80, 35, 99, 180, 80, 126, 54, 45],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24]\n ]\n ],\n Ee = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ]\n ],\n Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n Nc,\n Y = [],\n W = [],\n ka = [],\n Za,\n fd,\n Nb,\n pa,\n Ob,\n Xc,\n Tc,\n Yc,\n Uc,\n Zc,\n Vc,\n $c,\n Wc,\n Rc,\n Pc,\n Sc,\n Qc,\n re = 1,\n Cc = 2,\n ia = [],\n za,\n vc,\n fc,\n Fc,\n P = [];\n va(\"UpsampleRgbLinePair\", Ga, 3);\n va(\"UpsampleBgrLinePair\", Tb, 3);\n va(\"UpsampleRgbaLinePair\", wd, 4);\n va(\"UpsampleBgraLinePair\", vd, 4);\n va(\"UpsampleArgbLinePair\", ud, 4);\n va(\"UpsampleRgba4444LinePair\", td, 2);\n va(\"UpsampleRgb565LinePair\", sd, 2);\n var Mf = self.UpsampleRgbLinePair,\n Nf = self.UpsampleBgrLinePair,\n nd = self.UpsampleRgbaLinePair,\n od = self.UpsampleBgraLinePair,\n pd = self.UpsampleArgbLinePair,\n qd = self.UpsampleRgba4444LinePair,\n Of = self.UpsampleRgb565LinePair,\n Wa = 16,\n Ba = 1 << (Wa - 1),\n ta = -227,\n Eb = 482,\n rd = 6,\n Pf = (256 << rd) - 1,\n jc = 0,\n Yd = V(256),\n ae = V(256),\n $d = V(256),\n Zd = V(256),\n be = V(Eb - ta),\n ce = V(Eb - ta);\n la(\"YuvToRgbRow\", Ga, 3);\n la(\"YuvToBgrRow\", Tb, 3);\n la(\"YuvToRgbaRow\", wd, 4);\n la(\"YuvToBgraRow\", vd, 4);\n la(\"YuvToArgbRow\", ud, 4);\n la(\"YuvToRgba4444Row\", td, 2);\n la(\"YuvToRgb565Row\", sd, 2);\n var zd = [\n 0,\n 4,\n 8,\n 12,\n 128,\n 132,\n 136,\n 140,\n 256,\n 260,\n 264,\n 268,\n 384,\n 388,\n 392,\n 396\n ],\n Ya = [0, 2, 8],\n Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n Ne = 1;\n this.WebPDecodeRGBA = function(a, b, c, d, e) {\n var f = Ua;\n var g = new Cf(),\n h = new Cb();\n g.ba = h;\n h.S = f;\n h.width = [h.width];\n h.height = [h.height];\n var k = h.width;\n var l = h.height,\n m = new Td();\n if (null == m || null == a) var n = 2;\n else\n x(null != m),\n (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n 0 != n\n ? (k = 0)\n : (null != k && (k[0] = m.width[0]),\n null != l && (l[0] = m.height[0]),\n (k = 1));\n if (k) {\n h.width = h.width[0];\n h.height = h.height[0];\n null != d && (d[0] = h.width);\n null != e && (e[0] = h.height);\n b: {\n d = new Oa();\n e = new md();\n e.data = a;\n e.w = b;\n e.ha = c;\n e.kd = 1;\n b = [0];\n x(null != e);\n a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n (0 == a || 7 == a) && b[0] && (a = 4);\n b = a;\n if (0 == b) {\n x(null != g);\n d.data = e.data;\n d.w = e.w + e.offset;\n d.ha = e.ha - e.offset;\n d.put = kc;\n d.ac = gc;\n d.bc = lc;\n d.ma = g;\n if (e.xa) {\n a = Bc();\n if (null == a) {\n g = 1;\n break b;\n }\n if (te(a, d)) {\n b = Cd(d.width, d.height, g.Oa, g.ba);\n if ((d = 0 == b)) {\n c: {\n d = a;\n d: for (;;) {\n if (null == d) {\n d = 0;\n break c;\n }\n x(null != d.s.yc);\n x(null != d.s.Ya);\n x(0 < d.s.Wb);\n c = d.l;\n x(null != c);\n e = c.ma;\n x(null != e);\n if (0 != d.xb) {\n d.ca = e.ba;\n d.tb = e.tb;\n x(null != d.ca);\n if (!hc(e.Oa, c, Va)) {\n d.a = 2;\n break d;\n }\n if (!Ec(d, c.width)) break d;\n if (c.da) break d;\n (c.da || hb(d.ca.S)) && Aa();\n 11 > d.ca.S ||\n (alert(\"todo:WebPInitConvertARGBToYUV\"),\n null != d.ca.f.kb.F && Aa());\n if (\n d.Pb &&\n 0 < d.s.ua &&\n null == d.s.vb.X &&\n !Zb(d.s.vb, d.s.Wa.Xa)\n ) {\n d.a = 1;\n break d;\n }\n d.xb = 0;\n }\n if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n e.Dc = d.Ma;\n d = 1;\n break c;\n }\n x(0 != d.a);\n d = 0;\n }\n d = !d;\n }\n d && (b = a.a);\n } else b = a.a;\n } else {\n a = new Ce();\n if (null == a) {\n g = 1;\n break b;\n }\n a.Fa = e.na;\n a.P = e.P;\n a.qc = e.Sa;\n if (Kc(a, d)) {\n if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n a.Aa = 0;\n c = g.Oa;\n e = a;\n x(null != e);\n if (null != c) {\n k = c.Md;\n k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n if (0 < k) {\n for (l = m = 0; 4 > l; ++l)\n (n = e.pb[l]),\n 12 > n.lc &&\n (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n (m |= n.ia);\n m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n }\n e.Ga = c.Id;\n 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n }\n Me(a, d) || (b = a.a);\n }\n } else b = a.a;\n }\n 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n }\n g = b;\n }\n f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n } else f = null;\n return f;\n };\n var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n };\n new _WebPDecoder();\n\n /** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n function memcmp(data, data_off, str, size) {\n for (var i = 0; i < size; i++)\n if (data[data_off + i] != str.charCodeAt(i)) return true;\n return false;\n }\n\n function GetTag(data, data_off) {\n var str = \"\";\n for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n return str;\n }\n\n function GetLE16(data, data_off) {\n return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n }\n\n function GetLE24(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16)) >>>\n 0\n );\n }\n\n function GetLE32(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16) |\n (data[data_off + 3] << 24)) >>>\n 0\n );\n }\n\n function WebPRiffParser(src, src_off) {\n var imagearray = {};\n var i = 0;\n var alpha_chunk = false;\n var alpha_size = 0;\n var alpha_offset = 0;\n imagearray[\"frames\"] = [];\n if (memcmp(src, src_off, \"RIFF\", 4)) return;\n src_off += 4;\n var riff_size = GetLE32(src, src_off) + 8;\n src_off += 8;\n\n while (src_off < src.length) {\n var fourcc = GetTag(src, src_off);\n src_off += 4;\n\n var payload_size = GetLE32(src, src_off);\n src_off += 4;\n var payload_size_padded = payload_size + (payload_size & 1);\n\n switch (fourcc) {\n case \"VP8 \":\n case \"VP8L\":\n if (typeof imagearray[\"frames\"][i] === \"undefined\")\n imagearray[\"frames\"][i] = {};\n var obj = imagearray[\"frames\"][i];\n var height = [0];\n var width = [0];\n obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n obj[\"src_size\"] = alpha_size + payload_size + 8;\n //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n i++;\n if (alpha_chunk) {\n alpha_chunk = false;\n alpha_size = 0;\n alpha_offset = 0;\n }\n break;\n case \"VP8X\":\n var obj = (imagearray[\"header\"] = {});\n var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n var src_off_ = src_off + 4;\n var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n var canvas_height = (obj[\"canvas_height\"] =\n 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n break;\n case \"ALPH\":\n alpha_chunk = true;\n alpha_size = payload_size_padded + 8;\n alpha_offset = src_off - 8;\n break;\n\n case \"ANIM\":\n var obj = imagearray[\"header\"];\n var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n src_off_ = src_off + 4;\n\n var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n src_off_ += 2;\n break;\n case \"ANMF\":\n var offset_x = 0,\n offset_y = 0,\n width = 0,\n height = 0,\n duration = 0,\n blend = 0,\n dispose = 0,\n temp = 0;\n var obj = (imagearray[\"frames\"][i] = {});\n obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"duration\"] = duration = GetLE24(src, src_off);\n src_off += 3;\n temp = src[src_off++];\n obj[\"dispose\"] = dispose = temp & 1;\n obj[\"blend\"] = blend = (temp >> 1) & 1;\n break;\n default:\n }\n if (fourcc != \"ANMF\") src_off += payload_size_padded;\n }\n return imagearray;\n }\n\n var height = [0];\n var width = [0];\n var pixels = [];\n var webpdecoder = new _WebPDecoder();\n\n var response = imageData;\n var imagearray = WebPRiffParser(response, 0);\n imagearray[\"response\"] = response;\n imagearray[\"rgbaoutput\"] = true;\n imagearray[\"dataurl\"] = false;\n\n var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n if (header) {\n header[\"loop_counter\"] = header[\"loop_count\"];\n height = [header[\"canvas_height\"]];\n width = [header[\"canvas_width\"]];\n\n var blend = false;\n for (var f = 0; f < frames.length; f++)\n if (frames[f][\"blend\"] == 0) {\n blend = true;\n break;\n }\n }\n\n var frame = frames[0];\n var rgba = webpdecoder.WebPDecodeRGBA(\n response,\n frame[\"src_off\"],\n frame[\"src_size\"],\n width,\n height\n );\n frame[\"rgba\"] = rgba;\n frame[\"imgwidth\"] = width[0];\n frame[\"imgheight\"] = height[0];\n\n for (var i = 0; i < width[0] * height[0] * 4; i++) {\n pixels[i] = rgba[i];\n }\n\n this.width = width;\n this.height = height;\n this.data = pixels;\n return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /*\n * @see http://www.w3.org/TR/PNG-Chunks.html\n *\n Color Allowed Interpretation\n Type Bit Depths\n\n 0 1,2,4,8,16 Each pixel is a grayscale sample.\n\n 2 8,16 Each pixel is an R,G,B triple.\n\n 3 1,2,4,8 Each pixel is a palette index;\n a PLTE chunk must appear.\n\n 4 8,16 Each pixel is a grayscale sample,\n followed by an alpha sample.\n\n 6 8,16 Each pixel is an R,G,B triple,\n followed by an alpha sample.\n */\n\n /*\n * PNG filter method types\n *\n * @see http://www.w3.org/TR/PNG-Filters.html\n * @see http://www.libpng.org/pub/png/book/chapter09.html\n *\n * This is what the value 'Predictor' in decode params relates to\n *\n * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n *\n 0 None\n 1 Sub\n 2 Up\n 3 Average\n 4 Paeth\n */\n\n var canCompress = function(value) {\n return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n };\n\n var hasCompressionJS = function() {\n return typeof zlibSync === \"function\";\n };\n var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n var level = 4;\n var filter_method = filterUp;\n\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n level = 1;\n filter_method = filterSub;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n level = 6;\n filter_method = filterAverage;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n level = 9;\n filter_method = filterPaeth;\n break;\n }\n\n bytes = applyPngFilterMethod(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n );\n var dat = zlibSync(bytes, { level: level });\n return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n };\n\n var applyPngFilterMethod = function(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n ) {\n var lines = bytes.length / lineLength,\n result = new Uint8Array(bytes.length + lines),\n filter_methods = getFilterMethods(),\n line,\n prevLine,\n offset;\n\n for (var i = 0; i < lines; i += 1) {\n offset = i * lineLength;\n line = bytes.subarray(offset, offset + lineLength);\n\n if (filter_method) {\n result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n } else {\n var len = filter_methods.length,\n results = [];\n\n for (var j; j < len; j += 1) {\n results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n }\n\n var ind = getIndexOfSmallestSum(results.concat());\n\n result.set(results[ind], offset + i);\n }\n\n prevLine = line;\n }\n\n return result;\n };\n\n var filterNone = function(line) {\n /*var result = new Uint8Array(line.length + 1);\n result[0] = 0;\n result.set(line, 1);*/\n\n var result = Array.apply([], line);\n result.unshift(0);\n\n return result;\n };\n\n var filterSub = function(line, colorsPerPixel) {\n var result = [],\n len = line.length,\n left;\n\n result[0] = 1;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterUp = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n up;\n\n result[0] = 2;\n\n for (var i = 0; i < len; i += 1) {\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterAverage = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up;\n\n result[0] = 3;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n }\n\n return result;\n };\n\n var filterPaeth = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up,\n upLeft,\n paeth;\n\n result[0] = 4;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n paeth = paethPredictor(left, up, upLeft);\n result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var paethPredictor = function(left, up, upLeft) {\n if (left === up && up === upLeft) {\n return left;\n }\n var pLeft = Math.abs(up - upLeft),\n pUp = Math.abs(left - upLeft),\n pUpLeft = Math.abs(left + up - upLeft - upLeft);\n return pLeft <= pUp && pLeft <= pUpLeft\n ? left\n : pUp <= pUpLeft\n ? up\n : upLeft;\n };\n\n var getFilterMethods = function() {\n return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n };\n\n var getIndexOfSmallestSum = function(arrays) {\n var sum = arrays.map(function(value) {\n return value.reduce(function(pv, cv) {\n return pv + Math.abs(cv);\n }, 0);\n });\n return sum.indexOf(Math.min.apply(null, sum));\n };\n\n var getPredictorFromCompression = function(compression) {\n var predictor;\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n predictor = 11;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n predictor = 13;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n predictor = 14;\n break;\n\n default:\n predictor = 12;\n break;\n }\n return predictor;\n };\n\n /**\n * @name processPNG\n * @function\n * @ignore\n */\n jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n \"use strict\";\n\n var colorSpace,\n filter = this.decode.FLATE_DECODE,\n bitsPerComponent,\n image,\n decodeParameters = \"\",\n trns,\n colors,\n pal,\n smask,\n pixels,\n len,\n alphaData,\n imgData,\n hasColors,\n pixel,\n i,\n n;\n\n if (this.__addimage__.isArrayBuffer(imageData))\n imageData = new Uint8Array(imageData);\n\n if (this.__addimage__.isArrayBufferView(imageData)) {\n image = new PNG(imageData);\n imageData = image.imgData;\n bitsPerComponent = image.bits;\n colorSpace = image.colorSpace;\n colors = image.colors;\n\n /*\n * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n *\n * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n *\n * Extract alpha to create two separate images, using the alpha as a sMask\n */\n if ([4, 6].indexOf(image.colorType) !== -1) {\n /*\n * processes 8 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 8) {\n pixels =\n image.pixelBitlength == 32\n ? new Uint32Array(image.decodePixels().buffer)\n : image.pixelBitlength == 16\n ? new Uint16Array(image.decodePixels().buffer)\n : new Uint8Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(len * image.colors);\n alphaData = new Uint8Array(len);\n var pDiff = image.pixelBitlength - image.bits;\n i = 0;\n n = 0;\n var pbl;\n\n for (; i < len; i++) {\n pixel = pixels[i];\n pbl = 0;\n\n while (pbl < pDiff) {\n imgData[n++] = (pixel >>> pbl) & 0xff;\n pbl = pbl + image.bits;\n }\n\n alphaData[i] = (pixel >>> pbl) & 0xff;\n }\n }\n\n /*\n * processes 16 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 16) {\n pixels = new Uint32Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(\n len * (32 / image.pixelBitlength) * image.colors\n );\n alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n hasColors = image.colors > 1;\n i = 0;\n n = 0;\n var a = 0;\n\n while (i < len) {\n pixel = pixels[i++];\n\n imgData[n++] = (pixel >>> 0) & 0xff;\n\n if (hasColors) {\n imgData[n++] = (pixel >>> 16) & 0xff;\n\n pixel = pixels[i++];\n imgData[n++] = (pixel >>> 0) & 0xff;\n }\n\n alphaData[a++] = (pixel >>> 16) & 0xff;\n }\n bitsPerComponent = 8;\n }\n\n if (canCompress(compression)) {\n imageData = compressBytes(\n imgData,\n image.width * image.colors,\n image.colors,\n compression\n );\n smask = compressBytes(alphaData, image.width, 1, compression);\n } else {\n imageData = imgData;\n smask = alphaData;\n filter = undefined;\n }\n }\n\n /*\n * Indexed png. Each pixel is a palette index.\n */\n if (image.colorType === 3) {\n colorSpace = this.color_spaces.INDEXED;\n pal = image.palette;\n\n if (image.transparency.indexed) {\n var trans = image.transparency.indexed;\n var total = 0;\n i = 0;\n len = trans.length;\n\n for (; i < len; ++i) {\n total += trans[i];\n }\n\n total = total / 255;\n\n /*\n * a single color is specified as 100% transparent (0),\n * so we set trns to use a /Mask with that index\n */\n if (total === len - 1 && trans.indexOf(0) !== -1) {\n trns = [trans.indexOf(0)];\n\n /*\n * there's more than one colour within the palette that specifies\n * a transparency value less than 255, so we unroll the pixels to create an image sMask\n */\n } else if (total !== len) {\n pixels = image.decodePixels();\n alphaData = new Uint8Array(pixels.length);\n i = 0;\n len = pixels.length;\n\n for (; i < len; i++) {\n alphaData[i] = trans[pixels[i]];\n }\n\n smask = compressBytes(alphaData, image.width, 1);\n }\n }\n }\n\n var predictor = getPredictorFromCompression(compression);\n\n if (filter === this.decode.FLATE_DECODE) {\n decodeParameters = \"/Predictor \" + predictor + \" \";\n }\n decodeParameters +=\n \"/Colors \" +\n colors +\n \" /BitsPerComponent \" +\n bitsPerComponent +\n \" /Columns \" +\n image.width;\n\n if (\n this.__addimage__.isArrayBuffer(imageData) ||\n this.__addimage__.isArrayBufferView(imageData)\n ) {\n imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n }\n\n if (\n (smask && this.__addimage__.isArrayBuffer(smask)) ||\n this.__addimage__.isArrayBufferView(smask)\n ) {\n smask = this.__addimage__.arrayBufferToBinaryString(smask);\n }\n\n return {\n alias: alias,\n data: imageData,\n index: index,\n filter: filter,\n decodeParameters: decodeParameters,\n transparency: trns,\n palette: pal,\n sMask: smask,\n predictor: predictor,\n width: image.width,\n height: image.height,\n bitsPerComponent: bitsPerComponent,\n colorSpace: colorSpace\n };\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n var reader = new GifReader(imageData);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = [];\n\n reader.decodeAndBlitFrameRGBA(0, pixels);\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n\n jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n var reader = new BmpDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n var reader = new WebPDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name processRGBA\n * @function\n *\n * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n * RGBA array data can be obtained from DOM canvas getImageData.\n * @ignore\n */\n jsPDFAPI.processRGBA = function(imageData, index, alias) {\n \"use strict\";\n\n var imagePixels = imageData.data;\n var length = imagePixels.length;\n // jsPDF takes alpha data separately so extract that.\n var rgbOut = new Uint8Array((length / 4) * 3);\n var alphaOut = new Uint8Array(length / 4);\n var outIndex = 0;\n var alphaIndex = 0;\n\n for (var i = 0; i < length; i += 4) {\n var r = imagePixels[i];\n var g = imagePixels[i + 1];\n var b = imagePixels[i + 2];\n var alpha = imagePixels[i + 3];\n rgbOut[outIndex++] = r;\n rgbOut[outIndex++] = g;\n rgbOut[outIndex++] = b;\n alphaOut[alphaIndex++] = alpha;\n }\n\n var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n return {\n alpha: alphaData,\n data: rgbData,\n index: index,\n alias: alias,\n colorSpace: \"DeviceRGB\",\n bitsPerComponent: 8,\n width: imageData.width,\n height: imageData.height\n };\n };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Add Language Tag to the generated PDF\n *\n * @name setLanguage\n * @function\n * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF()\n * doc.text(10, 10, 'This is a test')\n * doc.setLanguage(\"en-US\")\n * doc.save('english.pdf')\n */\n jsPDFAPI.setLanguage = function(langCode) {\n \"use strict\";\n\n var langCodes = {\n af: \"Afrikaans\",\n sq: \"Albanian\",\n ar: \"Arabic (Standard)\",\n \"ar-DZ\": \"Arabic (Algeria)\",\n \"ar-BH\": \"Arabic (Bahrain)\",\n \"ar-EG\": \"Arabic (Egypt)\",\n \"ar-IQ\": \"Arabic (Iraq)\",\n \"ar-JO\": \"Arabic (Jordan)\",\n \"ar-KW\": \"Arabic (Kuwait)\",\n \"ar-LB\": \"Arabic (Lebanon)\",\n \"ar-LY\": \"Arabic (Libya)\",\n \"ar-MA\": \"Arabic (Morocco)\",\n \"ar-OM\": \"Arabic (Oman)\",\n \"ar-QA\": \"Arabic (Qatar)\",\n \"ar-SA\": \"Arabic (Saudi Arabia)\",\n \"ar-SY\": \"Arabic (Syria)\",\n \"ar-TN\": \"Arabic (Tunisia)\",\n \"ar-AE\": \"Arabic (U.A.E.)\",\n \"ar-YE\": \"Arabic (Yemen)\",\n an: \"Aragonese\",\n hy: \"Armenian\",\n as: \"Assamese\",\n ast: \"Asturian\",\n az: \"Azerbaijani\",\n eu: \"Basque\",\n be: \"Belarusian\",\n bn: \"Bengali\",\n bs: \"Bosnian\",\n br: \"Breton\",\n bg: \"Bulgarian\",\n my: \"Burmese\",\n ca: \"Catalan\",\n ch: \"Chamorro\",\n ce: \"Chechen\",\n zh: \"Chinese\",\n \"zh-HK\": \"Chinese (Hong Kong)\",\n \"zh-CN\": \"Chinese (PRC)\",\n \"zh-SG\": \"Chinese (Singapore)\",\n \"zh-TW\": \"Chinese (Taiwan)\",\n cv: \"Chuvash\",\n co: \"Corsican\",\n cr: \"Cree\",\n hr: \"Croatian\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch (Standard)\",\n \"nl-BE\": \"Dutch (Belgian)\",\n en: \"English\",\n \"en-AU\": \"English (Australia)\",\n \"en-BZ\": \"English (Belize)\",\n \"en-CA\": \"English (Canada)\",\n \"en-IE\": \"English (Ireland)\",\n \"en-JM\": \"English (Jamaica)\",\n \"en-NZ\": \"English (New Zealand)\",\n \"en-PH\": \"English (Philippines)\",\n \"en-ZA\": \"English (South Africa)\",\n \"en-TT\": \"English (Trinidad & Tobago)\",\n \"en-GB\": \"English (United Kingdom)\",\n \"en-US\": \"English (United States)\",\n \"en-ZW\": \"English (Zimbabwe)\",\n eo: \"Esperanto\",\n et: \"Estonian\",\n fo: \"Faeroese\",\n fj: \"Fijian\",\n fi: \"Finnish\",\n fr: \"French (Standard)\",\n \"fr-BE\": \"French (Belgium)\",\n \"fr-CA\": \"French (Canada)\",\n \"fr-FR\": \"French (France)\",\n \"fr-LU\": \"French (Luxembourg)\",\n \"fr-MC\": \"French (Monaco)\",\n \"fr-CH\": \"French (Switzerland)\",\n fy: \"Frisian\",\n fur: \"Friulian\",\n gd: \"Gaelic (Scots)\",\n \"gd-IE\": \"Gaelic (Irish)\",\n gl: \"Galacian\",\n ka: \"Georgian\",\n de: \"German (Standard)\",\n \"de-AT\": \"German (Austria)\",\n \"de-DE\": \"German (Germany)\",\n \"de-LI\": \"German (Liechtenstein)\",\n \"de-LU\": \"German (Luxembourg)\",\n \"de-CH\": \"German (Switzerland)\",\n el: \"Greek\",\n gu: \"Gujurati\",\n ht: \"Haitian\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n is: \"Icelandic\",\n id: \"Indonesian\",\n iu: \"Inuktitut\",\n ga: \"Irish\",\n it: \"Italian (Standard)\",\n \"it-CH\": \"Italian (Switzerland)\",\n ja: \"Japanese\",\n kn: \"Kannada\",\n ks: \"Kashmiri\",\n kk: \"Kazakh\",\n km: \"Khmer\",\n ky: \"Kirghiz\",\n tlh: \"Klingon\",\n ko: \"Korean\",\n \"ko-KP\": \"Korean (North Korea)\",\n \"ko-KR\": \"Korean (South Korea)\",\n la: \"Latin\",\n lv: \"Latvian\",\n lt: \"Lithuanian\",\n lb: \"Luxembourgish\",\n mk: \"North Macedonia\",\n ms: \"Malay\",\n ml: \"Malayalam\",\n mt: \"Maltese\",\n mi: \"Maori\",\n mr: \"Marathi\",\n mo: \"Moldavian\",\n nv: \"Navajo\",\n ng: \"Ndonga\",\n ne: \"Nepali\",\n no: \"Norwegian\",\n nb: \"Norwegian (Bokmal)\",\n nn: \"Norwegian (Nynorsk)\",\n oc: \"Occitan\",\n or: \"Oriya\",\n om: \"Oromo\",\n fa: \"Persian\",\n \"fa-IR\": \"Persian/Iran\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n \"pt-BR\": \"Portuguese (Brazil)\",\n pa: \"Punjabi\",\n \"pa-IN\": \"Punjabi (India)\",\n \"pa-PK\": \"Punjabi (Pakistan)\",\n qu: \"Quechua\",\n rm: \"Rhaeto-Romanic\",\n ro: \"Romanian\",\n \"ro-MO\": \"Romanian (Moldavia)\",\n ru: \"Russian\",\n \"ru-MO\": \"Russian (Moldavia)\",\n sz: \"Sami (Lappish)\",\n sg: \"Sango\",\n sa: \"Sanskrit\",\n sc: \"Sardinian\",\n sd: \"Sindhi\",\n si: \"Singhalese\",\n sr: \"Serbian\",\n sk: \"Slovak\",\n sl: \"Slovenian\",\n so: \"Somani\",\n sb: \"Sorbian\",\n es: \"Spanish\",\n \"es-AR\": \"Spanish (Argentina)\",\n \"es-BO\": \"Spanish (Bolivia)\",\n \"es-CL\": \"Spanish (Chile)\",\n \"es-CO\": \"Spanish (Colombia)\",\n \"es-CR\": \"Spanish (Costa Rica)\",\n \"es-DO\": \"Spanish (Dominican Republic)\",\n \"es-EC\": \"Spanish (Ecuador)\",\n \"es-SV\": \"Spanish (El Salvador)\",\n \"es-GT\": \"Spanish (Guatemala)\",\n \"es-HN\": \"Spanish (Honduras)\",\n \"es-MX\": \"Spanish (Mexico)\",\n \"es-NI\": \"Spanish (Nicaragua)\",\n \"es-PA\": \"Spanish (Panama)\",\n \"es-PY\": \"Spanish (Paraguay)\",\n \"es-PE\": \"Spanish (Peru)\",\n \"es-PR\": \"Spanish (Puerto Rico)\",\n \"es-ES\": \"Spanish (Spain)\",\n \"es-UY\": \"Spanish (Uruguay)\",\n \"es-VE\": \"Spanish (Venezuela)\",\n sx: \"Sutu\",\n sw: \"Swahili\",\n sv: \"Swedish\",\n \"sv-FI\": \"Swedish (Finland)\",\n \"sv-SV\": \"Swedish (Sweden)\",\n ta: \"Tamil\",\n tt: \"Tatar\",\n te: \"Teluga\",\n th: \"Thai\",\n tig: \"Tigre\",\n ts: \"Tsonga\",\n tn: \"Tswana\",\n tr: \"Turkish\",\n tk: \"Turkmen\",\n uk: \"Ukrainian\",\n hsb: \"Upper Sorbian\",\n ur: \"Urdu\",\n ve: \"Venda\",\n vi: \"Vietnamese\",\n vo: \"Volapuk\",\n wa: \"Walloon\",\n cy: \"Welsh\",\n xh: \"Xhosa\",\n ji: \"Yiddish\",\n zu: \"Zulu\"\n };\n\n if (this.internal.languageSettings === undefined) {\n this.internal.languageSettings = {};\n this.internal.languageSettings.isSubscribed = false;\n }\n\n if (langCodes[langCode] !== undefined) {\n this.internal.languageSettings.languageCode = langCode;\n if (this.internal.languageSettings.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.write(\n \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n );\n });\n this.internal.languageSettings.isSubscribed = true;\n }\n }\n return this;\n };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n \"use strict\";\n API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n var decoded = \"0123456789abcdef\",\n encoded = \"klmnopqrstuvwxyz\",\n mappingUncompress = {},\n mappingCompress = {};\n\n for (var i = 0; i < encoded.length; i++) {\n mappingUncompress[encoded[i]] = decoded[i];\n mappingCompress[decoded[i]] = encoded[i];\n }\n\n var hex = function(value) {\n return \"0x\" + parseInt(value, 10).toString(16);\n };\n\n var compress = (API.__fontmetrics__.compress = function(data) {\n var vals = [\"{\"];\n var value, keystring, valuestring, numberprefix;\n\n for (var key in data) {\n value = data[key];\n\n if (!isNaN(parseInt(key, 10))) {\n key = parseInt(key, 10);\n keystring = hex(key).slice(2);\n keystring =\n keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n } else {\n keystring = \"'\" + key + \"'\";\n }\n\n if (typeof value == \"number\") {\n if (value < 0) {\n valuestring = hex(value).slice(3);\n numberprefix = \"-\";\n } else {\n valuestring = hex(value).slice(2);\n numberprefix = \"\";\n }\n valuestring =\n numberprefix +\n valuestring.slice(0, -1) +\n mappingCompress[valuestring.slice(-1)];\n } else {\n if (typeof value === \"object\") {\n valuestring = compress(value);\n } else {\n throw new Error(\n \"Don't know what to do with value type \" + typeof value + \".\"\n );\n }\n }\n vals.push(keystring + valuestring);\n }\n vals.push(\"}\");\n return vals.join(\"\");\n });\n\n /**\n * Uncompresses data compressed into custom, base16-like format.\n *\n * @public\n * @function\n * @param\n * @returns {Type}\n */\n var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n if (typeof data !== \"string\") {\n throw new Error(\"Invalid argument passed to uncompress.\");\n }\n\n var output = {},\n sign = 1,\n stringparts, // undef. will be [] in string mode\n activeobject = output,\n parentchain = [],\n parent_key_pair,\n keyparts = \"\",\n valueparts = \"\",\n key, // undef. will be Truthy when Key is resolved.\n datalen = data.length - 1, // stripping ending }\n ch;\n\n for (var i = 1; i < datalen; i += 1) {\n // - { } ' are special.\n\n ch = data[i];\n\n if (ch == \"'\") {\n if (stringparts) {\n // end of string mode\n key = stringparts.join(\"\");\n stringparts = undefined;\n } else {\n // start of string mode\n stringparts = [];\n }\n } else if (stringparts) {\n stringparts.push(ch);\n } else if (ch == \"{\") {\n // start of object\n parentchain.push([activeobject, key]);\n activeobject = {};\n key = undefined;\n } else if (ch == \"}\") {\n // end of object\n parent_key_pair = parentchain.pop();\n parent_key_pair[0][parent_key_pair[1]] = activeobject;\n key = undefined;\n activeobject = parent_key_pair[0];\n } else if (ch == \"-\") {\n sign = -1;\n } else {\n // must be number\n if (key === undefined) {\n if (mappingUncompress.hasOwnProperty(ch)) {\n keyparts += mappingUncompress[ch];\n key = parseInt(keyparts, 16) * sign;\n sign = +1;\n keyparts = \"\";\n } else {\n keyparts += ch;\n }\n } else {\n if (mappingUncompress.hasOwnProperty(ch)) {\n valueparts += mappingUncompress[ch];\n activeobject[key] = parseInt(valueparts, 16) * sign;\n sign = +1;\n key = undefined;\n valueparts = \"\";\n } else {\n valueparts += ch;\n }\n }\n }\n }\n return output;\n });\n\n // encoding = 'Unicode'\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n // Actual 16bit char codes used.\n // no multi-byte logic here\n\n // Unicode characters to WinAnsiEncoding:\n // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n // as well as give strings with some (supported by these fonts) Unicode characters and\n // these will be mapped to win cp1252\n // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n var encodingBlock = {\n codePages: [\"WinAnsiEncoding\"],\n WinAnsiEncoding: uncompress(\n \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n )\n };\n var encodings = {\n Unicode: {\n Courier: encodingBlock,\n \"Courier-Bold\": encodingBlock,\n \"Courier-BoldOblique\": encodingBlock,\n \"Courier-Oblique\": encodingBlock,\n Helvetica: encodingBlock,\n \"Helvetica-Bold\": encodingBlock,\n \"Helvetica-BoldOblique\": encodingBlock,\n \"Helvetica-Oblique\": encodingBlock,\n \"Times-Roman\": encodingBlock,\n \"Times-Bold\": encodingBlock,\n \"Times-BoldItalic\": encodingBlock,\n \"Times-Italic\": encodingBlock\n //\t, 'Symbol'\n //\t, 'ZapfDingbats'\n }\n };\n\n var fontMetrics = {\n Unicode: {\n // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n // width is 476/1000 or 47.6% of its height (regardless of font size)\n // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n \"Courier-Oblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-BoldItalic\": uncompress(\n \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n \"Helvetica-Bold\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-BoldOblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-Bold\": uncompress(\n \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n Symbol: uncompress(\n \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n ),\n Helvetica: uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n ),\n \"Helvetica-BoldOblique\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Times-Italic\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n ),\n \"Times-Roman\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n ),\n \"Helvetica-Oblique\": uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n )\n }\n };\n\n /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n API.events.push([\n \"addFont\",\n function(data) {\n var font = data.font;\n\n var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n if (metrics) {\n font.metadata[\"Unicode\"] = {};\n font.metadata[\"Unicode\"].widths = metrics.widths;\n font.metadata[\"Unicode\"].kerning = metrics.kerning;\n }\n\n var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n if (encodingBlock) {\n font.metadata[\"Unicode\"].encoding = encodingBlock;\n font.encoding = encodingBlock.codePages[0];\n }\n }\n ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n\n var binaryStringToUint8Array = function(binary_string) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n };\n\n var addFont = function(font, file) {\n // eslint-disable-next-line no-control-regex\n if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n file = binaryStringToUint8Array(file);\n } else {\n file = binaryStringToUint8Array(atob(file));\n }\n font.metadata = jsPDF.API.TTFFont.open(file);\n font.metadata.Unicode = font.metadata.Unicode || {\n encoding: {},\n kerning: {},\n widths: []\n };\n font.metadata.glyIdsUsed = [0];\n };\n\n jsPDF.API.events.push([\n \"addFont\",\n function(data) {\n var file = undefined;\n var font = data.font;\n var instance = data.instance;\n if (font.isStandardFont) {\n return;\n }\n if (typeof instance !== \"undefined\") {\n if (instance.existsFileInVFS(font.postScriptName) === false) {\n file = instance.loadFile(font.postScriptName);\n } else {\n file = instance.getFileFromVFS(font.postScriptName);\n }\n if (typeof file !== \"string\") {\n throw new Error(\n \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n addFont(font, file);\n } else {\n throw new Error(\n \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n }\n ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadCanvg() {\n return (function() {\n if (globalObject[\"canvg\"]) {\n return Promise.resolve(globalObject[\"canvg\"]);\n }\n\n return import(\"canvg\");\n\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load canvg: \" + e));\n })\n .then(function(canvg) {\n return canvg.default ? canvg.default : canvg;\n });\n }\n\n /**\n * Parses SVG XML and saves it as image into the PDF.\n *\n * Depends on canvas-element and canvg\n *\n * @name addSvgAsImage\n * @public\n * @function\n * @param {string} SVG-Data as Text\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n * @param {string} alias of SVG-Image (if used multiple times)\n * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation of the image in degrees (0-359)\n *\n * @returns jsPDF jsPDF-instance\n */\n jsPDFAPI.addSvgAsImage = function(\n svg,\n x,\n y,\n w,\n h,\n alias,\n compression,\n rotation\n ) {\n if (isNaN(x) || isNaN(y)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n }\n\n if (isNaN(w) || isNaN(h)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n throw new Error(\n \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n );\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"#fff\"; /// set white fill style\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var options = {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true\n };\n var doc = this;\n return loadCanvg()\n .then(\n function(canvg) {\n return canvg.fromString(ctx, svg, options);\n },\n function() {\n return Promise.reject(new Error(\"Could not load canvg.\"));\n }\n )\n .then(function(instance) {\n return instance.render(options);\n })\n .then(function() {\n doc.addImage(\n canvas.toDataURL(\"image/jpeg\", 1.0),\n x,\n y,\n w,\n h,\n compression,\n rotation\n );\n });\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * @name putTotalPages\n * @function\n * @param {string} pageExpression Regular Expression\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.putTotalPages = function(pageExpression) {\n \"use strict\";\n\n var replaceExpression;\n var totalNumberOfPages = 0;\n if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n replaceExpression = new RegExp(pageExpression, \"g\");\n totalNumberOfPages = this.internal.getNumberOfPages();\n } else {\n replaceExpression = new RegExp(\n this.pdfEscape16(pageExpression, this.internal.getFont()),\n \"g\"\n );\n totalNumberOfPages = this.pdfEscape16(\n this.internal.getNumberOfPages() + \"\",\n this.internal.getFont()\n );\n }\n\n for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n for (var i = 0; i < this.internal.pages[n].length; i++) {\n this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n replaceExpression,\n totalNumberOfPages\n );\n }\n }\n\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * Set the ViewerPreferences of the generated PDF\n *\n * @name viewerPreferences\n * @function\n * @public\n * @param {Object} options Array with the ViewerPreferences
    \n * Example: doc.viewerPreferences({\"FitWindow\":true});
    \n *
    \n * You can set following preferences:
    \n *
    \n * HideToolbar (boolean)
    \n * Default value: false
    \n *
    \n * HideMenubar (boolean)
    \n * Default value: false.
    \n *
    \n * HideWindowUI (boolean)
    \n * Default value: false.
    \n *
    \n * FitWindow (boolean)
    \n * Default value: false.
    \n *
    \n * CenterWindow (boolean)
    \n * Default value: false
    \n *
    \n * DisplayDocTitle (boolean)
    \n * Default value: false.
    \n *
    \n * NonFullScreenPageMode (string)
    \n * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    \n * Default value: UseNone
    \n *
    \n * Direction (string)
    \n * Possible values: L2R, R2L
    \n * Default value: L2R.
    \n *
    \n * ViewArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * ViewClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * PrintScaling (string)
    \n * Possible values: AppDefault, None
    \n * Default value: AppDefault.
    \n *
    \n * Duplex (string)
    \n * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n * Default value: none
    \n *
    \n * PickTrayByPDFSize (boolean)
    \n * Default value: false
    \n *
    \n * PrintPageRange (Array)
    \n * Example: [[1,5], [7,9]]
    \n * Default value: as defined by PDF viewer application
    \n *
    \n * NumCopies (Number)
    \n * Possible values: 1, 2, 3, 4, 5
    \n * Default value: 1
    \n *
    \n * For more information see the PDF Reference, sixth edition on Page 577\n * @param {boolean} doReset True to reset the settings\n * @function\n * @returns jsPDF jsPDF-instance\n * @example\n * var doc = new jsPDF()\n * doc.text('This is a test', 10, 10)\n * doc.viewerPreferences({'FitWindow': true}, true)\n * doc.save(\"viewerPreferences.pdf\")\n *\n * // Example printing 10 copies, using cropbox, and hiding UI.\n * doc.viewerPreferences({\n * 'HideWindowUI': true,\n * 'PrintArea': 'CropBox',\n * 'NumCopies': 10\n * })\n */\n jsPDFAPI.viewerPreferences = function(options, doReset) {\n options = options || {};\n doReset = doReset || false;\n\n var configuration;\n var configurationTemplate = {\n HideToolbar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideMenubar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideWindowUI: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n FitWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n CenterWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n DisplayDocTitle: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.4\n },\n NonFullScreenPageMode: {\n defaultValue: \"UseNone\",\n value: \"UseNone\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n pdfVersion: 1.3\n },\n Direction: {\n defaultValue: \"L2R\",\n value: \"L2R\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"L2R\", \"R2L\"],\n pdfVersion: 1.3\n },\n ViewArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n ViewClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintScaling: {\n defaultValue: \"AppDefault\",\n value: \"AppDefault\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"AppDefault\", \"None\"],\n pdfVersion: 1.6\n },\n Duplex: {\n defaultValue: \"\",\n value: \"none\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\n \"Simplex\",\n \"DuplexFlipShortEdge\",\n \"DuplexFlipLongEdge\",\n \"none\"\n ],\n pdfVersion: 1.7\n },\n PickTrayByPDFSize: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.7\n },\n PrintPageRange: {\n defaultValue: \"\",\n value: \"\",\n type: \"array\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n },\n NumCopies: {\n defaultValue: 1,\n value: 1,\n type: \"integer\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n }\n };\n\n var configurationKeys = Object.keys(configurationTemplate);\n\n var rangeArray = [];\n var i = 0;\n var j = 0;\n var k = 0;\n var isValid;\n\n var method;\n var value;\n\n function arrayContainsElement(array, element) {\n var iterator;\n var result = false;\n\n for (iterator = 0; iterator < array.length; iterator += 1) {\n if (array[iterator] === element) {\n result = true;\n }\n }\n return result;\n }\n\n if (this.internal.viewerpreferences === undefined) {\n this.internal.viewerpreferences = {};\n this.internal.viewerpreferences.configuration = JSON.parse(\n JSON.stringify(configurationTemplate)\n );\n this.internal.viewerpreferences.isSubscribed = false;\n }\n configuration = this.internal.viewerpreferences.configuration;\n\n if (options === \"reset\" || doReset === true) {\n var len = configurationKeys.length;\n\n for (k = 0; k < len; k += 1) {\n configuration[configurationKeys[k]].value =\n configuration[configurationKeys[k]].defaultValue;\n configuration[configurationKeys[k]].explicitSet = false;\n }\n }\n\n if (typeof options === \"object\") {\n for (method in options) {\n value = options[method];\n if (\n arrayContainsElement(configurationKeys, method) &&\n value !== undefined\n ) {\n if (\n configuration[method].type === \"boolean\" &&\n typeof value === \"boolean\"\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"name\" &&\n arrayContainsElement(configuration[method].valueSet, value)\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"integer\" &&\n Number.isInteger(value)\n ) {\n configuration[method].value = value;\n } else if (configuration[method].type === \"array\") {\n for (i = 0; i < value.length; i += 1) {\n isValid = true;\n if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n rangeArray.push(String(value[i] - 1));\n } else if (value[i].length > 1) {\n for (j = 0; j < value[i].length; j += 1) {\n if (typeof value[i][j] !== \"number\") {\n isValid = false;\n }\n }\n if (isValid === true) {\n rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n }\n }\n }\n configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n } else {\n configuration[method].value = configuration[method].defaultValue;\n }\n\n configuration[method].explicitSet = true;\n }\n }\n }\n\n if (this.internal.viewerpreferences.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n var pdfDict = [];\n var vPref;\n for (vPref in configuration) {\n if (configuration[vPref].explicitSet === true) {\n if (configuration[vPref].type === \"name\") {\n pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n } else {\n pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n }\n }\n }\n if (pdfDict.length !== 0) {\n this.internal.write(\n \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n );\n }\n });\n this.internal.viewerpreferences.isSubscribed = true;\n }\n\n this.internal.viewerpreferences.configuration = configuration;\n return this;\n };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var postPutResources = function() {\n var xmpmeta_beginning = '';\n var rdf_beginning =\n '';\n var rdf_ending = \"\";\n var xmpmeta_ending = \"\";\n var utf8_xmpmeta_beginning = unescape(\n encodeURIComponent(xmpmeta_beginning)\n );\n var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n var utf8_metadata = unescape(\n encodeURIComponent(this.internal.__metadata__.metadata)\n );\n var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n var total_len =\n utf8_rdf_beginning.length +\n utf8_metadata.length +\n utf8_rdf_ending.length +\n utf8_xmpmeta_beginning.length +\n utf8_xmpmeta_ending.length;\n\n this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n this.internal.write(\n \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n );\n this.internal.write(\"stream\");\n this.internal.write(\n utf8_xmpmeta_beginning +\n utf8_rdf_beginning +\n utf8_metadata +\n utf8_rdf_ending +\n utf8_xmpmeta_ending\n );\n this.internal.write(\"endstream\");\n this.internal.write(\"endobj\");\n };\n\n var putCatalog = function() {\n if (this.internal.__metadata__.metadata_object_number) {\n this.internal.write(\n \"/Metadata \" +\n this.internal.__metadata__.metadata_object_number +\n \" 0 R\"\n );\n }\n };\n\n /**\n * Adds XMP formatted metadata to PDF\n *\n * @name addMetadata\n * @function\n * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n * @returns {jsPDF} jsPDF-instance\n */\n jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n if (typeof this.internal.__metadata__ === \"undefined\") {\n this.internal.__metadata__ = {\n metadata: metadata,\n namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n };\n this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n this.internal.events.subscribe(\"postPutResources\", postPutResources);\n }\n return this;\n };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n var jsPDFAPI = jsPDF.API;\n\n /***************************************************************************************************/\n /* function : pdfEscape16 */\n /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n /* the corresponding glyph id and width, and then adding padding to the string. */\n /***************************************************************************************************/\n var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n var widths = font.metadata.Unicode.widths;\n var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n var ar = [\"\"];\n for (var i = 0, l = text.length, t; i < l; ++i) {\n t = font.metadata.characterToGlyph(text.charCodeAt(i));\n font.metadata.glyIdsUsed.push(t);\n font.metadata.toUnicode[t] = text.charCodeAt(i);\n if (widths.indexOf(t) == -1) {\n widths.push(t);\n widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n }\n if (t == \"0\") {\n //Spaces are not allowed in cmap.\n return ar.join(\"\");\n } else {\n t = t.toString(16);\n ar.push(padz[4 - t.length], t);\n }\n }\n return ar.join(\"\");\n });\n\n var toUnicodeCmap = function(map) {\n var code, codes, range, unicode, unicodeMap, _i, _len;\n unicodeMap =\n \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\";\n codes = Object.keys(map).sort(function(a, b) {\n return a - b;\n });\n\n range = [];\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (range.length >= 100) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\";\n range = [];\n }\n\n if (\n map[code] !== undefined &&\n map[code] !== null &&\n typeof map[code].toString === \"function\"\n ) {\n unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n code = (\"0000\" + (+code).toString(16)).slice(-4);\n range.push(\"<\" + code + \"><\" + unicode + \">\");\n }\n }\n\n if (range.length) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\\n\";\n }\n unicodeMap +=\n \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n return unicodeMap;\n };\n\n var identityHFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"Identity-H\"\n ) {\n //Tag with Identity-H\n var widths = font.metadata.Unicode.widths;\n var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Type /FontDescriptor\");\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/Flags \" + font.metadata.flags);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\">>\");\n out(\"endobj\");\n\n var DescendantFont = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n out(\"/CIDToGIDMap /Identity\");\n out(\"/DW 1000\");\n out(\"/Subtype /CIDFontType2\");\n out(\"/CIDSystemInfo\");\n out(\"<<\");\n out(\"/Supplement 0\");\n out(\"/Registry (Adobe)\");\n out(\"/Ordering (\" + font.encoding + \")\");\n out(\">>\");\n out(\">>\");\n out(\"endobj\");\n\n font.objectNumber = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/Subtype /Type0\");\n out(\"/ToUnicode \" + cmap + \" 0 R\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/Encoding /\" + font.encoding);\n out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n out(\">>\");\n out(\"endobj\");\n\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n identityHFunction(args);\n }\n ]);\n\n var winAnsiEncodingFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"WinAnsiEncoding\"\n ) {\n //Tag with WinAnsi encoding\n var data = font.metadata.rawData;\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/Type /FontDescriptor\");\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/Flags 96\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\">>\");\n out(\"endobj\");\n font.objectNumber = newObject();\n for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n font.metadata.hmtx.widths[j] = parseInt(\n font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n ); //Change the width of Em units to Point units.\n }\n out(\n \"<>\"\n );\n out(\"endobj\");\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n winAnsiEncodingFunction(args);\n }\n ]);\n\n var utf8TextFunction = function(args) {\n var text = args.text || \"\";\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n\n var pdfEscape = mutex.pdfEscape;\n var activeFontKey = mutex.activeFontKey;\n var fonts = mutex.fonts;\n var key = activeFontKey;\n\n var str = \"\",\n s = 0,\n cmapConfirm;\n var strText = \"\";\n var encoding = fonts[key].encoding;\n\n if (fonts[key].encoding !== \"Identity-H\") {\n return {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n }\n strText = text;\n\n key = activeFontKey;\n if (Array.isArray(text)) {\n strText = text[0];\n }\n for (s = 0; s < strText.length; s += 1) {\n if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n cmapConfirm =\n fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n /*\n if (Object.prototype.toString.call(text) === '[object Array]') {\n var i = 0;\n // for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n } else {\n\n }\n //}\n\n } else {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n }*/\n }\n if (!cmapConfirm) {\n if (\n strText[s].charCodeAt(0) < 256 &&\n fonts[key].metadata.hasOwnProperty(\"Unicode\")\n ) {\n str += strText[s];\n } else {\n str += \"\";\n }\n } else {\n str += strText[s];\n }\n }\n var result = \"\";\n if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n //For the default 13 font\n result = pdfEscape(str, key)\n .split(\"\")\n .map(function(cv) {\n return cv.charCodeAt(0).toString(16);\n })\n .join(\"\");\n } else if (encoding === \"Identity-H\") {\n result = pdfEscape16(str, fonts[key]);\n }\n mutex.isHex = true;\n\n return {\n text: result,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n };\n\n var utf8EscapeFunction = function(parms) {\n var text = parms.text || \"\",\n x = parms.x,\n y = parms.y,\n options = parms.options,\n mutex = parms.mutex;\n var tmpText = [];\n var args = {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n\n if (Array.isArray(text)) {\n var i = 0;\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n if (text[i].length === 3) {\n tmpText.push([\n utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n .text,\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n }\n parms.text = tmpText;\n } else {\n parms.text = utf8TextFunction(\n Object.assign({}, args, { text: text })\n ).text;\n }\n };\n\n jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var _initializeVFS = function() {\n if (typeof this.internal.vFS === \"undefined\") {\n this.internal.vFS = {};\n }\n return true;\n };\n\n /**\n * Check if the file exists in the vFS\n *\n * @name existsFileInVFS\n * @function\n * @param {string} Possible filename in the vFS.\n * @returns {boolean}\n * @example\n * doc.existsFileInVFS(\"someFile.txt\");\n */\n jsPDFAPI.existsFileInVFS = function(filename) {\n _initializeVFS.call(this);\n return typeof this.internal.vFS[filename] !== \"undefined\";\n };\n\n /**\n * Add a file to the vFS\n *\n * @name addFileToVFS\n * @function\n * @param {string} filename The name of the file which should be added.\n * @param {string} filecontent The content of the file.\n * @returns {jsPDF}\n * @example\n * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n */\n jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n _initializeVFS.call(this);\n this.internal.vFS[filename] = filecontent;\n return this;\n };\n\n /**\n * Get the file from the vFS\n *\n * @name getFileFromVFS\n * @function\n * @param {string} The name of the file which gets requested.\n * @returns {string}\n * @example\n * doc.getFileFromVFS(\"someFile.txt\");\n */\n jsPDFAPI.getFileFromVFS = function(filename) {\n _initializeVFS.call(this);\n\n if (typeof this.internal.vFS[filename] !== \"undefined\") {\n return this.internal.vFS[filename];\n }\n return null;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n \"use strict\";\n /**\n * Table of Unicode types.\n *\n * Generated by:\n *\n * var bidi = require(\"./bidi/index\");\n * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n *\n * for( var i = 0; i < bidi_accumulate.length; i++) {\n * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n * }\n * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n *\n * Based on:\n * https://github.com/mathiasbynens/unicode-8.0.0\n */\n var bidiUnicodeTypes = [\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"S\",\n \"B\",\n \"S\",\n \"WS\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"B\",\n \"B\",\n \"S\",\n \"WS\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"CS\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"EN\",\n \"EN\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"N\",\n \"N\",\n \"AL\",\n \"ET\",\n \"ET\",\n \"AL\",\n \"CS\",\n \"AL\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"ET\",\n \"AN\",\n \"AN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"L\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"B\",\n \"LRE\",\n \"RLE\",\n \"PDF\",\n \"LRO\",\n \"RLO\",\n \"CS\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"N\",\n \"LRI\",\n \"RLI\",\n \"FSI\",\n \"PDI\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"NSM\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"ES\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"N\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\"\n ];\n\n /**\n * Unicode Bidi algorithm compliant Bidi engine.\n * For reference see http://unicode.org/reports/tr9/\n */\n\n /**\n * constructor ( options )\n *\n * Initializes Bidi engine\n *\n * @param {Object} See 'setOptions' below for detailed description.\n * options are cashed between invocation of 'doBidiReorder' method\n *\n * sample usage pattern of BidiEngine:\n * var opt = {\n * \tisInputVisual: true,\n * \tisInputRtl: false,\n * \tisOutputVisual: false,\n * \tisOutputRtl: false,\n * \tisSymmetricSwapping: true\n * }\n * var sourceToTarget = [], levels = [];\n * var bidiEng = Globalize.bidiEngine(opt);\n * var src = \"text string to be reordered\";\n * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n */\n\n jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n var _STATE_TABLE_LTR = [\n [0, 3, 0, 1, 0, 0, 0],\n [0, 3, 0, 1, 2, 2, 0],\n [0, 3, 0, 0x11, 2, 0, 1],\n [0, 3, 5, 5, 4, 1, 0],\n [0, 3, 0x15, 0x15, 4, 0, 1],\n [0, 3, 5, 5, 4, 2, 0]\n ];\n\n var _STATE_TABLE_RTL = [\n [2, 0, 1, 1, 0, 1, 0],\n [2, 0, 1, 1, 0, 2, 0],\n [2, 0, 2, 1, 3, 2, 0],\n [2, 0, 2, 0x21, 3, 1, 1]\n ];\n\n var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n var _UNICODE_RANGES_MAP = {\n 0: 0,\n 5: 1,\n 6: 2,\n 7: 3,\n 0x20: 4,\n 0xfb: 5,\n 0xfe: 6,\n 0xff: 7\n };\n\n var _SWAP_TABLE = [\n \"\\u0028\",\n \"\\u0029\",\n \"\\u0028\",\n \"\\u003C\",\n \"\\u003E\",\n \"\\u003C\",\n \"\\u005B\",\n \"\\u005D\",\n \"\\u005B\",\n \"\\u007B\",\n \"\\u007D\",\n \"\\u007B\",\n \"\\u00AB\",\n \"\\u00BB\",\n \"\\u00AB\",\n \"\\u2039\",\n \"\\u203A\",\n \"\\u2039\",\n \"\\u2045\",\n \"\\u2046\",\n \"\\u2045\",\n \"\\u207D\",\n \"\\u207E\",\n \"\\u207D\",\n \"\\u208D\",\n \"\\u208E\",\n \"\\u208D\",\n \"\\u2264\",\n \"\\u2265\",\n \"\\u2264\",\n \"\\u2329\",\n \"\\u232A\",\n \"\\u2329\",\n \"\\uFE59\",\n \"\\uFE5A\",\n \"\\uFE59\",\n \"\\uFE5B\",\n \"\\uFE5C\",\n \"\\uFE5B\",\n \"\\uFE5D\",\n \"\\uFE5E\",\n \"\\uFE5D\",\n \"\\uFE64\",\n \"\\uFE65\",\n \"\\uFE64\"\n ];\n\n var _LTR_RANGES_REG_EXPR = new RegExp(\n /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n );\n\n var _lastArabic = false,\n _hasUbatAl,\n _hasUbatB,\n _hasUbatS,\n DIR_LTR = 0,\n DIR_RTL = 1,\n _isInVisual,\n _isInRtl,\n _isOutVisual,\n _isOutRtl,\n _isSymmetricSwapping,\n _dir = DIR_LTR;\n\n this.__bidiEngine__ = {};\n\n var _init = function(text, sourceToTargetMap) {\n if (sourceToTargetMap) {\n for (var i = 0; i < text.length; i++) {\n sourceToTargetMap[i] = i;\n }\n }\n if (_isInRtl === undefined) {\n _isInRtl = _isContextualDirRtl(text);\n }\n if (_isOutRtl === undefined) {\n _isOutRtl = _isContextualDirRtl(text);\n }\n };\n\n // for reference see 3.2 in http://unicode.org/reports/tr9/\n //\n var _getCharType = function(ch) {\n var charCode = ch.charCodeAt(),\n range = charCode >> 8,\n rangeIdx = _UNICODE_RANGES_MAP[range];\n\n if (rangeIdx !== undefined) {\n return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n } else if (range === 0xfc || range === 0xfd) {\n return \"AL\";\n } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n //unlikely case\n return \"L\";\n } else if (range === 8) {\n // even less likely\n return \"R\";\n }\n return \"N\"; //undefined type, mark as neutral\n };\n\n var _isContextualDirRtl = function(text) {\n for (var i = 0, charType; i < text.length; i++) {\n charType = _getCharType(text.charAt(i));\n if (charType === \"L\") {\n return false;\n } else if (charType === \"R\") {\n return true;\n }\n }\n return false;\n };\n\n // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n //\n var _resolveCharType = function(chars, types, resolvedTypes, index) {\n var cType = types[index],\n wType,\n nType,\n i,\n len;\n switch (cType) {\n case \"L\":\n case \"R\":\n _lastArabic = false;\n break;\n case \"N\":\n case \"AN\":\n break;\n\n case \"EN\":\n if (_lastArabic) {\n cType = \"AN\";\n }\n break;\n\n case \"AL\":\n _lastArabic = true;\n _hasUbatAl = true;\n cType = \"R\";\n break;\n\n case \"WS\":\n cType = \"N\";\n break;\n\n case \"CS\":\n if (\n index < 1 ||\n index + 1 >= types.length ||\n ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n ) {\n cType = \"N\";\n } else if (_lastArabic) {\n nType = \"AN\";\n }\n cType = nType === wType ? nType : \"N\";\n break;\n\n case \"ES\":\n wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n cType =\n wType === \"EN\" &&\n index + 1 < types.length &&\n types[index + 1] === \"EN\"\n ? \"EN\"\n : \"N\";\n break;\n\n case \"ET\":\n if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n cType = \"EN\";\n break;\n } else if (_lastArabic) {\n cType = \"N\";\n break;\n }\n i = index + 1;\n len = types.length;\n while (i < len && types[i] === \"ET\") {\n i++;\n }\n if (i < len && types[i] === \"EN\") {\n cType = \"EN\";\n } else {\n cType = \"N\";\n }\n break;\n\n case \"NSM\":\n if (_isInVisual && !_isInRtl) {\n //V->L\n len = types.length;\n i = index + 1;\n while (i < len && types[i] === \"NSM\") {\n i++;\n }\n if (i < len) {\n var c = chars[index];\n var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n wType = types[i];\n if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n cType = \"R\";\n break;\n }\n }\n }\n if (index < 1 || (wType = types[index - 1]) === \"B\") {\n cType = \"N\";\n } else {\n cType = resolvedTypes[index - 1];\n }\n break;\n\n case \"B\":\n _lastArabic = false;\n _hasUbatB = true;\n cType = _dir;\n break;\n\n case \"S\":\n _hasUbatS = true;\n cType = \"N\";\n break;\n\n case \"LRE\":\n case \"RLE\":\n case \"LRO\":\n case \"RLO\":\n case \"PDF\":\n _lastArabic = false;\n break;\n case \"BN\":\n cType = \"N\";\n break;\n }\n return cType;\n };\n\n var _handleUbatS = function(types, levels, length) {\n for (var i = 0; i < length; i++) {\n if (types[i] === \"S\") {\n levels[i] = _dir;\n for (var j = i - 1; j >= 0; j--) {\n if (types[j] === \"WS\") {\n levels[j] = _dir;\n } else {\n break;\n }\n }\n }\n }\n };\n\n var _invertString = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\");\n if (levels) {\n _computeLevels(charArray, levels, { hiLevel: _dir });\n }\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return charArray.join(\"\");\n };\n\n // For reference see 3.3 in http://unicode.org/reports/tr9/\n //\n var _computeLevels = function(chars, levels, params) {\n var action,\n condition,\n i,\n index,\n newLevel,\n prevState,\n condPos = -1,\n len = chars.length,\n newState = 0,\n resolvedTypes = [],\n stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n types = [];\n\n _lastArabic = false;\n _hasUbatAl = false;\n _hasUbatB = false;\n _hasUbatS = false;\n for (i = 0; i < len; i++) {\n types[i] = _getCharType(chars[i]);\n }\n for (index = 0; index < len; index++) {\n prevState = newState;\n resolvedTypes[index] = _resolveCharType(\n chars,\n types,\n resolvedTypes,\n index\n );\n newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n action = newState & 0xf0;\n newState &= 0x0f;\n levels[index] = newLevel = stateTable[newState][5];\n if (action > 0) {\n if (action === 0x10) {\n for (i = condPos; i < index; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n condition = stateTable[newState][6];\n if (condition) {\n if (condPos === -1) {\n condPos = index;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < index; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (types[index] === \"B\") {\n levels[index] = 0;\n }\n params.hiLevel |= newLevel;\n }\n if (_hasUbatS) {\n _handleUbatS(types, levels, len);\n }\n };\n\n // for reference see 3.4 in http://unicode.org/reports/tr9/\n //\n var _invertByLevel = function(\n level,\n charArray,\n sourceToTargetMap,\n levels,\n params\n ) {\n if (params.hiLevel < level) {\n return;\n }\n if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return;\n }\n var ch,\n high,\n end,\n low,\n len = charArray.length,\n start = 0;\n\n while (start < len) {\n if (levels[start] >= level) {\n end = start + 1;\n while (end < len && levels[end] >= level) {\n end++;\n }\n for (low = start, high = end - 1; low < high; low++, high--) {\n ch = charArray[low];\n charArray[low] = charArray[high];\n charArray[high] = ch;\n if (sourceToTargetMap) {\n ch = sourceToTargetMap[low];\n sourceToTargetMap[low] = sourceToTargetMap[high];\n sourceToTargetMap[high] = ch;\n }\n }\n start = end;\n }\n start++;\n }\n };\n\n // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n //\n var _symmetricSwap = function(charArray, levels, params) {\n if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n for (var i = 0, index; i < charArray.length; i++) {\n if (levels[i] === 1) {\n index = _SWAP_TABLE.indexOf(charArray[i]);\n if (index >= 0) {\n charArray[i] = _SWAP_TABLE[index + 1];\n }\n }\n }\n }\n };\n\n var _reorder = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\"),\n params = { hiLevel: _dir };\n\n if (!levels) {\n levels = [];\n }\n _computeLevels(charArray, levels, params);\n _symmetricSwap(charArray, levels, params);\n _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n return charArray.join(\"\");\n };\n\n // doBidiReorder( text, sourceToTargetMap, levels )\n // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n // Returns reordered string\n // @text [String]:\n // - input string to be reordered, this is input parameter\n // $sourceToTargetMap [Array] (optional)\n // - resultant mapping between input and output strings, this is output parameter\n // $levels [Array] (optional)\n // - array of calculated Bidi levels, , this is output parameter\n this.__bidiEngine__.doBidiReorder = function(\n text,\n sourceToTargetMap,\n levels\n ) {\n _init(text, sourceToTargetMap);\n if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n // LLTR->VLTR, LRTL->VLTR\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n // VRTL->VLTR, VLTR->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _invertString(text, sourceToTargetMap, levels);\n } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n // LLTR->VRTL, LRTL->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n // VLTR->LLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // VLTR->LRTL, VRTL->LLTR\n text = _invertString(text, sourceToTargetMap);\n if (_isInRtl) {\n //LLTR -> VLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else {\n //LRTL -> VRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n }\n } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n // VRTL->LRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // LRTL->LLTR, LLTR->LRTL\n var isSymmetricSwappingOrig = _isSymmetricSwapping;\n if (_isInRtl) {\n //LRTL->LLTR\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n _dir = DIR_LTR;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n } else {\n //LLTR->LRTL\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n _dir = DIR_RTL;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n text = _invertString(text, sourceToTargetMap);\n }\n }\n return text;\n };\n\n /**\n * @name setOptions( options )\n * @function\n * Sets options for Bidi conversion\n * @param {Object}:\n * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n */\n this.__bidiEngine__.setOptions = function(options) {\n if (options) {\n _isInVisual = options.isInputVisual;\n _isOutVisual = options.isOutputVisual;\n _isInRtl = options.isInputRtl;\n _isOutRtl = options.isOutputRtl;\n _isSymmetricSwapping = options.isSymmetricSwapping;\n }\n };\n\n this.__bidiEngine__.setOptions(options);\n return this.__bidiEngine__;\n };\n\n var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n var bidiEngineFunction = function(args) {\n var text = args.text;\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n var lang = options.lang;\n var tmpText = [];\n\n options.isInputVisual =\n typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n bidiEngine.setOptions(options);\n\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n tmpText.push([\n bidiEngine.doBidiReorder(text[i][0]),\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n }\n }\n args.text = tmpText;\n } else {\n args.text = bidiEngine.doBidiReorder(text);\n }\n bidiEngine.setOptions({ isInputVisual: true });\n };\n\n jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font *\n * Start Data : 2017. 01. 22. *\n * Comment : TEXT API *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n /************************************************************************/\n /* function : open */\n /* comment : Decode the encoded ttf content and create a TTFFont object. */\n /************************************************************************/\n TTFFont.open = function(file) {\n return new TTFFont(file);\n };\n /***************************************************************/\n /* function : TTFFont gernerator */\n /* comment : Decode TTF contents are parsed, Data, */\n /* Subset object is created, and registerTTF function is called.*/\n /***************************************************************/\n function TTFFont(rawData) {\n var data;\n this.rawData = rawData;\n data = this.contents = new Data(rawData);\n this.contents.pos = 4;\n if (data.readString(4) === \"ttcf\") {\n throw new Error(\"TTCF not supported.\");\n } else {\n data.pos = 0;\n this.parse();\n this.subset = new Subset(this);\n this.registerTTF();\n }\n }\n /********************************************************/\n /* function : parse */\n /* comment : TTF Parses the file contents by each table.*/\n /********************************************************/\n TTFFont.prototype.parse = function() {\n this.directory = new Directory(this.contents);\n this.head = new HeadTable(this);\n this.name = new NameTable(this);\n this.cmap = new CmapTable(this);\n this.toUnicode = {};\n this.hhea = new HheaTable(this);\n this.maxp = new MaxpTable(this);\n this.hmtx = new HmtxTable(this);\n this.post = new PostTable(this);\n this.os2 = new OS2Table(this);\n this.loca = new LocaTable(this);\n this.glyf = new GlyfTable(this);\n this.ascender =\n (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n this.decender =\n (this.os2.exists && this.os2.decender) || this.hhea.decender;\n this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n return (this.bbox = [\n this.head.xMin,\n this.head.yMin,\n this.head.xMax,\n this.head.yMax\n ]);\n };\n /***************************************************************/\n /* function : registerTTF */\n /* comment : Get the value to assign pdf font descriptors. */\n /***************************************************************/\n TTFFont.prototype.registerTTF = function() {\n var e, hi, low, raw, _ref;\n this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n this.bbox = function() {\n var _i, _len, _ref, _results;\n _ref = this.bbox;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n e = _ref[_i];\n _results.push(Math.round(e * this.scaleFactor));\n }\n return _results;\n }.call(this);\n this.stemV = 0;\n if (this.post.exists) {\n raw = this.post.italic_angle;\n hi = raw >> 16;\n low = raw & 0xff;\n if ((hi & 0x8000) !== 0) {\n hi = -((hi ^ 0xffff) + 1);\n }\n this.italicAngle = +(\"\" + hi + \".\" + low);\n } else {\n this.italicAngle = 0;\n }\n this.ascender = Math.round(this.ascender * this.scaleFactor);\n this.decender = Math.round(this.decender * this.scaleFactor);\n this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n this.isSerif =\n (_ref = this.familyClass) === 1 ||\n _ref === 2 ||\n _ref === 3 ||\n _ref === 4 ||\n _ref === 5 ||\n _ref === 7;\n this.isScript = this.familyClass === 10;\n this.flags = 0;\n if (this.post.isFixedPitch) {\n this.flags |= 1 << 0;\n }\n if (this.isSerif) {\n this.flags |= 1 << 1;\n }\n if (this.isScript) {\n this.flags |= 1 << 3;\n }\n if (this.italicAngle !== 0) {\n this.flags |= 1 << 6;\n }\n this.flags |= 1 << 5;\n if (!this.cmap.unicode) {\n throw new Error(\"No unicode cmap for font\");\n }\n };\n TTFFont.prototype.characterToGlyph = function(character) {\n var _ref;\n return (\n ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n 0\n );\n };\n TTFFont.prototype.widthOfGlyph = function(glyph) {\n var scale;\n scale = 1000.0 / this.head.unitsPerEm;\n return this.hmtx.forGlyph(glyph).advance * scale;\n };\n TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n var charCode, i, scale, width, _ref;\n string = \"\" + string;\n width = 0;\n for (\n i = 0, _ref = string.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n charCode = string.charCodeAt(i);\n width +=\n this.widthOfGlyph(this.characterToGlyph(charCode)) +\n charSpace * (1000 / size) || 0;\n }\n scale = size / 1000;\n return width * scale;\n };\n TTFFont.prototype.lineHeight = function(size, includeGap) {\n var gap;\n if (includeGap == null) {\n includeGap = false;\n }\n gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.decender) / 1000) * size;\n };\n return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n function Data(data) {\n this.data = data != null ? data : [];\n this.pos = 0;\n this.length = this.data.length;\n }\n Data.prototype.readByte = function() {\n return this.data[this.pos++];\n };\n Data.prototype.writeByte = function(byte) {\n return (this.data[this.pos++] = byte);\n };\n Data.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.readByte() * 0x1000000;\n b2 = this.readByte() << 16;\n b3 = this.readByte() << 8;\n b4 = this.readByte();\n return b1 + b2 + b3 + b4;\n };\n Data.prototype.writeUInt32 = function(val) {\n this.writeByte((val >>> 24) & 0xff);\n this.writeByte((val >> 16) & 0xff);\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt32 = function() {\n var int;\n int = this.readUInt32();\n if (int >= 0x80000000) {\n return int - 0x100000000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt32 = function(val) {\n if (val < 0) {\n val += 0x100000000;\n }\n return this.writeUInt32(val);\n };\n Data.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.readByte() << 8;\n b2 = this.readByte();\n return b1 | b2;\n };\n Data.prototype.writeUInt16 = function(val) {\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt16 = function() {\n var int;\n int = this.readUInt16();\n if (int >= 0x8000) {\n return int - 0x10000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt16 = function(val) {\n if (val < 0) {\n val += 0x10000;\n }\n return this.writeUInt16(val);\n };\n Data.prototype.readString = function(length) {\n var i, ret;\n ret = [];\n for (\n i = 0;\n 0 <= length ? i < length : i > length;\n i = 0 <= length ? ++i : --i\n ) {\n ret[i] = String.fromCharCode(this.readByte());\n }\n return ret.join(\"\");\n };\n Data.prototype.writeString = function(val) {\n var i, _ref, _results;\n _results = [];\n for (\n i = 0, _ref = val.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n _results.push(this.writeByte(val.charCodeAt(i)));\n }\n return _results;\n };\n /*Data.prototype.stringAt = function (pos, length) {\n this.pos = pos;\n return this.readString(length);\n };*/\n Data.prototype.readShort = function() {\n return this.readInt16();\n };\n Data.prototype.writeShort = function(val) {\n return this.writeInt16(val);\n };\n Data.prototype.readLongLong = function() {\n var b1, b2, b3, b4, b5, b6, b7, b8;\n b1 = this.readByte();\n b2 = this.readByte();\n b3 = this.readByte();\n b4 = this.readByte();\n b5 = this.readByte();\n b6 = this.readByte();\n b7 = this.readByte();\n b8 = this.readByte();\n if (b1 & 0x80) {\n return (\n ((b1 ^ 0xff) * 0x100000000000000 +\n (b2 ^ 0xff) * 0x1000000000000 +\n (b3 ^ 0xff) * 0x10000000000 +\n (b4 ^ 0xff) * 0x100000000 +\n (b5 ^ 0xff) * 0x1000000 +\n (b6 ^ 0xff) * 0x10000 +\n (b7 ^ 0xff) * 0x100 +\n (b8 ^ 0xff) +\n 1) *\n -1\n );\n }\n return (\n b1 * 0x100000000000000 +\n b2 * 0x1000000000000 +\n b3 * 0x10000000000 +\n b4 * 0x100000000 +\n b5 * 0x1000000 +\n b6 * 0x10000 +\n b7 * 0x100 +\n b8\n );\n };\n Data.prototype.writeLongLong = function(val) {\n var high, low;\n high = Math.floor(val / 0x100000000);\n low = val & 0xffffffff;\n this.writeByte((high >> 24) & 0xff);\n this.writeByte((high >> 16) & 0xff);\n this.writeByte((high >> 8) & 0xff);\n this.writeByte(high & 0xff);\n this.writeByte((low >> 24) & 0xff);\n this.writeByte((low >> 16) & 0xff);\n this.writeByte((low >> 8) & 0xff);\n return this.writeByte(low & 0xff);\n };\n Data.prototype.readInt = function() {\n return this.readInt32();\n };\n Data.prototype.writeInt = function(val) {\n return this.writeInt32(val);\n };\n /*Data.prototype.slice = function (start, end) {\n return this.data.slice(start, end);\n };*/\n Data.prototype.read = function(bytes) {\n var buf, i;\n buf = [];\n for (\n i = 0;\n 0 <= bytes ? i < bytes : i > bytes;\n i = 0 <= bytes ? ++i : --i\n ) {\n buf.push(this.readByte());\n }\n return buf;\n };\n Data.prototype.write = function(bytes) {\n var byte, i, _len, _results;\n _results = [];\n for (i = 0, _len = bytes.length; i < _len; i++) {\n byte = bytes[i];\n _results.push(this.writeByte(byte));\n }\n return _results;\n };\n return Data;\n})();\n\nvar Directory = (function() {\n var checksum;\n\n /*****************************************************************************************************/\n /* function : Directory generator */\n /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n /*****************************************************************************************************/\n function Directory(data) {\n var entry, i, _ref;\n this.scalarType = data.readInt();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n this.tables = {};\n for (\n i = 0, _ref = this.tableCount;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n entry = {\n tag: data.readString(4),\n checksum: data.readInt(),\n offset: data.readInt(),\n length: data.readInt()\n };\n this.tables[entry.tag] = entry;\n }\n }\n /********************************************************************************************************/\n /* function : encode */\n /* comment : It encodes and stores the font table object and information used for the directory object. */\n /********************************************************************************************************/\n Directory.prototype.encode = function(tables) {\n var adjustment,\n directory,\n directoryLength,\n entrySelector,\n headOffset,\n log2,\n offset,\n rangeShift,\n searchRange,\n sum,\n table,\n tableCount,\n tableData,\n tag;\n tableCount = Object.keys(tables).length;\n log2 = Math.log(2);\n searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n entrySelector = Math.floor(searchRange / log2);\n rangeShift = tableCount * 16 - searchRange;\n directory = new Data();\n directory.writeInt(this.scalarType);\n directory.writeShort(tableCount);\n directory.writeShort(searchRange);\n directory.writeShort(entrySelector);\n directory.writeShort(rangeShift);\n directoryLength = tableCount * 16;\n offset = directory.pos + directoryLength;\n headOffset = null;\n tableData = [];\n for (tag in tables) {\n table = tables[tag];\n directory.writeString(tag);\n directory.writeInt(checksum(table));\n directory.writeInt(offset);\n directory.writeInt(table.length);\n tableData = tableData.concat(table);\n if (tag === \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.push(0);\n offset++;\n }\n }\n directory.write(tableData);\n sum = checksum(directory.data);\n adjustment = 0xb1b0afba - sum;\n directory.pos = headOffset + 8;\n directory.writeUInt32(adjustment);\n return directory.data;\n };\n /***************************************************************/\n /* function : checksum */\n /* comment : Duplicate the table for the tag. */\n /***************************************************************/\n checksum = function(data) {\n var i, sum, tmp, _ref;\n data = __slice.call(data);\n while (data.length % 4) {\n data.push(0);\n }\n tmp = new Data(data);\n sum = 0;\n for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n sum += tmp.readUInt32();\n }\n return sum & 0xffffffff;\n };\n return Directory;\n})();\n\nvar Table,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) {\n for (var key in parent) {\n if (__hasProp.call(parent, key)) child[key] = parent[key];\n }\n\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n\n/***************************************************************/\n/* function : Table */\n/* comment : Save info for each table, and parse the table. */\n/***************************************************************/\nTable = (function() {\n function Table(file) {\n var info;\n this.file = file;\n info = this.file.directory.tables[this.tag];\n this.exists = !!info;\n if (info) {\n (this.offset = info.offset), (this.length = info.length);\n this.parse(this.file.contents);\n }\n }\n Table.prototype.parse = function() {};\n Table.prototype.encode = function() {};\n Table.prototype.raw = function() {\n if (!this.exists) {\n return null;\n }\n this.file.contents.pos = this.offset;\n return this.file.contents.read(this.length);\n };\n return Table;\n})();\n\nvar HeadTable = (function(_super) {\n __extends(HeadTable, _super);\n\n function HeadTable() {\n return HeadTable.__super__.constructor.apply(this, arguments);\n }\n HeadTable.prototype.tag = \"head\";\n HeadTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.revision = data.readInt();\n this.checkSumAdjustment = data.readInt();\n this.magicNumber = data.readInt();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.readLongLong();\n this.modified = data.readLongLong();\n this.xMin = data.readShort();\n this.yMin = data.readShort();\n this.xMax = data.readShort();\n this.yMax = data.readShort();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort();\n this.indexToLocFormat = data.readShort();\n return (this.glyphDataFormat = data.readShort());\n };\n HeadTable.prototype.encode = function(indexToLocFormat) {\n var table;\n table = new Data();\n table.writeInt(this.version);\n table.writeInt(this.revision);\n table.writeInt(this.checkSumAdjustment);\n table.writeInt(this.magicNumber);\n table.writeShort(this.flags);\n table.writeShort(this.unitsPerEm);\n table.writeLongLong(this.created);\n table.writeLongLong(this.modified);\n table.writeShort(this.xMin);\n table.writeShort(this.yMin);\n table.writeShort(this.xMax);\n table.writeShort(this.yMax);\n table.writeShort(this.macStyle);\n table.writeShort(this.lowestRecPPEM);\n table.writeShort(this.fontDirectionHint);\n table.writeShort(indexToLocFormat);\n table.writeShort(this.glyphDataFormat);\n return table.data;\n };\n return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n function CmapEntry(data, offset) {\n var code,\n count,\n endCode,\n glyphId,\n glyphIds,\n i,\n idDelta,\n idRangeOffset,\n index,\n saveOffset,\n segCount,\n segCountX2,\n start,\n startCode,\n tail,\n _j,\n _k,\n _len;\n this.platformID = data.readUInt16();\n this.encodingID = data.readShort();\n this.offset = offset + data.readInt();\n saveOffset = data.pos;\n data.pos = this.offset;\n this.format = data.readUInt16();\n this.length = data.readUInt16();\n this.language = data.readUInt16();\n this.isUnicode =\n (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n (this.platformID === 0 && this.format === 4);\n this.codeMap = {};\n switch (this.format) {\n case 0:\n for (i = 0; i < 256; ++i) {\n this.codeMap[i] = data.readByte();\n }\n break;\n case 4:\n segCountX2 = data.readUInt16();\n segCount = segCountX2 / 2;\n data.pos += 6;\n endCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n data.pos += 2;\n startCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idDelta = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idRangeOffset = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n count = (this.length - data.pos + this.offset) / 2;\n glyphIds = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= count ? _j < count : _j > count;\n i = 0 <= count ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n tail = endCode[i];\n start = startCode[i];\n for (\n code = _k = start;\n start <= tail ? _k <= tail : _k >= tail;\n code = start <= tail ? ++_k : --_k\n ) {\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n this.codeMap[code] = glyphId & 0xffff;\n }\n }\n }\n data.pos = saveOffset;\n }\n CmapEntry.encode = function(charmap, encoding) {\n var charMap,\n code,\n codeMap,\n codes,\n delta,\n deltas,\n diff,\n endCode,\n endCodes,\n entrySelector,\n glyphIDs,\n i,\n id,\n indexes,\n last,\n map,\n nextID,\n offset,\n old,\n rangeOffsets,\n rangeShift,\n searchRange,\n segCount,\n segCountX2,\n startCode,\n startCodes,\n startGlyph,\n subtable,\n _i,\n _j,\n _k,\n _l,\n _len,\n _len1,\n _len2,\n _len3,\n _len4,\n _len5,\n _len6,\n _len7,\n _m,\n _n,\n _name,\n _o,\n _p,\n _q;\n subtable = new Data();\n codes = Object.keys(charmap).sort(function(a, b) {\n return a - b;\n });\n switch (encoding) {\n case \"macroman\":\n id = 0;\n indexes = (function() {\n var _results = [];\n for (i = 0; i < 256; ++i) {\n _results.push(0);\n }\n return _results;\n })();\n map = {\n 0: 0\n };\n codeMap = {};\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (map[(_name = charmap[code])] == null) {\n map[_name] = ++id;\n }\n codeMap[code] = {\n old: charmap[code],\n new: map[charmap[code]]\n };\n indexes[code] = map[charmap[code]];\n }\n subtable.writeUInt16(1);\n subtable.writeUInt16(0);\n subtable.writeUInt32(12);\n subtable.writeUInt16(0);\n subtable.writeUInt16(262);\n subtable.writeUInt16(0);\n subtable.write(indexes);\n return {\n charMap: codeMap,\n subtable: subtable.data,\n maxGlyphID: id + 1\n };\n case \"unicode\":\n startCodes = [];\n endCodes = [];\n nextID = 0;\n map = {};\n charMap = {};\n last = diff = null;\n for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n code = codes[_j];\n old = charmap[code];\n if (map[old] == null) {\n map[old] = ++nextID;\n }\n charMap[code] = {\n old: old,\n new: map[old]\n };\n delta = map[old] - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xffff);\n startCodes.push(0xffff);\n segCount = startCodes.length;\n segCountX2 = segCount * 2;\n searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n entrySelector = Math.log(searchRange / 2) / Math.LN2;\n rangeShift = 2 * segCount - searchRange;\n deltas = [];\n rangeOffsets = [];\n glyphIDs = [];\n for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n startCode = startCodes[i];\n endCode = endCodes[i];\n if (startCode === 0xffff) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n startGlyph = charMap[startCode][\"new\"];\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n for (\n code = _l = startCode;\n startCode <= endCode ? _l <= endCode : _l >= endCode;\n code = startCode <= endCode ? ++_l : --_l\n ) {\n glyphIDs.push(charMap[code][\"new\"]);\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n subtable.writeUInt16(3);\n subtable.writeUInt16(1);\n subtable.writeUInt32(12);\n subtable.writeUInt16(4);\n subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n subtable.writeUInt16(0);\n subtable.writeUInt16(segCountX2);\n subtable.writeUInt16(searchRange);\n subtable.writeUInt16(entrySelector);\n subtable.writeUInt16(rangeShift);\n for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n code = endCodes[_m];\n subtable.writeUInt16(code);\n }\n subtable.writeUInt16(0);\n for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n code = startCodes[_n];\n subtable.writeUInt16(code);\n }\n for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n delta = deltas[_o];\n subtable.writeUInt16(delta);\n }\n for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n offset = rangeOffsets[_p];\n subtable.writeUInt16(offset);\n }\n for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n id = glyphIDs[_q];\n subtable.writeUInt16(id);\n }\n return {\n charMap: charMap,\n subtable: subtable.data,\n maxGlyphID: nextID + 1\n };\n }\n };\n return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n __extends(CmapTable, _super);\n\n function CmapTable() {\n return CmapTable.__super__.constructor.apply(this, arguments);\n }\n CmapTable.prototype.tag = \"cmap\";\n CmapTable.prototype.parse = function(data) {\n var entry, i, tableCount;\n data.pos = this.offset;\n this.version = data.readUInt16();\n tableCount = data.readUInt16();\n this.tables = [];\n this.unicode = null;\n for (\n i = 0;\n 0 <= tableCount ? i < tableCount : i > tableCount;\n i = 0 <= tableCount ? ++i : --i\n ) {\n entry = new CmapEntry(data, this.offset);\n this.tables.push(entry);\n if (entry.isUnicode) {\n if (this.unicode == null) {\n this.unicode = entry;\n }\n }\n }\n return true;\n };\n /*************************************************************************/\n /* function : encode */\n /* comment : Encode the cmap table corresponding to the input character. */\n /*************************************************************************/\n CmapTable.encode = function(charmap, encoding) {\n var result, table;\n if (encoding == null) {\n encoding = \"macroman\";\n }\n result = CmapEntry.encode(charmap, encoding);\n table = new Data();\n table.writeUInt16(0);\n table.writeUInt16(1);\n result.table = table.data.concat(result.subtable);\n return result;\n };\n return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n __extends(HheaTable, _super);\n\n function HheaTable() {\n return HheaTable.__super__.constructor.apply(this, arguments);\n }\n HheaTable.prototype.tag = \"hhea\";\n HheaTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.ascender = data.readShort();\n this.decender = data.readShort();\n this.lineGap = data.readShort();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort();\n this.minRightSideBearing = data.readShort();\n this.xMaxExtent = data.readShort();\n this.caretSlopeRise = data.readShort();\n this.caretSlopeRun = data.readShort();\n this.caretOffset = data.readShort();\n data.pos += 4 * 2;\n this.metricDataFormat = data.readShort();\n return (this.numberOfMetrics = data.readUInt16());\n };\n /*HheaTable.prototype.encode = function (ids) {\n var i, table, _i, _ref;\n table = new Data;\n table.writeInt(this.version);\n table.writeShort(this.ascender);\n table.writeShort(this.decender);\n table.writeShort(this.lineGap);\n table.writeShort(this.advanceWidthMax);\n table.writeShort(this.minLeftSideBearing);\n table.writeShort(this.minRightSideBearing);\n table.writeShort(this.xMaxExtent);\n table.writeShort(this.caretSlopeRise);\n table.writeShort(this.caretSlopeRun);\n table.writeShort(this.caretOffset);\n for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n table.writeByte(0);\n }\n table.writeShort(this.metricDataFormat);\n table.writeUInt16(ids.length);\n return table.data;\n };*/\n return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n __extends(OS2Table, _super);\n\n function OS2Table() {\n return OS2Table.__super__.constructor.apply(this, arguments);\n }\n OS2Table.prototype.tag = \"OS/2\";\n OS2Table.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readUInt16();\n this.averageCharWidth = data.readShort();\n this.weightClass = data.readUInt16();\n this.widthClass = data.readUInt16();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort();\n this.ySubscriptYSize = data.readShort();\n this.ySubscriptXOffset = data.readShort();\n this.ySubscriptYOffset = data.readShort();\n this.ySuperscriptXSize = data.readShort();\n this.ySuperscriptYSize = data.readShort();\n this.ySuperscriptXOffset = data.readShort();\n this.ySuperscriptYOffset = data.readShort();\n this.yStrikeoutSize = data.readShort();\n this.yStrikeoutPosition = data.readShort();\n this.familyClass = data.readShort();\n this.panose = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 10; ++i) {\n _results.push(data.readByte());\n }\n return _results;\n })();\n this.charRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 4; ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort();\n this.descent = data.readShort();\n this.lineGap = data.readShort();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 2; i = ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n return (this.maxContext = data.readShort());\n }\n }\n };\n /*OS2Table.prototype.encode = function () {\n return this.raw();\n };*/\n return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n var POSTSCRIPT_GLYPHS;\n __extends(PostTable, _super);\n\n function PostTable() {\n return PostTable.__super__.constructor.apply(this, arguments);\n }\n PostTable.prototype.tag = \"post\";\n PostTable.prototype.parse = function(data) {\n var length, numberOfGlyphs, _results;\n data.pos = this.offset;\n this.format = data.readInt();\n this.italicAngle = data.readInt();\n this.underlinePosition = data.readShort();\n this.underlineThickness = data.readShort();\n this.isFixedPitch = data.readInt();\n this.minMemType42 = data.readInt();\n this.maxMemType42 = data.readInt();\n this.minMemType1 = data.readInt();\n this.maxMemType1 = data.readInt();\n switch (this.format) {\n case 0x00010000:\n break;\n case 0x00020000:\n numberOfGlyphs = data.readUInt16();\n this.glyphNameIndex = [];\n var i;\n for (\n i = 0;\n 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n i = 0 <= numberOfGlyphs ? ++i : --i\n ) {\n this.glyphNameIndex.push(data.readUInt16());\n }\n this.names = [];\n _results = [];\n while (data.pos < this.offset + this.length) {\n length = data.readByte();\n _results.push(this.names.push(data.readString(length)));\n }\n return _results;\n case 0x00025000:\n numberOfGlyphs = data.readUInt16();\n return (this.offsets = data.read(numberOfGlyphs));\n case 0x00030000:\n break;\n case 0x00040000:\n return (this.map = function() {\n var _j, _ref, _results1;\n _results1 = [];\n for (\n i = _j = 0, _ref = this.file.maxp.numGlyphs;\n 0 <= _ref ? _j < _ref : _j > _ref;\n i = 0 <= _ref ? ++_j : --_j\n ) {\n _results1.push(data.readUInt32());\n }\n return _results1;\n }.call(this));\n }\n };\n /*PostTable.prototype.glyphFor = function (code) {\n var index;\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 0x00020000:\n index = this.glyphNameIndex[code];\n if (index <= 257) {\n return POSTSCRIPT_GLYPHS[index];\n }\n else {\n return this.names[index - 258] || '.notdef';\n }\n break;\n case 0x00025000:\n return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n case 0x00030000:\n return '.notdef';\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };*/\n /*PostTable.prototype.encode = function (mapping) {\n var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n if (!this.exists) {\n return null;\n }\n raw = this.raw();\n if (this.format === 0x00030000) {\n return raw;\n }\n table = new Data(raw.slice(0, 32));\n table.writeUInt32(0x00020000);\n table.pos = 32;\n indexes = [];\n strings = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n post = this.glyphFor(id);\n position = POSTSCRIPT_GLYPHS.indexOf(post);\n if (position !== -1) {\n indexes.push(position);\n }\n else {\n indexes.push(257 + strings.length);\n strings.push(post);\n }\n }\n table.writeUInt16(Object.keys(mapping).length);\n for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n index = indexes[_j];\n table.writeUInt16(index);\n }\n for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n string = strings[_k];\n table.writeByte(string.length);\n table.writeString(string);\n }\n return table.data;\n };*/\n POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\\nbracketleft backslash bracketright asciicircum underscore grave\\na b c d e f g h i j k l m n o p q r s t u v w x y z\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n /\\s+/g\n );\n return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n function NameEntry(raw, entry) {\n this.raw = raw;\n this.length = raw.length;\n this.platformID = entry.platformID;\n this.encodingID = entry.encodingID;\n this.languageID = entry.languageID;\n }\n return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n var subsetTag;\n __extends(NameTable, _super);\n\n function NameTable() {\n return NameTable.__super__.constructor.apply(this, arguments);\n }\n NameTable.prototype.tag = \"name\";\n NameTable.prototype.parse = function(data) {\n var count,\n entries,\n entry,\n i,\n name,\n stringOffset,\n strings,\n text,\n _j,\n _len,\n _name;\n data.pos = this.offset;\n data.readShort(); //format\n count = data.readShort();\n stringOffset = data.readShort();\n entries = [];\n for (\n i = 0;\n 0 <= count ? i < count : i > count;\n i = 0 <= count ? ++i : --i\n ) {\n entries.push({\n platformID: data.readShort(),\n encodingID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: this.offset + stringOffset + data.readShort()\n });\n }\n strings = {};\n for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n entry = entries[i];\n data.pos = entry.offset;\n text = data.readString(entry.length);\n name = new NameEntry(text, entry);\n if (strings[(_name = entry.nameID)] == null) {\n strings[_name] = [];\n }\n strings[entry.nameID].push(name);\n }\n this.strings = strings;\n this.copyright = strings[0];\n this.fontFamily = strings[1];\n this.fontSubfamily = strings[2];\n this.uniqueSubfamily = strings[3];\n this.fontName = strings[4];\n this.version = strings[5];\n try {\n this.postscriptName = strings[6][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n } catch (e) {\n this.postscriptName = strings[4][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n }\n this.trademark = strings[7];\n this.manufacturer = strings[8];\n this.designer = strings[9];\n this.description = strings[10];\n this.vendorUrl = strings[11];\n this.designerUrl = strings[12];\n this.license = strings[13];\n this.licenseUrl = strings[14];\n this.preferredFamily = strings[15];\n this.preferredSubfamily = strings[17];\n this.compatibleFull = strings[18];\n return (this.sampleText = strings[19]);\n };\n subsetTag = \"AAAAAA\";\n /*NameTable.prototype.encode = function () {\n var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n strings = {};\n _ref = this.strings;\n for (id in _ref) {\n val = _ref[id];\n strings[id] = val;\n }\n postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n platformID: 1\n , encodingID: 0\n , languageID: 0\n });\n strings[6] = [postscriptName];\n subsetTag = successorOf(subsetTag);\n strCount = 0;\n for (id in strings) {\n list = strings[id];\n if (list != null) {\n strCount += list.length;\n }\n }\n table = new Data;\n strTable = new Data;\n table.writeShort(0);\n table.writeShort(strCount);\n table.writeShort(6 + 12 * strCount);\n for (nameID in strings) {\n list = strings[nameID];\n if (list != null) {\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n string = list[_i];\n table.writeShort(string.platformID);\n table.writeShort(string.encodingID);\n table.writeShort(string.languageID);\n table.writeShort(nameID);\n table.writeShort(string.length);\n table.writeShort(strTable.pos);\n strTable.writeString(string.raw);\n }\n }\n }\n return nameTable = {\n postscriptName: postscriptName.raw\n , table: table.data.concat(strTable.data)\n };\n };*/\n return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n __extends(MaxpTable, _super);\n\n function MaxpTable() {\n return MaxpTable.__super__.constructor.apply(this, arguments);\n }\n MaxpTable.prototype.tag = \"maxp\";\n MaxpTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.numGlyphs = data.readUInt16();\n this.maxPoints = data.readUInt16();\n this.maxContours = data.readUInt16();\n this.maxCompositePoints = data.readUInt16();\n this.maxComponentContours = data.readUInt16();\n this.maxZones = data.readUInt16();\n this.maxTwilightPoints = data.readUInt16();\n this.maxStorage = data.readUInt16();\n this.maxFunctionDefs = data.readUInt16();\n this.maxInstructionDefs = data.readUInt16();\n this.maxStackElements = data.readUInt16();\n this.maxSizeOfInstructions = data.readUInt16();\n this.maxComponentElements = data.readUInt16();\n return (this.maxComponentDepth = data.readUInt16());\n };\n /*MaxpTable.prototype.encode = function (ids) {\n var table;\n table = new Data;\n table.writeInt(this.version);\n table.writeUInt16(ids.length);\n table.writeUInt16(this.maxPoints);\n table.writeUInt16(this.maxContours);\n table.writeUInt16(this.maxCompositePoints);\n table.writeUInt16(this.maxComponentContours);\n table.writeUInt16(this.maxZones);\n table.writeUInt16(this.maxTwilightPoints);\n table.writeUInt16(this.maxStorage);\n table.writeUInt16(this.maxFunctionDefs);\n table.writeUInt16(this.maxInstructionDefs);\n table.writeUInt16(this.maxStackElements);\n table.writeUInt16(this.maxSizeOfInstructions);\n table.writeUInt16(this.maxComponentElements);\n table.writeUInt16(this.maxComponentDepth);\n return table.data;\n };*/\n return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n __extends(HmtxTable, _super);\n\n function HmtxTable() {\n return HmtxTable.__super__.constructor.apply(this, arguments);\n }\n HmtxTable.prototype.tag = \"hmtx\";\n HmtxTable.prototype.parse = function(data) {\n var i, last, lsbCount, m, _j, _ref, _results;\n data.pos = this.offset;\n this.metrics = [];\n for (\n i = 0, _ref = this.file.hhea.numberOfMetrics;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n this.metrics.push({\n advance: data.readUInt16(),\n lsb: data.readInt16()\n });\n }\n lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n this.leftSideBearings = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(data.readInt16());\n }\n return _results;\n })();\n this.widths = function() {\n var _j, _len, _ref1, _results;\n _ref1 = this.metrics;\n _results = [];\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n m = _ref1[_j];\n _results.push(m.advance);\n }\n return _results;\n }.call(this);\n last = this.widths[this.widths.length - 1];\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(this.widths.push(last));\n }\n return _results;\n };\n /***************************************************************/\n /* function : forGlyph */\n /* comment : Returns the advance width and lsb for this glyph. */\n /***************************************************************/\n HmtxTable.prototype.forGlyph = function(id) {\n if (id in this.metrics) {\n return this.metrics[id];\n }\n return {\n advance: this.metrics[this.metrics.length - 1].advance,\n lsb: this.leftSideBearings[id - this.metrics.length]\n };\n };\n /*HmtxTable.prototype.encode = function (mapping) {\n var id, metric, table, _i, _len;\n table = new Data;\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n metric = this.forGlyph(id);\n table.writeUInt16(metric.advance);\n table.writeUInt16(metric.lsb);\n }\n return table.data;\n };*/\n return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n __extends(GlyfTable, _super);\n\n function GlyfTable() {\n return GlyfTable.__super__.constructor.apply(this, arguments);\n }\n GlyfTable.prototype.tag = \"glyf\";\n GlyfTable.prototype.parse = function() {\n return (this.cache = {});\n };\n GlyfTable.prototype.glyphFor = function(id) {\n var data,\n index,\n length,\n loca,\n numberOfContours,\n raw,\n xMax,\n xMin,\n yMax,\n yMin;\n if (id in this.cache) {\n return this.cache[id];\n }\n loca = this.file.loca;\n data = this.file.contents;\n index = loca.indexOf(id);\n length = loca.lengthOf(id);\n if (length === 0) {\n return (this.cache[id] = null);\n }\n data.pos = this.offset + index;\n raw = new Data(data.read(length));\n numberOfContours = raw.readShort();\n xMin = raw.readShort();\n yMin = raw.readShort();\n xMax = raw.readShort();\n yMax = raw.readShort();\n if (numberOfContours === -1) {\n this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n } else {\n this.cache[id] = new SimpleGlyph(\n raw,\n numberOfContours,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n return this.cache[id];\n };\n GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n var glyph, id, offsets, table, _i, _len;\n table = [];\n offsets = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n glyph = glyphs[id];\n offsets.push(table.length);\n if (glyph) {\n table = table.concat(glyph.encode(old2new));\n }\n }\n offsets.push(table.length);\n return {\n table: table,\n offsets: offsets\n };\n };\n return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n /**************************************************************************/\n /* function : SimpleGlyph */\n /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n /**************************************************************************/\n function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n this.raw = raw;\n this.numberOfContours = numberOfContours;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = false;\n }\n SimpleGlyph.prototype.encode = function() {\n return this.raw.data;\n };\n return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n var ARG_1_AND_2_ARE_WORDS,\n MORE_COMPONENTS,\n WE_HAVE_AN_X_AND_Y_SCALE,\n WE_HAVE_A_SCALE,\n WE_HAVE_A_TWO_BY_TWO,\n WE_HAVE_INSTRUCTIONS;\n ARG_1_AND_2_ARE_WORDS = 0x0001;\n WE_HAVE_A_SCALE = 0x0008;\n MORE_COMPONENTS = 0x0020;\n WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n WE_HAVE_A_TWO_BY_TWO = 0x0080;\n WE_HAVE_INSTRUCTIONS = 0x0100;\n\n /********************************************************************************************************************/\n /* function : CompoundGlypg generator */\n /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n /********************************************************************************************************************/\n function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n var data, flags;\n this.raw = raw;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = true;\n this.glyphIDs = [];\n this.glyphOffsets = [];\n data = this.raw;\n while (true) {\n flags = data.readShort();\n this.glyphOffsets.push(data.pos);\n this.glyphIDs.push(data.readUInt16());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n data.pos += 4;\n } else {\n data.pos += 2;\n }\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.pos += 8;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.pos += 4;\n } else if (flags & WE_HAVE_A_SCALE) {\n data.pos += 2;\n }\n }\n }\n /****************************************************************************************************************/\n /* function : CompoundGlypg encode */\n /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n /****************************************************************************************************************/\n CompoundGlyph.prototype.encode = function() {\n var i, result, _len, _ref;\n result = new Data(__slice.call(this.raw.data));\n _ref = this.glyphIDs;\n for (i = 0, _len = _ref.length; i < _len; ++i) {\n result.pos = this.glyphOffsets[i];\n }\n return result.data;\n };\n return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n __extends(LocaTable, _super);\n\n function LocaTable() {\n return LocaTable.__super__.constructor.apply(this, arguments);\n }\n LocaTable.prototype.tag = \"loca\";\n LocaTable.prototype.parse = function(data) {\n var format, i;\n data.pos = this.offset;\n format = this.file.head.indexToLocFormat;\n if (format === 0) {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 2) {\n _results.push(data.readUInt16() * 2);\n }\n return _results;\n }.call(this));\n } else {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 4) {\n _results.push(data.readUInt32());\n }\n return _results;\n }.call(this));\n }\n };\n LocaTable.prototype.indexOf = function(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n var LocaTable = new Uint32Array(this.offsets.length);\n var glyfPtr = 0;\n var listGlyf = 0;\n for (var k = 0; k < LocaTable.length; ++k) {\n LocaTable[k] = glyfPtr;\n if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n ++listGlyf;\n LocaTable[k] = glyfPtr;\n var start = this.offsets[k];\n var len = this.offsets[k + 1] - start;\n if (len > 0) {\n glyfPtr += len;\n }\n }\n }\n var newLocaTable = new Array(LocaTable.length * 4);\n for (var j = 0; j < LocaTable.length; ++j) {\n newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n }\n return newLocaTable;\n };\n return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n var key, ret, val;\n ret = {};\n for (key in object) {\n val = object[key];\n ret[val] = key;\n }\n return ret;\n};\n\n/*var successorOf = function (input) {\n var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n alphabet = 'abcdefghijklmnopqrstuvwxyz';\n length = alphabet.length;\n result = input;\n i = input.length;\n while (i >= 0) {\n last = input.charAt(--i);\n if (isNaN(last)) {\n index = alphabet.indexOf(last.toLowerCase());\n if (index === -1) {\n next = last;\n carry = true;\n }\n else {\n next = alphabet.charAt((index + 1) % length);\n isUpperCase = last === last.toUpperCase();\n if (isUpperCase) {\n next = next.toUpperCase();\n }\n carry = index + 1 >= length;\n if (carry && i === 0) {\n added = isUpperCase ? 'A' : 'a';\n result = added + next + result.slice(1);\n break;\n }\n }\n }\n else {\n next = +last + 1;\n carry = next > 9;\n if (carry) {\n next = 0;\n }\n if (carry && i === 0) {\n result = '1' + next + result.slice(1);\n break;\n }\n }\n result = result.slice(0, i) + next + result.slice(i + 1);\n if (!carry) {\n break;\n }\n }\n return result;\n };*/\n\nvar Subset = (function() {\n function Subset(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.next = 33;\n }\n /*Subset.prototype.use = function (character) {\n var i, _i, _ref;\n if (typeof character === 'string') {\n for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.use(character.charCodeAt(i));\n }\n return;\n }\n if (!this.unicodes[character]) {\n this.subset[this.next] = character;\n return this.unicodes[character] = this.next++;\n }\n };*/\n /*Subset.prototype.encodeText = function (text) {\n var char, i, string, _i, _ref;\n string = '';\n for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n char = this.unicodes[text.charCodeAt(i)];\n string += String.fromCharCode(char);\n }\n return string;\n };*/\n /***************************************************************/\n /* function : generateCmap */\n /* comment : Returns the unicode cmap for this font. */\n /***************************************************************/\n Subset.prototype.generateCmap = function() {\n var mapping, roman, unicode, unicodeCmap, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n mapping = {};\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n mapping[roman] = unicodeCmap[unicode];\n }\n return mapping;\n };\n /*Subset.prototype.glyphIDs = function () {\n var ret, roman, unicode, unicodeCmap, val, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n ret = [0];\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n val = unicodeCmap[unicode];\n if ((val != null) && __indexOf.call(ret, val) < 0) {\n ret.push(val);\n }\n }\n return ret.sort();\n };*/\n /******************************************************************/\n /* function : glyphsFor */\n /* comment : Returns simple glyph objects for the input character.*/\n /******************************************************************/\n Subset.prototype.glyphsFor = function(glyphIDs) {\n var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n glyphs = {};\n for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n id = glyphIDs[_i];\n glyphs[id] = this.font.glyf.glyphFor(id);\n }\n additionalIDs = [];\n for (id in glyphs) {\n glyph = glyphs[id];\n if (glyph != null ? glyph.compound : void 0) {\n additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n }\n }\n if (additionalIDs.length > 0) {\n _ref = this.glyphsFor(additionalIDs);\n for (id in _ref) {\n glyph = _ref[id];\n glyphs[id] = glyph;\n }\n }\n return glyphs;\n };\n /***************************************************************/\n /* function : encode */\n /* comment : Encode various tables for the characters you use. */\n /***************************************************************/\n Subset.prototype.encode = function(glyID, indexToLocFormat) {\n var cmap,\n code,\n glyf,\n glyphs,\n id,\n ids,\n loca,\n new2old,\n newIDs,\n nextGlyphID,\n old2new,\n oldID,\n oldIDs,\n tables,\n _ref;\n cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n glyphs = this.glyphsFor(glyID);\n old2new = {\n 0: 0\n };\n _ref = cmap.charMap;\n for (code in _ref) {\n ids = _ref[code];\n old2new[ids.old] = ids[\"new\"];\n }\n nextGlyphID = cmap.maxGlyphID;\n for (oldID in glyphs) {\n if (!(oldID in old2new)) {\n old2new[oldID] = nextGlyphID++;\n }\n }\n new2old = invert(old2new);\n newIDs = Object.keys(new2old).sort(function(a, b) {\n return a - b;\n });\n oldIDs = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n id = newIDs[_i];\n _results.push(new2old[id]);\n }\n return _results;\n })();\n glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n loca = this.font.loca.encode(glyf.offsets, oldIDs);\n tables = {\n cmap: this.font.cmap.raw(),\n glyf: glyf.table,\n loca: loca,\n hmtx: this.font.hmtx.raw(),\n hhea: this.font.hhea.raw(),\n maxp: this.font.maxp.raw(),\n post: this.font.post.raw(),\n name: this.font.name.raw(),\n head: this.font.head.encode(indexToLocFormat)\n };\n if (this.font.os2.exists) {\n tables[\"OS/2\"] = this.font.os2.raw();\n }\n return this.font.directory.encode(tables);\n };\n return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n var pad;\n\n function PDFObject() {}\n pad = function(str, length) {\n return (Array(length + 1).join(\"0\") + str).slice(-length);\n };\n /*****************************************************************************/\n /* function : convert */\n /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n /*****************************************************************************/\n PDFObject.convert = function(object) {\n var e, items, key, out, val;\n if (Array.isArray(object)) {\n items = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = object.length; _i < _len; _i++) {\n e = object[_i];\n _results.push(PDFObject.convert(e));\n }\n return _results;\n })().join(\" \");\n return \"[\" + items + \"]\";\n } else if (typeof object === \"string\") {\n return \"/\" + object;\n } else if (object != null ? object.isString : void 0) {\n return \"(\" + object + \")\";\n } else if (object instanceof Date) {\n return (\n \"(D:\" +\n pad(object.getUTCFullYear(), 4) +\n pad(object.getUTCMonth(), 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n \"Z)\"\n );\n } else if ({}.toString.call(object) === \"[object Object]\") {\n out = [\"<<\"];\n for (key in object) {\n val = object[key];\n out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n }\n out.push(\">>\");\n return out.join(\"\\n\");\n } else {\n return \"\" + object;\n }\n };\n return PDFObject;\n})();\n"],"names":["globalObject","window","global","self","this","consoleLog","console","log","apply","arguments","warn","str","call","error","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","atob","btoa","_global","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","navigator","msSaveOrOpenBlob","autoBom","_typeof","test","type","Blob","String","fromCharCode","bom","popup","title","body","innerText","force","isSafari","HTMLElement","safari","isChromeIOS","userAgent","FileReader","reader","onloadend","result","replace","readAsDataURL","RGBColor","color_string","channels","ok","charAt","substr","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","toLowerCase","color_defs","re","example","process","bits","parseInt","i","length","processor","exec","r","g","b","isNaN","toRGB","toHex","toString","md5cycle","x","k","c","d","ff","gg","hh","ii","add32","cmn","q","s","t","md51","n","state","md5blk","substring","tail","charCodeAt","md5blks","bind","hex_chr","split","rhex","j","singleToByteString","md5Bin","map","join","md5Check","hex","lsw","rc4","key","data","lastKey","lastState","num","Array","out","permissionOptions","print","modify","copy","PDFSecurity","permissions","userPassword","ownerPassword","fileId","v","protection","forEach","perm","Error","padding","paddedUserPassword","paddedOwnerPassword","O","processOwnerPassword","P","encryptionKey","lsbFirstWord","hexToBytes","U","toPDFName","strLength","charCode","slice","PubSub","context","topics","subscribe","topic","callback","once","hasOwnProperty","token","Math","random","unsubscribe","Object","keys","publish","args","tokens","sub","ex","message","push","getTopics","GState","parameters","supported","p","indexOf","id","objectNumber","Pattern","gState","matrix","ShadingPattern","coords","colors","TilingPattern","boundingBox","xStep","yStep","stream","cloneIndex","jsPDF","options","precision","orientation","unit","format","compressPdf","filters","userUnit","floatPrecision","defaultPathOperation","encryptionOptions","compress","encryption","userPermissions","abs","putOnlyUsedFonts","usedFonts","API","internal","__private__","pdfVersion","getPdfVersion","setPdfVersion","value","pageFormats","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","dl","letter","legal","ledger","tabloid","getPageFormats","getPageFormat","ApiMode","COMPAT","ADVANCED","apiMode","advancedAPI","saveGraphicsState","Matrix","scaleFactor","getPageHeight","setFontSize","getFontSize","compatAPI","restoreGraphicsState","combineFontStyleAndFontWeight","fontStyle","fontWeight","doSwitch","isAdvancedAPI","hpf","advancedApiModeTrap","methodName","roundToPrecision","number","parmPrecision","tmpPrecision","toFixed","f2","f3","scale","transformY","y","transformScaleY","setPrecision","creationDate","getFileId","setFileId","toUpperCase","floor","convertDateToPDFDate","parmDate","tzoffset","getTimezoneOffset","tzsign","tzhour","tzmin","timeZoneString","padd2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","parmPDFDate","year","month","date","hour","minutes","seconds","Date","setCreationDate","tmpCreationDateString","getCreationDate","currentPage","padd2Hex","hexString","offsets","content","contentLength","additionalObjects","pages","hasCustomDestination","outputDestination","resetDocument","rootDictionaryObjId","newObjectDeferred","resourceDictionaryObjId","setCustomOutputDestination","destination","setOutputDestination","resetCustomOutputDestination","string","write","getArrayBuffer","len","ab","ArrayBuffer","u8","Uint8Array","standardFonts","getStandardFonts","activeFontSize","fontSize","size","zoomMode","R2L","setR2L","getR2L","pageMode","setZoomMode","zoom","validZoomModes","undefined","getZoomMode","layoutMode","setPageMode","pmode","getPageMode","setLayoutMode","layout","getLayoutMode","setDisplayMode","documentProperties","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","properties","property","setDocumentProperty","activeFontKey","pageX","pageY","pageMatrix","fonts","fontmap","fontStateStack","patterns","patternMap","gStates","gStatesMap","activeGState","page","pagesContext","events","hotfixes","renderTargets","renderTargetMap","renderTargetStack","sx","shy","shx","sy","tx","ty","_matrix","defineProperty","get","set","atan2","decompose","separator","multiply","f","scaleX","sqrt","shear","scaleY","translate","rotate","skew","inversed","quot","aInv","bInv","cInv","dInv","applyToPoint","pt","Point","applyToRectangle","rect","pt1","pt2","w","h","Rectangle","clone","matrixMult","m1","m2","identityMatrix","unitMatrix","addPattern","pattern","patternKey","addShadingPattern","beginTilingPattern","beginNewRenderTarget","endTilingPattern","pop","restore","newObject","oid","newObjectDeferredBegin","doOutput","newAdditionalObject","obj","objId","decodeColorString","color","colorEncoded","floatVal","parseFloat","colorAsRGB","encodeColorString","ch1","ch2","ch3","ch4","letterArray","pdfColorType","rgbColor","getFilters","putStream","alreadyAppliedFilters","addLength1","valueOfLength1","objectId","encryptor","processedData","keyValues","additionalKeyValues","filterAsString","processDataByFilters","reverseChain","isArray","decodeParmsArray","putPage","pageNumber","pageObjectNumber","pageContentsObjId","contentsObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageContent","putPages","pageObjectNumbers","kids","putFont","font","isAlreadyPutted","postScriptName","encoding","putFonts","fontKey","putXObject","xObject","width","height","putXObjects","xObjectKey","interpolateAndEncodeRGBStream","numberSamples","tValues","dT","offset","unshift","index","aColor","bColor","round","trim","putShadingPattern","funcObjectNumber","putTilingPattern","deferredResourceDictionaryIds","resourcesObjectId","patternObjectId","resourcesOid","objectOid","putPatterns","putGState","putGStates","gStateKey","putXobjectDict","putEncryptionDict","toHexString","putFontDict","putShadingPatternDict","putTilingPatternDict","putGStatesDict","putResourceDictionary","objectIds","putResources","Number","MAX_SAFE_INTEGER","putAdditionalObjects","addFontToFontDictionary","fontName","addFont","isStandardFont","metadata","instance","addFonts","arrayOfFonts","l","parts","dictionary","SAFE","fn","foo","stack","m","alert","bar","to8bitStream","text","flags","sourceEncoding","encodingBlock","outputEncoding","newtext","isUnicode","ch","bch","autoencode","codePages","noBOM","pdfEscape","beginPage","_setPage","_addPage","parmFormat","parmOrientation","dimensions","min","setLineWidth","lineWidth","strokeColor","lineCapID","lineJoinID","_deletePage","splice","setPage","getNumberOfPages","getFont","fontNameLowerCase","disableWarning","noFallback","putInfo","version","putCatalog","tmpRootDictionaryObjId","pcn","putTrailer","putHeader","putXRef","buildDocument","offsetOfXRef","getBlob","output","filename","save","dataURI","pdfDocument","unescape","encodeURIComponent","pdfObjectUrl","integrity","htmlForNewWindow","JSON","stringify","nW","htmlForPDFjsNewWindow","pdfJsUrl","PDFjsNewWindow","scope","documentElement","querySelector","contentWindow","PDFViewerApplication","htmlForDataURLNewWindow","dataURLNewWindow","hasHotfix","hotfixName","getEncryptor","getPageInfo","pageNumberOneBased","getPageInfoByObjId","getCurrentPageInfo","addPage","insertPage","beforePage","movePage","targetPage","tmpPages","tmpPagesContext","deletePage","transform","payload","da","angle","align","charSpace","maxWidth","horizontalScale","transformationMatrix","tmp","xtra","isHex","lineHeight","lineHeightFactor","ESC","TabLen","transformTextToSpecialArray","curDa","sa","concat","shift","processTextByFunction","processingFunction","tmpResult","textIsOfTypeString","tmpTextIsOfTypeString","match","descent","baseline","splitTextToSize","reduce","acc","textLine","mutex","PI","rotationDirection","cos","sin","activeCharSpace","setCharSpace","getCharSpace","lang","renderingMode","parmRenderingMode","stroke","usedRenderingMode","lineWidths","leading","pageWidth","pageSize","getWidth","activeFont","assign","wordSpacingPerLine","newY","getStringUnitWidth","doKerning","newX","prevWidth","getHorizontalCoordinate","getVerticalCoordinate","doReversing","posX","posY","reverse","activeFontEncoding","STRING","ARRAY","variant","wordSpacing","generatePosition","parmPosX","parmPosY","parmTransformationMatrix","position","lineIndex","textColor","clip","rule","clipEvenOdd","discardPath","isValidStyle","style","setDefaultPathOperation","operator","getStyle","op","close","fill","fillWithOptionalPattern","fillEvenOdd","fillStroke","fillStrokeEvenOdd","fillWithPattern","putStyle","cloneTilingPattern","patternData","patternId","clipRuleFromStyle","setGState","moveTo","lineTo","curveTo","x1","y1","x2","y2","x3","y3","line","lines","closed","scalex","scaley","leg","x4","y4","path","triangle","roundedRect","rx","ry","MyArc","SQRT2","ellipse","lx","ly","circle","setFont","getFontEntry","getFontList","list","encodingOptions","getLineWidth","setLineDash","setLineDashPattern","dashArray","dashPhase","getLineHeight","setLineHeightFactor","getLineHeightFactor","getHorizontalCoordinateString","getVerticalCoordinateString","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","getTextColor","setTextColor","CapJoinStyles","butt","but","miter","rounded","projecting","project","square","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","addGState","equals","duplicate","fontState","setCurrentTransformationMatrix","comment","_x","enumerable","_y","_type","_w","_h","RenderTarget","getPageWidth","setPageWidth","setPageHeight","endFormObject","newXObject","xObjectId","plugin","beginFormObject","doFormObject","getFormObject","returnPromise","unload","Promise","resolve","reject","newEvents","eventname","handler_and_args","getCoordinateString","collections","setWidth","getHeight","setHeight","getPDFVersion","configurable","byteString","byte","bytes","generation","other","ignore","count","jsPDFAPI","pdfUnescape","f5","__acroform__","inherit","child","parent","create","constructor","createFormXObject","formObject","xobj","AcroFormXObject","AcroFormAppearance","BBox","setBit","bitPosition","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","coordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","calculateAppearanceStream","appearanceStreamContent","V","DV","_V","calcRes","calculateX","maxFontSize","returnValue","textSplit","multiline","word","isSmallerThanWidth","lastLine","calculateFontSpace","FontSize","startX","lastLength","textHeight","startY","lastY","firstWordInLine","lastWordInLine","currWord","lineCount","isWithNewLine","nextLineIsSmaller","isLastWord","currLine","textAlign","acroformPluginTemplate","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","createAnnotationReference","object","annotations","find","entry","createXFormObjectCallback","fieldArray","fieldObject","initializeAcroForm","acroformPlugin","AcroFormField","FieldNum","parse","AcroFormDictionary","_eventID","AcroFormDictionaryCallback","Fields","hasAnnotation","annotReferenceCallback","putCatalogCallback","standardFields","Kids","keyValueList","oldRect","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","appearance","appearanceStreamString","createFieldCallback","arrayToPdfArray","array","toPdfString","AcroFormPDFObject","_objId","_scope","writable","getOwnPropertyNames","filter","getOwnPropertyDescriptor","_stream","_BBox","_DA","_Kids","_F","Boolean","F","_Ff","_Rect","_FT","_T","AcroFormChildClass","_fontName","_fontStyle","_fontSize","_maxFontSize","_color","AcroFormTextField","_DV","AcroFormButton","_page","_hasAppearanceStream","Ff","_Q","AcroFormChoiceField","FT","_TI","_Opt","regex","matches","getMatches","getOptions","setOptions","sort","addOption","removeOption","allEntries","combo","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","edit","_AS","_MK","CA","AcroFormPushButton","pushButton","AcroFormRadioButton","radio","_parent","_optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","Parent","addField","AcroFormCheckBox","CheckBox","_MaxLen","isInteger","AcroFormPasswordField","password","N","On","YesNormal","D","YesPushDown","Off","OffPushDown","encodedColor","DotRadius","Bezier_C","DotRadiusBezier","kc","dc","Cross","cross","calculateCross","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","toLookup","arr","lookup","__addimage__","UNKNOWN","imageFileTypeHeaders","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","imageData","fallbackFormat","headerSchemata","compareResult","fileType","Uint8ClampedArray","isArrayBufferView","putImage","image","colorSpace","color_spaces","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","arrayBufferToBinaryString","putResourcesCallback","images","putXObjectsDictCallback","initialize","getImages","getImageIndex","isImageTypeSupported","isDOMElement","nodeType","getImageDataFromElement","element","nodeName","hasAttribute","src","getAttribute","tmpImageData","loadFile","mimeType","toDataURL","checkImagesForAlias","alias","determineWidthAndHeight","writeImageToPDF","rotation","dims","coord","vcoord","f4","rotationTransformationMatrix","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","hash","byteLength","validateStringAsBase64","possibleBase64String","extractImageFromDataUrl","dataUrl","dataUrlParts","extractedInfo","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","binary_string","buffer","buf","subarray","addImage","compression","processImageData","dataAsBinaryString","convertBase64ToBinaryString","generateAliasFromImageData","checkCompressValue","stringData","throwError","base64Info","rawData","getImageProperties","notEmpty","addPageData","putPageData","anno","pageInfo","pageAnnos","found","escape","objText","objPopup","encryptorText","bounds","contents","loc","_nameMap","top","finalBounds","magFactor","left","createAnnotation","link","textWithLink","linkHeight","linkWidth","totalLineWidth","getTextWidth","numOfLines","ceil","arabicSubstitionA","ligatures","arabic_diacritics","alfletter","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","letters","tmpLigatures","effectedLetters","isArabicDiacritic","getCorrectForm","currentChar","beforeChar","nextChar","parseArabic","currentLetter","prevLetter","nextLetter","words","newWords","processArabic","tmpText","autoPrint","refAutoPrintTag","addJS","Canvas","jsPdfInstance","_width","getContext","pageWrapXEnabled","pageWrapX","_height","pageWrapYEnabled","pageWrapY","_childNodes","_style","contextType","contextAttributes","pdf","context2d","_canvas","canvas","NO_MARGINS","bottom","right","printingHeaderRow","_initialize","__cell__","headerFunction","margins","_reset","lastCell","Cell","_text","_lineNumber","_align","lineNumber","toArray","setHeaderFunction","func","getTextDimensions","amountOfLines","tempWidth","max","cellAddPage","cell","currentCell","tableHeaderRow","printHeaders","printHeaderRow","table","headers","config","column","headerName","headerNames","headerLabels","headerAligns","columnMatrix","columnWidths","columnMinWidths","tableHeaderConfigs","autoSize","css","headerBackgroundColor","headerTextColor","table_font_size","header","prompt","rec","row","rowHeight","calculateLineHeight","setTableHeaderRow","pv","cv","rowStart","Function","cellData","cellStart","col","table_x","table_y","model","new_page","tableHeaderCell","tempHeaderConf","currentTextColor","fontStyleOrder","italic","oblique","normal","fontStretchOrder","fontStretchLookup","fontWeights","fontWeightsLookup","normalizeFontFace","fontFace","family","normalizeFontStyle","weight","normalizeFontWeight","stretch","normalizeFontStretch","ref","searchFromPivot","matchingSet","order","pivot","dir","defaultGenericFontFamilies","fixed","monospace","terminal","cursive","fantasy","serif","systemFonts","icon","menu","ruleToString","resolveFontFace","fontFaceMap","rules","defaultFontFamily","genericFontFamilies","resolveFontStretch","ordering","resolveFontStyle","resolveFontWeight","eatWhiteSpace","input","trimLeft","parseQuotedFontFamily","quote","parseNonQuotedFontFamily","jsNamesObj","jsJsObj","defaultFont","_ctx","ContextLayer","ctx","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","margin","prevPageLastElemOffset","ignoreClearRect","Context2D","parentNode","_pdf","_pageWrapXEnabled","_pageWrapYEnabled","_posX","_posY","_autoPaging","lastBreak","pageBreaks","_ctxStack","rgba","getRGBA","_fontFaceMap","getFontFaceMap","fontFaces","convertedFontFaces","fontMap","convertToFontFaces","normalized","buildFontFaceMap","_fontFaces","fontFamily","fontSizeUnit","parsed","remaining","parseFontFamily","jsPdfFontName","fallbackFonts","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","pathPreProcess","beginPath","closePath","pathBegin","quadraticCurveTo","cpx","cpy","pt0","bezierCurveTo","cp1x","cp1y","cp2x","cp2y","arc","radius","startAngle","endAngle","counterclockwise","isIdentity","xpt","x_radPt","x_radPt0","pow","arcTo","fillRect","strokeRect","clearRect","doStackPush","tmpPageNumber","ctxStack","doStackPop","isCanvasGradient","getColor","fillText","degs","rad2deg","putText","strokeText","measureText","txtWidth","TextMetrics","scalewidth","scaleheight","setTransform","hasMargins","drawImage","img","swidth","sheight","imageProperties","factorX","factorY","clipFactorX","clipFactorY","clipPath","decomposedTransformationMatrix","xRect","pageArray","getPagesByPath","sortPages","autoPaging","pageWidthMinusMargins","topMargin","firstPageHeight","pageHeightMinusMargins","previousPageHeightSum","tmpPaths","pathPositionRedo","drawPaths","tmpRect","needsClipping","yOffset","rectOfQuadraticCurve","getQuadraticCurveBoundary","rectOfBezierCurve","getBezierCurveBoundary","paths","isClip","tmpPath","oldLineWidth","origPath","xPath","delta","moves","begin","start","deltas","iii","began","arcs","drawArc","drawLine","drawLines","doClip","getBaseline","getTextBottom","yBaseLine","createLinearGradient","canvasGradient","colorStops","addColorStop","createPattern","createRadialGradient","includeMove","curves","createArc","curve","doMove","drawCurve","textDimensions","yTop","oldSize","baselineRect","textBounds","pageHeightMinusBottomMargin","pageWidthMinusRightMargin","textBoundsOnPage","doSlice","croppedText","baseLineRectOnPage","prevX","prevY","anticlockwise","twoPi","halfPi","totalAngle","sgn","createSmallArc","q1","q2","k2","ar","cos_ar","sin_ar","ey","midX1","midY1","midX2","midY2","resultX1","resultX2","resultY1","resultY2","ax","ay","bx","by","cx","cy","dx","dy","px","py","qx","qy","minx","miny","maxx","maxy","tobx","toby","tocx","tocy","todx","tody","prevLineDash","nextLineDash","ASCII85Encode","ASCII85Decode","z","ASCIIHexDecode","regexCheckIfHex","RegExp","FlateEncode","zlibSync","origData","filterChain","sync","request","sanitizeUnicode","dataLength","charArray","StringFromCharCode","overrideMimeType","responseText","browserRequest","loadImageFile","loadHtml2Canvas","import","catch","then","html2canvas","default","loadDomPurify","dompurify","objType","tagName","opt","el","className","innerHTML","sanitize","Worker","root","convert","template","setProgress","promise","__proto__","prop","container","overlay","progress","val","enableLinks","backgroundColor","from","getType","to","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","containerCSS","display","windowWidth","clientWidth","scrollWidth","offsetWidth","source","cloneNode","javascriptEnabled","createTextNode","nodeValue","firstChild","nextSibling","appendChild","addEventListener","scrollTop","scrollLeft","scrollHeight","offsetHeight","clientHeight","overflow","zIndex","clear","border","float","prereqs","contains","onrendered","removeChild","toContext2d","async","allowTaint","scrollX","scrollY","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","imgData","quality","outputImg","outputPdf","doCallback","fns","setMargin","cbk","toPx","getPageSize","inner","ratio","updateProgress","onFulfilled","onRejected","thenCore","thenBase","selfPromise","returnVal","thenExternal","catchExternal","msg","using","export","run","format_as_string","pageHeight","err","html","worker","javascript","namesOid","outline","children","render","createNamedDestinations","totalPages","dests","info","names2Oid","makeRef","add","item","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","markers","processJPEG","blockLength","numcomponents","getJpegInfo","getCharWidthsArray","splitLongWord","splitParagraphIntoLines","makeImage","scratchCanvas","scratchCtx","chunkSize","palLen","delayDen","delayNum","frame","section","palShort","_i","_j","_ref","pos","animation","readUInt32","_results","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","Infinity","frames","read","xOffset","readUInt16","delay","disposeOp","blendOp","indexed","grayscale","rgb","hasAlphaChannel","pixelBitlength","decodePixels","pixelBytes","fullPixels","_this","pass","x0","y0","abyte","pa","paeth","pb","pc","pixels","scanlineLength","upper","upperLeft","_k","_l","_m","isFull","fullPos","partPos","unzlibSync","decodePalette","ret","_ref1","copyToImageData","alpha","_decodedPalette","hasBrowserCanvas","putImageData","Image","decodeFrames","_len","createImageData","renderFrame","prev","animate","doFrame","frameNumber","_timeout","stopAnimation","clearTimeout","_png","GifReader","pf0","global_palette_flag","num_global_colors","global_palette_offset","global_palette_size","no_eof","transparent_index","disposal","loop_count","block_size","pf1","pf2","interlace_flag","num_local_colors","palette_offset","palette_size","has_local_palette","data_offset","data_length","interlaced","loopCount","frameInfo","frame_num","decodeAndBlitFrameBGRA","num_pixels","index_stream","GifReaderLZWOutputIndexStream","trans","framewidth","framestride","xleft","opbeg","opend","scanstride","interlaceskip","il","decodeAndBlitFrameRGBA","code_stream","output_length","min_code_size","clear_code","eoi_code","next_code","cur_code_size","code_mask","cur_shift","cur","subblock_size","code_table","prev_code","code","chase_code","chase_length","chase","JPEGEncoder","YDC_HT","UVDC_HT","YAC_HT","UVAC_HT","currentQuality","ffloor","YTable","UVTable","fdtbl_Y","fdtbl_UV","bitcode","category","outputfDCTQuant","DU","byteout","bytenew","bytepos","YDU","UDU","VDU","clt","RGB_YUV_TABLE","ZigZag","std_dc_luminance_nrcodes","std_dc_luminance_values","std_ac_luminance_nrcodes","std_ac_luminance_values","std_dc_chrominance_nrcodes","std_dc_chrominance_values","std_ac_chrominance_nrcodes","std_ac_chrominance_values","computeHuffmanTbl","nrcodes","std_table","codevalue","pos_in_table","HT","writeBits","bs","posval","writeByte","writeWord","processDU","CDU","fdtbl","DC","HTDC","HTAC","EOB","M16zeroes","DU_DCT","d0","d1","d2","d3","d4","d5","d6","d7","fDCTQuant","dataOff","tmp0","tmp7","tmp1","tmp6","tmp2","tmp5","tmp3","tmp4","tmp10","tmp13","tmp11","tmp12","z1","z5","z2","z4","z3","z11","z13","tmp0p2","tmp7p2","tmp1p2","tmp6p2","tmp2p2","tmp5p2","tmp3p2","tmp4p2","tmp10p2","tmp13p2","tmp11p2","tmp12p2","z1p2","z5p2","z2p2","z4p2","z3p2","z11p2","z13p2","Diff","end0pos","lng","startpos","nrzeroes","nrmarker","setQuality","sf","YQT","UVQT","u","aasf","initQuantTables","encode","writeDQT","writeSOF0","o","writeDHT","DCY","DCU","DCV","displayName","quadWidth","fillbits","sfcc","initCharLookupTable","nrlower","nrupper","cat","nr","nrneg","initCategoryNumber","initRGBYUVTable","BmpDecoder","is_with_alpha","datav","DataView","bottom_up","flag","parseHeader","parseBGR","WebPDecoder","fa","L","J","H","I","Z","M","wa","Ed","ma","_WebPDecoder","Fd","Ub","G","jc","Qb","qb","nd","pd","xb","Ca","Ka","oa","Jd","Yc","Zc","Qa","na","K","ca","cb","Sb","Ra","bb","Vb","ob","db","Gd","Hd","Wb","Sa","Xb","Id","ra","Ta","Yb","Ha","Zb","X","Mb","Xa","$b","ac","bc","xa","yb","ud","hd","jd","aa","eb","Ia","cc","Kd","Ld","ec","Ea","Md","Nd","Od","Pd","Qd","fb","gb","hb","zb","Ab","Ja","Bb","Rd","A","Sd","ea","Tc","Cd","lb","Db","W","Cb","S","RGBA","kb","sd","Td","Ud","fd","ib","bd","cd","Da","Vd","T","Wd","ba","ka","Mc","Nc","fc","Rc","Xd","ya","Kb","za","gc","Ua","Va","memory","Ib","Jb","hc","Oa","ic","Aa","Yd","Ba","Wa","Zd","$d","ae","ta","Eb","be","ga","ce","Dc","lc","mc","nc","de","ua","ub","ha","xc","vc","md","Ya","oc","C","ee","E","B","Q","fe","qc","Fb","rc","ge","va","Ma","sc","Gb","tc","uc","Hb","wc","yc","zc","qd","rd","ia","tb","he","$","Pb","wd","xd","vb","ie","Ac","Bc","je","Cc","VP8LMapColor32b","ke","VP8LMapColor8b","le","rb","Oc","R","me","qa","Y","la","ja","Fa","ne","sb","La","Za","$a","jb","mb","oe","pe","nb","qe","Pa","Ga","Na","Ec","se","Fc","ue","yd","td","Rb","ve","we","Lb","Gc","wb","xe","Wc","Xc","ye","Pc","Tb","zd","vd","od","ld","dd","Hc","ze","Sc","Qc","ad","Ob","Ad","Dd","Ae","Nb","Ic","Be","Kc","ed","$c","Jc","Bd","gd","Uc","Vc","put","Ce","De","Ee","Fe","Ge","He","Ie","Lc","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","Ke","Le","Je","kd","Cf","Df","Ef","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Qf","WebPDecodeRGBA","te","GetTag","data_off","GetLE24","GetLE32","webpdecoder","imagearray","src_off","alpha_chunk","alpha_size","alpha_offset","memcmp","fourcc","payload_size","payload_size_padded","src_off_","temp","WebPRiffParser","hasCompressionJS","compressBytes","lineLength","colorsPerPixel","level","filter_method","filterUp","filterSub","filterAverage","filterPaeth","applyPngFilterMethod","dat","prevLine","filter_methods","getFilterMethods","results","ind","getIndexOfSmallestSum","filterNone","up","upLeft","paethPredictor","pLeft","pUp","pUpLeft","arrays","sum","processPNG","trns","pal","smask","alphaData","hasColors","pixel","pbl","pDiff","total","getPredictorFromCompression","processGIF89A","rawImageData","processGIF87A","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","hr","vr","importantColors","getUint8","quad","bitn","bit1","xlen","mode","bit4","before","after","bit8","bit15","dif_w","_1_5","bit16","_1_6","bit24","bit32","getData","processBMP","processWEBP","processRGBA","imagePixels","rgbOut","alphaOut","outIndex","alphaIndex","rgbData","setLanguage","langCode","languageSettings","isSubscribed","sq","an","hy","as","ast","az","eu","bn","br","bg","my","zh","co","cr","cs","nl","en","eo","et","fo","fj","fi","fr","fy","fur","gl","gu","ht","hi","hu","is","iu","it","kn","ks","kk","km","ky","tlh","ko","lv","lt","mk","ms","ml","mt","mi","mr","mo","nv","ng","no","nn","or","om","pl","qu","rm","ro","ru","sz","sg","si","sr","sk","sl","so","es","sw","sv","tt","th","tig","ts","tn","tr","tk","uk","hsb","ur","vi","vo","xh","ji","zu","languageCode","char_code","widths","Unicode","widthsFractionOf","fof","kerning","kerningFractionOf","kerningValue","prior_char_code","default_char_width","widthOfString","widthOfGlyph","characterToGlyph","widths_array","firstLineMaxLen","maxLen","answer","workingLen","startOfLine","maxlen","lineIndent","postProcess","line_length","textIndent","separator_length","current_word_length","spaceCharWidth","pad","wrds","wrd","idx","ln","paragraphs","fsize","newOptions","fontUnit_maxLen","__fontmetrics__","encoded","mappingUncompress","mappingCompress","keystring","valuestring","numberprefix","vals","uncompress","stringparts","parent_key_pair","sign","activeobject","parentchain","keyparts","valueparts","datalen","WinAnsiEncoding","encodings","Courier","fontMetrics","Symbol","ZapfDingbats","metrics","file","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","loadCanvg","canvg","addSvgAsImage","svg","ignoreMouse","ignoreAnimation","ignoreDimensions","doc","fromString","putTotalPages","pageExpression","replaceExpression","totalNumberOfPages","pdfEscape16","viewerPreferences","doReset","configuration","isValid","method","configurationTemplate","HideToolbar","defaultValue","explicitSet","valueSet","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","configurationKeys","rangeArray","arrayContainsElement","iterator","viewerpreferences","vPref","pdfDict","postPutResources","rdf_beginning","__metadata__","namespaceuri","utf8_xmpmeta_beginning","utf8_rdf_beginning","utf8_metadata","utf8_rdf_ending","utf8_xmpmeta_ending","total_len","metadata_object_number","addMetadata","padz","toUnicode","toUnicodeCmap","codes","range","unicode","unicodeMap","pdfOutput","subset","pdfOutput2","fontTable","cmap","fontDescriptor","PDFObject","bbox","stemV","italicAngle","ascender","decender","capHeight","DescendantFont","identityHFunction","hmtx","head","unitsPerEm","winAnsiEncodingFunction","utf8TextFunction","cmapConfirm","strText","codeMap","parms","_initializeVFS","vFS","addFileToVFS","filecontent","__bidiEngine__","_hasUbatB","_hasUbatS","_isInVisual","_isInRtl","_isOutVisual","_isOutRtl","_isSymmetricSwapping","_UNICODE_TYPES","_bidiUnicodeTypes","_STATE_TABLE_LTR","_STATE_TABLE_RTL","_TYPE_NAMES_MAP","EN","AN","_UNICODE_RANGES_MAP","_SWAP_TABLE","_LTR_RANGES_REG_EXPR","_lastArabic","_dir","_getCharType","rangeIdx","_isContextualDirRtl","charType","_resolveCharType","chars","types","resolvedTypes","wType","nType","cType","rtlCandidate","_invertString","sourceToTargetMap","levels","_computeLevels","hiLevel","params","action","newLevel","prevState","condPos","newState","stateTable","_handleUbatS","_invertByLevel","high","end","low","_reorder","_symmetricSwap","DIR_RTL","doBidiReorder","_init","isSymmetricSwappingOrig","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","bidiEngine","Data","readString","Subset","registerTTF","directory","Directory","HeadTable","NameTable","CmapTable","hhea","HheaTable","maxp","MaxpTable","HmtxTable","post","PostTable","os2","OS2Table","loca","LocaTable","glyf","GlyfTable","exists","lineGap","xMin","yMin","xMax","yMax","raw","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","character","glyph","forGlyph","advance","includeGap","gap","Table","readByte","writeUInt32","readInt32","int","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","checksum","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","adjustment","directoryLength","headOffset","log2","tableData","__slice","__hasProp","__extends","ctor","__super__","_super","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","CmapEntry","endCode","glyphId","glyphIds","idDelta","idRangeOffset","saveOffset","segCount","segCountX2","startCode","platformID","encodingID","language","charmap","charMap","diff","endCodes","glyphIDs","indexes","last","nextID","old","rangeOffsets","startCodes","startGlyph","subtable","_len1","_len2","_len3","_len4","_len5","_len6","_len7","_n","_name","_o","_p","_q","new","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","numberOfGlyphs","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","_results1","numGlyphs","NameEntry","languageID","entries","stringOffset","strings","nameID","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","lsbCount","lsb","leftSideBearings","cache","glyphFor","numberOfContours","lengthOf","CompoundGlyph","SimpleGlyph","glyphs","mapping","old2new","compound","glyphOffsets","activeGlyphs","glyfPtr","listGlyf","newLocaTable","unicodes","next","generateCmap","roman","unicodeCmap","glyphsFor","additionalIDs","glyID","ids","new2old","newIDs","nextGlyphID","oldID","oldIDs","invert","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"mappings":"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1wD,MAAM,IACf2wD,EAAU,GACVC,EAAU,EACVC,EAAU,EAEVC,EAAM,IAAI9wD,MAAM,IAChB+wD,EAAM,IAAI/wD,MAAM,IAChBgxD,EAAM,IAAIhxD,MAAM,IAChBixD,EAAM,IAAIjxD,MAAM,KAChBkxD,EAAgB,IAAIlxD,MAAM,MAG1BmxD,EAAS,CACX,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAGEC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA0B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC7DC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA0B,CAC5B,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGEC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC/DC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA4B,CAC9B,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,GACA,IACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,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,IAAOG,EACxCnE,EAAUY,GACZsD,GAAsB,GAExBlO,EAAM,MAAQwI,EAAG7zD,GACjBq1D,EAAUU,GAAMwD,GAAY,GAAK5F,EAAStI,KAC1CgK,EAAU3B,EAAQrI,IAClBrrD,WA5CQ,IA8CNo5D,GACF/D,EAAUW,GAELH,WA8HA4D,EAAW1S,IAClBA,EAAUrhD,KAAKsb,IAAItb,KAAK+mC,IAAIsa,EAAS,GAAI,KAErCqM,GAAkBrM,eA1qBC2S,WACnBC,EAAM,CACR,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IAGO35D,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvBwB,EAAI6xD,GAAQsG,EAAI35D,GAAK05D,EAAK,IAAM,KACpCl4D,EAAIkE,KAAKsb,IAAItb,KAAK+mC,IAAIjrC,EAAG,GAAI,KAC7B8xD,EAAOgB,EAAOt0D,IAAMwB,UAElBo4D,EAAO,CACT,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAEOv3D,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvBw3D,EAAIxG,GAAQuG,EAAKv3D,GAAKq3D,EAAK,IAAM,KACrCG,EAAIn0D,KA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AM1gE,GAAK,MAAQtM,EAAEilC,QAE5D34B,EAAI,EACTtM,EAAIsM,EAAI,EAAI,UAGZ,GAAKtM,SACD8M,GAAKA,EAAE8gE,KAAO5tE,EAAIq3E,GAAGtqE,IADV/M,MAIjBgpE,GAAK,GACPmB,GAAK,CACH,EACA,EACA,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,UAEFD,GAAK,GACLF,GAAK,GACLM,GAAK,EACLC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EA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ACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,GACA,GACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,KAEFmD,GAAK,CACH,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEFZ,GAAK,EACLyC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEFzK,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEF3B,GAAK,KACL4O,GAAK,CACH,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,IAAK,GACrB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAC1B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAE1DC,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IACxD1J,GAAK,EAAE,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GACnEuJ,GAAK,CACH,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK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AAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,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2pE,EAAc3pE,EAAM4pE,UAxC7Bd,EA/XQ,EAgYR9oE,EAAO4qE,EAAS5qE,EAAM4pE,EAAmBC,QAdzCf,EAAOf,EAjXC,EADA,EAmXR/nE,EAAO4qE,EAAS5qE,EAAM4pE,EAAmBC,UAuDpC7pE,QAcJ2nE,eAAe7sD,WAAa,SAAShzB,GACpCA,IACFggF,EAAchgF,EAAQojF,cACtBlD,EAAelgF,EAAQqjF,eACvBpD,EAAWjgF,EAAQsjF,WACnBnD,EAAYngF,EAAQujF,YACpBnD,EAAuBpgF,EAAQwjF,2BAI9B3D,eAAe7sD,WAAWhzB,GACxBrW,KAAKk2F,oBAGVS,EA5jFmB,CACrB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,MACA,IACA,MACA,MACA,IACA,MACA,MACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KA8jBEmD,EAAa,IAAI1jF,EAAM8/E,eAAe,CAAEuD,eAAe,IAoC3DrjF,EAAMkB,IAAI4L,OAAOnO,KAAK,CAAC,kBAlCE,SAASL,OAC5B6Z,EAAO7Z,EAAK6Z,KAGZlY,GAFI3B,EAAKpF,EACLoF,EAAK0H,EACC1H,EAAK2B,SAAW,IAG1BoiC,GAFQ/jC,EAAK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"} \ No newline at end of file diff --git a/lib/jspdf/jspdf.node.js b/lib/jspdf/jspdf.node.js new file mode 100644 index 0000000..45f3502 --- /dev/null +++ b/lib/jspdf/jspdf.node.js @@ -0,0 +1,32841 @@ +/** @license + * + * jsPDF - PDF Document creation from JavaScript + * Version 2.5.1 Built on 2022-01-28T15:37:57.791Z + * CommitID 00000000 + * + * Copyright (c) 2010-2021 James Hall , https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var fflate = require('fflate'); + +var globalObject = (function() { + return "undefined" !== typeof window + ? window + : "undefined" !== typeof global + ? global + : "undefined" !== typeof self + ? self + : this; +})(); + +/** + * A class to parse color values + * @author Stoyan Stefanov + * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} + * @license Use it if you like it + */ + +function RGBColor(color_string) { + color_string = color_string || ""; + this.ok = false; + + // strip any leading # + if (color_string.charAt(0) == "#") { + // remove # if any + color_string = color_string.substr(1, 6); + } + + color_string = color_string.replace(/ /g, ""); + color_string = color_string.toLowerCase(); + + var channels; + + // before getting into regexps, try simple matches + // and overwrite the input + var simple_colors = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "00ffff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000000", + blanchedalmond: "ffebcd", + blue: "0000ff", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "00ffff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dodgerblue: "1e90ff", + feldspar: "d19275", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "ff00ff", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgrey: "d3d3d3", + lightgreen: "90ee90", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslateblue: "8470ff", + lightslategray: "778899", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "00ff00", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "ff00ff", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370d8", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "d87093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "ff0000", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + violetred: "d02090", + wheat: "f5deb3", + white: "ffffff", + whitesmoke: "f5f5f5", + yellow: "ffff00", + yellowgreen: "9acd32" + }; + color_string = simple_colors[color_string] || color_string; + + // array of color definition objects + var color_defs = [ + { + re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, + example: ["rgb(123, 234, 45)", "rgb(255,234,245)"], + process: function(bits) { + return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])]; + } + }, + { + re: /^(\w{2})(\w{2})(\w{2})$/, + example: ["#00ff00", "336699"], + process: function(bits) { + return [ + parseInt(bits[1], 16), + parseInt(bits[2], 16), + parseInt(bits[3], 16) + ]; + } + }, + { + re: /^(\w{1})(\w{1})(\w{1})$/, + example: ["#fb0", "f0f"], + process: function(bits) { + return [ + parseInt(bits[1] + bits[1], 16), + parseInt(bits[2] + bits[2], 16), + parseInt(bits[3] + bits[3], 16) + ]; + } + } + ]; + + // search through the definitions to find a match + for (var i = 0; i < color_defs.length; i++) { + var re = color_defs[i].re; + var processor = color_defs[i].process; + var bits = re.exec(color_string); + if (bits) { + channels = processor(bits); + this.r = channels[0]; + this.g = channels[1]; + this.b = channels[2]; + this.ok = true; + } + } + + // validate/cleanup values + this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; + this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g; + this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; + + // some getters + this.toRGB = function() { + return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")"; + }; + this.toHex = function() { + var r = this.r.toString(16); + var g = this.g.toString(16); + var b = this.b.toString(16); + if (r.length == 1) r = "0" + r; + if (g.length == 1) g = "0" + g; + if (b.length == 1) b = "0" + b; + return "#" + r + g + b; + }; +} + +var atob, btoa; + +(function() { + + atob = require("atob"); + btoa = require("btoa"); +})(); + +function consoleLog() { + if (globalObject.console && typeof globalObject.console.log === "function") { + globalObject.console.log.apply(globalObject.console, arguments); + } +} + +function consoleWarn(str) { + if (globalObject.console) { + if (typeof globalObject.console.warn === "function") { + globalObject.console.warn.apply(globalObject.console, arguments); + } else { + consoleLog.call(null, arguments); + } + } +} + +function consoleError(str) { + if (globalObject.console) { + if (typeof globalObject.console.error === "function") { + globalObject.console.error.apply(globalObject.console, arguments); + } else { + consoleLog(str); + } + } +} +var console = { + log: consoleLog, + warn: consoleWarn, + error: consoleError +}; + +/** + * @license + * Joseph Myers does not specify a particular license for his work. + * + * Author: Joseph Myers + * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js + * + * Modified by: Owen Leong + */ + +function md5cycle(x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); +} + +function cmn(q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); +} + +function ff(a, b, c, d, x, s, t) { + return cmn((b & c) | (~b & d), a, b, x, s, t); +} + +function gg(a, b, c, d, x, s, t) { + return cmn((b & d) | (c & ~d), a, b, x, s, t); +} + +function hh(a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); +} + +function ii(a, b, c, d, x, s, t) { + return cmn(c ^ (b | ~d), a, b, x, s, t); +} + +function md51(s) { + // txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s.length; i++) + tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3); + tail[i >> 2] |= 0x80 << (i % 4 << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i++) tail[i] = 0; + } + tail[14] = n * 8; + md5cycle(state, tail); + return state; +} + +/* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ +function md5blk(s) { + /* I figured global was faster. */ + var md5blks = [], + i; /* Andy King said do it this way. */ + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = + s.charCodeAt(i) + + (s.charCodeAt(i + 1) << 8) + + (s.charCodeAt(i + 2) << 16) + + (s.charCodeAt(i + 3) << 24); + } + return md5blks; +} + +var hex_chr = "0123456789abcdef".split(""); + +function rhex(n) { + var s = "", + j = 0; + for (; j < 4; j++) + s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f]; + return s; +} + +function hex(x) { + for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]); + return x.join(""); +} + +// Converts a 4-byte number to byte string +function singleToByteString(n) { + return String.fromCharCode( + (n & 0xff) >> 0, + (n & 0xff00) >> 8, + (n & 0xff0000) >> 16, + (n & 0xff000000) >> 24 + ); +} + +// Converts an array of numbers to a byte string +function toByteString(x) { + return x.map(singleToByteString).join(""); +} + +// Returns the MD5 hash as a byte string +function md5Bin(s) { + return toByteString(md51(s)); +} + +// Returns MD5 hash as a hex string +function md5(s) { + return hex(md51(s)); +} + +var md5Check = md5("hello") != "5d41402abc4b2a76b9719d911017c592"; + +function add32(a, b) { + if (md5Check) { + /* if the md5Check does not match + the expected value, we're dealing + with an old browser and need + this function. */ + var lsw = (a & 0xffff) + (b & 0xffff), + msw = (a >> 16) + (b >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xffff); + } else { + /* this function is much faster, + so if possible we use it. Some IEs + are the only ones I know of that + need the idiotic second function, + generated by an if clause. */ + return (a + b) & 0xffffffff; + } +} + +/** + * @license + * FPDF is released under a permissive license: there is no usage restriction. + * You may embed it freely in your application (commercial or not), with or + * without modifications. + * + * Reference: http://www.fpdf.org/en/script/script37.php + */ + +function repeat(str, num) { + return new Array(num + 1).join(str); +} + +/** + * Converts a byte string to a hex string + * + * @name rc4 + * @function + * @param {string} key Byte string of encryption key + * @param {string} data Byte string of data to be encrypted + * @returns {string} Encrypted string + */ +function rc4(key, data) { + var lastKey, lastState; + if (key !== lastKey) { + var k = repeat(key, ((256 / key.length) >> 0) + 1); + var state = []; + for (var i = 0; i < 256; i++) { + state[i] = i; + } + var j = 0; + for (var i = 0; i < 256; i++) { + var t = state[i]; + j = (j + t + k.charCodeAt(i)) % 256; + state[i] = state[j]; + state[j] = t; + } + lastKey = key; + lastState = state; + } else { + state = lastState; + } + var length = data.length; + var a = 0; + var b = 0; + var out = ""; + for (var i = 0; i < length; i++) { + a = (a + 1) % 256; + t = state[a]; + b = (b + t) % 256; + state[a] = state[b]; + state[b] = t; + k = state[(state[a] + state[b]) % 256]; + out += String.fromCharCode(data.charCodeAt(i) ^ k); + } + return out; +} + +/** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + * Author: Owen Leong (@owenl131) + * Date: 15 Oct 2020 + * References: + * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt + * https://github.com/foliojs/pdfkit/blob/master/lib/security.js + * http://www.fpdf.org/en/script/script37.php + */ + +var permissionOptions = { + print: 4, + modify: 8, + copy: 16, + "annot-forms": 32 +}; + +/** + * Initializes encryption settings + * + * @name constructor + * @function + * @param {Array} permissions Permissions allowed for user, "print", "modify", "copy" and "annot-forms". + * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document + * is not password protected but viewer has the above permissions. + * @param {String} ownerPassword Owner has full functionalities to the file. + * @param {String} fileId As hex string, should be same as the file ID in the trailer. + * @example + * var security = new PDFSecurity(["print"]) + */ +function PDFSecurity(permissions, userPassword, ownerPassword, fileId) { + this.v = 1; // algorithm 1, future work can add in more recent encryption schemes + this.r = 2; // revision 2 + + // set flags for what functionalities the user can access + let protection = 192; + permissions.forEach(function(perm) { + if (typeof permissionOptions.perm !== "undefined") { + throw new Error("Invalid permission: " + perm); + } + protection += permissionOptions[perm]; + }); + + // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF + this.padding = + "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08" + + "\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + let paddedUserPassword = (userPassword + this.padding).substr(0, 32); + let paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32); + + this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword); + this.P = -((protection ^ 255) + 1); + this.encryptionKey = md5Bin( + paddedUserPassword + + this.O + + this.lsbFirstWord(this.P) + + this.hexToBytes(fileId) + ).substr(0, 5); + this.U = rc4(this.encryptionKey, this.padding); +} + +/** + * Breaks down a 4-byte number into its individual bytes, with the least significant bit first + * + * @name lsbFirstWord + * @function + * @param {number} data 32-bit number + * @returns {Array} + */ +PDFSecurity.prototype.lsbFirstWord = function(data) { + return String.fromCharCode( + (data >> 0) & 0xff, + (data >> 8) & 0xff, + (data >> 16) & 0xff, + (data >> 24) & 0xff + ); +}; + +/** + * Converts a byte string to a hex string + * + * @name toHexString + * @function + * @param {String} byteString Byte string + * @returns {String} + */ +PDFSecurity.prototype.toHexString = function(byteString) { + return byteString + .split("") + .map(function(byte) { + return ("0" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2); + }) + .join(""); +}; + +/** + * Converts a hex string to a byte string + * + * @name hexToBytes + * @function + * @param {String} hex Hex string + * @returns {String} + */ +PDFSecurity.prototype.hexToBytes = function(hex) { + for (var bytes = [], c = 0; c < hex.length; c += 2) + bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16))); + return bytes.join(""); +}; + +/** + * Computes the 'O' field in the encryption dictionary + * + * @name processOwnerPassword + * @function + * @param {String} paddedUserPassword Byte string of padded user password + * @param {String} paddedOwnerPassword Byte string of padded owner password + * @returns {String} + */ +PDFSecurity.prototype.processOwnerPassword = function( + paddedUserPassword, + paddedOwnerPassword +) { + let key = md5Bin(paddedOwnerPassword).substr(0, 5); + return rc4(key, paddedUserPassword); +}; + +/** + * Returns an encryptor function which can take in a byte string and returns the encrypted version + * + * @name encryptor + * @function + * @param {number} objectId + * @param {number} generation Not sure what this is for, you can set it to 0 + * @returns {Function} + * @example + * out("stream"); + * encryptor = security.encryptor(object.id, 0); + * out(encryptor(data)); + * out("endstream"); + */ +PDFSecurity.prototype.encryptor = function(objectId, generation) { + let key = md5Bin( + this.encryptionKey + + String.fromCharCode( + objectId & 0xff, + (objectId >> 8) & 0xff, + (objectId >> 16) & 0xff, + generation & 0xff, + (generation >> 8) & 0xff + ) + ).substr(0, 10); + return function(data) { + return rc4(key, data); + }; +}; + +/** + * Convert string to `PDF Name Object`. + * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object + * @param str + */ +function toPDFName(str) { + // eslint-disable-next-line no-control-regex + if (/[^\u0000-\u00ff]/.test(str)) { + // non ascii string + throw new Error( + "Invalid PDF Name Object: " + str + ", Only accept ASCII characters." + ); + } + var result = "", + strLength = str.length; + for (var i = 0; i < strLength; i++) { + var charCode = str.charCodeAt(i); + if ( + charCode < 0x21 || + charCode === 0x23 /* # */ || + charCode === 0x25 /* % */ || + charCode === 0x28 /* ( */ || + charCode === 0x29 /* ) */ || + charCode === 0x2f /* / */ || + charCode === 0x3c /* < */ || + charCode === 0x3e /* > */ || + charCode === 0x5b /* [ */ || + charCode === 0x5d /* ] */ || + charCode === 0x7b /* { */ || + charCode === 0x7d /* } */ || + charCode > 0x7e + ) { + // Char CharCode hexStr paddingHexStr Result + // "\t" 9 9 09 #09 + // " " 32 20 20 #20 + // "©" 169 a9 a9 #a9 + var hexStr = charCode.toString(16), + paddingHexStr = ("0" + hexStr).slice(-2); + + result += "#" + paddingHexStr; + } else { + // Other ASCII printable characters between 0x21 <= X <= 0x7e + result += str[i]; + } + } + return result; +} + +/* eslint-disable no-console */ +/** + * jsPDF's Internal PubSub Implementation. + * Backward compatible rewritten on 2014 by + * Diego Casorran, https://github.com/diegocr + * + * @class + * @name PubSub + * @ignore + */ +function PubSub(context) { + if (typeof context !== "object") { + throw new Error( + "Invalid Context passed to initialize PubSub (jsPDF-module)" + ); + } + var topics = {}; + + this.subscribe = function(topic, callback, once) { + once = once || false; + if ( + typeof topic !== "string" || + typeof callback !== "function" || + typeof once !== "boolean" + ) { + throw new Error( + "Invalid arguments passed to PubSub.subscribe (jsPDF-module)" + ); + } + + if (!topics.hasOwnProperty(topic)) { + topics[topic] = {}; + } + + var token = Math.random().toString(35); + topics[topic][token] = [callback, !!once]; + + return token; + }; + + this.unsubscribe = function(token) { + for (var topic in topics) { + if (topics[topic][token]) { + delete topics[topic][token]; + if (Object.keys(topics[topic]).length === 0) { + delete topics[topic]; + } + return true; + } + } + return false; + }; + + this.publish = function(topic) { + if (topics.hasOwnProperty(topic)) { + var args = Array.prototype.slice.call(arguments, 1), + tokens = []; + + for (var token in topics[topic]) { + var sub = topics[topic][token]; + try { + sub[0].apply(context, args); + } catch (ex) { + if (globalObject.console) { + console.error("jsPDF PubSub Error", ex.message, ex); + } + } + if (sub[1]) tokens.push(token); + } + if (tokens.length) tokens.forEach(this.unsubscribe); + } + }; + + this.getTopics = function() { + return topics; + }; +} + +function GState(parameters) { + if (!(this instanceof GState)) { + return new GState(parameters); + } + + /** + * @name GState#opacity + * @type {any} + */ + /** + * @name GState#stroke-opacity + * @type {any} + */ + var supported = "opacity,stroke-opacity".split(","); + for (var p in parameters) { + if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) { + this[p] = parameters[p]; + } + } + /** + * @name GState#id + * @type {string} + */ + this.id = ""; // set by addGState() + /** + * @name GState#objectNumber + * @type {number} + */ + this.objectNumber = -1; // will be set by putGState() +} + +GState.prototype.equals = function equals(other) { + var ignore = "id,objectNumber,equals"; + var p; + if (!other || typeof other !== typeof this) return false; + var count = 0; + for (p in this) { + if (ignore.indexOf(p) >= 0) continue; + if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false; + if (this[p] !== other[p]) return false; + count++; + } + for (p in other) { + if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--; + } + return count === 0; +}; + +function Pattern(gState, matrix) { + this.gState = gState; + this.matrix = matrix; + + this.id = ""; // set by addPattern() + this.objectNumber = -1; // will be set by putPattern() +} + +function ShadingPattern(type, coords, colors, gState, matrix) { + if (!(this instanceof ShadingPattern)) { + return new ShadingPattern(type, coords, colors, gState, matrix); + } + + // see putPattern() for information how they are realized + this.type = type === "axial" ? 2 : 3; + this.coords = coords; + this.colors = colors; + + Pattern.call(this, gState, matrix); +} + +function TilingPattern(boundingBox, xStep, yStep, gState, matrix) { + if (!(this instanceof TilingPattern)) { + return new TilingPattern(boundingBox, xStep, yStep, gState, matrix); + } + + this.boundingBox = boundingBox; + this.xStep = xStep; + this.yStep = yStep; + + this.stream = ""; // set by endTilingPattern(); + + this.cloneIndex = 0; + + Pattern.call(this, gState, matrix); +} + +/** + * Creates new jsPDF document object instance. + * @name jsPDF + * @class + * @param {Object} [options] - Collection of settings initializing the jsPDF-instance + * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are "portrait" or "landscape" (or shortcuts "p" or "l").
    + * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.
    + * Possible values are "pt" (points), "mm", "cm", "in", "px", "pc", "em" or "ex". Note that in order to get the correct scaling for "px" + * units, you need to enable the hotfix "px_scaling" by setting options.hotfixes = ["px_scaling"]. + * @param {string/Array} [options.format=a4] The format of the first page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    + * Default is "a4". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89] + * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used. + * @param {boolean} [options.compress=false] Compress the generated PDF. + * @param {number} [options.precision=16] Precision of the element-positions. + * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it. + * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling. + * @param {Object} [options.encryption] + * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list. + * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication. + * @param {string[]} [options.encryption.userPermissions] Array of permissions "print", "modify", "copy", "annot-forms", accessible by the user. + * @param {number|"smart"} [options.floatPrecision=16] + * @returns {jsPDF} jsPDF-instance + * @description + * ``` + * { + * orientation: 'p', + * unit: 'mm', + * format: 'a4', + * putOnlyUsedFonts:true, + * floatPrecision: 16 // or "smart", default is 16 + * } + * ``` + * + * @constructor + */ +function jsPDF(options) { + var orientation = typeof arguments[0] === "string" ? arguments[0] : "p"; + var unit = arguments[1]; + var format = arguments[2]; + var compressPdf = arguments[3]; + var filters = []; + var userUnit = 1.0; + var precision; + var floatPrecision = 16; + var defaultPathOperation = "S"; + var encryptionOptions = null; + + options = options || {}; + + if (typeof options === "object") { + orientation = options.orientation; + unit = options.unit || unit; + format = options.format || format; + compressPdf = options.compress || options.compressPdf || compressPdf; + encryptionOptions = options.encryption || null; + if (encryptionOptions !== null) { + encryptionOptions.userPassword = encryptionOptions.userPassword || ""; + encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || ""; + encryptionOptions.userPermissions = + encryptionOptions.userPermissions || []; + } + userUnit = + typeof options.userUnit === "number" ? Math.abs(options.userUnit) : 1.0; + if (typeof options.precision !== "undefined") { + precision = options.precision; + } + if (typeof options.floatPrecision !== "undefined") { + floatPrecision = options.floatPrecision; + } + defaultPathOperation = options.defaultPathOperation || "S"; + } + + filters = + options.filters || (compressPdf === true ? ["FlateEncode"] : filters); + + unit = unit || "mm"; + orientation = ("" + (orientation || "P")).toLowerCase(); + var putOnlyUsedFonts = options.putOnlyUsedFonts || false; + var usedFonts = {}; + + var API = { + internal: {}, + __private__: {} + }; + + API.__private__.PubSub = PubSub; + + var pdfVersion = "1.3"; + var getPdfVersion = (API.__private__.getPdfVersion = function() { + return pdfVersion; + }); + + API.__private__.setPdfVersion = function(value) { + pdfVersion = value; + }; + + // Size in pt of various paper formats + var pageFormats = { + a0: [2383.94, 3370.39], + a1: [1683.78, 2383.94], + a2: [1190.55, 1683.78], + a3: [841.89, 1190.55], + a4: [595.28, 841.89], + a5: [419.53, 595.28], + a6: [297.64, 419.53], + a7: [209.76, 297.64], + a8: [147.4, 209.76], + a9: [104.88, 147.4], + a10: [73.7, 104.88], + b0: [2834.65, 4008.19], + b1: [2004.09, 2834.65], + b2: [1417.32, 2004.09], + b3: [1000.63, 1417.32], + b4: [708.66, 1000.63], + b5: [498.9, 708.66], + b6: [354.33, 498.9], + b7: [249.45, 354.33], + b8: [175.75, 249.45], + b9: [124.72, 175.75], + b10: [87.87, 124.72], + c0: [2599.37, 3676.54], + c1: [1836.85, 2599.37], + c2: [1298.27, 1836.85], + c3: [918.43, 1298.27], + c4: [649.13, 918.43], + c5: [459.21, 649.13], + c6: [323.15, 459.21], + c7: [229.61, 323.15], + c8: [161.57, 229.61], + c9: [113.39, 161.57], + c10: [79.37, 113.39], + dl: [311.81, 623.62], + letter: [612, 792], + "government-letter": [576, 756], + legal: [612, 1008], + "junior-legal": [576, 360], + ledger: [1224, 792], + tabloid: [792, 1224], + "credit-card": [153, 243] + }; + + API.__private__.getPageFormats = function() { + return pageFormats; + }; + + var getPageFormat = (API.__private__.getPageFormat = function(value) { + return pageFormats[value]; + }); + + format = format || "a4"; + + var ApiMode = { + COMPAT: "compat", + ADVANCED: "advanced" + }; + var apiMode = ApiMode.COMPAT; + + function advancedAPI() { + // prepend global change of basis matrix + // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix + // that does this job for us (however, texts, images and similar objects must be drawn bottom up)) + this.saveGraphicsState(); + out( + new Matrix( + scaleFactor, + 0, + 0, + -scaleFactor, + 0, + getPageHeight() * scaleFactor + ).toString() + " cm" + ); + this.setFontSize(this.getFontSize() / scaleFactor); + + // The default in MrRio's implementation is "S" (stroke), whereas the default in the yWorks implementation + // was "n" (none). Although this has nothing to do with transforms, we should use the API switch here. + defaultPathOperation = "n"; + + apiMode = ApiMode.ADVANCED; + } + + function compatAPI() { + this.restoreGraphicsState(); + defaultPathOperation = "S"; + apiMode = ApiMode.COMPAT; + } + + /** + * @function combineFontStyleAndFontWeight + * @param {string} fontStyle Fontstyle or variant. Example: "italic". + * @param {number | string} fontWeight Weight of the Font. Example: "normal" | 400 + * @returns {string} + * @private + */ + var combineFontStyleAndFontWeight = (API.__private__.combineFontStyleAndFontWeight = function( + fontStyle, + fontWeight + ) { + if ( + (fontStyle == "bold" && fontWeight == "normal") || + (fontStyle == "bold" && fontWeight == 400) || + (fontStyle == "normal" && fontWeight == "italic") || + (fontStyle == "bold" && fontWeight == "italic") + ) { + throw new Error("Invalid Combination of fontweight and fontstyle"); + } + if (fontWeight) { + fontStyle = + fontWeight == 400 || fontWeight === "normal" + ? fontStyle === "italic" + ? "italic" + : "normal" + : (fontWeight == 700 || fontWeight === "bold") && + fontStyle === "normal" + ? "bold" + : (fontWeight == 700 ? "bold" : fontWeight) + "" + fontStyle; + } + return fontStyle; + }); + + /** + * @callback ApiSwitchBody + * @param {jsPDF} pdf + */ + + /** + * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual + * screen coordinates and the PDF coordinate system. + * - "compat": Offers full compatibility across all plugins but does not allow arbitrary transforms + * - "advanced": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might + * not support this mode, though. + * Initial mode is "compat". + * + * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to + * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}. + * + * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the + * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject} + * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to "compat" API mode. + * + * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched. + * The API mode will be switched back automatically afterwards. + * @returns {jsPDF} + * @memberof jsPDF# + * @name advancedAPI + */ + API.advancedAPI = function(body) { + var doSwitch = apiMode === ApiMode.COMPAT; + + if (doSwitch) { + advancedAPI.call(this); + } + + if (typeof body !== "function") { + return this; + } + + body(this); + + if (doSwitch) { + compatAPI.call(this); + } + + return this; + }; + + /** + * Switches to "compat" API mode. See {@link advancedAPI} for more details. + * + * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched. + * The API mode will be switched back automatically afterwards. + * @return {jsPDF} + * @memberof jsPDF# + * @name compatApi + */ + API.compatAPI = function(body) { + var doSwitch = apiMode === ApiMode.ADVANCED; + + if (doSwitch) { + compatAPI.call(this); + } + + if (typeof body !== "function") { + return this; + } + + body(this); + + if (doSwitch) { + advancedAPI.call(this); + } + + return this; + }; + + /** + * @return {boolean} True iff the current API mode is "advanced". See {@link advancedAPI}. + * @memberof jsPDF# + * @name isAdvancedAPI + */ + API.isAdvancedAPI = function() { + return apiMode === ApiMode.ADVANCED; + }; + + var advancedApiModeTrap = function(methodName) { + if (apiMode !== ApiMode.ADVANCED) { + throw new Error( + methodName + + " is only available in 'advanced' API mode. " + + "You need to call advancedAPI() first." + ); + } + }; + + var roundToPrecision = (API.roundToPrecision = API.__private__.roundToPrecision = function( + number, + parmPrecision + ) { + var tmpPrecision = precision || parmPrecision; + if (isNaN(number) || isNaN(tmpPrecision)) { + throw new Error("Invalid argument passed to jsPDF.roundToPrecision"); + } + return number.toFixed(tmpPrecision).replace(/0+$/, ""); + }); + + // high precision float + var hpf; + if (typeof floatPrecision === "number") { + hpf = API.hpf = API.__private__.hpf = function(number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.hpf"); + } + return roundToPrecision(number, floatPrecision); + }; + } else if (floatPrecision === "smart") { + hpf = API.hpf = API.__private__.hpf = function(number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.hpf"); + } + if (number > -1 && number < 1) { + return roundToPrecision(number, 16); + } else { + return roundToPrecision(number, 5); + } + }; + } else { + hpf = API.hpf = API.__private__.hpf = function(number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.hpf"); + } + return roundToPrecision(number, 16); + }; + } + var f2 = (API.f2 = API.__private__.f2 = function(number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.f2"); + } + return roundToPrecision(number, 2); + }); + + var f3 = (API.__private__.f3 = function(number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.f3"); + } + return roundToPrecision(number, 3); + }); + + var scale = (API.scale = API.__private__.scale = function(number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.scale"); + } + if (apiMode === ApiMode.COMPAT) { + return number * scaleFactor; + } else if (apiMode === ApiMode.ADVANCED) { + return number; + } + }); + + var transformY = function(y) { + if (apiMode === ApiMode.COMPAT) { + return getPageHeight() - y; + } else if (apiMode === ApiMode.ADVANCED) { + return y; + } + }; + + var transformScaleY = function(y) { + return scale(transformY(y)); + }; + + /** + * @name setPrecision + * @memberof jsPDF# + * @function + * @instance + * @param {string} precision + * @returns {jsPDF} + */ + API.__private__.setPrecision = API.setPrecision = function(value) { + if (typeof parseInt(value, 10) === "number") { + precision = parseInt(value, 10); + } + }; + + var fileId = "00000000000000000000000000000000"; + + var getFileId = (API.__private__.getFileId = function() { + return fileId; + }); + + var setFileId = (API.__private__.setFileId = function(value) { + if (typeof value !== "undefined" && /^[a-fA-F0-9]{32}$/.test(value)) { + fileId = value.toUpperCase(); + } else { + fileId = fileId + .split("") + .map(function() { + return "ABCDEF0123456789".charAt(Math.floor(Math.random() * 16)); + }) + .join(""); + } + + if (encryptionOptions !== null) { + encryption = new PDFSecurity( + encryptionOptions.userPermissions, + encryptionOptions.userPassword, + encryptionOptions.ownerPassword, + fileId + ); + } + return fileId; + }); + + /** + * @name setFileId + * @memberof jsPDF# + * @function + * @instance + * @param {string} value GUID. + * @returns {jsPDF} + */ + API.setFileId = function(value) { + setFileId(value); + return this; + }; + + /** + * @name getFileId + * @memberof jsPDF# + * @function + * @instance + * + * @returns {string} GUID. + */ + API.getFileId = function() { + return getFileId(); + }; + + var creationDate; + + var convertDateToPDFDate = (API.__private__.convertDateToPDFDate = function( + parmDate + ) { + var result = ""; + var tzoffset = parmDate.getTimezoneOffset(), + tzsign = tzoffset < 0 ? "+" : "-", + tzhour = Math.floor(Math.abs(tzoffset / 60)), + tzmin = Math.abs(tzoffset % 60), + timeZoneString = [tzsign, padd2(tzhour), "'", padd2(tzmin), "'"].join(""); + + result = [ + "D:", + parmDate.getFullYear(), + padd2(parmDate.getMonth() + 1), + padd2(parmDate.getDate()), + padd2(parmDate.getHours()), + padd2(parmDate.getMinutes()), + padd2(parmDate.getSeconds()), + timeZoneString + ].join(""); + return result; + }); + + var convertPDFDateToDate = (API.__private__.convertPDFDateToDate = function( + parmPDFDate + ) { + var year = parseInt(parmPDFDate.substr(2, 4), 10); + var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1; + var date = parseInt(parmPDFDate.substr(8, 2), 10); + var hour = parseInt(parmPDFDate.substr(10, 2), 10); + var minutes = parseInt(parmPDFDate.substr(12, 2), 10); + var seconds = parseInt(parmPDFDate.substr(14, 2), 10); + // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10); + // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10); + + var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0); + return resultingDate; + }); + + var setCreationDate = (API.__private__.setCreationDate = function(date) { + var tmpCreationDateString; + var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/; + if (typeof date === "undefined") { + date = new Date(); + } + + if (date instanceof Date) { + tmpCreationDateString = convertDateToPDFDate(date); + } else if (regexPDFCreationDate.test(date)) { + tmpCreationDateString = date; + } else { + throw new Error("Invalid argument passed to jsPDF.setCreationDate"); + } + creationDate = tmpCreationDateString; + return creationDate; + }); + + var getCreationDate = (API.__private__.getCreationDate = function(type) { + var result = creationDate; + if (type === "jsDate") { + result = convertPDFDateToDate(creationDate); + } + return result; + }); + + /** + * @name setCreationDate + * @memberof jsPDF# + * @function + * @instance + * @param {Object} date + * @returns {jsPDF} + */ + API.setCreationDate = function(date) { + setCreationDate(date); + return this; + }; + + /** + * @name getCreationDate + * @memberof jsPDF# + * @function + * @instance + * @param {Object} type + * @returns {Object} + */ + API.getCreationDate = function(type) { + return getCreationDate(type); + }; + + var padd2 = (API.__private__.padd2 = function(number) { + return ("0" + parseInt(number)).slice(-2); + }); + + var padd2Hex = (API.__private__.padd2Hex = function(hexString) { + hexString = hexString.toString(); + return ("00" + hexString).substr(hexString.length); + }); + + var objectNumber = 0; // 'n' Current object number + var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes. + var content = []; + var contentLength = 0; + var additionalObjects = []; + + var pages = []; + var currentPage; + var hasCustomDestination = false; + var outputDestination = content; + + var resetDocument = function() { + //reset fields relevant for objectNumber generation and xref. + objectNumber = 0; + contentLength = 0; + content = []; + offsets = []; + additionalObjects = []; + + rootDictionaryObjId = newObjectDeferred(); + resourceDictionaryObjId = newObjectDeferred(); + }; + + API.__private__.setCustomOutputDestination = function(destination) { + hasCustomDestination = true; + outputDestination = destination; + }; + var setOutputDestination = function(destination) { + if (!hasCustomDestination) { + outputDestination = destination; + } + }; + + API.__private__.resetCustomOutputDestination = function() { + hasCustomDestination = false; + outputDestination = content; + }; + + var out = (API.__private__.out = function(string) { + string = string.toString(); + contentLength += string.length + 1; + outputDestination.push(string); + + return outputDestination; + }); + + var write = (API.__private__.write = function(value) { + return out( + arguments.length === 1 + ? value.toString() + : Array.prototype.join.call(arguments, " ") + ); + }); + + var getArrayBuffer = (API.__private__.getArrayBuffer = function(data) { + var len = data.length, + ab = new ArrayBuffer(len), + u8 = new Uint8Array(ab); + + while (len--) u8[len] = data.charCodeAt(len); + return ab; + }); + + var standardFonts = [ + ["Helvetica", "helvetica", "normal", "WinAnsiEncoding"], + ["Helvetica-Bold", "helvetica", "bold", "WinAnsiEncoding"], + ["Helvetica-Oblique", "helvetica", "italic", "WinAnsiEncoding"], + ["Helvetica-BoldOblique", "helvetica", "bolditalic", "WinAnsiEncoding"], + ["Courier", "courier", "normal", "WinAnsiEncoding"], + ["Courier-Bold", "courier", "bold", "WinAnsiEncoding"], + ["Courier-Oblique", "courier", "italic", "WinAnsiEncoding"], + ["Courier-BoldOblique", "courier", "bolditalic", "WinAnsiEncoding"], + ["Times-Roman", "times", "normal", "WinAnsiEncoding"], + ["Times-Bold", "times", "bold", "WinAnsiEncoding"], + ["Times-Italic", "times", "italic", "WinAnsiEncoding"], + ["Times-BoldItalic", "times", "bolditalic", "WinAnsiEncoding"], + ["ZapfDingbats", "zapfdingbats", "normal", null], + ["Symbol", "symbol", "normal", null] + ]; + + API.__private__.getStandardFonts = function() { + return standardFonts; + }; + + var activeFontSize = options.fontSize || 16; + + /** + * Sets font size for upcoming text elements. + * + * @param {number} size Font size in points. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFontSize + */ + API.__private__.setFontSize = API.setFontSize = function(size) { + if (apiMode === ApiMode.ADVANCED) { + activeFontSize = size / scaleFactor; + } else { + activeFontSize = size; + } + return this; + }; + + /** + * Gets the fontsize for upcoming text elements. + * + * @function + * @instance + * @returns {number} + * @memberof jsPDF# + * @name getFontSize + */ + var getFontSize = (API.__private__.getFontSize = API.getFontSize = function() { + if (apiMode === ApiMode.COMPAT) { + return activeFontSize; + } else { + return activeFontSize * scaleFactor; + } + }); + + var R2L = options.R2L || false; + + /** + * Set value of R2L functionality. + * + * @param {boolean} value + * @function + * @instance + * @returns {jsPDF} jsPDF-instance + * @memberof jsPDF# + * @name setR2L + */ + API.__private__.setR2L = API.setR2L = function(value) { + R2L = value; + return this; + }; + + /** + * Get value of R2L functionality. + * + * @function + * @instance + * @returns {boolean} jsPDF-instance + * @memberof jsPDF# + * @name getR2L + */ + API.__private__.getR2L = API.getR2L = function() { + return R2L; + }; + + var zoomMode; // default: 1; + + var setZoomMode = (API.__private__.setZoomMode = function(zoom) { + var validZoomModes = [ + undefined, + null, + "fullwidth", + "fullheight", + "fullpage", + "original" + ]; + + if (/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(zoom)) { + zoomMode = zoom; + } else if (!isNaN(zoom)) { + zoomMode = parseInt(zoom, 10); + } else if (validZoomModes.indexOf(zoom) !== -1) { + zoomMode = zoom; + } else { + throw new Error( + 'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "' + + zoom + + '" is not recognized.' + ); + } + }); + + API.__private__.getZoomMode = function() { + return zoomMode; + }; + + var pageMode; // default: 'UseOutlines'; + var setPageMode = (API.__private__.setPageMode = function(pmode) { + var validPageModes = [ + undefined, + null, + "UseNone", + "UseOutlines", + "UseThumbs", + "FullScreen" + ]; + + if (validPageModes.indexOf(pmode) == -1) { + throw new Error( + 'Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "' + + pmode + + '" is not recognized.' + ); + } + pageMode = pmode; + }); + + API.__private__.getPageMode = function() { + return pageMode; + }; + + var layoutMode; // default: 'continuous'; + var setLayoutMode = (API.__private__.setLayoutMode = function(layout) { + var validLayoutModes = [ + undefined, + null, + "continuous", + "single", + "twoleft", + "tworight", + "two" + ]; + + if (validLayoutModes.indexOf(layout) == -1) { + throw new Error( + 'Layout mode must be one of continuous, single, twoleft, tworight. "' + + layout + + '" is not recognized.' + ); + } + layoutMode = layout; + }); + + API.__private__.getLayoutMode = function() { + return layoutMode; + }; + + /** + * Set the display mode options of the page like zoom and layout. + * + * @name setDisplayMode + * @memberof jsPDF# + * @function + * @instance + * @param {integer|String} zoom You can pass an integer or percentage as + * a string. 2 will scale the document up 2x, '200%' will scale up by the + * same amount. You can also set it to 'fullwidth', 'fullheight', + * 'fullpage', or 'original'. + * + * Only certain PDF readers support this, such as Adobe Acrobat. + * + * @param {string} layout Layout mode can be: 'continuous' - this is the + * default continuous scroll. 'single' - the single page mode only shows one + * page at a time. 'twoleft' - two column left mode, first page starts on + * the left, and 'tworight' - pages are laid out in two columns, with the + * first page on the right. This would be used for books. + * @param {string} pmode 'UseOutlines' - it shows the + * outline of the document on the left. 'UseThumbs' - shows thumbnails along + * the left. 'FullScreen' - prompts the user to enter fullscreen mode. + * + * @returns {jsPDF} + */ + API.__private__.setDisplayMode = API.setDisplayMode = function( + zoom, + layout, + pmode + ) { + setZoomMode(zoom); + setLayoutMode(layout); + setPageMode(pmode); + return this; + }; + + var documentProperties = { + title: "", + subject: "", + author: "", + keywords: "", + creator: "" + }; + + API.__private__.getDocumentProperty = function(key) { + if (Object.keys(documentProperties).indexOf(key) === -1) { + throw new Error("Invalid argument passed to jsPDF.getDocumentProperty"); + } + return documentProperties[key]; + }; + + API.__private__.getDocumentProperties = function() { + return documentProperties; + }; + + /** + * Adds a properties to the PDF document. + * + * @param {Object} A property_name-to-property_value object structure. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setDocumentProperties + */ + API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function( + properties + ) { + // copying only those properties we can render. + for (var property in documentProperties) { + if (documentProperties.hasOwnProperty(property) && properties[property]) { + documentProperties[property] = properties[property]; + } + } + return this; + }; + + API.__private__.setDocumentProperty = function(key, value) { + if (Object.keys(documentProperties).indexOf(key) === -1) { + throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty"); + } + return (documentProperties[key] = value); + }; + + var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font. + var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont() + var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle + var fontStateStack = []; // + var patterns = {}; // collection of pattern objects + var patternMap = {}; // see fonts + var gStates = {}; // collection of graphic state objects + var gStatesMap = {}; // see fonts + var activeGState = null; + var scaleFactor; // Scale factor + var page = 0; + var pagesContext = []; + var events = new PubSub(API); + var hotfixes = options.hotfixes || []; + + var renderTargets = {}; + var renderTargetMap = {}; + var renderTargetStack = []; + var pageX; + var pageY; + var pageMatrix; // only used for FormObjects + + /** + * A matrix object for 2D homogenous transformations:
    + * | a b 0 |
    + * | c d 0 |
    + * | e f 1 |
    + * pdf multiplies matrices righthand: v' = v x m1 x m2 x ... + * + * @class + * @name Matrix + * @param {number} sx + * @param {number} shy + * @param {number} shx + * @param {number} sy + * @param {number} tx + * @param {number} ty + * @constructor + */ + var Matrix = function(sx, shy, shx, sy, tx, ty) { + if (!(this instanceof Matrix)) { + return new Matrix(sx, shy, shx, sy, tx, ty); + } + + if (isNaN(sx)) sx = 1; + if (isNaN(shy)) shy = 0; + if (isNaN(shx)) shx = 0; + if (isNaN(sy)) sy = 1; + if (isNaN(tx)) tx = 0; + if (isNaN(ty)) ty = 0; + + this._matrix = [sx, shy, shx, sy, tx, ty]; + }; + + /** + * @name sx + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "sx", { + get: function() { + return this._matrix[0]; + }, + set: function(value) { + this._matrix[0] = value; + } + }); + + /** + * @name shy + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "shy", { + get: function() { + return this._matrix[1]; + }, + set: function(value) { + this._matrix[1] = value; + } + }); + + /** + * @name shx + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "shx", { + get: function() { + return this._matrix[2]; + }, + set: function(value) { + this._matrix[2] = value; + } + }); + + /** + * @name sy + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "sy", { + get: function() { + return this._matrix[3]; + }, + set: function(value) { + this._matrix[3] = value; + } + }); + + /** + * @name tx + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "tx", { + get: function() { + return this._matrix[4]; + }, + set: function(value) { + this._matrix[4] = value; + } + }); + + /** + * @name ty + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "ty", { + get: function() { + return this._matrix[5]; + }, + set: function(value) { + this._matrix[5] = value; + } + }); + + Object.defineProperty(Matrix.prototype, "a", { + get: function() { + return this._matrix[0]; + }, + set: function(value) { + this._matrix[0] = value; + } + }); + + Object.defineProperty(Matrix.prototype, "b", { + get: function() { + return this._matrix[1]; + }, + set: function(value) { + this._matrix[1] = value; + } + }); + + Object.defineProperty(Matrix.prototype, "c", { + get: function() { + return this._matrix[2]; + }, + set: function(value) { + this._matrix[2] = value; + } + }); + + Object.defineProperty(Matrix.prototype, "d", { + get: function() { + return this._matrix[3]; + }, + set: function(value) { + this._matrix[3] = value; + } + }); + + Object.defineProperty(Matrix.prototype, "e", { + get: function() { + return this._matrix[4]; + }, + set: function(value) { + this._matrix[4] = value; + } + }); + + Object.defineProperty(Matrix.prototype, "f", { + get: function() { + return this._matrix[5]; + }, + set: function(value) { + this._matrix[5] = value; + } + }); + + /** + * @name rotation + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "rotation", { + get: function() { + return Math.atan2(this.shx, this.sx); + } + }); + + /** + * @name scaleX + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "scaleX", { + get: function() { + return this.decompose().scale.sx; + } + }); + + /** + * @name scaleY + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "scaleY", { + get: function() { + return this.decompose().scale.sy; + } + }); + + /** + * @name isIdentity + * @memberof Matrix# + */ + Object.defineProperty(Matrix.prototype, "isIdentity", { + get: function() { + if (this.sx !== 1) { + return false; + } + if (this.shy !== 0) { + return false; + } + if (this.shx !== 0) { + return false; + } + if (this.sy !== 1) { + return false; + } + if (this.tx !== 0) { + return false; + } + if (this.ty !== 0) { + return false; + } + return true; + } + }); + + /** + * Join the Matrix Values to a String + * + * @function join + * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (","). If separator is an empty string, all elements are joined without any characters in between them. + * @returns {string} A string with all array elements joined. + * @memberof Matrix# + */ + Matrix.prototype.join = function(separator) { + return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty] + .map(hpf) + .join(separator); + }; + + /** + * Multiply the matrix with given Matrix + * + * @function multiply + * @param matrix + * @returns {Matrix} + * @memberof Matrix# + */ + Matrix.prototype.multiply = function(matrix) { + var sx = matrix.sx * this.sx + matrix.shy * this.shx; + var shy = matrix.sx * this.shy + matrix.shy * this.sy; + var shx = matrix.shx * this.sx + matrix.sy * this.shx; + var sy = matrix.shx * this.shy + matrix.sy * this.sy; + var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx; + var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty; + + return new Matrix(sx, shy, shx, sy, tx, ty); + }; + + /** + * @function decompose + * @memberof Matrix# + */ + Matrix.prototype.decompose = function() { + var a = this.sx; + var b = this.shy; + var c = this.shx; + var d = this.sy; + var e = this.tx; + var f = this.ty; + + var scaleX = Math.sqrt(a * a + b * b); + a /= scaleX; + b /= scaleX; + + var shear = a * c + b * d; + c -= a * shear; + d -= b * shear; + + var scaleY = Math.sqrt(c * c + d * d); + c /= scaleY; + d /= scaleY; + shear /= scaleY; + + if (a * d < b * c) { + a = -a; + b = -b; + shear = -shear; + scaleX = -scaleX; + } + + return { + scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0), + translate: new Matrix(1, 0, 0, 1, e, f), + rotate: new Matrix(a, b, -b, a, 0, 0), + skew: new Matrix(1, 0, shear, 1, 0, 0) + }; + }; + + /** + * @function toString + * @memberof Matrix# + */ + Matrix.prototype.toString = function(parmPrecision) { + return this.join(" "); + }; + + /** + * @function inversed + * @memberof Matrix# + */ + Matrix.prototype.inversed = function() { + var a = this.sx, + b = this.shy, + c = this.shx, + d = this.sy, + e = this.tx, + f = this.ty; + + var quot = 1 / (a * d - b * c); + + var aInv = d * quot; + var bInv = -b * quot; + var cInv = -c * quot; + var dInv = a * quot; + var eInv = -aInv * e - cInv * f; + var fInv = -bInv * e - dInv * f; + + return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv); + }; + + /** + * @function applyToPoint + * @memberof Matrix# + */ + Matrix.prototype.applyToPoint = function(pt) { + var x = pt.x * this.sx + pt.y * this.shx + this.tx; + var y = pt.x * this.shy + pt.y * this.sy + this.ty; + return new Point(x, y); + }; + + /** + * @function applyToRectangle + * @memberof Matrix# + */ + Matrix.prototype.applyToRectangle = function(rect) { + var pt1 = this.applyToPoint(rect); + var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h)); + return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y); + }; + + /** + * Clone the Matrix + * + * @function clone + * @memberof Matrix# + * @name clone + * @instance + */ + Matrix.prototype.clone = function() { + var sx = this.sx; + var shy = this.shy; + var shx = this.shx; + var sy = this.sy; + var tx = this.tx; + var ty = this.ty; + + return new Matrix(sx, shy, shx, sy, tx, ty); + }; + + API.Matrix = Matrix; + + /** + * Multiplies two matrices. (see {@link Matrix}) + * @param {Matrix} m1 + * @param {Matrix} m2 + * @memberof jsPDF# + * @name matrixMult + */ + var matrixMult = (API.matrixMult = function(m1, m2) { + return m2.multiply(m1); + }); + + /** + * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)). + * @type {Matrix} + * @memberof! jsPDF# + * @name identityMatrix + */ + var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0); + API.unitMatrix = API.identityMatrix = identityMatrix; + + /** + * Adds a new pattern for later use. + * @param {String} key The key by it can be referenced later. The keys must be unique! + * @param {API.Pattern} pattern The pattern + */ + var addPattern = function(key, pattern) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (patternMap[key]) return; + + var prefix = pattern instanceof ShadingPattern ? "Sh" : "P"; + var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10); + pattern.id = patternKey; + + patternMap[key] = patternKey; + patterns[patternKey] = pattern; + + events.publish("addPattern", pattern); + }; + + /** + * A pattern describing a shading pattern. + * + * Only available in "advanced" API mode. + * + * @param {String} type One of "axial" or "radial" + * @param {Array} coords Either [x1, y1, x2, y2] for "axial" type describing the two interpolation points + * or [x1, y1, r, x2, y2, r2] for "radial" describing inner and the outer circle. + * @param {Array} colors An array of objects with the fields "offset" and "color". "offset" describes + * the offset in parameter space [0, 1]. "color" is an array of length 3 describing RGB values in [0, 255]. + * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional). + * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system + * and the use coordinate system (optional). + * @constructor + * @extends API.Pattern + */ + API.ShadingPattern = ShadingPattern; + + /** + * A PDF Tiling pattern. + * + * Only available in "advanced" API mode. + * + * @param {Array.} boundingBox The bounding box at which one pattern cell gets clipped. + * @param {Number} xStep Horizontal spacing between pattern cells. + * @param {Number} yStep Vertical spacing between pattern cells. + * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional). + * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system + * and the use coordinate system (optional). + * @constructor + * @extends API.Pattern + */ + API.TilingPattern = TilingPattern; + + /** + * Adds a new {@link API.ShadingPattern} for later use. Only available in "advanced" API mode. + * @param {String} key + * @param {Pattern} pattern + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name addPattern + */ + API.addShadingPattern = function(key, pattern) { + advancedApiModeTrap("addShadingPattern()"); + + addPattern(key, pattern); + return this; + }; + + /** + * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern} + * gets called. Only available in "advanced" API mode. + * @param {API.Pattern} pattern + * @memberof jsPDF# + * @name beginTilingPattern + */ + API.beginTilingPattern = function(pattern) { + advancedApiModeTrap("beginTilingPattern()"); + + beginNewRenderTarget( + pattern.boundingBox[0], + pattern.boundingBox[1], + pattern.boundingBox[2] - pattern.boundingBox[0], + pattern.boundingBox[3] - pattern.boundingBox[1], + pattern.matrix + ); + }; + + /** + * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called. + * + * Only available in "advanced" API mode. + * + * @param {string} key A unique key that is used to reference this pattern at later use. + * @param {API.Pattern} pattern The pattern to end. + * @memberof jsPDF# + * @name endTilingPattern + */ + API.endTilingPattern = function(key, pattern) { + advancedApiModeTrap("endTilingPattern()"); + + // retrieve the stream + pattern.stream = pages[currentPage].join("\n"); + + addPattern(key, pattern); + + events.publish("endTilingPattern", pattern); + + // restore state from stack + renderTargetStack.pop().restore(); + }; + + var newObject = (API.__private__.newObject = function() { + var oid = newObjectDeferred(); + newObjectDeferredBegin(oid, true); + return oid; + }); + + // Does not output the object. The caller must call newObjectDeferredBegin(oid) before outputing any data + var newObjectDeferred = (API.__private__.newObjectDeferred = function() { + objectNumber++; + offsets[objectNumber] = function() { + return contentLength; + }; + return objectNumber; + }); + + var newObjectDeferredBegin = function(oid, doOutput) { + doOutput = typeof doOutput === "boolean" ? doOutput : false; + offsets[oid] = contentLength; + if (doOutput) { + out(oid + " 0 obj"); + } + return oid; + }; + // Does not output the object until after the pages have been output. + // Returns an object containing the objectId and content. + // All pages have been added so the object ID can be estimated to start right after. + // This does not modify the current objectNumber; It must be updated after the newObjects are output. + var newAdditionalObject = (API.__private__.newAdditionalObject = function() { + var objId = newObjectDeferred(); + var obj = { + objId: objId, + content: "" + }; + additionalObjects.push(obj); + return obj; + }); + + var rootDictionaryObjId = newObjectDeferred(); + var resourceDictionaryObjId = newObjectDeferred(); + + ///////////////////// + // Private functions + ///////////////////// + + var decodeColorString = (API.__private__.decodeColorString = function(color) { + var colorEncoded = color.split(" "); + if ( + colorEncoded.length === 2 && + (colorEncoded[1] === "g" || colorEncoded[1] === "G") + ) { + // convert grayscale value to rgb so that it can be converted to hex for consistency + var floatVal = parseFloat(colorEncoded[0]); + colorEncoded = [floatVal, floatVal, floatVal, "r"]; + } else if ( + colorEncoded.length === 5 && + (colorEncoded[4] === "k" || colorEncoded[4] === "K") + ) { + // convert CMYK values to rbg so that it can be converted to hex for consistency + var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]); + var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]); + var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]); + + colorEncoded = [red, green, blue, "r"]; + } + var colorAsRGB = "#"; + for (var i = 0; i < 3; i++) { + colorAsRGB += ( + "0" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16) + ).slice(-2); + } + return colorAsRGB; + }); + + var encodeColorString = (API.__private__.encodeColorString = function( + options + ) { + var color; + + if (typeof options === "string") { + options = { + ch1: options + }; + } + var ch1 = options.ch1; + var ch2 = options.ch2; + var ch3 = options.ch3; + var ch4 = options.ch4; + var letterArray = + options.pdfColorType === "draw" ? ["G", "RG", "K"] : ["g", "rg", "k"]; + + if (typeof ch1 === "string" && ch1.charAt(0) !== "#") { + var rgbColor = new RGBColor(ch1); + if (rgbColor.ok) { + ch1 = rgbColor.toHex(); + } else if (!/^\d*\.?\d*$/.test(ch1)) { + throw new Error( + 'Invalid color "' + ch1 + '" passed to jsPDF.encodeColorString.' + ); + } + } + //convert short rgb to long form + if (typeof ch1 === "string" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) { + ch1 = "#" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3]; + } + + if (typeof ch1 === "string" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) { + var hex = parseInt(ch1.substr(1), 16); + ch1 = (hex >> 16) & 255; + ch2 = (hex >> 8) & 255; + ch3 = hex & 255; + } + + if ( + typeof ch2 === "undefined" || + (typeof ch4 === "undefined" && ch1 === ch2 && ch2 === ch3) + ) { + // Gray color space. + if (typeof ch1 === "string") { + color = ch1 + " " + letterArray[0]; + } else { + switch (options.precision) { + case 2: + color = f2(ch1 / 255) + " " + letterArray[0]; + break; + case 3: + default: + color = f3(ch1 / 255) + " " + letterArray[0]; + } + } + } else if (typeof ch4 === "undefined" || typeof ch4 === "object") { + // assume RGBA + if (ch4 && !isNaN(ch4.a)) { + //TODO Implement transparency. + //WORKAROUND use white for now, if transparent, otherwise handle as rgb + if (ch4.a === 0) { + color = ["1.", "1.", "1.", letterArray[1]].join(" "); + return color; + } + } + // assume RGB + if (typeof ch1 === "string") { + color = [ch1, ch2, ch3, letterArray[1]].join(" "); + } else { + switch (options.precision) { + case 2: + color = [ + f2(ch1 / 255), + f2(ch2 / 255), + f2(ch3 / 255), + letterArray[1] + ].join(" "); + break; + default: + case 3: + color = [ + f3(ch1 / 255), + f3(ch2 / 255), + f3(ch3 / 255), + letterArray[1] + ].join(" "); + } + } + } else { + // assume CMYK + if (typeof ch1 === "string") { + color = [ch1, ch2, ch3, ch4, letterArray[2]].join(" "); + } else { + switch (options.precision) { + case 2: + color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join( + " " + ); + break; + case 3: + default: + color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join( + " " + ); + } + } + } + return color; + }); + + var getFilters = (API.__private__.getFilters = function() { + return filters; + }); + + var putStream = (API.__private__.putStream = function(options) { + options = options || {}; + var data = options.data || ""; + var filters = options.filters || getFilters(); + var alreadyAppliedFilters = options.alreadyAppliedFilters || []; + var addLength1 = options.addLength1 || false; + var valueOfLength1 = data.length; + var objectId = options.objectId; + var encryptor = function(data) { + return data; + }; + if (encryptionOptions !== null && typeof objectId == "undefined") { + throw new Error( + "ObjectId must be passed to putStream for file encryption" + ); + } + if (encryptionOptions !== null) { + encryptor = encryption.encryptor(objectId, 0); + } + + var processedData = {}; + if (filters === true) { + filters = ["FlateEncode"]; + } + var keyValues = options.additionalKeyValues || []; + if (typeof jsPDF.API.processDataByFilters !== "undefined") { + processedData = jsPDF.API.processDataByFilters(data, filters); + } else { + processedData = { data: data, reverseChain: [] }; + } + var filterAsString = + processedData.reverseChain + + (Array.isArray(alreadyAppliedFilters) + ? alreadyAppliedFilters.join(" ") + : alreadyAppliedFilters.toString()); + + if (processedData.data.length !== 0) { + keyValues.push({ + key: "Length", + value: processedData.data.length + }); + if (addLength1 === true) { + keyValues.push({ + key: "Length1", + value: valueOfLength1 + }); + } + } + + if (filterAsString.length != 0) { + if (filterAsString.split("/").length - 1 === 1) { + keyValues.push({ + key: "Filter", + value: filterAsString + }); + } else { + keyValues.push({ + key: "Filter", + value: "[" + filterAsString + "]" + }); + + for (var j = 0; j < keyValues.length; j += 1) { + if (keyValues[j].key === "DecodeParms") { + var decodeParmsArray = []; + + for ( + var i = 0; + i < processedData.reverseChain.split("/").length - 1; + i += 1 + ) { + decodeParmsArray.push("null"); + } + + decodeParmsArray.push(keyValues[j].value); + keyValues[j].value = "[" + decodeParmsArray.join(" ") + "]"; + } + } + } + } + + out("<<"); + for (var k = 0; k < keyValues.length; k++) { + out("/" + keyValues[k].key + " " + keyValues[k].value); + } + out(">>"); + if (processedData.data.length !== 0) { + out("stream"); + out(encryptor(processedData.data)); + out("endstream"); + } + }); + + var putPage = (API.__private__.putPage = function(page) { + var pageNumber = page.number; + var data = page.data; + var pageObjectNumber = page.objId; + var pageContentsObjId = page.contentsObjId; + + newObjectDeferredBegin(pageObjectNumber, true); + out("<>"); + out("endobj"); + // Page content + var pageContent = data.join("\n"); + + if (apiMode === ApiMode.ADVANCED) { + // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again + pageContent += "\nQ"; + } + + newObjectDeferredBegin(pageContentsObjId, true); + putStream({ + data: pageContent, + filters: getFilters(), + objectId: pageContentsObjId + }); + out("endobj"); + return pageObjectNumber; + }); + + var putPages = (API.__private__.putPages = function() { + var n, + i, + pageObjectNumbers = []; + + for (n = 1; n <= page; n++) { + pagesContext[n].objId = newObjectDeferred(); + pagesContext[n].contentsObjId = newObjectDeferred(); + } + + for (n = 1; n <= page; n++) { + pageObjectNumbers.push( + putPage({ + number: n, + data: pages[n], + objId: pagesContext[n].objId, + contentsObjId: pagesContext[n].contentsObjId, + mediaBox: pagesContext[n].mediaBox, + cropBox: pagesContext[n].cropBox, + bleedBox: pagesContext[n].bleedBox, + trimBox: pagesContext[n].trimBox, + artBox: pagesContext[n].artBox, + userUnit: pagesContext[n].userUnit, + rootDictionaryObjId: rootDictionaryObjId, + resourceDictionaryObjId: resourceDictionaryObjId + }) + ); + } + newObjectDeferredBegin(rootDictionaryObjId, true); + out("<>"); + out("endobj"); + events.publish("postPutPages"); + }); + + var putFont = function(font) { + events.publish("putFont", { + font: font, + out: out, + newObject: newObject, + putStream: putStream + }); + + if (font.isAlreadyPutted !== true) { + font.objectNumber = newObject(); + out("<<"); + out("/Type /Font"); + out("/BaseFont /" + toPDFName(font.postScriptName)); + out("/Subtype /Type1"); + if (typeof font.encoding === "string") { + out("/Encoding /" + font.encoding); + } + out("/FirstChar 32"); + out("/LastChar 255"); + out(">>"); + out("endobj"); + } + }; + + var putFonts = function() { + for (var fontKey in fonts) { + if (fonts.hasOwnProperty(fontKey)) { + if ( + putOnlyUsedFonts === false || + (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey)) + ) { + putFont(fonts[fontKey]); + } + } + } + }; + + var putXObject = function(xObject) { + xObject.objectNumber = newObject(); + + var options = []; + options.push({ key: "Type", value: "/XObject" }); + options.push({ key: "Subtype", value: "/Form" }); + options.push({ + key: "BBox", + value: + "[" + + [ + hpf(xObject.x), + hpf(xObject.y), + hpf(xObject.x + xObject.width), + hpf(xObject.y + xObject.height) + ].join(" ") + + "]" + }); + options.push({ + key: "Matrix", + value: "[" + xObject.matrix.toString() + "]" + }); + // TODO: /Resources + + var stream = xObject.pages[1].join("\n"); + putStream({ + data: stream, + additionalKeyValues: options, + objectId: xObject.objectNumber + }); + out("endobj"); + }; + + var putXObjects = function() { + for (var xObjectKey in renderTargets) { + if (renderTargets.hasOwnProperty(xObjectKey)) { + putXObject(renderTargets[xObjectKey]); + } + } + }; + + var interpolateAndEncodeRGBStream = function(colors, numberSamples) { + var tValues = []; + var t; + var dT = 1.0 / (numberSamples - 1); + for (t = 0.0; t < 1.0; t += dT) { + tValues.push(t); + } + tValues.push(1.0); + // add first and last control point if not present + if (colors[0].offset != 0.0) { + var c0 = { + offset: 0.0, + color: colors[0].color + }; + colors.unshift(c0); + } + if (colors[colors.length - 1].offset != 1.0) { + var c1 = { + offset: 1.0, + color: colors[colors.length - 1].color + }; + colors.push(c1); + } + var out = ""; + var index = 0; + + for (var i = 0; i < tValues.length; i++) { + t = tValues[i]; + while (t > colors[index + 1].offset) index++; + var a = colors[index].offset; + var b = colors[index + 1].offset; + var d = (t - a) / (b - a); + + var aColor = colors[index].color; + var bColor = colors[index + 1].color; + + out += + padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) + + padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) + + padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16)); + } + return out.trim(); + }; + + var putShadingPattern = function(pattern, numberSamples) { + /* + Axial patterns shade between the two points specified in coords, radial patterns between the inner + and outer circle. + The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now + interpolated to equidistant samples and written to pdf as a sample (type 0) function. + */ + // The number of color samples that should be used to describe the shading. + // The higher, the more accurate the gradient will be. + numberSamples || (numberSamples = 21); + var funcObjectNumber = newObject(); + var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples); + + var options = []; + options.push({ key: "FunctionType", value: "0" }); + options.push({ key: "Domain", value: "[0.0 1.0]" }); + options.push({ key: "Size", value: "[" + numberSamples + "]" }); + options.push({ key: "BitsPerSample", value: "8" }); + options.push({ key: "Range", value: "[0.0 1.0 0.0 1.0 0.0 1.0]" }); + options.push({ key: "Decode", value: "[0.0 1.0 0.0 1.0 0.0 1.0]" }); + + putStream({ + data: stream, + additionalKeyValues: options, + alreadyAppliedFilters: ["/ASCIIHexDecode"], + objectId: funcObjectNumber + }); + out("endobj"); + + pattern.objectNumber = newObject(); + out("<< /ShadingType " + pattern.type); + out("/ColorSpace /DeviceRGB"); + var coords = + "/Coords [" + + hpf(parseFloat(pattern.coords[0])) + + " " + // x1 + hpf(parseFloat(pattern.coords[1])) + + " "; // y1 + if (pattern.type === 2) { + // axial + coords += + hpf(parseFloat(pattern.coords[2])) + + " " + // x2 + hpf(parseFloat(pattern.coords[3])); // y2 + } else { + // radial + coords += + hpf(parseFloat(pattern.coords[2])) + + " " + // r1 + hpf(parseFloat(pattern.coords[3])) + + " " + // x2 + hpf(parseFloat(pattern.coords[4])) + + " " + // y2 + hpf(parseFloat(pattern.coords[5])); // r2 + } + coords += "]"; + out(coords); + + if (pattern.matrix) { + out("/Matrix [" + pattern.matrix.toString() + "]"); + } + out("/Function " + funcObjectNumber + " 0 R"); + out("/Extend [true true]"); + out(">>"); + out("endobj"); + }; + + var putTilingPattern = function(pattern, deferredResourceDictionaryIds) { + var resourcesObjectId = newObjectDeferred(); + var patternObjectId = newObject(); + + deferredResourceDictionaryIds.push({ + resourcesOid: resourcesObjectId, + objectOid: patternObjectId + }); + + pattern.objectNumber = patternObjectId; + var options = []; + options.push({ key: "Type", value: "/Pattern" }); + options.push({ key: "PatternType", value: "1" }); // tiling pattern + options.push({ key: "PaintType", value: "1" }); // colored tiling pattern + options.push({ key: "TilingType", value: "1" }); // constant spacing + options.push({ + key: "BBox", + value: "[" + pattern.boundingBox.map(hpf).join(" ") + "]" + }); + options.push({ key: "XStep", value: hpf(pattern.xStep) }); + options.push({ key: "YStep", value: hpf(pattern.yStep) }); + options.push({ key: "Resources", value: resourcesObjectId + " 0 R" }); + if (pattern.matrix) { + options.push({ + key: "Matrix", + value: "[" + pattern.matrix.toString() + "]" + }); + } + + putStream({ + data: pattern.stream, + additionalKeyValues: options, + objectId: pattern.objectNumber + }); + out("endobj"); + }; + + var putPatterns = function(deferredResourceDictionaryIds) { + var patternKey; + for (patternKey in patterns) { + if (patterns.hasOwnProperty(patternKey)) { + if (patterns[patternKey] instanceof ShadingPattern) { + putShadingPattern(patterns[patternKey]); + } else if (patterns[patternKey] instanceof TilingPattern) { + putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds); + } + } + } + }; + + var putGState = function(gState) { + gState.objectNumber = newObject(); + out("<<"); + for (var p in gState) { + switch (p) { + case "opacity": + out("/ca " + f2(gState[p])); + break; + case "stroke-opacity": + out("/CA " + f2(gState[p])); + break; + } + } + out(">>"); + out("endobj"); + }; + + var putGStates = function() { + var gStateKey; + for (gStateKey in gStates) { + if (gStates.hasOwnProperty(gStateKey)) { + putGState(gStates[gStateKey]); + } + } + }; + + var putXobjectDict = function() { + out("/XObject <<"); + for (var xObjectKey in renderTargets) { + if ( + renderTargets.hasOwnProperty(xObjectKey) && + renderTargets[xObjectKey].objectNumber >= 0 + ) { + out( + "/" + + xObjectKey + + " " + + renderTargets[xObjectKey].objectNumber + + " 0 R" + ); + } + } + + // Loop through images, or other data objects + events.publish("putXobjectDict"); + out(">>"); + }; + + var putEncryptionDict = function() { + encryption.oid = newObject(); + out("<<"); + out("/Filter /Standard"); + out("/V " + encryption.v); + out("/R " + encryption.r); + out("/U <" + encryption.toHexString(encryption.U) + ">"); + out("/O <" + encryption.toHexString(encryption.O) + ">"); + out("/P " + encryption.P); + out(">>"); + out("endobj"); + }; + + var putFontDict = function() { + out("/Font <<"); + + for (var fontKey in fonts) { + if (fonts.hasOwnProperty(fontKey)) { + if ( + putOnlyUsedFonts === false || + (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey)) + ) { + out("/" + fontKey + " " + fonts[fontKey].objectNumber + " 0 R"); + } + } + } + out(">>"); + }; + + var putShadingPatternDict = function() { + if (Object.keys(patterns).length > 0) { + out("/Shading <<"); + for (var patternKey in patterns) { + if ( + patterns.hasOwnProperty(patternKey) && + patterns[patternKey] instanceof ShadingPattern && + patterns[patternKey].objectNumber >= 0 + ) { + out( + "/" + patternKey + " " + patterns[patternKey].objectNumber + " 0 R" + ); + } + } + + events.publish("putShadingPatternDict"); + out(">>"); + } + }; + + var putTilingPatternDict = function(objectOid) { + if (Object.keys(patterns).length > 0) { + out("/Pattern <<"); + for (var patternKey in patterns) { + if ( + patterns.hasOwnProperty(patternKey) && + patterns[patternKey] instanceof API.TilingPattern && + patterns[patternKey].objectNumber >= 0 && + patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies + ) { + out( + "/" + patternKey + " " + patterns[patternKey].objectNumber + " 0 R" + ); + } + } + events.publish("putTilingPatternDict"); + out(">>"); + } + }; + + var putGStatesDict = function() { + if (Object.keys(gStates).length > 0) { + var gStateKey; + out("/ExtGState <<"); + for (gStateKey in gStates) { + if ( + gStates.hasOwnProperty(gStateKey) && + gStates[gStateKey].objectNumber >= 0 + ) { + out("/" + gStateKey + " " + gStates[gStateKey].objectNumber + " 0 R"); + } + } + + events.publish("putGStateDict"); + out(">>"); + } + }; + + var putResourceDictionary = function(objectIds) { + newObjectDeferredBegin(objectIds.resourcesOid, true); + out("<<"); + out("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"); + putFontDict(); + putShadingPatternDict(); + putTilingPatternDict(objectIds.objectOid); + putGStatesDict(); + putXobjectDict(); + out(">>"); + out("endobj"); + }; + + var putResources = function() { + // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images + // which means their resource dictionaries must contain the already resolved + // object ids. For this reason we defer the serialization of the resource + // dicts until all objects have been serialized and have object ids. + // + // In order to prevent cyclic dependencies (which Adobe Reader doesn't like), + // we only put all oids that are smaller than the oid of the object the + // resource dict belongs to. This is correct behavior, since the streams + // may only use other objects that have already been defined and thus appear + // earlier in their respective collection. + // Currently, this only affects tiling patterns, but a (more) correct + // implementation of FormObjects would also define their own resource dicts. + var deferredResourceDictionaryIds = []; + + putFonts(); + putGStates(); + putXObjects(); + putPatterns(deferredResourceDictionaryIds); + + events.publish("putResources"); + deferredResourceDictionaryIds.forEach(putResourceDictionary); + putResourceDictionary({ + resourcesOid: resourceDictionaryObjId, + objectOid: Number.MAX_SAFE_INTEGER // output all objects + }); + events.publish("postPutResources"); + }; + + var putAdditionalObjects = function() { + events.publish("putAdditionalObjects"); + for (var i = 0; i < additionalObjects.length; i++) { + var obj = additionalObjects[i]; + newObjectDeferredBegin(obj.objId, true); + out(obj.content); + out("endobj"); + } + events.publish("postPutAdditionalObjects"); + }; + + var addFontToFontDictionary = function(font) { + fontmap[font.fontName] = fontmap[font.fontName] || {}; + fontmap[font.fontName][font.fontStyle] = font.id; + }; + + var addFont = function( + postScriptName, + fontName, + fontStyle, + encoding, + isStandardFont + ) { + var font = { + id: "F" + (Object.keys(fonts).length + 1).toString(10), + postScriptName: postScriptName, + fontName: fontName, + fontStyle: fontStyle, + encoding: encoding, + isStandardFont: isStandardFont || false, + metadata: {} + }; + + events.publish("addFont", { + font: font, + instance: this + }); + + fonts[font.id] = font; + addFontToFontDictionary(font); + return font.id; + }; + + var addFonts = function(arrayOfFonts) { + for (var i = 0, l = standardFonts.length; i < l; i++) { + var fontKey = addFont.call( + this, + arrayOfFonts[i][0], + arrayOfFonts[i][1], + arrayOfFonts[i][2], + standardFonts[i][3], + true + ); + + if (putOnlyUsedFonts === false) { + usedFonts[fontKey] = true; + } + // adding aliases for standard fonts, this time matching the capitalization + var parts = arrayOfFonts[i][0].split("-"); + addFontToFontDictionary({ + id: fontKey, + fontName: parts[0], + fontStyle: parts[1] || "" + }); + } + events.publish("addFonts", { + fonts: fonts, + dictionary: fontmap + }); + }; + + var SAFE = function __safeCall(fn) { + fn.foo = function __safeCallWrapper() { + try { + return fn.apply(this, arguments); + } catch (e) { + var stack = e.stack || ""; + if (~stack.indexOf(" at ")) stack = stack.split(" at ")[1]; + var m = + "Error in function " + + stack.split("\n")[0].split("<")[0] + + ": " + + e.message; + if (globalObject.console) { + globalObject.console.error(m, e); + if (globalObject.alert) alert(m); + } else { + throw new Error(m); + } + } + }; + fn.foo.bar = fn; + return fn.foo; + }; + + var to8bitStream = function(text, flags) { + /** + * PDF 1.3 spec: + * "For text strings encoded in Unicode, the first two bytes must be 254 followed by + * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts + * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely + * to be a meaningful beginning of a word or phrase.) The remainder of the + * string consists of Unicode character codes, according to the UTF-16 encoding + * specified in the Unicode standard, version 2.0. Commonly used Unicode values + * are represented as 2 bytes per character, with the high-order byte appearing first + * in the string." + * + * In other words, if there are chars in a string with char code above 255, we + * recode the string to UCS2 BE - string doubles in length and BOM is prepended. + * + * HOWEVER! + * Actual *content* (body) text (as opposed to strings used in document properties etc) + * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID) + * + * Because of Adobe's focus on "you subset your fonts!" you are not supposed to have + * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could + * fudge it with "Identity-H" encoding and custom CIDtoGID map that mimics Unicode + * code page. There, however, all characters in the stream are treated as GIDs, + * including BOM, which is the reason we need to skip BOM in content text (i.e. that + * that is tied to a font). + * + * To signal this "special" PDFEscape / to8bitStream handling mode, + * API.text() function sets (unless you overwrite it with manual values + * given to API.text(.., flags) ) + * flags.autoencode = true + * flags.noBOM = true + * + * =================================================================================== + * `flags` properties relied upon: + * .sourceEncoding = string with encoding label. + * "Unicode" by default. = encoding of the incoming text. + * pass some non-existing encoding name + * (ex: 'Do not touch my strings! I know what I am doing.') + * to make encoding code skip the encoding step. + * .outputEncoding = Either valid PDF encoding name + * (must be supported by jsPDF font metrics, otherwise no encoding) + * or a JS object, where key = sourceCharCode, value = outputCharCode + * missing keys will be treated as: sourceCharCode === outputCharCode + * .noBOM + * See comment higher above for explanation for why this is important + * .autoencode + * See comment higher above for explanation for why this is important + */ + + var i, + l, + sourceEncoding, + encodingBlock, + outputEncoding, + newtext, + isUnicode, + ch, + bch; + + flags = flags || {}; + sourceEncoding = flags.sourceEncoding || "Unicode"; + outputEncoding = flags.outputEncoding; + + // This 'encoding' section relies on font metrics format + // attached to font objects by, among others, + // "Willow Systems' standard_font_metrics plugin" + // see jspdf.plugin.standard_font_metrics.js for format + // of the font.metadata.encoding Object. + // It should be something like + // .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}} + // .widths = {0:width, code:width, ..., 'fof':divisor} + // .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...} + if ( + (flags.autoencode || outputEncoding) && + fonts[activeFontKey].metadata && + fonts[activeFontKey].metadata[sourceEncoding] && + fonts[activeFontKey].metadata[sourceEncoding].encoding + ) { + encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding; + + // each font has default encoding. Some have it clearly defined. + if (!outputEncoding && fonts[activeFontKey].encoding) { + outputEncoding = fonts[activeFontKey].encoding; + } + + // Hmmm, the above did not work? Let's try again, in different place. + if (!outputEncoding && encodingBlock.codePages) { + outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default + } + + if (typeof outputEncoding === "string") { + outputEncoding = encodingBlock[outputEncoding]; + } + // we want output encoding to be a JS Object, where + // key = sourceEncoding's character code and + // value = outputEncoding's character code. + if (outputEncoding) { + isUnicode = false; + newtext = []; + for (i = 0, l = text.length; i < l; i++) { + ch = outputEncoding[text.charCodeAt(i)]; + if (ch) { + newtext.push(String.fromCharCode(ch)); + } else { + newtext.push(text[i]); + } + + // since we are looping over chars anyway, might as well + // check for residual unicodeness + if (newtext[i].charCodeAt(0) >> 8) { + /* more than 255 */ + isUnicode = true; + } + } + text = newtext.join(""); + } + } + + i = text.length; + // isUnicode may be set to false above. Hence the triple-equal to undefined + while (isUnicode === undefined && i !== 0) { + if (text.charCodeAt(i - 1) >> 8) { + /* more than 255 */ + isUnicode = true; + } + i--; + } + if (!isUnicode) { + return text; + } + + newtext = flags.noBOM ? [] : [254, 255]; + for (i = 0, l = text.length; i < l; i++) { + ch = text.charCodeAt(i); + bch = ch >> 8; // divide by 256 + if (bch >> 8) { + /* something left after dividing by 256 second time */ + throw new Error( + "Character at position " + + i + + " of string '" + + text + + "' exceeds 16bits. Cannot be encoded into UCS-2 BE" + ); + } + newtext.push(bch); + newtext.push(ch - (bch << 8)); + } + return String.fromCharCode.apply(undefined, newtext); + }; + + var pdfEscape = (API.__private__.pdfEscape = API.pdfEscape = function( + text, + flags + ) { + /** + * Replace '/', '(', and ')' with pdf-safe versions + * + * Doing to8bitStream does NOT make this PDF display unicode text. For that + * we also need to reference a unicode font and embed it - royal pain in the rear. + * + * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars, + * which JavaScript Strings are happy to provide. So, while we still cannot display + * 2-byte characters property, at least CONDITIONALLY converting (entire string containing) + * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF + * is still parseable. + * This will allow immediate support for unicode in document properties strings. + */ + return to8bitStream(text, flags) + .replace(/\\/g, "\\\\") + .replace(/\(/g, "\\(") + .replace(/\)/g, "\\)"); + }); + + var beginPage = (API.__private__.beginPage = function(format) { + pages[++page] = []; + pagesContext[page] = { + objId: 0, + contentsObjId: 0, + userUnit: Number(userUnit), + artBox: null, + bleedBox: null, + cropBox: null, + trimBox: null, + mediaBox: { + bottomLeftX: 0, + bottomLeftY: 0, + topRightX: Number(format[0]), + topRightY: Number(format[1]) + } + }; + _setPage(page); + setOutputDestination(pages[currentPage]); + }); + + var _addPage = function(parmFormat, parmOrientation) { + var dimensions, width, height; + + orientation = parmOrientation || orientation; + + if (typeof parmFormat === "string") { + dimensions = getPageFormat(parmFormat.toLowerCase()); + if (Array.isArray(dimensions)) { + width = dimensions[0]; + height = dimensions[1]; + } + } + + if (Array.isArray(parmFormat)) { + width = parmFormat[0] * scaleFactor; + height = parmFormat[1] * scaleFactor; + } + + if (isNaN(width)) { + width = format[0]; + height = format[1]; + } + + if (width > 14400 || height > 14400) { + console.warn( + "A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400" + ); + width = Math.min(14400, width); + height = Math.min(14400, height); + } + + format = [width, height]; + + switch (orientation.substr(0, 1)) { + case "l": + if (height > width) { + format = [height, width]; + } + break; + case "p": + if (width > height) { + format = [height, width]; + } + break; + } + + beginPage(format); + + // Set line width + setLineWidth(lineWidth); + // Set draw color + out(strokeColor); + // resurrecting non-default line caps, joins + if (lineCapID !== 0) { + out(lineCapID + " J"); + } + if (lineJoinID !== 0) { + out(lineJoinID + " j"); + } + events.publish("addPage", { + pageNumber: page + }); + }; + + var _deletePage = function(n) { + if (n > 0 && n <= page) { + pages.splice(n, 1); + pagesContext.splice(n, 1); + page--; + if (currentPage > page) { + currentPage = page; + } + this.setPage(currentPage); + } + }; + + var _setPage = function(n) { + if (n > 0 && n <= page) { + currentPage = n; + } + }; + + var getNumberOfPages = (API.__private__.getNumberOfPages = API.getNumberOfPages = function() { + return pages.length - 1; + }); + + /** + * Returns a document-specific font key - a label assigned to a + * font name + font type combination at the time the font was added + * to the font inventory. + * + * Font key is used as label for the desired font for a block of text + * to be added to the PDF document stream. + * @private + * @function + * @param fontName {string} can be undefined on "falthy" to indicate "use current" + * @param fontStyle {string} can be undefined on "falthy" to indicate "use current" + * @returns {string} Font key. + * @ignore + */ + var getFont = function(fontName, fontStyle, options) { + var key = undefined, + fontNameLowerCase; + options = options || {}; + + fontName = + fontName !== undefined ? fontName : fonts[activeFontKey].fontName; + fontStyle = + fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle; + fontNameLowerCase = fontName.toLowerCase(); + + if ( + fontmap[fontNameLowerCase] !== undefined && + fontmap[fontNameLowerCase][fontStyle] !== undefined + ) { + key = fontmap[fontNameLowerCase][fontStyle]; + } else if ( + fontmap[fontName] !== undefined && + fontmap[fontName][fontStyle] !== undefined + ) { + key = fontmap[fontName][fontStyle]; + } else { + if (options.disableWarning === false) { + console.warn( + "Unable to look up font label for font '" + + fontName + + "', '" + + fontStyle + + "'. Refer to getFontList() for available fonts." + ); + } + } + + if (!key && !options.noFallback) { + key = fontmap["times"][fontStyle]; + if (key == null) { + key = fontmap["times"]["normal"]; + } + } + return key; + }; + + var putInfo = (API.__private__.putInfo = function() { + var objectId = newObject(); + var encryptor = function(data) { + return data; + }; + if (encryptionOptions !== null) { + encryptor = encryption.encryptor(objectId, 0); + } + out("<<"); + out("/Producer (" + pdfEscape(encryptor("jsPDF " + jsPDF.version)) + ")"); + for (var key in documentProperties) { + if (documentProperties.hasOwnProperty(key) && documentProperties[key]) { + out( + "/" + + key.substr(0, 1).toUpperCase() + + key.substr(1) + + " (" + + pdfEscape(encryptor(documentProperties[key])) + + ")" + ); + } + } + out("/CreationDate (" + pdfEscape(encryptor(creationDate)) + ")"); + out(">>"); + out("endobj"); + }); + + var putCatalog = (API.__private__.putCatalog = function(options) { + options = options || {}; + var tmpRootDictionaryObjId = + options.rootDictionaryObjId || rootDictionaryObjId; + newObject(); + out("<<"); + out("/Type /Catalog"); + out("/Pages " + tmpRootDictionaryObjId + " 0 R"); + // PDF13ref Section 7.2.1 + if (!zoomMode) zoomMode = "fullwidth"; + switch (zoomMode) { + case "fullwidth": + out("/OpenAction [3 0 R /FitH null]"); + break; + case "fullheight": + out("/OpenAction [3 0 R /FitV null]"); + break; + case "fullpage": + out("/OpenAction [3 0 R /Fit]"); + break; + case "original": + out("/OpenAction [3 0 R /XYZ null null 1]"); + break; + default: + var pcn = "" + zoomMode; + if (pcn.substr(pcn.length - 1) === "%") + zoomMode = parseInt(zoomMode) / 100; + if (typeof zoomMode === "number") { + out("/OpenAction [3 0 R /XYZ null null " + f2(zoomMode) + "]"); + } + } + if (!layoutMode) layoutMode = "continuous"; + switch (layoutMode) { + case "continuous": + out("/PageLayout /OneColumn"); + break; + case "single": + out("/PageLayout /SinglePage"); + break; + case "two": + case "twoleft": + out("/PageLayout /TwoColumnLeft"); + break; + case "tworight": + out("/PageLayout /TwoColumnRight"); + break; + } + if (pageMode) { + /** + * A name object specifying how the document should be displayed when opened: + * UseNone : Neither document outline nor thumbnail images visible -- DEFAULT + * UseOutlines : Document outline visible + * UseThumbs : Thumbnail images visible + * FullScreen : Full-screen mode, with no menu bar, window controls, or any other window visible + */ + out("/PageMode /" + pageMode); + } + events.publish("putCatalog"); + out(">>"); + out("endobj"); + }); + + var putTrailer = (API.__private__.putTrailer = function() { + out("trailer"); + out("<<"); + out("/Size " + (objectNumber + 1)); + // Root and Info must be the last and second last objects written respectively + out("/Root " + objectNumber + " 0 R"); + out("/Info " + (objectNumber - 1) + " 0 R"); + if (encryptionOptions !== null) { + out("/Encrypt " + encryption.oid + " 0 R"); + } + out("/ID [ <" + fileId + "> <" + fileId + "> ]"); + out(">>"); + }); + + var putHeader = (API.__private__.putHeader = function() { + out("%PDF-" + pdfVersion); + out("%\xBA\xDF\xAC\xE0"); + }); + + var putXRef = (API.__private__.putXRef = function() { + var p = "0000000000"; + + out("xref"); + out("0 " + (objectNumber + 1)); + out("0000000000 65535 f "); + for (var i = 1; i <= objectNumber; i++) { + var offset = offsets[i]; + if (typeof offset === "function") { + out((p + offsets[i]()).slice(-10) + " 00000 n "); + } else { + if (typeof offsets[i] !== "undefined") { + out((p + offsets[i]).slice(-10) + " 00000 n "); + } else { + out("0000000000 00000 n "); + } + } + } + }); + + var buildDocument = (API.__private__.buildDocument = function() { + resetDocument(); + setOutputDestination(content); + + events.publish("buildDocument"); + + putHeader(); + putPages(); + putAdditionalObjects(); + putResources(); + if (encryptionOptions !== null) putEncryptionDict(); + putInfo(); + putCatalog(); + + var offsetOfXRef = contentLength; + putXRef(); + putTrailer(); + out("startxref"); + out("" + offsetOfXRef); + out("%%EOF"); + + setOutputDestination(pages[currentPage]); + + return content.join("\n"); + }); + + var getBlob = (API.__private__.getBlob = function(data) { + return new Blob([getArrayBuffer(data)], { + type: "application/pdf" + }); + }); + + /** + * Generates the PDF document. + * + * If `type` argument is undefined, output is raw body of resulting PDF returned as a string. + * + * @param {string} type A string identifying one of the possible output types.
    + * Possible values are:
    + * 'arraybuffer' -> (ArrayBuffer)
    + * 'blob' -> (Blob)
    + * 'bloburi'/'bloburl' -> (string)
    + * 'datauristring'/'dataurlstring' -> (string)
    + * 'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring
    + * 'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)
    + * 'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)
    + * 'pdfjsnewwindow' -> (wind | null) + * @param {Object|string} options An object providing some additional signalling to PDF generator.
    + * Possible options are 'filename'.
    + * A string can be passed instead of {filename:string} and defaults to 'generated.pdf' + * @function + * @instance + * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined} + * @memberof jsPDF# + * @name output + */ + var output = (API.output = API.__private__.output = SAFE(function output( + type, + options + ) { + options = options || {}; + + if (typeof options === "string") { + options = { + filename: options + }; + } else { + options.filename = options.filename || "generated.pdf"; + } + + switch (type) { + case undefined: + return buildDocument(); + case "save": + API.save(options.filename); + break; + case "arraybuffer": + return getArrayBuffer(buildDocument()); + case "blob": + return getBlob(buildDocument()); + case "bloburi": + case "bloburl": + // Developer is responsible of calling revokeObjectURL + if ( + typeof globalObject.URL !== "undefined" && + typeof globalObject.URL.createObjectURL === "function" + ) { + return ( + (globalObject.URL && + globalObject.URL.createObjectURL(getBlob(buildDocument()))) || + void 0 + ); + } else { + console.warn( + "bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser." + ); + } + break; + case "datauristring": + case "dataurlstring": + var dataURI = ""; + var pdfDocument = buildDocument(); + try { + dataURI = btoa(pdfDocument); + } catch (e) { + dataURI = btoa(unescape(encodeURIComponent(pdfDocument))); + } + return ( + "data:application/pdf;filename=" + + options.filename + + ";base64," + + dataURI + ); + case "pdfobjectnewwindow": + if ( + Object.prototype.toString.call(globalObject) === "[object Window]" + ) { + var pdfObjectUrl = + "https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js"; + var integrity = + ' integrity="sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==" crossorigin="anonymous"'; + + if (options.pdfObjectUrl) { + pdfObjectUrl = options.pdfObjectUrl; + integrity = ""; + } + + var htmlForNewWindow = + "" + + '"; + var nW = globalObject.open(); + + if (nW !== null) { + nW.document.write(htmlForNewWindow); + } + return nW; + } else { + throw new Error( + "The option pdfobjectnewwindow just works in a browser-environment." + ); + } + case "pdfjsnewwindow": + if ( + Object.prototype.toString.call(globalObject) === "[object Window]" + ) { + var pdfJsUrl = options.pdfJsUrl || "examples/PDF.js/web/viewer.html"; + var htmlForPDFjsNewWindow = + "" + + "" + + '' + + ""; + var dataURLNewWindow = globalObject.open(); + if (dataURLNewWindow !== null) { + dataURLNewWindow.document.write(htmlForDataURLNewWindow); + dataURLNewWindow.document.title = options.filename; + } + if (dataURLNewWindow || typeof safari === "undefined") + return dataURLNewWindow; + } else { + throw new Error( + "The option dataurlnewwindow just works in a browser-environment." + ); + } + break; + case "datauri": + case "dataurl": + return (globalObject.document.location.href = this.output( + "datauristring", + options + )); + default: + return null; + } + })); + + /** + * Used to see if a supplied hotfix was requested when the pdf instance was created. + * @param {string} hotfixName - The name of the hotfix to check. + * @returns {boolean} + */ + var hasHotfix = function(hotfixName) { + return ( + Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1 + ); + }; + + switch (unit) { + case "pt": + scaleFactor = 1; + break; + case "mm": + scaleFactor = 72 / 25.4; + break; + case "cm": + scaleFactor = 72 / 2.54; + break; + case "in": + scaleFactor = 72; + break; + case "px": + if (hasHotfix("px_scaling") == true) { + scaleFactor = 72 / 96; + } else { + scaleFactor = 96 / 72; + } + break; + case "pc": + scaleFactor = 12; + break; + case "em": + scaleFactor = 12; + break; + case "ex": + scaleFactor = 6; + break; + default: + if (typeof unit === "number") { + scaleFactor = unit; + } else { + throw new Error("Invalid unit: " + unit); + } + } + + var encryption = null; + setCreationDate(); + setFileId(); + + var getEncryptor = function(objectId) { + if (encryptionOptions !== null) { + return encryption.encryptor(objectId, 0); + } + return function(data) { + return data; + }; + }; + + //--------------------------------------- + // Public API + + var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function( + pageNumberOneBased + ) { + if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) { + throw new Error("Invalid argument passed to jsPDF.getPageInfo"); + } + var objId = pagesContext[pageNumberOneBased].objId; + return { + objId: objId, + pageNumber: pageNumberOneBased, + pageContext: pagesContext[pageNumberOneBased] + }; + }); + + var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function( + objId + ) { + if (isNaN(objId) || objId % 1 !== 0) { + throw new Error("Invalid argument passed to jsPDF.getPageInfoByObjId"); + } + for (var pageNumber in pagesContext) { + if (pagesContext[pageNumber].objId === objId) { + break; + } + } + return getPageInfo(pageNumber); + }); + + var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() { + return { + objId: pagesContext[currentPage].objId, + pageNumber: currentPage, + pageContext: pagesContext[currentPage] + }; + }); + + /** + * Adds (and transfers the focus to) new page to the PDF document. + * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    + * Default is "a4". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89] + * @param orientation {string} Orientation of the new page. Possible values are "portrait" or "landscape" (or shortcuts "p" (Default), "l"). + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name addPage + */ + API.addPage = function() { + _addPage.apply(this, arguments); + return this; + }; + /** + * Adds (and transfers the focus to) new page to the PDF document. + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name setPage + * @param {number} page Switch the active page to the page number specified (indexed starting at 1). + * @example + * doc = jsPDF() + * doc.addPage() + * doc.addPage() + * doc.text('I am on page 3', 10, 10) + * doc.setPage(1) + * doc.text('I am on page 1', 10, 10) + */ + API.setPage = function() { + _setPage.apply(this, arguments); + setOutputDestination.call(this, pages[currentPage]); + return this; + }; + + /** + * @name insertPage + * @memberof jsPDF# + * + * @function + * @instance + * @param {Object} beforePage + * @returns {jsPDF} + */ + API.insertPage = function(beforePage) { + this.addPage(); + this.movePage(currentPage, beforePage); + return this; + }; + + /** + * @name movePage + * @memberof jsPDF# + * @function + * @instance + * @param {number} targetPage + * @param {number} beforePage + * @returns {jsPDF} + */ + API.movePage = function(targetPage, beforePage) { + var tmpPages, tmpPagesContext; + if (targetPage > beforePage) { + tmpPages = pages[targetPage]; + tmpPagesContext = pagesContext[targetPage]; + for (var i = targetPage; i > beforePage; i--) { + pages[i] = pages[i - 1]; + pagesContext[i] = pagesContext[i - 1]; + } + pages[beforePage] = tmpPages; + pagesContext[beforePage] = tmpPagesContext; + this.setPage(beforePage); + } else if (targetPage < beforePage) { + tmpPages = pages[targetPage]; + tmpPagesContext = pagesContext[targetPage]; + for (var j = targetPage; j < beforePage; j++) { + pages[j] = pages[j + 1]; + pagesContext[j] = pagesContext[j + 1]; + } + pages[beforePage] = tmpPages; + pagesContext[beforePage] = tmpPagesContext; + this.setPage(beforePage); + } + return this; + }; + + /** + * Deletes a page from the PDF. + * @name deletePage + * @memberof jsPDF# + * @function + * @param {number} targetPage + * @instance + * @returns {jsPDF} + */ + API.deletePage = function() { + _deletePage.apply(this, arguments); + return this; + }; + + /** + * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings. + * + * @function + * @instance + * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call. + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page. + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page. + * @param {Object} [options] - Collection of settings signaling how the text must be encoded. + * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify. + * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging + * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree. + * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise. + * @param {number} [options.charSpace=0] - The space between each letter. + * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size. + * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line. + * @param {Object} [options.flags] - Flags for to8bitStream. + * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text. + * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text. + * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split. + * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping. + * @param {boolean} [options.isInputVisual] - Option for the BidiEngine + * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine + * @param {boolean} [options.isInputRtl] - Option for the BidiEngine + * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine + * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine + * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y. + * + * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing + * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this + * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a + * DIFFERENT result. A matrix is only allowed in "advanced" API mode. + * @returns {jsPDF} + * @memberof jsPDF# + * @name text + */ + API.__private__.text = API.text = function(text, x, y, options, transform) { + /* + * Inserts something like this into PDF + * BT + * /F1 16 Tf % Font name + size + * 16 TL % How many units down for next line in multiline text + * 0 g % color + * 28.35 813.54 Td % position + * (line one) Tj + * T* (line two) Tj + * T* (line three) Tj + * ET + */ + options = options || {}; + var scope = options.scope || this; + var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale; + + // Pre-August-2012 the order of arguments was function(x, y, text, flags) + // in effort to make all calls have similar signature like + // function(data, coordinates... , miscellaneous) + // this method had its args flipped. + // code below allows backward compatibility with old arg order. + if ( + typeof text === "number" && + typeof x === "number" && + (typeof y === "string" || Array.isArray(y)) + ) { + var tmp = y; + y = x; + x = text; + text = tmp; + } + + var transformationMatrix; + + if (arguments[3] instanceof Matrix === false) { + flags = arguments[3]; + angle = arguments[4]; + align = arguments[5]; + + if (typeof flags !== "object" || flags === null) { + if (typeof angle === "string") { + align = angle; + angle = null; + } + if (typeof flags === "string") { + align = flags; + flags = null; + } + if (typeof flags === "number") { + angle = flags; + flags = null; + } + options = { + flags: flags, + angle: angle, + align: align + }; + } + } else { + advancedApiModeTrap( + "The transform parameter of text() with a Matrix value" + ); + transformationMatrix = transform; + } + + if (isNaN(x) || isNaN(y) || typeof text === "undefined" || text === null) { + throw new Error("Invalid arguments passed to jsPDF.text"); + } + + if (text.length === 0) { + return scope; + } + + var xtra = ""; + var isHex = false; + var lineHeight = + typeof options.lineHeightFactor === "number" + ? options.lineHeightFactor + : lineHeightFactor; + var scaleFactor = scope.internal.scaleFactor; + + function ESC(s) { + s = s.split("\t").join(Array(options.TabLen || 9).join(" ")); + return pdfEscape(s, flags); + } + + function transformTextToSpecialArray(text) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + var da = []; + var len = sa.length; + var curDa; + //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + while (len--) { + curDa = sa.shift(); + if (typeof curDa === "string") { + da.push(curDa); + } else { + if ( + Array.isArray(text) && + (curDa.length === 1 || + (curDa[1] === undefined && curDa[2] === undefined)) + ) { + da.push(curDa[0]); + } else { + da.push([curDa[0], curDa[1], curDa[2]]); + } + } + } + return da; + } + + function processTextByFunction(text, processingFunction) { + var result; + if (typeof text === "string") { + result = processingFunction(text)[0]; + } else if (Array.isArray(text)) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + var da = []; + var len = sa.length; + var curDa; + var tmpResult; + //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + while (len--) { + curDa = sa.shift(); + if (typeof curDa === "string") { + da.push(processingFunction(curDa)[0]); + } else if (Array.isArray(curDa) && typeof curDa[0] === "string") { + tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]); + da.push([tmpResult[0], tmpResult[1], tmpResult[2]]); + } + } + result = da; + } + return result; + } + + //Check if text is of type String + var textIsOfTypeString = false; + var tmpTextIsOfTypeString = true; + + if (typeof text === "string") { + textIsOfTypeString = true; + } else if (Array.isArray(text)) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + da = []; + var len = sa.length; + var curDa; + //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + while (len--) { + curDa = sa.shift(); + if ( + typeof curDa !== "string" || + (Array.isArray(curDa) && typeof curDa[0] !== "string") + ) { + tmpTextIsOfTypeString = false; + } + } + textIsOfTypeString = tmpTextIsOfTypeString; + } + if (textIsOfTypeString === false) { + throw new Error( + 'Type of text must be string or Array. "' + + text + + '" is not recognized.' + ); + } + + //If there are any newlines in text, we assume + //the user wanted to print multiple lines, so break the + //text up into an array. If the text is already an array, + //we assume the user knows what they are doing. + //Convert text into an array anyway to simplify + //later code. + + if (typeof text === "string") { + if (text.match(/[\r?\n]/)) { + text = text.split(/\r\n|\r|\n/g); + } else { + text = [text]; + } + } + + //baseline + var height = activeFontSize / scope.internal.scaleFactor; + var descent = height * (lineHeight - 1); + + switch (options.baseline) { + case "bottom": + y -= descent; + break; + case "top": + y += height - descent; + break; + case "hanging": + y += height - 2 * descent; + break; + case "middle": + y += height / 2 - descent; + break; + } + + //multiline + maxWidth = options.maxWidth || 0; + + if (maxWidth > 0) { + if (typeof text === "string") { + text = scope.splitTextToSize(text, maxWidth); + } else if (Object.prototype.toString.call(text) === "[object Array]") { + text = text.reduce(function(acc, textLine) { + return acc.concat(scope.splitTextToSize(textLine, maxWidth)); + }, []); + } + } + + //creating Payload-Object to make text byRef + payload = { + text: text, + x: x, + y: y, + options: options, + mutex: { + pdfEscape: pdfEscape, + activeFontKey: activeFontKey, + fonts: fonts, + activeFontSize: activeFontSize + } + }; + events.publish("preProcessText", payload); + + text = payload.text; + options = payload.options; + + //angle + angle = options.angle; + + if ( + transformationMatrix instanceof Matrix === false && + angle && + typeof angle === "number" + ) { + angle *= Math.PI / 180; + + if (options.rotationDirection === 0) { + angle = -angle; + } + + if (apiMode === ApiMode.ADVANCED) { + angle = -angle; + } + + var c = Math.cos(angle); + var s = Math.sin(angle); + transformationMatrix = new Matrix(c, s, -s, c, 0, 0); + } else if (angle && angle instanceof Matrix) { + transformationMatrix = angle; + } + + if (apiMode === ApiMode.ADVANCED && !transformationMatrix) { + transformationMatrix = identityMatrix; + } + + //charSpace + + charSpace = options.charSpace || activeCharSpace; + + if (typeof charSpace !== "undefined") { + xtra += hpf(scale(charSpace)) + " Tc\n"; + this.setCharSpace(this.getCharSpace() || 0); + } + + horizontalScale = options.horizontalScale; + if (typeof horizontalScale !== "undefined") { + xtra += hpf(horizontalScale * 100) + " Tz\n"; + } + + //lang + + var lang = options.lang; + + //renderingMode + var renderingMode = -1; + var parmRenderingMode = + typeof options.renderingMode !== "undefined" + ? options.renderingMode + : options.stroke; + var pageContext = scope.internal.getCurrentPageInfo().pageContext; + + switch (parmRenderingMode) { + case 0: + case false: + case "fill": + renderingMode = 0; + break; + case 1: + case true: + case "stroke": + renderingMode = 1; + break; + case 2: + case "fillThenStroke": + renderingMode = 2; + break; + case 3: + case "invisible": + renderingMode = 3; + break; + case 4: + case "fillAndAddForClipping": + renderingMode = 4; + break; + case 5: + case "strokeAndAddPathForClipping": + renderingMode = 5; + break; + case 6: + case "fillThenStrokeAndAddToPathForClipping": + renderingMode = 6; + break; + case 7: + case "addToPathForClipping": + renderingMode = 7; + break; + } + + var usedRenderingMode = + typeof pageContext.usedRenderingMode !== "undefined" + ? pageContext.usedRenderingMode + : -1; + + //if the coder wrote it explicitly to use a specific + //renderingMode, then use it + if (renderingMode !== -1) { + xtra += renderingMode + " Tr\n"; + //otherwise check if we used the rendering Mode already + //if so then set the rendering Mode... + } else if (usedRenderingMode !== -1) { + xtra += "0 Tr\n"; + } + + if (renderingMode !== -1) { + pageContext.usedRenderingMode = renderingMode; + } + + //align + align = options.align || "left"; + var leading = activeFontSize * lineHeight; + var pageWidth = scope.internal.pageSize.getWidth(); + var activeFont = fonts[activeFontKey]; + charSpace = options.charSpace || activeCharSpace; + maxWidth = options.maxWidth || 0; + + var lineWidths; + flags = Object.assign({ autoencode: true, noBOM: true }, options.flags); + + var wordSpacingPerLine = []; + + if (Object.prototype.toString.call(text) === "[object Array]") { + da = transformTextToSpecialArray(text); + var newY; + if (align !== "left") { + lineWidths = da.map(function(v) { + return ( + (scope.getStringUnitWidth(v, { + font: activeFont, + charSpace: charSpace, + fontSize: activeFontSize, + doKerning: false + }) * + activeFontSize) / + scaleFactor + ); + }); + } + //The first line uses the "main" Td setting, + //and the subsequent lines are offset by the + //previous line's x coordinate. + var prevWidth = 0; + var newX; + if (align === "right") { + //The passed in x coordinate defines the + //rightmost point of the text. + x -= lineWidths[0]; + text = []; + len = da.length; + for (var i = 0; i < len; i++) { + if (i === 0) { + newX = getHorizontalCoordinate(x); + newY = getVerticalCoordinate(y); + } else { + newX = scale(prevWidth - lineWidths[i]); + newY = -leading; + } + text.push([da[i], newX, newY]); + prevWidth = lineWidths[i]; + } + } else if (align === "center") { + //The passed in x coordinate defines + //the center point. + x -= lineWidths[0] / 2; + text = []; + len = da.length; + for (var j = 0; j < len; j++) { + if (j === 0) { + newX = getHorizontalCoordinate(x); + newY = getVerticalCoordinate(y); + } else { + newX = scale((prevWidth - lineWidths[j]) / 2); + newY = -leading; + } + text.push([da[j], newX, newY]); + prevWidth = lineWidths[j]; + } + } else if (align === "left") { + text = []; + len = da.length; + for (var h = 0; h < len; h++) { + text.push(da[h]); + } + } else if (align === "justify") { + text = []; + len = da.length; + maxWidth = maxWidth !== 0 ? maxWidth : pageWidth; + + for (var l = 0; l < len; l++) { + newY = l === 0 ? getVerticalCoordinate(y) : -leading; + newX = l === 0 ? getHorizontalCoordinate(x) : 0; + if (l < len - 1) { + wordSpacingPerLine.push( + hpf( + scale( + (maxWidth - lineWidths[l]) / (da[l].split(" ").length - 1) + ) + ) + ); + } else { + wordSpacingPerLine.push(0); + } + text.push([da[l], newX, newY]); + } + } else { + throw new Error( + 'Unrecognized alignment option, use "left", "center", "right" or "justify".' + ); + } + } + + //R2L + var doReversing = typeof options.R2L === "boolean" ? options.R2L : R2L; + if (doReversing === true) { + text = processTextByFunction(text, function(text, posX, posY) { + return [ + text + .split("") + .reverse() + .join(""), + posX, + posY + ]; + }); + } + + //creating Payload-Object to make text byRef + payload = { + text: text, + x: x, + y: y, + options: options, + mutex: { + pdfEscape: pdfEscape, + activeFontKey: activeFontKey, + fonts: fonts, + activeFontSize: activeFontSize + } + }; + events.publish("postProcessText", payload); + + text = payload.text; + isHex = payload.mutex.isHex || false; + + //Escaping + var activeFontEncoding = fonts[activeFontKey].encoding; + + if ( + activeFontEncoding === "WinAnsiEncoding" || + activeFontEncoding === "StandardEncoding" + ) { + text = processTextByFunction(text, function(text, posX, posY) { + return [ESC(text), posX, posY]; + }); + } + + da = transformTextToSpecialArray(text); + + text = []; + var STRING = 0; + var ARRAY = 1; + var variant = Array.isArray(da[0]) ? ARRAY : STRING; + var posX; + var posY; + var content; + var wordSpacing = ""; + + var generatePosition = function( + parmPosX, + parmPosY, + parmTransformationMatrix + ) { + var position = ""; + if (parmTransformationMatrix instanceof Matrix) { + // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y + // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied + // in the coordinate system established by this matrix + if (typeof options.angle === "number") { + parmTransformationMatrix = matrixMult( + parmTransformationMatrix, + new Matrix(1, 0, 0, 1, parmPosX, parmPosY) + ); + } else { + parmTransformationMatrix = matrixMult( + new Matrix(1, 0, 0, 1, parmPosX, parmPosY), + parmTransformationMatrix + ); + } + + if (apiMode === ApiMode.ADVANCED) { + parmTransformationMatrix = matrixMult( + new Matrix(1, 0, 0, -1, 0, 0), + parmTransformationMatrix + ); + } + + position = parmTransformationMatrix.join(" ") + " Tm\n"; + } else { + position = hpf(parmPosX) + " " + hpf(parmPosY) + " Td\n"; + } + return position; + }; + + for (var lineIndex = 0; lineIndex < da.length; lineIndex++) { + wordSpacing = ""; + + switch (variant) { + case ARRAY: + content = + (isHex ? "<" : "(") + da[lineIndex][0] + (isHex ? ">" : ")"); + posX = parseFloat(da[lineIndex][1]); + posY = parseFloat(da[lineIndex][2]); + break; + case STRING: + content = (isHex ? "<" : "(") + da[lineIndex] + (isHex ? ">" : ")"); + posX = getHorizontalCoordinate(x); + posY = getVerticalCoordinate(y); + break; + } + + if ( + typeof wordSpacingPerLine !== "undefined" && + typeof wordSpacingPerLine[lineIndex] !== "undefined" + ) { + wordSpacing = wordSpacingPerLine[lineIndex] + " Tw\n"; + } + + if (lineIndex === 0) { + text.push( + wordSpacing + + generatePosition(posX, posY, transformationMatrix) + + content + ); + } else if (variant === STRING) { + text.push(wordSpacing + content); + } else if (variant === ARRAY) { + text.push( + wordSpacing + + generatePosition(posX, posY, transformationMatrix) + + content + ); + } + } + + text = variant === STRING ? text.join(" Tj\nT* ") : text.join(" Tj\n"); + text += " Tj\n"; + + var result = "BT\n/"; + result += activeFontKey + " " + activeFontSize + " Tf\n"; // font face, style, size + result += hpf(activeFontSize * lineHeight) + " TL\n"; // line spacing + result += textColor + "\n"; + result += xtra; + result += text; + result += "ET"; + + out(result); + usedFonts[activeFontKey] = true; + return scope; + }; + + // PDF supports these path painting and clip path operators: + // + // S - stroke + // s - close/stroke + // f (F) - fill non-zero + // f* - fill evenodd + // B - fill stroke nonzero + // B* - fill stroke evenodd + // b - close fill stroke nonzero + // b* - close fill stroke evenodd + // n - nothing (consume path) + // W - clip nonzero + // W* - clip evenodd + // + // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close() + // method. + /** + * + * @name clip + * @function + * @instance + * @param {string} rule Only possible value is 'evenodd' + * @returns {jsPDF} + * @memberof jsPDF# + * @description All .clip() after calling drawing ops with a style argument of null. + */ + var clip = (API.__private__.clip = API.clip = function(rule) { + // Call .clip() after calling drawing ops with a style argument of null + // W is the PDF clipping op + if ("evenodd" === rule) { + out("W*"); + } else { + out("W"); + } + return this; + }); + + /** + * @name clipEvenOdd + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note + * that this will NOT consume the current path. In order to only use this path for clipping call + * {@link API.discardPath} afterwards. + */ + API.clipEvenOdd = function() { + return clip("evenodd"); + }; + + /** + * Consumes the current path without any effect. Mainly used in combination with {@link clip} or + * {@link clipEvenOdd}. The PDF "n" operator. + * @name discardPath + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.__private__.discardPath = API.discardPath = function() { + out("n"); + return this; + }; + + var isValidStyle = (API.__private__.isValidStyle = function(style) { + var validStyleVariants = [ + undefined, + null, + "S", + "D", + "F", + "DF", + "FD", + "f", + "f*", + "B", + "B*", + "n" + ]; + var result = false; + if (validStyleVariants.indexOf(style) !== -1) { + result = true; + } + return result; + }); + + API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function( + operator + ) { + if (isValidStyle(operator)) { + defaultPathOperation = operator; + } + return this; + }; + + var getStyle = (API.__private__.getStyle = API.getStyle = function(style) { + // see path-painting operators in PDF spec + var op = defaultPathOperation; // stroke + + switch (style) { + case "D": + case "S": + op = "S"; // stroke + break; + case "F": + op = "f"; // fill + break; + case "FD": + case "DF": + op = "B"; + break; + case "f": + case "f*": + case "B": + case "B*": + /* + Allow direct use of these PDF path-painting operators: + - f fill using nonzero winding number rule + - f* fill using even-odd rule + - B fill then stroke with fill using non-zero winding number rule + - B* fill then stroke with fill using even-odd rule + */ + op = style; + break; + } + return op; + }); + + /** + * Close the current path. The PDF "h" operator. + * @name close + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + var close = (API.close = function() { + out("h"); + return this; + }); + + /** + * Stroke the path. The PDF "S" operator. + * @name stroke + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.stroke = function() { + out("S"); + return this; + }; + + /** + * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled + * with this pattern, otherwise with the current fill color. Equivalent to the PDF "f" operator. + * @name fill + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be filled with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.fill = function(pattern) { + fillWithOptionalPattern("f", pattern); + return this; + }; + + /** + * Fill the current path using the even-odd rule. The PDF f* operator. + * @see API.fill + * @name fillEvenOdd + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be filled with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.fillEvenOdd = function(pattern) { + fillWithOptionalPattern("f*", pattern); + return this; + }; + + /** + * Fill using the nonzero winding number rule and then stroke the current Path. The PDF "B" operator. + * @see API.fill + * @name fillStroke + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be stroked with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.fillStroke = function(pattern) { + fillWithOptionalPattern("B", pattern); + return this; + }; + + /** + * Fill using the even-odd rule and then stroke the current Path. The PDF "B" operator. + * @see API.fill + * @name fillStrokeEvenOdd + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.fillStrokeEvenOdd = function(pattern) { + fillWithOptionalPattern("B*", pattern); + return this; + }; + + var fillWithOptionalPattern = function(style, pattern) { + if (typeof pattern === "object") { + fillWithPattern(pattern, style); + } else { + out(style); + } + }; + + var putStyle = function(style) { + if ( + style === null || + (apiMode === ApiMode.ADVANCED && style === undefined) + ) { + return; + } + + style = getStyle(style); + + // stroking / filling / both the path + out(style); + }; + + function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) { + var clone = new TilingPattern( + boundingBox || this.boundingBox, + xStep || this.xStep, + yStep || this.yStep, + this.gState, + matrix || this.matrix + ); + clone.stream = this.stream; + var key = patternKey + "$$" + this.cloneIndex++ + "$$"; + addPattern(key, clone); + return clone; + } + + var fillWithPattern = function(patternData, style) { + var patternId = patternMap[patternData.key]; + var pattern = patterns[patternId]; + + if (pattern instanceof ShadingPattern) { + out("q"); + + out(clipRuleFromStyle(style)); + + if (pattern.gState) { + API.setGState(pattern.gState); + } + out(patternData.matrix.toString() + " cm"); + out("/" + patternId + " sh"); + out("Q"); + } else if (pattern instanceof TilingPattern) { + // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation, + // so we must flip them + var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight()); + + if (patternData.matrix) { + matrix = matrix.multiply(patternData.matrix || identityMatrix); + // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances + // for each use + patternId = cloneTilingPattern.call( + pattern, + patternData.key, + patternData.boundingBox, + patternData.xStep, + patternData.yStep, + matrix + ).id; + } + + out("q"); + out("/Pattern cs"); + out("/" + patternId + " scn"); + + if (pattern.gState) { + API.setGState(pattern.gState); + } + + out(style); + out("Q"); + } + }; + + var clipRuleFromStyle = function(style) { + switch (style) { + case "f": + case "F": + return "W n"; + case "f*": + return "W* n"; + case "B": + return "W S"; + case "B*": + return "W* S"; + + // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern + // and "n"/"S" as style would still fill/fill and stroke the path) + case "S": + return "W S"; + case "n": + return "W n"; + } + }; + + /** + * Begin a new subpath by moving the current point to coordinates (x, y). The PDF "m" operator. + * @param {number} x + * @param {number} y + * @name moveTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + var moveTo = (API.moveTo = function(x, y) { + out(hpf(scale(x)) + " " + hpf(transformScaleY(y)) + " m"); + return this; + }); + + /** + * Append a straight line segment from the current point to the point (x, y). The PDF "l" operator. + * @param {number} x + * @param {number} y + * @memberof jsPDF# + * @name lineTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + var lineTo = (API.lineTo = function(x, y) { + out(hpf(scale(x)) + " " + hpf(transformScaleY(y)) + " l"); + return this; + }); + + /** + * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point + * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3). + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @memberof jsPDF# + * @name curveTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) { + out( + [ + hpf(scale(x1)), + hpf(transformScaleY(y1)), + hpf(scale(x2)), + hpf(transformScaleY(y2)), + hpf(scale(x3)), + hpf(transformScaleY(y3)), + "c" + ].join(" ") + ); + return this; + }); + + /** + * Draw a line on the current page. + * + * @name line + * @function + * @instance + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S' + * @returns {jsPDF} + * @memberof jsPDF# + */ + API.__private__.line = API.line = function(x1, y1, x2, y2, style) { + if ( + isNaN(x1) || + isNaN(y1) || + isNaN(x2) || + isNaN(y2) || + !isValidStyle(style) + ) { + throw new Error("Invalid arguments passed to jsPDF.line"); + } + if (apiMode === ApiMode.COMPAT) { + return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || "S"); + } else { + return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke(); + } + }; + + /** + * @typedef {Object} PatternData + * {Matrix|undefined} matrix + * {Number|undefined} xStep + * {Number|undefined} yStep + * {Array.|undefined} boundingBox + */ + + /** + * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates. + * All data points in `lines` are relative to last line origin. + * `x`, `y` become x1,y1 for first line / curve in the set. + * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point. + * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1. + * + * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line + * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves). + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction. + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name lines + */ + API.__private__.lines = API.lines = function( + lines, + x, + y, + scale, + style, + closed + ) { + var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp; + + // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style) + // in effort to make all calls have similar signature like + // function(content, coordinateX, coordinateY , miscellaneous) + // this method had its args flipped. + // code below allows backward compatibility with old arg order. + if (typeof lines === "number") { + tmp = y; + y = x; + x = lines; + lines = tmp; + } + + scale = scale || [1, 1]; + closed = closed || false; + + if ( + isNaN(x) || + isNaN(y) || + !Array.isArray(lines) || + !Array.isArray(scale) || + !isValidStyle(style) || + typeof closed !== "boolean" + ) { + throw new Error("Invalid arguments passed to jsPDF.lines"); + } + + // starting point + moveTo(x, y); + + scalex = scale[0]; + scaley = scale[1]; + l = lines.length; + //, x2, y2 // bezier only. In page default measurement "units", *after* scaling + //, x3, y3 // bezier only. In page default measurement "units", *after* scaling + // ending point for all, lines and bezier. . In page default measurement "units", *after* scaling + x4 = x; // last / ending point = starting point for first item. + y4 = y; // last / ending point = starting point for first item. + + for (i = 0; i < l; i++) { + leg = lines[i]; + if (leg.length === 2) { + // simple line + x4 = leg[0] * scalex + x4; // here last x4 was prior ending point + y4 = leg[1] * scaley + y4; // here last y4 was prior ending point + lineTo(x4, y4); + } else { + // bezier curve + x2 = leg[0] * scalex + x4; // here last x4 is prior ending point + y2 = leg[1] * scaley + y4; // here last y4 is prior ending point + x3 = leg[2] * scalex + x4; // here last x4 is prior ending point + y3 = leg[3] * scaley + y4; // here last y4 is prior ending point + x4 = leg[4] * scalex + x4; // here last x4 was prior ending point + y4 = leg[5] * scaley + y4; // here last y4 was prior ending point + curveTo(x2, y2, x3, y3, x4, y4); + } + } + + if (closed) { + close(); + } + + putStyle(style); + return this; + }; + + /** + * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative. + * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of "m" (move to), "l" (line to) + * "c" (cubic bezier curve) and "h" (close (sub)path)). c is an array of coordinates. "m" and "l" expect two, "c" + * six and "h" an empty array (or undefined). + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name path + */ + API.path = function(lines) { + for (var i = 0; i < lines.length; i++) { + var leg = lines[i]; + var coords = leg.c; + switch (leg.op) { + case "m": + moveTo(coords[0], coords[1]); + break; + case "l": + lineTo(coords[0], coords[1]); + break; + case "c": + curveTo.apply(this, coords); + break; + case "h": + close(); + break; + } + } + + return this; + }; + + /** + * Adds a rectangle to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} w Width (in units declared at inception of PDF document) + * @param {number} h Height (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name rect + */ + API.__private__.rect = API.rect = function(x, y, w, h, style) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.rect"); + } + if (apiMode === ApiMode.COMPAT) { + h = -h; + } + + out( + [ + hpf(scale(x)), + hpf(transformScaleY(y)), + hpf(scale(w)), + hpf(scale(h)), + "re" + ].join(" ") + ); + + putStyle(style); + return this; + }; + + /** + * Adds a triangle to PDF. + * + * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name triangle + */ + API.__private__.triangle = API.triangle = function( + x1, + y1, + x2, + y2, + x3, + y3, + style + ) { + if ( + isNaN(x1) || + isNaN(y1) || + isNaN(x2) || + isNaN(y2) || + isNaN(x3) || + isNaN(y3) || + !isValidStyle(style) + ) { + throw new Error("Invalid arguments passed to jsPDF.triangle"); + } + this.lines( + [ + [x2 - x1, y2 - y1], // vector to point 2 + [x3 - x2, y3 - y2], // vector to point 3 + [x1 - x3, y1 - y3] // closing vector back to point 1 + ], + x1, + y1, // start of path + [1, 1], + style, + true + ); + return this; + }; + + /** + * Adds a rectangle with rounded corners to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} w Width (in units declared at inception of PDF document) + * @param {number} h Height (in units declared at inception of PDF document) + * @param {number} rx Radius along x axis (in units declared at inception of PDF document) + * @param {number} ry Radius along y axis (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name roundedRect + */ + API.__private__.roundedRect = API.roundedRect = function( + x, + y, + w, + h, + rx, + ry, + style + ) { + if ( + isNaN(x) || + isNaN(y) || + isNaN(w) || + isNaN(h) || + isNaN(rx) || + isNaN(ry) || + !isValidStyle(style) + ) { + throw new Error("Invalid arguments passed to jsPDF.roundedRect"); + } + var MyArc = (4 / 3) * (Math.SQRT2 - 1); + + rx = Math.min(rx, w * 0.5); + ry = Math.min(ry, h * 0.5); + + this.lines( + [ + [w - 2 * rx, 0], + [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry], + [0, h - 2 * ry], + [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry], + [-w + 2 * rx, 0], + [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry], + [0, -h + 2 * ry], + [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry] + ], + x + rx, + y, // start of path + [1, 1], + style, + true + ); + return this; + }; + + /** + * Adds an ellipse to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} rx Radius along x axis (in units declared at inception of PDF document) + * @param {number} ry Radius along y axis (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name ellipse + */ + API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) { + if ( + isNaN(x) || + isNaN(y) || + isNaN(rx) || + isNaN(ry) || + !isValidStyle(style) + ) { + throw new Error("Invalid arguments passed to jsPDF.ellipse"); + } + var lx = (4 / 3) * (Math.SQRT2 - 1) * rx, + ly = (4 / 3) * (Math.SQRT2 - 1) * ry; + + moveTo(x + rx, y); + curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry); + curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y); + curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry); + curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y); + + putStyle(style); + return this; + }; + + /** + * Adds an circle to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} r Radius (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name circle + */ + API.__private__.circle = API.circle = function(x, y, r, style) { + if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.circle"); + } + return this.ellipse(x, y, r, r, style); + }; + + /** + * Sets text font face, variant for upcoming text elements. + * See output of jsPDF.getFontList() for possible font names, styles. + * + * @param {string} fontName Font name or family. Example: "times". + * @param {string} fontStyle Font style or variant. Example: "italic". + * @param {number | string} fontWeight Weight of the Font. Example: "normal" | 400 + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFont + */ + API.setFont = function(fontName, fontStyle, fontWeight) { + if (fontWeight) { + fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight); + } + activeFontKey = getFont(fontName, fontStyle, { + disableWarning: false + }); + return this; + }; + + /** + * Gets text font face, variant for upcoming text elements. + * + * @function + * @instance + * @returns {Object} + * @memberof jsPDF# + * @name getFont + */ + var getFontEntry = (API.__private__.getFont = API.getFont = function() { + return fonts[getFont.apply(API, arguments)]; + }); + + /** + * Returns an object - a tree of fontName to fontStyle relationships available to + * active PDF document. + * + * @public + * @function + * @instance + * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... } + * @memberof jsPDF# + * @name getFontList + */ + API.__private__.getFontList = API.getFontList = function() { + var list = {}, + fontName, + fontStyle; + + for (fontName in fontmap) { + if (fontmap.hasOwnProperty(fontName)) { + list[fontName] = []; + for (fontStyle in fontmap[fontName]) { + if (fontmap[fontName].hasOwnProperty(fontStyle)) { + list[fontName].push(fontStyle); + } + } + } + } + return list; + }; + + /** + * Add a custom font to the current instance. + * + * @param {string} postScriptName PDF specification full name for the font. + * @param {string} id PDF-document-instance-specific label assinged to the font. + * @param {string} fontStyle Style of the Font. + * @param {number | string} fontWeight Weight of the Font. + * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping. + * @function + * @instance + * @memberof jsPDF# + * @name addFont + * @returns {string} fontId + */ + API.addFont = function( + postScriptName, + fontName, + fontStyle, + fontWeight, + encoding + ) { + var encodingOptions = [ + "StandardEncoding", + "MacRomanEncoding", + "Identity-H", + "WinAnsiEncoding" + ]; + if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) { + //IE 11 fix + encoding = arguments[3]; + } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) { + fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight); + } + encoding = encoding || "Identity-H"; + return addFont.call(this, postScriptName, fontName, fontStyle, encoding); + }; + + var lineWidth = options.lineWidth || 0.200025; // 2mm + /** + * Gets the line width, default: 0.200025. + * + * @function + * @instance + * @returns {number} lineWidth + * @memberof jsPDF# + * @name getLineWidth + */ + var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() { + return lineWidth; + }); + + /** + * Sets line width for upcoming lines. + * + * @param {number} width Line width (in units declared at inception of PDF document). + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineWidth + */ + var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function( + width + ) { + lineWidth = width; + out(hpf(scale(width)) + " w"); + return this; + }); + + /** + * Sets the dash pattern for upcoming lines. + * + * To reset the settings simply call the method without any parameters. + * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the + * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered + * to be as long as the dashes. An empty array means solid, unbroken lines. + * @param {number} dashPhase The phase lines start with. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineDashPattern + */ + API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function( + dashArray, + dashPhase + ) { + dashArray = dashArray || []; + dashPhase = dashPhase || 0; + + if (isNaN(dashPhase) || !Array.isArray(dashArray)) { + throw new Error("Invalid arguments passed to jsPDF.setLineDash"); + } + + dashArray = dashArray + .map(function(x) { + return hpf(scale(x)); + }) + .join(" "); + dashPhase = hpf(scale(dashPhase)); + + out("[" + dashArray + "] " + dashPhase + " d"); + return this; + }; + + var lineHeightFactor; + + var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() { + return activeFontSize * lineHeightFactor; + }); + + API.__private__.getLineHeight = API.getLineHeight = function() { + return activeFontSize * lineHeightFactor; + }; + + /** + * Sets the LineHeightFactor of proportion. + * + * @param {number} value LineHeightFactor value. Default: 1.15. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineHeightFactor + */ + var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function( + value + ) { + value = value || 1.15; + if (typeof value === "number") { + lineHeightFactor = value; + } + return this; + }); + + /** + * Gets the LineHeightFactor, default: 1.15. + * + * @function + * @instance + * @returns {number} lineHeightFactor + * @memberof jsPDF# + * @name getLineHeightFactor + */ + var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() { + return lineHeightFactor; + }); + + setLineHeightFactor(options.lineHeight); + + var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function( + value + ) { + return scale(value); + }); + + var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function( + value + ) { + if (apiMode === ApiMode.ADVANCED) { + return value; + } else { + var pageHeight = + pagesContext[currentPage].mediaBox.topRightY - + pagesContext[currentPage].mediaBox.bottomLeftY; + return pageHeight - scale(value); + } + }); + + var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function( + value + ) { + return hpf(getHorizontalCoordinate(value)); + }); + + var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function( + value + ) { + return hpf(getVerticalCoordinate(value)); + }); + + var strokeColor = options.strokeColor || "0 G"; + + /** + * Gets the stroke color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getDrawColor + */ + API.__private__.getStrokeColor = API.getDrawColor = function() { + return decodeColorString(strokeColor); + }; + + /** + * Sets the stroke color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setDrawColor + */ + API.__private__.setStrokeColor = API.setDrawColor = function( + ch1, + ch2, + ch3, + ch4 + ) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "draw", + precision: 2 + }; + + strokeColor = encodeColorString(options); + out(strokeColor); + return this; + }; + + var fillColor = options.fillColor || "0 g"; + + /** + * Gets the fill color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getFillColor + */ + API.__private__.getFillColor = API.getFillColor = function() { + return decodeColorString(fillColor); + }; + + /** + * Sets the fill color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFillColor + */ + API.__private__.setFillColor = API.setFillColor = function( + ch1, + ch2, + ch3, + ch4 + ) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "fill", + precision: 2 + }; + + fillColor = encodeColorString(options); + out(fillColor); + return this; + }; + + var textColor = options.textColor || "0 g"; + /** + * Gets the text color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getTextColor + */ + var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() { + return decodeColorString(textColor); + }); + /** + * Sets the text color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setTextColor + */ + API.__private__.setTextColor = API.setTextColor = function( + ch1, + ch2, + ch3, + ch4 + ) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "text", + precision: 3 + }; + textColor = encodeColorString(options); + + return this; + }; + + var activeCharSpace = options.charSpace; + + /** + * Get global value of CharSpace. + * + * @function + * @instance + * @returns {number} charSpace + * @memberof jsPDF# + * @name getCharSpace + */ + var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() { + return parseFloat(activeCharSpace || 0); + }); + + /** + * Set global value of CharSpace. + * + * @param {number} charSpace + * @function + * @instance + * @returns {jsPDF} jsPDF-instance + * @memberof jsPDF# + * @name setCharSpace + */ + API.__private__.setCharSpace = API.setCharSpace = function(charSpace) { + if (isNaN(charSpace)) { + throw new Error("Invalid argument passed to jsPDF.setCharSpace"); + } + activeCharSpace = charSpace; + return this; + }; + + var lineCapID = 0; + /** + * Is an Object providing a mapping from human-readable to + * integer flag values designating the varieties of line cap + * and join styles. + * + * @memberof jsPDF# + * @name CapJoinStyles + */ + API.CapJoinStyles = { + 0: 0, + butt: 0, + but: 0, + miter: 0, + 1: 1, + round: 1, + rounded: 1, + circle: 1, + 2: 2, + projecting: 2, + project: 2, + square: 2, + bevel: 2 + }; + + /** + * Sets the line cap styles. + * See {jsPDF.CapJoinStyles} for variants. + * + * @param {String|Number} style A string or number identifying the type of line cap. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineCap + */ + API.__private__.setLineCap = API.setLineCap = function(style) { + var id = API.CapJoinStyles[style]; + if (id === undefined) { + throw new Error( + "Line cap style of '" + + style + + "' is not recognized. See or extend .CapJoinStyles property for valid styles" + ); + } + lineCapID = id; + out(id + " J"); + + return this; + }; + + var lineJoinID = 0; + /** + * Sets the line join styles. + * See {jsPDF.CapJoinStyles} for variants. + * + * @param {String|Number} style A string or number identifying the type of line join. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineJoin + */ + API.__private__.setLineJoin = API.setLineJoin = function(style) { + var id = API.CapJoinStyles[style]; + if (id === undefined) { + throw new Error( + "Line join style of '" + + style + + "' is not recognized. See or extend .CapJoinStyles property for valid styles" + ); + } + lineJoinID = id; + out(id + " j"); + + return this; + }; + /** + * Sets the miterLimit property, which effects the maximum miter length. + * + * @param {number} length The length of the miter + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineMiterLimit + */ + API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function( + length + ) { + length = length || 0; + if (isNaN(length)) { + throw new Error("Invalid argument passed to jsPDF.setLineMiterLimit"); + } + out(hpf(scale(length)) + " M"); + + return this; + }; + + /** + * An object representing a pdf graphics state. + * @class GState + */ + + /** + * + * @param parameters A parameter object that contains all properties this graphics state wants to set. + * Supported are: opacity, stroke-opacity + * @constructor + */ + API.GState = GState; + + /** + * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}. + * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState + * it will be added before use. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name setGState + */ + API.setGState = function(gState) { + if (typeof gState === "string") { + gState = gStates[gStatesMap[gState]]; + } else { + gState = addGState(null, gState); + } + + if (!gState.equals(activeGState)) { + out("/" + gState.id + " gs"); + activeGState = gState; + } + }; + + /** + * Adds a new Graphics State. Duplicates are automatically eliminated. + * @param {String} key Might also be null, if no later reference to this gState is needed + * @param {Object} gState The gState object + */ + var addGState = function(key, gState) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (key && gStatesMap[key]) return; + var duplicate = false; + for (var s in gStates) { + if (gStates.hasOwnProperty(s)) { + if (gStates[s].equals(gState)) { + duplicate = true; + break; + } + } + } + + if (duplicate) { + gState = gStates[s]; + } else { + var gStateKey = "GS" + (Object.keys(gStates).length + 1).toString(10); + gStates[gStateKey] = gState; + gState.id = gStateKey; + } + + // several user keys may point to the same GState object + key && (gStatesMap[key] = gState.id); + + events.publish("addGState", gState); + + return gState; + }; + + /** + * Adds a new {@link GState} for later use. See {@link setGState}. + * @param {String} key + * @param {GState} gState + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name addGState + */ + API.addGState = function(key, gState) { + addGState(key, gState); + return this; + }; + + /** + * Saves the current graphics state ("pushes it on the stack"). It can be restored by {@link restoreGraphicsState} + * later. Here, the general pdf graphics state is meant, also including the current transformation matrix, + * fill and stroke colors etc. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name saveGraphicsState + */ + API.saveGraphicsState = function() { + out("q"); + // as we cannot set font key and size independently we must keep track of both + fontStateStack.push({ + key: activeFontKey, + size: activeFontSize, + color: textColor + }); + return this; + }; + + /** + * Restores a previously saved graphics state saved by {@link saveGraphicsState} ("pops the stack"). + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name restoreGraphicsState + */ + API.restoreGraphicsState = function() { + out("Q"); + + // restore previous font state + var fontState = fontStateStack.pop(); + activeFontKey = fontState.key; + activeFontSize = fontState.size; + textColor = fontState.color; + + activeGState = null; + + return this; + }; + + /** + * Appends this matrix to the left of all previously applied matrices. + * + * @param {Matrix} matrix + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name setCurrentTransformationMatrix + */ + API.setCurrentTransformationMatrix = function(matrix) { + out(matrix.toString() + " cm"); + return this; + }; + + /** + * Inserts a debug comment into the generated pdf. + * @function + * @instance + * @param {String} text + * @returns {jsPDF} + * @memberof jsPDF# + * @name comment + */ + API.comment = function(text) { + out("#" + text); + return this; + }; + + /** + * Point + */ + var Point = function(x, y) { + var _x = x || 0; + Object.defineProperty(this, "x", { + enumerable: true, + get: function() { + return _x; + }, + set: function(value) { + if (!isNaN(value)) { + _x = parseFloat(value); + } + } + }); + + var _y = y || 0; + Object.defineProperty(this, "y", { + enumerable: true, + get: function() { + return _y; + }, + set: function(value) { + if (!isNaN(value)) { + _y = parseFloat(value); + } + } + }); + + var _type = "pt"; + Object.defineProperty(this, "type", { + enumerable: true, + get: function() { + return _type; + }, + set: function(value) { + _type = value.toString(); + } + }); + return this; + }; + + /** + * Rectangle + */ + var Rectangle = function(x, y, w, h) { + Point.call(this, x, y); + this.type = "rect"; + + var _w = w || 0; + Object.defineProperty(this, "w", { + enumerable: true, + get: function() { + return _w; + }, + set: function(value) { + if (!isNaN(value)) { + _w = parseFloat(value); + } + } + }); + + var _h = h || 0; + Object.defineProperty(this, "h", { + enumerable: true, + get: function() { + return _h; + }, + set: function(value) { + if (!isNaN(value)) { + _h = parseFloat(value); + } + } + }); + + return this; + }; + + /** + * FormObject/RenderTarget + */ + + var RenderTarget = function() { + this.page = page; + this.currentPage = currentPage; + this.pages = pages.slice(0); + this.pagesContext = pagesContext.slice(0); + this.x = pageX; + this.y = pageY; + this.matrix = pageMatrix; + this.width = getPageWidth(currentPage); + this.height = getPageHeight(currentPage); + this.outputDestination = outputDestination; + + this.id = ""; // set by endFormObject() + this.objectNumber = -1; // will be set by putXObject() + }; + + RenderTarget.prototype.restore = function() { + page = this.page; + currentPage = this.currentPage; + pagesContext = this.pagesContext; + pages = this.pages; + pageX = this.x; + pageY = this.y; + pageMatrix = this.matrix; + setPageWidth(currentPage, this.width); + setPageHeight(currentPage, this.height); + outputDestination = this.outputDestination; + }; + + var beginNewRenderTarget = function(x, y, width, height, matrix) { + // save current state + renderTargetStack.push(new RenderTarget()); + + // clear pages + page = currentPage = 0; + pages = []; + pageX = x; + pageY = y; + + pageMatrix = matrix; + + beginPage([width, height]); + }; + + var endFormObject = function(key) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (renderTargetMap[key]) { + renderTargetStack.pop().restore(); + return; + } + + // save the created xObject + var newXObject = new RenderTarget(); + + var xObjectId = "Xo" + (Object.keys(renderTargets).length + 1).toString(10); + newXObject.id = xObjectId; + + renderTargetMap[key] = xObjectId; + renderTargets[xObjectId] = newXObject; + + events.publish("addFormObject", newXObject); + + // restore state from stack + renderTargetStack.pop().restore(); + }; + + /** + * Starts a new pdf form object, which means that all consequent draw calls target a new independent object + * until {@link endFormObject} is called. The created object can be referenced and drawn later using + * {@link doFormObject}. Nested form objects are possible. + * x, y, width, height set the bounding box that is used to clip the content. + * + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to + * the parent's. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name beginFormObject + */ + API.beginFormObject = function(x, y, width, height, matrix) { + // The user can set the output target to a new form object. Nested form objects are possible. + // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as + // the PDF-Spec states: + // "In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which + // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions, + // form XObjects may be independent of the content streams in which they appear, and this is strongly + // recommended although not required" + beginNewRenderTarget(x, y, width, height, matrix); + return this; + }; + + /** + * Completes and saves the form object. + * @param {String} key The key by which this form object can be referenced. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name endFormObject + */ + API.endFormObject = function(key) { + endFormObject(key); + return this; + }; + + /** + * Draws the specified form object by referencing to the respective pdf XObject created with + * {@link API.beginFormObject} and {@link endFormObject}. + * The location is determined by matrix. + * + * @param {String} key The key to the form object. + * @param {Matrix} matrix The matrix applied before drawing the form object. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name doFormObject + */ + API.doFormObject = function(key, matrix) { + var xObject = renderTargets[renderTargetMap[key]]; + out("q"); + out(matrix.toString() + " cm"); + out("/" + xObject.id + " Do"); + out("Q"); + return this; + }; + + /** + * Returns the form object specified by key. + * @param key {String} + * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}} + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name getFormObject + */ + API.getFormObject = function(key) { + var xObject = renderTargets[renderTargetMap[key]]; + return { + x: xObject.x, + y: xObject.y, + width: xObject.width, + height: xObject.height, + matrix: xObject.matrix + }; + }; + + /** + * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf'). + * Uses FileSaver.js-method saveAs. + * + * @memberof jsPDF# + * @name save + * @function + * @instance + * @param {string} filename The filename including extension. + * @param {Object} options An Object with additional options, possible options: 'returnPromise'. + * @returns {jsPDF|Promise} jsPDF-instance */ + API.save = function(filename, options) { + filename = filename || "generated.pdf"; + + options = options || {}; + options.returnPromise = options.returnPromise || false; + + + // eslint-disable-next-line no-unreachable + var fs = require("fs"); + var buffer = Buffer.from(getArrayBuffer(buildDocument())); + if (options.returnPromise === false) { + fs.writeFileSync(filename, buffer); + } else { + return new Promise(function(resolve, reject) { + fs.writeFile(filename, buffer, function(err) { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + } + }; + + // applying plugins (more methods) ON TOP of built-in API. + // this is intentional as we allow plugins to override + // built-ins + for (var plugin in jsPDF.API) { + if (jsPDF.API.hasOwnProperty(plugin)) { + if (plugin === "events" && jsPDF.API.events.length) { + (function(events, newEvents) { + // jsPDF.API.events is a JS Array of Arrays + // where each Array is a pair of event name, handler + // Events were added by plugins to the jsPDF instantiator. + // These are always added to the new instance and some ran + // during instantiation. + var eventname, handler_and_args, i; + + for (i = newEvents.length - 1; i !== -1; i--) { + // subscribe takes 3 args: 'topic', function, runonce_flag + // if undefined, runonce is false. + // users can attach callback directly, + // or they can attach an array with [callback, runonce_flag] + // that's what the "apply" magic is for below. + eventname = newEvents[i][0]; + handler_and_args = newEvents[i][1]; + events.subscribe.apply( + events, + [eventname].concat( + typeof handler_and_args === "function" + ? [handler_and_args] + : handler_and_args + ) + ); + } + })(events, jsPDF.API.events); + } else { + API[plugin] = jsPDF.API[plugin]; + } + } + } + + var getPageWidth = (API.getPageWidth = function(pageNumber) { + pageNumber = pageNumber || currentPage; + return ( + (pagesContext[pageNumber].mediaBox.topRightX - + pagesContext[pageNumber].mediaBox.bottomLeftX) / + scaleFactor + ); + }); + + var setPageWidth = (API.setPageWidth = function(pageNumber, value) { + pagesContext[pageNumber].mediaBox.topRightX = + value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX; + }); + + var getPageHeight = (API.getPageHeight = function(pageNumber) { + pageNumber = pageNumber || currentPage; + return ( + (pagesContext[pageNumber].mediaBox.topRightY - + pagesContext[pageNumber].mediaBox.bottomLeftY) / + scaleFactor + ); + }); + + var setPageHeight = (API.setPageHeight = function(pageNumber, value) { + pagesContext[pageNumber].mediaBox.topRightY = + value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY; + }); + + /** + * Object exposing internal API to plugins + * @public + * @ignore + */ + API.internal = { + pdfEscape: pdfEscape, + getStyle: getStyle, + getFont: getFontEntry, + getFontSize: getFontSize, + getCharSpace: getCharSpace, + getTextColor: getTextColor, + getLineHeight: getLineHeight, + getLineHeightFactor: getLineHeightFactor, + getLineWidth: getLineWidth, + write: write, + getHorizontalCoordinate: getHorizontalCoordinate, + getVerticalCoordinate: getVerticalCoordinate, + getCoordinateString: getHorizontalCoordinateString, + getVerticalCoordinateString: getVerticalCoordinateString, + collections: {}, + newObject: newObject, + newAdditionalObject: newAdditionalObject, + newObjectDeferred: newObjectDeferred, + newObjectDeferredBegin: newObjectDeferredBegin, + getFilters: getFilters, + putStream: putStream, + events: events, + scaleFactor: scaleFactor, + pageSize: { + getWidth: function() { + return getPageWidth(currentPage); + }, + setWidth: function(value) { + setPageWidth(currentPage, value); + }, + getHeight: function() { + return getPageHeight(currentPage); + }, + setHeight: function(value) { + setPageHeight(currentPage, value); + } + }, + encryptionOptions: encryptionOptions, + encryption: encryption, + getEncryptor: getEncryptor, + output: output, + getNumberOfPages: getNumberOfPages, + pages: pages, + out: out, + f2: f2, + f3: f3, + getPageInfo: getPageInfo, + getPageInfoByObjId: getPageInfoByObjId, + getCurrentPageInfo: getCurrentPageInfo, + getPDFVersion: getPdfVersion, + Point: Point, + Rectangle: Rectangle, + Matrix: Matrix, + hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them. + }; + + Object.defineProperty(API.internal.pageSize, "width", { + get: function() { + return getPageWidth(currentPage); + }, + set: function(value) { + setPageWidth(currentPage, value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(API.internal.pageSize, "height", { + get: function() { + return getPageHeight(currentPage); + }, + set: function(value) { + setPageHeight(currentPage, value); + }, + enumerable: true, + configurable: true + }); + + ////////////////////////////////////////////////////// + // continuing initialization of jsPDF Document object + ////////////////////////////////////////////////////// + // Add the first page automatically + addFonts.call(API, standardFonts); + activeFontKey = "F1"; + _addPage(format, orientation); + + events.publish("initialized"); + return API; +} + +/** + * jsPDF.API is a STATIC property of jsPDF class. + * jsPDF.API is an object you can add methods and properties to. + * The methods / properties you add will show up in new jsPDF objects. + * + * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics, + * callbacks to this object. These will be reassigned to all new instances of jsPDF. + * + * @static + * @public + * @memberof jsPDF# + * @name API + * + * @example + * jsPDF.API.mymethod = function(){ + * // 'this' will be ref to internal API object. see jsPDF source + * // , so you can refer to built-in methods like so: + * // this.line(....) + * // this.text(....) + * } + * var pdfdoc = new jsPDF() + * pdfdoc.mymethod() // <- !!!!!! + */ +jsPDF.API = { + events: [] +}; +/** + * The version of jsPDF. + * @name version + * @type {string} + * @memberof jsPDF# + */ +jsPDF.version = "2.5.1"; + +/* global jsPDF */ + +var jsPDFAPI = jsPDF.API; +var scaleFactor = 1; + +var pdfEscape = function(value) { + return value + .replace(/\\/g, "\\\\") + .replace(/\(/g, "\\(") + .replace(/\)/g, "\\)"); +}; +var pdfUnescape = function(value) { + return value + .replace(/\\\\/g, "\\") + .replace(/\\\(/g, "(") + .replace(/\\\)/g, ")"); +}; + +var f2 = function(number) { + return number.toFixed(2); // Ie, %.2f +}; + +var f5 = function(number) { + return number.toFixed(5); // Ie, %.2f +}; + +jsPDFAPI.__acroform__ = {}; +var inherit = function(child, parent) { + child.prototype = Object.create(parent.prototype); + child.prototype.constructor = child; +}; + +var scale = function(x) { + return x * scaleFactor; +}; + +var createFormXObject = function(formObject) { + var xobj = new AcroFormXObject(); + var height = AcroFormAppearance.internal.getHeight(formObject) || 0; + var width = AcroFormAppearance.internal.getWidth(formObject) || 0; + xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))]; + return xobj; +}; + +/** + * Bit-Operations + */ +var setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) { + number = number || 0; + bitPosition = bitPosition || 0; + + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error( + "Invalid arguments passed to jsPDF.API.__acroform__.setBit" + ); + } + var bitMask = 1 << bitPosition; + + number |= bitMask; + + return number; +}); + +var clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) { + number = number || 0; + bitPosition = bitPosition || 0; + + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error( + "Invalid arguments passed to jsPDF.API.__acroform__.clearBit" + ); + } + var bitMask = 1 << bitPosition; + + number &= ~bitMask; + + return number; +}); + +var getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error( + "Invalid arguments passed to jsPDF.API.__acroform__.getBit" + ); + } + return (number & (1 << bitPosition)) === 0 ? 0 : 1; +}); + +/* + * Ff starts counting the bit position at 1 and not like javascript at 0 + */ +var getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function( + number, + bitPosition +) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error( + "Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf" + ); + } + return getBit(number, bitPosition - 1); +}); + +var setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function( + number, + bitPosition +) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error( + "Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf" + ); + } + return setBit(number, bitPosition - 1); +}); + +var clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function( + number, + bitPosition +) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error( + "Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf" + ); + } + return clearBit(number, bitPosition - 1); +}); + +var calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function( + args, + scope +) { + var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate; + var getVerticalCoordinate = scope.internal.getVerticalCoordinate; + var x = args[0]; + var y = args[1]; + var w = args[2]; + var h = args[3]; + + var coordinates = {}; + + coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0; + coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0; + coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0; + coordinates.upperRight_Y = getVerticalCoordinate(y) || 0; + + return [ + Number(f2(coordinates.lowerLeft_X)), + Number(f2(coordinates.lowerLeft_Y)), + Number(f2(coordinates.upperRight_X)), + Number(f2(coordinates.upperRight_Y)) + ]; +}); + +var calculateAppearanceStream = function(formObject) { + if (formObject.appearanceStreamContent) { + return formObject.appearanceStreamContent; + } + + if (!formObject.V && !formObject.DV) { + return; + } + + // else calculate it + + var stream = []; + var text = formObject._V || formObject.DV; + var calcRes = calculateX(formObject, text); + var fontKey = formObject.scope.internal.getFont( + formObject.fontName, + formObject.fontStyle + ).id; + + //PDF 32000-1:2008, page 444 + stream.push("/Tx BMC"); + stream.push("q"); + stream.push("BT"); // Begin Text + stream.push(formObject.scope.__private__.encodeColorString(formObject.color)); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf"); + stream.push("1 0 0 1 0 0 Tm"); // Transformation Matrix + stream.push(calcRes.text); + stream.push("ET"); // End Text + stream.push("Q"); + stream.push("EMC"); + + var appearanceStreamContent = createFormXObject(formObject); + appearanceStreamContent.scope = formObject.scope; + appearanceStreamContent.stream = stream.join("\n"); + return appearanceStreamContent; +}; + +var calculateX = function(formObject, text) { + var maxFontSize = + formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize; + var returnValue = { + text: "", + fontSize: "" + }; + // Remove Brackets + text = text.substr(0, 1) == "(" ? text.substr(1) : text; + text = + text.substr(text.length - 1) == ")" + ? text.substr(0, text.length - 1) + : text; + // split into array of words + var textSplit = text.split(" "); + if (formObject.multiline) { + textSplit = textSplit.map(word => word.split("\n")); + } else { + textSplit = textSplit.map(word => [word]); + } + + var fontSize = maxFontSize; // The Starting fontSize (The Maximum) + var lineSpacing = 2; + var borderPadding = 2; + + var height = AcroFormAppearance.internal.getHeight(formObject) || 0; + height = height < 0 ? -height : height; + var width = AcroFormAppearance.internal.getWidth(formObject) || 0; + width = width < 0 ? -width : width; + + var isSmallerThanWidth = function(i, lastLine, fontSize) { + if (i + 1 < textSplit.length) { + var tmp = lastLine + " " + textSplit[i + 1][0]; + var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width; + var FieldWidth = width - 2 * borderPadding; + return TextWidth <= FieldWidth; + } else { + return false; + } + }; + + fontSize++; + FontSize: while (fontSize > 0) { + text = ""; + fontSize--; + var textHeight = calculateFontSpace("3", formObject, fontSize).height; + var startY = formObject.multiline + ? height - fontSize + : (height - textHeight) / 2; + startY += lineSpacing; + var startX; + + var lastY = startY; + var firstWordInLine = 0, + lastWordInLine = 0; + var lastLength; + var currWord = 0; + + if (fontSize <= 0) { + // In case, the Text doesn't fit at all + fontSize = 12; + text = "(...) Tj\n"; + text += + "% Width of Text: " + + calculateFontSpace(text, formObject, fontSize).width + + ", FieldWidth:" + + width + + "\n"; + break; + } + + var lastLine = ""; + var lineCount = 0; + Line: for (var i = 0; i < textSplit.length; i++) { + if (textSplit.hasOwnProperty(i)) { + let isWithNewLine = false; + if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) { + if ( + (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > + height + ) { + continue FontSize; + } + + lastLine += textSplit[i][currWord]; + isWithNewLine = true; + lastWordInLine = i; + i--; + } else { + lastLine += textSplit[i][currWord] + " "; + lastLine = + lastLine.substr(lastLine.length - 1) == " " + ? lastLine.substr(0, lastLine.length - 1) + : lastLine; + var key = parseInt(i); + var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize); + var isLastWord = i >= textSplit.length - 1; + + if (nextLineIsSmaller && !isLastWord) { + lastLine += " "; + currWord = 0; + continue; // Line + } else if (!nextLineIsSmaller && !isLastWord) { + if (!formObject.multiline) { + continue FontSize; + } else { + if ( + (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > + height + ) { + // If the Text is higher than the + // FieldObject + continue FontSize; + } + lastWordInLine = key; + // go on + } + } else if (isLastWord) { + lastWordInLine = key; + } else { + if ( + formObject.multiline && + (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > + height + ) { + // If the Text is higher than the FieldObject + continue FontSize; + } + } + } + // Remove last blank + + var line = ""; + + for (var x = firstWordInLine; x <= lastWordInLine; x++) { + var currLine = textSplit[x]; + if (formObject.multiline) { + if (x === lastWordInLine) { + line += currLine[currWord] + " "; + currWord = (currWord + 1) % currLine.length; + continue; + } + if (x === firstWordInLine) { + line += currLine[currLine.length - 1] + " "; + continue; + } + } + line += currLine[0] + " "; + } + + // Remove last blank + line = + line.substr(line.length - 1) == " " + ? line.substr(0, line.length - 1) + : line; + // lastLength -= blankSpace.width; + lastLength = calculateFontSpace(line, formObject, fontSize).width; + + // Calculate startX + switch (formObject.textAlign) { + case "right": + startX = width - lastLength - borderPadding; + break; + case "center": + startX = (width - lastLength) / 2; + break; + case "left": + default: + startX = borderPadding; + break; + } + text += f2(startX) + " " + f2(lastY) + " Td\n"; + text += "(" + pdfEscape(line) + ") Tj\n"; + // reset X in PDF + text += -f2(startX) + " 0 Td\n"; + + // After a Line, adjust y position + lastY = -(fontSize + lineSpacing); + + // Reset for next iteration step + lastLength = 0; + firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1; + lineCount++; + + lastLine = ""; + continue Line; + } + } + break; + } + + returnValue.text = text; + returnValue.fontSize = fontSize; + + return returnValue; +}; + +/** + * Small workaround for calculating the TextMetric approximately. + * + * @param text + * @param fontsize + * @returns {TextMetrics} (Has Height and Width) + */ +var calculateFontSpace = function(text, formObject, fontSize) { + var font = formObject.scope.internal.getFont( + formObject.fontName, + formObject.fontStyle + ); + var width = + formObject.scope.getStringUnitWidth(text, { + font: font, + fontSize: parseFloat(fontSize), + charSpace: 0 + }) * parseFloat(fontSize); + var height = + formObject.scope.getStringUnitWidth("3", { + font: font, + fontSize: parseFloat(fontSize), + charSpace: 0 + }) * + parseFloat(fontSize) * + 1.5; + return { height: height, width: width }; +}; + +var acroformPluginTemplate = { + fields: [], + xForms: [], + /** + * acroFormDictionaryRoot contains information about the AcroForm + * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has + * 1: The Object ID of the Root + */ + acroFormDictionaryRoot: null, + /** + * After the PDF gets evaluated, the reference to the root has to be + * reset, this indicates, whether the root has already been printed + * out + */ + printedOut: false, + internal: null, + isInitialized: false +}; + +var annotReferenceCallback = function(scope) { + //set objId to undefined and force it to get a new objId on buildDocument + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined; + var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields; + for (var i in fields) { + if (fields.hasOwnProperty(i)) { + var formObject = fields[i]; + //set objId to undefined and force it to get a new objId on buildDocument + formObject.objId = undefined; + // add Annot Reference! + if (formObject.hasAnnotation) { + // If theres an Annotation Widget in the Form Object, put the + // Reference in the /Annot array + createAnnotationReference(formObject, scope); + } + } + } +}; + +var putForm = function(formObject) { + if (formObject.scope.internal.acroformPlugin.printedOut) { + formObject.scope.internal.acroformPlugin.printedOut = false; + formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null; + } + formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push( + formObject + ); +}; +/** + * Create the Reference to the widgetAnnotation, so that it gets referenced + * in the Annot[] int the+ (Requires the Annotation Plugin) + */ +var createAnnotationReference = function(object, scope) { + var options = { + type: "reference", + object: object + }; + var findEntry = function(entry) { + return entry.type === options.type && entry.object === options.object; + }; + if ( + scope.internal + .getPageInfo(object.page) + .pageContext.annotations.find(findEntry) === undefined + ) { + scope.internal + .getPageInfo(object.page) + .pageContext.annotations.push(options); + } +}; + +// Callbacks + +var putCatalogCallback = function(scope) { + // Put reference to AcroForm to DocumentCatalog + if ( + typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== "undefined" + ) { + // for safety, shouldn't normally be the case + scope.internal.write( + "/AcroForm " + + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId + + " " + + 0 + + " R" + ); + } else { + throw new Error("putCatalogCallback: Root missing."); + } +}; + +/** + * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm + * Dictionary + */ +var AcroFormDictionaryCallback = function(scope) { + // Remove event + scope.internal.events.unsubscribe( + scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID + ); + delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID; + scope.internal.acroformPlugin.printedOut = true; +}; + +/** + * Creates the single Fields and writes them into the Document + * + * If fieldArray is set, use the fields that are inside it instead of the + * fields from the AcroRoot (for the FormXObjects...) + */ +var createFieldCallback = function(fieldArray, scope) { + var standardFields = !fieldArray; + + if (!fieldArray) { + // in case there is no fieldArray specified, we want to print out + // the Fields of the AcroForm + // Print out Root + scope.internal.newObjectDeferredBegin( + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId, + true + ); + scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream(); + } + + fieldArray = + fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids; + + for (var i in fieldArray) { + if (fieldArray.hasOwnProperty(i)) { + var fieldObject = fieldArray[i]; + var keyValueList = []; + var oldRect = fieldObject.Rect; + + if (fieldObject.Rect) { + fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope); + } + + // Start Writing the Object + scope.internal.newObjectDeferredBegin(fieldObject.objId, true); + + fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream( + fieldObject + ); + + if ( + typeof fieldObject === "object" && + typeof fieldObject.getKeyValueListForStream === "function" + ) { + keyValueList = fieldObject.getKeyValueListForStream(); + } + + fieldObject.Rect = oldRect; + + if ( + fieldObject.hasAppearanceStream && + !fieldObject.appearanceStreamContent + ) { + // Calculate Appearance + var appearance = calculateAppearanceStream(fieldObject); + keyValueList.push({ key: "AP", value: "<>" }); + + scope.internal.acroformPlugin.xForms.push(appearance); + } + + // Assume AppearanceStreamContent is a Array with N,R,D (at least + // one of them!) + if (fieldObject.appearanceStreamContent) { + var appearanceStreamString = ""; + // Iterate over N,R and D + for (var k in fieldObject.appearanceStreamContent) { + if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) { + var value = fieldObject.appearanceStreamContent[k]; + appearanceStreamString += "/" + k + " "; + appearanceStreamString += "<<"; + if (Object.keys(value).length >= 1 || Array.isArray(value)) { + // appearanceStream is an Array or Object! + for (var i in value) { + if (value.hasOwnProperty(i)) { + var obj = value[i]; + if (typeof obj === "function") { + // if Function is referenced, call it in order + // to get the FormXObject + obj = obj.call(scope, fieldObject); + } + appearanceStreamString += "/" + i + " " + obj + " "; + + // In case the XForm is already used, e.g. OffState + // of CheckBoxes, don't add it + if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0)) + scope.internal.acroformPlugin.xForms.push(obj); + } + } + } else { + obj = value; + if (typeof obj === "function") { + // if Function is referenced, call it in order to + // get the FormXObject + obj = obj.call(scope, fieldObject); + } + appearanceStreamString += "/" + i + " " + obj; + if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0)) + scope.internal.acroformPlugin.xForms.push(obj); + } + appearanceStreamString += ">>"; + } + } + + // appearance stream is a normal Object.. + keyValueList.push({ + key: "AP", + value: "<<\n" + appearanceStreamString + ">>" + }); + } + + scope.internal.putStream({ + additionalKeyValues: keyValueList, + objectId: fieldObject.objId + }); + + scope.internal.out("endobj"); + } + } + if (standardFields) { + createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope); + } +}; + +var createXFormObjectCallback = function(fieldArray, scope) { + for (var i in fieldArray) { + if (fieldArray.hasOwnProperty(i)) { + var key = i; + var fieldObject = fieldArray[i]; + // Start Writing the Object + scope.internal.newObjectDeferredBegin(fieldObject.objId, true); + + if ( + typeof fieldObject === "object" && + typeof fieldObject.putStream === "function" + ) { + fieldObject.putStream(); + } + delete fieldArray[key]; + } + } +}; + +var initializeAcroForm = function(scope, formObject) { + formObject.scope = scope; + if ( + scope.internal !== undefined && + (scope.internal.acroformPlugin === undefined || + scope.internal.acroformPlugin.isInitialized === false) + ) { + AcroFormField.FieldNum = 0; + scope.internal.acroformPlugin = JSON.parse( + JSON.stringify(acroformPluginTemplate) + ); + if (scope.internal.acroformPlugin.acroFormDictionaryRoot) { + throw new Error("Exception while creating AcroformDictionary"); + } + scaleFactor = scope.internal.scaleFactor; + // The Object Number of the AcroForm Dictionary + scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary(); + scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope; + + // add Callback for creating the AcroForm Dictionary + scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe( + "postPutResources", + function() { + AcroFormDictionaryCallback(scope); + } + ); + + scope.internal.events.subscribe("buildDocument", function() { + annotReferenceCallback(scope); + }); // buildDocument + + // Register event, that is triggered when the DocumentCatalog is + // written, in order to add /AcroForm + + scope.internal.events.subscribe("putCatalog", function() { + putCatalogCallback(scope); + }); + + // Register event, that creates all Fields + scope.internal.events.subscribe("postPutPages", function(fieldArray) { + createFieldCallback(fieldArray, scope); + }); + + scope.internal.acroformPlugin.isInitialized = true; + } +}; + +//PDF 32000-1:2008, page 26, 7.3.6 +var arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function( + array, + objId, + scope +) { + var encryptor = function(data) { + return data; + }; + if (Array.isArray(array)) { + var content = "["; + for (var i = 0; i < array.length; i++) { + if (i !== 0) { + content += " "; + } + switch (typeof array[i]) { + case "boolean": + case "number": + case "object": + content += array[i].toString(); + break; + case "string": + if (array[i].substr(0, 1) !== "/") { + if (typeof objId !== "undefined" && scope) + encryptor = scope.internal.getEncryptor(objId); + content += "(" + pdfEscape(encryptor(array[i].toString())) + ")"; + } else { + content += array[i].toString(); + } + break; + } + } + content += "]"; + return content; + } + throw new Error( + "Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray" + ); +}); +function getMatches(string, regex, index) { + index || (index = 1); // default to the first capturing group + var matches = []; + var match; + while ((match = regex.exec(string))) { + matches.push(match[index]); + } + return matches; +} +var pdfArrayToStringArray = function(array) { + var result = []; + if (typeof array === "string") { + result = getMatches(array, /\((.*?)\)/g); + } + return result; +}; + +var toPdfString = function(string, objId, scope) { + var encryptor = function(data) { + return data; + }; + if (typeof objId !== "undefined" && scope) + encryptor = scope.internal.getEncryptor(objId); + string = string || ""; + string.toString(); + string = "(" + pdfEscape(encryptor(string)) + ")"; + return string; +}; + +// ########################## +// Classes +// ########################## + +/** + * @class AcroFormPDFObject + * @classdesc A AcroFormPDFObject + */ +var AcroFormPDFObject = function() { + this._objId = undefined; + this._scope = undefined; + + /** + * @name AcroFormPDFObject#objId + * @type {any} + */ + Object.defineProperty(this, "objId", { + get: function() { + if (typeof this._objId === "undefined") { + if (typeof this.scope === "undefined") { + return undefined; + } + this._objId = this.scope.internal.newObjectDeferred(); + } + return this._objId; + }, + set: function(value) { + this._objId = value; + } + }); + Object.defineProperty(this, "scope", { + value: this._scope, + writable: true + }); +}; + +/** + * @function AcroFormPDFObject.toString + */ +AcroFormPDFObject.prototype.toString = function() { + return this.objId + " 0 R"; +}; + +AcroFormPDFObject.prototype.putStream = function() { + var keyValueList = this.getKeyValueListForStream(); + this.scope.internal.putStream({ + data: this.stream, + additionalKeyValues: keyValueList, + objectId: this.objId + }); + this.scope.internal.out("endobj"); +}; + +/** + * Returns an key-value-List of all non-configurable Variables from the Object + * + * @name getKeyValueListForStream + * @returns {string} + */ +AcroFormPDFObject.prototype.getKeyValueListForStream = function() { + var keyValueList = []; + var keys = Object.getOwnPropertyNames(this).filter(function(key) { + return ( + key != "content" && + key != "appearanceStreamContent" && + key != "scope" && + key != "objId" && + key.substring(0, 1) != "_" + ); + }); + + for (var i in keys) { + if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) { + var key = keys[i]; + var value = this[key]; + + if (value) { + if (Array.isArray(value)) { + keyValueList.push({ + key: key, + value: arrayToPdfArray(value, this.objId, this.scope) + }); + } else if (value instanceof AcroFormPDFObject) { + // In case it is a reference to another PDFObject, + // take the reference number + value.scope = this.scope; + keyValueList.push({ key: key, value: value.objId + " 0 R" }); + } else if (typeof value !== "function") { + keyValueList.push({ key: key, value: value }); + } + } + } + } + return keyValueList; +}; + +var AcroFormXObject = function() { + AcroFormPDFObject.call(this); + + Object.defineProperty(this, "Type", { + value: "/XObject", + configurable: false, + writable: true + }); + + Object.defineProperty(this, "Subtype", { + value: "/Form", + configurable: false, + writable: true + }); + + Object.defineProperty(this, "FormType", { + value: 1, + configurable: false, + writable: true + }); + + var _BBox = []; + Object.defineProperty(this, "BBox", { + configurable: false, + get: function() { + return _BBox; + }, + set: function(value) { + _BBox = value; + } + }); + + Object.defineProperty(this, "Resources", { + value: "2 0 R", + configurable: false, + writable: true + }); + + var _stream; + Object.defineProperty(this, "stream", { + enumerable: false, + configurable: true, + set: function(value) { + _stream = value.trim(); + }, + get: function() { + if (_stream) { + return _stream; + } else { + return null; + } + } + }); +}; + +inherit(AcroFormXObject, AcroFormPDFObject); + +var AcroFormDictionary = function() { + AcroFormPDFObject.call(this); + + var _Kids = []; + + Object.defineProperty(this, "Kids", { + enumerable: false, + configurable: true, + get: function() { + if (_Kids.length > 0) { + return _Kids; + } else { + return undefined; + } + } + }); + Object.defineProperty(this, "Fields", { + enumerable: false, + configurable: false, + get: function() { + return _Kids; + } + }); + + // Default Appearance + var _DA; + Object.defineProperty(this, "DA", { + enumerable: false, + configurable: false, + get: function() { + if (!_DA) { + return undefined; + } + var encryptor = function(data) { + return data; + }; + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + return "(" + pdfEscape(encryptor(_DA)) + ")"; + }, + set: function(value) { + _DA = value; + } + }); +}; + +inherit(AcroFormDictionary, AcroFormPDFObject); + +/** + * The Field Object contains the Variables, that every Field needs + * + * @class AcroFormField + * @classdesc An AcroForm FieldObject + */ +var AcroFormField = function() { + AcroFormPDFObject.call(this); + + //Annotation-Flag See Table 165 + var _F = 4; + Object.defineProperty(this, "F", { + enumerable: false, + configurable: false, + get: function() { + return _F; + }, + set: function(value) { + if (!isNaN(value)) { + _F = value; + } else { + throw new Error( + 'Invalid value "' + value + '" for attribute F supplied.' + ); + } + } + }); + + /** + * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen. + * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page. + * + * @name AcroFormField#showWhenPrinted + * @default true + * @type {boolean} + */ + Object.defineProperty(this, "showWhenPrinted", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(_F, 3)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.F = setBitForPdf(_F, 3); + } else { + this.F = clearBitForPdf(_F, 3); + } + } + }); + + var _Ff = 0; + Object.defineProperty(this, "Ff", { + enumerable: false, + configurable: false, + get: function() { + return _Ff; + }, + set: function(value) { + if (!isNaN(value)) { + _Ff = value; + } else { + throw new Error( + 'Invalid value "' + value + '" for attribute Ff supplied.' + ); + } + } + }); + + var _Rect = []; + Object.defineProperty(this, "Rect", { + enumerable: false, + configurable: false, + get: function() { + if (_Rect.length === 0) { + return undefined; + } + return _Rect; + }, + set: function(value) { + if (typeof value !== "undefined") { + _Rect = value; + } else { + _Rect = []; + } + } + }); + + /** + * The x-position of the field. + * + * @name AcroFormField#x + * @default null + * @type {number} + */ + Object.defineProperty(this, "x", { + enumerable: true, + configurable: true, + get: function() { + if (!_Rect || isNaN(_Rect[0])) { + return 0; + } + return _Rect[0]; + }, + set: function(value) { + _Rect[0] = value; + } + }); + + /** + * The y-position of the field. + * + * @name AcroFormField#y + * @default null + * @type {number} + */ + Object.defineProperty(this, "y", { + enumerable: true, + configurable: true, + get: function() { + if (!_Rect || isNaN(_Rect[1])) { + return 0; + } + return _Rect[1]; + }, + set: function(value) { + _Rect[1] = value; + } + }); + + /** + * The width of the field. + * + * @name AcroFormField#width + * @default null + * @type {number} + */ + Object.defineProperty(this, "width", { + enumerable: true, + configurable: true, + get: function() { + if (!_Rect || isNaN(_Rect[2])) { + return 0; + } + return _Rect[2]; + }, + set: function(value) { + _Rect[2] = value; + } + }); + + /** + * The height of the field. + * + * @name AcroFormField#height + * @default null + * @type {number} + */ + Object.defineProperty(this, "height", { + enumerable: true, + configurable: true, + get: function() { + if (!_Rect || isNaN(_Rect[3])) { + return 0; + } + return _Rect[3]; + }, + set: function(value) { + _Rect[3] = value; + } + }); + + var _FT = ""; + Object.defineProperty(this, "FT", { + enumerable: true, + configurable: false, + get: function() { + return _FT; + }, + set: function(value) { + switch (value) { + case "/Btn": + case "/Tx": + case "/Ch": + case "/Sig": + _FT = value; + break; + default: + throw new Error( + 'Invalid value "' + value + '" for attribute FT supplied.' + ); + } + } + }); + + var _T = null; + + Object.defineProperty(this, "T", { + enumerable: true, + configurable: false, + get: function() { + if (!_T || _T.length < 1) { + // In case of a Child from a Radio´Group, you don't need a FieldName + if (this instanceof AcroFormChildClass) { + return undefined; + } + _T = "FieldObject" + AcroFormField.FieldNum++; + } + var encryptor = function(data) { + return data; + }; + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + return "(" + pdfEscape(encryptor(_T)) + ")"; + }, + set: function(value) { + _T = value.toString(); + } + }); + + /** + * (Optional) The partial field name (see 12.7.3.2, “Field Names”). + * + * @name AcroFormField#fieldName + * @default null + * @type {string} + */ + Object.defineProperty(this, "fieldName", { + configurable: true, + enumerable: true, + get: function() { + return _T; + }, + set: function(value) { + _T = value; + } + }); + + var _fontName = "helvetica"; + /** + * The fontName of the font to be used. + * + * @name AcroFormField#fontName + * @default 'helvetica' + * @type {string} + */ + Object.defineProperty(this, "fontName", { + enumerable: true, + configurable: true, + get: function() { + return _fontName; + }, + set: function(value) { + _fontName = value; + } + }); + + var _fontStyle = "normal"; + /** + * The fontStyle of the font to be used. + * + * @name AcroFormField#fontStyle + * @default 'normal' + * @type {string} + */ + Object.defineProperty(this, "fontStyle", { + enumerable: true, + configurable: true, + get: function() { + return _fontStyle; + }, + set: function(value) { + _fontStyle = value; + } + }); + + var _fontSize = 0; + /** + * The fontSize of the font to be used. + * + * @name AcroFormField#fontSize + * @default 0 (for auto) + * @type {number} + */ + Object.defineProperty(this, "fontSize", { + enumerable: true, + configurable: true, + get: function() { + return _fontSize; + }, + set: function(value) { + _fontSize = value; + } + }); + + var _maxFontSize = undefined; + /** + * The maximum fontSize of the font to be used. + * + * @name AcroFormField#maxFontSize + * @default 0 (for auto) + * @type {number} + */ + Object.defineProperty(this, "maxFontSize", { + enumerable: true, + configurable: true, + get: function() { + if (_maxFontSize === undefined) { + // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit) + // ("50" is transformed to the "user space" but then used in "pdf space") + return 50 / scaleFactor; + } else { + return _maxFontSize; + } + }, + set: function(value) { + _maxFontSize = value; + } + }); + + var _color = "black"; + /** + * The color of the text + * + * @name AcroFormField#color + * @default 'black' + * @type {string|rgba} + */ + Object.defineProperty(this, "color", { + enumerable: true, + configurable: true, + get: function() { + return _color; + }, + set: function(value) { + _color = value; + } + }); + + var _DA = "/F1 0 Tf 0 g"; + // Defines the default appearance (Needed for variable Text) + Object.defineProperty(this, "DA", { + enumerable: true, + configurable: false, + get: function() { + if ( + !_DA || + this instanceof AcroFormChildClass || + this instanceof AcroFormTextField + ) { + return undefined; + } + return toPdfString(_DA, this.objId, this.scope); + }, + set: function(value) { + value = value.toString(); + _DA = value; + } + }); + + var _DV = null; + Object.defineProperty(this, "DV", { + enumerable: false, + configurable: false, + get: function() { + if (!_DV) { + return undefined; + } + if (this instanceof AcroFormButton === false) { + return toPdfString(_DV, this.objId, this.scope); + } + return _DV; + }, + set: function(value) { + value = value.toString(); + if (this instanceof AcroFormButton === false) { + if (value.substr(0, 1) === "(") { + _DV = pdfUnescape(value.substr(1, value.length - 2)); + } else { + _DV = pdfUnescape(value); + } + } else { + _DV = value; + } + } + }); + + /** + * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value. + * + * @name AcroFormField#defaultValue + * @default null + * @type {any} + */ + Object.defineProperty(this, "defaultValue", { + enumerable: true, + configurable: true, + get: function() { + if (this instanceof AcroFormButton === true) { + return pdfUnescape(_DV.substr(1, _DV.length - 1)); + } else { + return _DV; + } + }, + set: function(value) { + value = value.toString(); + if (this instanceof AcroFormButton === true) { + _DV = "/" + value; + } else { + _DV = value; + } + } + }); + + var _V = null; + Object.defineProperty(this, "_V", { + enumerable: false, + configurable: false, + get: function() { + if (!_V) { + return undefined; + } + return _V; + }, + set: function(value) { + this.V = value; + } + }); + Object.defineProperty(this, "V", { + enumerable: false, + configurable: false, + get: function() { + if (!_V) { + return undefined; + } + if (this instanceof AcroFormButton === false) { + return toPdfString(_V, this.objId, this.scope); + } + return _V; + }, + set: function(value) { + value = value.toString(); + if (this instanceof AcroFormButton === false) { + if (value.substr(0, 1) === "(") { + _V = pdfUnescape(value.substr(1, value.length - 2)); + } else { + _V = pdfUnescape(value); + } + } else { + _V = value; + } + } + }); + + /** + * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information. + * + * @name AcroFormField#value + * @default null + * @type {any} + */ + Object.defineProperty(this, "value", { + enumerable: true, + configurable: true, + get: function() { + if (this instanceof AcroFormButton === true) { + return pdfUnescape(_V.substr(1, _V.length - 1)); + } else { + return _V; + } + }, + set: function(value) { + value = value.toString(); + if (this instanceof AcroFormButton === true) { + _V = "/" + value; + } else { + _V = value; + } + } + }); + + /** + * Check if field has annotations + * + * @name AcroFormField#hasAnnotation + * @readonly + * @type {boolean} + */ + Object.defineProperty(this, "hasAnnotation", { + enumerable: true, + configurable: true, + get: function() { + return this.Rect; + } + }); + + Object.defineProperty(this, "Type", { + enumerable: true, + configurable: false, + get: function() { + return this.hasAnnotation ? "/Annot" : null; + } + }); + + Object.defineProperty(this, "Subtype", { + enumerable: true, + configurable: false, + get: function() { + return this.hasAnnotation ? "/Widget" : null; + } + }); + + var _hasAppearanceStream = false; + /** + * true if field has an appearanceStream + * + * @name AcroFormField#hasAppearanceStream + * @readonly + * @type {boolean} + */ + Object.defineProperty(this, "hasAppearanceStream", { + enumerable: true, + configurable: true, + get: function() { + return _hasAppearanceStream; + }, + set: function(value) { + value = Boolean(value); + _hasAppearanceStream = value; + } + }); + + /** + * The page on which the AcroFormField is placed + * + * @name AcroFormField#page + * @type {number} + */ + var _page; + Object.defineProperty(this, "page", { + enumerable: true, + configurable: true, + get: function() { + if (!_page) { + return undefined; + } + return _page; + }, + set: function(value) { + _page = value; + } + }); + + /** + * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database. + * + * @name AcroFormField#readOnly + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "readOnly", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 1)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 1); + } else { + this.Ff = clearBitForPdf(this.Ff, 1); + } + } + }); + + /** + * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”). + * + * @name AcroFormField#required + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "required", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 2)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 2); + } else { + this.Ff = clearBitForPdf(this.Ff, 2); + } + } + }); + + /** + * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”) + * + * @name AcroFormField#noExport + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "noExport", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 3)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 3); + } else { + this.Ff = clearBitForPdf(this.Ff, 3); + } + } + }); + + var _Q = null; + Object.defineProperty(this, "Q", { + enumerable: true, + configurable: false, + get: function() { + if (_Q === null) { + return undefined; + } + return _Q; + }, + set: function(value) { + if ([0, 1, 2].indexOf(value) !== -1) { + _Q = value; + } else { + throw new Error( + 'Invalid value "' + value + '" for attribute Q supplied.' + ); + } + } + }); + + /** + * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text: + * 'left', 'center', 'right' + * + * @name AcroFormField#textAlign + * @default 'left' + * @type {string} + */ + Object.defineProperty(this, "textAlign", { + get: function() { + var result; + switch (_Q) { + case 0: + default: + result = "left"; + break; + case 1: + result = "center"; + break; + case 2: + result = "right"; + break; + } + return result; + }, + configurable: true, + enumerable: true, + set: function(value) { + switch (value) { + case "right": + case 2: + _Q = 2; + break; + case "center": + case 1: + _Q = 1; + break; + case "left": + case 0: + default: + _Q = 0; + } + } + }); +}; + +inherit(AcroFormField, AcroFormPDFObject); + +/** + * @class AcroFormChoiceField + * @extends AcroFormField + */ +var AcroFormChoiceField = function() { + AcroFormField.call(this); + // Field Type = Choice Field + this.FT = "/Ch"; + // options + this.V = "()"; + + this.fontName = "zapfdingbats"; + // Top Index + var _TI = 0; + + Object.defineProperty(this, "TI", { + enumerable: true, + configurable: false, + get: function() { + return _TI; + }, + set: function(value) { + _TI = value; + } + }); + + /** + * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0. + * + * @name AcroFormChoiceField#topIndex + * @default 0 + * @type {number} + */ + Object.defineProperty(this, "topIndex", { + enumerable: true, + configurable: true, + get: function() { + return _TI; + }, + set: function(value) { + _TI = value; + } + }); + + var _Opt = []; + Object.defineProperty(this, "Opt", { + enumerable: true, + configurable: false, + get: function() { + return arrayToPdfArray(_Opt, this.objId, this.scope); + }, + set: function(value) { + _Opt = pdfArrayToStringArray(value); + } + }); + + /** + * @memberof AcroFormChoiceField + * @name getOptions + * @function + * @instance + * @returns {array} array of Options + */ + this.getOptions = function() { + return _Opt; + }; + + /** + * @memberof AcroFormChoiceField + * @name setOptions + * @function + * @instance + * @param {array} value + */ + this.setOptions = function(value) { + _Opt = value; + if (this.sort) { + _Opt.sort(); + } + }; + + /** + * @memberof AcroFormChoiceField + * @name addOption + * @function + * @instance + * @param {string} value + */ + this.addOption = function(value) { + value = value || ""; + value = value.toString(); + _Opt.push(value); + if (this.sort) { + _Opt.sort(); + } + }; + + /** + * @memberof AcroFormChoiceField + * @name removeOption + * @function + * @instance + * @param {string} value + * @param {boolean} allEntries (default: false) + */ + this.removeOption = function(value, allEntries) { + allEntries = allEntries || false; + value = value || ""; + value = value.toString(); + + while (_Opt.indexOf(value) !== -1) { + _Opt.splice(_Opt.indexOf(value), 1); + if (allEntries === false) { + break; + } + } + }; + + /** + * If set, the field is a combo box; if clear, the field is a list box. + * + * @name AcroFormChoiceField#combo + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "combo", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 18)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 18); + } else { + this.Ff = clearBitForPdf(this.Ff, 18); + } + } + }); + + /** + * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set. + * + * @name AcroFormChoiceField#edit + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "edit", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 19)); + }, + set: function(value) { + //PDF 32000-1:2008, page 444 + if (this.combo === true) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 19); + } else { + this.Ff = clearBitForPdf(this.Ff, 19); + } + } + } + }); + + /** + * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231). + * + * @name AcroFormChoiceField#sort + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "sort", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 20)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 20); + _Opt.sort(); + } else { + this.Ff = clearBitForPdf(this.Ff, 20); + } + } + }); + + /** + * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected + * + * @name AcroFormChoiceField#multiSelect + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "multiSelect", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 22)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 22); + } else { + this.Ff = clearBitForPdf(this.Ff, 22); + } + } + }); + + /** + * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set. + * + * @name AcroFormChoiceField#doNotSpellCheck + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "doNotSpellCheck", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 23)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 23); + } else { + this.Ff = clearBitForPdf(this.Ff, 23); + } + } + }); + + /** + * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step. + * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field. + * + * @name AcroFormChoiceField#commitOnSelChange + * @default false + * @type {boolean} + */ + Object.defineProperty(this, "commitOnSelChange", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 27)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 27); + } else { + this.Ff = clearBitForPdf(this.Ff, 27); + } + } + }); + + this.hasAppearanceStream = false; +}; +inherit(AcroFormChoiceField, AcroFormField); + +/** + * @class AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ +var AcroFormListBox = function() { + AcroFormChoiceField.call(this); + this.fontName = "helvetica"; + + //PDF 32000-1:2008, page 444 + this.combo = false; +}; +inherit(AcroFormListBox, AcroFormChoiceField); + +/** + * @class AcroFormComboBox + * @extends AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ +var AcroFormComboBox = function() { + AcroFormListBox.call(this); + this.combo = true; +}; +inherit(AcroFormComboBox, AcroFormListBox); + +/** + * @class AcroFormEditBox + * @extends AcroFormComboBox + * @extends AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ +var AcroFormEditBox = function() { + AcroFormComboBox.call(this); + this.edit = true; +}; +inherit(AcroFormEditBox, AcroFormComboBox); + +/** + * @class AcroFormButton + * @extends AcroFormField + */ +var AcroFormButton = function() { + AcroFormField.call(this); + this.FT = "/Btn"; + + /** + * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected. + * + * @name AcroFormButton#noToggleToOff + * @type {boolean} + */ + Object.defineProperty(this, "noToggleToOff", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 15)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 15); + } else { + this.Ff = clearBitForPdf(this.Ff, 15); + } + } + }); + + /** + * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear. + * + * @name AcroFormButton#radio + * @type {boolean} + */ + Object.defineProperty(this, "radio", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 16)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 16); + } else { + this.Ff = clearBitForPdf(this.Ff, 16); + } + } + }); + + /** + * If set, the field is a pushbutton that does not retain a permanent value. + * + * @name AcroFormButton#pushButton + * @type {boolean} + */ + Object.defineProperty(this, "pushButton", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 17)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 17); + } else { + this.Ff = clearBitForPdf(this.Ff, 17); + } + } + }); + + /** + * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons). + * + * @name AcroFormButton#radioIsUnison + * @type {boolean} + */ + Object.defineProperty(this, "radioIsUnison", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 26)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 26); + } else { + this.Ff = clearBitForPdf(this.Ff, 26); + } + } + }); + + var _MK = {}; + Object.defineProperty(this, "MK", { + enumerable: false, + configurable: false, + get: function() { + var encryptor = function(data) { + return data; + }; + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + if (Object.keys(_MK).length !== 0) { + var result = []; + result.push("<<"); + var key; + for (key in _MK) { + result.push("/" + key + " (" + pdfEscape(encryptor(_MK[key])) + ")"); + } + result.push(">>"); + return result.join("\n"); + } + return undefined; + }, + set: function(value) { + if (typeof value === "object") { + _MK = value; + } + } + }); + + /** + * From the PDF reference: + * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user. + * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, "Button Fields"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, "Button Fields") and radio buttons (Radio Buttons in 12.7.4.2, "Button Fields"). + * + * - '8' = Cross, + * - 'l' = Circle, + * - '' = nothing + * @name AcroFormButton#caption + * @type {string} + */ + Object.defineProperty(this, "caption", { + enumerable: true, + configurable: true, + get: function() { + return _MK.CA || ""; + }, + set: function(value) { + if (typeof value === "string") { + _MK.CA = value; + } + } + }); + + var _AS; + Object.defineProperty(this, "AS", { + enumerable: false, + configurable: false, + get: function() { + return _AS; + }, + set: function(value) { + _AS = value; + } + }); + + /** + * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, "Appearance Streams") + * + * @name AcroFormButton#appearanceState + * @type {any} + */ + Object.defineProperty(this, "appearanceState", { + enumerable: true, + configurable: true, + get: function() { + return _AS.substr(1, _AS.length - 1); + }, + set: function(value) { + _AS = "/" + value; + } + }); +}; +inherit(AcroFormButton, AcroFormField); + +/** + * @class AcroFormPushButton + * @extends AcroFormButton + * @extends AcroFormField + */ +var AcroFormPushButton = function() { + AcroFormButton.call(this); + this.pushButton = true; +}; +inherit(AcroFormPushButton, AcroFormButton); + +/** + * @class AcroFormRadioButton + * @extends AcroFormButton + * @extends AcroFormField + */ +var AcroFormRadioButton = function() { + AcroFormButton.call(this); + this.radio = true; + this.pushButton = false; + + var _Kids = []; + Object.defineProperty(this, "Kids", { + enumerable: true, + configurable: false, + get: function() { + return _Kids; + }, + set: function(value) { + if (typeof value !== "undefined") { + _Kids = value; + } else { + _Kids = []; + } + } + }); +}; +inherit(AcroFormRadioButton, AcroFormButton); + +/** + * The Child class of a RadioButton (the radioGroup) -> The single Buttons + * + * @class AcroFormChildClass + * @extends AcroFormField + * @ignore + */ +var AcroFormChildClass = function() { + AcroFormField.call(this); + + var _parent; + Object.defineProperty(this, "Parent", { + enumerable: false, + configurable: false, + get: function() { + return _parent; + }, + set: function(value) { + _parent = value; + } + }); + + var _optionName; + Object.defineProperty(this, "optionName", { + enumerable: false, + configurable: true, + get: function() { + return _optionName; + }, + set: function(value) { + _optionName = value; + } + }); + + var _MK = {}; + Object.defineProperty(this, "MK", { + enumerable: false, + configurable: false, + get: function() { + var encryptor = function(data) { + return data; + }; + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + var result = []; + result.push("<<"); + var key; + for (key in _MK) { + result.push("/" + key + " (" + pdfEscape(encryptor(_MK[key])) + ")"); + } + result.push(">>"); + return result.join("\n"); + }, + set: function(value) { + if (typeof value === "object") { + _MK = value; + } + } + }); + + /** + * From the PDF reference: + * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user. + * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, "Button Fields"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, "Button Fields") and radio buttons (Radio Buttons in 12.7.4.2, "Button Fields"). + * + * - '8' = Cross, + * - 'l' = Circle, + * - '' = nothing + * @name AcroFormButton#caption + * @type {string} + */ + Object.defineProperty(this, "caption", { + enumerable: true, + configurable: true, + get: function() { + return _MK.CA || ""; + }, + set: function(value) { + if (typeof value === "string") { + _MK.CA = value; + } + } + }); + + var _AS; + Object.defineProperty(this, "AS", { + enumerable: false, + configurable: false, + get: function() { + return _AS; + }, + set: function(value) { + _AS = value; + } + }); + + /** + * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, "Appearance Streams") + * + * @name AcroFormButton#appearanceState + * @type {any} + */ + Object.defineProperty(this, "appearanceState", { + enumerable: true, + configurable: true, + get: function() { + return _AS.substr(1, _AS.length - 1); + }, + set: function(value) { + _AS = "/" + value; + } + }); + this.caption = "l"; + this.appearanceState = "Off"; + // todo: set AppearanceType as variable that can be set from the + // outside... + this._AppearanceType = AcroFormAppearance.RadioButton.Circle; + // The Default appearanceType is the Circle + this.appearanceStreamContent = this._AppearanceType.createAppearanceStream( + this.optionName + ); +}; +inherit(AcroFormChildClass, AcroFormField); + +AcroFormRadioButton.prototype.setAppearance = function(appearance) { + if (!("createAppearanceStream" in appearance && "getCA" in appearance)) { + throw new Error( + "Couldn't assign Appearance to RadioButton. Appearance was Invalid!" + ); + } + for (var objId in this.Kids) { + if (this.Kids.hasOwnProperty(objId)) { + var child = this.Kids[objId]; + child.appearanceStreamContent = appearance.createAppearanceStream( + child.optionName + ); + child.caption = appearance.getCA(); + } + } +}; + +AcroFormRadioButton.prototype.createOption = function(name) { + // Create new Child for RadioGroup + var child = new AcroFormChildClass(); + child.Parent = this; + child.optionName = name; + // Add to Parent + this.Kids.push(child); + + addField.call(this.scope, child); + + return child; +}; + +/** + * @class AcroFormCheckBox + * @extends AcroFormButton + * @extends AcroFormField + */ +var AcroFormCheckBox = function() { + AcroFormButton.call(this); + + this.fontName = "zapfdingbats"; + this.caption = "3"; + this.appearanceState = "On"; + this.value = "On"; + this.textAlign = "center"; + this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream(); +}; +inherit(AcroFormCheckBox, AcroFormButton); + +/** + * @class AcroFormTextField + * @extends AcroFormField + */ +var AcroFormTextField = function() { + AcroFormField.call(this); + this.FT = "/Tx"; + + /** + * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line. + * + * @name AcroFormTextField#multiline + * @type {boolean} + */ + Object.defineProperty(this, "multiline", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 13)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 13); + } else { + this.Ff = clearBitForPdf(this.Ff, 13); + } + } + }); + + /** + * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field. + * + * @name AcroFormTextField#fileSelect + * @type {boolean} + */ + Object.defineProperty(this, "fileSelect", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 21)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 21); + } else { + this.Ff = clearBitForPdf(this.Ff, 21); + } + } + }); + + /** + * (PDF 1.4) If set, text entered in the field shall not be spell-checked. + * + * @name AcroFormTextField#doNotSpellCheck + * @type {boolean} + */ + Object.defineProperty(this, "doNotSpellCheck", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 23)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 23); + } else { + this.Ff = clearBitForPdf(this.Ff, 23); + } + } + }); + + /** + * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area. + * + * @name AcroFormTextField#doNotScroll + * @type {boolean} + */ + Object.defineProperty(this, "doNotScroll", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 24)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 24); + } else { + this.Ff = clearBitForPdf(this.Ff, 24); + } + } + }); + + /** + * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs. + * + * @name AcroFormTextField#comb + * @type {boolean} + */ + Object.defineProperty(this, "comb", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 25)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 25); + } else { + this.Ff = clearBitForPdf(this.Ff, 25); + } + } + }); + + /** + * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string. + * + * @name AcroFormTextField#richText + * @type {boolean} + */ + Object.defineProperty(this, "richText", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 26)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 26); + } else { + this.Ff = clearBitForPdf(this.Ff, 26); + } + } + }); + + var _MaxLen = null; + Object.defineProperty(this, "MaxLen", { + enumerable: true, + configurable: false, + get: function() { + return _MaxLen; + }, + set: function(value) { + _MaxLen = value; + } + }); + + /** + * (Optional; inheritable) The maximum length of the field’s text, in characters. + * + * @name AcroFormTextField#maxLength + * @type {number} + */ + Object.defineProperty(this, "maxLength", { + enumerable: true, + configurable: true, + get: function() { + return _MaxLen; + }, + set: function(value) { + if (Number.isInteger(value)) { + _MaxLen = value; + } + } + }); + + Object.defineProperty(this, "hasAppearanceStream", { + enumerable: true, + configurable: true, + get: function() { + return this.V || this.DV; + } + }); +}; +inherit(AcroFormTextField, AcroFormField); + +/** + * @class AcroFormPasswordField + * @extends AcroFormTextField + * @extends AcroFormField + */ +var AcroFormPasswordField = function() { + AcroFormTextField.call(this); + + /** + * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters. + * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set. + * + * @name AcroFormTextField#password + * @type {boolean} + */ + Object.defineProperty(this, "password", { + enumerable: true, + configurable: true, + get: function() { + return Boolean(getBitForPdf(this.Ff, 14)); + }, + set: function(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 14); + } else { + this.Ff = clearBitForPdf(this.Ff, 14); + } + } + }); + this.password = true; +}; +inherit(AcroFormPasswordField, AcroFormTextField); + +// Contains Methods for creating standard appearances +var AcroFormAppearance = { + CheckBox: { + createAppearanceStream: function() { + var appearance = { + N: { + On: AcroFormAppearance.CheckBox.YesNormal + }, + D: { + On: AcroFormAppearance.CheckBox.YesPushDown, + Off: AcroFormAppearance.CheckBox.OffPushDown + } + }; + + return appearance; + }, + /** + * Returns the standard On Appearance for a CheckBox + * + * @returns {AcroFormXObject} + */ + YesPushDown: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var fontKey = formObject.scope.internal.getFont( + formObject.fontName, + formObject.fontStyle + ).id; + var encodedColor = formObject.scope.__private__.encodeColorString( + formObject.color + ); + var calcRes = calculateX(formObject, formObject.caption); + stream.push("0.749023 g"); + stream.push( + "0 0 " + + f2(AcroFormAppearance.internal.getWidth(formObject)) + + " " + + f2(AcroFormAppearance.internal.getHeight(formObject)) + + " re" + ); + stream.push("f"); + stream.push("BMC"); + stream.push("q"); + stream.push("0 0 1 rg"); + stream.push( + "/" + fontKey + " " + f2(calcRes.fontSize) + " Tf " + encodedColor + ); + stream.push("BT"); + stream.push(calcRes.text); + stream.push("ET"); + stream.push("Q"); + stream.push("EMC"); + xobj.stream = stream.join("\n"); + return xobj; + }, + + YesNormal: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var fontKey = formObject.scope.internal.getFont( + formObject.fontName, + formObject.fontStyle + ).id; + var encodedColor = formObject.scope.__private__.encodeColorString( + formObject.color + ); + var stream = []; + var height = AcroFormAppearance.internal.getHeight(formObject); + var width = AcroFormAppearance.internal.getWidth(formObject); + var calcRes = calculateX(formObject, formObject.caption); + stream.push("1 g"); + stream.push("0 0 " + f2(width) + " " + f2(height) + " re"); + stream.push("f"); + stream.push("q"); + stream.push("0 0 1 rg"); + stream.push("0 0 " + f2(width - 1) + " " + f2(height - 1) + " re"); + stream.push("W"); + stream.push("n"); + stream.push("0 g"); + stream.push("BT"); + stream.push( + "/" + fontKey + " " + f2(calcRes.fontSize) + " Tf " + encodedColor + ); + stream.push(calcRes.text); + stream.push("ET"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + + /** + * Returns the standard Off Appearance for a CheckBox + * + * @returns {AcroFormXObject} + */ + OffPushDown: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + stream.push("0.749023 g"); + stream.push( + "0 0 " + + f2(AcroFormAppearance.internal.getWidth(formObject)) + + " " + + f2(AcroFormAppearance.internal.getHeight(formObject)) + + " re" + ); + stream.push("f"); + xobj.stream = stream.join("\n"); + return xobj; + } + }, + + RadioButton: { + Circle: { + createAppearanceStream: function(name) { + var appearanceStreamContent = { + D: { + Off: AcroFormAppearance.RadioButton.Circle.OffPushDown + }, + N: {} + }; + appearanceStreamContent.N[name] = + AcroFormAppearance.RadioButton.Circle.YesNormal; + appearanceStreamContent.D[name] = + AcroFormAppearance.RadioButton.Circle.YesPushDown; + return appearanceStreamContent; + }, + getCA: function() { + return "l"; + }, + + YesNormal: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + // Make the Radius of the Circle relative to min(height, width) of formObject + var DotRadius = + AcroFormAppearance.internal.getWidth(formObject) <= + AcroFormAppearance.internal.getHeight(formObject) + ? AcroFormAppearance.internal.getWidth(formObject) / 4 + : AcroFormAppearance.internal.getHeight(formObject) / 4; + // The Borderpadding... + DotRadius = Number((DotRadius * 0.9).toFixed(5)); + var c = AcroFormAppearance.internal.Bezier_C; + var DotRadiusBezier = Number((DotRadius * c).toFixed(5)); + /* + * The Following is a Circle created with Bezier-Curves. + */ + stream.push("q"); + stream.push( + "1 0 0 1 " + + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + + " " + + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + + " cm" + ); + stream.push(DotRadius + " 0 m"); + stream.push( + DotRadius + + " " + + DotRadiusBezier + + " " + + DotRadiusBezier + + " " + + DotRadius + + " 0 " + + DotRadius + + " c" + ); + stream.push( + "-" + + DotRadiusBezier + + " " + + DotRadius + + " -" + + DotRadius + + " " + + DotRadiusBezier + + " -" + + DotRadius + + " 0 c" + ); + stream.push( + "-" + + DotRadius + + " -" + + DotRadiusBezier + + " -" + + DotRadiusBezier + + " -" + + DotRadius + + " 0 -" + + DotRadius + + " c" + ); + stream.push( + DotRadiusBezier + + " -" + + DotRadius + + " " + + DotRadius + + " -" + + DotRadiusBezier + + " " + + DotRadius + + " 0 c" + ); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesPushDown: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var DotRadius = + AcroFormAppearance.internal.getWidth(formObject) <= + AcroFormAppearance.internal.getHeight(formObject) + ? AcroFormAppearance.internal.getWidth(formObject) / 4 + : AcroFormAppearance.internal.getHeight(formObject) / 4; + // The Borderpadding... + DotRadius = Number((DotRadius * 0.9).toFixed(5)); + // Save results for later use; no need to waste + // processor ticks on doing math + var k = Number((DotRadius * 2).toFixed(5)); + var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + var dc = Number( + (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5) + ); + + stream.push("0.749023 g"); + stream.push("q"); + stream.push( + "1 0 0 1 " + + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + + " " + + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + + " cm" + ); + stream.push(k + " 0 m"); + stream.push(k + " " + kc + " " + kc + " " + k + " 0 " + k + " c"); + stream.push( + "-" + kc + " " + k + " -" + k + " " + kc + " -" + k + " 0 c" + ); + stream.push( + "-" + k + " -" + kc + " -" + kc + " -" + k + " 0 -" + k + " c" + ); + stream.push(kc + " -" + k + " " + k + " -" + kc + " " + k + " 0 c"); + stream.push("f"); + stream.push("Q"); + stream.push("0 g"); + stream.push("q"); + stream.push( + "1 0 0 1 " + + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + + " " + + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + + " cm" + ); + stream.push(DotRadius + " 0 m"); + stream.push( + "" + + DotRadius + + " " + + dc + + " " + + dc + + " " + + DotRadius + + " 0 " + + DotRadius + + " c" + ); + stream.push( + "-" + + dc + + " " + + DotRadius + + " -" + + DotRadius + + " " + + dc + + " -" + + DotRadius + + " 0 c" + ); + stream.push( + "-" + + DotRadius + + " -" + + dc + + " -" + + dc + + " -" + + DotRadius + + " 0 -" + + DotRadius + + " c" + ); + stream.push( + dc + + " -" + + DotRadius + + " " + + DotRadius + + " -" + + dc + + " " + + DotRadius + + " 0 c" + ); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + OffPushDown: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var DotRadius = + AcroFormAppearance.internal.getWidth(formObject) <= + AcroFormAppearance.internal.getHeight(formObject) + ? AcroFormAppearance.internal.getWidth(formObject) / 4 + : AcroFormAppearance.internal.getHeight(formObject) / 4; + // The Borderpadding... + DotRadius = Number((DotRadius * 0.9).toFixed(5)); + // Save results for later use; no need to waste + // processor ticks on doing math + var k = Number((DotRadius * 2).toFixed(5)); + var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + + stream.push("0.749023 g"); + stream.push("q"); + stream.push( + "1 0 0 1 " + + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + + " " + + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + + " cm" + ); + stream.push(k + " 0 m"); + stream.push(k + " " + kc + " " + kc + " " + k + " 0 " + k + " c"); + stream.push( + "-" + kc + " " + k + " -" + k + " " + kc + " -" + k + " 0 c" + ); + stream.push( + "-" + k + " -" + kc + " -" + kc + " -" + k + " 0 -" + k + " c" + ); + stream.push(kc + " -" + k + " " + k + " -" + kc + " " + k + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + } + }, + + Cross: { + /** + * Creates the Actual AppearanceDictionary-References + * + * @param {string} name + * @returns {Object} + * @ignore + */ + createAppearanceStream: function(name) { + var appearanceStreamContent = { + D: { + Off: AcroFormAppearance.RadioButton.Cross.OffPushDown + }, + N: {} + }; + appearanceStreamContent.N[name] = + AcroFormAppearance.RadioButton.Cross.YesNormal; + appearanceStreamContent.D[name] = + AcroFormAppearance.RadioButton.Cross.YesPushDown; + return appearanceStreamContent; + }, + getCA: function() { + return "8"; + }, + + YesNormal: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var cross = AcroFormAppearance.internal.calculateCross(formObject); + stream.push("q"); + stream.push( + "1 1 " + + f2(AcroFormAppearance.internal.getWidth(formObject) - 2) + + " " + + f2(AcroFormAppearance.internal.getHeight(formObject) - 2) + + " re" + ); + stream.push("W"); + stream.push("n"); + stream.push(f2(cross.x1.x) + " " + f2(cross.x1.y) + " m"); + stream.push(f2(cross.x2.x) + " " + f2(cross.x2.y) + " l"); + stream.push(f2(cross.x4.x) + " " + f2(cross.x4.y) + " m"); + stream.push(f2(cross.x3.x) + " " + f2(cross.x3.y) + " l"); + stream.push("s"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesPushDown: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var cross = AcroFormAppearance.internal.calculateCross(formObject); + var stream = []; + stream.push("0.749023 g"); + stream.push( + "0 0 " + + f2(AcroFormAppearance.internal.getWidth(formObject)) + + " " + + f2(AcroFormAppearance.internal.getHeight(formObject)) + + " re" + ); + stream.push("f"); + stream.push("q"); + stream.push( + "1 1 " + + f2(AcroFormAppearance.internal.getWidth(formObject) - 2) + + " " + + f2(AcroFormAppearance.internal.getHeight(formObject) - 2) + + " re" + ); + stream.push("W"); + stream.push("n"); + stream.push(f2(cross.x1.x) + " " + f2(cross.x1.y) + " m"); + stream.push(f2(cross.x2.x) + " " + f2(cross.x2.y) + " l"); + stream.push(f2(cross.x4.x) + " " + f2(cross.x4.y) + " m"); + stream.push(f2(cross.x3.x) + " " + f2(cross.x3.y) + " l"); + stream.push("s"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + OffPushDown: function(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + stream.push("0.749023 g"); + stream.push( + "0 0 " + + f2(AcroFormAppearance.internal.getWidth(formObject)) + + " " + + f2(AcroFormAppearance.internal.getHeight(formObject)) + + " re" + ); + stream.push("f"); + xobj.stream = stream.join("\n"); + return xobj; + } + } + }, + + /** + * Returns the standard Appearance + * + * @returns {AcroFormXObject} + */ + createDefaultAppearanceStream: function(formObject) { + // Set Helvetica to Standard Font (size: auto) + // Color: Black + var fontKey = formObject.scope.internal.getFont( + formObject.fontName, + formObject.fontStyle + ).id; + var encodedColor = formObject.scope.__private__.encodeColorString( + formObject.color + ); + var fontSize = formObject.fontSize; + var result = "/" + fontKey + " " + fontSize + " Tf " + encodedColor; + return result; + } +}; + +AcroFormAppearance.internal = { + Bezier_C: 0.551915024494, + + calculateCross: function(formObject) { + var width = AcroFormAppearance.internal.getWidth(formObject); + var height = AcroFormAppearance.internal.getHeight(formObject); + var a = Math.min(width, height); + + var cross = { + x1: { + // upperLeft + x: (width - a) / 2, + y: (height - a) / 2 + a // height - borderPadding + }, + x2: { + // lowerRight + x: (width - a) / 2 + a, + y: (height - a) / 2 // borderPadding + }, + x3: { + // lowerLeft + x: (width - a) / 2, + y: (height - a) / 2 // borderPadding + }, + x4: { + // upperRight + x: (width - a) / 2 + a, + y: (height - a) / 2 + a // height - borderPadding + } + }; + + return cross; + } +}; +AcroFormAppearance.internal.getWidth = function(formObject) { + var result = 0; + if (typeof formObject === "object") { + result = scale(formObject.Rect[2]); + } + return result; +}; +AcroFormAppearance.internal.getHeight = function(formObject) { + var result = 0; + if (typeof formObject === "object") { + result = scale(formObject.Rect[3]); + } + return result; +}; + +// Public: + +/** + * Add an AcroForm-Field to the jsPDF-instance + * + * @name addField + * @function + * @instance + * @param {Object} fieldObject + * @returns {jsPDF} + */ +var addField = (jsPDFAPI.addField = function(fieldObject) { + initializeAcroForm(this, fieldObject); + + if (fieldObject instanceof AcroFormField) { + putForm(fieldObject); + } else { + throw new Error("Invalid argument passed to jsPDF.addField."); + } + fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber; + return this; +}); + +jsPDFAPI.AcroFormChoiceField = AcroFormChoiceField; +jsPDFAPI.AcroFormListBox = AcroFormListBox; +jsPDFAPI.AcroFormComboBox = AcroFormComboBox; +jsPDFAPI.AcroFormEditBox = AcroFormEditBox; +jsPDFAPI.AcroFormButton = AcroFormButton; +jsPDFAPI.AcroFormPushButton = AcroFormPushButton; +jsPDFAPI.AcroFormRadioButton = AcroFormRadioButton; +jsPDFAPI.AcroFormCheckBox = AcroFormCheckBox; +jsPDFAPI.AcroFormTextField = AcroFormTextField; +jsPDFAPI.AcroFormPasswordField = AcroFormPasswordField; +jsPDFAPI.AcroFormAppearance = AcroFormAppearance; + +jsPDFAPI.AcroForm = { + ChoiceField: AcroFormChoiceField, + ListBox: AcroFormListBox, + ComboBox: AcroFormComboBox, + EditBox: AcroFormEditBox, + Button: AcroFormButton, + PushButton: AcroFormPushButton, + RadioButton: AcroFormRadioButton, + CheckBox: AcroFormCheckBox, + TextField: AcroFormTextField, + PasswordField: AcroFormPasswordField, + Appearance: AcroFormAppearance +}; + +jsPDF.AcroForm = { + ChoiceField: AcroFormChoiceField, + ListBox: AcroFormListBox, + ComboBox: AcroFormComboBox, + EditBox: AcroFormEditBox, + Button: AcroFormButton, + PushButton: AcroFormPushButton, + RadioButton: AcroFormRadioButton, + CheckBox: AcroFormCheckBox, + TextField: AcroFormTextField, + PasswordField: AcroFormPasswordField, + Appearance: AcroFormAppearance +}; + +var AcroForm = jsPDF.AcroForm; + +/** @license + * jsPDF addImage plugin + * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/ + * 2013 Chris Dowling, https://github.com/gingerchris + * 2013 Trinh Ho, https://github.com/ineedfat + * 2013 Edwin Alejandro Perez, https://github.com/eaparango + * 2013 Norah Smith, https://github.com/burnburnrocket + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 James Robb, https://github.com/jamesbrobb + * + * 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. + */ + +(function(jsPDFAPI) { + + var namespace = "addImage_"; + jsPDFAPI.__addimage__ = {}; + + var UNKNOWN = "UNKNOWN"; + + // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow. + // With too small batch iteration will be slow as more calls are made, + // higher values cause larger and slower garbage collection. + var ARRAY_APPLY_BATCH = 8192; + + var imageFileTypeHeaders = { + PNG: [[0x89, 0x50, 0x4e, 0x47]], + TIFF: [ + [0x4d, 0x4d, 0x00, 0x2a], //Motorola + [0x49, 0x49, 0x2a, 0x00] //Intel + ], + JPEG: [ + [ + 0xff, + 0xd8, + 0xff, + 0xe0, + undefined, + undefined, + 0x4a, + 0x46, + 0x49, + 0x46, + 0x00 + ], //JFIF + [ + 0xff, + 0xd8, + 0xff, + 0xe1, + undefined, + undefined, + 0x45, + 0x78, + 0x69, + 0x66, + 0x00, + 0x00 + ], //Exif + [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW + [0xff, 0xd8, 0xff, 0xee] //EXIF RAW + ], + JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]], + GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]], + GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]], + WEBP: [ + [ + 0x52, + 0x49, + 0x46, + 0x46, + undefined, + undefined, + undefined, + undefined, + 0x57, + 0x45, + 0x42, + 0x50 + ] + ], + BMP: [ + [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc. + [0x42, 0x41], //BA - OS/2 struct bitmap array + [0x43, 0x49], //CI - OS/2 struct color icon + [0x43, 0x50], //CP - OS/2 const color pointer + [0x49, 0x43], //IC - OS/2 struct icon + [0x50, 0x54] //PT - OS/2 pointer + ] + }; + + /** + * Recognize filetype of Image by magic-bytes + * + * https://en.wikipedia.org/wiki/List_of_file_signatures + * + * @name getImageFileTypeByImageData + * @public + * @function + * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer + * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG' + * + * @returns {string} filetype of Image + */ + var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function( + imageData, + fallbackFormat + ) { + fallbackFormat = fallbackFormat || UNKNOWN; + var i; + var j; + var result = UNKNOWN; + var headerSchemata; + var compareResult; + var fileType; + + if ( + fallbackFormat === "RGBA" || + (imageData.data !== undefined && + imageData.data instanceof Uint8ClampedArray && + "height" in imageData && + "width" in imageData) + ) { + return "RGBA"; + } + + if (isArrayBufferView(imageData)) { + for (fileType in imageFileTypeHeaders) { + headerSchemata = imageFileTypeHeaders[fileType]; + for (i = 0; i < headerSchemata.length; i += 1) { + compareResult = true; + for (j = 0; j < headerSchemata[i].length; j += 1) { + if (headerSchemata[i][j] === undefined) { + continue; + } + if (headerSchemata[i][j] !== imageData[j]) { + compareResult = false; + break; + } + } + if (compareResult === true) { + result = fileType; + break; + } + } + } + } else { + for (fileType in imageFileTypeHeaders) { + headerSchemata = imageFileTypeHeaders[fileType]; + for (i = 0; i < headerSchemata.length; i += 1) { + compareResult = true; + for (j = 0; j < headerSchemata[i].length; j += 1) { + if (headerSchemata[i][j] === undefined) { + continue; + } + if (headerSchemata[i][j] !== imageData.charCodeAt(j)) { + compareResult = false; + break; + } + } + if (compareResult === true) { + result = fileType; + break; + } + } + } + } + + if (result === UNKNOWN && fallbackFormat !== UNKNOWN) { + result = fallbackFormat; + } + return result; + }); + + // Image functionality ported from pdf.js + var putImage = function(image) { + var out = this.internal.write; + var putStream = this.internal.putStream; + var getFilters = this.internal.getFilters; + + var filter = getFilters(); + while (filter.indexOf("FlateEncode") !== -1) { + filter.splice(filter.indexOf("FlateEncode"), 1); + } + + image.objectId = this.internal.newObject(); + + var additionalKeyValues = []; + additionalKeyValues.push({ key: "Type", value: "/XObject" }); + additionalKeyValues.push({ key: "Subtype", value: "/Image" }); + additionalKeyValues.push({ key: "Width", value: image.width }); + additionalKeyValues.push({ key: "Height", value: image.height }); + + if (image.colorSpace === color_spaces.INDEXED) { + additionalKeyValues.push({ + key: "ColorSpace", + value: + "[/Indexed /DeviceRGB " + + // if an indexed png defines more than one colour with transparency, we've created a sMask + (image.palette.length / 3 - 1) + + " " + + ("sMask" in image && typeof image.sMask !== "undefined" + ? image.objectId + 2 + : image.objectId + 1) + + " 0 R]" + }); + } else { + additionalKeyValues.push({ + key: "ColorSpace", + value: "/" + image.colorSpace + }); + if (image.colorSpace === color_spaces.DEVICE_CMYK) { + additionalKeyValues.push({ key: "Decode", value: "[1 0 1 0 1 0 1 0]" }); + } + } + additionalKeyValues.push({ + key: "BitsPerComponent", + value: image.bitsPerComponent + }); + if ( + "decodeParameters" in image && + typeof image.decodeParameters !== "undefined" + ) { + additionalKeyValues.push({ + key: "DecodeParms", + value: "<<" + image.decodeParameters + ">>" + }); + } + if ("transparency" in image && Array.isArray(image.transparency)) { + var transparency = "", + i = 0, + len = image.transparency.length; + for (; i < len; i++) + transparency += + image.transparency[i] + " " + image.transparency[i] + " "; + + additionalKeyValues.push({ + key: "Mask", + value: "[" + transparency + "]" + }); + } + if (typeof image.sMask !== "undefined") { + additionalKeyValues.push({ + key: "SMask", + value: image.objectId + 1 + " 0 R" + }); + } + + var alreadyAppliedFilters = + typeof image.filter !== "undefined" ? ["/" + image.filter] : undefined; + + putStream({ + data: image.data, + additionalKeyValues: additionalKeyValues, + alreadyAppliedFilters: alreadyAppliedFilters, + objectId: image.objectId + }); + + out("endobj"); + + // Soft mask + if ("sMask" in image && typeof image.sMask !== "undefined") { + var decodeParameters = + "/Predictor " + + image.predictor + + " /Colors 1 /BitsPerComponent " + + image.bitsPerComponent + + " /Columns " + + image.width; + var sMask = { + width: image.width, + height: image.height, + colorSpace: "DeviceGray", + bitsPerComponent: image.bitsPerComponent, + decodeParameters: decodeParameters, + data: image.sMask + }; + if ("filter" in image) { + sMask.filter = image.filter; + } + putImage.call(this, sMask); + } + + //Palette + if (image.colorSpace === color_spaces.INDEXED) { + var objId = this.internal.newObject(); + //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); + //putStream(zlib.compress(img['pal'])); + putStream({ + data: arrayBufferToBinaryString(new Uint8Array(image.palette)), + objectId: objId + }); + out("endobj"); + } + }; + var putResourcesCallback = function() { + var images = this.internal.collections[namespace + "images"]; + for (var i in images) { + putImage.call(this, images[i]); + } + }; + var putXObjectsDictCallback = function() { + var images = this.internal.collections[namespace + "images"], + out = this.internal.write, + image; + for (var i in images) { + image = images[i]; + out("/I" + image.index, image.objectId, "0", "R"); + } + }; + + var checkCompressValue = function(value) { + if (value && typeof value === "string") value = value.toUpperCase(); + return value in jsPDFAPI.image_compression ? value : image_compression.NONE; + }; + + var initialize = function() { + if (!this.internal.collections[namespace + "images"]) { + this.internal.collections[namespace + "images"] = {}; + this.internal.events.subscribe("putResources", putResourcesCallback); + this.internal.events.subscribe("putXobjectDict", putXObjectsDictCallback); + } + }; + + var getImages = function() { + var images = this.internal.collections[namespace + "images"]; + initialize.call(this); + return images; + }; + var getImageIndex = function() { + return Object.keys(this.internal.collections[namespace + "images"]).length; + }; + var notDefined = function(value) { + return typeof value === "undefined" || value === null || value.length === 0; + }; + var generateAliasFromImageData = function(imageData) { + if (typeof imageData === "string" || isArrayBufferView(imageData)) { + return sHashCode(imageData); + } else if (isArrayBufferView(imageData.data)) { + return sHashCode(imageData.data); + } + + return null; + }; + + var isImageTypeSupported = function(type) { + return typeof jsPDFAPI["process" + type.toUpperCase()] === "function"; + }; + + var isDOMElement = function(object) { + return typeof object === "object" && object.nodeType === 1; + }; + + var getImageDataFromElement = function(element, format) { + //if element is an image which uses data url definition, just return the dataurl + if (element.nodeName === "IMG" && element.hasAttribute("src")) { + var src = "" + element.getAttribute("src"); + + //is base64 encoded dataUrl, directly process it + if (src.indexOf("data:image/") === 0) { + return atob( + unescape(src) + .split("base64,") + .pop() + ); + } + + //it is probably an url, try to load it + var tmpImageData = jsPDFAPI.loadFile(src, true); + if (tmpImageData !== undefined) { + return tmpImageData; + } + } + + if (element.nodeName === "CANVAS") { + if (element.width === 0 || element.height === 0) { + throw new Error( + "Given canvas must have data. Canvas width: " + + element.width + + ", height: " + + element.height + ); + } + var mimeType; + switch (format) { + case "PNG": + mimeType = "image/png"; + break; + case "WEBP": + mimeType = "image/webp"; + break; + case "JPEG": + case "JPG": + default: + mimeType = "image/jpeg"; + break; + } + return atob( + element + .toDataURL(mimeType, 1.0) + .split("base64,") + .pop() + ); + } + }; + + var checkImagesForAlias = function(alias) { + var images = this.internal.collections[namespace + "images"]; + if (images) { + for (var e in images) { + if (alias === images[e].alias) { + return images[e]; + } + } + } + }; + + var determineWidthAndHeight = function(width, height, image) { + if (!width && !height) { + width = -96; + height = -96; + } + if (width < 0) { + width = (-1 * image.width * 72) / width / this.internal.scaleFactor; + } + if (height < 0) { + height = (-1 * image.height * 72) / height / this.internal.scaleFactor; + } + if (width === 0) { + width = (height * image.width) / image.height; + } + if (height === 0) { + height = (width * image.height) / image.width; + } + + return [width, height]; + }; + + var writeImageToPDF = function(x, y, width, height, image, rotation) { + var dims = determineWidthAndHeight.call(this, width, height, image), + coord = this.internal.getCoordinateString, + vcoord = this.internal.getVerticalCoordinateString; + + var images = getImages.call(this); + + width = dims[0]; + height = dims[1]; + images[image.index] = image; + + if (rotation) { + rotation *= Math.PI / 180; + var c = Math.cos(rotation); + var s = Math.sin(rotation); + //like in pdf Reference do it 4 digits instead of 2 + var f4 = function(number) { + return number.toFixed(4); + }; + var rotationTransformationMatrix = [ + f4(c), + f4(s), + f4(s * -1), + f4(c), + 0, + 0, + "cm" + ]; + } + this.internal.write("q"); //Save graphics state + if (rotation) { + this.internal.write( + [1, "0", "0", 1, coord(x), vcoord(y + height), "cm"].join(" ") + ); //Translate + this.internal.write(rotationTransformationMatrix.join(" ")); //Rotate + this.internal.write( + [coord(width), "0", "0", coord(height), "0", "0", "cm"].join(" ") + ); //Scale + } else { + this.internal.write( + [ + coord(width), + "0", + "0", + coord(height), + coord(x), + vcoord(y + height), + "cm" + ].join(" ") + ); //Translate and Scale + } + + if (this.isAdvancedAPI()) { + // draw image bottom up when in "advanced" API mode + this.internal.write([1, 0, 0, -1, 0, 0, "cm"].join(" ")); + } + + this.internal.write("/I" + image.index + " Do"); //Paint Image + this.internal.write("Q"); //Restore graphics state + }; + + /** + * COLOR SPACES + */ + var color_spaces = (jsPDFAPI.color_spaces = { + DEVICE_RGB: "DeviceRGB", + DEVICE_GRAY: "DeviceGray", + DEVICE_CMYK: "DeviceCMYK", + CAL_GREY: "CalGray", + CAL_RGB: "CalRGB", + LAB: "Lab", + ICC_BASED: "ICCBased", + INDEXED: "Indexed", + PATTERN: "Pattern", + SEPARATION: "Separation", + DEVICE_N: "DeviceN" + }); + + /** + * DECODE METHODS + */ + jsPDFAPI.decode = { + DCT_DECODE: "DCTDecode", + FLATE_DECODE: "FlateDecode", + LZW_DECODE: "LZWDecode", + JPX_DECODE: "JPXDecode", + JBIG2_DECODE: "JBIG2Decode", + ASCII85_DECODE: "ASCII85Decode", + ASCII_HEX_DECODE: "ASCIIHexDecode", + RUN_LENGTH_DECODE: "RunLengthDecode", + CCITT_FAX_DECODE: "CCITTFaxDecode" + }; + + /** + * IMAGE COMPRESSION TYPES + */ + var image_compression = (jsPDFAPI.image_compression = { + NONE: "NONE", + FAST: "FAST", + MEDIUM: "MEDIUM", + SLOW: "SLOW" + }); + + /** + * @name sHashCode + * @function + * @param {string} data + * @returns {string} + */ + var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) { + var hash = 0, + i, + len; + + if (typeof data === "string") { + len = data.length; + for (i = 0; i < len; i++) { + hash = (hash << 5) - hash + data.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + } else if (isArrayBufferView(data)) { + len = data.byteLength / 2; + for (i = 0; i < len; i++) { + hash = (hash << 5) - hash + data[i]; + hash |= 0; // Convert to 32bit integer + } + } + return hash; + }); + + /** + * Validates if given String is a valid Base64-String + * + * @name validateStringAsBase64 + * @public + * @function + * @param {String} possible Base64-String + * + * @returns {boolean} + */ + var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function( + possibleBase64String + ) { + possibleBase64String = possibleBase64String || ""; + possibleBase64String.toString().trim(); + + var result = true; + + if (possibleBase64String.length === 0) { + result = false; + } + + if (possibleBase64String.length % 4 !== 0) { + result = false; + } + + if ( + /^[A-Za-z0-9+/]+$/.test( + possibleBase64String.substr(0, possibleBase64String.length - 2) + ) === false + ) { + result = false; + } + + if ( + /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test( + possibleBase64String.substr(-2) + ) === false + ) { + result = false; + } + return result; + }); + + /** + * Strips out and returns info from a valid base64 data URI + * + * @name extractImageFromDataUrl + * @function + * @param {string} dataUrl a valid data URI of format 'data:[][;base64],' + * @returns {Array}an Array containing the following + * [0] the complete data URI + * [1] + * [2] format - the second part of the mime-type i.e 'png' in 'image/png' + * [4] + */ + var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function( + dataUrl + ) { + dataUrl = dataUrl || ""; + var dataUrlParts = dataUrl.split("base64,"); + var result = null; + + if (dataUrlParts.length === 2) { + var extractedInfo = /^data:(\w*\/\w*);*(charset=(?!charset=)[\w=-]*)*;*$/.exec( + dataUrlParts[0] + ); + if (Array.isArray(extractedInfo)) { + result = { + mimeType: extractedInfo[1], + charset: extractedInfo[2], + data: dataUrlParts[1] + }; + } + } + return result; + }); + + /** + * Check to see if ArrayBuffer is supported + * + * @name supportsArrayBuffer + * @function + * @returns {boolean} + */ + var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() { + return ( + typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" + ); + }); + + /** + * Tests supplied object to determine if ArrayBuffer + * + * @name isArrayBuffer + * @function + * @param {Object} object an Object + * + * @returns {boolean} + */ + jsPDFAPI.__addimage__.isArrayBuffer = function(object) { + return supportsArrayBuffer() && object instanceof ArrayBuffer; + }; + + /** + * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface + * + * @name isArrayBufferView + * @function + * @param {Object} object an Object + * @returns {boolean} + */ + var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function( + object + ) { + return ( + supportsArrayBuffer() && + typeof Uint32Array !== "undefined" && + (object instanceof Int8Array || + object instanceof Uint8Array || + (typeof Uint8ClampedArray !== "undefined" && + object instanceof Uint8ClampedArray) || + object instanceof Int16Array || + object instanceof Uint16Array || + object instanceof Int32Array || + object instanceof Uint32Array || + object instanceof Float32Array || + object instanceof Float64Array) + ); + }); + + /** + * Convert Binary String to ArrayBuffer + * + * @name binaryStringToUint8Array + * @public + * @function + * @param {string} BinaryString with ImageData + * @returns {Uint8Array} + */ + var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function( + binary_string + ) { + var len = binary_string.length; + var bytes = new Uint8Array(len); + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes; + }); + + /** + * Convert the Buffer to a Binary String + * + * @name arrayBufferToBinaryString + * @public + * @function + * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData + * + * @returns {String} + */ + var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function( + buffer + ) { + var out = ""; + // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView. + // Do not copy the array if input is already an array. + var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer); + for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) { + // Limit the amount of characters being parsed to prevent overflow. + // Note that while TextDecoder would be faster, it does not have the same + // functionality as fromCharCode with any provided encodings as of 3/2021. + out += String.fromCharCode.apply( + null, + buf.subarray(i, i + ARRAY_APPLY_BATCH) + ); + } + return out; + }); + + /** + * Possible parameter for addImage, an RGBA buffer with size. + * + * @typedef {Object} RGBAData + * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData. + * @property {number} width - Image width as the data does not carry this information in itself. + * @property {number} height - Image height as the data does not carry this information in itself. + */ + + /** + * Adds an Image to the PDF. + * + * @name addImage + * @public + * @function + * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData). + * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP' + * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} width width of the image (in units declared at inception of PDF document) + * @param {number} height height of the Image (in units declared at inception of PDF document) + * @param {string} alias alias of the image (if used multiple times) + * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW' + * @param {number} rotation rotation of the image in degrees (0-359) + * + * @returns jsPDF + */ + jsPDFAPI.addImage = function() { + var imageData, format, x, y, w, h, alias, compression, rotation; + + imageData = arguments[0]; + if (typeof arguments[1] === "number") { + format = UNKNOWN; + x = arguments[1]; + y = arguments[2]; + w = arguments[3]; + h = arguments[4]; + alias = arguments[5]; + compression = arguments[6]; + rotation = arguments[7]; + } else { + format = arguments[1]; + x = arguments[2]; + y = arguments[3]; + w = arguments[4]; + h = arguments[5]; + alias = arguments[6]; + compression = arguments[7]; + rotation = arguments[8]; + } + + if ( + typeof imageData === "object" && + !isDOMElement(imageData) && + "imageData" in imageData + ) { + var options = imageData; + + imageData = options.imageData; + format = options.format || format || UNKNOWN; + x = options.x || x || 0; + y = options.y || y || 0; + w = options.w || options.width || w; + h = options.h || options.height || h; + alias = options.alias || alias; + compression = options.compression || compression; + rotation = options.rotation || options.angle || rotation; + } + + //If compression is not explicitly set, determine if we should use compression + var filter = this.internal.getFilters(); + if (compression === undefined && filter.indexOf("FlateEncode") !== -1) { + compression = "SLOW"; + } + + if (isNaN(x) || isNaN(y)) { + throw new Error("Invalid coordinates passed to jsPDF.addImage"); + } + + initialize.call(this); + + var image = processImageData.call( + this, + imageData, + format, + alias, + compression + ); + + writeImageToPDF.call(this, x, y, w, h, image, rotation); + + return this; + }; + + var processImageData = function(imageData, format, alias, compression) { + var result, dataAsBinaryString; + + if ( + typeof imageData === "string" && + getImageFileTypeByImageData(imageData) === UNKNOWN + ) { + imageData = unescape(imageData); + var tmpImageData = convertBase64ToBinaryString(imageData, false); + + if (tmpImageData !== "") { + imageData = tmpImageData; + } else { + tmpImageData = jsPDFAPI.loadFile(imageData, true); + if (tmpImageData !== undefined) { + imageData = tmpImageData; + } + } + } + + if (isDOMElement(imageData)) { + imageData = getImageDataFromElement(imageData, format); + } + + format = getImageFileTypeByImageData(imageData, format); + if (!isImageTypeSupported(format)) { + throw new Error( + "addImage does not support files of type '" + + format + + "', please ensure that a plugin for '" + + format + + "' support is added." + ); + } + + // now do the heavy lifting + + if (notDefined(alias)) { + alias = generateAliasFromImageData(imageData); + } + result = checkImagesForAlias.call(this, alias); + + if (!result) { + if (supportsArrayBuffer()) { + // no need to convert if imageData is already uint8array + if (!(imageData instanceof Uint8Array) && format !== "RGBA") { + dataAsBinaryString = imageData; + imageData = binaryStringToUint8Array(imageData); + } + } + + result = this["process" + format.toUpperCase()]( + imageData, + getImageIndex.call(this), + alias, + checkCompressValue(compression), + dataAsBinaryString + ); + } + + if (!result) { + throw new Error("An unknown error occurred whilst processing the image."); + } + return result; + }; + + /** + * @name convertBase64ToBinaryString + * @function + * @param {string} stringData + * @returns {string} binary string + */ + var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function( + stringData, + throwError + ) { + throwError = typeof throwError === "boolean" ? throwError : true; + var base64Info; + var imageData = ""; + var rawData; + + if (typeof stringData === "string") { + base64Info = extractImageFromDataUrl(stringData); + rawData = base64Info !== null ? base64Info.data : stringData; + + try { + imageData = atob(rawData); + } catch (e) { + if (throwError) { + if (!validateStringAsBase64(rawData)) { + throw new Error( + "Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString " + ); + } else { + throw new Error( + "atob-Error in jsPDF.convertBase64ToBinaryString " + e.message + ); + } + } + } + } + return imageData; + }); + + /** + * @name getImageProperties + * @function + * @param {Object} imageData + * @returns {Object} + */ + jsPDFAPI.getImageProperties = function(imageData) { + var image; + var tmpImageData = ""; + var format; + + if (isDOMElement(imageData)) { + imageData = getImageDataFromElement(imageData); + } + + if ( + typeof imageData === "string" && + getImageFileTypeByImageData(imageData) === UNKNOWN + ) { + tmpImageData = convertBase64ToBinaryString(imageData, false); + + if (tmpImageData === "") { + tmpImageData = jsPDFAPI.loadFile(imageData) || ""; + } + imageData = tmpImageData; + } + + format = getImageFileTypeByImageData(imageData); + if (!isImageTypeSupported(format)) { + throw new Error( + "addImage does not support files of type '" + + format + + "', please ensure that a plugin for '" + + format + + "' support is added." + ); + } + + if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) { + imageData = binaryStringToUint8Array(imageData); + } + + image = this["process" + format.toUpperCase()](imageData); + + if (!image) { + throw new Error("An unknown error occurred whilst processing the image"); + } + + image.fileType = format; + + return image; + }; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +(function(jsPDFAPI) { + + var notEmpty = function(obj) { + if (typeof obj != "undefined") { + if (obj != "") { + return true; + } + } + }; + + jsPDF.API.events.push([ + "addPage", + function(addPageData) { + var pageInfo = this.internal.getPageInfo(addPageData.pageNumber); + pageInfo.pageContext.annotations = []; + } + ]); + + jsPDFAPI.events.push([ + "putPage", + function(putPageData) { + var getHorizontalCoordinateString = this.internal.getCoordinateString; + var getVerticalCoordinateString = this.internal + .getVerticalCoordinateString; + var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId); + var pageAnnos = putPageData.pageContext.annotations; + + var anno, rect, line; + var found = false; + for (var a = 0; a < pageAnnos.length && !found; a++) { + anno = pageAnnos[a]; + switch (anno.type) { + case "link": + if ( + notEmpty(anno.options.url) || + notEmpty(anno.options.pageNumber) + ) { + found = true; + } + break; + case "reference": + case "text": + case "freetext": + found = true; + break; + } + } + if (found == false) { + return; + } + + this.internal.write("/Annots ["); + for (var i = 0; i < pageAnnos.length; i++) { + anno = pageAnnos[i]; + var escape = this.internal.pdfEscape; + var encryptor = this.internal.getEncryptor(putPageData.objId); + + switch (anno.type) { + case "reference": + // References to Widget Annotations (for AcroForm Fields) + this.internal.write(" " + anno.object.objId + " 0 R "); + break; + case "text": + // Create a an object for both the text and the popup + var objText = this.internal.newAdditionalObject(); + var objPopup = this.internal.newAdditionalObject(); + var encryptorText = this.internal.getEncryptor(objText.objId); + + var title = anno.title || "Note"; + rect = + "/Rect [" + + getHorizontalCoordinateString(anno.bounds.x) + + " " + + getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) + + " " + + getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) + + " " + + getVerticalCoordinateString(anno.bounds.y) + + "] "; + + line = + "<>"; + objText.content = line; + + var parent = objText.objId + " 0 R"; + var popoff = 30; + rect = + "/Rect [" + + getHorizontalCoordinateString(anno.bounds.x + popoff) + + " " + + getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) + + " " + + getHorizontalCoordinateString( + anno.bounds.x + anno.bounds.w + popoff + ) + + " " + + getVerticalCoordinateString(anno.bounds.y) + + "] "; + line = + "<>"; + } else if (anno.options.pageNumber) { + // first page is 0 + var info = this.internal.getPageInfo(anno.options.pageNumber); + line = + "< pageNumber or url [required] + *

    If pageNumber is specified, top and zoom may also be specified

    + * @name link + * @function + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @param {Object} options + */ + jsPDFAPI.link = function(x, y, w, h, options) { + var pageInfo = this.internal.getCurrentPageInfo(); + var getHorizontalCoordinateString = this.internal.getCoordinateString; + var getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + + pageInfo.pageContext.annotations.push({ + finalBounds: { + x: getHorizontalCoordinateString(x), + y: getVerticalCoordinateString(y), + w: getHorizontalCoordinateString(x + w), + h: getVerticalCoordinateString(y + h) + }, + options: options, + type: "link" + }); + }; + + /** + * Currently only supports single line text. + * Returns the width of the text/link + * + * @name textWithLink + * @function + * @param {string} text + * @param {number} x + * @param {number} y + * @param {Object} options + * @returns {number} width the width of the text/link + */ + jsPDFAPI.textWithLink = function(text, x, y, options) { + var totalLineWidth = this.getTextWidth(text); + var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor; + var linkHeight, linkWidth; + + // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line + if (options.maxWidth !== undefined) { + var { maxWidth } = options; + linkWidth = maxWidth; + var numOfLines = this.splitTextToSize(text, linkWidth).length; + linkHeight = Math.ceil(lineHeight * numOfLines); + } else { + linkWidth = totalLineWidth; + linkHeight = lineHeight; + } + + this.text(text, x, y, options); + + //TODO We really need the text baseline height to do this correctly. + // Or ability to draw text on top, bottom, center, or baseline. + y += lineHeight * 0.2; + //handle x position based on the align option + if (options.align === "center") { + x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width + } + if (options.align === "right") { + x = x - totalLineWidth; + } + this.link(x, y - lineHeight, linkWidth, linkHeight, options); + return totalLineWidth; + }; + + //TODO move into external library + /** + * @name getTextWidth + * @function + * @param {string} text + * @returns {number} txtWidth + */ + jsPDFAPI.getTextWidth = function(text) { + var fontSize = this.internal.getFontSize(); + var txtWidth = + (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor; + return txtWidth; + }; + + return this; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2017 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF arabic parser PlugIn + * + * @name arabic + * @module + */ +(function(jsPDFAPI) { + + /** + * Arabic shape substitutions: char code => (isolated, final, initial, medial). + * Arabic Substition A + */ + var arabicSubstitionA = { + 0x0621: [0xfe80], // ARABIC LETTER HAMZA + 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF + 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH + 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA + 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH + 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH + 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM + 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH + 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH + 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL + 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL + 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH + 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN + 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN + 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN + 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD + 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD + 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH + 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH + 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN + 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN + 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH + 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF + 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF + 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM + 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM + 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON + 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH + 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW + 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA + 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH + 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA + 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE + 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH + 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH + 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH + 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH + 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH + 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH + 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH + 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH + 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH + 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH + 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL + 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL + 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL + 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL + 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH + 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH + 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH + 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH + 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH + 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG + 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF + 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH + 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH + 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA + 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON + 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE + 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE + 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL + 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE + 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE + 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U + 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU + 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU + 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE + 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH + 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E + 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE + 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE + }; + + /* + var ligaturesSubstitutionA = { + 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM + }; + */ + + var ligatures = { + 0xfedf: { + 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM + 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + }, + 0xfee0: { + 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM + 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM + }, + 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH + 0x0651: { + 0x064c: 0xfc5e, // Shadda + Dammatan + 0x064d: 0xfc5f, // Shadda + Kasratan + 0x064e: 0xfc60, // Shadda + Fatha + 0x064f: 0xfc61, // Shadda + Damma + 0x0650: 0xfc62 // Shadda + Kasra + } + }; + + var arabic_diacritics = { + 1612: 64606, // Shadda + Dammatan + 1613: 64607, // Shadda + Kasratan + 1614: 64608, // Shadda + Fatha + 1615: 64609, // Shadda + Damma + 1616: 64610 // Shadda + Kasra + }; + + var alfletter = [1570, 1571, 1573, 1575]; + + var noChangeInForm = -1; + var isolatedForm = 0; + var finalForm = 1; + var initialForm = 2; + var medialForm = 3; + + jsPDFAPI.__arabicParser__ = {}; + + //private + var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function( + letter + ) { + return typeof arabicSubstitionA[letter.charCodeAt(0)] !== "undefined"; + }); + + var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function( + letter + ) { + return ( + typeof letter === "string" && + /^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test( + letter + ) + ); + }); + + var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function( + letter + ) { + return ( + isArabicLetter(letter) && + isInArabicSubstitutionA(letter) && + arabicSubstitionA[letter.charCodeAt(0)].length <= 2 + ); + }); + + var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function( + letter + ) { + return ( + isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0 + ); + }); + + jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) { + return ( + isArabicLetter(letter) && + isInArabicSubstitutionA(letter) && + arabicSubstitionA[letter.charCodeAt(0)].length >= 1 + ); + }; + + var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function( + letter + ) { + return ( + isArabicLetter(letter) && + isInArabicSubstitutionA(letter) && + arabicSubstitionA[letter.charCodeAt(0)].length >= 2 + ); + }); + + jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) { + return ( + isArabicLetter(letter) && + isInArabicSubstitutionA(letter) && + arabicSubstitionA[letter.charCodeAt(0)].length >= 3 + ); + }; + + var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function( + letter + ) { + return ( + isArabicLetter(letter) && + isInArabicSubstitutionA(letter) && + arabicSubstitionA[letter.charCodeAt(0)].length == 4 + ); + }); + + var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function( + letters + ) { + var i = 0; + var tmpLigatures = ligatures; + var result = ""; + var effectedLetters = 0; + + for (i = 0; i < letters.length; i += 1) { + if (typeof tmpLigatures[letters.charCodeAt(i)] !== "undefined") { + effectedLetters++; + tmpLigatures = tmpLigatures[letters.charCodeAt(i)]; + + if (typeof tmpLigatures === "number") { + result += String.fromCharCode(tmpLigatures); + tmpLigatures = ligatures; + effectedLetters = 0; + } + if (i === letters.length - 1) { + tmpLigatures = ligatures; + result += letters.charAt(i - (effectedLetters - 1)); + i = i - (effectedLetters - 1); + effectedLetters = 0; + } + } else { + tmpLigatures = ligatures; + result += letters.charAt(i - effectedLetters); + i = i - effectedLetters; + effectedLetters = 0; + } + } + + return result; + }); + + jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) { + return ( + letter !== undefined && + arabic_diacritics[letter.charCodeAt(0)] !== undefined + ); + }; + + var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function( + currentChar, + beforeChar, + nextChar + ) { + if (!isArabicLetter(currentChar)) { + return -1; + } + + if (isInArabicSubstitutionA(currentChar) === false) { + return noChangeInForm; + } + if ( + !arabicLetterHasFinalForm(currentChar) || + (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) || + (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) || + (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) || + (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) || + (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar)) + ) { + return isolatedForm; + } + + if ( + arabicLetterHasMedialForm(currentChar) && + isArabicLetter(beforeChar) && + !isArabicEndLetter(beforeChar) && + isArabicLetter(nextChar) && + arabicLetterHasFinalForm(nextChar) + ) { + return medialForm; + } + + if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) { + return finalForm; + } + return initialForm; + }); + + /** + * @name processArabic + * @function + * @param {string} text + * @returns {string} + */ + var parseArabic = function(text) { + text = text || ""; + + var result = ""; + var i = 0; + var j = 0; + var position = 0; + var currentLetter = ""; + var prevLetter = ""; + var nextLetter = ""; + + var words = text.split("\\s+"); + var newWords = []; + for (i = 0; i < words.length; i += 1) { + newWords.push(""); + for (j = 0; j < words[i].length; j += 1) { + currentLetter = words[i][j]; + prevLetter = words[i][j - 1]; + nextLetter = words[i][j + 1]; + if (isArabicLetter(currentLetter)) { + position = getCorrectForm(currentLetter, prevLetter, nextLetter); + if (position !== -1) { + newWords[i] += String.fromCharCode( + arabicSubstitionA[currentLetter.charCodeAt(0)][position] + ); + } else { + newWords[i] += currentLetter; + } + } else { + newWords[i] += currentLetter; + } + } + + newWords[i] = resolveLigatures(newWords[i]); + } + result = newWords.join(" "); + + return result; + }; + + var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() { + var text = + typeof arguments[0] === "string" ? arguments[0] : arguments[0].text; + var tmpText = []; + var result; + + if (Array.isArray(text)) { + var i = 0; + tmpText = []; + for (i = 0; i < text.length; i += 1) { + if (Array.isArray(text[i])) { + tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]); + } else { + tmpText.push([parseArabic(text[i])]); + } + } + result = tmpText; + } else { + result = parseArabic(text); + } + if (typeof arguments[0] === "string") { + return result; + } else { + arguments[0].text = result; + return arguments[0]; + } + }); + + jsPDFAPI.events.push(["preProcessText", processArabic]); +})(jsPDF.API); + +/** @license + * jsPDF Autoprint Plugin + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * @name autoprint + * @module + */ +(function(jsPDFAPI) { + + /** + * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer. + * + * @name autoPrint + * @function + * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer . + * @returns {jsPDF} + * @example + * var doc = new jsPDF(); + * doc.text(10, 10, 'This is a test'); + * doc.autoPrint({variant: 'non-conform'}); + * doc.save('autoprint.pdf'); + */ + jsPDFAPI.autoPrint = function(options) { + var refAutoPrintTag; + options = options || {}; + options.variant = options.variant || "non-conform"; + + switch (options.variant) { + case "javascript": + //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb + this.addJS("print({});"); + break; + case "non-conform": + default: + this.internal.events.subscribe("postPutResources", function() { + refAutoPrintTag = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/S /Named"); + this.internal.out("/Type /Action"); + this.internal.out("/N /Print"); + this.internal.out(">>"); + this.internal.out("endobj"); + }); + + this.internal.events.subscribe("putCatalog", function() { + this.internal.out("/OpenAction " + refAutoPrintTag + " 0 R"); + }); + break; + } + return this; + }; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF Canvas PlugIn + * This plugin mimics the HTML5 Canvas + * + * The goal is to provide a way for current canvas users to print directly to a PDF. + * @name canvas + * @module + */ +(function(jsPDFAPI) { + + /** + * @class Canvas + * @classdesc A Canvas Wrapper for jsPDF + */ + var Canvas = function() { + var jsPdfInstance = undefined; + Object.defineProperty(this, "pdf", { + get: function() { + return jsPdfInstance; + }, + set: function(value) { + jsPdfInstance = value; + } + }); + + var _width = 150; + /** + * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used. + * This is one of the two properties, the other being width, that controls the size of the canvas. + * + * @name width + */ + Object.defineProperty(this, "width", { + get: function() { + return _width; + }, + set: function(value) { + if (isNaN(value) || Number.isInteger(value) === false || value < 0) { + _width = 150; + } else { + _width = value; + } + if (this.getContext("2d").pageWrapXEnabled) { + this.getContext("2d").pageWrapX = _width + 1; + } + } + }); + + var _height = 300; + /** + * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used. + * This is one of the two properties, the other being height, that controls the size of the canvas. + * + * @name height + */ + Object.defineProperty(this, "height", { + get: function() { + return _height; + }, + set: function(value) { + if (isNaN(value) || Number.isInteger(value) === false || value < 0) { + _height = 300; + } else { + _height = value; + } + if (this.getContext("2d").pageWrapYEnabled) { + this.getContext("2d").pageWrapY = _height + 1; + } + } + }); + + var _childNodes = []; + Object.defineProperty(this, "childNodes", { + get: function() { + return _childNodes; + }, + set: function(value) { + _childNodes = value; + } + }); + + var _style = {}; + Object.defineProperty(this, "style", { + get: function() { + return _style; + }, + set: function(value) { + _style = value; + } + }); + + Object.defineProperty(this, "parentNode", {}); + }; + + /** + * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported. + * + * @name getContext + * @function + * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is "2d", leading to the creation of a Context2D object representing a two-dimensional rendering context. + * @param {object} contextAttributes + */ + Canvas.prototype.getContext = function(contextType, contextAttributes) { + contextType = contextType || "2d"; + var key; + + if (contextType !== "2d") { + return null; + } + for (key in contextAttributes) { + if (this.pdf.context2d.hasOwnProperty(key)) { + this.pdf.context2d[key] = contextAttributes[key]; + } + } + this.pdf.context2d._canvas = this; + return this.pdf.context2d; + }; + + /** + * The toDataURL() method is just a stub to throw an error if accidently called. + * + * @name toDataURL + * @function + */ + Canvas.prototype.toDataURL = function() { + throw new Error("toDataURL is not implemented."); + }; + + jsPDFAPI.events.push([ + "initialized", + function() { + this.canvas = new Canvas(); + this.canvas.pdf = this; + } + ]); + + return this; +})(jsPDF.API); + +/** + * @license + * ==================================================================== + * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com + * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Hall, james@parall.ax + * 2014 Diego Casorran, https://github.com/diegocr + * + * 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. + * ==================================================================== + */ + +/** + * @name cell + * @module + */ +(function(jsPDFAPI) { + + var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 }; + + var px2pt = (0.264583 * 72) / 25.4; + var printingHeaderRow = false; + + var _initialize = function() { + if (typeof this.internal.__cell__ === "undefined") { + this.internal.__cell__ = {}; + this.internal.__cell__.padding = 3; + this.internal.__cell__.headerFunction = undefined; + this.internal.__cell__.margins = Object.assign({}, NO_MARGINS); + this.internal.__cell__.margins.width = this.getPageWidth(); + _reset.call(this); + } + }; + + var _reset = function() { + this.internal.__cell__.lastCell = new Cell(); + this.internal.__cell__.pages = 1; + }; + + var Cell = function() { + var _x = arguments[0]; + Object.defineProperty(this, "x", { + enumerable: true, + get: function() { + return _x; + }, + set: function(value) { + _x = value; + } + }); + var _y = arguments[1]; + Object.defineProperty(this, "y", { + enumerable: true, + get: function() { + return _y; + }, + set: function(value) { + _y = value; + } + }); + var _width = arguments[2]; + Object.defineProperty(this, "width", { + enumerable: true, + get: function() { + return _width; + }, + set: function(value) { + _width = value; + } + }); + var _height = arguments[3]; + Object.defineProperty(this, "height", { + enumerable: true, + get: function() { + return _height; + }, + set: function(value) { + _height = value; + } + }); + var _text = arguments[4]; + Object.defineProperty(this, "text", { + enumerable: true, + get: function() { + return _text; + }, + set: function(value) { + _text = value; + } + }); + var _lineNumber = arguments[5]; + Object.defineProperty(this, "lineNumber", { + enumerable: true, + get: function() { + return _lineNumber; + }, + set: function(value) { + _lineNumber = value; + } + }); + var _align = arguments[6]; + Object.defineProperty(this, "align", { + enumerable: true, + get: function() { + return _align; + }, + set: function(value) { + _align = value; + } + }); + + return this; + }; + + Cell.prototype.clone = function() { + return new Cell( + this.x, + this.y, + this.width, + this.height, + this.text, + this.lineNumber, + this.align + ); + }; + + Cell.prototype.toArray = function() { + return [ + this.x, + this.y, + this.width, + this.height, + this.text, + this.lineNumber, + this.align + ]; + }; + + /** + * @name setHeaderFunction + * @function + * @param {function} func + */ + jsPDFAPI.setHeaderFunction = function(func) { + _initialize.call(this); + this.internal.__cell__.headerFunction = + typeof func === "function" ? func : undefined; + return this; + }; + + /** + * @name getTextDimensions + * @function + * @param {string} txt + * @returns {Object} dimensions + */ + jsPDFAPI.getTextDimensions = function(text, options) { + _initialize.call(this); + options = options || {}; + var fontSize = options.fontSize || this.getFontSize(); + var font = options.font || this.getFont(); + var scaleFactor = options.scaleFactor || this.internal.scaleFactor; + var width = 0; + var amountOfLines = 0; + var height = 0; + var tempWidth = 0; + var scope = this; + + if (!Array.isArray(text) && typeof text !== "string") { + if (typeof text === "number") { + text = String(text); + } else { + throw new Error( + "getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings." + ); + } + } + + const maxWidth = options.maxWidth; + if (maxWidth > 0) { + if (typeof text === "string") { + text = this.splitTextToSize(text, maxWidth); + } else if (Object.prototype.toString.call(text) === "[object Array]") { + text = text.reduce(function(acc, textLine) { + return acc.concat(scope.splitTextToSize(textLine, maxWidth)); + }, []); + } + } else { + // Without the else clause, it will not work if you do not pass along maxWidth + text = Array.isArray(text) ? text : [text]; + } + + for (var i = 0; i < text.length; i++) { + tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize; + if (width < tempWidth) { + width = tempWidth; + } + } + + if (width !== 0) { + amountOfLines = text.length; + } + + width = width / scaleFactor; + height = Math.max( + (amountOfLines * fontSize * this.getLineHeightFactor() - + fontSize * (this.getLineHeightFactor() - 1)) / + scaleFactor, + 0 + ); + return { w: width, h: height }; + }; + + /** + * @name cellAddPage + * @function + */ + jsPDFAPI.cellAddPage = function() { + _initialize.call(this); + + this.addPage(); + + var margins = this.internal.__cell__.margins || NO_MARGINS; + this.internal.__cell__.lastCell = new Cell( + margins.left, + margins.top, + undefined, + undefined + ); + this.internal.__cell__.pages += 1; + + return this; + }; + + /** + * @name cell + * @function + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {string} text + * @param {number} lineNumber lineNumber + * @param {string} align + * @return {jsPDF} jsPDF-instance + */ + var cell = (jsPDFAPI.cell = function() { + var currentCell; + + if (arguments[0] instanceof Cell) { + currentCell = arguments[0]; + } else { + currentCell = new Cell( + arguments[0], + arguments[1], + arguments[2], + arguments[3], + arguments[4], + arguments[5] + ); + } + _initialize.call(this); + var lastCell = this.internal.__cell__.lastCell; + var padding = this.internal.__cell__.padding; + var margins = this.internal.__cell__.margins || NO_MARGINS; + var tableHeaderRow = this.internal.__cell__.tableHeaderRow; + var printHeaders = this.internal.__cell__.printHeaders; + // If this is not the first cell, we must change its position + if (typeof lastCell.lineNumber !== "undefined") { + if (lastCell.lineNumber === currentCell.lineNumber) { + //Same line + currentCell.x = (lastCell.x || 0) + (lastCell.width || 0); + currentCell.y = lastCell.y || 0; + } else { + //New line + if ( + lastCell.y + lastCell.height + currentCell.height + margins.bottom > + this.getPageHeight() + ) { + this.cellAddPage(); + currentCell.y = margins.top; + if (printHeaders && tableHeaderRow) { + this.printHeaderRow(currentCell.lineNumber, true); + currentCell.y += tableHeaderRow[0].height; + } + } else { + currentCell.y = lastCell.y + lastCell.height || currentCell.y; + } + } + } + + if (typeof currentCell.text[0] !== "undefined") { + this.rect( + currentCell.x, + currentCell.y, + currentCell.width, + currentCell.height, + printingHeaderRow === true ? "FD" : undefined + ); + if (currentCell.align === "right") { + this.text( + currentCell.text, + currentCell.x + currentCell.width - padding, + currentCell.y + padding, + { align: "right", baseline: "top" } + ); + } else if (currentCell.align === "center") { + this.text( + currentCell.text, + currentCell.x + currentCell.width / 2, + currentCell.y + padding, + { + align: "center", + baseline: "top", + maxWidth: currentCell.width - padding - padding + } + ); + } else { + this.text( + currentCell.text, + currentCell.x + padding, + currentCell.y + padding, + { + align: "left", + baseline: "top", + maxWidth: currentCell.width - padding - padding + } + ); + } + } + this.internal.__cell__.lastCell = currentCell; + return this; + }); + + /** + * Create a table from a set of data. + * @name table + * @function + * @param {Integer} [x] : left-position for top-left corner of table + * @param {Integer} [y] top-position for top-left corner of table + * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data. + * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost + + * @param {Object} [config.printHeaders] True to print column headers at the top of every page + * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value + * @param {Object} [config.margins] margin values for left, top, bottom, and width + * @param {Object} [config.fontSize] Integer fontSize to use (optional) + * @param {Object} [config.padding] cell-padding in pt to use (optional) + * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional) + * @param {Object} [config.headerTextColor] default is #000 (optional) + * @param {Object} [config.rowStart] callback to handle before print each row (optional) + * @param {Object} [config.cellStart] callback to handle before print each cell (optional) + * @returns {jsPDF} jsPDF-instance + */ + + jsPDFAPI.table = function(x, y, data, headers, config) { + _initialize.call(this); + if (!data) { + throw new Error("No data for PDF table."); + } + + config = config || {}; + + var headerNames = [], + headerLabels = [], + headerAligns = [], + i, + columnMatrix = {}, + columnWidths = {}, + column, + columnMinWidths = [], + j, + tableHeaderConfigs = [], + //set up defaults. If a value is provided in config, defaults will be overwritten: + autoSize = config.autoSize || false, + printHeaders = config.printHeaders === false ? false : true, + fontSize = + config.css && typeof config.css["font-size"] !== "undefined" + ? config.css["font-size"] * 16 + : config.fontSize || 12, + margins = + config.margins || + Object.assign({ width: this.getPageWidth() }, NO_MARGINS), + padding = typeof config.padding === "number" ? config.padding : 3, + headerBackgroundColor = config.headerBackgroundColor || "#c8c8c8", + headerTextColor = config.headerTextColor || "#000"; + + _reset.call(this); + + this.internal.__cell__.printHeaders = printHeaders; + this.internal.__cell__.margins = margins; + this.internal.__cell__.table_font_size = fontSize; + this.internal.__cell__.padding = padding; + this.internal.__cell__.headerBackgroundColor = headerBackgroundColor; + this.internal.__cell__.headerTextColor = headerTextColor; + this.setFontSize(fontSize); + + // Set header values + if (headers === undefined || headers === null) { + // No headers defined so we derive from data + headerNames = Object.keys(data[0]); + headerLabels = headerNames; + headerAligns = headerNames.map(function() { + return "left"; + }); + } else if (Array.isArray(headers) && typeof headers[0] === "object") { + headerNames = headers.map(function(header) { + return header.name; + }); + headerLabels = headers.map(function(header) { + return header.prompt || header.name || ""; + }); + headerAligns = headers.map(function(header) { + return header.align || "left"; + }); + // Split header configs into names and prompts + for (i = 0; i < headers.length; i += 1) { + columnWidths[headers[i].name] = headers[i].width * px2pt; + } + } else if (Array.isArray(headers) && typeof headers[0] === "string") { + headerNames = headers; + headerLabels = headerNames; + headerAligns = headerNames.map(function() { + return "left"; + }); + } + + if ( + autoSize || + (Array.isArray(headers) && typeof headers[0] === "string") + ) { + var headerName; + for (i = 0; i < headerNames.length; i += 1) { + headerName = headerNames[i]; + + // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]} + + columnMatrix[headerName] = data.map(function(rec) { + return rec[headerName]; + }); + + // get header width + this.setFont(undefined, "bold"); + columnMinWidths.push( + this.getTextDimensions(headerLabels[i], { + fontSize: this.internal.__cell__.table_font_size, + scaleFactor: this.internal.scaleFactor + }).w + ); + column = columnMatrix[headerName]; + + // get cell widths + this.setFont(undefined, "normal"); + for (j = 0; j < column.length; j += 1) { + columnMinWidths.push( + this.getTextDimensions(column[j], { + fontSize: this.internal.__cell__.table_font_size, + scaleFactor: this.internal.scaleFactor + }).w + ); + } + + // get final column width + columnWidths[headerName] = + Math.max.apply(null, columnMinWidths) + padding + padding; + + //have to reset + columnMinWidths = []; + } + } + + // -- Construct the table + + if (printHeaders) { + var row = {}; + for (i = 0; i < headerNames.length; i += 1) { + row[headerNames[i]] = {}; + row[headerNames[i]].text = headerLabels[i]; + row[headerNames[i]].align = headerAligns[i]; + } + + var rowHeight = calculateLineHeight.call(this, row, columnWidths); + + // Construct the header row + tableHeaderConfigs = headerNames.map(function(value) { + return new Cell( + x, + y, + columnWidths[value], + rowHeight, + row[value].text, + undefined, + row[value].align + ); + }); + + // Store the table header config + this.setTableHeaderRow(tableHeaderConfigs); + + // Print the header for the start of the table + this.printHeaderRow(1, false); + } + + // Construct the data rows + + var align = headers.reduce(function(pv, cv) { + pv[cv.name] = cv.align; + return pv; + }, {}); + for (i = 0; i < data.length; i += 1) { + if ("rowStart" in config && config.rowStart instanceof Function) { + config.rowStart( + { + row: i, + data: data[i] + }, + this + ); + } + var lineHeight = calculateLineHeight.call(this, data[i], columnWidths); + + for (j = 0; j < headerNames.length; j += 1) { + var cellData = data[i][headerNames[j]]; + if ("cellStart" in config && config.cellStart instanceof Function) { + config.cellStart( + { + row: i, + col: j, + data: cellData + }, + this + ); + } + cell.call( + this, + new Cell( + x, + y, + columnWidths[headerNames[j]], + lineHeight, + cellData, + i + 2, + align[headerNames[j]] + ) + ); + } + } + this.internal.__cell__.table_x = x; + this.internal.__cell__.table_y = y; + return this; + }; + + /** + * Calculate the height for containing the highest column + * + * @name calculateLineHeight + * @function + * @param {Object[]} model is the line of data we want to calculate the height of + * @param {Integer[]} columnWidths is size of each column + * @returns {number} lineHeight + * @private + */ + var calculateLineHeight = function calculateLineHeight(model, columnWidths) { + var padding = this.internal.__cell__.padding; + var fontSize = this.internal.__cell__.table_font_size; + var scaleFactor = this.internal.scaleFactor; + + return Object.keys(model) + .map(function(key) { + var value = model[key]; + return this.splitTextToSize( + value.hasOwnProperty("text") ? value.text : value, + columnWidths[key] - padding - padding + ); + }, this) + .map(function(value) { + return ( + (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor + + padding + + padding + ); + }, this) + .reduce(function(pv, cv) { + return Math.max(pv, cv); + }, 0); + }; + + /** + * Store the config for outputting a table header + * + * @name setTableHeaderRow + * @function + * @param {Object[]} config + * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell + * except the lineNumber parameter is excluded + */ + jsPDFAPI.setTableHeaderRow = function(config) { + _initialize.call(this); + this.internal.__cell__.tableHeaderRow = config; + }; + + /** + * Output the store header row + * + * @name printHeaderRow + * @function + * @param {number} lineNumber The line number to output the header at + * @param {boolean} new_page + */ + jsPDFAPI.printHeaderRow = function(lineNumber, new_page) { + _initialize.call(this); + if (!this.internal.__cell__.tableHeaderRow) { + throw new Error("Property tableHeaderRow does not exist."); + } + + var tableHeaderCell; + + printingHeaderRow = true; + if (typeof this.internal.__cell__.headerFunction === "function") { + var position = this.internal.__cell__.headerFunction( + this, + this.internal.__cell__.pages + ); + this.internal.__cell__.lastCell = new Cell( + position[0], + position[1], + position[2], + position[3], + undefined, + -1 + ); + } + this.setFont(undefined, "bold"); + + var tempHeaderConf = []; + for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) { + tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone(); + if (new_page) { + tableHeaderCell.y = this.internal.__cell__.margins.top || 0; + tempHeaderConf.push(tableHeaderCell); + } + tableHeaderCell.lineNumber = lineNumber; + var currentTextColor = this.getTextColor(); + this.setTextColor(this.internal.__cell__.headerTextColor); + this.setFillColor(this.internal.__cell__.headerBackgroundColor); + cell.call(this, tableHeaderCell); + this.setTextColor(currentTextColor); + } + if (tempHeaderConf.length > 0) { + this.setTableHeaderRow(tempHeaderConf); + } + this.setFont(undefined, "normal"); + printingHeaderRow = false; + }; +})(jsPDF.API); + +function toLookup(arr) { + return arr.reduce(function(lookup, name, index) { + lookup[name] = index; + + return lookup; + }, {}); +} + +var fontStyleOrder = { + italic: ["italic", "oblique", "normal"], + oblique: ["oblique", "italic", "normal"], + normal: ["normal", "oblique", "italic"] +}; + +var fontStretchOrder = [ + "ultra-condensed", + "extra-condensed", + "condensed", + "semi-condensed", + "normal", + "semi-expanded", + "expanded", + "extra-expanded", + "ultra-expanded" +]; + +// For a given font-stretch value, we need to know where to start our search +// from in the fontStretchOrder list. +var fontStretchLookup = toLookup(fontStretchOrder); + +var fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900]; +var fontWeightsLookup = toLookup(fontWeights); + +function normalizeFontStretch(stretch) { + stretch = stretch || "normal"; + + return typeof fontStretchLookup[stretch] === "number" ? stretch : "normal"; +} + +function normalizeFontStyle(style) { + style = style || "normal"; + + return fontStyleOrder[style] ? style : "normal"; +} + +function normalizeFontWeight(weight) { + if (!weight) { + return 400; + } + + if (typeof weight === "number") { + // Ignore values which aren't valid font-weights. + return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400; + } + + if (/^\d00$/.test(weight)) { + return parseInt(weight); + } + + switch (weight) { + case "bold": + return 700; + + case "normal": + default: + return 400; + } +} + +function normalizeFontFace(fontFace) { + var family = fontFace.family.replace(/"|'/g, "").toLowerCase(); + + var style = normalizeFontStyle(fontFace.style); + var weight = normalizeFontWeight(fontFace.weight); + var stretch = normalizeFontStretch(fontFace.stretch); + + return { + family: family, + style: style, + weight: weight, + stretch: stretch, + src: fontFace.src || [], + + // The ref property maps this font-face to the font + // added by the .addFont() method. + ref: fontFace.ref || { + name: family, + style: [stretch, style, weight].join(" ") + } + }; +} + +/** + * Turns a list of font-faces into a map, for easier lookup when resolving + * fonts. + * @private + */ +function buildFontFaceMap(fontFaces) { + var map = {}; + + for (var i = 0; i < fontFaces.length; ++i) { + var normalized = normalizeFontFace(fontFaces[i]); + + var name = normalized.family; + var stretch = normalized.stretch; + var style = normalized.style; + var weight = normalized.weight; + + map[name] = map[name] || {}; + + map[name][stretch] = map[name][stretch] || {}; + map[name][stretch][style] = map[name][stretch][style] || {}; + map[name][stretch][style][weight] = normalized; + } + + return map; +} + +/** + * Searches a map of stretches, weights, etc. in the given direction and + * then, if no match has been found, in the opposite directions. + * + * @param {Object.} matchingSet A map of the various font variations. + * @param {any[]} order The order of the different variations + * @param {number} pivot The starting point of the search in the order list. + * @param {number} dir The initial direction of the search (desc = -1, asc = 1) + * @private + */ + +function searchFromPivot(matchingSet, order, pivot, dir) { + var i; + + for (i = pivot; i >= 0 && i < order.length; i += dir) { + if (matchingSet[order[i]]) { + return matchingSet[order[i]]; + } + } + + for (i = pivot; i >= 0 && i < order.length; i -= dir) { + if (matchingSet[order[i]]) { + return matchingSet[order[i]]; + } + } +} + +function resolveFontStretch(stretch, matchingSet) { + if (matchingSet[stretch]) { + return matchingSet[stretch]; + } + + var pivot = fontStretchLookup[stretch]; + + // If the font-stretch value is normal or more condensed, we want to + // start with a descending search, otherwise we should do ascending. + var dir = pivot <= fontStretchLookup["normal"] ? -1 : 1; + var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir); + + if (!match) { + // Since a font-family cannot exist without having at least one stretch value + // we should never reach this point. + throw new Error( + "Could not find a matching font-stretch value for " + stretch + ); + } + + return match; +} + +function resolveFontStyle(fontStyle, matchingSet) { + if (matchingSet[fontStyle]) { + return matchingSet[fontStyle]; + } + + var ordering = fontStyleOrder[fontStyle]; + + for (var i = 0; i < ordering.length; ++i) { + if (matchingSet[ordering[i]]) { + return matchingSet[ordering[i]]; + } + } + + // Since a font-family cannot exist without having at least one style value + // we should never reach this point. + throw new Error("Could not find a matching font-style for " + fontStyle); +} + +function resolveFontWeight(weight, matchingSet) { + if (matchingSet[weight]) { + return matchingSet[weight]; + } + + if (weight === 400 && matchingSet[500]) { + return matchingSet[500]; + } + + if (weight === 500 && matchingSet[400]) { + return matchingSet[400]; + } + + var pivot = fontWeightsLookup[weight]; + + // If the font-stretch value is normal or more condensed, we want to + // start with a descending search, otherwise we should do ascending. + var dir = weight < 400 ? -1 : 1; + var match = searchFromPivot(matchingSet, fontWeights, pivot, dir); + + if (!match) { + // Since a font-family cannot exist without having at least one stretch value + // we should never reach this point. + throw new Error( + "Could not find a matching font-weight for value " + weight + ); + } + + return match; +} + +var defaultGenericFontFamilies = { + "sans-serif": "helvetica", + fixed: "courier", + monospace: "courier", + terminal: "courier", + cursive: "times", + fantasy: "times", + serif: "times" +}; + +var systemFonts = { + caption: "times", + icon: "times", + menu: "times", + "message-box": "times", + "small-caption": "times", + "status-bar": "times" +}; + +function ruleToString(rule) { + return [rule.stretch, rule.style, rule.weight, rule.family].join(" "); +} + +function resolveFontFace(fontFaceMap, rules, opts) { + opts = opts || {}; + + var defaultFontFamily = opts.defaultFontFamily || "times"; + var genericFontFamilies = Object.assign( + {}, + defaultGenericFontFamilies, + opts.genericFontFamilies || {} + ); + + var rule = null; + var matches = null; + + for (var i = 0; i < rules.length; ++i) { + rule = normalizeFontFace(rules[i]); + + if (genericFontFamilies[rule.family]) { + rule.family = genericFontFamilies[rule.family]; + } + + if (fontFaceMap.hasOwnProperty(rule.family)) { + matches = fontFaceMap[rule.family]; + + break; + } + } + + // Always fallback to a known font family. + matches = matches || fontFaceMap[defaultFontFamily]; + + if (!matches) { + // At this point we should definitiely have a font family, but if we + // don't there is something wrong with our configuration + throw new Error( + "Could not find a font-family for the rule '" + + ruleToString(rule) + + "' and default family '" + + defaultFontFamily + + "'." + ); + } + + matches = resolveFontStretch(rule.stretch, matches); + matches = resolveFontStyle(rule.style, matches); + matches = resolveFontWeight(rule.weight, matches); + + if (!matches) { + // We should've fount + throw new Error( + "Failed to resolve a font for the rule '" + ruleToString(rule) + "'." + ); + } + + return matches; +} + +function eatWhiteSpace(input) { + return input.trimLeft(); +} + +function parseQuotedFontFamily(input, quote) { + var index = 0; + + while (index < input.length) { + var current = input.charAt(index); + + if (current === quote) { + return [input.substring(0, index), input.substring(index + 1)]; + } + + index += 1; + } + + // Unexpected end of input + return null; +} + +function parseNonQuotedFontFamily(input) { + // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + // + // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode. + // + // Breakdown of regexp: + // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit + // [a-z_] - allow a-z and underscore at beginning of input + // [a-z0-9_-]* - after that, anything goes + var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i); + + // non quoted value contains illegal characters + if (match === null) { + return null; + } + + return [match[0], input.substring(match[0].length)]; +} + +var defaultFont = ["times"]; + +function parseFontFamily(input) { + var result = []; + var ch, parsed; + var remaining = input.trim(); + + if (remaining === "") { + return defaultFont; + } + + if (remaining in systemFonts) { + return [systemFonts[remaining]]; + } + + while (remaining !== "") { + parsed = null; + remaining = eatWhiteSpace(remaining); + ch = remaining.charAt(0); + + switch (ch) { + case '"': + case "'": + parsed = parseQuotedFontFamily(remaining.substring(1), ch); + break; + + default: + parsed = parseNonQuotedFontFamily(remaining); + break; + } + + if (parsed === null) { + return defaultFont; + } + + result.push(parsed[0]); + + remaining = eatWhiteSpace(parsed[1]); + + // We expect end of input or a comma separator here + if (remaining !== "" && remaining.charAt(0) !== ",") { + return defaultFont; + } + + remaining = remaining.replace(/^,/, ""); + } + + return result; +} + +/* eslint-disable no-fallthrough */ + +/** + * This plugin mimics the HTML5 CanvasRenderingContext2D. + * + * The goal is to provide a way for current canvas implementations to print directly to a PDF. + * + * @name context2d + * @module + */ +(function(jsPDFAPI) { + var ContextLayer = function(ctx) { + ctx = ctx || {}; + this.isStrokeTransparent = ctx.isStrokeTransparent || false; + this.strokeOpacity = ctx.strokeOpacity || 1; + this.strokeStyle = ctx.strokeStyle || "#000000"; + this.fillStyle = ctx.fillStyle || "#000000"; + this.isFillTransparent = ctx.isFillTransparent || false; + this.fillOpacity = ctx.fillOpacity || 1; + this.font = ctx.font || "10px sans-serif"; + this.textBaseline = ctx.textBaseline || "alphabetic"; + this.textAlign = ctx.textAlign || "left"; + this.lineWidth = ctx.lineWidth || 1; + this.lineJoin = ctx.lineJoin || "miter"; + this.lineCap = ctx.lineCap || "butt"; + this.path = ctx.path || []; + this.transform = + typeof ctx.transform !== "undefined" + ? ctx.transform.clone() + : new Matrix(); + this.globalCompositeOperation = ctx.globalCompositeOperation || "normal"; + this.globalAlpha = ctx.globalAlpha || 1.0; + this.clip_path = ctx.clip_path || []; + this.currentPoint = ctx.currentPoint || new Point(); + this.miterLimit = ctx.miterLimit || 10.0; + this.lastPoint = ctx.lastPoint || new Point(); + this.lineDashOffset = ctx.lineDashOffset || 0.0; + this.lineDash = ctx.lineDash || []; + this.margin = ctx.margin || [0, 0, 0, 0]; + this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0; + + this.ignoreClearRect = + typeof ctx.ignoreClearRect === "boolean" ? ctx.ignoreClearRect : true; + return this; + }; + + //stub + var f2, + getHorizontalCoordinateString, + getVerticalCoordinateString, + getHorizontalCoordinate, + getVerticalCoordinate, + Point, + Rectangle, + Matrix, + _ctx; + jsPDFAPI.events.push([ + "initialized", + function() { + this.context2d = new Context2D(this); + + f2 = this.internal.f2; + getHorizontalCoordinateString = this.internal.getCoordinateString; + getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + getHorizontalCoordinate = this.internal.getHorizontalCoordinate; + getVerticalCoordinate = this.internal.getVerticalCoordinate; + Point = this.internal.Point; + Rectangle = this.internal.Rectangle; + Matrix = this.internal.Matrix; + _ctx = new ContextLayer(); + } + ]); + + var Context2D = function(pdf) { + Object.defineProperty(this, "canvas", { + get: function() { + return { parentNode: false, style: false }; + } + }); + + var _pdf = pdf; + Object.defineProperty(this, "pdf", { + get: function() { + return _pdf; + } + }); + + var _pageWrapXEnabled = false; + /** + * @name pageWrapXEnabled + * @type {boolean} + * @default false + */ + Object.defineProperty(this, "pageWrapXEnabled", { + get: function() { + return _pageWrapXEnabled; + }, + set: function(value) { + _pageWrapXEnabled = Boolean(value); + } + }); + + var _pageWrapYEnabled = false; + /** + * @name pageWrapYEnabled + * @type {boolean} + * @default true + */ + Object.defineProperty(this, "pageWrapYEnabled", { + get: function() { + return _pageWrapYEnabled; + }, + set: function(value) { + _pageWrapYEnabled = Boolean(value); + } + }); + + var _posX = 0; + /** + * @name posX + * @type {number} + * @default 0 + */ + Object.defineProperty(this, "posX", { + get: function() { + return _posX; + }, + set: function(value) { + if (!isNaN(value)) { + _posX = value; + } + } + }); + + var _posY = 0; + /** + * @name posY + * @type {number} + * @default 0 + */ + Object.defineProperty(this, "posY", { + get: function() { + return _posY; + }, + set: function(value) { + if (!isNaN(value)) { + _posY = value; + } + } + }); + + /** + * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off. + * @name margin + * @type {number|number[]} + * @default [0, 0, 0, 0] + */ + Object.defineProperty(this, "margin", { + get: function() { + return _ctx.margin; + }, + set: function(value) { + var margin; + if (typeof value === "number") { + margin = [value, value, value, value]; + } else { + margin = new Array(4); + margin[0] = value[0]; + margin[1] = value.length >= 2 ? value[1] : margin[0]; + margin[2] = value.length >= 3 ? value[2] : margin[0]; + margin[3] = value.length >= 4 ? value[3] : margin[1]; + } + _ctx.margin = margin; + } + }); + + var _autoPaging = false; + /** + * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the + * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new + * pages if required. + * + * Context2d supports different modes: + *
      + *
    • + * false: Auto paging is disabled. + *
    • + *
    • + * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly + * slice text in half, making it difficult to read. + *
    • + *
    • + * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting + * mostly of a single column of text. + *
    • + *
    + * @name Context2D#autoPaging + * @type {boolean|"slice"|"text"} + * @default false + */ + Object.defineProperty(this, "autoPaging", { + get: function() { + return _autoPaging; + }, + set: function(value) { + _autoPaging = value; + } + }); + + var lastBreak = 0; + /** + * @name lastBreak + * @type {number} + * @default 0 + */ + Object.defineProperty(this, "lastBreak", { + get: function() { + return lastBreak; + }, + set: function(value) { + lastBreak = value; + } + }); + + var pageBreaks = []; + /** + * Y Position of page breaks. + * @name pageBreaks + * @type {number} + * @default 0 + */ + Object.defineProperty(this, "pageBreaks", { + get: function() { + return pageBreaks; + }, + set: function(value) { + pageBreaks = value; + } + }); + + /** + * @name ctx + * @type {object} + * @default {} + */ + Object.defineProperty(this, "ctx", { + get: function() { + return _ctx; + }, + set: function(value) { + if (value instanceof ContextLayer) { + _ctx = value; + } + } + }); + + /** + * @name path + * @type {array} + * @default [] + */ + Object.defineProperty(this, "path", { + get: function() { + return _ctx.path; + }, + set: function(value) { + _ctx.path = value; + } + }); + + /** + * @name ctxStack + * @type {array} + * @default [] + */ + var _ctxStack = []; + Object.defineProperty(this, "ctxStack", { + get: function() { + return _ctxStack; + }, + set: function(value) { + _ctxStack = value; + } + }); + + /** + * Sets or returns the color, gradient, or pattern used to fill the drawing + * + * @name fillStyle + * @default #000000 + * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    + * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    + * A pattern object to use to fill the drawing (not supported by context2d) + */ + Object.defineProperty(this, "fillStyle", { + get: function() { + return this.ctx.fillStyle; + }, + set: function(value) { + var rgba; + rgba = getRGBA(value); + + this.ctx.fillStyle = rgba.style; + this.ctx.isFillTransparent = rgba.a === 0; + this.ctx.fillOpacity = rgba.a; + + this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a }); + this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a }); + } + }); + + /** + * Sets or returns the color, gradient, or pattern used for strokes + * + * @name strokeStyle + * @default #000000 + * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d) + * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d) + * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d) + */ + Object.defineProperty(this, "strokeStyle", { + get: function() { + return this.ctx.strokeStyle; + }, + set: function(value) { + var rgba = getRGBA(value); + + this.ctx.strokeStyle = rgba.style; + this.ctx.isStrokeTransparent = rgba.a === 0; + this.ctx.strokeOpacity = rgba.a; + + if (rgba.a === 0) { + this.pdf.setDrawColor(255, 255, 255); + } else if (rgba.a === 1) { + this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b); + } else { + this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b); + } + } + }); + + /** + * Sets or returns the style of the end caps for a line + * + * @name lineCap + * @default butt + * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    + * round A rounded end cap is added to each end of the line
    + * square A square end cap is added to each end of the line
    + */ + Object.defineProperty(this, "lineCap", { + get: function() { + return this.ctx.lineCap; + }, + set: function(value) { + if (["butt", "round", "square"].indexOf(value) !== -1) { + this.ctx.lineCap = value; + this.pdf.setLineCap(value); + } + } + }); + + /** + * Sets or returns the current line width + * + * @name lineWidth + * @default 1 + * @property {number} lineWidth The current line width, in pixels + */ + Object.defineProperty(this, "lineWidth", { + get: function() { + return this.ctx.lineWidth; + }, + set: function(value) { + if (!isNaN(value)) { + this.ctx.lineWidth = value; + this.pdf.setLineWidth(value); + } + } + }); + + /** + * Sets or returns the type of corner created, when two lines meet + */ + Object.defineProperty(this, "lineJoin", { + get: function() { + return this.ctx.lineJoin; + }, + set: function(value) { + if (["bevel", "round", "miter"].indexOf(value) !== -1) { + this.ctx.lineJoin = value; + this.pdf.setLineJoin(value); + } + } + }); + + /** + * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0. + * + * @name miterLimit + * @default 10 + */ + Object.defineProperty(this, "miterLimit", { + get: function() { + return this.ctx.miterLimit; + }, + set: function(value) { + if (!isNaN(value)) { + this.ctx.miterLimit = value; + this.pdf.setMiterLimit(value); + } + } + }); + + Object.defineProperty(this, "textBaseline", { + get: function() { + return this.ctx.textBaseline; + }, + set: function(value) { + this.ctx.textBaseline = value; + } + }); + + Object.defineProperty(this, "textAlign", { + get: function() { + return this.ctx.textAlign; + }, + set: function(value) { + if (["right", "end", "center", "left", "start"].indexOf(value) !== -1) { + this.ctx.textAlign = value; + } + } + }); + + var _fontFaceMap = null; + + function getFontFaceMap(pdf, fontFaces) { + if (_fontFaceMap === null) { + var fontMap = pdf.getFontList(); + + var convertedFontFaces = convertToFontFaces(fontMap); + + _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces)); + } + + return _fontFaceMap; + } + + function convertToFontFaces(fontMap) { + var fontFaces = []; + + Object.keys(fontMap).forEach(function(family) { + var styles = fontMap[family]; + + styles.forEach(function(style) { + var fontFace = null; + + switch (style) { + case "bold": + fontFace = { + family: family, + weight: "bold" + }; + break; + + case "italic": + fontFace = { + family: family, + style: "italic" + }; + break; + + case "bolditalic": + fontFace = { + family: family, + weight: "bold", + style: "italic" + }; + break; + + case "": + case "normal": + fontFace = { + family: family + }; + break; + } + + // If font-face is still null here, it is a font with some styling we don't recognize and + // cannot map or it is a font added via the fontFaces option of .html(). + if (fontFace !== null) { + fontFace.ref = { + name: family, + style: style + }; + + fontFaces.push(fontFace); + } + }); + }); + + return fontFaces; + } + + var _fontFaces = null; + /** + * A map of available font-faces, as passed in the options of + * .html(). If set a limited implementation of the font style matching + * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm + * will be used. If not set it will fallback to previous behavior. + */ + + Object.defineProperty(this, "fontFaces", { + get: function() { + return _fontFaces; + }, + set: function(value) { + _fontFaceMap = null; + _fontFaces = value; + } + }); + + Object.defineProperty(this, "font", { + get: function() { + return this.ctx.font; + }, + set: function(value) { + this.ctx.font = value; + var rx, matches; + + //source: https://stackoverflow.com/a/10136041 + // eslint-disable-next-line no-useless-escape + rx = /^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z]+?)\s*$/i; + matches = rx.exec(value); + if (matches !== null) { + var fontStyle = matches[1]; + var fontVariant = matches[2]; + var fontWeight = matches[3]; + var fontSize = matches[4]; + var lineHeight = matches[5]; + var fontFamily = matches[6]; + } else { + return; + } + var rxFontSize = /^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i; + var fontSizeUnit = rxFontSize.exec(fontSize)[2]; + + if ("px" === fontSizeUnit) { + fontSize = Math.floor( + parseFloat(fontSize) * this.pdf.internal.scaleFactor + ); + } else if ("em" === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); + } else { + fontSize = Math.floor( + parseFloat(fontSize) * this.pdf.internal.scaleFactor + ); + } + + this.pdf.setFontSize(fontSize); + var parts = parseFontFamily(fontFamily); + + if (this.fontFaces) { + var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces); + + var rules = parts.map(function(ff) { + return { + family: ff, + stretch: "normal", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?) + weight: fontWeight, + style: fontStyle + }; + }); + + var font = resolveFontFace(fontFaceMap, rules); + this.pdf.setFont(font.ref.name, font.ref.style); + return; + } + + var style = ""; + if ( + fontWeight === "bold" || + parseInt(fontWeight, 10) >= 700 || + fontStyle === "bold" + ) { + style = "bold"; + } + + if (fontStyle === "italic") { + style += "italic"; + } + + if (style.length === 0) { + style = "normal"; + } + var jsPdfFontName = ""; + + var fallbackFonts = { + arial: "Helvetica", + Arial: "Helvetica", + verdana: "Helvetica", + Verdana: "Helvetica", + helvetica: "Helvetica", + Helvetica: "Helvetica", + "sans-serif": "Helvetica", + fixed: "Courier", + monospace: "Courier", + terminal: "Courier", + cursive: "Times", + fantasy: "Times", + serif: "Times" + }; + + for (var i = 0; i < parts.length; i++) { + if ( + this.pdf.internal.getFont(parts[i], style, { + noFallback: true, + disableWarning: true + }) !== undefined + ) { + jsPdfFontName = parts[i]; + break; + } else if ( + style === "bolditalic" && + this.pdf.internal.getFont(parts[i], "bold", { + noFallback: true, + disableWarning: true + }) !== undefined + ) { + jsPdfFontName = parts[i]; + style = "bold"; + } else if ( + this.pdf.internal.getFont(parts[i], "normal", { + noFallback: true, + disableWarning: true + }) !== undefined + ) { + jsPdfFontName = parts[i]; + style = "normal"; + break; + } + } + if (jsPdfFontName === "") { + for (var j = 0; j < parts.length; j++) { + if (fallbackFonts[parts[j]]) { + jsPdfFontName = fallbackFonts[parts[j]]; + break; + } + } + } + jsPdfFontName = jsPdfFontName === "" ? "Times" : jsPdfFontName; + this.pdf.setFont(jsPdfFontName, style); + } + }); + + Object.defineProperty(this, "globalCompositeOperation", { + get: function() { + return this.ctx.globalCompositeOperation; + }, + set: function(value) { + this.ctx.globalCompositeOperation = value; + } + }); + + Object.defineProperty(this, "globalAlpha", { + get: function() { + return this.ctx.globalAlpha; + }, + set: function(value) { + this.ctx.globalAlpha = value; + } + }); + + /** + * A float specifying the amount of the line dash offset. The default value is 0.0. + * + * @name lineDashOffset + * @default 0.0 + */ + Object.defineProperty(this, "lineDashOffset", { + get: function() { + return this.ctx.lineDashOffset; + }, + set: function(value) { + this.ctx.lineDashOffset = value; + setLineDash.call(this); + } + }); + + // Not HTML API + Object.defineProperty(this, "lineDash", { + get: function() { + return this.ctx.lineDash; + }, + set: function(value) { + this.ctx.lineDash = value; + setLineDash.call(this); + } + }); + + // Not HTML API + Object.defineProperty(this, "ignoreClearRect", { + get: function() { + return this.ctx.ignoreClearRect; + }, + set: function(value) { + this.ctx.ignoreClearRect = Boolean(value); + } + }); + }; + + /** + * Sets the line dash pattern used when stroking lines. + * @name setLineDash + * @function + * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern. + */ + Context2D.prototype.setLineDash = function(dashArray) { + this.lineDash = dashArray; + }; + + /** + * gets the current line dash pattern. + * @name getLineDash + * @function + * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25]. + */ + Context2D.prototype.getLineDash = function() { + if (this.lineDash.length % 2) { + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value + return this.lineDash.concat(this.lineDash); + } else { + // The copied value is returned to prevent contamination from outside. + return this.lineDash.slice(); + } + }; + + Context2D.prototype.fill = function() { + pathPreProcess.call(this, "fill", false); + }; + + /** + * Actually draws the path you have defined + * + * @name stroke + * @function + * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black. + */ + Context2D.prototype.stroke = function() { + pathPreProcess.call(this, "stroke", false); + }; + + /** + * Begins a path, or resets the current + * + * @name beginPath + * @function + * @description The beginPath() method begins a path, or resets the current path. + */ + Context2D.prototype.beginPath = function() { + this.path = [ + { + type: "begin" + } + ]; + }; + + /** + * Moves the path to the specified point in the canvas, without creating a line + * + * @name moveTo + * @function + * @param x {Number} The x-coordinate of where to move the path to + * @param y {Number} The y-coordinate of where to move the path to + */ + Context2D.prototype.moveTo = function(x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.moveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.moveTo"); + } + + var pt = this.ctx.transform.applyToPoint(new Point(x, y)); + + this.path.push({ + type: "mt", + x: pt.x, + y: pt.y + }); + this.ctx.lastPoint = new Point(x, y); + }; + + /** + * Creates a path from the current point back to the starting point + * + * @name closePath + * @function + * @description The closePath() method creates a path from the current point back to the starting point. + */ + Context2D.prototype.closePath = function() { + var pathBegin = new Point(0, 0); + var i = 0; + for (i = this.path.length - 1; i !== -1; i--) { + if (this.path[i].type === "begin") { + if ( + typeof this.path[i + 1] === "object" && + typeof this.path[i + 1].x === "number" + ) { + pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y); + break; + } + } + } + this.path.push({ + type: "close" + }); + this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y); + }; + + /** + * Adds a new point and creates a line to that point from the last specified point in the canvas + * + * @name lineTo + * @function + * @param x The x-coordinate of where to create the line to + * @param y The y-coordinate of where to create the line to + * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line). + */ + Context2D.prototype.lineTo = function(x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.lineTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.lineTo"); + } + + var pt = this.ctx.transform.applyToPoint(new Point(x, y)); + + this.path.push({ + type: "lt", + x: pt.x, + y: pt.y + }); + this.ctx.lastPoint = new Point(pt.x, pt.y); + }; + + /** + * Clips a region of any shape and size from the original canvas + * + * @name clip + * @function + * @description The clip() method clips a region of any shape and size from the original canvas. + */ + Context2D.prototype.clip = function() { + this.ctx.clip_path = JSON.parse(JSON.stringify(this.path)); + pathPreProcess.call(this, null, true); + }; + + /** + * Creates a cubic Bézier curve + * + * @name quadraticCurveTo + * @function + * @param cpx {Number} The x-coordinate of the Bézier control point + * @param cpy {Number} The y-coordinate of the Bézier control point + * @param x {Number} The x-coordinate of the ending point + * @param y {Number} The y-coordinate of the ending point + * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point. + */ + Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) { + if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) { + console.error( + "jsPDF.context2d.quadraticCurveTo: Invalid arguments", + arguments + ); + throw new Error( + "Invalid arguments passed to jsPDF.context2d.quadraticCurveTo" + ); + } + + var pt0 = this.ctx.transform.applyToPoint(new Point(x, y)); + var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy)); + + this.path.push({ + type: "qct", + x1: pt1.x, + y1: pt1.y, + x: pt0.x, + y: pt0.y + }); + this.ctx.lastPoint = new Point(pt0.x, pt0.y); + }; + + /** + * Creates a cubic Bézier curve + * + * @name bezierCurveTo + * @function + * @param cp1x {Number} The x-coordinate of the first Bézier control point + * @param cp1y {Number} The y-coordinate of the first Bézier control point + * @param cp2x {Number} The x-coordinate of the second Bézier control point + * @param cp2y {Number} The y-coordinate of the second Bézier control point + * @param x {Number} The x-coordinate of the ending point + * @param y {Number} The y-coordinate of the ending point + * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point. + */ + Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) { + if ( + isNaN(x) || + isNaN(y) || + isNaN(cp1x) || + isNaN(cp1y) || + isNaN(cp2x) || + isNaN(cp2y) + ) { + console.error( + "jsPDF.context2d.bezierCurveTo: Invalid arguments", + arguments + ); + throw new Error( + "Invalid arguments passed to jsPDF.context2d.bezierCurveTo" + ); + } + var pt0 = this.ctx.transform.applyToPoint(new Point(x, y)); + var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y)); + var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y)); + + this.path.push({ + type: "bct", + x1: pt1.x, + y1: pt1.y, + x2: pt2.x, + y2: pt2.y, + x: pt0.x, + y: pt0.y + }); + this.ctx.lastPoint = new Point(pt0.x, pt0.y); + }; + + /** + * Creates an arc/curve (used to create circles, or parts of circles) + * + * @name arc + * @function + * @param x {Number} The x-coordinate of the center of the circle + * @param y {Number} The y-coordinate of the center of the circle + * @param radius {Number} The radius of the circle + * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle) + * @param endAngle {Number} The ending angle, in radians + * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise. + * @description The arc() method creates an arc/curve (used to create circles, or parts of circles). + */ + Context2D.prototype.arc = function( + x, + y, + radius, + startAngle, + endAngle, + counterclockwise + ) { + if ( + isNaN(x) || + isNaN(y) || + isNaN(radius) || + isNaN(startAngle) || + isNaN(endAngle) + ) { + console.error("jsPDF.context2d.arc: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.arc"); + } + counterclockwise = Boolean(counterclockwise); + + if (!this.ctx.transform.isIdentity) { + var xpt = this.ctx.transform.applyToPoint(new Point(x, y)); + x = xpt.x; + y = xpt.y; + + var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius)); + var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0)); + radius = Math.sqrt( + Math.pow(x_radPt.x - x_radPt0.x, 2) + + Math.pow(x_radPt.y - x_radPt0.y, 2) + ); + } + if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) { + startAngle = 0; + endAngle = 2 * Math.PI; + } + + this.path.push({ + type: "arc", + x: x, + y: y, + radius: radius, + startAngle: startAngle, + endAngle: endAngle, + counterclockwise: counterclockwise + }); + // this.ctx.lastPoint(new Point(pt.x,pt.y)); + }; + + /** + * Creates an arc/curve between two tangents + * + * @name arcTo + * @function + * @param x1 {Number} The x-coordinate of the first tangent + * @param y1 {Number} The y-coordinate of the first tangent + * @param x2 {Number} The x-coordinate of the second tangent + * @param y2 {Number} The y-coordinate of the second tangent + * @param radius The radius of the arc + * @description The arcTo() method creates an arc/curve between two tangents on the canvas. + */ + // eslint-disable-next-line no-unused-vars + Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) { + throw new Error("arcTo not implemented."); + }; + + /** + * Creates a rectangle + * + * @name rect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The rect() method creates a rectangle. + */ + Context2D.prototype.rect = function(x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.rect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.rect"); + } + this.moveTo(x, y); + this.lineTo(x + w, y); + this.lineTo(x + w, y + h); + this.lineTo(x, y + h); + this.lineTo(x, y); + this.lineTo(x + w, y); + this.lineTo(x, y); + }; + + /** + * Draws a "filled" rectangle + * + * @name fillRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The fillRect() method draws a "filled" rectangle. The default color of the fill is black. + */ + Context2D.prototype.fillRect = function(x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.fillRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.fillRect"); + } + if (isFillTransparent.call(this)) { + return; + } + var tmp = {}; + if (this.lineCap !== "butt") { + tmp.lineCap = this.lineCap; + this.lineCap = "butt"; + } + if (this.lineJoin !== "miter") { + tmp.lineJoin = this.lineJoin; + this.lineJoin = "miter"; + } + + this.beginPath(); + this.rect(x, y, w, h); + this.fill(); + + if (tmp.hasOwnProperty("lineCap")) { + this.lineCap = tmp.lineCap; + } + if (tmp.hasOwnProperty("lineJoin")) { + this.lineJoin = tmp.lineJoin; + } + }; + + /** + * Draws a rectangle (no fill) + * + * @name strokeRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black. + */ + Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.strokeRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.strokeRect"); + } + if (isStrokeTransparent.call(this)) { + return; + } + this.beginPath(); + this.rect(x, y, w, h); + this.stroke(); + }; + + /** + * Clears the specified pixels within a given rectangle + * + * @name clearRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle to clear, in pixels + * @param h {Number} The height of the rectangle to clear, in pixels + * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    + * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set. + * This results in all calls to clearRect() to do nothing, and keep the canvas transparent. + * This flag is stored in the save/restore context and is managed the same way as other drawing states. + * + */ + Context2D.prototype.clearRect = function(x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.clearRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.clearRect"); + } + if (this.ignoreClearRect) { + return; + } + + this.fillStyle = "#ffffff"; + this.fillRect(x, y, w, h); + }; + + /** + * Saves the state of the current context + * + * @name save + * @function + */ + Context2D.prototype.save = function(doStackPush) { + doStackPush = typeof doStackPush === "boolean" ? doStackPush : true; + var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber; + for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) { + this.pdf.setPage(i + 1); + this.pdf.internal.out("q"); + } + this.pdf.setPage(tmpPageNumber); + + if (doStackPush) { + this.ctx.fontSize = this.pdf.internal.getFontSize(); + var ctx = new ContextLayer(this.ctx); + this.ctxStack.push(this.ctx); + this.ctx = ctx; + } + }; + + /** + * Returns previously saved path state and attributes + * + * @name restore + * @function + */ + Context2D.prototype.restore = function(doStackPop) { + doStackPop = typeof doStackPop === "boolean" ? doStackPop : true; + var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber; + for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) { + this.pdf.setPage(i + 1); + this.pdf.internal.out("Q"); + } + this.pdf.setPage(tmpPageNumber); + + if (doStackPop && this.ctxStack.length !== 0) { + this.ctx = this.ctxStack.pop(); + this.fillStyle = this.ctx.fillStyle; + this.strokeStyle = this.ctx.strokeStyle; + this.font = this.ctx.font; + this.lineCap = this.ctx.lineCap; + this.lineWidth = this.ctx.lineWidth; + this.lineJoin = this.ctx.lineJoin; + this.lineDash = this.ctx.lineDash; + this.lineDashOffset = this.ctx.lineDashOffset; + } + }; + + /** + * @name toDataURL + * @function + */ + Context2D.prototype.toDataURL = function() { + throw new Error("toDataUrl not implemented."); + }; + + //helper functions + + /** + * Get the decimal values of r, g, b and a + * + * @name getRGBA + * @function + * @private + * @ignore + */ + var getRGBA = function(style) { + var rxRgb = /rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/; + var rxRgba = /rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/; + var rxTransparent = /transparent|rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*0+\s*\)/; + + var r, g, b, a; + + if (style.isCanvasGradient === true) { + style = style.getColor(); + } + + if (!style) { + return { r: 0, g: 0, b: 0, a: 0, style: style }; + } + + if (rxTransparent.test(style)) { + r = 0; + g = 0; + b = 0; + a = 0; + } else { + var matches = rxRgb.exec(style); + if (matches !== null) { + r = parseInt(matches[1]); + g = parseInt(matches[2]); + b = parseInt(matches[3]); + a = 1; + } else { + matches = rxRgba.exec(style); + if (matches !== null) { + r = parseInt(matches[1]); + g = parseInt(matches[2]); + b = parseInt(matches[3]); + a = parseFloat(matches[4]); + } else { + a = 1; + + if (typeof style === "string" && style.charAt(0) !== "#") { + var rgbColor = new RGBColor(style); + if (rgbColor.ok) { + style = rgbColor.toHex(); + } else { + style = "#000000"; + } + } + + if (style.length === 4) { + r = style.substring(1, 2); + r += r; + g = style.substring(2, 3); + g += g; + b = style.substring(3, 4); + b += b; + } else { + r = style.substring(1, 3); + g = style.substring(3, 5); + b = style.substring(5, 7); + } + r = parseInt(r, 16); + g = parseInt(g, 16); + b = parseInt(b, 16); + } + } + } + return { r: r, g: g, b: b, a: a, style: style }; + }; + + /** + * @name isFillTransparent + * @function + * @private + * @ignore + * @returns {Boolean} + */ + var isFillTransparent = function() { + return this.ctx.isFillTransparent || this.globalAlpha == 0; + }; + + /** + * @name isStrokeTransparent + * @function + * @private + * @ignore + * @returns {Boolean} + */ + var isStrokeTransparent = function() { + return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0); + }; + + /** + * Draws "filled" text on the canvas + * + * @name fillText + * @function + * @param text {String} Specifies the text that will be written on the canvas + * @param x {Number} The x coordinate where to start painting the text (relative to the canvas) + * @param y {Number} The y coordinate where to start painting the text (relative to the canvas) + * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels + * @description The fillText() method draws filled text on the canvas. The default color of the text is black. + */ + Context2D.prototype.fillText = function(text, x, y, maxWidth) { + if (isNaN(x) || isNaN(y) || typeof text !== "string") { + console.error("jsPDF.context2d.fillText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.fillText"); + } + maxWidth = isNaN(maxWidth) ? undefined : maxWidth; + if (isFillTransparent.call(this)) { + return; + } + + var degs = rad2deg(this.ctx.transform.rotation); + + // We only use X axis as scale hint + var scale = this.ctx.transform.scaleX; + + putText.call(this, { + text: text, + x: x, + y: y, + scale: scale, + angle: degs, + align: this.textAlign, + maxWidth: maxWidth + }); + }; + + /** + * Draws text on the canvas (no fill) + * + * @name strokeText + * @function + * @param text {String} Specifies the text that will be written on the canvas + * @param x {Number} The x coordinate where to start painting the text (relative to the canvas) + * @param y {Number} The y coordinate where to start painting the text (relative to the canvas) + * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels + * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black. + */ + Context2D.prototype.strokeText = function(text, x, y, maxWidth) { + if (isNaN(x) || isNaN(y) || typeof text !== "string") { + console.error("jsPDF.context2d.strokeText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.strokeText"); + } + if (isStrokeTransparent.call(this)) { + return; + } + + maxWidth = isNaN(maxWidth) ? undefined : maxWidth; + + var degs = rad2deg(this.ctx.transform.rotation); + var scale = this.ctx.transform.scaleX; + + putText.call(this, { + text: text, + x: x, + y: y, + scale: scale, + renderingMode: "stroke", + angle: degs, + align: this.textAlign, + maxWidth: maxWidth + }); + }; + + /** + * Returns an object that contains the width of the specified text + * + * @name measureText + * @function + * @param text {String} The text to be measured + * @description The measureText() method returns an object that contains the width of the specified text, in pixels. + * @returns {Number} + */ + Context2D.prototype.measureText = function(text) { + if (typeof text !== "string") { + console.error( + "jsPDF.context2d.measureText: Invalid arguments", + arguments + ); + throw new Error( + "Invalid arguments passed to jsPDF.context2d.measureText" + ); + } + var pdf = this.pdf; + var k = this.pdf.internal.scaleFactor; + + var fontSize = pdf.internal.getFontSize(); + var txtWidth = + (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor; + txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000; + + var TextMetrics = function(options) { + options = options || {}; + var _width = options.width || 0; + Object.defineProperty(this, "width", { + get: function() { + return _width; + } + }); + return this; + }; + return new TextMetrics({ width: txtWidth }); + }; + + //Transformations + + /** + * Scales the current drawing bigger or smaller + * + * @name scale + * @function + * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.) + * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.) + * @description The scale() method scales the current drawing, bigger or smaller. + */ + Context2D.prototype.scale = function(scalewidth, scaleheight) { + if (isNaN(scalewidth) || isNaN(scaleheight)) { + console.error("jsPDF.context2d.scale: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.scale"); + } + var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + + /** + * Rotates the current drawing + * + * @name rotate + * @function + * @param angle {Number} The rotation angle, in radians. + * @description To calculate from degrees to radians: degrees*Math.PI/180.
    + * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180 + */ + Context2D.prototype.rotate = function(angle) { + if (isNaN(angle)) { + console.error("jsPDF.context2d.rotate: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.rotate"); + } + var matrix = new Matrix( + Math.cos(angle), + Math.sin(angle), + -Math.sin(angle), + Math.cos(angle), + 0.0, + 0.0 + ); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + + /** + * Remaps the (0,0) position on the canvas + * + * @name translate + * @function + * @param x {Number} The value to add to horizontal (x) coordinates + * @param y {Number} The value to add to vertical (y) coordinates + * @description The translate() method remaps the (0,0) position on the canvas. + */ + Context2D.prototype.translate = function(x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.translate: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.translate"); + } + var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + + /** + * Replaces the current transformation matrix for the drawing + * + * @name transform + * @function + * @param a {Number} Horizontal scaling + * @param b {Number} Horizontal skewing + * @param c {Number} Vertical skewing + * @param d {Number} Vertical scaling + * @param e {Number} Horizontal moving + * @param f {Number} Vertical moving + * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context. + */ + Context2D.prototype.transform = function(a, b, c, d, e, f) { + if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) { + console.error("jsPDF.context2d.transform: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.transform"); + } + var matrix = new Matrix(a, b, c, d, e, f); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + + /** + * Resets the current transform to the identity matrix. Then runs transform() + * + * @name setTransform + * @function + * @param a {Number} Horizontal scaling + * @param b {Number} Horizontal skewing + * @param c {Number} Vertical skewing + * @param d {Number} Vertical scaling + * @param e {Number} Horizontal moving + * @param f {Number} Vertical moving + * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context. + */ + Context2D.prototype.setTransform = function(a, b, c, d, e, f) { + a = isNaN(a) ? 1 : a; + b = isNaN(b) ? 0 : b; + c = isNaN(c) ? 0 : c; + d = isNaN(d) ? 1 : d; + e = isNaN(e) ? 0 : e; + f = isNaN(f) ? 0 : f; + this.ctx.transform = new Matrix(a, b, c, d, e, f); + }; + + var hasMargins = function() { + return ( + this.margin[0] > 0 || + this.margin[1] > 0 || + this.margin[2] > 0 || + this.margin[3] > 0 + ); + }; + + /** + * Draws an image, canvas, or video onto the canvas + * + * @function + * @param img {} Specifies the image, canvas, or video element to use + * @param sx {Number} Optional. The x coordinate where to start clipping + * @param sy {Number} Optional. The y coordinate where to start clipping + * @param swidth {Number} Optional. The width of the clipped image + * @param sheight {Number} Optional. The height of the clipped image + * @param x {Number} The x coordinate where to place the image on the canvas + * @param y {Number} The y coordinate where to place the image on the canvas + * @param width {Number} Optional. The width of the image to use (stretch or reduce the image) + * @param height {Number} Optional. The height of the image to use (stretch or reduce the image) + */ + Context2D.prototype.drawImage = function( + img, + sx, + sy, + swidth, + sheight, + x, + y, + width, + height + ) { + var imageProperties = this.pdf.getImageProperties(img); + var factorX = 1; + var factorY = 1; + + var clipFactorX = 1; + var clipFactorY = 1; + + if (typeof swidth !== "undefined" && typeof width !== "undefined") { + clipFactorX = width / swidth; + clipFactorY = height / sheight; + factorX = ((imageProperties.width / swidth) * width) / swidth; + factorY = ((imageProperties.height / sheight) * height) / sheight; + } + + //is sx and sy are set and x and y not, set x and y with values of sx and sy + if (typeof x === "undefined") { + x = sx; + y = sy; + sx = 0; + sy = 0; + } + + if (typeof swidth !== "undefined" && typeof width === "undefined") { + width = swidth; + height = sheight; + } + if (typeof swidth === "undefined" && typeof width === "undefined") { + width = imageProperties.width; + height = imageProperties.height; + } + + var decomposedTransformationMatrix = this.ctx.transform.decompose(); + var angle = rad2deg(decomposedTransformationMatrix.rotate.shx); + var matrix = new Matrix(); + matrix = matrix.multiply(decomposedTransformationMatrix.translate); + matrix = matrix.multiply(decomposedTransformationMatrix.skew); + matrix = matrix.multiply(decomposedTransformationMatrix.scale); + var xRect = matrix.applyToRectangle( + new Rectangle( + x - sx * clipFactorX, + y - sy * clipFactorY, + swidth * factorX, + sheight * factorY + ) + ); + var pageArray = getPagesByPath.call(this, xRect); + var pages = []; + for (var ii = 0; ii < pageArray.length; ii += 1) { + if (pages.indexOf(pageArray[ii]) === -1) { + pages.push(pageArray[ii]); + } + } + + sortPages(pages); + + var clipPath; + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + for (var i = min; i < max + 1; i++) { + this.pdf.setPage(i); + + var pageWidthMinusMargins = + this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1]; + var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = + this.pdf.internal.pageSize.height - + this.posY - + this.margin[0] - + this.margin[2]; + var pageHeightMinusMargins = + this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var previousPageHeightSum = + i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo( + clipPath, + this.posX + this.margin[3], + -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset + ); + drawPaths.call(this, "fill", true); + this.path = tmpPaths; + } + var tmpRect = JSON.parse(JSON.stringify(xRect)); + tmpRect = pathPositionRedo( + [tmpRect], + this.posX + this.margin[3], + -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset + )[0]; + + const needsClipping = (i > min || i < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf + .rect( + this.margin[3], + this.margin[0], + pageWidthMinusMargins, + pageHeightMinusMargins, + null + ) + .clip() + .discardPath(); + } + this.pdf.addImage( + img, + "JPEG", + tmpRect.x, + tmpRect.y, + tmpRect.w, + tmpRect.h, + null, + null, + angle + ); + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + } else { + this.pdf.addImage( + img, + "JPEG", + xRect.x, + xRect.y, + xRect.w, + xRect.h, + null, + null, + angle + ); + } + }; + + var getPagesByPath = function(path, pageWrapX, pageWrapY) { + var result = []; + pageWrapX = pageWrapX || this.pdf.internal.pageSize.width; + pageWrapY = + pageWrapY || + this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var yOffset = this.posY + this.ctx.prevPageLastElemOffset; + + switch (path.type) { + default: + case "mt": + case "lt": + result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1); + break; + case "arc": + result.push( + Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1 + ); + result.push( + Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1 + ); + break; + case "qct": + var rectOfQuadraticCurve = getQuadraticCurveBoundary( + this.ctx.lastPoint.x, + this.ctx.lastPoint.y, + path.x1, + path.y1, + path.x, + path.y + ); + result.push( + Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1 + ); + result.push( + Math.floor( + (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) / + pageWrapY + ) + 1 + ); + break; + case "bct": + var rectOfBezierCurve = getBezierCurveBoundary( + this.ctx.lastPoint.x, + this.ctx.lastPoint.y, + path.x1, + path.y1, + path.x2, + path.y2, + path.x, + path.y + ); + result.push( + Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1 + ); + result.push( + Math.floor( + (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY + ) + 1 + ); + break; + case "rect": + result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1); + } + + for (var i = 0; i < result.length; i += 1) { + while (this.pdf.internal.getNumberOfPages() < result[i]) { + addPage.call(this); + } + } + return result; + }; + + var addPage = function() { + var fillStyle = this.fillStyle; + var strokeStyle = this.strokeStyle; + var font = this.font; + var lineCap = this.lineCap; + var lineWidth = this.lineWidth; + var lineJoin = this.lineJoin; + this.pdf.addPage(); + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.font = font; + this.lineCap = lineCap; + this.lineWidth = lineWidth; + this.lineJoin = lineJoin; + }; + + var pathPositionRedo = function(paths, x, y) { + for (var i = 0; i < paths.length; i++) { + switch (paths[i].type) { + case "bct": + paths[i].x2 += x; + paths[i].y2 += y; + case "qct": + paths[i].x1 += x; + paths[i].y1 += y; + case "mt": + case "lt": + case "arc": + default: + paths[i].x += x; + paths[i].y += y; + } + } + return paths; + }; + + var sortPages = function(pages) { + return pages.sort(function(a, b) { + return a - b; + }); + }; + + var pathPreProcess = function(rule, isClip) { + var fillStyle = this.fillStyle; + var strokeStyle = this.strokeStyle; + var lineCap = this.lineCap; + var oldLineWidth = this.lineWidth; + var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX); + var lineJoin = this.lineJoin; + + var origPath = JSON.parse(JSON.stringify(this.path)); + var xPath = JSON.parse(JSON.stringify(this.path)); + var clipPath; + var tmpPath; + var pages = []; + + for (var i = 0; i < xPath.length; i++) { + if (typeof xPath[i].x !== "undefined") { + var page = getPagesByPath.call(this, xPath[i]); + + for (var ii = 0; ii < page.length; ii += 1) { + if (pages.indexOf(page[ii]) === -1) { + pages.push(page[ii]); + } + } + } + } + + for (var j = 0; j < pages.length; j++) { + while (this.pdf.internal.getNumberOfPages() < pages[j]) { + addPage.call(this); + } + } + sortPages(pages); + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + for (var k = min; k < max + 1; k++) { + this.pdf.setPage(k); + + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.lineCap = lineCap; + this.lineWidth = lineWidth; + this.lineJoin = lineJoin; + + var pageWidthMinusMargins = + this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1]; + var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = + this.pdf.internal.pageSize.height - + this.posY - + this.margin[0] - + this.margin[2]; + var pageHeightMinusMargins = + this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var previousPageHeightSum = + k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo( + clipPath, + this.posX + this.margin[3], + -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset + ); + drawPaths.call(this, rule, true); + this.path = tmpPaths; + } + tmpPath = JSON.parse(JSON.stringify(origPath)); + this.path = pathPositionRedo( + tmpPath, + this.posX + this.margin[3], + -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset + ); + if (isClip === false || k === 0) { + const needsClipping = (k > min || k < max) && hasMargins.call(this); + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf + .rect( + this.margin[3], + this.margin[0], + pageWidthMinusMargins, + pageHeightMinusMargins, + null + ) + .clip() + .discardPath(); + } + drawPaths.call(this, rule, isClip); + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + this.lineWidth = oldLineWidth; + } + } else { + this.lineWidth = lineWidth; + drawPaths.call(this, rule, isClip); + this.lineWidth = oldLineWidth; + } + this.path = origPath; + }; + + /** + * Processes the paths + * + * @function + * @param rule {String} + * @param isClip {Boolean} + * @private + * @ignore + */ + var drawPaths = function(rule, isClip) { + if (rule === "stroke" && !isClip && isStrokeTransparent.call(this)) { + return; + } + + if (rule !== "stroke" && !isClip && isFillTransparent.call(this)) { + return; + } + + var moves = []; + + //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha; + var delta; + var xPath = this.path; + for (var i = 0; i < xPath.length; i++) { + var pt = xPath[i]; + + switch (pt.type) { + case "begin": + moves.push({ + begin: true + }); + break; + + case "close": + moves.push({ + close: true + }); + break; + + case "mt": + moves.push({ + start: pt, + deltas: [], + abs: [] + }); + break; + + case "lt": + var iii = moves.length; + if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) { + delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y]; + if (iii > 0) { + for (iii; iii >= 0; iii--) { + if ( + moves[iii - 1].close !== true && + moves[iii - 1].begin !== true + ) { + moves[iii - 1].deltas.push(delta); + moves[iii - 1].abs.push(pt); + break; + } + } + } + } + break; + + case "bct": + delta = [ + pt.x1 - xPath[i - 1].x, + pt.y1 - xPath[i - 1].y, + pt.x2 - xPath[i - 1].x, + pt.y2 - xPath[i - 1].y, + pt.x - xPath[i - 1].x, + pt.y - xPath[i - 1].y + ]; + moves[moves.length - 1].deltas.push(delta); + break; + + case "qct": + var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x); + var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y); + var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x); + var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y); + var x3 = pt.x; + var y3 = pt.y; + delta = [ + x1 - xPath[i - 1].x, + y1 - xPath[i - 1].y, + x2 - xPath[i - 1].x, + y2 - xPath[i - 1].y, + x3 - xPath[i - 1].x, + y3 - xPath[i - 1].y + ]; + moves[moves.length - 1].deltas.push(delta); + break; + + case "arc": + moves.push({ + deltas: [], + abs: [], + arc: true + }); + + if (Array.isArray(moves[moves.length - 1].abs)) { + moves[moves.length - 1].abs.push(pt); + } + break; + } + } + var style; + if (!isClip) { + if (rule === "stroke") { + style = "stroke"; + } else { + style = "fill"; + } + } else { + style = null; + } + + var began = false; + for (var k = 0; k < moves.length; k++) { + if (moves[k].arc) { + var arcs = moves[k].abs; + + for (var ii = 0; ii < arcs.length; ii++) { + var arc = arcs[ii]; + + if (arc.type === "arc") { + drawArc.call( + this, + arc.x, + arc.y, + arc.radius, + arc.startAngle, + arc.endAngle, + arc.counterclockwise, + undefined, + isClip, + !began + ); + } else { + drawLine.call(this, arc.x, arc.y); + } + began = true; + } + } else if (moves[k].close === true) { + this.pdf.internal.out("h"); + began = false; + } else if (moves[k].begin !== true) { + var x = moves[k].start.x; + var y = moves[k].start.y; + drawLines.call(this, moves[k].deltas, x, y); + began = true; + } + } + + if (style) { + putStyle.call(this, style); + } + if (isClip) { + doClip.call(this); + } + }; + + var getBaseline = function(y) { + var height = + this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor; + var descent = height * (this.pdf.internal.getLineHeightFactor() - 1); + switch (this.ctx.textBaseline) { + case "bottom": + return y - descent; + case "top": + return y + height - descent; + case "hanging": + return y + height - 2 * descent; + case "middle": + return y + height / 2 - descent; + case "ideographic": + // TODO not implemented + return y; + case "alphabetic": + default: + return y; + } + }; + + var getTextBottom = function(yBaseLine) { + var height = + this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor; + var descent = height * (this.pdf.internal.getLineHeightFactor() - 1); + return yBaseLine + descent; + }; + + Context2D.prototype.createLinearGradient = function createLinearGradient() { + var canvasGradient = function canvasGradient() {}; + + canvasGradient.colorStops = []; + canvasGradient.addColorStop = function(offset, color) { + this.colorStops.push([offset, color]); + }; + + canvasGradient.getColor = function() { + if (this.colorStops.length === 0) { + return "#000000"; + } + + return this.colorStops[0][1]; + }; + + canvasGradient.isCanvasGradient = true; + return canvasGradient; + }; + Context2D.prototype.createPattern = function createPattern() { + return this.createLinearGradient(); + }; + Context2D.prototype.createRadialGradient = function createRadialGradient() { + return this.createLinearGradient(); + }; + + /** + * + * @param x Edge point X + * @param y Edge point Y + * @param r Radius + * @param a1 start angle + * @param a2 end angle + * @param counterclockwise + * @param style + * @param isClip + */ + var drawArc = function( + x, + y, + r, + a1, + a2, + counterclockwise, + style, + isClip, + includeMove + ) { + // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html + var curves = createArc.call(this, r, a1, a2, counterclockwise); + + for (var i = 0; i < curves.length; i++) { + var curve = curves[i]; + if (i === 0) { + if (includeMove) { + doMove.call(this, curve.x1 + x, curve.y1 + y); + } else { + drawLine.call(this, curve.x1 + x, curve.y1 + y); + } + } + drawCurve.call( + this, + x, + y, + curve.x2, + curve.y2, + curve.x3, + curve.y3, + curve.x4, + curve.y4 + ); + } + + if (!isClip) { + putStyle.call(this, style); + } else { + doClip.call(this); + } + }; + + var putStyle = function(style) { + switch (style) { + case "stroke": + this.pdf.internal.out("S"); + break; + case "fill": + this.pdf.internal.out("f"); + break; + } + }; + + var doClip = function() { + this.pdf.clip(); + this.pdf.discardPath(); + }; + + var doMove = function(x, y) { + this.pdf.internal.out( + getHorizontalCoordinateString(x) + + " " + + getVerticalCoordinateString(y) + + " m" + ); + }; + + var putText = function(options) { + var textAlign; + switch (options.align) { + case "right": + case "end": + textAlign = "right"; + break; + case "center": + textAlign = "center"; + break; + case "left": + case "start": + default: + textAlign = "left"; + break; + } + + var textDimensions = this.pdf.getTextDimensions(options.text); + var yBaseLine = getBaseline.call(this, options.y); + var yBottom = getTextBottom.call(this, yBaseLine); + var yTop = yBottom - textDimensions.h; + + var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine)); + var decomposedTransformationMatrix = this.ctx.transform.decompose(); + var matrix = new Matrix(); + matrix = matrix.multiply(decomposedTransformationMatrix.translate); + matrix = matrix.multiply(decomposedTransformationMatrix.skew); + matrix = matrix.multiply(decomposedTransformationMatrix.scale); + + var baselineRect = this.ctx.transform.applyToRectangle( + new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h) + ); + var textBounds = matrix.applyToRectangle( + new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h) + ); + var pageArray = getPagesByPath.call(this, textBounds); + var pages = []; + for (var ii = 0; ii < pageArray.length; ii += 1) { + if (pages.indexOf(pageArray[ii]) === -1) { + pages.push(pageArray[ii]); + } + } + + sortPages(pages); + + var clipPath, oldSize, oldLineWidth; + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + for (var i = min; i < max + 1; i++) { + this.pdf.setPage(i); + + var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = + this.pdf.internal.pageSize.height - + this.posY - + this.margin[0] - + this.margin[2]; + var pageHeightMinusBottomMargin = + this.pdf.internal.pageSize.height - this.margin[2]; + var pageHeightMinusMargins = + pageHeightMinusBottomMargin - this.margin[0]; + var pageWidthMinusRightMargin = + this.pdf.internal.pageSize.width - this.margin[1]; + var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3]; + var previousPageHeightSum = + i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo( + clipPath, + this.posX + this.margin[3], + -1 * previousPageHeightSum + topMargin + ); + drawPaths.call(this, "fill", true); + this.path = tmpPaths; + } + var textBoundsOnPage = pathPositionRedo( + [JSON.parse(JSON.stringify(textBounds))], + this.posX + this.margin[3], + -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset + )[0]; + + if (options.scale >= 0.01) { + oldSize = this.pdf.internal.getFontSize(); + this.pdf.setFontSize(oldSize * options.scale); + oldLineWidth = this.lineWidth; + this.lineWidth = oldLineWidth * options.scale; + } + + var doSlice = this.autoPaging !== "text"; + + if ( + doSlice || + textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin + ) { + if ( + doSlice || + (textBoundsOnPage.y >= topMargin && + textBoundsOnPage.x <= pageWidthMinusRightMargin) + ) { + var croppedText = doSlice + ? options.text + : this.pdf.splitTextToSize( + options.text, + options.maxWidth || + pageWidthMinusRightMargin - textBoundsOnPage.x + )[0]; + var baseLineRectOnPage = pathPositionRedo( + [JSON.parse(JSON.stringify(baselineRect))], + this.posX + this.margin[3], + -previousPageHeightSum + + topMargin + + this.ctx.prevPageLastElemOffset + )[0]; + + const needsClipping = + doSlice && (i > min || i < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf + .rect( + this.margin[3], + this.margin[0], + pageWidthMinusMargins, + pageHeightMinusMargins, + null + ) + .clip() + .discardPath(); + } + + this.pdf.text( + croppedText, + baseLineRectOnPage.x, + baseLineRectOnPage.y, + { + angle: options.angle, + align: textAlign, + renderingMode: options.renderingMode + } + ); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + } else { + // This text is the last element of the page, but it got cut off due to the margin + // so we render it in the next page + + if (textBoundsOnPage.y < pageHeightMinusBottomMargin) { + // As a result, all other elements have their y offset increased + this.ctx.prevPageLastElemOffset += + pageHeightMinusBottomMargin - textBoundsOnPage.y; + } + } + + if (options.scale >= 0.01) { + this.pdf.setFontSize(oldSize); + this.lineWidth = oldLineWidth; + } + } + } else { + if (options.scale >= 0.01) { + oldSize = this.pdf.internal.getFontSize(); + this.pdf.setFontSize(oldSize * options.scale); + oldLineWidth = this.lineWidth; + this.lineWidth = oldLineWidth * options.scale; + } + this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, { + angle: options.angle, + align: textAlign, + renderingMode: options.renderingMode, + maxWidth: options.maxWidth + }); + + if (options.scale >= 0.01) { + this.pdf.setFontSize(oldSize); + this.lineWidth = oldLineWidth; + } + } + }; + + var drawLine = function(x, y, prevX, prevY) { + prevX = prevX || 0; + prevY = prevY || 0; + + this.pdf.internal.out( + getHorizontalCoordinateString(x + prevX) + + " " + + getVerticalCoordinateString(y + prevY) + + " l" + ); + }; + + var drawLines = function(lines, x, y) { + return this.pdf.lines(lines, x, y, null, null); + }; + + var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) { + this.pdf.internal.out( + [ + f2(getHorizontalCoordinate(x1 + x)), + f2(getVerticalCoordinate(y1 + y)), + f2(getHorizontalCoordinate(x2 + x)), + f2(getVerticalCoordinate(y2 + y)), + f2(getHorizontalCoordinate(x3 + x)), + f2(getVerticalCoordinate(y3 + y)), + "c" + ].join(" ") + ); + }; + + /** + * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius. + * + * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. + * @function createArc + */ + var createArc = function(radius, startAngle, endAngle, anticlockwise) { + var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below + var twoPi = Math.PI * 2; + var halfPi = Math.PI / 2.0; + + while (startAngle > endAngle) { + startAngle = startAngle - twoPi; + } + var totalAngle = Math.abs(endAngle - startAngle); + if (totalAngle < twoPi) { + if (anticlockwise) { + totalAngle = twoPi - totalAngle; + } + } + + // Compute the sequence of arc curves, up to PI/2 at a time. + var curves = []; + + // clockwise or counterclockwise + var sgn = anticlockwise ? -1 : +1; + + var a1 = startAngle; + for (; totalAngle > EPSILON; ) { + var remain = sgn * Math.min(totalAngle, halfPi); + var a2 = a1 + remain; + curves.push(createSmallArc.call(this, radius, a1, a2)); + totalAngle -= Math.abs(a2 - a1); + a1 = a2; + } + + return curves; + }; + + /** + * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r. + * + * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. + * + * This algorithm is based on the approach described in: A. Riškus, "Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa," Information Technology and Control, 35(4), 2006 pp. 371-378. + */ + var createSmallArc = function(r, a1, a2) { + var a = (a2 - a1) / 2.0; + + var x4 = r * Math.cos(a); + var y4 = r * Math.sin(a); + var x1 = x4; + var y1 = -y4; + + var q1 = x1 * x1 + y1 * y1; + var q2 = q1 + x1 * x4 + y1 * y4; + var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4); + + var x2 = x1 - k2 * y1; + var y2 = y1 + k2 * x1; + var x3 = x2; + var y3 = -y2; + + var ar = a + a1; + var cos_ar = Math.cos(ar); + var sin_ar = Math.sin(ar); + + return { + x1: r * Math.cos(a1), + y1: r * Math.sin(a1), + x2: x2 * cos_ar - y2 * sin_ar, + y2: x2 * sin_ar + y2 * cos_ar, + x3: x3 * cos_ar - y3 * sin_ar, + y3: x3 * sin_ar + y3 * cos_ar, + x4: r * Math.cos(a2), + y4: r * Math.sin(a2) + }; + }; + + var rad2deg = function(value) { + return (value * 180) / Math.PI; + }; + + var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) { + var midX1 = sx + (cpx - sx) * 0.5; + var midY1 = sy + (cpy - sy) * 0.5; + var midX2 = ex + (cpx - ex) * 0.5; + var midY2 = ey + (cpy - ey) * 0.5; + var resultX1 = Math.min(sx, ex, midX1, midX2); + var resultX2 = Math.max(sx, ex, midX1, midX2); + var resultY1 = Math.min(sy, ey, midY1, midY2); + var resultY2 = Math.max(sy, ey, midY1, midY2); + return new Rectangle( + resultX1, + resultY1, + resultX2 - resultX1, + resultY2 - resultY1 + ); + }; + + //De Casteljau algorithm + var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) { + var tobx = bx - ax; + var toby = by - ay; + var tocx = cx - bx; + var tocy = cy - by; + var todx = dx - cx; + var tody = dy - cy; + var precision = 40; + var d, + i, + px, + py, + qx, + qy, + rx, + ry, + tx, + ty, + sx, + sy, + x, + y, + minx, + miny, + maxx, + maxy, + toqx, + toqy, + torx, + tory, + totx, + toty; + for (i = 0; i < precision + 1; i++) { + d = i / precision; + px = ax + d * tobx; + py = ay + d * toby; + qx = bx + d * tocx; + qy = by + d * tocy; + rx = cx + d * todx; + ry = cy + d * tody; + toqx = qx - px; + toqy = qy - py; + torx = rx - qx; + tory = ry - qy; + + sx = px + d * toqx; + sy = py + d * toqy; + tx = qx + d * torx; + ty = qy + d * tory; + totx = tx - sx; + toty = ty - sy; + + x = sx + d * totx; + y = sy + d * toty; + if (i == 0) { + minx = x; + miny = y; + maxx = x; + maxy = y; + } else { + minx = Math.min(minx, x); + miny = Math.min(miny, y); + maxx = Math.max(maxx, x); + maxy = Math.max(maxy, y); + } + } + return new Rectangle( + Math.round(minx), + Math.round(miny), + Math.round(maxx - minx), + Math.round(maxy - miny) + ); + }; + + var getPrevLineDashValue = function(lineDash, lineDashOffset) { + return JSON.stringify({ + lineDash: lineDash, + lineDashOffset: lineDashOffset + }); + }; + + var setLineDash = function() { + // Avoid unnecessary line dash declarations. + if ( + !this.prevLineDash && + !this.ctx.lineDash.length && + !this.ctx.lineDashOffset + ) { + return; + } + + // Avoid unnecessary line dash declarations. + const nextLineDash = getPrevLineDashValue( + this.ctx.lineDash, + this.ctx.lineDashOffset + ); + if (this.prevLineDash !== nextLineDash) { + this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset); + this.prevLineDash = nextLineDash; + } + }; +})(jsPDF.API); + +/** + * @license + * jsPDF filters PlugIn + * Copyright (c) 2014 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +(function(jsPDFAPI) { + + var ASCII85Encode = function(a) { + var b, c, d, e, f, g, h, i, j, k; + // eslint-disable-next-line no-control-regex + for ( + !/[^\x00-\xFF]/.test(a), + b = "\x00\x00\x00\x00".slice(a.length % 4 || 4), + a += b, + c = [], + d = 0, + e = a.length; + e > d; + d += 4 + ) + (f = + (a.charCodeAt(d) << 24) + + (a.charCodeAt(d + 1) << 16) + + (a.charCodeAt(d + 2) << 8) + + a.charCodeAt(d + 3)), + 0 !== f + ? ((k = f % 85), + (f = (f - k) / 85), + (j = f % 85), + (f = (f - j) / 85), + (i = f % 85), + (f = (f - i) / 85), + (h = f % 85), + (f = (f - h) / 85), + (g = f % 85), + c.push(g + 33, h + 33, i + 33, j + 33, k + 33)) + : c.push(122); + return ( + (function(a, b) { + for (var c = b; c > 0; c--) a.pop(); + })(c, b.length), + String.fromCharCode.apply(String, c) + "~>" + ); + }; + + var ASCII85Decode = function(a) { + var c, + d, + e, + f, + g, + h = String, + l = "length", + w = 255, + x = "charCodeAt", + y = "slice", + z = "replace"; + for ( + "~>" === a[y](-2), + a = a[y](0, -2) + [z](/\s/g, "") + [z]("z", "!!!!!"), + c = "uuuuu"[y](a[l] % 5 || 5), + a += c, + e = [], + f = 0, + g = a[l]; + g > f; + f += 5 + ) + (d = + 52200625 * (a[x](f) - 33) + + 614125 * (a[x](f + 1) - 33) + + 7225 * (a[x](f + 2) - 33) + + 85 * (a[x](f + 3) - 33) + + (a[x](f + 4) - 33)), + e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d); + return ( + (function(a, b) { + for (var c = b; c > 0; c--) a.pop(); + })(e, c[l]), + h.fromCharCode.apply(h, e) + ); + }; + + var ASCIIHexEncode = function(value) { + return ( + value + .split("") + .map(function(value) { + return ("0" + value.charCodeAt().toString(16)).slice(-2); + }) + .join("") + ">" + ); + }; + + var ASCIIHexDecode = function(value) { + var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/); + value = value.replace(/\s/g, ""); + if (value.indexOf(">") !== -1) { + value = value.substr(0, value.indexOf(">")); + } + if (value.length % 2) { + value += "0"; + } + if (regexCheckIfHex.test(value) === false) { + return ""; + } + var result = ""; + for (var i = 0; i < value.length; i += 2) { + result += String.fromCharCode("0x" + (value[i] + value[i + 1])); + } + return result; + }; + /* + var FlatePredictors = { + None: 1, + TIFF: 2, + PNG_None: 10, + PNG_Sub: 11, + PNG_Up: 12, + PNG_Average: 13, + PNG_Paeth: 14, + PNG_Optimum: 15 + }; + */ + + var FlateEncode = function(data) { + var arr = new Uint8Array(data.length); + var i = data.length; + while (i--) { + arr[i] = data.charCodeAt(i); + } + arr = fflate.zlibSync(arr); + data = arr.reduce(function(data, byte) { + return data + String.fromCharCode(byte); + }, ""); + return data; + }; + + jsPDFAPI.processDataByFilters = function(origData, filterChain) { + var i = 0; + var data = origData || ""; + var reverseChain = []; + filterChain = filterChain || []; + + if (typeof filterChain === "string") { + filterChain = [filterChain]; + } + + for (i = 0; i < filterChain.length; i += 1) { + switch (filterChain[i]) { + case "ASCII85Decode": + case "/ASCII85Decode": + data = ASCII85Decode(data); + reverseChain.push("/ASCII85Encode"); + break; + case "ASCII85Encode": + case "/ASCII85Encode": + data = ASCII85Encode(data); + reverseChain.push("/ASCII85Decode"); + break; + case "ASCIIHexDecode": + case "/ASCIIHexDecode": + data = ASCIIHexDecode(data); + reverseChain.push("/ASCIIHexEncode"); + break; + case "ASCIIHexEncode": + case "/ASCIIHexEncode": + data = ASCIIHexEncode(data); + reverseChain.push("/ASCIIHexDecode"); + break; + case "FlateEncode": + case "/FlateEncode": + data = FlateEncode(data); + reverseChain.push("/FlateDecode"); + break; + default: + throw new Error( + 'The filter: "' + filterChain[i] + '" is not implemented' + ); + } + } + + return { data: data, reverseChain: reverseChain.reverse().join(" ") }; + }; +})(jsPDF.API); + +/** + * @license + * jsPDF fileloading PlugIn + * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com) + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * @name fileloading + * @module + */ +(function(jsPDFAPI) { + + /** + * @name loadFile + * @function + * @param {string} url + * @param {boolean} sync + * @param {function} callback + * @returns {string|undefined} result + */ + jsPDFAPI.loadFile = function(url, sync, callback) { + + // eslint-disable-next-line no-unreachable + return nodeReadFile(url, sync, callback); + }; + + /** + * @name loadImageFile + * @function + * @param {string} path + * @param {boolean} sync + * @param {function} callback + */ + jsPDFAPI.loadImageFile = jsPDFAPI.loadFile; + + function nodeReadFile(url, sync, callback) { + sync = sync === false ? false : true; + var result = undefined; + + var fs = require("fs"); + var path = require("path"); + + url = path.resolve(url); + if (sync) { + try { + result = fs.readFileSync(url, { encoding: "latin1" }); + } catch (e) { + return undefined; + } + } else { + fs.readFile(url, { encoding: "latin1" }, function(err, data) { + if (!callback) { + return; + } + if (err) { + callback(undefined); + } + callback(data); + }); + } + + return result; + } +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2018 Erik Koopmans + * Released under the MIT License. + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF html PlugIn + * + * @name html + * @module + */ +(function(jsPDFAPI) { + + function loadHtml2Canvas() { + return (function() { + if (globalObject["html2canvas"]) { + return Promise.resolve(globalObject["html2canvas"]); + } + + + if (typeof exports === "object" && typeof module !== "undefined") { + return new Promise(function(resolve, reject) { + try { + resolve(require("html2canvas")); + } catch (e) { + reject(e); + } + }); + } + if (typeof define === "function" && define.amd) { + return new Promise(function(resolve, reject) { + try { + require(["html2canvas"], resolve); + } catch (e) { + reject(e); + } + }); + } + return Promise.reject(new Error("Could not load html2canvas")); + })() + .catch(function(e) { + return Promise.reject(new Error("Could not load html2canvas: " + e)); + }) + .then(function(html2canvas) { + return html2canvas.default ? html2canvas.default : html2canvas; + }); + } + + function loadDomPurify() { + return (function() { + if (globalObject["DOMPurify"]) { + return Promise.resolve(globalObject["DOMPurify"]); + } + + + if (typeof exports === "object" && typeof module !== "undefined") { + return new Promise(function(resolve, reject) { + try { + resolve(require("dompurify")); + } catch (e) { + reject(e); + } + }); + } + if (typeof define === "function" && define.amd) { + return new Promise(function(resolve, reject) { + try { + require(["dompurify"], resolve); + } catch (e) { + reject(e); + } + }); + } + return Promise.reject(new Error("Could not load dompurify")); + })() + .catch(function(e) { + return Promise.reject(new Error("Could not load dompurify: " + e)); + }) + .then(function(dompurify) { + return dompurify.default ? dompurify.default : dompurify; + }); + } + + /** + * Determine the type of a variable/object. + * + * @private + * @ignore + */ + var objType = function(obj) { + var type = typeof obj; + if (type === "undefined") return "undefined"; + else if (type === "string" || obj instanceof String) return "string"; + else if (type === "number" || obj instanceof Number) return "number"; + else if (type === "function" || obj instanceof Function) return "function"; + else if (!!obj && obj.constructor === Array) return "array"; + else if (obj && obj.nodeType === 1) return "element"; + else if (type === "object") return "object"; + else return "unknown"; + }; + + /** + * Create an HTML element with optional className, innerHTML, and style. + * + * @private + * @ignore + */ + var createElement = function(tagName, opt) { + var el = document.createElement(tagName); + if (opt.className) el.className = opt.className; + if (opt.innerHTML && opt.dompurify) { + el.innerHTML = opt.dompurify.sanitize(opt.innerHTML); + } + for (var key in opt.style) { + el.style[key] = opt.style[key]; + } + return el; + }; + + /** + * Deep-clone a node and preserve contents/properties. + * + * @private + * @ignore + */ + var cloneNode = function(node, javascriptEnabled) { + // Recursively clone the node. + var clone = + node.nodeType === 3 + ? document.createTextNode(node.nodeValue) + : node.cloneNode(false); + for (var child = node.firstChild; child; child = child.nextSibling) { + if ( + javascriptEnabled === true || + child.nodeType !== 1 || + child.nodeName !== "SCRIPT" + ) { + clone.appendChild(cloneNode(child, javascriptEnabled)); + } + } + + if (node.nodeType === 1) { + // Preserve contents/properties of special nodes. + if (node.nodeName === "CANVAS") { + clone.width = node.width; + clone.height = node.height; + clone.getContext("2d").drawImage(node, 0, 0); + } else if (node.nodeName === "TEXTAREA" || node.nodeName === "SELECT") { + clone.value = node.value; + } + + // Preserve the node's scroll position when it loads. + clone.addEventListener( + "load", + function() { + clone.scrollTop = node.scrollTop; + clone.scrollLeft = node.scrollLeft; + }, + true + ); + } + + // Return the cloned node. + return clone; + }; + + /* ----- CONSTRUCTOR ----- */ + + var Worker = function Worker(opt) { + // Create the root parent for the proto chain, and the starting Worker. + var root = Object.assign( + Worker.convert(Promise.resolve()), + JSON.parse(JSON.stringify(Worker.template)) + ); + var self = Worker.convert(Promise.resolve(), root); + + // Set progress, optional settings, and return. + self = self.setProgress(1, Worker, 1, [Worker]); + self = self.set(opt); + return self; + }; + + // Boilerplate for subclassing Promise. + Worker.prototype = Object.create(Promise.prototype); + Worker.prototype.constructor = Worker; + + // Converts/casts promises into Workers. + Worker.convert = function convert(promise, inherit) { + // Uses prototypal inheritance to receive changes made to ancestors' properties. + promise.__proto__ = inherit || Worker.prototype; + return promise; + }; + + Worker.template = { + prop: { + src: null, + container: null, + overlay: null, + canvas: null, + img: null, + pdf: null, + pageSize: null, + callback: function() {} + }, + progress: { + val: 0, + state: null, + n: 0, + stack: [] + }, + opt: { + filename: "file.pdf", + margin: [0, 0, 0, 0], + enableLinks: true, + x: 0, + y: 0, + html2canvas: {}, + jsPDF: {}, + backgroundColor: "transparent" + } + }; + + /* ----- FROM / TO ----- */ + + Worker.prototype.from = function from(src, type) { + function getType(src) { + switch (objType(src)) { + case "string": + return "string"; + case "element": + return src.nodeName.toLowerCase() === "canvas" ? "canvas" : "element"; + default: + return "unknown"; + } + } + + return this.then(function from_main() { + type = type || getType(src); + switch (type) { + case "string": + return this.then(loadDomPurify).then(function(dompurify) { + return this.set({ + src: createElement("div", { + innerHTML: src, + dompurify: dompurify + }) + }); + }); + case "element": + return this.set({ src: src }); + case "canvas": + return this.set({ canvas: src }); + case "img": + return this.set({ img: src }); + default: + return this.error("Unknown source type."); + } + }); + }; + + Worker.prototype.to = function to(target) { + // Route the 'to' request to the appropriate method. + switch (target) { + case "container": + return this.toContainer(); + case "canvas": + return this.toCanvas(); + case "img": + return this.toImg(); + case "pdf": + return this.toPdf(); + default: + return this.error("Invalid target."); + } + }; + + Worker.prototype.toContainer = function toContainer() { + // Set up function prerequisites. + var prereqs = [ + function checkSrc() { + return ( + this.prop.src || this.error("Cannot duplicate - no source HTML.") + ); + }, + function checkPageSize() { + return this.prop.pageSize || this.setPageSize(); + } + ]; + return this.thenList(prereqs).then(function toContainer_main() { + // Define the CSS styles for the container and its overlay parent. + var overlayCSS = { + position: "fixed", + overflow: "hidden", + zIndex: 1000, + left: "-100000px", + right: 0, + bottom: 0, + top: 0 + }; + var containerCSS = { + position: "relative", + display: "inline-block", + width: + (typeof this.opt.width === "number" && + !isNaN(this.opt.width) && + typeof this.opt.windowWidth === "number" && + !isNaN(this.opt.windowWidth) + ? this.opt.windowWidth + : Math.max( + this.prop.src.clientWidth, + this.prop.src.scrollWidth, + this.prop.src.offsetWidth + )) + "px", + left: 0, + right: 0, + top: 0, + margin: "auto", + backgroundColor: this.opt.backgroundColor + }; // Set the overlay to hidden (could be changed in the future to provide a print preview). + + var source = cloneNode( + this.prop.src, + this.opt.html2canvas.javascriptEnabled + ); + + if (source.tagName === "BODY") { + containerCSS.height = + Math.max( + document.body.scrollHeight, + document.body.offsetHeight, + document.documentElement.clientHeight, + document.documentElement.scrollHeight, + document.documentElement.offsetHeight + ) + "px"; + } + + this.prop.overlay = createElement("div", { + className: "html2pdf__overlay", + style: overlayCSS + }); + this.prop.container = createElement("div", { + className: "html2pdf__container", + style: containerCSS + }); + this.prop.container.appendChild(source); + this.prop.container.firstChild.appendChild( + createElement("div", { + style: { + clear: "both", + border: "0 none transparent", + margin: 0, + padding: 0, + height: 0 + } + }) + ); + this.prop.container.style.float = "none"; + this.prop.overlay.appendChild(this.prop.container); + document.body.appendChild(this.prop.overlay); + this.prop.container.firstChild.style.position = "relative"; + this.prop.container.height = + Math.max( + this.prop.container.firstChild.clientHeight, + this.prop.container.firstChild.scrollHeight, + this.prop.container.firstChild.offsetHeight + ) + "px"; + }); + }; + + Worker.prototype.toCanvas = function toCanvas() { + // Set up function prerequisites. + var prereqs = [ + function checkContainer() { + return ( + document.body.contains(this.prop.container) || this.toContainer() + ); + } + ]; + + // Fulfill prereqs then create the canvas. + return this.thenList(prereqs) + .then(loadHtml2Canvas) + .then(function toCanvas_main(html2canvas) { + // Handle old-fashioned 'onrendered' argument. + var options = Object.assign({}, this.opt.html2canvas); + delete options.onrendered; + + return html2canvas(this.prop.container, options); + }) + .then(function toCanvas_post(canvas) { + // Handle old-fashioned 'onrendered' argument. + var onRendered = this.opt.html2canvas.onrendered || function() {}; + onRendered(canvas); + + this.prop.canvas = canvas; + document.body.removeChild(this.prop.overlay); + }); + }; + + Worker.prototype.toContext2d = function toContext2d() { + // Set up function prerequisites. + var prereqs = [ + function checkContainer() { + return ( + document.body.contains(this.prop.container) || this.toContainer() + ); + } + ]; + + // Fulfill prereqs then create the canvas. + return this.thenList(prereqs) + .then(loadHtml2Canvas) + .then(function toContext2d_main(html2canvas) { + // Handle old-fashioned 'onrendered' argument. + + var pdf = this.opt.jsPDF; + var fontFaces = this.opt.fontFaces; + + var scale = + typeof this.opt.width === "number" && + !isNaN(this.opt.width) && + typeof this.opt.windowWidth === "number" && + !isNaN(this.opt.windowWidth) + ? this.opt.width / this.opt.windowWidth + : 1; + + var options = Object.assign( + { + async: true, + allowTaint: true, + scale: scale, + scrollX: this.opt.scrollX || 0, + scrollY: this.opt.scrollY || 0, + backgroundColor: "#ffffff", + imageTimeout: 15000, + logging: true, + proxy: null, + removeContainer: true, + foreignObjectRendering: false, + useCORS: false + }, + this.opt.html2canvas + ); + delete options.onrendered; + + pdf.context2d.autoPaging = + typeof this.opt.autoPaging === "undefined" + ? true + : this.opt.autoPaging; + pdf.context2d.posX = this.opt.x; + pdf.context2d.posY = this.opt.y; + pdf.context2d.margin = this.opt.margin; + pdf.context2d.fontFaces = fontFaces; + + if (fontFaces) { + for (var i = 0; i < fontFaces.length; ++i) { + var font = fontFaces[i]; + var src = font.src.find(function(src) { + return src.format === "truetype"; + }); + + if (src) { + pdf.addFont(src.url, font.ref.name, font.ref.style); + } + } + } + + options.windowHeight = options.windowHeight || 0; + options.windowHeight = + options.windowHeight == 0 + ? Math.max( + this.prop.container.clientHeight, + this.prop.container.scrollHeight, + this.prop.container.offsetHeight + ) + : options.windowHeight; + + pdf.context2d.save(true); + return html2canvas(this.prop.container, options); + }) + .then(function toContext2d_post(canvas) { + this.opt.jsPDF.context2d.restore(true); + + // Handle old-fashioned 'onrendered' argument. + var onRendered = this.opt.html2canvas.onrendered || function() {}; + onRendered(canvas); + + this.prop.canvas = canvas; + document.body.removeChild(this.prop.overlay); + }); + }; + + Worker.prototype.toImg = function toImg() { + // Set up function prerequisites. + var prereqs = [ + function checkCanvas() { + return this.prop.canvas || this.toCanvas(); + } + ]; + + // Fulfill prereqs then create the image. + return this.thenList(prereqs).then(function toImg_main() { + var imgData = this.prop.canvas.toDataURL( + "image/" + this.opt.image.type, + this.opt.image.quality + ); + this.prop.img = document.createElement("img"); + this.prop.img.src = imgData; + }); + }; + + Worker.prototype.toPdf = function toPdf() { + // Set up function prerequisites. + var prereqs = [ + function checkContext2d() { + return this.toContext2d(); + } + //function checkCanvas() { return this.prop.canvas || this.toCanvas(); } + ]; + + // Fulfill prereqs then create the image. + return this.thenList(prereqs).then(function toPdf_main() { + // Create local copies of frequently used properties. + this.prop.pdf = this.prop.pdf || this.opt.jsPDF; + }); + }; + + /* ----- OUTPUT / SAVE ----- */ + + Worker.prototype.output = function output(type, options, src) { + // Redirect requests to the correct function (outputPdf / outputImg). + src = src || "pdf"; + if (src.toLowerCase() === "img" || src.toLowerCase() === "image") { + return this.outputImg(type, options); + } else { + return this.outputPdf(type, options); + } + }; + + Worker.prototype.outputPdf = function outputPdf(type, options) { + // Set up function prerequisites. + var prereqs = [ + function checkPdf() { + return this.prop.pdf || this.toPdf(); + } + ]; + + // Fulfill prereqs then perform the appropriate output. + return this.thenList(prereqs).then(function outputPdf_main() { + /* Currently implemented output types: + * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992 + * save(options), arraybuffer, blob, bloburi/bloburl, + * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl + */ + return this.prop.pdf.output(type, options); + }); + }; + + Worker.prototype.outputImg = function outputImg(type) { + // Set up function prerequisites. + var prereqs = [ + function checkImg() { + return this.prop.img || this.toImg(); + } + ]; + + // Fulfill prereqs then perform the appropriate output. + return this.thenList(prereqs).then(function outputImg_main() { + switch (type) { + case undefined: + case "img": + return this.prop.img; + case "datauristring": + case "dataurlstring": + return this.prop.img.src; + case "datauri": + case "dataurl": + return (document.location.href = this.prop.img.src); + default: + throw 'Image output type "' + type + '" is not supported.'; + } + }); + }; + + Worker.prototype.save = function save(filename) { + // Set up function prerequisites. + var prereqs = [ + function checkPdf() { + return this.prop.pdf || this.toPdf(); + } + ]; + + // Fulfill prereqs, update the filename (if provided), and save the PDF. + return this.thenList(prereqs) + .set(filename ? { filename: filename } : null) + .then(function save_main() { + this.prop.pdf.save(this.opt.filename); + }); + }; + + Worker.prototype.doCallback = function doCallback() { + // Set up function prerequisites. + var prereqs = [ + function checkPdf() { + return this.prop.pdf || this.toPdf(); + } + ]; + + // Fulfill prereqs, update the filename (if provided), and save the PDF. + return this.thenList(prereqs).then(function doCallback_main() { + this.prop.callback(this.prop.pdf); + }); + }; + + /* ----- SET / GET ----- */ + + Worker.prototype.set = function set(opt) { + // TODO: Implement ordered pairs? + + // Silently ignore invalid or empty input. + if (objType(opt) !== "object") { + return this; + } + + // Build an array of setter functions to queue. + var fns = Object.keys(opt || {}).map(function(key) { + if (key in Worker.template.prop) { + // Set pre-defined properties. + return function set_prop() { + this.prop[key] = opt[key]; + }; + } else { + switch (key) { + case "margin": + return this.setMargin.bind(this, opt.margin); + case "jsPDF": + return function set_jsPDF() { + this.opt.jsPDF = opt.jsPDF; + return this.setPageSize(); + }; + case "pageSize": + return this.setPageSize.bind(this, opt.pageSize); + default: + // Set any other properties in opt. + return function set_opt() { + this.opt[key] = opt[key]; + }; + } + } + }, this); + + // Set properties within the promise chain. + return this.then(function set_main() { + return this.thenList(fns); + }); + }; + + Worker.prototype.get = function get(key, cbk) { + return this.then(function get_main() { + // Fetch the requested property, either as a predefined prop or in opt. + var val = key in Worker.template.prop ? this.prop[key] : this.opt[key]; + return cbk ? cbk(val) : val; + }); + }; + + Worker.prototype.setMargin = function setMargin(margin) { + return this.then(function setMargin_main() { + // Parse the margin property. + switch (objType(margin)) { + case "number": + margin = [margin, margin, margin, margin]; + // eslint-disable-next-line no-fallthrough + case "array": + if (margin.length === 2) { + margin = [margin[0], margin[1], margin[0], margin[1]]; + } + if (margin.length === 4) { + break; + } + // eslint-disable-next-line no-fallthrough + default: + return this.error("Invalid margin array."); + } + + // Set the margin property, then update pageSize. + this.opt.margin = margin; + }).then(this.setPageSize); + }; + + Worker.prototype.setPageSize = function setPageSize(pageSize) { + function toPx(val, k) { + return Math.floor(((val * k) / 72) * 96); + } + + return this.then(function setPageSize_main() { + // Retrieve page-size based on jsPDF settings, if not explicitly provided. + pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF); + + // Add 'inner' field if not present. + if (!pageSize.hasOwnProperty("inner")) { + pageSize.inner = { + width: pageSize.width - this.opt.margin[1] - this.opt.margin[3], + height: pageSize.height - this.opt.margin[0] - this.opt.margin[2] + }; + pageSize.inner.px = { + width: toPx(pageSize.inner.width, pageSize.k), + height: toPx(pageSize.inner.height, pageSize.k) + }; + pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width; + } + + // Attach pageSize to this. + this.prop.pageSize = pageSize; + }); + }; + + Worker.prototype.setProgress = function setProgress(val, state, n, stack) { + // Immediately update all progress values. + if (val != null) this.progress.val = val; + if (state != null) this.progress.state = state; + if (n != null) this.progress.n = n; + if (stack != null) this.progress.stack = stack; + this.progress.ratio = this.progress.val / this.progress.state; + + // Return this for command chaining. + return this; + }; + + Worker.prototype.updateProgress = function updateProgress( + val, + state, + n, + stack + ) { + // Immediately update all progress values, using setProgress. + return this.setProgress( + val ? this.progress.val + val : null, + state ? state : null, + n ? this.progress.n + n : null, + stack ? this.progress.stack.concat(stack) : null + ); + }; + + /* ----- PROMISE MAPPING ----- */ + + Worker.prototype.then = function then(onFulfilled, onRejected) { + // Wrap `this` for encapsulation. + var self = this; + + return this.thenCore(onFulfilled, onRejected, function then_main( + onFulfilled, + onRejected + ) { + // Update progress while queuing, calling, and resolving `then`. + self.updateProgress(null, null, 1, [onFulfilled]); + return Promise.prototype.then + .call(this, function then_pre(val) { + self.updateProgress(null, onFulfilled); + return val; + }) + .then(onFulfilled, onRejected) + .then(function then_post(val) { + self.updateProgress(1); + return val; + }); + }); + }; + + Worker.prototype.thenCore = function thenCore( + onFulfilled, + onRejected, + thenBase + ) { + // Handle optional thenBase parameter. + thenBase = thenBase || Promise.prototype.then; + + // Wrap `this` for encapsulation and bind it to the promise handlers. + var self = this; + if (onFulfilled) { + onFulfilled = onFulfilled.bind(self); + } + if (onRejected) { + onRejected = onRejected.bind(self); + } + + // Cast self into a Promise to avoid polyfills recursively defining `then`. + var isNative = + Promise.toString().indexOf("[native code]") !== -1 && + Promise.name === "Promise"; + var selfPromise = isNative + ? self + : Worker.convert(Object.assign({}, self), Promise.prototype); + + // Return the promise, after casting it into a Worker and preserving props. + var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected); + return Worker.convert(returnVal, self.__proto__); + }; + + Worker.prototype.thenExternal = function thenExternal( + onFulfilled, + onRejected + ) { + // Call `then` and return a standard promise (exits the Worker chain). + return Promise.prototype.then.call(this, onFulfilled, onRejected); + }; + + Worker.prototype.thenList = function thenList(fns) { + // Queue a series of promise 'factories' into the promise chain. + var self = this; + fns.forEach(function thenList_forEach(fn) { + self = self.thenCore(fn); + }); + return self; + }; + + Worker.prototype["catch"] = function(onRejected) { + // Bind `this` to the promise handler, call `catch`, and return a Worker. + if (onRejected) { + onRejected = onRejected.bind(this); + } + var returnVal = Promise.prototype["catch"].call(this, onRejected); + return Worker.convert(returnVal, this); + }; + + Worker.prototype.catchExternal = function catchExternal(onRejected) { + // Call `catch` and return a standard promise (exits the Worker chain). + return Promise.prototype["catch"].call(this, onRejected); + }; + + Worker.prototype.error = function error(msg) { + // Throw the error in the Promise chain. + return this.then(function error_main() { + throw new Error(msg); + }); + }; + + /* ----- ALIASES ----- */ + + Worker.prototype.using = Worker.prototype.set; + Worker.prototype.saveAs = Worker.prototype.save; + Worker.prototype.export = Worker.prototype.output; + Worker.prototype.run = Worker.prototype.then; + + // Get dimensions of a PDF page, as determined by jsPDF. + jsPDF.getPageSize = function(orientation, unit, format) { + // Decode options object + if (typeof orientation === "object") { + var options = orientation; + orientation = options.orientation; + unit = options.unit || unit; + format = options.format || format; + } + + // Default options + unit = unit || "mm"; + format = format || "a4"; + orientation = ("" + (orientation || "P")).toLowerCase(); + var format_as_string = ("" + format).toLowerCase(); + + // Size in pt of various paper formats + var pageFormats = { + a0: [2383.94, 3370.39], + a1: [1683.78, 2383.94], + a2: [1190.55, 1683.78], + a3: [841.89, 1190.55], + a4: [595.28, 841.89], + a5: [419.53, 595.28], + a6: [297.64, 419.53], + a7: [209.76, 297.64], + a8: [147.4, 209.76], + a9: [104.88, 147.4], + a10: [73.7, 104.88], + b0: [2834.65, 4008.19], + b1: [2004.09, 2834.65], + b2: [1417.32, 2004.09], + b3: [1000.63, 1417.32], + b4: [708.66, 1000.63], + b5: [498.9, 708.66], + b6: [354.33, 498.9], + b7: [249.45, 354.33], + b8: [175.75, 249.45], + b9: [124.72, 175.75], + b10: [87.87, 124.72], + c0: [2599.37, 3676.54], + c1: [1836.85, 2599.37], + c2: [1298.27, 1836.85], + c3: [918.43, 1298.27], + c4: [649.13, 918.43], + c5: [459.21, 649.13], + c6: [323.15, 459.21], + c7: [229.61, 323.15], + c8: [161.57, 229.61], + c9: [113.39, 161.57], + c10: [79.37, 113.39], + dl: [311.81, 623.62], + letter: [612, 792], + "government-letter": [576, 756], + legal: [612, 1008], + "junior-legal": [576, 360], + ledger: [1224, 792], + tabloid: [792, 1224], + "credit-card": [153, 243] + }; + + var k; + // Unit conversion + switch (unit) { + case "pt": + k = 1; + break; + case "mm": + k = 72 / 25.4; + break; + case "cm": + k = 72 / 2.54; + break; + case "in": + k = 72; + break; + case "px": + k = 72 / 96; + break; + case "pc": + k = 12; + break; + case "em": + k = 12; + break; + case "ex": + k = 6; + break; + default: + throw "Invalid unit: " + unit; + } + var pageHeight = 0; + var pageWidth = 0; + + // Dimensions are stored as user units and converted to points on output + if (pageFormats.hasOwnProperty(format_as_string)) { + pageHeight = pageFormats[format_as_string][1] / k; + pageWidth = pageFormats[format_as_string][0] / k; + } else { + try { + pageHeight = format[1]; + pageWidth = format[0]; + } catch (err) { + throw new Error("Invalid format: " + format); + } + } + + var tmp; + // Handle page orientation + if (orientation === "p" || orientation === "portrait") { + orientation = "p"; + if (pageWidth > pageHeight) { + tmp = pageWidth; + pageWidth = pageHeight; + pageHeight = tmp; + } + } else if (orientation === "l" || orientation === "landscape") { + orientation = "l"; + if (pageHeight > pageWidth) { + tmp = pageWidth; + pageWidth = pageHeight; + pageHeight = tmp; + } + } else { + throw "Invalid orientation: " + orientation; + } + + // Return information (k is the unit conversion ratio from pts) + var info = { + width: pageWidth, + height: pageHeight, + unit: unit, + k: k, + orientation: orientation + }; + return info; + }; + + /** + * @typedef FontFace + * + * The font-face type implements an interface similar to that of the font-face CSS rule, + * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D + * is updated. + * + * All properties expect values similar to those in the font-face CSS rule. A difference + * is the font-family, which do not need to be enclosed in double-quotes when containing + * spaces like in CSS. + * + * @property {string} family The name of the font-family. + * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'. + * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.) + * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded. + * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched. + * @property {string} [src] url A URL to a font of a specific format. + * @property {string} [src] format Format of the font referenced by the URL. + */ + + /** + * Generate a PDF from an HTML element or string using. + * + * @name html + * @function + * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML. + * @param {Object} [options] Collection of settings + * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance + * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0. + * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode. + *
      + *
    • + * false: Auto paging is disabled. + *
    • + *
    • + * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly + * slice text in half, making it difficult to read. + *
    • + *
    • + * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting + * mostly of a single column of text. + *
    • + *
    + * Default is true. + * @param {string} [options.filename] name of the file + * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image + * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options + * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm. + * @param {jsPDF} [options.jsPDF] jsPDF instance + * @param {number=} [options.x] x position on the PDF document in jsPDF units. + * @param {number=} [options.y] y position on the PDF document in jsPDF units. + * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be + * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is + * specified or the windowWidth option is NOT specified. + * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the + * html2canvas.windowWidth option, this option affects the actual container size while rendering and + * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified. + * + * @example + * var doc = new jsPDF(); + * + * doc.html(document.body, { + * callback: function (doc) { + * doc.save(); + * }, + * x: 10, + * y: 10 + * }); + */ + jsPDFAPI.html = function(src, options) { + + options = options || {}; + options.callback = options.callback || function() {}; + options.html2canvas = options.html2canvas || {}; + options.html2canvas.canvas = options.html2canvas.canvas || this.canvas; + options.jsPDF = options.jsPDF || this; + options.fontFaces = options.fontFaces + ? options.fontFaces.map(normalizeFontFace) + : null; + + // Create a new worker with the given options. + var worker = new Worker(options); + + if (!options.worker) { + // If worker is not set to true, perform the traditional 'simple' operation. + return worker.from(src).doCallback(); + } else { + // Otherwise, return the worker for new Promise-based operation. + return worker; + } + }; +})(jsPDF.API); + +/** + * @license + * ==================================================================== + * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com + * + * 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. + * ==================================================================== + */ + +/** + * jsPDF JavaScript plugin + * + * @name javascript + * @module + */ +(function(jsPDFAPI) { + var jsNamesObj, jsJsObj, text; + /** + * @name addJS + * @function + * @param {string} javascript The javascript to be embedded into the PDF-file. + * @returns {jsPDF} + */ + jsPDFAPI.addJS = function(javascript) { + text = javascript; + this.internal.events.subscribe("postPutResources", function() { + jsNamesObj = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/Names [(EmbeddedJS) " + (jsNamesObj + 1) + " 0 R]"); + this.internal.out(">>"); + this.internal.out("endobj"); + + jsJsObj = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/S /JavaScript"); + this.internal.out("/JS (" + text + ")"); + this.internal.out(">>"); + this.internal.out("endobj"); + }); + this.internal.events.subscribe("putCatalog", function() { + if (jsNamesObj !== undefined && jsJsObj !== undefined) { + this.internal.out("/Names <>"); + } + }); + return this; + }; +})(jsPDF.API); + +/** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF Outline PlugIn + * + * Generates a PDF Outline + * @name outline + * @module + */ +(function(jsPDFAPI) { + + var namesOid; + //var destsGoto = []; + + jsPDFAPI.events.push([ + "postPutResources", + function() { + var pdf = this; + var rx = /^(\d+) 0 obj$/; + + // Write action goto objects for each page + // this.outline.destsGoto = []; + // for (var i = 0; i < totalPages; i++) { + // var id = pdf.internal.newObject(); + // this.outline.destsGoto.push(id); + // pdf.internal.write("<> endobj"); + // } + // + // for (var i = 0; i < dests.length; i++) { + // pdf.internal.write("(page_" + (i + 1) + ")" + dests[i] + " 0 + // R"); + // } + // + if (this.outline.root.children.length > 0) { + var lines = pdf.outline.render().split(/\r\n/); + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var m = rx.exec(line); + if (m != null) { + var oid = m[1]; + pdf.internal.newObjectDeferredBegin(oid, false); + } + pdf.internal.write(line); + } + } + + // This code will write named destination for each page reference + // (page_1, etc) + if (this.outline.createNamedDestinations) { + var totalPages = this.internal.pages.length; + // WARNING: this assumes jsPDF starts on page 3 and pageIDs + // follow 5, 7, 9, etc + // Write destination objects for each page + var dests = []; + for (var i = 0; i < totalPages; i++) { + var id = pdf.internal.newObject(); + dests.push(id); + var info = pdf.internal.getPageInfo(i + 1); + pdf.internal.write( + "<< /D[" + info.objId + " 0 R /XYZ null null null]>> endobj" + ); + } + + // assign a name for each destination + var names2Oid = pdf.internal.newObject(); + pdf.internal.write("<< /Names [ "); + for (var i = 0; i < dests.length; i++) { + pdf.internal.write("(page_" + (i + 1) + ")" + dests[i] + " 0 R"); + } + pdf.internal.write(" ] >>", "endobj"); + + // var kids = pdf.internal.newObject(); + // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R'); + // pdf.internal.write(' ] >>', 'endobj'); + + namesOid = pdf.internal.newObject(); + pdf.internal.write("<< /Dests " + names2Oid + " 0 R"); + pdf.internal.write(">>", "endobj"); + } + } + ]); + + jsPDFAPI.events.push([ + "putCatalog", + function() { + var pdf = this; + if (pdf.outline.root.children.length > 0) { + pdf.internal.write( + "/Outlines", + this.outline.makeRef(this.outline.root) + ); + if (this.outline.createNamedDestinations) { + pdf.internal.write("/Names " + namesOid + " 0 R"); + } + // Open with Bookmarks showing + // pdf.internal.write("/PageMode /UseOutlines"); + } + } + ]); + + jsPDFAPI.events.push([ + "initialized", + function() { + var pdf = this; + + pdf.outline = { + createNamedDestinations: false, + root: { + children: [] + } + }; + + /** + * Options: pageNumber + */ + pdf.outline.add = function(parent, title, options) { + var item = { + title: title, + options: options, + children: [] + }; + if (parent == null) { + parent = this.root; + } + parent.children.push(item); + return item; + }; + + pdf.outline.render = function() { + this.ctx = {}; + this.ctx.val = ""; + this.ctx.pdf = pdf; + + this.genIds_r(this.root); + this.renderRoot(this.root); + this.renderItems(this.root); + + return this.ctx.val; + }; + + pdf.outline.genIds_r = function(node) { + node.id = pdf.internal.newObjectDeferred(); + for (var i = 0; i < node.children.length; i++) { + this.genIds_r(node.children[i]); + } + }; + + pdf.outline.renderRoot = function(node) { + this.objStart(node); + this.line("/Type /Outlines"); + if (node.children.length > 0) { + this.line("/First " + this.makeRef(node.children[0])); + this.line( + "/Last " + this.makeRef(node.children[node.children.length - 1]) + ); + } + this.line( + "/Count " + + this.count_r( + { + count: 0 + }, + node + ) + ); + this.objEnd(); + }; + + pdf.outline.renderItems = function(node) { + var getVerticalCoordinateString = this.ctx.pdf.internal + .getVerticalCoordinateString; + for (var i = 0; i < node.children.length; i++) { + var item = node.children[i]; + this.objStart(item); + + this.line("/Title " + this.makeString(item.title)); + + this.line("/Parent " + this.makeRef(node)); + if (i > 0) { + this.line("/Prev " + this.makeRef(node.children[i - 1])); + } + if (i < node.children.length - 1) { + this.line("/Next " + this.makeRef(node.children[i + 1])); + } + if (item.children.length > 0) { + this.line("/First " + this.makeRef(item.children[0])); + this.line( + "/Last " + this.makeRef(item.children[item.children.length - 1]) + ); + } + + var count = (this.count = this.count_r( + { + count: 0 + }, + item + )); + if (count > 0) { + this.line("/Count " + count); + } + + if (item.options) { + if (item.options.pageNumber) { + // Explicit Destination + //WARNING this assumes page ids are 3,5,7, etc. + var info = pdf.internal.getPageInfo(item.options.pageNumber); + this.line( + "/Dest " + + "[" + + info.objId + + " 0 R /XYZ 0 " + + getVerticalCoordinateString(0) + + " 0]" + ); + // this line does not work on all clients (pageNumber instead of page ref) + //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]'); + + // Named Destination + // this.line('/Dest (page_' + (item.options.pageNumber) + ')'); + + // Action Destination + // var id = pdf.internal.newObject(); + // pdf.internal.write('<> endobj'); + // this.line('/A ' + id + ' 0 R' ); + } + } + this.objEnd(); + } + for (var z = 0; z < node.children.length; z++) { + this.renderItems(node.children[z]); + } + }; + + pdf.outline.line = function(text) { + this.ctx.val += text + "\r\n"; + }; + + pdf.outline.makeRef = function(node) { + return node.id + " 0 R"; + }; + + pdf.outline.makeString = function(val) { + return "(" + pdf.internal.pdfEscape(val) + ")"; + }; + + pdf.outline.objStart = function(node) { + this.ctx.val += "\r\n" + node.id + " 0 obj" + "\r\n<<\r\n"; + }; + + pdf.outline.objEnd = function() { + this.ctx.val += ">> \r\n" + "endobj" + "\r\n"; + }; + + pdf.outline.count_r = function(ctx, node) { + for (var i = 0; i < node.children.length; i++) { + ctx.count++; + this.count_r(ctx, node.children[i]); + } + return ctx.count; + }; + } + ]); + + return this; +})(jsPDF.API); + +/** + * @license + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF jpeg Support PlugIn + * + * @name jpeg_support + * @module + */ +(function(jsPDFAPI) { + + /** + * 0xc0 (SOF) Huffman - Baseline DCT + * 0xc1 (SOF) Huffman - Extended sequential DCT + * 0xc2 Progressive DCT (SOF2) + * 0xc3 Spatial (sequential) lossless (SOF3) + * 0xc4 Differential sequential DCT (SOF5) + * 0xc5 Differential progressive DCT (SOF6) + * 0xc6 Differential spatial (SOF7) + * 0xc7 + */ + var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7]; + + //takes a string imgData containing the raw bytes of + //a jpeg image and returns [width, height] + //Algorithm from: http://www.64lines.com/jpeg-width-height + var getJpegInfo = function(imgData) { + var width, height, numcomponents; + var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5); + var len = imgData.length; + var result = { width: 0, height: 0, numcomponents: 1 }; + for (var i = 4; i < len; i += 2) { + i += blockLength; + if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) { + height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6); + width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8); + numcomponents = imgData.charCodeAt(i + 9); + result = { width: width, height: height, numcomponents: numcomponents }; + break; + } else { + blockLength = + imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3); + } + } + return result; + }; + + /** + * @ignore + */ + jsPDFAPI.processJPEG = function( + data, + index, + alias, + compression, + dataAsBinaryString, + colorSpace + ) { + var filter = this.decode.DCT_DECODE, + bpc = 8, + dims, + result = null; + + if ( + typeof data === "string" || + this.__addimage__.isArrayBuffer(data) || + this.__addimage__.isArrayBufferView(data) + ) { + // if we already have a stored binary string rep use that + data = dataAsBinaryString || data; + data = this.__addimage__.isArrayBuffer(data) + ? new Uint8Array(data) + : data; + data = this.__addimage__.isArrayBufferView(data) + ? this.__addimage__.arrayBufferToBinaryString(data) + : data; + + dims = getJpegInfo(data); + switch (dims.numcomponents) { + case 1: + colorSpace = this.color_spaces.DEVICE_GRAY; + break; + case 4: + colorSpace = this.color_spaces.DEVICE_CMYK; + break; + case 3: + colorSpace = this.color_spaces.DEVICE_RGB; + break; + } + + result = { + data: data, + width: dims.width, + height: dims.height, + colorSpace: colorSpace, + bitsPerComponent: bpc, + filter: filter, + index: index, + alias: alias + }; + } + return result; + }; +})(jsPDF.API); + +// Generated by CoffeeScript 1.4.0 + +var PNG = (function() { + var APNG_BLEND_OP_SOURCE, + APNG_DISPOSE_OP_BACKGROUND, + APNG_DISPOSE_OP_PREVIOUS, + makeImage, + scratchCanvas, + scratchCtx; + + APNG_DISPOSE_OP_BACKGROUND = 1; + + APNG_DISPOSE_OP_PREVIOUS = 2; + + APNG_BLEND_OP_SOURCE = 0; + + function PNG(data) { + var chunkSize, + colors, + palLen, + delayDen, + delayNum, + frame, + i, + index, + key, + section, + palShort, + text, + _i, + _j, + _ref; + this.data = data; + this.pos = 8; + this.palette = []; + this.imgData = []; + this.transparency = {}; + this.animation = null; + this.text = {}; + frame = null; + while (true) { + chunkSize = this.readUInt32(); + section = function() { + var _i, _results; + _results = []; + for (i = _i = 0; _i < 4; i = ++_i) { + _results.push(String.fromCharCode(this.data[this.pos++])); + } + return _results; + } + .call(this) + .join(""); + switch (section) { + case "IHDR": + this.width = this.readUInt32(); + this.height = this.readUInt32(); + this.bits = this.data[this.pos++]; + this.colorType = this.data[this.pos++]; + this.compressionMethod = this.data[this.pos++]; + this.filterMethod = this.data[this.pos++]; + this.interlaceMethod = this.data[this.pos++]; + break; + case "acTL": + this.animation = { + numFrames: this.readUInt32(), + numPlays: this.readUInt32() || Infinity, + frames: [] + }; + break; + case "PLTE": + this.palette = this.read(chunkSize); + break; + case "fcTL": + if (frame) { + this.animation.frames.push(frame); + } + this.pos += 4; + frame = { + width: this.readUInt32(), + height: this.readUInt32(), + xOffset: this.readUInt32(), + yOffset: this.readUInt32() + }; + delayNum = this.readUInt16(); + delayDen = this.readUInt16() || 100; + frame.delay = (1000 * delayNum) / delayDen; + frame.disposeOp = this.data[this.pos++]; + frame.blendOp = this.data[this.pos++]; + frame.data = []; + break; + case "IDAT": + case "fdAT": + if (section === "fdAT") { + this.pos += 4; + chunkSize -= 4; + } + data = (frame != null ? frame.data : void 0) || this.imgData; + for ( + i = _i = 0; + 0 <= chunkSize ? _i < chunkSize : _i > chunkSize; + i = 0 <= chunkSize ? ++_i : --_i + ) { + data.push(this.data[this.pos++]); + } + break; + case "tRNS": + this.transparency = {}; + switch (this.colorType) { + case 3: + palLen = this.palette.length / 3; + this.transparency.indexed = this.read(chunkSize); + if (this.transparency.indexed.length > palLen) + throw new Error("More transparent colors than palette size"); + /* + * According to the PNG spec trns should be increased to the same size as palette if shorter + */ + //palShort = 255 - this.transparency.indexed.length; + palShort = palLen - this.transparency.indexed.length; + if (palShort > 0) { + for ( + i = _j = 0; + 0 <= palShort ? _j < palShort : _j > palShort; + i = 0 <= palShort ? ++_j : --_j + ) { + this.transparency.indexed.push(255); + } + } + break; + case 0: + this.transparency.grayscale = this.read(chunkSize)[0]; + break; + case 2: + this.transparency.rgb = this.read(chunkSize); + } + break; + case "tEXt": + text = this.read(chunkSize); + index = text.indexOf(0); + key = String.fromCharCode.apply(String, text.slice(0, index)); + this.text[key] = String.fromCharCode.apply( + String, + text.slice(index + 1) + ); + break; + case "IEND": + if (frame) { + this.animation.frames.push(frame); + } + this.colors = function() { + switch (this.colorType) { + case 0: + case 3: + case 4: + return 1; + case 2: + case 6: + return 3; + } + }.call(this); + this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6; + colors = this.colors + (this.hasAlphaChannel ? 1 : 0); + this.pixelBitlength = this.bits * colors; + this.colorSpace = function() { + switch (this.colors) { + case 1: + return "DeviceGray"; + case 3: + return "DeviceRGB"; + } + }.call(this); + this.imgData = new Uint8Array(this.imgData); + return; + default: + this.pos += chunkSize; + } + this.pos += 4; + if (this.pos > this.data.length) { + throw new Error("Incomplete or corrupt PNG file"); + } + } + } + + PNG.prototype.read = function(bytes) { + var i, _i, _results; + _results = []; + for ( + i = _i = 0; + 0 <= bytes ? _i < bytes : _i > bytes; + i = 0 <= bytes ? ++_i : --_i + ) { + _results.push(this.data[this.pos++]); + } + return _results; + }; + + PNG.prototype.readUInt32 = function() { + var b1, b2, b3, b4; + b1 = this.data[this.pos++] << 24; + b2 = this.data[this.pos++] << 16; + b3 = this.data[this.pos++] << 8; + b4 = this.data[this.pos++]; + return b1 | b2 | b3 | b4; + }; + + PNG.prototype.readUInt16 = function() { + var b1, b2; + b1 = this.data[this.pos++] << 8; + b2 = this.data[this.pos++]; + return b1 | b2; + }; + + PNG.prototype.decodePixels = function(data) { + var pixelBytes = this.pixelBitlength / 8; + var fullPixels = new Uint8Array(this.width * this.height * pixelBytes); + var pos = 0; + var _this = this; + + if (data == null) { + data = this.imgData; + } + if (data.length === 0) { + return new Uint8Array(0); + } + + data = fflate.unzlibSync(data); + function pass(x0, y0, dx, dy) { + var abyte, + c, + col, + i, + left, + length, + p, + pa, + paeth, + pb, + pc, + pixels, + row, + scanlineLength, + upper, + upperLeft, + _i, + _j, + _k, + _l, + _m; + var w = Math.ceil((_this.width - x0) / dx), + h = Math.ceil((_this.height - y0) / dy); + var isFull = _this.width == w && _this.height == h; + scanlineLength = pixelBytes * w; + pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h); + length = data.length; + row = 0; + c = 0; + while (row < h && pos < length) { + switch (data[pos++]) { + case 0: + for (i = _i = 0; _i < scanlineLength; i = _i += 1) { + pixels[c++] = data[pos++]; + } + break; + case 1: + for (i = _j = 0; _j < scanlineLength; i = _j += 1) { + abyte = data[pos++]; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + pixels[c++] = (abyte + left) % 256; + } + break; + case 2: + for (i = _k = 0; _k < scanlineLength; i = _k += 1) { + abyte = data[pos++]; + col = (i - (i % pixelBytes)) / pixelBytes; + upper = + row && + pixels[ + (row - 1) * scanlineLength + + col * pixelBytes + + (i % pixelBytes) + ]; + pixels[c++] = (upper + abyte) % 256; + } + break; + case 3: + for (i = _l = 0; _l < scanlineLength; i = _l += 1) { + abyte = data[pos++]; + col = (i - (i % pixelBytes)) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + upper = + row && + pixels[ + (row - 1) * scanlineLength + + col * pixelBytes + + (i % pixelBytes) + ]; + pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256; + } + break; + case 4: + for (i = _m = 0; _m < scanlineLength; i = _m += 1) { + abyte = data[pos++]; + col = (i - (i % pixelBytes)) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + if (row === 0) { + upper = upperLeft = 0; + } else { + upper = + pixels[ + (row - 1) * scanlineLength + + col * pixelBytes + + (i % pixelBytes) + ]; + upperLeft = + col && + pixels[ + (row - 1) * scanlineLength + + (col - 1) * pixelBytes + + (i % pixelBytes) + ]; + } + p = left + upper - upperLeft; + pa = Math.abs(p - left); + pb = Math.abs(p - upper); + pc = Math.abs(p - upperLeft); + if (pa <= pb && pa <= pc) { + paeth = left; + } else if (pb <= pc) { + paeth = upper; + } else { + paeth = upperLeft; + } + pixels[c++] = (abyte + paeth) % 256; + } + break; + default: + throw new Error("Invalid filter algorithm: " + data[pos - 1]); + } + if (!isFull) { + var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes; + var partPos = row * scanlineLength; + for (i = 0; i < w; i += 1) { + for (var j = 0; j < pixelBytes; j += 1) + fullPixels[fullPos++] = pixels[partPos++]; + fullPos += (dx - 1) * pixelBytes; + } + } + row++; + } + } + if (_this.interlaceMethod == 1) { + /* + 1 6 4 6 2 6 4 6 + 7 7 7 7 7 7 7 7 + 5 6 5 6 5 6 5 6 + 7 7 7 7 7 7 7 7 + 3 6 4 6 3 6 4 6 + 7 7 7 7 7 7 7 7 + 5 6 5 6 5 6 5 6 + 7 7 7 7 7 7 7 7 + */ + pass(0, 0, 8, 8); // 1 + /* NOTE these seem to follow the pattern: + * pass(x, 0, 2*x, 2*x); + * pass(0, x, x, 2*x); + * with x being 4, 2, 1. + */ + pass(4, 0, 8, 8); // 2 + pass(0, 4, 4, 8); // 3 + + pass(2, 0, 4, 4); // 4 + pass(0, 2, 2, 4); // 5 + + pass(1, 0, 2, 2); // 6 + pass(0, 1, 1, 2); // 7 + } else { + pass(0, 0, 1, 1); + } + return fullPixels; + }; + + PNG.prototype.decodePalette = function() { + var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1; + palette = this.palette; + transparency = this.transparency.indexed || []; + ret = new Uint8Array((transparency.length || 0) + palette.length); + pos = 0; + length = palette.length; + c = 0; + for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) { + ret[pos++] = palette[i]; + ret[pos++] = palette[i + 1]; + ret[pos++] = palette[i + 2]; + ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255; + } + return ret; + }; + + PNG.prototype.copyToImageData = function(imageData, pixels) { + var alpha, colors, data, i, input, j, k, length, palette, v, _ref; + colors = this.colors; + palette = null; + alpha = this.hasAlphaChannel; + if (this.palette.length) { + palette = + (_ref = this._decodedPalette) != null + ? _ref + : (this._decodedPalette = this.decodePalette()); + colors = 4; + alpha = true; + } + data = imageData.data || imageData; + length = data.length; + input = palette || pixels; + i = j = 0; + if (colors === 1) { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + v = input[k++]; + data[i++] = v; + data[i++] = v; + data[i++] = v; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } else { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } + }; + + PNG.prototype.decode = function() { + var ret; + ret = new Uint8Array(this.width * this.height * 4); + this.copyToImageData(ret, this.decodePixels()); + return ret; + }; + + var hasBrowserCanvas = function() { + if (Object.prototype.toString.call(globalObject) === "[object Window]") { + try { + scratchCanvas = globalObject.document.createElement("canvas"); + scratchCtx = scratchCanvas.getContext("2d"); + } catch (e) { + return false; + } + return true; + } + return false; + }; + + hasBrowserCanvas(); + + makeImage = function(imageData) { + if (hasBrowserCanvas() === true) { + var img; + scratchCtx.width = imageData.width; + scratchCtx.height = imageData.height; + scratchCtx.clearRect(0, 0, imageData.width, imageData.height); + scratchCtx.putImageData(imageData, 0, 0); + img = new Image(); + img.src = scratchCanvas.toDataURL(); + return img; + } + throw new Error("This method requires a Browser with Canvas-capability."); + }; + + PNG.prototype.decodeFrames = function(ctx) { + var frame, i, imageData, pixels, _i, _len, _ref, _results; + if (!this.animation) { + return; + } + _ref = this.animation.frames; + _results = []; + for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { + frame = _ref[i]; + imageData = ctx.createImageData(frame.width, frame.height); + pixels = this.decodePixels(new Uint8Array(frame.data)); + this.copyToImageData(imageData, pixels); + frame.imageData = imageData; + _results.push((frame.image = makeImage(imageData))); + } + return _results; + }; + + PNG.prototype.renderFrame = function(ctx, number) { + var frame, frames, prev; + frames = this.animation.frames; + frame = frames[number]; + prev = frames[number - 1]; + if (number === 0) { + ctx.clearRect(0, 0, this.width, this.height); + } + if ( + (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND + ) { + ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height); + } else if ( + (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS + ) { + ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset); + } + if (frame.blendOp === APNG_BLEND_OP_SOURCE) { + ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height); + } + return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset); + }; + + PNG.prototype.animate = function(ctx) { + var doFrame, + frameNumber, + frames, + numFrames, + numPlays, + _ref, + _this = this; + frameNumber = 0; + (_ref = this.animation), + (numFrames = _ref.numFrames), + (frames = _ref.frames), + (numPlays = _ref.numPlays); + return (doFrame = function() { + var f, frame; + f = frameNumber++ % numFrames; + frame = frames[f]; + _this.renderFrame(ctx, f); + if (numFrames > 1 && frameNumber / numFrames < numPlays) { + return (_this.animation._timeout = setTimeout(doFrame, frame.delay)); + } + })(); + }; + + PNG.prototype.stopAnimation = function() { + var _ref; + return clearTimeout( + (_ref = this.animation) != null ? _ref._timeout : void 0 + ); + }; + + PNG.prototype.render = function(canvas) { + var ctx, data; + if (canvas._png) { + canvas._png.stopAnimation(); + } + canvas._png = this; + canvas.width = this.width; + canvas.height = this.height; + ctx = canvas.getContext("2d"); + if (this.animation) { + this.decodeFrames(ctx); + return this.animate(ctx); + } else { + data = ctx.createImageData(this.width, this.height); + this.copyToImageData(data, this.decodePixels()); + return ctx.putImageData(data, 0, 0); + } + }; + + return PNG; +})(); + +/** + * @license + * + * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb + * + * 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. + * ==================================================================== + */ + +/** + * jsPDF PNG PlugIn + * @name png_support + * @module + */ +(function(jsPDFAPI) { + + /* + * @see http://www.w3.org/TR/PNG-Chunks.html + * + Color Allowed Interpretation + Type Bit Depths + + 0 1,2,4,8,16 Each pixel is a grayscale sample. + + 2 8,16 Each pixel is an R,G,B triple. + + 3 1,2,4,8 Each pixel is a palette index; + a PLTE chunk must appear. + + 4 8,16 Each pixel is a grayscale sample, + followed by an alpha sample. + + 6 8,16 Each pixel is an R,G,B triple, + followed by an alpha sample. + */ + + /* + * PNG filter method types + * + * @see http://www.w3.org/TR/PNG-Filters.html + * @see http://www.libpng.org/pub/png/book/chapter09.html + * + * This is what the value 'Predictor' in decode params relates to + * + * 15 is "optimal prediction", which means the prediction algorithm can change from line to line. + * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte. + * + 0 None + 1 Sub + 2 Up + 3 Average + 4 Paeth + */ + + var canCompress = function(value) { + return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS(); + }; + + var hasCompressionJS = function() { + return typeof fflate.zlibSync === "function"; + }; + var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) { + var level = 4; + var filter_method = filterUp; + + switch (compression) { + case jsPDFAPI.image_compression.FAST: + level = 1; + filter_method = filterSub; + break; + + case jsPDFAPI.image_compression.MEDIUM: + level = 6; + filter_method = filterAverage; + break; + + case jsPDFAPI.image_compression.SLOW: + level = 9; + filter_method = filterPaeth; + break; + } + + bytes = applyPngFilterMethod( + bytes, + lineLength, + colorsPerPixel, + filter_method + ); + var dat = fflate.zlibSync(bytes, { level: level }); + return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat); + }; + + var applyPngFilterMethod = function( + bytes, + lineLength, + colorsPerPixel, + filter_method + ) { + var lines = bytes.length / lineLength, + result = new Uint8Array(bytes.length + lines), + filter_methods = getFilterMethods(), + line, + prevLine, + offset; + + for (var i = 0; i < lines; i += 1) { + offset = i * lineLength; + line = bytes.subarray(offset, offset + lineLength); + + if (filter_method) { + result.set(filter_method(line, colorsPerPixel, prevLine), offset + i); + } else { + var len = filter_methods.length, + results = []; + + for (var j; j < len; j += 1) { + results[j] = filter_methods[j](line, colorsPerPixel, prevLine); + } + + var ind = getIndexOfSmallestSum(results.concat()); + + result.set(results[ind], offset + i); + } + + prevLine = line; + } + + return result; + }; + + var filterNone = function(line) { + /*var result = new Uint8Array(line.length + 1); + result[0] = 0; + result.set(line, 1);*/ + + var result = Array.apply([], line); + result.unshift(0); + + return result; + }; + + var filterSub = function(line, colorsPerPixel) { + var result = [], + len = line.length, + left; + + result[0] = 1; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + result[i + 1] = (line[i] - left + 0x0100) & 0xff; + } + + return result; + }; + + var filterUp = function(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + up; + + result[0] = 2; + + for (var i = 0; i < len; i += 1) { + up = (prevLine && prevLine[i]) || 0; + result[i + 1] = (line[i] - up + 0x0100) & 0xff; + } + + return result; + }; + + var filterAverage = function(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + left, + up; + + result[0] = 3; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + up = (prevLine && prevLine[i]) || 0; + result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff; + } + + return result; + }; + + var filterPaeth = function(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + left, + up, + upLeft, + paeth; + + result[0] = 4; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + up = (prevLine && prevLine[i]) || 0; + upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0; + paeth = paethPredictor(left, up, upLeft); + result[i + 1] = (line[i] - paeth + 0x0100) & 0xff; + } + + return result; + }; + + var paethPredictor = function(left, up, upLeft) { + if (left === up && up === upLeft) { + return left; + } + var pLeft = Math.abs(up - upLeft), + pUp = Math.abs(left - upLeft), + pUpLeft = Math.abs(left + up - upLeft - upLeft); + return pLeft <= pUp && pLeft <= pUpLeft + ? left + : pUp <= pUpLeft + ? up + : upLeft; + }; + + var getFilterMethods = function() { + return [filterNone, filterSub, filterUp, filterAverage, filterPaeth]; + }; + + var getIndexOfSmallestSum = function(arrays) { + var sum = arrays.map(function(value) { + return value.reduce(function(pv, cv) { + return pv + Math.abs(cv); + }, 0); + }); + return sum.indexOf(Math.min.apply(null, sum)); + }; + + var getPredictorFromCompression = function(compression) { + var predictor; + switch (compression) { + case jsPDFAPI.image_compression.FAST: + predictor = 11; + break; + + case jsPDFAPI.image_compression.MEDIUM: + predictor = 13; + break; + + case jsPDFAPI.image_compression.SLOW: + predictor = 14; + break; + + default: + predictor = 12; + break; + } + return predictor; + }; + + /** + * @name processPNG + * @function + * @ignore + */ + jsPDFAPI.processPNG = function(imageData, index, alias, compression) { + + var colorSpace, + filter = this.decode.FLATE_DECODE, + bitsPerComponent, + image, + decodeParameters = "", + trns, + colors, + pal, + smask, + pixels, + len, + alphaData, + imgData, + hasColors, + pixel, + i, + n; + + if (this.__addimage__.isArrayBuffer(imageData)) + imageData = new Uint8Array(imageData); + + if (this.__addimage__.isArrayBufferView(imageData)) { + image = new PNG(imageData); + imageData = image.imgData; + bitsPerComponent = image.bits; + colorSpace = image.colorSpace; + colors = image.colors; + + /* + * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample. + * + * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample. + * + * Extract alpha to create two separate images, using the alpha as a sMask + */ + if ([4, 6].indexOf(image.colorType) !== -1) { + /* + * processes 8 bit RGBA and grayscale + alpha images + */ + if (image.bits === 8) { + pixels = + image.pixelBitlength == 32 + ? new Uint32Array(image.decodePixels().buffer) + : image.pixelBitlength == 16 + ? new Uint16Array(image.decodePixels().buffer) + : new Uint8Array(image.decodePixels().buffer); + len = pixels.length; + imgData = new Uint8Array(len * image.colors); + alphaData = new Uint8Array(len); + var pDiff = image.pixelBitlength - image.bits; + i = 0; + n = 0; + var pbl; + + for (; i < len; i++) { + pixel = pixels[i]; + pbl = 0; + + while (pbl < pDiff) { + imgData[n++] = (pixel >>> pbl) & 0xff; + pbl = pbl + image.bits; + } + + alphaData[i] = (pixel >>> pbl) & 0xff; + } + } + + /* + * processes 16 bit RGBA and grayscale + alpha images + */ + if (image.bits === 16) { + pixels = new Uint32Array(image.decodePixels().buffer); + len = pixels.length; + imgData = new Uint8Array( + len * (32 / image.pixelBitlength) * image.colors + ); + alphaData = new Uint8Array(len * (32 / image.pixelBitlength)); + hasColors = image.colors > 1; + i = 0; + n = 0; + var a = 0; + + while (i < len) { + pixel = pixels[i++]; + + imgData[n++] = (pixel >>> 0) & 0xff; + + if (hasColors) { + imgData[n++] = (pixel >>> 16) & 0xff; + + pixel = pixels[i++]; + imgData[n++] = (pixel >>> 0) & 0xff; + } + + alphaData[a++] = (pixel >>> 16) & 0xff; + } + bitsPerComponent = 8; + } + + if (canCompress(compression)) { + imageData = compressBytes( + imgData, + image.width * image.colors, + image.colors, + compression + ); + smask = compressBytes(alphaData, image.width, 1, compression); + } else { + imageData = imgData; + smask = alphaData; + filter = undefined; + } + } + + /* + * Indexed png. Each pixel is a palette index. + */ + if (image.colorType === 3) { + colorSpace = this.color_spaces.INDEXED; + pal = image.palette; + + if (image.transparency.indexed) { + var trans = image.transparency.indexed; + var total = 0; + i = 0; + len = trans.length; + + for (; i < len; ++i) { + total += trans[i]; + } + + total = total / 255; + + /* + * a single color is specified as 100% transparent (0), + * so we set trns to use a /Mask with that index + */ + if (total === len - 1 && trans.indexOf(0) !== -1) { + trns = [trans.indexOf(0)]; + + /* + * there's more than one colour within the palette that specifies + * a transparency value less than 255, so we unroll the pixels to create an image sMask + */ + } else if (total !== len) { + pixels = image.decodePixels(); + alphaData = new Uint8Array(pixels.length); + i = 0; + len = pixels.length; + + for (; i < len; i++) { + alphaData[i] = trans[pixels[i]]; + } + + smask = compressBytes(alphaData, image.width, 1); + } + } + } + + var predictor = getPredictorFromCompression(compression); + + if (filter === this.decode.FLATE_DECODE) { + decodeParameters = "/Predictor " + predictor + " "; + } + decodeParameters += + "/Colors " + + colors + + " /BitsPerComponent " + + bitsPerComponent + + " /Columns " + + image.width; + + if ( + this.__addimage__.isArrayBuffer(imageData) || + this.__addimage__.isArrayBufferView(imageData) + ) { + imageData = this.__addimage__.arrayBufferToBinaryString(imageData); + } + + if ( + (smask && this.__addimage__.isArrayBuffer(smask)) || + this.__addimage__.isArrayBufferView(smask) + ) { + smask = this.__addimage__.arrayBufferToBinaryString(smask); + } + + return { + alias: alias, + data: imageData, + index: index, + filter: filter, + decodeParameters: decodeParameters, + transparency: trns, + palette: pal, + sMask: smask, + predictor: predictor, + width: image.width, + height: image.height, + bitsPerComponent: bitsPerComponent, + colorSpace: colorSpace + }; + } + }; +})(jsPDF.API); + +/** + * @license + * (c) Dean McNamee , 2013. + * + * https://github.com/deanm/omggif + * + * 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. + * + * omggif is a JavaScript implementation of a GIF 89a encoder and decoder, + * including animation and compression. It does not rely on any specific + * underlying system, so should run in the browser, Node, or Plask. + */ + +function GifReader(buf) { + var p = 0; + + // - Header (GIF87a or GIF89a). + if ( + buf[p++] !== 0x47 || + buf[p++] !== 0x49 || + buf[p++] !== 0x46 || + buf[p++] !== 0x38 || + ((buf[p++] + 1) & 0xfd) !== 0x38 || + buf[p++] !== 0x61 + ) { + throw new Error("Invalid GIF 87a/89a header."); + } + + // - Logical Screen Descriptor. + var width = buf[p++] | (buf[p++] << 8); + var height = buf[p++] | (buf[p++] << 8); + var pf0 = buf[p++]; // . + var global_palette_flag = pf0 >> 7; + var num_global_colors_pow2 = pf0 & 0x7; + var num_global_colors = 1 << (num_global_colors_pow2 + 1); + var background = buf[p++]; + buf[p++]; // Pixel aspect ratio (unused?). + + var global_palette_offset = null; + var global_palette_size = null; + + if (global_palette_flag) { + global_palette_offset = p; + global_palette_size = num_global_colors; + p += num_global_colors * 3; // Seek past palette. + } + + var no_eof = true; + + var frames = []; + + var delay = 0; + var transparent_index = null; + var disposal = 0; // 0 - No disposal specified. + var loop_count = null; + + this.width = width; + this.height = height; + + while (no_eof && p < buf.length) { + switch (buf[p++]) { + case 0x21: // Graphics Control Extension Block + switch (buf[p++]) { + case 0xff: // Application specific block + // Try if it's a Netscape block (with animation loop counter). + if ( + buf[p] !== 0x0b || // 21 FF already read, check block size. + // NETSCAPE2.0 + (buf[p + 1] == 0x4e && + buf[p + 2] == 0x45 && + buf[p + 3] == 0x54 && + buf[p + 4] == 0x53 && + buf[p + 5] == 0x43 && + buf[p + 6] == 0x41 && + buf[p + 7] == 0x50 && + buf[p + 8] == 0x45 && + buf[p + 9] == 0x32 && + buf[p + 10] == 0x2e && + buf[p + 11] == 0x30 && + // Sub-block + buf[p + 12] == 0x03 && + buf[p + 13] == 0x01 && + buf[p + 16] == 0) + ) { + p += 14; + loop_count = buf[p++] | (buf[p++] << 8); + p++; // Skip terminator. + } else { + // We don't know what it is, just try to get past it. + p += 12; + while (true) { + // Seek through subblocks. + var block_size = buf[p++]; + // Bad block size (ex: undefined from an out of bounds read). + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + p += block_size; + } + } + break; + + case 0xf9: // Graphics Control Extension + if (buf[p++] !== 0x4 || buf[p + 4] !== 0) + throw new Error("Invalid graphics extension block."); + var pf1 = buf[p++]; + delay = buf[p++] | (buf[p++] << 8); + transparent_index = buf[p++]; + if ((pf1 & 1) === 0) transparent_index = null; + disposal = (pf1 >> 2) & 0x7; + p++; // Skip terminator. + break; + + case 0xfe: // Comment Extension. + while (true) { + // Seek through subblocks. + var block_size = buf[p++]; + // Bad block size (ex: undefined from an out of bounds read). + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + // console.log(buf.slice(p, p+block_size).toString('ascii')); + p += block_size; + } + break; + + default: + throw new Error( + "Unknown graphic control label: 0x" + buf[p - 1].toString(16) + ); + } + break; + + case 0x2c: // Image Descriptor. + var x = buf[p++] | (buf[p++] << 8); + var y = buf[p++] | (buf[p++] << 8); + var w = buf[p++] | (buf[p++] << 8); + var h = buf[p++] | (buf[p++] << 8); + var pf2 = buf[p++]; + var local_palette_flag = pf2 >> 7; + var interlace_flag = (pf2 >> 6) & 1; + var num_local_colors_pow2 = pf2 & 0x7; + var num_local_colors = 1 << (num_local_colors_pow2 + 1); + var palette_offset = global_palette_offset; + var palette_size = global_palette_size; + var has_local_palette = false; + if (local_palette_flag) { + var has_local_palette = true; + palette_offset = p; // Override with local palette. + palette_size = num_local_colors; + p += num_local_colors * 3; // Seek past palette. + } + + var data_offset = p; + + p++; // codesize + while (true) { + var block_size = buf[p++]; + // Bad block size (ex: undefined from an out of bounds read). + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + p += block_size; + } + + frames.push({ + x: x, + y: y, + width: w, + height: h, + has_local_palette: has_local_palette, + palette_offset: palette_offset, + palette_size: palette_size, + data_offset: data_offset, + data_length: p - data_offset, + transparent_index: transparent_index, + interlaced: !!interlace_flag, + delay: delay, + disposal: disposal + }); + break; + + case 0x3b: // Trailer Marker (end of file). + no_eof = false; + break; + + default: + throw new Error("Unknown gif block: 0x" + buf[p - 1].toString(16)); + } + } + + this.numFrames = function() { + return frames.length; + }; + + this.loopCount = function() { + return loop_count; + }; + + this.frameInfo = function(frame_num) { + if (frame_num < 0 || frame_num >= frames.length) + throw new Error("Frame index out of range."); + return frames[frame_num]; + }; + + this.decodeAndBlitFrameBGRA = function(frame_num, pixels) { + var frame = this.frameInfo(frame_num); + var num_pixels = frame.width * frame.height; + var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices. + GifReaderLZWOutputIndexStream( + buf, + frame.data_offset, + index_stream, + num_pixels + ); + var palette_offset = frame.palette_offset; + + // NOTE(deanm): It seems to be much faster to compare index to 256 than + // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in + // the profile, not sure if it's related to using a Uint8Array. + var trans = frame.transparent_index; + if (trans === null) trans = 256; + + // We are possibly just blitting to a portion of the entire frame. + // That is a subrect within the framerect, so the additional pixels + // must be skipped over after we finished a scanline. + var framewidth = frame.width; + var framestride = width - framewidth; + var xleft = framewidth; // Number of subrect pixels left in scanline. + + // Output indices of the top left and bottom right corners of the subrect. + var opbeg = (frame.y * width + frame.x) * 4; + var opend = ((frame.y + frame.height) * width + frame.x) * 4; + var op = opbeg; + + var scanstride = framestride * 4; + + // Use scanstride to skip past the rows when interlacing. This is skipping + // 7 rows for the first two passes, then 3 then 1. + if (frame.interlaced === true) { + scanstride += width * 4 * 7; // Pass 1. + } + + var interlaceskip = 8; // Tracking the row interval in the current pass. + + for (var i = 0, il = index_stream.length; i < il; ++i) { + var index = index_stream[i]; + + if (xleft === 0) { + // Beginning of new scan line + op += scanstride; + xleft = framewidth; + if (op >= opend) { + // Catch the wrap to switch passes when interlacing. + scanstride = framestride * 4 + width * 4 * (interlaceskip - 1); + // interlaceskip / 2 * 4 is interlaceskip << 1. + op = opbeg + (framewidth + framestride) * (interlaceskip << 1); + interlaceskip >>= 1; + } + } + + if (index === trans) { + op += 4; + } else { + var r = buf[palette_offset + index * 3]; + var g = buf[palette_offset + index * 3 + 1]; + var b = buf[palette_offset + index * 3 + 2]; + pixels[op++] = b; + pixels[op++] = g; + pixels[op++] = r; + pixels[op++] = 255; + } + --xleft; + } + }; + + // I will go to copy and paste hell one day... + this.decodeAndBlitFrameRGBA = function(frame_num, pixels) { + var frame = this.frameInfo(frame_num); + var num_pixels = frame.width * frame.height; + var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices. + GifReaderLZWOutputIndexStream( + buf, + frame.data_offset, + index_stream, + num_pixels + ); + var palette_offset = frame.palette_offset; + + // NOTE(deanm): It seems to be much faster to compare index to 256 than + // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in + // the profile, not sure if it's related to using a Uint8Array. + var trans = frame.transparent_index; + if (trans === null) trans = 256; + + // We are possibly just blitting to a portion of the entire frame. + // That is a subrect within the framerect, so the additional pixels + // must be skipped over after we finished a scanline. + var framewidth = frame.width; + var framestride = width - framewidth; + var xleft = framewidth; // Number of subrect pixels left in scanline. + + // Output indices of the top left and bottom right corners of the subrect. + var opbeg = (frame.y * width + frame.x) * 4; + var opend = ((frame.y + frame.height) * width + frame.x) * 4; + var op = opbeg; + + var scanstride = framestride * 4; + + // Use scanstride to skip past the rows when interlacing. This is skipping + // 7 rows for the first two passes, then 3 then 1. + if (frame.interlaced === true) { + scanstride += width * 4 * 7; // Pass 1. + } + + var interlaceskip = 8; // Tracking the row interval in the current pass. + + for (var i = 0, il = index_stream.length; i < il; ++i) { + var index = index_stream[i]; + + if (xleft === 0) { + // Beginning of new scan line + op += scanstride; + xleft = framewidth; + if (op >= opend) { + // Catch the wrap to switch passes when interlacing. + scanstride = framestride * 4 + width * 4 * (interlaceskip - 1); + // interlaceskip / 2 * 4 is interlaceskip << 1. + op = opbeg + (framewidth + framestride) * (interlaceskip << 1); + interlaceskip >>= 1; + } + } + + if (index === trans) { + op += 4; + } else { + var r = buf[palette_offset + index * 3]; + var g = buf[palette_offset + index * 3 + 1]; + var b = buf[palette_offset + index * 3 + 2]; + pixels[op++] = r; + pixels[op++] = g; + pixels[op++] = b; + pixels[op++] = 255; + } + --xleft; + } + }; +} + +function GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) { + var min_code_size = code_stream[p++]; + + var clear_code = 1 << min_code_size; + var eoi_code = clear_code + 1; + var next_code = eoi_code + 1; + + var cur_code_size = min_code_size + 1; // Number of bits per code. + // NOTE: This shares the same name as the encoder, but has a different + // meaning here. Here this masks each code coming from the code stream. + var code_mask = (1 << cur_code_size) - 1; + var cur_shift = 0; + var cur = 0; + + var op = 0; // Output pointer. + + var subblock_size = code_stream[p++]; + + // TODO(deanm): Would using a TypedArray be any faster? At least it would + // solve the fast mode / backing store uncertainty. + // var code_table = Array(4096); + var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits. + + var prev_code = null; // Track code-1. + + while (true) { + // Read up to two bytes, making sure we always 12-bits for max sized code. + while (cur_shift < 16) { + if (subblock_size === 0) break; // No more data to be read. + + cur |= code_stream[p++] << cur_shift; + cur_shift += 8; + + if (subblock_size === 1) { + // Never let it get to 0 to hold logic above. + subblock_size = code_stream[p++]; // Next subblock. + } else { + --subblock_size; + } + } + + // TODO(deanm): We should never really get here, we should have received + // and EOI. + if (cur_shift < cur_code_size) break; + + var code = cur & code_mask; + cur >>= cur_code_size; + cur_shift -= cur_code_size; + + // TODO(deanm): Maybe should check that the first code was a clear code, + // at least this is what you're supposed to do. But actually our encoder + // now doesn't emit a clear code first anyway. + if (code === clear_code) { + // We don't actually have to clear the table. This could be a good idea + // for greater error checking, but we don't really do any anyway. We + // will just track it with next_code and overwrite old entries. + + next_code = eoi_code + 1; + cur_code_size = min_code_size + 1; + code_mask = (1 << cur_code_size) - 1; + + // Don't update prev_code ? + prev_code = null; + continue; + } else if (code === eoi_code) { + break; + } + + // We have a similar situation as the decoder, where we want to store + // variable length entries (code table entries), but we want to do in a + // faster manner than an array of arrays. The code below stores sort of a + // linked list within the code table, and then "chases" through it to + // construct the dictionary entries. When a new entry is created, just the + // last byte is stored, and the rest (prefix) of the entry is only + // referenced by its table entry. Then the code chases through the + // prefixes until it reaches a single byte code. We have to chase twice, + // first to compute the length, and then to actually copy the data to the + // output (backwards, since we know the length). The alternative would be + // storing something in an intermediate stack, but that doesn't make any + // more sense. I implemented an approach where it also stored the length + // in the code table, although it's a bit tricky because you run out of + // bits (12 + 12 + 8), but I didn't measure much improvements (the table + // entries are generally not the long). Even when I created benchmarks for + // very long table entries the complexity did not seem worth it. + // The code table stores the prefix entry in 12 bits and then the suffix + // byte in 8 bits, so each entry is 20 bits. + + var chase_code = code < next_code ? code : prev_code; + + // Chase what we will output, either {CODE} or {CODE-1}. + var chase_length = 0; + var chase = chase_code; + while (chase > clear_code) { + chase = code_table[chase] >> 8; + ++chase_length; + } + + var k = chase; + + var op_end = op + chase_length + (chase_code !== code ? 1 : 0); + if (op_end > output_length) { + console.log("Warning, gif stream longer than expected."); + return; + } + + // Already have the first byte from the chase, might as well write it fast. + output[op++] = k; + + op += chase_length; + var b = op; // Track pointer, writing backwards. + + if (chase_code !== code) + // The case of emitting {CODE-1} + k. + output[op++] = k; + + chase = chase_code; + while (chase_length--) { + chase = code_table[chase]; + output[--b] = chase & 0xff; // Write backwards. + chase >>= 8; // Pull down to the prefix code. + } + + if (prev_code !== null && next_code < 4096) { + code_table[next_code++] = (prev_code << 8) | k; + // TODO(deanm): Figure out this clearing vs code growth logic better. I + // have an feeling that it should just happen somewhere else, for now it + // is awkward between when we grow past the max and then hit a clear code. + // For now just check if we hit the max 12-bits (then a clear code should + // follow, also of course encoded in 12-bits). + if (next_code >= code_mask + 1 && cur_code_size < 12) { + ++cur_code_size; + code_mask = (code_mask << 1) | 1; + } + } + + prev_code = code; + } + + if (op !== output_length) { + console.log("Warning, gif stream shorter than expected."); + } + + return output; +} + +/** + * @license + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * 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. + + * Neither the name of Adobe Systems Incorporated 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. +*/ +/* +JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 + +Basic GUI blocking jpeg encoder +*/ + +function JPEGEncoder(quality) { + var ffloor = Math.floor; + var YTable = new Array(64); + var UVTable = new Array(64); + var fdtbl_Y = new Array(64); + var fdtbl_UV = new Array(64); + var YDC_HT; + var UVDC_HT; + var YAC_HT; + var UVAC_HT; + + var bitcode = new Array(65535); + var category = new Array(65535); + var outputfDCTQuant = new Array(64); + var DU = new Array(64); + var byteout = []; + var bytenew = 0; + var bytepos = 7; + + var YDU = new Array(64); + var UDU = new Array(64); + var VDU = new Array(64); + var clt = new Array(256); + var RGB_YUV_TABLE = new Array(2048); + var currentQuality; + + var ZigZag = [ + 0, + 1, + 5, + 6, + 14, + 15, + 27, + 28, + 2, + 4, + 7, + 13, + 16, + 26, + 29, + 42, + 3, + 8, + 12, + 17, + 25, + 30, + 41, + 43, + 9, + 11, + 18, + 24, + 31, + 40, + 44, + 53, + 10, + 19, + 23, + 32, + 39, + 45, + 52, + 54, + 20, + 22, + 33, + 38, + 46, + 51, + 55, + 60, + 21, + 34, + 37, + 47, + 50, + 56, + 59, + 61, + 35, + 36, + 48, + 49, + 57, + 58, + 62, + 63 + ]; + + var std_dc_luminance_nrcodes = [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]; + var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + var std_ac_luminance_nrcodes = [ + 0, + 0, + 2, + 1, + 3, + 3, + 2, + 4, + 3, + 5, + 5, + 4, + 4, + 0, + 0, + 1, + 0x7d + ]; + var std_ac_luminance_values = [ + 0x01, + 0x02, + 0x03, + 0x00, + 0x04, + 0x11, + 0x05, + 0x12, + 0x21, + 0x31, + 0x41, + 0x06, + 0x13, + 0x51, + 0x61, + 0x07, + 0x22, + 0x71, + 0x14, + 0x32, + 0x81, + 0x91, + 0xa1, + 0x08, + 0x23, + 0x42, + 0xb1, + 0xc1, + 0x15, + 0x52, + 0xd1, + 0xf0, + 0x24, + 0x33, + 0x62, + 0x72, + 0x82, + 0x09, + 0x0a, + 0x16, + 0x17, + 0x18, + 0x19, + 0x1a, + 0x25, + 0x26, + 0x27, + 0x28, + 0x29, + 0x2a, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + 0x3a, + 0x43, + 0x44, + 0x45, + 0x46, + 0x47, + 0x48, + 0x49, + 0x4a, + 0x53, + 0x54, + 0x55, + 0x56, + 0x57, + 0x58, + 0x59, + 0x5a, + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6a, + 0x73, + 0x74, + 0x75, + 0x76, + 0x77, + 0x78, + 0x79, + 0x7a, + 0x83, + 0x84, + 0x85, + 0x86, + 0x87, + 0x88, + 0x89, + 0x8a, + 0x92, + 0x93, + 0x94, + 0x95, + 0x96, + 0x97, + 0x98, + 0x99, + 0x9a, + 0xa2, + 0xa3, + 0xa4, + 0xa5, + 0xa6, + 0xa7, + 0xa8, + 0xa9, + 0xaa, + 0xb2, + 0xb3, + 0xb4, + 0xb5, + 0xb6, + 0xb7, + 0xb8, + 0xb9, + 0xba, + 0xc2, + 0xc3, + 0xc4, + 0xc5, + 0xc6, + 0xc7, + 0xc8, + 0xc9, + 0xca, + 0xd2, + 0xd3, + 0xd4, + 0xd5, + 0xd6, + 0xd7, + 0xd8, + 0xd9, + 0xda, + 0xe1, + 0xe2, + 0xe3, + 0xe4, + 0xe5, + 0xe6, + 0xe7, + 0xe8, + 0xe9, + 0xea, + 0xf1, + 0xf2, + 0xf3, + 0xf4, + 0xf5, + 0xf6, + 0xf7, + 0xf8, + 0xf9, + 0xfa + ]; + + var std_dc_chrominance_nrcodes = [ + 0, + 0, + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ]; + var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + var std_ac_chrominance_nrcodes = [ + 0, + 0, + 2, + 1, + 2, + 4, + 4, + 3, + 4, + 7, + 5, + 4, + 4, + 0, + 1, + 2, + 0x77 + ]; + var std_ac_chrominance_values = [ + 0x00, + 0x01, + 0x02, + 0x03, + 0x11, + 0x04, + 0x05, + 0x21, + 0x31, + 0x06, + 0x12, + 0x41, + 0x51, + 0x07, + 0x61, + 0x71, + 0x13, + 0x22, + 0x32, + 0x81, + 0x08, + 0x14, + 0x42, + 0x91, + 0xa1, + 0xb1, + 0xc1, + 0x09, + 0x23, + 0x33, + 0x52, + 0xf0, + 0x15, + 0x62, + 0x72, + 0xd1, + 0x0a, + 0x16, + 0x24, + 0x34, + 0xe1, + 0x25, + 0xf1, + 0x17, + 0x18, + 0x19, + 0x1a, + 0x26, + 0x27, + 0x28, + 0x29, + 0x2a, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + 0x3a, + 0x43, + 0x44, + 0x45, + 0x46, + 0x47, + 0x48, + 0x49, + 0x4a, + 0x53, + 0x54, + 0x55, + 0x56, + 0x57, + 0x58, + 0x59, + 0x5a, + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6a, + 0x73, + 0x74, + 0x75, + 0x76, + 0x77, + 0x78, + 0x79, + 0x7a, + 0x82, + 0x83, + 0x84, + 0x85, + 0x86, + 0x87, + 0x88, + 0x89, + 0x8a, + 0x92, + 0x93, + 0x94, + 0x95, + 0x96, + 0x97, + 0x98, + 0x99, + 0x9a, + 0xa2, + 0xa3, + 0xa4, + 0xa5, + 0xa6, + 0xa7, + 0xa8, + 0xa9, + 0xaa, + 0xb2, + 0xb3, + 0xb4, + 0xb5, + 0xb6, + 0xb7, + 0xb8, + 0xb9, + 0xba, + 0xc2, + 0xc3, + 0xc4, + 0xc5, + 0xc6, + 0xc7, + 0xc8, + 0xc9, + 0xca, + 0xd2, + 0xd3, + 0xd4, + 0xd5, + 0xd6, + 0xd7, + 0xd8, + 0xd9, + 0xda, + 0xe2, + 0xe3, + 0xe4, + 0xe5, + 0xe6, + 0xe7, + 0xe8, + 0xe9, + 0xea, + 0xf2, + 0xf3, + 0xf4, + 0xf5, + 0xf6, + 0xf7, + 0xf8, + 0xf9, + 0xfa + ]; + + function initQuantTables(sf) { + var YQT = [ + 16, + 11, + 10, + 16, + 24, + 40, + 51, + 61, + 12, + 12, + 14, + 19, + 26, + 58, + 60, + 55, + 14, + 13, + 16, + 24, + 40, + 57, + 69, + 56, + 14, + 17, + 22, + 29, + 51, + 87, + 80, + 62, + 18, + 22, + 37, + 56, + 68, + 109, + 103, + 77, + 24, + 35, + 55, + 64, + 81, + 104, + 113, + 92, + 49, + 64, + 78, + 87, + 103, + 121, + 120, + 101, + 72, + 92, + 95, + 98, + 112, + 100, + 103, + 99 + ]; + + for (var i = 0; i < 64; i++) { + var t = ffloor((YQT[i] * sf + 50) / 100); + t = Math.min(Math.max(t, 1), 255); + YTable[ZigZag[i]] = t; + } + var UVQT = [ + 17, + 18, + 24, + 47, + 99, + 99, + 99, + 99, + 18, + 21, + 26, + 66, + 99, + 99, + 99, + 99, + 24, + 26, + 56, + 99, + 99, + 99, + 99, + 99, + 47, + 66, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99, + 99 + ]; + for (var j = 0; j < 64; j++) { + var u = ffloor((UVQT[j] * sf + 50) / 100); + u = Math.min(Math.max(u, 1), 255); + UVTable[ZigZag[j]] = u; + } + var aasf = [ + 1.0, + 1.387039845, + 1.306562965, + 1.175875602, + 1.0, + 0.785694958, + 0.5411961, + 0.275899379 + ]; + var k = 0; + for (var row = 0; row < 8; row++) { + for (var col = 0; col < 8; col++) { + fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0); + fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0); + k++; + } + } + } + + function computeHuffmanTbl(nrcodes, std_table) { + var codevalue = 0; + var pos_in_table = 0; + var HT = new Array(); + for (var k = 1; k <= 16; k++) { + for (var j = 1; j <= nrcodes[k]; j++) { + HT[std_table[pos_in_table]] = []; + HT[std_table[pos_in_table]][0] = codevalue; + HT[std_table[pos_in_table]][1] = k; + pos_in_table++; + codevalue++; + } + codevalue *= 2; + } + return HT; + } + + function initHuffmanTbl() { + YDC_HT = computeHuffmanTbl( + std_dc_luminance_nrcodes, + std_dc_luminance_values + ); + UVDC_HT = computeHuffmanTbl( + std_dc_chrominance_nrcodes, + std_dc_chrominance_values + ); + YAC_HT = computeHuffmanTbl( + std_ac_luminance_nrcodes, + std_ac_luminance_values + ); + UVAC_HT = computeHuffmanTbl( + std_ac_chrominance_nrcodes, + std_ac_chrominance_values + ); + } + + function initCategoryNumber() { + var nrlower = 1; + var nrupper = 2; + for (var cat = 1; cat <= 15; cat++) { + //Positive numbers + for (var nr = nrlower; nr < nrupper; nr++) { + category[32767 + nr] = cat; + bitcode[32767 + nr] = []; + bitcode[32767 + nr][1] = cat; + bitcode[32767 + nr][0] = nr; + } + //Negative numbers + for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) { + category[32767 + nrneg] = cat; + bitcode[32767 + nrneg] = []; + bitcode[32767 + nrneg][1] = cat; + bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg; + } + nrlower <<= 1; + nrupper <<= 1; + } + } + + function initRGBYUVTable() { + for (var i = 0; i < 256; i++) { + RGB_YUV_TABLE[i] = 19595 * i; + RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i; + RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000; + RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i; + RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i; + RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff; + RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i; + RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i; + } + } + + // IO functions + function writeBits(bs) { + var value = bs[0]; + var posval = bs[1] - 1; + while (posval >= 0) { + if (value & (1 << posval)) { + bytenew |= 1 << bytepos; + } + posval--; + bytepos--; + if (bytepos < 0) { + if (bytenew == 0xff) { + writeByte(0xff); + writeByte(0); + } else { + writeByte(bytenew); + } + bytepos = 7; + bytenew = 0; + } + } + } + + function writeByte(value) { + //byteout.push(clt[value]); // write char directly instead of converting later + byteout.push(value); + } + + function writeWord(value) { + writeByte((value >> 8) & 0xff); + writeByte(value & 0xff); + } + + // DCT & quantization core + function fDCTQuant(data, fdtbl) { + var d0, d1, d2, d3, d4, d5, d6, d7; + /* Pass 1: process rows. */ + var dataOff = 0; + var i; + var I8 = 8; + var I64 = 64; + for (i = 0; i < I8; ++i) { + d0 = data[dataOff]; + d1 = data[dataOff + 1]; + d2 = data[dataOff + 2]; + d3 = data[dataOff + 3]; + d4 = data[dataOff + 4]; + d5 = data[dataOff + 5]; + d6 = data[dataOff + 6]; + d7 = data[dataOff + 7]; + + var tmp0 = d0 + d7; + var tmp7 = d0 - d7; + var tmp1 = d1 + d6; + var tmp6 = d1 - d6; + var tmp2 = d2 + d5; + var tmp5 = d2 - d5; + var tmp3 = d3 + d4; + var tmp4 = d3 - d4; + + /* Even part */ + var tmp10 = tmp0 + tmp3; /* phase 2 */ + var tmp13 = tmp0 - tmp3; + var tmp11 = tmp1 + tmp2; + var tmp12 = tmp1 - tmp2; + + data[dataOff] = tmp10 + tmp11; /* phase 3 */ + data[dataOff + 4] = tmp10 - tmp11; + + var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ + data[dataOff + 2] = tmp13 + z1; /* phase 5 */ + data[dataOff + 6] = tmp13 - z1; + + /* Odd part */ + tmp10 = tmp4 + tmp5; /* phase 2 */ + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ + var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */ + var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ + var z3 = tmp11 * 0.707106781; /* c4 */ + + var z11 = tmp7 + z3; /* phase 5 */ + var z13 = tmp7 - z3; + + data[dataOff + 5] = z13 + z2; /* phase 6 */ + data[dataOff + 3] = z13 - z2; + data[dataOff + 1] = z11 + z4; + data[dataOff + 7] = z11 - z4; + + dataOff += 8; /* advance pointer to next row */ + } + + /* Pass 2: process columns. */ + dataOff = 0; + for (i = 0; i < I8; ++i) { + d0 = data[dataOff]; + d1 = data[dataOff + 8]; + d2 = data[dataOff + 16]; + d3 = data[dataOff + 24]; + d4 = data[dataOff + 32]; + d5 = data[dataOff + 40]; + d6 = data[dataOff + 48]; + d7 = data[dataOff + 56]; + + var tmp0p2 = d0 + d7; + var tmp7p2 = d0 - d7; + var tmp1p2 = d1 + d6; + var tmp6p2 = d1 - d6; + var tmp2p2 = d2 + d5; + var tmp5p2 = d2 - d5; + var tmp3p2 = d3 + d4; + var tmp4p2 = d3 - d4; + + /* Even part */ + var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */ + var tmp13p2 = tmp0p2 - tmp3p2; + var tmp11p2 = tmp1p2 + tmp2p2; + var tmp12p2 = tmp1p2 - tmp2p2; + + data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */ + data[dataOff + 32] = tmp10p2 - tmp11p2; + + var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */ + data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */ + data[dataOff + 48] = tmp13p2 - z1p2; + + /* Odd part */ + tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */ + tmp11p2 = tmp5p2 + tmp6p2; + tmp12p2 = tmp6p2 + tmp7p2; + + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */ + var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */ + var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */ + var z3p2 = tmp11p2 * 0.707106781; /* c4 */ + + var z11p2 = tmp7p2 + z3p2; /* phase 5 */ + var z13p2 = tmp7p2 - z3p2; + + data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */ + data[dataOff + 24] = z13p2 - z2p2; + data[dataOff + 8] = z11p2 + z4p2; + data[dataOff + 56] = z11p2 - z4p2; + + dataOff++; /* advance pointer to next column */ + } + + // Quantize/descale the coefficients + var fDCTQuant; + for (i = 0; i < I64; ++i) { + // Apply the quantization and scaling factor & Round to nearest integer + fDCTQuant = data[i] * fdtbl[i]; + outputfDCTQuant[i] = + fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0; + //outputfDCTQuant[i] = fround(fDCTQuant); + } + return outputfDCTQuant; + } + + function writeAPP0() { + writeWord(0xffe0); // marker + writeWord(16); // length + writeByte(0x4a); // J + writeByte(0x46); // F + writeByte(0x49); // I + writeByte(0x46); // F + writeByte(0); // = "JFIF",'\0' + writeByte(1); // versionhi + writeByte(1); // versionlo + writeByte(0); // xyunits + writeWord(1); // xdensity + writeWord(1); // ydensity + writeByte(0); // thumbnwidth + writeByte(0); // thumbnheight + } + + function writeSOF0(width, height) { + writeWord(0xffc0); // marker + writeWord(17); // length, truecolor YUV JPG + writeByte(8); // precision + writeWord(height); + writeWord(width); + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0x11); // HVY + writeByte(0); // QTY + writeByte(2); // IdU + writeByte(0x11); // HVU + writeByte(1); // QTU + writeByte(3); // IdV + writeByte(0x11); // HVV + writeByte(1); // QTV + } + + function writeDQT() { + writeWord(0xffdb); // marker + writeWord(132); // length + writeByte(0); + for (var i = 0; i < 64; i++) { + writeByte(YTable[i]); + } + writeByte(1); + for (var j = 0; j < 64; j++) { + writeByte(UVTable[j]); + } + } + + function writeDHT() { + writeWord(0xffc4); // marker + writeWord(0x01a2); // length + + writeByte(0); // HTYDCinfo + for (var i = 0; i < 16; i++) { + writeByte(std_dc_luminance_nrcodes[i + 1]); + } + for (var j = 0; j <= 11; j++) { + writeByte(std_dc_luminance_values[j]); + } + + writeByte(0x10); // HTYACinfo + for (var k = 0; k < 16; k++) { + writeByte(std_ac_luminance_nrcodes[k + 1]); + } + for (var l = 0; l <= 161; l++) { + writeByte(std_ac_luminance_values[l]); + } + + writeByte(1); // HTUDCinfo + for (var m = 0; m < 16; m++) { + writeByte(std_dc_chrominance_nrcodes[m + 1]); + } + for (var n = 0; n <= 11; n++) { + writeByte(std_dc_chrominance_values[n]); + } + + writeByte(0x11); // HTUACinfo + for (var o = 0; o < 16; o++) { + writeByte(std_ac_chrominance_nrcodes[o + 1]); + } + for (var p = 0; p <= 161; p++) { + writeByte(std_ac_chrominance_values[p]); + } + } + + function writeSOS() { + writeWord(0xffda); // marker + writeWord(12); // length + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0); // HTY + writeByte(2); // IdU + writeByte(0x11); // HTU + writeByte(3); // IdV + writeByte(0x11); // HTV + writeByte(0); // Ss + writeByte(0x3f); // Se + writeByte(0); // Bf + } + + function processDU(CDU, fdtbl, DC, HTDC, HTAC) { + var EOB = HTAC[0x00]; + var M16zeroes = HTAC[0xf0]; + var pos; + var I16 = 16; + var I63 = 63; + var I64 = 64; + var DU_DCT = fDCTQuant(CDU, fdtbl); + //ZigZag reorder + for (var j = 0; j < I64; ++j) { + DU[ZigZag[j]] = DU_DCT[j]; + } + var Diff = DU[0] - DC; + DC = DU[0]; + //Encode DC + if (Diff == 0) { + writeBits(HTDC[0]); // Diff might be 0 + } else { + pos = 32767 + Diff; + writeBits(HTDC[category[pos]]); + writeBits(bitcode[pos]); + } + //Encode ACs + var end0pos = 63; // was const... which is crazy + while (end0pos > 0 && DU[end0pos] == 0) { + end0pos--; + } + //end0pos = first element in reverse order !=0 + if (end0pos == 0) { + writeBits(EOB); + return DC; + } + var i = 1; + var lng; + while (i <= end0pos) { + var startpos = i; + while (DU[i] == 0 && i <= end0pos) { + ++i; + } + var nrzeroes = i - startpos; + if (nrzeroes >= I16) { + lng = nrzeroes >> 4; + for (var nrmarker = 1; nrmarker <= lng; ++nrmarker) + writeBits(M16zeroes); + nrzeroes = nrzeroes & 0xf; + } + pos = 32767 + DU[i]; + writeBits(HTAC[(nrzeroes << 4) + category[pos]]); + writeBits(bitcode[pos]); + i++; + } + if (end0pos != I63) { + writeBits(EOB); + } + return DC; + } + + function initCharLookupTable() { + var sfcc = String.fromCharCode; + for (var i = 0; i < 256; i++) { + ///// ACHTUNG // 255 + clt[i] = sfcc(i); + } + } + + this.encode = function( + image, + quality // image data object + ) { + if (quality) setQuality(quality); + + // Initialize bit writer + byteout = new Array(); + bytenew = 0; + bytepos = 7; + + // Add JPEG headers + writeWord(0xffd8); // SOI + writeAPP0(); + writeDQT(); + writeSOF0(image.width, image.height); + writeDHT(); + writeSOS(); + + // Encode 8x8 macroblocks + var DCY = 0; + var DCU = 0; + var DCV = 0; + + bytenew = 0; + bytepos = 7; + + this.encode.displayName = "_encode_"; + + var imageData = image.data; + var width = image.width; + var height = image.height; + + var quadWidth = width * 4; + + var x, + y = 0; + var r, g, b; + var start, p, col, row, pos; + while (y < height) { + x = 0; + while (x < quadWidth) { + start = quadWidth * y + x; + col = -1; + row = 0; + + for (pos = 0; pos < 64; pos++) { + row = pos >> 3; // /8 + col = (pos & 7) * 4; // %8 + p = start + row * quadWidth + col; + + if (y + row >= height) { + // padding bottom + p -= quadWidth * (y + 1 + row - height); + } + + if (x + col >= quadWidth) { + // padding right + p -= x + col - quadWidth + 4; + } + + r = imageData[p++]; + g = imageData[p++]; + b = imageData[p++]; + + /* // calculate YUV values dynamically + YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 + UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); + VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); + */ + + // use lookup table (slightly faster) + YDU[pos] = + ((RGB_YUV_TABLE[r] + + RGB_YUV_TABLE[(g + 256) >> 0] + + RGB_YUV_TABLE[(b + 512) >> 0]) >> + 16) - + 128; + UDU[pos] = + ((RGB_YUV_TABLE[(r + 768) >> 0] + + RGB_YUV_TABLE[(g + 1024) >> 0] + + RGB_YUV_TABLE[(b + 1280) >> 0]) >> + 16) - + 128; + VDU[pos] = + ((RGB_YUV_TABLE[(r + 1280) >> 0] + + RGB_YUV_TABLE[(g + 1536) >> 0] + + RGB_YUV_TABLE[(b + 1792) >> 0]) >> + 16) - + 128; + } + + DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + x += 32; + } + y += 8; + } + + //////////////////////////////////////////////////////////////// + + // Do the bit alignment of the EOI marker + if (bytepos >= 0) { + var fillbits = []; + fillbits[1] = bytepos + 1; + fillbits[0] = (1 << (bytepos + 1)) - 1; + writeBits(fillbits); + } + + writeWord(0xffd9); //EOI + + return new Uint8Array(byteout); + }; + + function setQuality(quality) { + quality = Math.min(Math.max(quality, 1), 100); + + if (currentQuality == quality) return; // don't recalc if unchanged + + var sf = + quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2); + + initQuantTables(sf); + currentQuality = quality; + //console.log('Quality set to: '+quality +'%'); + } + + function init() { + quality = quality || 50; + // Create tables + initCharLookupTable(); + initHuffmanTbl(); + initCategoryNumber(); + initRGBYUVTable(); + + setQuality(quality); + } + init(); +} + +/** + * @license + * Copyright (c) 2017 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF Gif Support PlugIn + * + * @name gif_support + * @module + */ +(function(jsPDFAPI) { + + jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) { + var reader = new GifReader(imageData); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = []; + + reader.decodeAndBlitFrameRGBA(0, pixels); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; + + jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A; +})(jsPDF.API); + +/** + * @author shaozilee + * + * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp + * + */ + +function BmpDecoder(buffer, is_with_alpha) { + this.pos = 0; + this.buffer = buffer; + this.datav = new DataView(buffer.buffer); + this.is_with_alpha = !!is_with_alpha; + this.bottom_up = true; + this.flag = + String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]); + this.pos += 2; + if (["BM", "BA", "CI", "CP", "IC", "PT"].indexOf(this.flag) === -1) + throw new Error("Invalid BMP File"); + this.parseHeader(); + this.parseBGR(); +} + +BmpDecoder.prototype.parseHeader = function() { + this.fileSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.reserved = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.offset = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.headerSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.width = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.height = this.datav.getInt32(this.pos, true); + this.pos += 4; + this.planes = this.datav.getUint16(this.pos, true); + this.pos += 2; + this.bitPP = this.datav.getUint16(this.pos, true); + this.pos += 2; + this.compress = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.rawSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.hr = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.vr = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.colors = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.importantColors = this.datav.getUint32(this.pos, true); + this.pos += 4; + + if (this.bitPP === 16 && this.is_with_alpha) { + this.bitPP = 15; + } + if (this.bitPP < 15) { + var len = this.colors === 0 ? 1 << this.bitPP : this.colors; + this.palette = new Array(len); + for (var i = 0; i < len; i++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var quad = this.datav.getUint8(this.pos++, true); + this.palette[i] = { + red: red, + green: green, + blue: blue, + quad: quad + }; + } + } + if (this.height < 0) { + this.height *= -1; + this.bottom_up = false; + } +}; + +BmpDecoder.prototype.parseBGR = function() { + this.pos = this.offset; + try { + var bitn = "bit" + this.bitPP; + var len = this.width * this.height * 4; + this.data = new Uint8Array(len); + + this[bitn](); + } catch (e) { + console.log("bit decode error:" + e); + } +}; + +BmpDecoder.prototype.bit1 = function() { + var xlen = Math.ceil(this.width / 8); + var mode = xlen % 4; + var y; + for (y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < xlen; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 8 * 4; + for (var i = 0; i < 8; i++) { + if (x * 8 + i < this.width) { + var rgb = this.palette[(b >> (7 - i)) & 0x1]; + this.data[location + i * 4] = rgb.blue; + this.data[location + i * 4 + 1] = rgb.green; + this.data[location + i * 4 + 2] = rgb.red; + this.data[location + i * 4 + 3] = 0xff; + } else { + break; + } + } + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } +}; + +BmpDecoder.prototype.bit4 = function() { + var xlen = Math.ceil(this.width / 2); + var mode = xlen % 4; + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < xlen; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 2 * 4; + + var before = b >> 4; + var after = b & 0x0f; + + var rgb = this.palette[before]; + this.data[location] = rgb.blue; + this.data[location + 1] = rgb.green; + this.data[location + 2] = rgb.red; + this.data[location + 3] = 0xff; + + if (x * 2 + 1 >= this.width) break; + + rgb = this.palette[after]; + this.data[location + 4] = rgb.blue; + this.data[location + 4 + 1] = rgb.green; + this.data[location + 4 + 2] = rgb.red; + this.data[location + 4 + 3] = 0xff; + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } +}; + +BmpDecoder.prototype.bit8 = function() { + var mode = this.width % 4; + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < this.width; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + if (b < this.palette.length) { + var rgb = this.palette[b]; + this.data[location] = rgb.red; + this.data[location + 1] = rgb.green; + this.data[location + 2] = rgb.blue; + this.data[location + 3] = 0xff; + } else { + this.data[location] = 0xff; + this.data[location + 1] = 0xff; + this.data[location + 2] = 0xff; + this.data[location + 3] = 0xff; + } + } + if (mode !== 0) { + this.pos += 4 - mode; + } + } +}; + +BmpDecoder.prototype.bit15 = function() { + var dif_w = this.width % 3; + var _11111 = parseInt("11111", 2), + _1_5 = _11111; + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < this.width; x++) { + var B = this.datav.getUint16(this.pos, true); + this.pos += 2; + var blue = (((B & _1_5) / _1_5) * 255) | 0; + var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0; + var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0; + var alpha = B >> 15 ? 0xff : 0x00; + + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } + //skip extra bytes + this.pos += dif_w; + } +}; + +BmpDecoder.prototype.bit16 = function() { + var dif_w = this.width % 3; + var _11111 = parseInt("11111", 2), + _1_5 = _11111; + var _111111 = parseInt("111111", 2), + _1_6 = _111111; + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < this.width; x++) { + var B = this.datav.getUint16(this.pos, true); + this.pos += 2; + var alpha = 0xff; + var blue = (((B & _1_5) / _1_5) * 255) | 0; + var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0; + var red = (((B >> 11) / _1_5) * 255) | 0; + + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } + //skip extra bytes + this.pos += dif_w; + } +}; + +BmpDecoder.prototype.bit24 = function() { + //when height > 0 + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < this.width; x++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = 0xff; + } + //skip extra bytes + this.pos += this.width % 4; + } +}; + +/** + * add 32bit decode func + * @author soubok + */ +BmpDecoder.prototype.bit32 = function() { + //when height > 0 + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + for (var x = 0; x < this.width; x++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var alpha = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } + //skip extra bytes + //this.pos += (this.width % 4); + } +}; + +BmpDecoder.prototype.getData = function() { + return this.data; +}; + +/** + * @license + * Copyright (c) 2018 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF bmp Support PlugIn + * @name bmp_support + * @module + */ +(function(jsPDFAPI) { + + jsPDFAPI.processBMP = function(imageData, index, alias, compression) { + var reader = new BmpDecoder(imageData, false); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = reader.getData(); + + var rawImageData = { + data: pixels, + width: width, + height: height + }; + + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; +})(jsPDF.API); + +function WebPDecoder(imageData) { + + function x(F) { + if (!F) throw Error("assert :P"); + } + function fa(F, L, J) { + for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0; + return !1; + } + function I(F, L, J, H, Z) { + for (var O = 0; O < Z; O++) F[L + O] = J[H + O]; + } + function M(F, L, J, H) { + for (var Z = 0; Z < H; Z++) F[L + Z] = J; + } + function V(F) { + return new Int32Array(F); + } + function wa(F, L) { + for (var J = [], H = 0; H < F; H++) J.push(new L()); + return J; + } + function wb() { + function F(J, H, Z) { + for (var O = Z[H], L = 0; L < O; L++) { + J.push(Z.length > H + 1 ? [] : 0); + if (Z.length < H + 1) break; + F(J[L], H + 1, Z); + } + } + var L = []; + F(L, 0, [3, 11]); + return L; + } + function Ed(F, L) { + function J(H, O, F) { + for (var Z = F[O], ma = 0; ma < Z; ma++) { + H.push(F.length > O + 1 ? [] : new L()); + if (F.length < O + 1) break; + J(H[ma], O + 1, F); + } + } + var H = []; + J(H, 0, F); + return H; + } + var _WebPDecoder = function() { + var self = this; + function L(a, b) { + for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1; + return c ? (a & (c - 1)) + c : a; + } + function J(a, b, c, d, e) { + x(!(d % c)); + do (d -= c), (a[b + d] = e); + while (0 < d); + } + function H(a, b, c, d, e, f) { + var g = b, + h = 1 << c, + k, + l, + m = V(16), + n = V(16); + x(0 != e); + x(null != d); + x(null != a); + x(0 < c); + for (l = 0; l < e; ++l) { + if (15 < d[l]) return 0; + ++m[d[l]]; + } + if (m[0] == e) return 0; + n[1] = 0; + for (k = 1; 15 > k; ++k) { + if (m[k] > 1 << k) return 0; + n[k + 1] = n[k] + m[k]; + } + for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l); + if (1 == n[15]) + return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h; + var r = -1, + q = h - 1, + t = 0, + v = 1, + p = 1, + u, + w = 1 << c; + l = 0; + k = 1; + for (e = 2; k <= c; ++k, e <<= 1) { + p <<= 1; + v += p; + p -= m[k]; + if (0 > p) return 0; + for (; 0 < m[k]; --m[k]) + (d = new O()), + (d.g = k), + (d.value = f[l++]), + J(a, g + t, e, w, d), + (t = L(t, k)); + } + k = c + 1; + for (e = 2; 15 >= k; ++k, e <<= 1) { + p <<= 1; + v += p; + p -= m[k]; + if (0 > p) return 0; + for (; 0 < m[k]; --m[k]) { + d = new O(); + if ((t & q) != r) { + g += w; + r = k; + for (u = 1 << (r - c); 15 > r; ) { + u -= m[r]; + if (0 >= u) break; + ++r; + u <<= 1; + } + u = r - c; + w = 1 << u; + h += w; + r = t & q; + a[b + r].g = u + c; + a[b + r].value = g - b - r; + } + d.g = k - c; + d.value = f[l++]; + J(a, g + (t >> c), e, w, d); + t = L(t, k); + } + } + return v != 2 * n[15] - 1 ? 0 : h; + } + function Z(a, b, c, d, e) { + x(2328 >= e); + if (512 >= e) var f = V(512); + else if (((f = V(e)), null == f)) return 0; + return H(a, b, c, d, e, f); + } + function O() { + this.value = this.g = 0; + } + function Fd() { + this.value = this.g = 0; + } + function Ub() { + this.G = wa(5, O); + this.H = V(5); + this.jc = this.Qb = this.qb = this.nd = 0; + this.pd = wa(xb, Fd); + } + function ma(a, b, c, d) { + x(null != a); + x(null != b); + x(2147483648 > d); + a.Ca = 254; + a.I = 0; + a.b = -8; + a.Ka = 0; + a.oa = b; + a.pa = c; + a.Jd = b; + a.Yc = c + d; + a.Zc = 4 <= d ? c + d - 4 + 1 : c; + Qa(a); + } + function na(a, b) { + for (var c = 0; 0 < b--; ) c |= K(a, 128) << b; + return c; + } + function ca(a, b) { + var c = na(a, b); + return G(a) ? -c : c; + } + function cb(a, b, c, d) { + var e, + f = 0; + x(null != a); + x(null != b); + x(4294967288 > d); + a.Sb = d; + a.Ra = 0; + a.u = 0; + a.h = 0; + 4 < d && (d = 4); + for (e = 0; e < d; ++e) f += b[c + e] << (8 * e); + a.Ra = f; + a.bb = d; + a.oa = b; + a.pa = c; + } + function Vb(a) { + for (; 8 <= a.u && a.bb < a.Sb; ) + (a.Ra >>>= 8), + (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0), + ++a.bb, + (a.u -= 8); + db(a) && ((a.h = 1), (a.u = 0)); + } + function D(a, b) { + x(0 <= b); + if (!a.h && b <= Gd) { + var c = pb(a) & Hd[b]; + a.u += b; + Vb(a); + return c; + } + a.h = 1; + return (a.u = 0); + } + function Wb() { + this.b = this.Ca = this.I = 0; + this.oa = []; + this.pa = 0; + this.Jd = []; + this.Yc = 0; + this.Zc = []; + this.Ka = 0; + } + function Ra() { + this.Ra = 0; + this.oa = []; + this.h = this.u = this.bb = this.Sb = this.pa = 0; + } + function pb(a) { + return (a.Ra >>> (a.u & (ob - 1))) >>> 0; + } + function db(a) { + x(a.bb <= a.Sb); + return a.h || (a.bb == a.Sb && a.u > ob); + } + function qb(a, b) { + a.u = b; + a.h = db(a); + } + function Sa(a) { + a.u >= Xb && (x(a.u >= Xb), Vb(a)); + } + function Qa(a) { + x(null != a && null != a.oa); + a.pa < a.Zc + ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8)) + : (x(null != a && null != a.oa), + a.pa < a.Yc + ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8))) + : a.Ka + ? (a.b = 0) + : ((a.I <<= 8), (a.b += 8), (a.Ka = 1))); + } + function G(a) { + return na(a, 1); + } + function K(a, b) { + var c = a.Ca; + 0 > a.b && Qa(a); + var d = a.b, + e = (c * b) >>> 8, + f = (a.I >>> d > e) + 0; + f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1); + d = c; + for (e = 0; 256 <= d; ) (e += 8), (d >>= 8); + d = 7 ^ (e + Id[d]); + a.b -= d; + a.Ca = (c << d) - 1; + return f; + } + function ra(a, b, c) { + a[b + 0] = (c >> 24) & 255; + a[b + 1] = (c >> 16) & 255; + a[b + 2] = (c >> 8) & 255; + a[b + 3] = (c >> 0) & 255; + } + function Ta(a, b) { + return (a[b + 0] << 0) | (a[b + 1] << 8); + } + function Yb(a, b) { + return Ta(a, b) | (a[b + 2] << 16); + } + function Ha(a, b) { + return Ta(a, b) | (Ta(a, b + 2) << 16); + } + function Zb(a, b) { + var c = 1 << b; + x(null != a); + x(0 < b); + a.X = V(c); + if (null == a.X) return 0; + a.Mb = 32 - b; + a.Xa = b; + return 1; + } + function $b(a, b) { + x(null != a); + x(null != b); + x(a.Xa == b.Xa); + I(b.X, 0, a.X, 0, 1 << b.Xa); + } + function ac() { + this.X = []; + this.Xa = this.Mb = 0; + } + function bc(a, b, c, d) { + x(null != c); + x(null != d); + var e = c[0], + f = d[0]; + 0 == e && (e = (a * f + b / 2) / b); + 0 == f && (f = (b * e + a / 2) / a); + if (0 >= e || 0 >= f) return 0; + c[0] = e; + d[0] = f; + return 1; + } + function xa(a, b) { + return (a + (1 << b) - 1) >>> b; + } + function yb(a, b) { + return ( + (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) + + ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>> + 0 + ); + } + function X(a, b) { + self[b] = function(b, d, e, f, g, h, k) { + var c; + for (c = 0; c < g; ++c) { + var m = self[a](h[k + c - 1], e, f + c); + h[k + c] = yb(b[d + c], m); + } + }; + } + function Jd() { + this.ud = this.hd = this.jd = 0; + } + function aa(a, b) { + return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0; + } + function sa(a) { + if (0 <= a && 256 > a) return a; + if (0 > a) return 0; + if (255 < a) return 255; + } + function eb(a, b) { + return sa(a + ((a - b + 0.5) >> 1)); + } + function Ia(a, b, c) { + return Math.abs(b - c) - Math.abs(a - c); + } + function cc(a, b, c, d, e, f, g) { + d = f[g - 1]; + for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d); + } + function Kd(a, b, c, d, e) { + var f; + for (f = 0; f < c; ++f) { + var g = a[b + f], + h = (g >> 8) & 255, + k = g & 16711935, + k = k + ((h << 16) + h), + k = k & 16711935; + d[e + f] = ((g & 4278255360) + k) >>> 0; + } + } + function dc(a, b) { + b.jd = (a >> 0) & 255; + b.hd = (a >> 8) & 255; + b.ud = (a >> 16) & 255; + } + function Ld(a, b, c, d, e, f) { + var g; + for (g = 0; g < d; ++g) { + var h = b[c + g], + k = h >>> 8, + l = h >>> 16, + m = h, + l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5), + l = l & 255, + m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5), + m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5), + m = m & 255; + e[f + g] = (h & 4278255360) + (l << 16) + m; + } + } + function ec(a, b, c, d, e) { + self[b] = function(a, b, c, k, l, m, n, r, q) { + for (k = n; k < r; ++k) + for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]); + }; + self[a] = function(a, b, h, k, l, m, n) { + var f = 8 >> a.b, + g = a.Ea, + t = a.K[0], + v = a.w; + if (8 > f) + for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) { + var p = 0, + u; + for (u = 0; u < g; ++u) + u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f); + } + else self["VP8LMapColor" + c](k, l, t, v, m, n, b, h, g); + }; + } + function Md(a, b, c, d, e) { + for (c = b + c; b < c; ) { + var f = a[b++]; + d[e++] = (f >> 16) & 255; + d[e++] = (f >> 8) & 255; + d[e++] = (f >> 0) & 255; + } + } + function Nd(a, b, c, d, e) { + for (c = b + c; b < c; ) { + var f = a[b++]; + d[e++] = (f >> 16) & 255; + d[e++] = (f >> 8) & 255; + d[e++] = (f >> 0) & 255; + d[e++] = (f >> 24) & 255; + } + } + function Od(a, b, c, d, e) { + for (c = b + c; b < c; ) { + var f = a[b++], + g = ((f >> 16) & 240) | ((f >> 12) & 15), + f = ((f >> 0) & 240) | ((f >> 28) & 15); + d[e++] = g; + d[e++] = f; + } + } + function Pd(a, b, c, d, e) { + for (c = b + c; b < c; ) { + var f = a[b++], + g = ((f >> 16) & 248) | ((f >> 13) & 7), + f = ((f >> 5) & 224) | ((f >> 3) & 31); + d[e++] = g; + d[e++] = f; + } + } + function Qd(a, b, c, d, e) { + for (c = b + c; b < c; ) { + var f = a[b++]; + d[e++] = (f >> 0) & 255; + d[e++] = (f >> 8) & 255; + d[e++] = (f >> 16) & 255; + } + } + function fb(a, b, c, d, e, f) { + if (0 == f) + for (c = b + c; b < c; ) + (f = a[b++]), + ra( + d, + ((f[0] >> 24) | + ((f[1] >> 8) & 65280) | + ((f[2] << 8) & 16711680) | + (f[3] << 24)) >>> + 0 + ), + (e += 32); + else I(d, e, a, b, c); + } + function gb(a, b) { + self[b][0] = self[a + "0"]; + self[b][1] = self[a + "1"]; + self[b][2] = self[a + "2"]; + self[b][3] = self[a + "3"]; + self[b][4] = self[a + "4"]; + self[b][5] = self[a + "5"]; + self[b][6] = self[a + "6"]; + self[b][7] = self[a + "7"]; + self[b][8] = self[a + "8"]; + self[b][9] = self[a + "9"]; + self[b][10] = self[a + "10"]; + self[b][11] = self[a + "11"]; + self[b][12] = self[a + "12"]; + self[b][13] = self[a + "13"]; + self[b][14] = self[a + "0"]; + self[b][15] = self[a + "0"]; + } + function hb(a) { + return a == zb || a == Ab || a == Ja || a == Bb; + } + function Rd() { + this.eb = []; + this.size = this.A = this.fb = 0; + } + function Sd() { + this.y = []; + this.f = []; + this.ea = []; + this.F = []; + this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0; + } + function Cb() { + this.Rd = this.height = this.width = this.S = 0; + this.f = {}; + this.f.RGBA = new Rd(); + this.f.kb = new Sd(); + this.sd = null; + } + function Td() { + this.width = [0]; + this.height = [0]; + this.Pd = [0]; + this.Qd = [0]; + this.format = [0]; + } + function Ud() { + this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0; + } + function Vd(a) { + alert("todo:WebPSamplerProcessPlane"); + return a.T; + } + function Wd(a, b) { + var c = a.T, + d = b.ba.f.RGBA, + e = d.eb, + f = d.fb + a.ka * d.A, + g = P[b.ba.S], + h = a.y, + k = a.O, + l = a.f, + m = a.N, + n = a.ea, + r = a.W, + q = b.cc, + t = b.dc, + v = b.Mc, + p = b.Nc, + u = a.ka, + w = a.ka + a.T, + y = a.U, + A = (y + 1) >> 1; + 0 == u + ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y) + : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y), + ++c); + for (; u + 2 < w; u += 2) + (q = l), + (t = m), + (v = n), + (p = r), + (m += a.Rc), + (r += a.Rc), + (f += 2 * d.A), + (k += 2 * a.fa), + g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y); + k += a.fa; + a.j + w < a.o + ? (I(b.ec, b.fc, h, k, y), + I(b.cc, b.dc, l, m, A), + I(b.Mc, b.Nc, n, r, A), + c--) + : w & 1 || + g( + h, + k, + null, + null, + l, + m, + n, + r, + l, + m, + n, + r, + e, + f + d.A, + null, + null, + y + ); + return c; + } + function Xd(a, b, c) { + var d = a.F, + e = [a.J]; + if (null != d) { + var f = a.U, + g = b.ba.S, + h = g == ya || g == Ja; + b = b.ba.f.RGBA; + var k = [0], + l = a.ka; + k[0] = a.T; + a.Kb && + (0 == l ? --k[0] : (--l, (e[0] -= a.width)), + a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l)); + var m = b.eb, + l = b.fb + l * b.A; + a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A); + x(c == k); + a && hb(g) && za(m, l, h, f, k, b.A); + } + return 0; + } + function gc(a) { + var b = a.ma, + c = b.ba.S, + d = 11 > c, + e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c); + b.memory = null; + b.Ib = null; + b.Jb = null; + b.Nd = null; + if (!hc(b.Oa, a, e ? 11 : 12)) return 0; + e && hb(c) && ic(); + if (a.da) alert("todo:use_scaling"); + else { + if (d) { + if (((b.Ib = Vd), a.Kb)) { + c = (a.U + 1) >> 1; + b.memory = V(a.U + 2 * c); + if (null == b.memory) return 0; + b.ec = b.memory; + b.fc = 0; + b.cc = b.ec; + b.dc = b.fc + a.U; + b.Mc = b.cc; + b.Nc = b.dc + c; + b.Ib = Wd; + ic(); + } + } else alert("todo:EmitYUV"); + e && ((b.Jb = Xd), d && Aa()); + } + if (d && !jc) { + for (a = 0; 256 > a; ++a) + (Yd[a] = (89858 * (a - 128) + Ba) >> Wa), + (Zd[a] = -22014 * (a - 128) + Ba), + ($d[a] = -45773 * (a - 128)), + (ae[a] = (113618 * (a - 128) + Ba) >> Wa); + for (a = ta; a < Eb; ++a) + (b = (76283 * (a - 16) + Ba) >> Wa), + (be[a - ta] = ga(b, 255)), + (ce[a - ta] = ga((b + 8) >> 4, 15)); + jc = 1; + } + return 1; + } + function kc(a) { + var b = a.ma, + c = a.U, + d = a.T; + x(!(a.ka & 1)); + if (0 >= c || 0 >= d) return 0; + c = b.Ib(a, b); + null != b.Jb && b.Jb(a, b, c); + b.Dc += c; + return 1; + } + function lc(a) { + a.ma.memory = null; + } + function mc(a, b, c, d) { + if (47 != D(a, 8)) return 0; + b[0] = D(a, 14) + 1; + c[0] = D(a, 14) + 1; + d[0] = D(a, 1); + return 0 != D(a, 3) ? 0 : !a.h; + } + function ib(a, b) { + if (4 > a) return a + 1; + var c = (a - 2) >> 1; + return ((2 + (a & 1)) << c) + D(b, c) + 1; + } + function nc(a, b) { + if (120 < b) return b - 120; + var c = de[b - 1], + c = (c >> 4) * a + (8 - (c & 15)); + return 1 <= c ? c : 1; + } + function ua(a, b, c) { + var d = pb(c); + b += d & 255; + var e = a[b].g - 8; + 0 < e && + (qb(c, c.u + 8), + (d = pb(c)), + (b += a[b].value), + (b += d & ((1 << e) - 1))); + qb(c, c.u + a[b].g); + return a[b].value; + } + function ub(a, b, c) { + c.g += a.g; + c.value += (a.value << b) >>> 0; + x(8 >= c.g); + return a.g; + } + function ha(a, b, c) { + var d = a.xc; + b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)]; + x(b < a.Wb); + return a.Ya[b]; + } + function oc(a, b, c, d) { + var e = a.ab, + f = a.c * b, + g = a.C; + b = g + b; + var h = c, + k = d; + d = a.Ta; + for (c = a.Ua; 0 < e--; ) { + var l = a.gc[e], + m = g, + n = b, + r = h, + q = k, + k = d, + h = c, + t = l.Ea; + x(m < n); + x(n <= l.nc); + switch (l.hc) { + case 2: + pc(r, q, (n - m) * t, k, h); + break; + case 0: + var v = l, + p = m, + u = n, + w = k, + y = h, + A = v.Ea; + 0 == p && + (ee(r, q, null, null, 1, w, y), + cc(r, q + 1, 0, 0, A - 1, w, y + 1), + (q += A), + (y += A), + ++p); + for ( + var E = 1 << v.b, + B = E - 1, + C = xa(A, v.b), + N = v.K, + v = v.w + (p >> v.b) * C; + p < u; + + ) { + var z = N, + Q = v, + S = 1; + for (fe(r, q, w, y - A, 1, w, y); S < A; ) { + var K = qc[(z[Q++] >> 8) & 15], + D = (S & ~B) + E; + D > A && (D = A); + K(r, q + +S, w, y + S - A, D - S, w, y + S); + S = D; + } + q += A; + y += A; + ++p; + p & B || (v += C); + } + n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t); + break; + case 1: + t = r; + u = q; + r = l.Ea; + q = 1 << l.b; + w = q - 1; + y = r & ~w; + A = r - y; + p = xa(r, l.b); + E = l.K; + for (l = l.w + (m >> l.b) * p; m < n; ) { + B = E; + C = l; + N = new Jd(); + v = u + y; + for (z = u + r; u < v; ) + dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q); + u < z && + (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A)); + ++m; + m & w || (l += p); + } + break; + case 3: + if (r == k && q == h && 0 < l.b) { + y = (n - m) * xa(l.Ea, l.b); + t = h + (n - m) * t - y; + u = k; + r = t; + q = k; + w = h; + A = y; + p = []; + for (y = A - 1; 0 <= y; --y) p[y] = q[w + y]; + for (y = A - 1; 0 <= y; --y) u[r + y] = p[y]; + rc(l, m, n, k, t, k, h); + } else rc(l, m, n, r, q, k, h); + } + h = d; + k = c; + } + k != c && I(d, c, h, k, f); + } + function ge(a, b) { + var c = a.V, + d = a.Ba + a.c * a.C, + e = b - a.C; + x(b <= a.l.o); + x(16 >= e); + if (0 < e) { + var f = a.l, + g = a.Ta, + h = a.Ua, + k = f.width; + oc(a, e, c, d); + h = [h]; + c = a.C; + d = b; + e = h; + x(c < d); + x(f.v < f.va); + d > f.o && (d = f.o); + if (c < f.j) { + var l = f.j - c, + c = f.j; + e[0] += l * k; + } + c >= d + ? (c = 0) + : ((e[0] += 4 * f.v), + (f.ka = c - f.j), + (f.U = f.va - f.v), + (f.T = d - c), + (c = 1)); + if (c) { + h = h[0]; + c = a.ca; + if (11 > c.S) { + for ( + var m = c.f.RGBA, + d = c.S, + e = f.U, + f = f.T, + l = m.eb, + n = m.A, + r = f, + m = m.fb + a.Ma * m.A; + 0 < r--; + + ) { + var q = g, + t = h, + v = e, + p = l, + u = m; + switch (d) { + case Ca: + sc(q, t, v, p, u); + break; + case Ua: + Gb(q, t, v, p, u); + break; + case zb: + Gb(q, t, v, p, u); + za(p, u, 0, v, 1, 0); + break; + case tc: + uc(q, t, v, p, u); + break; + case Va: + fb(q, t, v, p, u, 1); + break; + case Ab: + fb(q, t, v, p, u, 1); + za(p, u, 0, v, 1, 0); + break; + case ya: + fb(q, t, v, p, u, 0); + break; + case Ja: + fb(q, t, v, p, u, 0); + za(p, u, 1, v, 1, 0); + break; + case Db: + Hb(q, t, v, p, u); + break; + case Bb: + Hb(q, t, v, p, u); + vc(p, u, v, 1, 0); + break; + case wc: + xc(q, t, v, p, u); + break; + default: + x(0); + } + h += k; + m += n; + } + a.Ma += f; + } else alert("todo:EmitRescaledRowsYUVA"); + x(a.Ma <= c.height); + } + } + a.C = b; + x(a.C <= a.i); + } + function yc(a) { + var b; + if (0 < a.ua) return 0; + for (b = 0; b < a.Wb; ++b) { + var c = a.Ya[b].G, + d = a.Ya[b].H; + if ( + 0 < c[1][d[1] + 0].g || + 0 < c[2][d[2] + 0].g || + 0 < c[3][d[3] + 0].g + ) + return 0; + } + return 1; + } + function zc(a, b, c, d, e, f) { + if (0 != a.Z) { + var g = a.qd, + h = a.rd; + for (x(null != ia[a.Z]); b < c; ++b) + ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f); + a.qd = g; + a.rd = h; + } + } + function Ib(a, b) { + var c = a.l.ma, + d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C, + d = a.C < d ? d : a.C; + x(b <= a.l.o); + if (b > d) { + var e = a.l.width, + f = c.ca, + g = c.tb + e * d, + h = a.V, + k = a.Ba + a.c * d, + l = a.gc; + x(1 == a.ab); + x(3 == l[0].hc); + he(l[0], d, b, h, k, f, g); + zc(c, d, b, f, g, e); + } + a.C = a.Ma = b; + } + function Jb(a, b, c, d, e, f, g) { + var h = a.$ / d, + k = a.$ % d, + l = a.m, + m = a.s, + n = c + a.$, + r = n; + e = c + d * e; + var q = c + d * f, + t = 280 + m.ua, + v = a.Pb ? h : 16777216, + p = 0 < m.ua ? m.Wa : null, + u = m.wc, + w = n < q ? ha(m, k, h) : null; + x(a.C < f); + x(q <= e); + var y = !1; + a: for (;;) { + for (; y || n < q; ) { + var A = 0; + if (h >= v) { + var v = a, + E = n - c; + x(v.Pb); + v.wd = v.m; + v.xd = E; + 0 < v.s.ua && $b(v.s.Wa, v.s.vb); + v = h + ie; + } + k & u || (w = ha(m, k, h)); + x(null != w); + w.Qb && ((b[n] = w.qb), (y = !0)); + if (!y) + if ((Sa(l), w.jc)) { + var A = l, + E = b, + B = n, + C = w.pd[pb(A) & (xb - 1)]; + x(w.jc); + 256 > C.g + ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0)) + : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value)); + 0 == A && (y = !0); + } else A = ua(w.G[0], w.H[0], l); + if (l.h) break; + if (y || 256 > A) { + if (!y) + if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0; + else { + Sa(l); + y = ua(w.G[1], w.H[1], l); + Sa(l); + E = ua(w.G[2], w.H[2], l); + B = ua(w.G[3], w.H[3], l); + if (l.h) break; + b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0; + } + y = !1; + ++n; + ++k; + if ( + k >= d && + ((k = 0), + ++h, + null != g && h <= f && !(h % 16) && g(a, h), + null != p) + ) + for (; r < n; ) + (A = b[r++]), + (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A); + } else if (280 > A) { + A = ib(A - 256, l); + E = ua(w.G[4], w.H[4], l); + Sa(l); + E = ib(E, l); + E = nc(d, E); + if (l.h) break; + if (n - c < E || e - n < A) break a; + else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E]; + n += A; + for (k += A; k >= d; ) + (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h); + x(n <= e); + k & u && (w = ha(m, k, h)); + if (null != p) + for (; r < n; ) + (A = b[r++]), + (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A); + } else if (A < t) { + y = A - 280; + for (x(null != p); r < n; ) + (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A); + A = n; + E = p; + x(!(y >>> E.Xa)); + b[A] = E.X[y]; + y = !0; + } else break a; + y || x(l.h == db(l)); + } + if (a.Pb && l.h && n < e) + x(a.m.h), + (a.a = 5), + (a.m = a.wd), + (a.$ = a.xd), + 0 < a.s.ua && $b(a.s.vb, a.s.Wa); + else if (l.h) break a; + else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c); + return 1; + } + a.a = 3; + return 0; + } + function Ac(a) { + x(null != a); + a.vc = null; + a.yc = null; + a.Ya = null; + var b = a.Wa; + null != b && (b.X = null); + a.vb = null; + x(null != a); + } + function Bc() { + var a = new je(); + if (null == a) return null; + a.a = 0; + a.xb = Cc; + gb("Predictor", "VP8LPredictors"); + gb("Predictor", "VP8LPredictors_C"); + gb("PredictorAdd", "VP8LPredictorsAdd"); + gb("PredictorAdd", "VP8LPredictorsAdd_C"); + pc = Kd; + Fb = Ld; + sc = Md; + Gb = Nd; + Hb = Od; + xc = Pd; + uc = Qd; + self.VP8LMapColor32b = ke; + self.VP8LMapColor8b = le; + return a; + } + function rb(a, b, c, d, e) { + var f = 1, + g = [a], + h = [b], + k = d.m, + l = d.s, + m = null, + n = 0; + a: for (;;) { + if (c) + for (; f && D(k, 1); ) { + var r = g, + q = h, + t = d, + v = 1, + p = t.m, + u = t.gc[t.ab], + w = D(p, 2); + if (t.Oc & (1 << w)) f = 0; + else { + t.Oc |= 1 << w; + u.hc = w; + u.Ea = r[0]; + u.nc = q[0]; + u.K = [null]; + ++t.ab; + x(4 >= t.ab); + switch (w) { + case 0: + case 1: + u.b = D(p, 3) + 2; + v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K); + u.K = u.K[0]; + break; + case 3: + var y = D(p, 8) + 1, + A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3; + r[0] = xa(u.Ea, A); + u.b = A; + var v = rb(y, 1, 0, t, u.K), + E; + if ((E = v)) { + var B, + C = y, + N = u, + z = 1 << (8 >> N.b), + Q = V(z); + if (null == Q) E = 0; + else { + var S = N.K[0], + K = N.w; + Q[0] = N.K[0][0]; + for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]); + for (; B < 4 * z; ++B) Q[B] = 0; + N.K[0] = null; + N.K[0] = Q; + E = 1; + } + } + v = E; + break; + case 2: + break; + default: + x(0); + } + f = v; + } + } + g = g[0]; + h = h[0]; + if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) { + d.a = 3; + break a; + } + var H; + if ((H = f)) + b: { + var F = d, + G = g, + L = h, + J = n, + T = c, + Da, + ba, + X = F.m, + R = F.s, + P = [null], + U, + W = 1, + aa = 0, + na = me[J]; + c: for (;;) { + if (T && D(X, 1)) { + var ca = D(X, 3) + 2, + ga = xa(G, ca), + ka = xa(L, ca), + qa = ga * ka; + if (!rb(ga, ka, 0, F, P)) break c; + P = P[0]; + R.xc = ca; + for (Da = 0; Da < qa; ++Da) { + var ia = (P[Da] >> 8) & 65535; + P[Da] = ia; + ia >= W && (W = ia + 1); + } + } + if (X.h) break c; + for (ba = 0; 5 > ba; ++ba) { + var Y = Dc[ba]; + !ba && 0 < J && (Y += 1 << J); + aa < Y && (aa = Y); + } + var ma = wa(W * na, O); + var ua = W, + va = wa(ua, Ub); + if (null == va) var la = null; + else x(65536 >= ua), (la = va); + var ha = V(aa); + if (null == la || null == ha || null == ma) { + F.a = 1; + break c; + } + var pa = ma; + for (Da = U = 0; Da < W; ++Da) { + var ja = la[Da], + da = ja.G, + ea = ja.H, + Fa = 0, + ra = 1, + Ha = 0; + for (ba = 0; 5 > ba; ++ba) { + Y = Dc[ba]; + da[ba] = pa; + ea[ba] = U; + !ba && 0 < J && (Y += 1 << J); + d: { + var sa, + za = Y, + ta = F, + oa = ha, + db = pa, + eb = U, + Ia = 0, + Ka = ta.m, + fb = D(Ka, 1); + M(oa, 0, 0, za); + if (fb) { + var gb = D(Ka, 1) + 1, + hb = D(Ka, 1), + Ja = D(Ka, 0 == hb ? 1 : 8); + oa[Ja] = 1; + 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1)); + var ya = 1; + } else { + var Ua = V(19), + Va = D(Ka, 4) + 4; + if (19 < Va) { + ta.a = 3; + var Aa = 0; + break d; + } + for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3); + var Ba = void 0, + sb = void 0, + Wa = ta, + ib = Ua, + Ca = za, + Xa = oa, + Oa = 0, + La = Wa.m, + Ya = 8, + Za = wa(128, O); + e: for (;;) { + if (!Z(Za, 0, 7, ib, 19)) break e; + if (D(La, 1)) { + var kb = 2 + 2 * D(La, 3), + Ba = 2 + D(La, kb); + if (Ba > Ca) break e; + } else Ba = Ca; + for (sb = 0; sb < Ca && Ba--; ) { + Sa(La); + var $a = Za[0 + (pb(La) & 127)]; + qb(La, La.u + $a.g); + var jb = $a.value; + if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb); + else { + var lb = 16 == jb, + ab = jb - 16, + mb = oe[ab], + bb = D(La, pe[ab]) + mb; + if (sb + bb > Ca) break e; + else + for (var nb = lb ? Ya : 0; 0 < bb--; ) + Xa[sb++] = nb; + } + } + Oa = 1; + break e; + } + Oa || (Wa.a = 3); + ya = Oa; + } + (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za)); + ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0)); + } + if (0 == Aa) break c; + ra && 1 == qe[ba] && (ra = 0 == pa[U].g); + Fa += pa[U].g; + U += Aa; + if (3 >= ba) { + var Pa = ha[0], + tb; + for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]); + Ha += Pa; + } + } + ja.nd = ra; + ja.Qb = 0; + ra && + ((ja.qb = + ((da[3][ea[3] + 0].value << 24) | + (da[1][ea[1] + 0].value << 16) | + da[2][ea[2] + 0].value) >>> + 0), + 0 == Fa && + 256 > da[0][ea[0] + 0].value && + ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8))); + ja.jc = !ja.Qb && 6 > Ha; + if (ja.jc) { + var Ga, + Ea = ja; + for (Ga = 0; Ga < xb; ++Ga) { + var Ma = Ga, + Na = Ea.pd[Ma], + vb = Ea.G[0][Ea.H[0] + Ma]; + 256 <= vb.value + ? ((Na.g = vb.g + 256), (Na.value = vb.value)) + : ((Na.g = 0), + (Na.value = 0), + (Ma >>= ub(vb, 8, Na)), + (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)), + (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)), + ub(Ea.G[3][Ea.H[3] + Ma], 24, Na)); + } + } + } + R.vc = P; + R.Wb = W; + R.Ya = la; + R.yc = ma; + H = 1; + break b; + } + H = 0; + } + f = H; + if (!f) { + d.a = 3; + break a; + } + if (0 < n) { + if (((l.ua = 1 << n), !Zb(l.Wa, n))) { + d.a = 1; + f = 0; + break a; + } + } else l.ua = 0; + var Qa = d, + cb = g, + ob = h, + Ra = Qa.s, + Ta = Ra.xc; + Qa.c = cb; + Qa.i = ob; + Ra.md = xa(cb, Ta); + Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1; + if (c) { + d.xb = re; + break a; + } + m = V(g * h); + if (null == m) { + d.a = 1; + f = 0; + break a; + } + f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h; + break a; + } + f + ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l)) + : Ac(l); + return f; + } + function Ec(a, b) { + var c = a.c * a.i, + d = c + b + 16 * b; + x(a.c <= b); + a.V = V(d); + if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0; + a.Ta = a.V; + a.Ua = a.Ba + c + b; + return 1; + } + function se(a, b) { + var c = a.C, + d = b - c, + e = a.V, + f = a.Ba + a.c * c; + for (x(b <= a.l.o); 0 < d; ) { + var g = 16 < d ? 16 : d, + h = a.l.ma, + k = a.l.width, + l = k * g, + m = h.ca, + n = h.tb + k * c, + r = a.Ta, + q = a.Ua; + oc(a, g, e, f); + Fc(r, q, m, n, l); + zc(h, c, c + g, m, n, k); + d -= g; + e += g * a.c; + c += g; + } + x(c == b); + a.C = a.Ma = b; + } + function te(a, b) { + var c = [0], + d = [0], + e = [0]; + a: for (;;) { + if (null == a) return 0; + if (null == b) return (a.a = 2), 0; + a.l = b; + a.a = 0; + cb(a.m, b.data, b.w, b.ha); + if (!mc(a.m, c, d, e)) { + a.a = 3; + break a; + } + a.xb = Cc; + b.width = c[0]; + b.height = d[0]; + if (!rb(c[0], d[0], 1, a, null)) break a; + return 1; + } + x(0 != a.a); + return 0; + } + function ue() { + this.ub = this.yd = this.td = this.Rb = 0; + } + function ve() { + this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0; + } + function we() { + this.Fb = this.Bb = this.Cb = 0; + this.Zb = V(4); + this.Lb = V(4); + } + function Gc() { + this.Yb = wb(); + } + function xe() { + this.jb = V(3); + this.Wc = Ed([4, 8], Gc); + this.Xc = Ed([4, 17], Gc); + } + function ye() { + this.Pc = this.wb = this.Tb = this.zd = 0; + this.vd = new V(4); + this.od = new V(4); + } + function Xa() { + this.ld = this.La = this.dd = this.tc = 0; + } + function Hc() { + this.Na = this.la = 0; + } + function ze() { + this.Sc = [0, 0]; + this.Eb = [0, 0]; + this.Qc = [0, 0]; + this.ia = this.lc = 0; + } + function Kb() { + this.ad = V(384); + this.Za = 0; + this.Ob = V(16); + this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0; + } + function Ae() { + this.uc = this.M = this.Nb = 0; + this.wa = Array(new Xa()); + this.Y = 0; + this.ya = Array(new Kb()); + this.aa = 0; + this.l = new Oa(); + } + function Ic() { + this.y = V(16); + this.f = V(8); + this.ea = V(8); + } + function Be() { + this.cb = this.a = 0; + this.sc = ""; + this.m = new Wb(); + this.Od = new ue(); + this.Kc = new ve(); + this.ed = new ye(); + this.Qa = new we(); + this.Ic = this.$c = this.Aa = 0; + this.D = new Ae(); + this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0; + this.Jc = wa(8, Wb); + this.ia = 0; + this.pb = wa(4, ze); + this.Pa = new xe(); + this.Bd = this.kc = 0; + this.Ac = []; + this.Bc = 0; + this.zc = [0, 0, 0, 0]; + this.Gd = Array(new Ic()); + this.Hd = 0; + this.rb = Array(new Hc()); + this.sb = 0; + this.wa = Array(new Xa()); + this.Y = 0; + this.oc = []; + this.pc = 0; + this.sa = []; + this.ta = 0; + this.qa = []; + this.ra = 0; + this.Ha = []; + this.B = this.R = this.Ia = 0; + this.Ec = []; + this.M = this.ja = this.Vb = this.Fc = 0; + this.ya = Array(new Kb()); + this.L = this.aa = 0; + this.gd = Ed([4, 2], Xa); + this.ga = null; + this.Fa = []; + this.Cc = this.qc = this.P = 0; + this.Gb = []; + this.Uc = 0; + this.mb = []; + this.nb = 0; + this.rc = []; + this.Ga = this.Vc = 0; + } + function ga(a, b) { + return 0 > a ? 0 : a > b ? b : a; + } + function Oa() { + this.T = this.U = this.ka = this.height = this.width = 0; + this.y = []; + this.f = []; + this.ea = []; + this.Rc = this.fa = this.W = this.N = this.O = 0; + this.ma = "void"; + this.put = "VP8IoPutHook"; + this.ac = "VP8IoSetupHook"; + this.bc = "VP8IoTeardownHook"; + this.ha = this.Kb = 0; + this.data = []; + this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0; + this.F = []; + this.J = 0; + } + function Ce() { + var a = new Be(); + null != a && + ((a.a = 0), (a.sc = "OK"), (a.cb = 0), (a.Xb = 0), oa || (oa = De)); + return a; + } + function T(a, b, c) { + 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0)); + return 0; + } + function Jc(a, b, c) { + return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2]; + } + function Kc(a, b) { + if (null == a) return 0; + a.a = 0; + a.sc = "OK"; + if (null == b) return T(a, 2, "null VP8Io passed to VP8GetHeaders()"); + var c = b.data; + var d = b.w; + var e = b.ha; + if (4 > e) return T(a, 7, "Truncated header."); + var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16); + var g = a.Od; + g.Rb = !(f & 1); + g.td = (f >> 1) & 7; + g.yd = (f >> 4) & 1; + g.ub = f >> 5; + if (3 < g.td) return T(a, 3, "Incorrect keyframe parameters."); + if (!g.yd) return T(a, 4, "Frame not displayable."); + d += 3; + e -= 3; + var h = a.Kc; + if (g.Rb) { + if (7 > e) return T(a, 7, "cannot parse picture header"); + if (!Jc(c, d, e)) return T(a, 3, "Bad code word"); + h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383; + h.Td = c[d + 4] >> 6; + h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383; + h.Ud = c[d + 6] >> 6; + d += 7; + e -= 7; + a.za = (h.c + 15) >> 4; + a.Ub = (h.i + 15) >> 4; + b.width = h.c; + b.height = h.i; + b.Da = 0; + b.j = 0; + b.v = 0; + b.va = b.width; + b.o = b.height; + b.da = 0; + b.ib = b.width; + b.hb = b.height; + b.U = b.width; + b.T = b.height; + f = a.Pa; + M(f.jb, 0, 255, f.jb.length); + f = a.Qa; + x(null != f); + f.Cb = 0; + f.Bb = 0; + f.Fb = 1; + M(f.Zb, 0, 0, f.Zb.length); + M(f.Lb, 0, 0, f.Lb); + } + if (g.ub > e) return T(a, 7, "bad partition length"); + f = a.m; + ma(f, c, d, g.ub); + d += g.ub; + e -= g.ub; + g.Rb && ((h.Ld = G(f)), (h.Kd = G(f))); + h = a.Qa; + var k = a.Pa, + l; + x(null != f); + x(null != h); + h.Cb = G(f); + if (h.Cb) { + h.Bb = G(f); + if (G(f)) { + h.Fb = G(f); + for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0; + for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0; + } + if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255; + } else h.Bb = 0; + if (f.Ka) return T(a, 3, "cannot parse segment header"); + h = a.ed; + h.zd = G(f); + h.Tb = na(f, 6); + h.wb = na(f, 3); + h.Pc = G(f); + if (h.Pc && G(f)) { + for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6)); + for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6)); + } + a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2; + if (f.Ka) return T(a, 3, "cannot parse filter header"); + l = d; + var m = e; + e = l; + d = l + m; + h = m; + a.Xb = (1 << na(a.m, 2)) - 1; + k = a.Xb; + if (m < 3 * k) c = 7; + else { + l += 3 * k; + h -= 3 * k; + for (m = 0; m < k; ++m) { + var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16); + n > h && (n = h); + ma(a.Jc[+m], c, l, n); + l += n; + h -= n; + e += 3; + } + ma(a.Jc[+k], c, l, h); + c = l < d ? 0 : 5; + } + if (0 != c) return T(a, c, "cannot parse partitions"); + l = a.m; + c = na(l, 7); + e = G(l) ? ca(l, 4) : 0; + d = G(l) ? ca(l, 4) : 0; + h = G(l) ? ca(l, 4) : 0; + k = G(l) ? ca(l, 4) : 0; + l = G(l) ? ca(l, 4) : 0; + m = a.Qa; + for (n = 0; 4 > n; ++n) { + if (m.Cb) { + var r = m.Zb[n]; + m.Fb || (r += c); + } else if (0 < n) { + a.pb[n] = a.pb[0]; + continue; + } else r = c; + var q = a.pb[n]; + q.Sc[0] = Lb[ga(r + e, 127)]; + q.Sc[1] = Mb[ga(r + 0, 127)]; + q.Eb[0] = 2 * Lb[ga(r + d, 127)]; + q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16; + 8 > q.Eb[1] && (q.Eb[1] = 8); + q.Qc[0] = Lb[ga(r + k, 117)]; + q.Qc[1] = Mb[ga(r + l, 127)]; + q.lc = r + l; + } + if (!g.Rb) return T(a, 4, "Not a key frame."); + G(f); + g = a.Pa; + for (c = 0; 4 > c; ++c) { + for (e = 0; 8 > e; ++e) + for (d = 0; 3 > d; ++d) + for (h = 0; 11 > h; ++h) + (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]), + (g.Wc[c][e].Yb[d][h] = k); + for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]]; + } + a.kc = G(f); + a.kc && (a.Bd = na(f, 8)); + return (a.cb = 1); + } + function De(a, b, c, d, e, f, g) { + var h = b[e].Yb[c]; + for (c = 0; 16 > e; ++e) { + if (!K(a, h[c + 0])) return e; + for (; !K(a, h[c + 1]); ) + if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16; + var k = b[e + 1].Yb; + if (K(a, h[c + 2])) { + var l = a, + m = h, + n = c; + var r = 0; + if (K(l, m[n + 3])) + if (K(l, m[n + 6])) { + h = 0; + r = K(l, m[n + 8]); + m = K(l, m[n + 9 + r]); + n = 2 * r + m; + r = 0; + for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]); + r += 3 + (8 << n); + } else + K(l, m[n + 7]) + ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145))) + : (r = 5 + K(l, 159)); + else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2); + h = k[2]; + } else (r = 1), (h = k[1]); + k = g + Ie[e]; + l = a; + 0 > l.b && Qa(l); + var m = l.b, + n = l.Ca >> 1, + q = (n - (l.I >> m)) >> 31; + --l.b; + l.Ca += q; + l.Ca |= 1; + l.I -= ((n + 1) & q) << m; + f[k] = ((r ^ q) - q) * d[(0 < e) + 0]; + } + return 16; + } + function Lc(a) { + var b = a.rb[a.sb - 1]; + b.la = 0; + b.Na = 0; + M(a.zc, 0, 0, a.zc.length); + a.ja = 0; + } + function Je(a, b) { + for (a.M = 0; a.M < a.Va; ++a.M) { + var c = a.Jc[a.M & a.Xb], + d = a.m, + e = a, + f; + for (f = 0; f < e.za; ++f) { + var g = d; + var h = e; + var k = h.Ac, + l = h.Bc + 4 * f, + m = h.zc, + n = h.ya[h.aa + f]; + h.Qa.Bb + ? (n.$b = K(g, h.Pa.jb[0]) + ? 2 + K(g, h.Pa.jb[2]) + : K(g, h.Pa.jb[1])) + : (n.$b = 0); + h.kc && (n.Ad = K(g, h.Bd)); + n.Za = !K(g, 145) + 0; + if (n.Za) { + var r = n.Ob, + q = 0; + for (h = 0; 4 > h; ++h) { + var t = m[0 + h]; + var v; + for (v = 0; 4 > v; ++v) { + t = Ke[k[l + v]][t]; + for (var p = Mc[K(g, t[0])]; 0 < p; ) + p = Mc[2 * p + K(g, t[p])]; + t = -p; + k[l + v] = t; + } + I(r, q, k, l, 4); + q += 4; + m[0 + h] = t; + } + } else + (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0), + (n.Ob[0] = t), + M(k, l, t, 4), + M(m, 0, t, 4); + n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0; + } + if (e.m.Ka) return T(a, 7, "Premature end-of-partition0 encountered."); + for (; a.ja < a.za; ++a.ja) { + d = a; + e = c; + g = d.rb[d.sb - 1]; + k = d.rb[d.sb + d.ja]; + f = d.ya[d.aa + d.ja]; + if ((l = d.kc ? f.Ad : 0)) + (g.la = k.la = 0), + f.Za || (g.Na = k.Na = 0), + (f.Hc = 0), + (f.Gc = 0), + (f.ia = 0); + else { + var u, + w, + g = k, + k = e, + l = d.Pa.Xc, + m = d.ya[d.aa + d.ja], + n = d.pb[m.$b]; + h = m.ad; + r = 0; + q = d.rb[d.sb - 1]; + t = v = 0; + M(h, r, 0, 384); + if (m.Za) { + var y = 0; + var A = l[3]; + } else { + p = V(16); + var E = g.Na + q.Na; + E = oa(k, l[1], E, n.Eb, 0, p, 0); + g.Na = q.Na = (0 < E) + 0; + if (1 < E) Nc(p, 0, h, r); + else { + var B = (p[0] + 3) >> 3; + for (p = 0; 256 > p; p += 16) h[r + p] = B; + } + y = 1; + A = l[0]; + } + var C = g.la & 15; + var N = q.la & 15; + for (p = 0; 4 > p; ++p) { + var z = N & 1; + for (B = w = 0; 4 > B; ++B) + (E = z + (C & 1)), + (E = oa(k, A, E, n.Sc, y, h, r)), + (z = E > y), + (C = (C >> 1) | (z << 7)), + (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])), + (r += 16); + C >>= 4; + N = (N >> 1) | (z << 7); + v = ((v << 8) | w) >>> 0; + } + A = C; + y = N >> 4; + for (u = 0; 4 > u; u += 2) { + w = 0; + C = g.la >> (4 + u); + N = q.la >> (4 + u); + for (p = 0; 2 > p; ++p) { + z = N & 1; + for (B = 0; 2 > B; ++B) + (E = z + (C & 1)), + (E = oa(k, l[2], E, n.Qc, 0, h, r)), + (z = 0 < E), + (C = (C >> 1) | (z << 3)), + (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])), + (r += 16); + C >>= 2; + N = (N >> 1) | (z << 5); + } + t |= w << (4 * u); + A |= (C << 4) << u; + y |= (N & 240) << u; + } + g.la = A; + q.la = y; + m.Hc = v; + m.Gc = t; + m.ia = t & 43690 ? 0 : n.ia; + l = !(v | t); + } + 0 < d.L && + ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]), + (d.wa[d.Y + d.ja].La |= !l)); + if (e.Ka) return T(a, 7, "Premature end-of-file encountered."); + } + Lc(a); + c = a; + d = b; + e = 1; + f = c.D; + g = 0 < c.L && c.M >= c.zb && c.M <= c.Va; + if (0 == c.Aa) + a: { + (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1); + w = c.D; + f = w.Nb; + t = Ya[c.L]; + g = t * c.R; + k = (t / 2) * c.B; + p = 16 * f * c.R; + B = 8 * f * c.B; + l = c.sa; + m = c.ta - g + p; + n = c.qa; + h = c.ra - k + B; + r = c.Ha; + q = c.Ia - k + B; + C = w.M; + N = 0 == C; + v = C >= c.Va - 1; + 2 == c.Aa && Oc(c, w); + if (w.uc) + for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) { + var Q = E; + y = w; + A = z; + var S = Q.D, + D = S.Nb; + u = Q.R; + var S = S.wa[S.Y + y], + F = Q.sa, + H = Q.ta + 16 * D * u + 16 * y, + J = S.dd, + G = S.tc; + if (0 != G) + if ((x(3 <= G), 1 == Q.L)) + 0 < y && Pc(F, H, u, G + 4), + S.La && Qc(F, H, u, G), + 0 < A && Rc(F, H, u, G + 4), + S.La && Sc(F, H, u, G); + else { + var L = Q.B, + O = Q.qa, + P = Q.ra + 8 * D * L + 8 * y, + R = Q.Ha, + Q = Q.Ia + 8 * D * L + 8 * y, + D = S.ld; + 0 < y && + (Tc(F, H, u, G + 4, J, D), + Uc(O, P, R, Q, L, G + 4, J, D)); + S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D)); + 0 < A && + (Xc(F, H, u, G + 4, J, D), + Yc(O, P, R, Q, L, G + 4, J, D)); + S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D)); + } + } + c.ia && alert("todo:DitherRow"); + if (null != d.put) { + w = 16 * C; + C = 16 * (C + 1); + N + ? ((d.y = c.sa), + (d.O = c.ta + p), + (d.f = c.qa), + (d.N = c.ra + B), + (d.ea = c.Ha), + (d.W = c.Ia + B)) + : ((w -= t), + (d.y = l), + (d.O = m), + (d.f = n), + (d.N = h), + (d.ea = r), + (d.W = q)); + v || (C -= t); + C > d.o && (C = d.o); + d.F = null; + d.J = null; + if ( + null != c.Fa && + 0 < c.Fa.length && + w < C && + ((d.J = Le(c, d, w, C - w)), + (d.F = c.mb), + null == d.F && 0 == d.F.length) + ) { + e = T(c, 3, "Could not decode alpha data."); + break a; + } + w < d.j && + ((t = d.j - w), + (w = d.j), + x(!(t & 1)), + (d.O += c.R * t), + (d.N += c.B * (t >> 1)), + (d.W += c.B * (t >> 1)), + null != d.F && (d.J += d.width * t)); + w < C && + ((d.O += d.v), + (d.N += d.v >> 1), + (d.W += d.v >> 1), + null != d.F && (d.J += d.v), + (d.ka = w - d.j), + (d.U = d.va - d.v), + (d.T = C - w), + (e = d.put(d))); + } + f + 1 != c.Ic || + v || + (I(c.sa, c.ta - g, l, m + 16 * c.R, g), + I(c.qa, c.ra - k, n, h + 8 * c.B, k), + I(c.Ha, c.Ia - k, r, q + 8 * c.B, k)); + } + if (!e) return T(a, 6, "Output aborted."); + } + return 1; + } + function Me(a, b) { + if (null == a) return 0; + if (null == b) return T(a, 2, "NULL VP8Io parameter in VP8Decode()."); + if (!a.cb && !Kc(a, b)) return 0; + x(a.cb); + if (null == b.ac || b.ac(b)) { + b.ob && (a.L = 0); + var c = Ya[a.L]; + 2 == a.L + ? ((a.yb = 0), (a.zb = 0)) + : ((a.yb = (b.v - c) >> 4), + (a.zb = (b.j - c) >> 4), + 0 > a.yb && (a.yb = 0), + 0 > a.zb && (a.zb = 0)); + a.Va = (b.o + 15 + c) >> 4; + a.Hb = (b.va + 15 + c) >> 4; + a.Hb > a.za && (a.Hb = a.za); + a.Va > a.Ub && (a.Va = a.Ub); + if (0 < a.L) { + var d = a.ed; + for (c = 0; 4 > c; ++c) { + var e; + if (a.Qa.Cb) { + var f = a.Qa.Lb[c]; + a.Qa.Fb || (f += d.Tb); + } else f = d.Tb; + for (e = 0; 1 >= e; ++e) { + var g = a.gd[c][e], + h = f; + d.Pc && ((h += d.vd[0]), e && (h += d.od[0])); + h = 0 > h ? 0 : 63 < h ? 63 : h; + if (0 < h) { + var k = h; + 0 < d.wb && + ((k = 4 < d.wb ? k >> 2 : k >> 1), + k > 9 - d.wb && (k = 9 - d.wb)); + 1 > k && (k = 1); + g.dd = k; + g.tc = 2 * h + k; + g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0; + } else g.tc = 0; + g.La = e; + } + } + } + c = 0; + } else T(a, 6, "Frame setup failed"), (c = a.a); + if ((c = 0 == c)) { + if (c) { + a.$c = 0; + 0 < a.Aa || (a.Ic = Ne); + b: { + c = a.Ic; + var k = a.za, + d = 4 * k, + l = 32 * k, + m = k + 1, + n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0, + r = (2 == a.Aa ? 2 : 1) * k; + e = ((3 * (16 * c + Ya[a.L])) / 2) * l; + f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0; + g = d + 832 + e + f; + if (g != g) c = 0; + else { + if (g > a.Vb) { + a.Vb = 0; + a.Ec = V(g); + a.Fc = 0; + if (null == a.Ec) { + c = T(a, 1, "no memory during frame initialization."); + break b; + } + a.Vb = g; + } + g = a.Ec; + h = a.Fc; + a.Ac = g; + a.Bc = h; + h += d; + a.Gd = wa(l, Ic); + a.Hd = 0; + a.rb = wa(m + 1, Hc); + a.sb = 1; + a.wa = n ? wa(n, Xa) : null; + a.Y = 0; + a.D.Nb = 0; + a.D.wa = a.wa; + a.D.Y = a.Y; + 0 < a.Aa && (a.D.Y += k); + x(!0); + a.oc = g; + a.pc = h; + h += 832; + a.ya = wa(r, Kb); + a.aa = 0; + a.D.ya = a.ya; + a.D.aa = a.aa; + 2 == a.Aa && (a.D.aa += k); + a.R = 16 * k; + a.B = 8 * k; + l = Ya[a.L]; + k = l * a.R; + l = (l / 2) * a.B; + a.sa = g; + a.ta = h + k; + a.qa = a.sa; + a.ra = a.ta + 16 * c * a.R + l; + a.Ha = a.qa; + a.Ia = a.ra + 8 * c * a.B + l; + a.$c = 0; + h += e; + a.mb = f ? g : null; + a.nb = f ? h : null; + x(h + f <= a.Fc + a.Vb); + Lc(a); + M(a.Ac, a.Bc, 0, d); + c = 1; + } + } + if (c) { + b.ka = 0; + b.y = a.sa; + b.O = a.ta; + b.f = a.qa; + b.N = a.ra; + b.ea = a.Ha; + b.Vd = a.Ia; + b.fa = a.R; + b.Rc = a.B; + b.F = null; + b.J = 0; + if (!ad) { + for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c; + for (c = -1020; 1020 >= c; ++c) + cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c; + for (c = -112; 112 >= c; ++c) + dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c; + for (c = -255; 510 >= c; ++c) + ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c; + ad = 1; + } + Nc = Oe; + Za = Pe; + Nb = Qe; + pa = Re; + Ob = Se; + fd = Te; + Xc = Ue; + Tc = Ve; + Yc = We; + Uc = Xe; + Zc = Ye; + Vc = Ze; + $c = $e; + Wc = af; + Rc = gd; + Pc = hd; + Sc = bf; + Qc = cf; + W[0] = df; + W[1] = ef; + W[2] = ff; + W[3] = gf; + W[4] = hf; + W[5] = jf; + W[6] = kf; + W[7] = lf; + W[8] = mf; + W[9] = nf; + Y[0] = of; + Y[1] = pf; + Y[2] = qf; + Y[3] = rf; + Y[4] = sf; + Y[5] = tf; + Y[6] = uf; + ka[0] = vf; + ka[1] = wf; + ka[2] = xf; + ka[3] = yf; + ka[4] = zf; + ka[5] = Af; + ka[6] = Bf; + c = 1; + } else c = 0; + } + c && (c = Je(a, b)); + null != b.bc && b.bc(b); + c &= 1; + } + if (!c) return 0; + a.cb = 0; + return c; + } + function qa(a, b, c, d, e) { + e = a[b + c + 32 * d] + (e >> 3); + a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e; + } + function kb(a, b, c, d, e, f) { + qa(a, b, 0, c, d + e); + qa(a, b, 1, c, d + f); + qa(a, b, 2, c, d - f); + qa(a, b, 3, c, d - e); + } + function da(a) { + return ((20091 * a) >> 16) + a; + } + function id(a, b, c, d) { + var e = 0, + f; + var g = V(16); + for (f = 0; 4 > f; ++f) { + var h = a[b + 0] + a[b + 8]; + var k = a[b + 0] - a[b + 8]; + var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]); + var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16); + g[e + 0] = h + m; + g[e + 1] = k + l; + g[e + 2] = k - l; + g[e + 3] = h - m; + e += 4; + b++; + } + for (f = e = 0; 4 > f; ++f) + (a = g[e + 0] + 4), + (h = a + g[e + 8]), + (k = a - g[e + 8]), + (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])), + (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)), + qa(c, d, 0, 0, h + m), + qa(c, d, 1, 0, k + l), + qa(c, d, 2, 0, k - l), + qa(c, d, 3, 0, h - m), + e++, + (d += 32); + } + function Te(a, b, c, d) { + var e = a[b + 0] + 4, + f = (35468 * a[b + 4]) >> 16, + g = da(a[b + 4]), + h = (35468 * a[b + 1]) >> 16; + a = da(a[b + 1]); + kb(c, d, 0, e + g, a, h); + kb(c, d, 1, e + f, a, h); + kb(c, d, 2, e - f, a, h); + kb(c, d, 3, e - g, a, h); + } + function Pe(a, b, c, d, e) { + id(a, b, c, d); + e && id(a, b + 16, c, d + 4); + } + function Qe(a, b, c, d) { + Za(a, b + 0, c, d, 1); + Za(a, b + 32, c, d + 128, 1); + } + function Re(a, b, c, d) { + a = a[b + 0] + 4; + var e; + for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a); + } + function Se(a, b, c, d) { + a[b + 0] && pa(a, b + 0, c, d); + a[b + 16] && pa(a, b + 16, c, d + 4); + a[b + 32] && pa(a, b + 32, c, d + 128); + a[b + 48] && pa(a, b + 48, c, d + 128 + 4); + } + function Oe(a, b, c, d) { + var e = V(16), + f; + for (f = 0; 4 > f; ++f) { + var g = a[b + 0 + f] + a[b + 12 + f]; + var h = a[b + 4 + f] + a[b + 8 + f]; + var k = a[b + 4 + f] - a[b + 8 + f]; + var l = a[b + 0 + f] - a[b + 12 + f]; + e[0 + f] = g + h; + e[8 + f] = g - h; + e[4 + f] = l + k; + e[12 + f] = l - k; + } + for (f = 0; 4 > f; ++f) + (a = e[0 + 4 * f] + 3), + (g = a + e[3 + 4 * f]), + (h = e[1 + 4 * f] + e[2 + 4 * f]), + (k = e[1 + 4 * f] - e[2 + 4 * f]), + (l = a - e[3 + 4 * f]), + (c[d + 0] = (g + h) >> 3), + (c[d + 16] = (l + k) >> 3), + (c[d + 32] = (g - h) >> 3), + (c[d + 48] = (l - k) >> 3), + (d += 64); + } + function Pb(a, b, c) { + var d = b - 32, + e = R, + f = 255 - a[d - 1], + g; + for (g = 0; g < c; ++g) { + var h = e, + k = f + a[b - 1], + l; + for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]]; + b += 32; + } + } + function ef(a, b) { + Pb(a, b, 4); + } + function wf(a, b) { + Pb(a, b, 8); + } + function pf(a, b) { + Pb(a, b, 16); + } + function qf(a, b) { + var c; + for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16); + } + function rf(a, b) { + var c; + for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32); + } + function $a(a, b, c) { + var d; + for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16); + } + function of(a, b) { + var c = 16, + d; + for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32]; + $a(c >> 5, a, b); + } + function sf(a, b) { + var c = 8, + d; + for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d]; + $a(c >> 4, a, b); + } + function tf(a, b) { + var c = 8, + d; + for (d = 0; 16 > d; ++d) c += a[b + d - 32]; + $a(c >> 4, a, b); + } + function uf(a, b) { + $a(128, a, b); + } + function z(a, b, c) { + return (a + 2 * b + c + 2) >> 2; + } + function ff(a, b) { + var c = b - 32, + c = new Uint8Array([ + z(a[c - 1], a[c + 0], a[c + 1]), + z(a[c + 0], a[c + 1], a[c + 2]), + z(a[c + 1], a[c + 2], a[c + 3]), + z(a[c + 2], a[c + 3], a[c + 4]) + ]), + d; + for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length); + } + function gf(a, b) { + var c = a[b - 1], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96]; + ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d)); + ra(a, b + 32, 16843009 * z(c, d, e)); + ra(a, b + 64, 16843009 * z(d, e, f)); + ra(a, b + 96, 16843009 * z(e, f, f)); + } + function df(a, b) { + var c = 4, + d; + for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d]; + c >>= 3; + for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4); + } + function hf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 - 32], + g = a[b + 0 - 32], + h = a[b + 1 - 32], + k = a[b + 2 - 32], + l = a[b + 3 - 32]; + a[b + 0 + 96] = z(d, e, a[b - 1 + 96]); + a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e); + a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d); + a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c); + a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f); + a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g); + a[b + 3 + 0] = z(l, k, h); + } + function kf(a, b) { + var c = a[b + 1 - 32], + d = a[b + 2 - 32], + e = a[b + 3 - 32], + f = a[b + 4 - 32], + g = a[b + 5 - 32], + h = a[b + 6 - 32], + k = a[b + 7 - 32]; + a[b + 0 + 0] = z(a[b + 0 - 32], c, d); + a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e); + a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f); + a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g); + a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h); + a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k); + a[b + 3 + 96] = z(h, k, k); + } + function jf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 - 32], + g = a[b + 0 - 32], + h = a[b + 1 - 32], + k = a[b + 2 - 32], + l = a[b + 3 - 32]; + a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1; + a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1; + a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1; + a[b + 3 + 0] = (k + l + 1) >> 1; + a[b + 0 + 96] = z(e, d, c); + a[b + 0 + 64] = z(d, c, f); + a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g); + a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h); + a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k); + a[b + 3 + 32] = z(h, k, l); + } + function lf(a, b) { + var c = a[b + 0 - 32], + d = a[b + 1 - 32], + e = a[b + 2 - 32], + f = a[b + 3 - 32], + g = a[b + 4 - 32], + h = a[b + 5 - 32], + k = a[b + 6 - 32], + l = a[b + 7 - 32]; + a[b + 0 + 0] = (c + d + 1) >> 1; + a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1; + a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1; + a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1; + a[b + 0 + 32] = z(c, d, e); + a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f); + a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g); + a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h); + a[b + 3 + 64] = z(g, h, k); + a[b + 3 + 96] = z(h, k, l); + } + function nf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96]; + a[b + 0 + 0] = (c + d + 1) >> 1; + a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1; + a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1; + a[b + 1 + 0] = z(c, d, e); + a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f); + a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f); + a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[ + b + 2 + 96 + ] = a[b + 3 + 96] = f; + } + function mf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96], + g = a[b - 1 - 32], + h = a[b + 0 - 32], + k = a[b + 1 - 32], + l = a[b + 2 - 32]; + a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1; + a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1; + a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1; + a[b + 0 + 96] = (f + e + 1) >> 1; + a[b + 3 + 0] = z(h, k, l); + a[b + 2 + 0] = z(g, h, k); + a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h); + a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g); + a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c); + a[b + 1 + 96] = z(f, e, d); + } + function xf(a, b) { + var c; + for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8); + } + function yf(a, b) { + var c; + for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32); + } + function lb(a, b, c) { + var d; + for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8); + } + function vf(a, b) { + var c = 8, + d; + for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d]; + lb(c >> 4, a, b); + } + function Af(a, b) { + var c = 4, + d; + for (d = 0; 8 > d; ++d) c += a[b + d - 32]; + lb(c >> 3, a, b); + } + function zf(a, b) { + var c = 4, + d; + for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d]; + lb(c >> 3, a, b); + } + function Bf(a, b) { + lb(128, a, b); + } + function ab(a, b, c) { + var d = a[b - c], + e = a[b + 0], + f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]], + g = mb[112 + ((f + 4) >> 3)]; + a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]]; + a[b + 0] = R[255 + e - g]; + } + function jd(a, b, c, d) { + var e = a[b + 0], + f = a[b + c]; + return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d; + } + function kd(a, b, c, d) { + return ( + 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d + ); + } + function ld(a, b, c, d, e) { + var f = a[b - 3 * c], + g = a[b - 2 * c], + h = a[b - c], + k = a[b + 0], + l = a[b + c], + m = a[b + 2 * c], + n = a[b + 3 * c]; + return 4 * U[255 + h - k] + U[255 + g - l] > d + ? 0 + : U[255 + a[b - 4 * c] - f] <= e && + U[255 + f - g] <= e && + U[255 + g - h] <= e && + U[255 + n - m] <= e && + U[255 + m - l] <= e && + U[255 + l - k] <= e; + } + function gd(a, b, c, d) { + var e = 2 * d + 1; + for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c); + } + function hd(a, b, c, d) { + var e = 2 * d + 1; + for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1); + } + function bf(a, b, c, d) { + var e; + for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d); + } + function cf(a, b, c, d) { + var e; + for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d); + } + function ea(a, b, c, d, e, f, g, h) { + for (f = 2 * f + 1; 0 < e--; ) { + if (ld(a, b, c, f, g)) + if (jd(a, b, c, h)) ab(a, b, c); + else { + var k = a, + l = b, + m = c, + n = k[l - 2 * m], + r = k[l - m], + q = k[l + 0], + t = k[l + m], + v = k[l + 2 * m], + p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]], + u = (27 * p + 63) >> 7, + w = (18 * p + 63) >> 7, + p = (9 * p + 63) >> 7; + k[l - 3 * m] = R[255 + k[l - 3 * m] + p]; + k[l - 2 * m] = R[255 + n + w]; + k[l - m] = R[255 + r + u]; + k[l + 0] = R[255 + q - u]; + k[l + m] = R[255 + t - w]; + k[l + 2 * m] = R[255 + v - p]; + } + b += d; + } + } + function Fa(a, b, c, d, e, f, g, h) { + for (f = 2 * f + 1; 0 < e--; ) { + if (ld(a, b, c, f, g)) + if (jd(a, b, c, h)) ab(a, b, c); + else { + var k = a, + l = b, + m = c, + n = k[l - m], + r = k[l + 0], + q = k[l + m], + t = 3 * (r - n), + v = mb[112 + ((t + 4) >> 3)], + t = mb[112 + ((t + 3) >> 3)], + p = (v + 1) >> 1; + k[l - 2 * m] = R[255 + k[l - 2 * m] + p]; + k[l - m] = R[255 + n + t]; + k[l + 0] = R[255 + r - v]; + k[l + m] = R[255 + q - p]; + } + b += d; + } + } + function Ue(a, b, c, d, e, f) { + ea(a, b, c, 1, 16, d, e, f); + } + function Ve(a, b, c, d, e, f) { + ea(a, b, 1, c, 16, d, e, f); + } + function Ye(a, b, c, d, e, f) { + var g; + for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f); + } + function Ze(a, b, c, d, e, f) { + var g; + for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f); + } + function We(a, b, c, d, e, f, g, h) { + ea(a, b, e, 1, 8, f, g, h); + ea(c, d, e, 1, 8, f, g, h); + } + function Xe(a, b, c, d, e, f, g, h) { + ea(a, b, 1, e, 8, f, g, h); + ea(c, d, 1, e, 8, f, g, h); + } + function $e(a, b, c, d, e, f, g, h) { + Fa(a, b + 4 * e, e, 1, 8, f, g, h); + Fa(c, d + 4 * e, e, 1, 8, f, g, h); + } + function af(a, b, c, d, e, f, g, h) { + Fa(a, b + 4, 1, e, 8, f, g, h); + Fa(c, d + 4, 1, e, 8, f, g, h); + } + function Cf() { + this.ba = new Cb(); + this.ec = []; + this.cc = []; + this.Mc = []; + this.Dc = this.Nc = this.dc = this.fc = 0; + this.Oa = new Ud(); + this.memory = 0; + this.Ib = "OutputFunc"; + this.Jb = "OutputAlphaFunc"; + this.Nd = "OutputRowFunc"; + } + function md() { + this.data = []; + this.offset = this.kd = this.ha = this.w = 0; + this.na = []; + this.xa = this.gb = this.Ja = this.Sa = this.P = 0; + } + function Df() { + this.nc = this.Ea = this.b = this.hc = 0; + this.K = []; + this.w = 0; + } + function Ef() { + this.ua = 0; + this.Wa = new ac(); + this.vb = new ac(); + this.md = this.xc = this.wc = 0; + this.vc = []; + this.Wb = 0; + this.Ya = new Ub(); + this.yc = new O(); + } + function je() { + this.xb = this.a = 0; + this.l = new Oa(); + this.ca = new Cb(); + this.V = []; + this.Ba = 0; + this.Ta = []; + this.Ua = 0; + this.m = new Ra(); + this.Pb = 0; + this.wd = new Ra(); + this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0; + this.s = new Ef(); + this.ab = 0; + this.gc = wa(4, Df); + this.Oc = 0; + } + function Ff() { + this.Lc = this.Z = this.$a = this.i = this.c = 0; + this.l = new Oa(); + this.ic = 0; + this.ca = []; + this.tb = 0; + this.qd = null; + this.rd = 0; + } + function Rb(a, b, c, d, e, f, g) { + a = null == a ? 0 : a[b + 0]; + for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]); + } + function Gf(a, b, c, d, e, f, g) { + if (null == a) Rb(null, null, c, d, e, f, g); + else { + var h; + for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255; + } + } + function Hf(a, b, c, d, e, f, g) { + if (null == a) Rb(null, null, c, d, e, f, g); + else { + var h = a[b + 0], + k = h, + l = h, + m; + for (m = 0; m < g; ++m) + (h = a[b + m]), + (k = l + h - k), + (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255), + (k = h), + (e[f + m] = l); + } + } + function Le(a, b, c, d) { + var e = b.width, + f = b.o; + x(null != a && null != b); + if (0 > c || 0 >= d || c + d > f) return null; + if (!a.Cc) { + if (null == a.ga) { + a.ga = new Ff(); + var g; + (g = null == a.ga) || + ((g = b.width * b.o), + x(0 == a.Gb.length), + (a.Gb = V(g)), + (a.Uc = 0), + null == a.Gb + ? (g = 0) + : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)), + (g = !g)); + if (!g) { + g = a.ga; + var h = a.Fa, + k = a.P, + l = a.qc, + m = a.mb, + n = a.nb, + r = k + 1, + q = l - 1, + t = g.l; + x(null != h && null != m && null != b); + ia[0] = null; + ia[1] = Rb; + ia[2] = Gf; + ia[3] = Hf; + g.ca = m; + g.tb = n; + g.c = b.width; + g.i = b.height; + x(0 < g.c && 0 < g.i); + if (1 >= l) b = 0; + else if ( + ((g.$a = (h[k + 0] >> 0) & 3), + (g.Z = (h[k + 0] >> 2) & 3), + (g.Lc = (h[k + 0] >> 4) & 3), + (k = (h[k + 0] >> 6) & 3), + 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k) + ) + b = 0; + else if ( + ((t.put = kc), + (t.ac = gc), + (t.bc = lc), + (t.ma = g), + (t.width = b.width), + (t.height = b.height), + (t.Da = b.Da), + (t.v = b.v), + (t.va = b.va), + (t.j = b.j), + (t.o = b.o), + g.$a) + ) + b: { + x(1 == g.$a), (b = Bc()); + c: for (;;) { + if (null == b) { + b = 0; + break b; + } + x(null != g); + g.mc = b; + b.c = g.c; + b.i = g.i; + b.l = g.l; + b.l.ma = g; + b.l.width = g.c; + b.l.height = g.i; + b.a = 0; + cb(b.m, h, r, q); + if (!rb(g.c, g.i, 1, b, null)) break c; + 1 == b.ab && 3 == b.gc[0].hc && yc(b.s) + ? ((g.ic = 1), + (h = b.c * b.i), + (b.Ta = null), + (b.Ua = 0), + (b.V = V(h)), + (b.Ba = 0), + null == b.V ? ((b.a = 1), (b = 0)) : (b = 1)) + : ((g.ic = 0), (b = Ec(b, g.c))); + if (!b) break c; + b = 1; + break b; + } + g.mc = null; + b = 0; + } + else b = q >= g.c * g.i; + g = !b; + } + if (g) return null; + 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c); + } + x(null != a.ga); + x(c + d <= f); + a: { + h = a.ga; + b = h.c; + f = h.l.o; + if (0 == h.$a) { + r = a.rc; + q = a.Vc; + t = a.Fa; + k = a.P + 1 + c * b; + l = a.mb; + m = a.nb + c * b; + x(k <= a.P + a.qc); + if (0 != h.Z) + for (x(null != ia[h.Z]), g = 0; g < d; ++g) + ia[h.Z](r, q, t, k, l, m, b), + (r = l), + (q = m), + (m += b), + (k += b); + else + for (g = 0; g < d; ++g) + I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b); + a.rc = r; + a.Vc = q; + } else { + x(null != h.mc); + b = c + d; + g = h.mc; + x(null != g); + x(b <= g.i); + if (g.C >= b) b = 1; + else if ((h.ic || Aa(), h.ic)) { + var h = g.V, + r = g.Ba, + q = g.c, + v = g.i, + t = 1, + k = g.$ / q, + l = g.$ % q, + m = g.m, + n = g.s, + p = g.$, + u = q * v, + w = q * b, + y = n.wc, + A = p < w ? ha(n, l, k) : null; + x(p <= u); + x(b <= v); + x(yc(n)); + c: for (;;) { + for (; !m.h && p < w; ) { + l & y || (A = ha(n, l, k)); + x(null != A); + Sa(m); + v = ua(A.G[0], A.H[0], m); + if (256 > v) + (h[r + p] = v), + ++p, + ++l, + l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k)); + else if (280 > v) { + var v = ib(v - 256, m); + var E = ua(A.G[4], A.H[4], m); + Sa(m); + E = ib(E, m); + E = nc(q, E); + if (p >= E && u - p >= v) { + var B; + for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E]; + } else { + t = 0; + break c; + } + p += v; + for (l += v; l >= q; ) + (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k); + p < w && l & y && (A = ha(n, l, k)); + } else { + t = 0; + break c; + } + x(m.h == db(m)); + } + Ib(g, k > b ? b : k); + break c; + } + !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p); + b = t; + } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se); + if (!b) { + d = 0; + break a; + } + } + c + d >= f && (a.Cc = 1); + d = 1; + } + if (!d) return null; + if ( + a.Cc && + ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga) + ) + return alert("todo:WebPDequantizeLevels"), null; + } + return a.nb + c * e; + } + function If(a, b, c, d, e, f) { + for (; 0 < e--; ) { + var g = a, + h = b + (c ? 1 : 0), + k = a, + l = b + (c ? 0 : 3), + m; + for (m = 0; m < d; ++m) { + var n = k[l + 4 * m]; + 255 != n && + ((n *= 32897), + (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23), + (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23), + (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23)); + } + b += f; + } + } + function Jf(a, b, c, d, e) { + for (; 0 < d--; ) { + var f; + for (f = 0; f < c; ++f) { + var g = a[b + 2 * f + 0], + h = a[b + 2 * f + 1], + k = h & 15, + l = 4369 * k, + h = (((h & 240) | (h >> 4)) * l) >> 16; + a[b + 2 * f + 0] = + (((((g & 240) | (g >> 4)) * l) >> 16) & 240) | + ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15); + a[b + 2 * f + 1] = (h & 240) | k; + } + b += e; + } + } + function Kf(a, b, c, d, e, f, g, h) { + var k = 255, + l, + m; + for (m = 0; m < e; ++m) { + for (l = 0; l < d; ++l) { + var n = a[b + l]; + f[g + 4 * l] = n; + k &= n; + } + b += c; + g += h; + } + return 255 != k; + } + function Lf(a, b, c, d, e) { + var f; + for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8; + } + function Aa() { + za = If; + vc = Jf; + fc = Kf; + Fc = Lf; + } + function va(a, b, c) { + self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) { + var d, + E = (y - 1) >> 1; + var B = h[k + 0] | (l[m + 0] << 16); + var C = n[r + 0] | (q[t + 0] << 16); + x(null != a); + var z = (3 * B + C + 131074) >> 2; + b(a[e + 0], z & 255, z >> 16, v, p); + null != f && + ((z = (3 * C + B + 131074) >> 2), + b(f[g + 0], z & 255, z >> 16, u, w)); + for (d = 1; d <= E; ++d) { + var D = h[k + d] | (l[m + d] << 16); + var G = n[r + d] | (q[t + d] << 16); + var F = B + D + C + G + 524296; + var H = (F + 2 * (D + C)) >> 3; + F = (F + 2 * (B + G)) >> 3; + z = (H + B) >> 1; + B = (F + D) >> 1; + b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c); + b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c); + null != f && + ((z = (F + C) >> 1), + (B = (H + G) >> 1), + b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c), + b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c)); + B = D; + C = G; + } + y & 1 || + ((z = (3 * B + C + 131074) >> 2), + b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c), + null != f && + ((z = (3 * C + B + 131074) >> 2), + b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c))); + }; + } + function ic() { + P[Ca] = Mf; + P[Ua] = nd; + P[tc] = Nf; + P[Va] = od; + P[ya] = pd; + P[Db] = qd; + P[wc] = Of; + P[zb] = nd; + P[Ab] = od; + P[Ja] = pd; + P[Bb] = qd; + } + function Sb(a) { + return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd; + } + function bb(a, b) { + return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234); + } + function nb(a, b, c) { + return Sb( + ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708 + ); + } + function Pa(a, b) { + return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685); + } + function Ga(a, b, c, d, e) { + d[e + 0] = bb(a, c); + d[e + 1] = nb(a, b, c); + d[e + 2] = Pa(a, b); + } + function Tb(a, b, c, d, e) { + d[e + 0] = Pa(a, b); + d[e + 1] = nb(a, b, c); + d[e + 2] = bb(a, c); + } + function sd(a, b, c, d, e) { + var f = nb(a, b, c); + b = ((f << 3) & 224) | (Pa(a, b) >> 3); + d[e + 0] = (bb(a, c) & 248) | (f >> 5); + d[e + 1] = b; + } + function td(a, b, c, d, e) { + var f = (Pa(a, b) & 240) | 15; + d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4); + d[e + 1] = f; + } + function ud(a, b, c, d, e) { + d[e + 0] = 255; + Ga(a, b, c, d, e + 1); + } + function vd(a, b, c, d, e) { + Tb(a, b, c, d, e); + d[e + 3] = 255; + } + function wd(a, b, c, d, e) { + Ga(a, b, c, d, e); + d[e + 3] = 255; + } + function ga(a, b) { + return 0 > a ? 0 : a > b ? b : a; + } + function la(a, b, c) { + self[a] = function(a, e, f, g, h, k, l, m, n) { + for (var d = m + (n & -2) * c; m != d; ) + b(a[e + 0], f[g + 0], h[k + 0], l, m), + b(a[e + 1], f[g + 0], h[k + 0], l, m + c), + (e += 2), + ++g, + ++k, + (m += 2 * c); + n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m); + }; + } + function xd(a, b, c) { + return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c; + } + function yd(a, b, c, d, e) { + switch (a >>> 30) { + case 3: + Za(b, c, d, e, 0); + break; + case 2: + fd(b, c, d, e); + break; + case 1: + pa(b, c, d, e); + } + } + function Oc(a, b) { + var c, + d, + e = b.M, + f = b.Nb, + g = a.oc, + h = a.pc + 40, + k = a.oc, + l = a.pc + 584, + m = a.oc, + n = a.pc + 600; + for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129; + for (c = 0; 8 > c; ++c) + (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129); + 0 < e + ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129) + : (M(g, h - 32 - 1, 127, 21), + M(k, l - 32 - 1, 127, 9), + M(m, n - 32 - 1, 127, 9)); + for (d = 0; d < a.za; ++d) { + var r = b.ya[b.aa + d]; + if (0 < d) { + for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4); + for (c = -1; 8 > c; ++c) + I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4), + I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4); + } + var q = a.Gd, + t = a.Hd + d, + v = r.ad, + p = r.Hc; + 0 < e && + (I(g, h - 32, q[t].y, 0, 16), + I(k, l - 32, q[t].f, 0, 8), + I(m, n - 32, q[t].ea, 0, 8)); + if (r.Za) { + var u = g; + var w = h - 32 + 16; + 0 < e && + (d >= a.za - 1 + ? M(u, w, q[t].y[15], 4) + : I(u, w, q[t + 1].y, 0, 4)); + for (c = 0; 4 > c; c++) + u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c]; + for (c = 0; 16 > c; ++c, p <<= 2) + (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w); + } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p)) + for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]); + c = r.Gc; + u = xd(d, e, r.Dd); + ka[u](k, l); + ka[u](m, n); + r = c >> 0; + p = v; + u = k; + w = l; + r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w)); + c >>= 8; + r = m; + p = n; + c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p)); + e < a.Ub - 1 && + (I(q[t].y, 0, g, h + 480, 16), + I(q[t].f, 0, k, l + 224, 8), + I(q[t].ea, 0, m, n + 224, 8)); + c = 8 * f * a.B; + q = a.sa; + t = a.ta + 16 * d + 16 * f * a.R; + v = a.qa; + r = a.ra + 8 * d + c; + p = a.Ha; + u = a.Ia + 8 * d + c; + for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16); + for (c = 0; 8 > c; ++c) + I(v, r + c * a.B, k, l + 32 * c, 8), + I(p, u + c * a.B, m, n + 32 * c, 8); + } + } + function Ad(a, b, c, d, e, f, g, h, k) { + var l = [0], + m = [0], + n = 0, + r = null != k ? k.kd : 0, + q = null != k ? k : new md(); + if (null == a || 12 > c) return 7; + q.data = a; + q.w = b; + q.ha = c; + b = [b]; + c = [c]; + q.gb = [q.gb]; + a: { + var t = b; + var v = c; + var p = q.gb; + x(null != a); + x(null != v); + x(null != p); + p[0] = 0; + if (12 <= v[0] && !fa(a, t[0], "RIFF")) { + if (fa(a, t[0] + 8, "WEBP")) { + p = 3; + break a; + } + var u = Ha(a, t[0] + 4); + if (12 > u || 4294967286 < u) { + p = 3; + break a; + } + if (r && u > v[0] - 8) { + p = 7; + break a; + } + p[0] = u; + t[0] += 12; + v[0] -= 12; + } + p = 0; + } + if (0 != p) return p; + u = 0 < q.gb[0]; + for (c = c[0]; ; ) { + t = [0]; + n = [n]; + a: { + var w = a; + v = b; + p = c; + var y = n, + A = l, + z = m, + B = t; + y[0] = 0; + if (8 > p[0]) p = 7; + else { + if (!fa(w, v[0], "VP8X")) { + if (10 != Ha(w, v[0] + 4)) { + p = 3; + break a; + } + if (18 > p[0]) { + p = 7; + break a; + } + var C = Ha(w, v[0] + 8); + var D = 1 + Yb(w, v[0] + 12); + w = 1 + Yb(w, v[0] + 15); + if (2147483648 <= D * w) { + p = 3; + break a; + } + null != B && (B[0] = C); + null != A && (A[0] = D); + null != z && (z[0] = w); + v[0] += 18; + p[0] -= 18; + y[0] = 1; + } + p = 0; + } + } + n = n[0]; + t = t[0]; + if (0 != p) return p; + v = !!(t & 2); + if (!u && n) return 3; + null != f && (f[0] = !!(t & 16)); + null != g && (g[0] = v); + null != h && (h[0] = 0); + g = l[0]; + t = m[0]; + if (n && v && null == k) { + p = 0; + break; + } + if (4 > c) { + p = 7; + break; + } + if ((u && n) || (!u && !n && !fa(a, b[0], "ALPH"))) { + c = [c]; + q.na = [q.na]; + q.P = [q.P]; + q.Sa = [q.Sa]; + a: { + C = a; + p = b; + u = c; + var y = q.gb, + A = q.na, + z = q.P, + B = q.Sa; + D = 22; + x(null != C); + x(null != u); + w = p[0]; + var F = u[0]; + x(null != A); + x(null != B); + A[0] = null; + z[0] = null; + for (B[0] = 0; ; ) { + p[0] = w; + u[0] = F; + if (8 > F) { + p = 7; + break a; + } + var G = Ha(C, w + 4); + if (4294967286 < G) { + p = 3; + break a; + } + var H = (8 + G + 1) & -2; + D += H; + if (0 < y && D > y) { + p = 3; + break a; + } + if (!fa(C, w, "VP8 ") || !fa(C, w, "VP8L")) { + p = 0; + break a; + } + if (F[0] < H) { + p = 7; + break a; + } + fa(C, w, "ALPH") || ((A[0] = C), (z[0] = w + 8), (B[0] = G)); + w += H; + F -= H; + } + } + c = c[0]; + q.na = q.na[0]; + q.P = q.P[0]; + q.Sa = q.Sa[0]; + if (0 != p) break; + } + c = [c]; + q.Ja = [q.Ja]; + q.xa = [q.xa]; + a: if ( + ((y = a), + (p = b), + (u = c), + (A = q.gb[0]), + (z = q.Ja), + (B = q.xa), + (C = p[0]), + (w = !fa(y, C, "VP8 ")), + (D = !fa(y, C, "VP8L")), + x(null != y), + x(null != u), + x(null != z), + x(null != B), + 8 > u[0]) + ) + p = 7; + else { + if (w || D) { + y = Ha(y, C + 4); + if (12 <= A && y > A - 12) { + p = 3; + break a; + } + if (r && y > u[0] - 8) { + p = 7; + break a; + } + z[0] = y; + p[0] += 8; + u[0] -= 8; + B[0] = D; + } else + (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)), + (z[0] = u[0]); + p = 0; + } + c = c[0]; + q.Ja = q.Ja[0]; + q.xa = q.xa[0]; + b = b[0]; + if (0 != p) break; + if (4294967286 < q.Ja) return 3; + null == h || v || (h[0] = q.xa ? 2 : 1); + g = [g]; + t = [t]; + if (q.xa) { + if (5 > c) { + p = 7; + break; + } + h = g; + r = t; + v = f; + null == a || 5 > c + ? (a = 0) + : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5) + ? ((u = [0]), + (y = [0]), + (A = [0]), + (z = new Ra()), + cb(z, a, b, c), + mc(z, u, y, A) + ? (null != h && (h[0] = u[0]), + null != r && (r[0] = y[0]), + null != v && (v[0] = A[0]), + (a = 1)) + : (a = 0)) + : (a = 0); + } else { + if (10 > c) { + p = 7; + break; + } + h = t; + null == a || 10 > c || !Jc(a, b + 3, c - 3) + ? (a = 0) + : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)), + (v = ((a[b + 7] << 8) | a[b + 6]) & 16383), + (a = ((a[b + 9] << 8) | a[b + 8]) & 16383), + r & 1 || + 3 < ((r >> 1) & 7) || + !((r >> 4) & 1) || + r >> 5 >= q.Ja || + !v || + !a + ? (a = 0) + : (g && (g[0] = v), h && (h[0] = a), (a = 1))); + } + if (!a) return 3; + g = g[0]; + t = t[0]; + if (n && (l[0] != g || m[0] != t)) return 3; + null != k && + ((k[0] = q), + (k.offset = b - k.w), + x(4294967286 > b - k.w), + x(k.offset == k.ha - c)); + break; + } + return 0 == p || (7 == p && n && null == k) + ? (null != f && (f[0] |= null != q.na && 0 < q.na.length), + null != d && (d[0] = g), + null != e && (e[0] = t), + 0) + : p; + } + function hc(a, b, c) { + var d = b.width, + e = b.height, + f = 0, + g = 0, + h = d, + k = e; + b.Da = null != a && 0 < a.Da; + if ( + b.Da && + ((h = a.cd), + (k = a.bd), + (f = a.v), + (g = a.j), + 11 > c || ((f &= -2), (g &= -2)), + 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e) + ) + return 0; + b.v = f; + b.j = g; + b.va = f + h; + b.o = g + k; + b.U = h; + b.T = k; + b.da = null != a && 0 < a.da; + if (b.da) { + c = [a.ib]; + f = [a.hb]; + if (!bc(h, k, c, f)) return 0; + b.ib = c[0]; + b.hb = f[0]; + } + b.ob = null != a && a.ob; + b.Kb = null == a || !a.Sd; + b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0)); + return 1; + } + function Bd(a) { + if (null == a) return 2; + if (11 > a.S) { + var b = a.f.RGBA; + b.fb += (a.height - 1) * b.A; + b.A = -b.A; + } else + (b = a.f.kb), + (a = a.height), + (b.O += (a - 1) * b.fa), + (b.fa = -b.fa), + (b.N += ((a - 1) >> 1) * b.Ab), + (b.Ab = -b.Ab), + (b.W += ((a - 1) >> 1) * b.Db), + (b.Db = -b.Db), + null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb)); + return 0; + } + function Cd(a, b, c, d) { + if (null == d || 0 >= a || 0 >= b) return 2; + if (null != c) { + if (c.Da) { + var e = c.cd, + f = c.bd, + g = c.v & -2, + h = c.j & -2; + if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b) + return 2; + a = e; + b = f; + } + if (c.da) { + e = [c.ib]; + f = [c.hb]; + if (!bc(a, b, e, f)) return 2; + a = e[0]; + b = f[0]; + } + } + d.width = a; + d.height = b; + a: { + var k = d.width; + var l = d.height; + a = d.S; + if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2; + else { + if (0 >= d.Rd && null == d.sd) { + var g = (f = e = b = 0), + h = k * Dd[a], + m = h * l; + 11 > a || + ((b = (k + 1) / 2), + (f = ((l + 1) / 2) * b), + 12 == a && ((e = k), (g = e * l))); + l = V(m + 2 * f + g); + if (null == l) { + a = 1; + break a; + } + d.sd = l; + 11 > a + ? ((k = d.f.RGBA), + (k.eb = l), + (k.fb = 0), + (k.A = h), + (k.size = m)) + : ((k = d.f.kb), + (k.y = l), + (k.O = 0), + (k.fa = h), + (k.Fd = m), + (k.f = l), + (k.N = 0 + m), + (k.Ab = b), + (k.Cd = f), + (k.ea = l), + (k.W = 0 + m + f), + (k.Db = b), + (k.Ed = f), + 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)), + (k.Tc = g), + (k.lb = e)); + } + b = 1; + e = d.S; + f = d.width; + g = d.height; + if (e >= Ca && 13 > e) + if (11 > e) + (a = d.f.RGBA), + (h = Math.abs(a.A)), + (b &= h * (g - 1) + f <= a.size), + (b &= h >= f * Dd[e]), + (b &= null != a.eb); + else { + a = d.f.kb; + h = (f + 1) / 2; + m = (g + 1) / 2; + k = Math.abs(a.fa); + var l = Math.abs(a.Ab), + n = Math.abs(a.Db), + r = Math.abs(a.lb), + q = r * (g - 1) + f; + b &= k * (g - 1) + f <= a.Fd; + b &= l * (m - 1) + h <= a.Cd; + b &= n * (m - 1) + h <= a.Ed; + b = b & (k >= f) & (l >= h) & (n >= h); + b &= null != a.y; + b &= null != a.f; + b &= null != a.ea; + 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F)); + } + else b = 0; + a = b ? 0 : 2; + } + } + if (0 != a) return a; + null != c && c.fd && (a = Bd(d)); + return a; + } + var xb = 64, + Hd = [ + 0, + 1, + 3, + 7, + 15, + 31, + 63, + 127, + 255, + 511, + 1023, + 2047, + 4095, + 8191, + 16383, + 32767, + 65535, + 131071, + 262143, + 524287, + 1048575, + 2097151, + 4194303, + 8388607, + 16777215 + ], + Gd = 24, + ob = 32, + Xb = 8, + Id = [ + 0, + 0, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ]; + X("Predictor0", "PredictorAdd0"); + self.Predictor0 = function() { + return 4278190080; + }; + self.Predictor1 = function(a) { + return a; + }; + self.Predictor2 = function(a, b, c) { + return b[c + 0]; + }; + self.Predictor3 = function(a, b, c) { + return b[c + 1]; + }; + self.Predictor4 = function(a, b, c) { + return b[c - 1]; + }; + self.Predictor5 = function(a, b, c) { + return aa(aa(a, b[c + 1]), b[c + 0]); + }; + self.Predictor6 = function(a, b, c) { + return aa(a, b[c - 1]); + }; + self.Predictor7 = function(a, b, c) { + return aa(a, b[c + 0]); + }; + self.Predictor8 = function(a, b, c) { + return aa(b[c - 1], b[c + 0]); + }; + self.Predictor9 = function(a, b, c) { + return aa(b[c + 0], b[c + 1]); + }; + self.Predictor10 = function(a, b, c) { + return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1])); + }; + self.Predictor11 = function(a, b, c) { + var d = b[c + 0]; + b = b[c - 1]; + return 0 >= + Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) + + Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) + + Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) + + Ia(d & 255, a & 255, b & 255) + ? d + : a; + }; + self.Predictor12 = function(a, b, c) { + var d = b[c + 0]; + b = b[c - 1]; + return ( + ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) | + (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) << + 16) | + (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) | + sa((a & 255) + (d & 255) - (b & 255))) >>> + 0 + ); + }; + self.Predictor13 = function(a, b, c) { + var d = b[c - 1]; + a = aa(a, b[c + 0]); + return ( + ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) | + (eb((a >> 16) & 255, (d >> 16) & 255) << 16) | + (eb((a >> 8) & 255, (d >> 8) & 255) << 8) | + eb((a >> 0) & 255, (d >> 0) & 255)) >>> + 0 + ); + }; + var ee = self.PredictorAdd0; + self.PredictorAdd1 = cc; + X("Predictor2", "PredictorAdd2"); + X("Predictor3", "PredictorAdd3"); + X("Predictor4", "PredictorAdd4"); + X("Predictor5", "PredictorAdd5"); + X("Predictor6", "PredictorAdd6"); + X("Predictor7", "PredictorAdd7"); + X("Predictor8", "PredictorAdd8"); + X("Predictor9", "PredictorAdd9"); + X("Predictor10", "PredictorAdd10"); + X("Predictor11", "PredictorAdd11"); + X("Predictor12", "PredictorAdd12"); + X("Predictor13", "PredictorAdd13"); + var fe = self.PredictorAdd2; + ec( + "ColorIndexInverseTransform", + "MapARGB", + "32b", + function(a) { + return (a >> 8) & 255; + }, + function(a) { + return a; + } + ); + ec( + "VP8LColorIndexInverseTransformAlpha", + "MapAlpha", + "8b", + function(a) { + return a; + }, + function(a) { + return (a >> 8) & 255; + } + ); + var rc = self.ColorIndexInverseTransform, + ke = self.MapARGB, + he = self.VP8LColorIndexInverseTransformAlpha, + le = self.MapAlpha, + pc, + qc = (self.VP8LPredictorsAdd = []); + qc.length = 16; + (self.VP8LPredictors = []).length = 16; + (self.VP8LPredictorsAdd_C = []).length = 16; + (self.VP8LPredictors_C = []).length = 16; + var Fb, + sc, + Gb, + Hb, + xc, + uc, + bd = V(511), + cd = V(2041), + dd = V(225), + ed = V(767), + ad = 0, + Qb = cd, + mb = dd, + R = ed, + U = bd, + Ca = 0, + Ua = 1, + tc = 2, + Va = 3, + ya = 4, + Db = 5, + wc = 6, + zb = 7, + Ab = 8, + Ja = 9, + Bb = 10, + pe = [2, 3, 7], + oe = [3, 3, 11], + Dc = [280, 256, 256, 256, 40], + qe = [0, 1, 1, 1, 0], + ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + de = [ + 24, + 7, + 23, + 25, + 40, + 6, + 39, + 41, + 22, + 26, + 38, + 42, + 56, + 5, + 55, + 57, + 21, + 27, + 54, + 58, + 37, + 43, + 72, + 4, + 71, + 73, + 20, + 28, + 53, + 59, + 70, + 74, + 36, + 44, + 88, + 69, + 75, + 52, + 60, + 3, + 87, + 89, + 19, + 29, + 86, + 90, + 35, + 45, + 68, + 76, + 85, + 91, + 51, + 61, + 104, + 2, + 103, + 105, + 18, + 30, + 102, + 106, + 34, + 46, + 84, + 92, + 67, + 77, + 101, + 107, + 50, + 62, + 120, + 1, + 119, + 121, + 83, + 93, + 17, + 31, + 100, + 108, + 66, + 78, + 118, + 122, + 33, + 47, + 117, + 123, + 49, + 63, + 99, + 109, + 82, + 94, + 0, + 116, + 124, + 65, + 79, + 16, + 32, + 98, + 110, + 48, + 115, + 125, + 81, + 95, + 64, + 114, + 126, + 97, + 111, + 80, + 113, + 127, + 96, + 112 + ], + me = [ + 2954, + 2956, + 2958, + 2962, + 2970, + 2986, + 3018, + 3082, + 3212, + 3468, + 3980, + 5004 + ], + ie = 8, + Lb = [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 17, + 18, + 19, + 20, + 20, + 21, + 21, + 22, + 22, + 23, + 23, + 24, + 25, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 91, + 93, + 95, + 96, + 98, + 100, + 101, + 102, + 104, + 106, + 108, + 110, + 112, + 114, + 116, + 118, + 122, + 124, + 126, + 128, + 130, + 132, + 134, + 136, + 138, + 140, + 143, + 145, + 148, + 151, + 154, + 157 + ], + Mb = [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 74, + 76, + 78, + 80, + 82, + 84, + 86, + 88, + 90, + 92, + 94, + 96, + 98, + 100, + 102, + 104, + 106, + 108, + 110, + 112, + 114, + 116, + 119, + 122, + 125, + 128, + 131, + 134, + 137, + 140, + 143, + 146, + 149, + 152, + 155, + 158, + 161, + 164, + 167, + 170, + 173, + 177, + 181, + 185, + 189, + 193, + 197, + 201, + 205, + 209, + 213, + 217, + 221, + 225, + 229, + 234, + 239, + 245, + 249, + 254, + 259, + 264, + 269, + 274, + 279, + 284 + ], + oa = null, + He = [ + [173, 148, 140, 0], + [176, 155, 140, 135, 0], + [180, 157, 141, 134, 130, 0], + [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0] + ], + Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15], + Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9], + Fe = [ + [ + [ + [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], + [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], + [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128] + ], + [ + [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128], + [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128], + [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128] + ], + [ + [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128], + [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128], + [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128] + ], + [ + [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128], + [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128], + [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128] + ], + [ + [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128], + [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128], + [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128] + ], + [ + [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128], + [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128], + [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128] + ], + [ + [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128], + [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128], + [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128] + ], + [ + [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], + [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], + [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128] + ] + ], + [ + [ + [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62], + [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1], + [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128] + ], + [ + [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128], + [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128], + [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128] + ], + [ + [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128], + [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128], + [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128] + ], + [ + [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128], + [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128], + [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128] + ], + [ + [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128], + [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128], + [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128] + ], + [ + [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128], + [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128], + [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128] + ], + [ + [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128], + [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128], + [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128] + ], + [ + [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128], + [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128], + [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128] + ] + ], + [ + [ + [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128], + [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128], + [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128] + ], + [ + [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128], + [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128], + [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128] + ], + [ + [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128], + [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128], + [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128] + ], + [ + [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128], + [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128], + [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128] + ], + [ + [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128], + [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128], + [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128] + ], + [ + [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128], + [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128], + [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128] + ], + [ + [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128], + [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128], + [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128] + ], + [ + [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], + [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], + [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128] + ] + ], + [ + [ + [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255], + [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128], + [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128] + ], + [ + [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128], + [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128], + [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128] + ], + [ + [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128], + [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128], + [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128] + ], + [ + [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128], + [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128], + [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128] + ], + [ + [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128], + [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128], + [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128] + ], + [ + [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128], + [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128], + [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128] + ], + [ + [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128], + [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128], + [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128] + ], + [ + [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], + [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], + [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128] + ] + ] + ], + Ke = [ + [ + [231, 120, 48, 89, 115, 113, 120, 152, 112], + [152, 179, 64, 126, 170, 118, 46, 70, 95], + [175, 69, 143, 80, 85, 82, 72, 155, 103], + [56, 58, 10, 171, 218, 189, 17, 13, 152], + [114, 26, 17, 163, 44, 195, 21, 10, 173], + [121, 24, 80, 195, 26, 62, 44, 64, 85], + [144, 71, 10, 38, 171, 213, 144, 34, 26], + [170, 46, 55, 19, 136, 160, 33, 206, 71], + [63, 20, 8, 114, 114, 208, 12, 9, 226], + [81, 40, 11, 96, 182, 84, 29, 16, 36] + ], + [ + [134, 183, 89, 137, 98, 101, 106, 165, 148], + [72, 187, 100, 130, 157, 111, 32, 75, 80], + [66, 102, 167, 99, 74, 62, 40, 234, 128], + [41, 53, 9, 178, 241, 141, 26, 8, 107], + [74, 43, 26, 146, 73, 166, 49, 23, 157], + [65, 38, 105, 160, 51, 52, 31, 115, 128], + [104, 79, 12, 27, 217, 255, 87, 17, 7], + [87, 68, 71, 44, 114, 51, 15, 186, 23], + [47, 41, 14, 110, 182, 183, 21, 17, 194], + [66, 45, 25, 102, 197, 189, 23, 18, 22] + ], + [ + [88, 88, 147, 150, 42, 46, 45, 196, 205], + [43, 97, 183, 117, 85, 38, 35, 179, 61], + [39, 53, 200, 87, 26, 21, 43, 232, 171], + [56, 34, 51, 104, 114, 102, 29, 93, 77], + [39, 28, 85, 171, 58, 165, 90, 98, 64], + [34, 22, 116, 206, 23, 34, 43, 166, 73], + [107, 54, 32, 26, 51, 1, 81, 43, 31], + [68, 25, 106, 22, 64, 171, 36, 225, 114], + [34, 19, 21, 102, 132, 188, 16, 76, 124], + [62, 18, 78, 95, 85, 57, 50, 48, 51] + ], + [ + [193, 101, 35, 159, 215, 111, 89, 46, 111], + [60, 148, 31, 172, 219, 228, 21, 18, 111], + [112, 113, 77, 85, 179, 255, 38, 120, 114], + [40, 42, 1, 196, 245, 209, 10, 25, 109], + [88, 43, 29, 140, 166, 213, 37, 43, 154], + [61, 63, 30, 155, 67, 45, 68, 1, 209], + [100, 80, 8, 43, 154, 1, 51, 26, 71], + [142, 78, 78, 16, 255, 128, 34, 197, 171], + [41, 40, 5, 102, 211, 183, 4, 1, 221], + [51, 50, 17, 168, 209, 192, 23, 25, 82] + ], + [ + [138, 31, 36, 171, 27, 166, 38, 44, 229], + [67, 87, 58, 169, 82, 115, 26, 59, 179], + [63, 59, 90, 180, 59, 166, 93, 73, 154], + [40, 40, 21, 116, 143, 209, 34, 39, 175], + [47, 15, 16, 183, 34, 223, 49, 45, 183], + [46, 17, 33, 183, 6, 98, 15, 32, 183], + [57, 46, 22, 24, 128, 1, 54, 17, 37], + [65, 32, 73, 115, 28, 128, 23, 128, 205], + [40, 3, 9, 115, 51, 192, 18, 6, 223], + [87, 37, 9, 115, 59, 77, 64, 21, 47] + ], + [ + [104, 55, 44, 218, 9, 54, 53, 130, 226], + [64, 90, 70, 205, 40, 41, 23, 26, 57], + [54, 57, 112, 184, 5, 41, 38, 166, 213], + [30, 34, 26, 133, 152, 116, 10, 32, 134], + [39, 19, 53, 221, 26, 114, 32, 73, 255], + [31, 9, 65, 234, 2, 15, 1, 118, 73], + [75, 32, 12, 51, 192, 255, 160, 43, 51], + [88, 31, 35, 67, 102, 85, 55, 186, 85], + [56, 21, 23, 111, 59, 205, 45, 37, 192], + [55, 38, 70, 124, 73, 102, 1, 34, 98] + ], + [ + [125, 98, 42, 88, 104, 85, 117, 175, 82], + [95, 84, 53, 89, 128, 100, 113, 101, 45], + [75, 79, 123, 47, 51, 128, 81, 171, 1], + [57, 17, 5, 71, 102, 57, 53, 41, 49], + [38, 33, 13, 121, 57, 73, 26, 1, 85], + [41, 10, 67, 138, 77, 110, 90, 47, 114], + [115, 21, 2, 10, 102, 255, 166, 23, 6], + [101, 29, 16, 10, 85, 128, 101, 196, 26], + [57, 18, 10, 102, 102, 213, 34, 20, 43], + [117, 20, 15, 36, 163, 128, 68, 1, 26] + ], + [ + [102, 61, 71, 37, 34, 53, 31, 243, 192], + [69, 60, 71, 38, 73, 119, 28, 222, 37], + [68, 45, 128, 34, 1, 47, 11, 245, 171], + [62, 17, 19, 70, 146, 85, 55, 62, 70], + [37, 43, 37, 154, 100, 163, 85, 160, 1], + [63, 9, 92, 136, 28, 64, 32, 201, 85], + [75, 15, 9, 9, 64, 255, 184, 119, 16], + [86, 6, 28, 5, 64, 255, 25, 248, 1], + [56, 8, 17, 132, 137, 255, 55, 116, 128], + [58, 15, 20, 82, 135, 57, 26, 121, 40] + ], + [ + [164, 50, 31, 137, 154, 133, 25, 35, 218], + [51, 103, 44, 131, 131, 123, 31, 6, 158], + [86, 40, 64, 135, 148, 224, 45, 183, 128], + [22, 26, 17, 131, 240, 154, 14, 1, 209], + [45, 16, 21, 91, 64, 222, 7, 1, 197], + [56, 21, 39, 155, 60, 138, 23, 102, 213], + [83, 12, 13, 54, 192, 255, 68, 47, 28], + [85, 26, 85, 85, 128, 128, 32, 146, 171], + [18, 11, 7, 63, 144, 171, 4, 4, 246], + [35, 27, 10, 146, 174, 171, 12, 26, 128] + ], + [ + [190, 80, 35, 99, 180, 80, 126, 54, 45], + [85, 126, 47, 87, 176, 51, 41, 20, 32], + [101, 75, 128, 139, 118, 146, 116, 128, 85], + [56, 41, 15, 176, 236, 85, 37, 9, 62], + [71, 30, 17, 119, 118, 255, 17, 18, 138], + [101, 38, 60, 138, 55, 70, 43, 26, 142], + [146, 36, 19, 30, 171, 255, 97, 27, 20], + [138, 45, 61, 62, 219, 1, 81, 188, 64], + [32, 41, 20, 117, 151, 142, 20, 21, 163], + [112, 19, 12, 61, 195, 128, 48, 4, 24] + ] + ], + Ee = [ + [ + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255], + [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255], + [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255], + [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255], + [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ] + ], + [ + [ + [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255], + [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255] + ], + [ + [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], + [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ] + ], + [ + [ + [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255], + [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255], + [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255] + ], + [ + [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ] + ], + [ + [ + [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255], + [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], + [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], + [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255], + [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], + [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255], + [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255], + [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ], + [ + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], + [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] + ] + ] + ], + Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0], + Nc, + Y = [], + W = [], + ka = [], + Za, + fd, + Nb, + pa, + Ob, + Xc, + Tc, + Yc, + Uc, + Zc, + Vc, + $c, + Wc, + Rc, + Pc, + Sc, + Qc, + re = 1, + Cc = 2, + ia = [], + za, + vc, + fc, + Fc, + P = []; + va("UpsampleRgbLinePair", Ga, 3); + va("UpsampleBgrLinePair", Tb, 3); + va("UpsampleRgbaLinePair", wd, 4); + va("UpsampleBgraLinePair", vd, 4); + va("UpsampleArgbLinePair", ud, 4); + va("UpsampleRgba4444LinePair", td, 2); + va("UpsampleRgb565LinePair", sd, 2); + var Mf = self.UpsampleRgbLinePair, + Nf = self.UpsampleBgrLinePair, + nd = self.UpsampleRgbaLinePair, + od = self.UpsampleBgraLinePair, + pd = self.UpsampleArgbLinePair, + qd = self.UpsampleRgba4444LinePair, + Of = self.UpsampleRgb565LinePair, + Wa = 16, + Ba = 1 << (Wa - 1), + ta = -227, + Eb = 482, + rd = 6, + Pf = (256 << rd) - 1, + jc = 0, + Yd = V(256), + ae = V(256), + $d = V(256), + Zd = V(256), + be = V(Eb - ta), + ce = V(Eb - ta); + la("YuvToRgbRow", Ga, 3); + la("YuvToBgrRow", Tb, 3); + la("YuvToRgbaRow", wd, 4); + la("YuvToBgraRow", vd, 4); + la("YuvToArgbRow", ud, 4); + la("YuvToRgba4444Row", td, 2); + la("YuvToRgb565Row", sd, 2); + var zd = [ + 0, + 4, + 8, + 12, + 128, + 132, + 136, + 140, + 256, + 260, + 264, + 268, + 384, + 388, + 392, + 396 + ], + Ya = [0, 2, 8], + Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1], + Ne = 1; + this.WebPDecodeRGBA = function(a, b, c, d, e) { + var f = Ua; + var g = new Cf(), + h = new Cb(); + g.ba = h; + h.S = f; + h.width = [h.width]; + h.height = [h.height]; + var k = h.width; + var l = h.height, + m = new Td(); + if (null == m || null == a) var n = 2; + else + x(null != m), + (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null)); + 0 != n + ? (k = 0) + : (null != k && (k[0] = m.width[0]), + null != l && (l[0] = m.height[0]), + (k = 1)); + if (k) { + h.width = h.width[0]; + h.height = h.height[0]; + null != d && (d[0] = h.width); + null != e && (e[0] = h.height); + b: { + d = new Oa(); + e = new md(); + e.data = a; + e.w = b; + e.ha = c; + e.kd = 1; + b = [0]; + x(null != e); + a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e); + (0 == a || 7 == a) && b[0] && (a = 4); + b = a; + if (0 == b) { + x(null != g); + d.data = e.data; + d.w = e.w + e.offset; + d.ha = e.ha - e.offset; + d.put = kc; + d.ac = gc; + d.bc = lc; + d.ma = g; + if (e.xa) { + a = Bc(); + if (null == a) { + g = 1; + break b; + } + if (te(a, d)) { + b = Cd(d.width, d.height, g.Oa, g.ba); + if ((d = 0 == b)) { + c: { + d = a; + d: for (;;) { + if (null == d) { + d = 0; + break c; + } + x(null != d.s.yc); + x(null != d.s.Ya); + x(0 < d.s.Wb); + c = d.l; + x(null != c); + e = c.ma; + x(null != e); + if (0 != d.xb) { + d.ca = e.ba; + d.tb = e.tb; + x(null != d.ca); + if (!hc(e.Oa, c, Va)) { + d.a = 2; + break d; + } + if (!Ec(d, c.width)) break d; + if (c.da) break d; + (c.da || hb(d.ca.S)) && Aa(); + 11 > d.ca.S || + (alert("todo:WebPInitConvertARGBToYUV"), + null != d.ca.f.kb.F && Aa()); + if ( + d.Pb && + 0 < d.s.ua && + null == d.s.vb.X && + !Zb(d.s.vb, d.s.Wa.Xa) + ) { + d.a = 1; + break d; + } + d.xb = 0; + } + if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d; + e.Dc = d.Ma; + d = 1; + break c; + } + x(0 != d.a); + d = 0; + } + d = !d; + } + d && (b = a.a); + } else b = a.a; + } else { + a = new Ce(); + if (null == a) { + g = 1; + break b; + } + a.Fa = e.na; + a.P = e.P; + a.qc = e.Sa; + if (Kc(a, d)) { + if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) { + a.Aa = 0; + c = g.Oa; + e = a; + x(null != e); + if (null != c) { + k = c.Md; + k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100; + if (0 < k) { + for (l = m = 0; 4 > l; ++l) + (n = e.pb[l]), + 12 > n.lc && + (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3), + (m |= n.ia); + m && (alert("todo:VP8InitRandom"), (e.ia = 1)); + } + e.Ga = c.Id; + 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0); + } + Me(a, d) || (b = a.a); + } + } else b = a.a; + } + 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba)); + } + g = b; + } + f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y; + } else f = null; + return f; + }; + var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1]; + }; + new _WebPDecoder(); + + /** @license + * Copyright (c) 2017 Dominik Homberger + +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. + +https://webpjs.appspot.com +WebPRiffParser dominikhlbg@gmail.com +*/ + + function memcmp(data, data_off, str, size) { + for (var i = 0; i < size; i++) + if (data[data_off + i] != str.charCodeAt(i)) return true; + return false; + } + + function GetTag(data, data_off) { + var str = ""; + for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]); + return str; + } + + function GetLE16(data, data_off) { + return (data[data_off + 0] << 0) | (data[data_off + 1] << 8); + } + + function GetLE24(data, data_off) { + return ( + ((data[data_off + 0] << 0) | + (data[data_off + 1] << 8) | + (data[data_off + 2] << 16)) >>> + 0 + ); + } + + function GetLE32(data, data_off) { + return ( + ((data[data_off + 0] << 0) | + (data[data_off + 1] << 8) | + (data[data_off + 2] << 16) | + (data[data_off + 3] << 24)) >>> + 0 + ); + } + + function WebPRiffParser(src, src_off) { + var imagearray = {}; + var i = 0; + var alpha_chunk = false; + var alpha_size = 0; + var alpha_offset = 0; + imagearray["frames"] = []; + if (memcmp(src, src_off, "RIFF", 4)) return; + src_off += 4; + var riff_size = GetLE32(src, src_off) + 8; + src_off += 8; + + while (src_off < src.length) { + var fourcc = GetTag(src, src_off); + src_off += 4; + + var payload_size = GetLE32(src, src_off); + src_off += 4; + var payload_size_padded = payload_size + (payload_size & 1); + + switch (fourcc) { + case "VP8 ": + case "VP8L": + if (typeof imagearray["frames"][i] === "undefined") + imagearray["frames"][i] = {}; + var obj = imagearray["frames"][i]; + var height = [0]; + var width = [0]; + obj["src_off"] = alpha_chunk ? alpha_offset : src_off - 8; + obj["src_size"] = alpha_size + payload_size + 8; + //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height); + //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]}; + i++; + if (alpha_chunk) { + alpha_chunk = false; + alpha_size = 0; + alpha_offset = 0; + } + break; + case "VP8X": + var obj = (imagearray["header"] = {}); + var feature_flags = (obj["feature_flags"] = src[src_off]); + var src_off_ = src_off + 4; + var canvas_width = (obj["canvas_width"] = 1 + GetLE24(src, src_off_)); + src_off_ += 3; + var canvas_height = (obj["canvas_height"] = + 1 + GetLE24(src, src_off_)); + src_off_ += 3; + break; + case "ALPH": + alpha_chunk = true; + alpha_size = payload_size_padded + 8; + alpha_offset = src_off - 8; + break; + + case "ANIM": + var obj = imagearray["header"]; + var bgcolor = (obj["bgcolor"] = GetLE32(src, src_off)); + src_off_ = src_off + 4; + + var loop_count = (obj["loop_count"] = GetLE16(src, src_off_)); + src_off_ += 2; + break; + case "ANMF": + var offset_x = 0, + offset_y = 0, + width = 0, + height = 0, + duration = 0, + blend = 0, + dispose = 0, + temp = 0; + var obj = (imagearray["frames"][i] = {}); + obj["offset_x"] = offset_x = 2 * GetLE24(src, src_off); + src_off += 3; + obj["offset_y"] = offset_y = 2 * GetLE24(src, src_off); + src_off += 3; + obj["width"] = width = 1 + GetLE24(src, src_off); + src_off += 3; + obj["height"] = height = 1 + GetLE24(src, src_off); + src_off += 3; + obj["duration"] = duration = GetLE24(src, src_off); + src_off += 3; + temp = src[src_off++]; + obj["dispose"] = dispose = temp & 1; + obj["blend"] = blend = (temp >> 1) & 1; + break; + } + if (fourcc != "ANMF") src_off += payload_size_padded; + } + return imagearray; + } + + var height = [0]; + var width = [0]; + var pixels = []; + var webpdecoder = new _WebPDecoder(); + + var response = imageData; + var imagearray = WebPRiffParser(response, 0); + imagearray["response"] = response; + imagearray["rgbaoutput"] = true; + imagearray["dataurl"] = false; + + var header = imagearray["header"] ? imagearray["header"] : null; + var frames = imagearray["frames"] ? imagearray["frames"] : null; + + if (header) { + header["loop_counter"] = header["loop_count"]; + height = [header["canvas_height"]]; + width = [header["canvas_width"]]; + for (var f = 0; f < frames.length; f++) + if (frames[f]["blend"] == 0) { + break; + } + } + + var frame = frames[0]; + var rgba = webpdecoder.WebPDecodeRGBA( + response, + frame["src_off"], + frame["src_size"], + width, + height + ); + frame["rgba"] = rgba; + frame["imgwidth"] = width[0]; + frame["imgheight"] = height[0]; + + for (var i = 0; i < width[0] * height[0] * 4; i++) { + pixels[i] = rgba[i]; + } + + this.width = width; + this.height = height; + this.data = pixels; + return this; +} + +WebPDecoder.prototype.getData = function() { + return this.data; +}; + +/** + * @license + * Copyright (c) 2019 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF webp Support PlugIn + * + * @name webp_support + * @module + */ +(function(jsPDFAPI) { + + jsPDFAPI.processWEBP = function(imageData, index, alias, compression) { + var reader = new WebPDecoder(imageData, false); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = reader.getData(); + + var rawImageData = { + data: pixels, + width: width, + height: height + }; + + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; +})(jsPDF.API); + +/** + * @license + * + * Copyright (c) 2021 Antti Palola, https://github.com/Pantura + * + * 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. + * ==================================================================== + */ + +/** + * jsPDF RGBA array PlugIn + * @name rgba_support + * @module + */ +(function(jsPDFAPI) { + + /** + * @name processRGBA + * @function + * + * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...]. + * RGBA array data can be obtained from DOM canvas getImageData. + * @ignore + */ + jsPDFAPI.processRGBA = function(imageData, index, alias) { + + var imagePixels = imageData.data; + var length = imagePixels.length; + // jsPDF takes alpha data separately so extract that. + var rgbOut = new Uint8Array((length / 4) * 3); + var alphaOut = new Uint8Array(length / 4); + var outIndex = 0; + var alphaIndex = 0; + + for (var i = 0; i < length; i += 4) { + var r = imagePixels[i]; + var g = imagePixels[i + 1]; + var b = imagePixels[i + 2]; + var alpha = imagePixels[i + 3]; + rgbOut[outIndex++] = r; + rgbOut[outIndex++] = g; + rgbOut[outIndex++] = b; + alphaOut[alphaIndex++] = alpha; + } + + var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut); + var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut); + + return { + alpha: alphaData, + data: rgbData, + index: index, + alias: alias, + colorSpace: "DeviceRGB", + bitsPerComponent: 8, + width: imageData.width, + height: imageData.height + }; + }; +})(jsPDF.API); + +/** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * jsPDF setLanguage Plugin + * + * @name setLanguage + * @module + */ +(function(jsPDFAPI) { + + /** + * Add Language Tag to the generated PDF + * + * @name setLanguage + * @function + * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB'). + * @returns {jsPDF} + * @example + * var doc = new jsPDF() + * doc.text(10, 10, 'This is a test') + * doc.setLanguage("en-US") + * doc.save('english.pdf') + */ + jsPDFAPI.setLanguage = function(langCode) { + + var langCodes = { + af: "Afrikaans", + sq: "Albanian", + ar: "Arabic (Standard)", + "ar-DZ": "Arabic (Algeria)", + "ar-BH": "Arabic (Bahrain)", + "ar-EG": "Arabic (Egypt)", + "ar-IQ": "Arabic (Iraq)", + "ar-JO": "Arabic (Jordan)", + "ar-KW": "Arabic (Kuwait)", + "ar-LB": "Arabic (Lebanon)", + "ar-LY": "Arabic (Libya)", + "ar-MA": "Arabic (Morocco)", + "ar-OM": "Arabic (Oman)", + "ar-QA": "Arabic (Qatar)", + "ar-SA": "Arabic (Saudi Arabia)", + "ar-SY": "Arabic (Syria)", + "ar-TN": "Arabic (Tunisia)", + "ar-AE": "Arabic (U.A.E.)", + "ar-YE": "Arabic (Yemen)", + an: "Aragonese", + hy: "Armenian", + as: "Assamese", + ast: "Asturian", + az: "Azerbaijani", + eu: "Basque", + be: "Belarusian", + bn: "Bengali", + bs: "Bosnian", + br: "Breton", + bg: "Bulgarian", + my: "Burmese", + ca: "Catalan", + ch: "Chamorro", + ce: "Chechen", + zh: "Chinese", + "zh-HK": "Chinese (Hong Kong)", + "zh-CN": "Chinese (PRC)", + "zh-SG": "Chinese (Singapore)", + "zh-TW": "Chinese (Taiwan)", + cv: "Chuvash", + co: "Corsican", + cr: "Cree", + hr: "Croatian", + cs: "Czech", + da: "Danish", + nl: "Dutch (Standard)", + "nl-BE": "Dutch (Belgian)", + en: "English", + "en-AU": "English (Australia)", + "en-BZ": "English (Belize)", + "en-CA": "English (Canada)", + "en-IE": "English (Ireland)", + "en-JM": "English (Jamaica)", + "en-NZ": "English (New Zealand)", + "en-PH": "English (Philippines)", + "en-ZA": "English (South Africa)", + "en-TT": "English (Trinidad & Tobago)", + "en-GB": "English (United Kingdom)", + "en-US": "English (United States)", + "en-ZW": "English (Zimbabwe)", + eo: "Esperanto", + et: "Estonian", + fo: "Faeroese", + fj: "Fijian", + fi: "Finnish", + fr: "French (Standard)", + "fr-BE": "French (Belgium)", + "fr-CA": "French (Canada)", + "fr-FR": "French (France)", + "fr-LU": "French (Luxembourg)", + "fr-MC": "French (Monaco)", + "fr-CH": "French (Switzerland)", + fy: "Frisian", + fur: "Friulian", + gd: "Gaelic (Scots)", + "gd-IE": "Gaelic (Irish)", + gl: "Galacian", + ka: "Georgian", + de: "German (Standard)", + "de-AT": "German (Austria)", + "de-DE": "German (Germany)", + "de-LI": "German (Liechtenstein)", + "de-LU": "German (Luxembourg)", + "de-CH": "German (Switzerland)", + el: "Greek", + gu: "Gujurati", + ht: "Haitian", + he: "Hebrew", + hi: "Hindi", + hu: "Hungarian", + is: "Icelandic", + id: "Indonesian", + iu: "Inuktitut", + ga: "Irish", + it: "Italian (Standard)", + "it-CH": "Italian (Switzerland)", + ja: "Japanese", + kn: "Kannada", + ks: "Kashmiri", + kk: "Kazakh", + km: "Khmer", + ky: "Kirghiz", + tlh: "Klingon", + ko: "Korean", + "ko-KP": "Korean (North Korea)", + "ko-KR": "Korean (South Korea)", + la: "Latin", + lv: "Latvian", + lt: "Lithuanian", + lb: "Luxembourgish", + mk: "North Macedonia", + ms: "Malay", + ml: "Malayalam", + mt: "Maltese", + mi: "Maori", + mr: "Marathi", + mo: "Moldavian", + nv: "Navajo", + ng: "Ndonga", + ne: "Nepali", + no: "Norwegian", + nb: "Norwegian (Bokmal)", + nn: "Norwegian (Nynorsk)", + oc: "Occitan", + or: "Oriya", + om: "Oromo", + fa: "Persian", + "fa-IR": "Persian/Iran", + pl: "Polish", + pt: "Portuguese", + "pt-BR": "Portuguese (Brazil)", + pa: "Punjabi", + "pa-IN": "Punjabi (India)", + "pa-PK": "Punjabi (Pakistan)", + qu: "Quechua", + rm: "Rhaeto-Romanic", + ro: "Romanian", + "ro-MO": "Romanian (Moldavia)", + ru: "Russian", + "ru-MO": "Russian (Moldavia)", + sz: "Sami (Lappish)", + sg: "Sango", + sa: "Sanskrit", + sc: "Sardinian", + sd: "Sindhi", + si: "Singhalese", + sr: "Serbian", + sk: "Slovak", + sl: "Slovenian", + so: "Somani", + sb: "Sorbian", + es: "Spanish", + "es-AR": "Spanish (Argentina)", + "es-BO": "Spanish (Bolivia)", + "es-CL": "Spanish (Chile)", + "es-CO": "Spanish (Colombia)", + "es-CR": "Spanish (Costa Rica)", + "es-DO": "Spanish (Dominican Republic)", + "es-EC": "Spanish (Ecuador)", + "es-SV": "Spanish (El Salvador)", + "es-GT": "Spanish (Guatemala)", + "es-HN": "Spanish (Honduras)", + "es-MX": "Spanish (Mexico)", + "es-NI": "Spanish (Nicaragua)", + "es-PA": "Spanish (Panama)", + "es-PY": "Spanish (Paraguay)", + "es-PE": "Spanish (Peru)", + "es-PR": "Spanish (Puerto Rico)", + "es-ES": "Spanish (Spain)", + "es-UY": "Spanish (Uruguay)", + "es-VE": "Spanish (Venezuela)", + sx: "Sutu", + sw: "Swahili", + sv: "Swedish", + "sv-FI": "Swedish (Finland)", + "sv-SV": "Swedish (Sweden)", + ta: "Tamil", + tt: "Tatar", + te: "Teluga", + th: "Thai", + tig: "Tigre", + ts: "Tsonga", + tn: "Tswana", + tr: "Turkish", + tk: "Turkmen", + uk: "Ukrainian", + hsb: "Upper Sorbian", + ur: "Urdu", + ve: "Venda", + vi: "Vietnamese", + vo: "Volapuk", + wa: "Walloon", + cy: "Welsh", + xh: "Xhosa", + ji: "Yiddish", + zu: "Zulu" + }; + + if (this.internal.languageSettings === undefined) { + this.internal.languageSettings = {}; + this.internal.languageSettings.isSubscribed = false; + } + + if (langCodes[langCode] !== undefined) { + this.internal.languageSettings.languageCode = langCode; + if (this.internal.languageSettings.isSubscribed === false) { + this.internal.events.subscribe("putCatalog", function() { + this.internal.write( + "/Lang (" + this.internal.languageSettings.languageCode + ")" + ); + }); + this.internal.languageSettings.isSubscribed = true; + } + } + return this; + }; +})(jsPDF.API); + +/** @license + * MIT license. + * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2014 Diego Casorran, https://github.com/diegocr + * + * 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. + * ==================================================================== + */ + +/** + * jsPDF split_text_to_size plugin + * + * @name split_text_to_size + * @module + */ +(function(API) { + /** + * Returns an array of length matching length of the 'word' string, with each + * cell occupied by the width of the char in that position. + * + * @name getCharWidthsArray + * @function + * @param {string} text + * @param {Object} options + * @returns {Array} + */ + var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) { + options = options || {}; + + var activeFont = options.font || this.internal.getFont(); + var fontSize = options.fontSize || this.internal.getFontSize(); + var charSpace = options.charSpace || this.internal.getCharSpace(); + + var widths = options.widths + ? options.widths + : activeFont.metadata.Unicode.widths; + var widthsFractionOf = widths.fof ? widths.fof : 1; + var kerning = options.kerning + ? options.kerning + : activeFont.metadata.Unicode.kerning; + var kerningFractionOf = kerning.fof ? kerning.fof : 1; + var doKerning = options.doKerning === false ? false : true; + var kerningValue = 0; + + var i; + var length = text.length; + var char_code; + var prior_char_code = 0; //for kerning + var default_char_width = widths[0] || widthsFractionOf; + var output = []; + + for (i = 0; i < length; i++) { + char_code = text.charCodeAt(i); + + if (typeof activeFont.metadata.widthOfString === "function") { + output.push( + (activeFont.metadata.widthOfGlyph( + activeFont.metadata.characterToGlyph(char_code) + ) + + charSpace * (1000 / fontSize) || 0) / 1000 + ); + } else { + if ( + doKerning && + typeof kerning[char_code] === "object" && + !isNaN(parseInt(kerning[char_code][prior_char_code], 10)) + ) { + kerningValue = + kerning[char_code][prior_char_code] / kerningFractionOf; + } else { + kerningValue = 0; + } + output.push( + (widths[char_code] || default_char_width) / widthsFractionOf + + kerningValue + ); + } + prior_char_code = char_code; + } + + return output; + }); + + /** + * Returns a widths of string in a given font, if the font size is set as 1 point. + * + * In other words, this is "proportional" value. For 1 unit of font size, the length + * of the string will be that much. + * + * Multiply by font size to get actual width in *points* + * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc. + * + * @name getStringUnitWidth + * @public + * @function + * @param {string} text + * @param {string} options + * @returns {number} result + */ + var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) { + options = options || {}; + + var fontSize = options.fontSize || this.internal.getFontSize(); + var font = options.font || this.internal.getFont(); + var charSpace = options.charSpace || this.internal.getCharSpace(); + var result = 0; + + if (API.processArabic) { + text = API.processArabic(text); + } + + if (typeof font.metadata.widthOfString === "function") { + result = + font.metadata.widthOfString(text, fontSize, charSpace) / fontSize; + } else { + result = getCharWidthsArray + .apply(this, arguments) + .reduce(function(pv, cv) { + return pv + cv; + }, 0); + } + return result; + }); + + /** + returns array of lines + */ + var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) { + var answer = []; + + // 1st, chop off the piece that can fit on the hanging line. + var i = 0, + l = word.length, + workingLen = 0; + while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) { + workingLen += widths_array[i]; + i++; + } + // this is first line. + answer.push(word.slice(0, i)); + + // 2nd. Split the rest into maxLen pieces. + var startOfLine = i; + workingLen = 0; + while (i !== l) { + if (workingLen + widths_array[i] > maxLen) { + answer.push(word.slice(startOfLine, i)); + workingLen = 0; + startOfLine = i; + } + workingLen += widths_array[i]; + i++; + } + if (startOfLine !== i) { + answer.push(word.slice(startOfLine, i)); + } + + return answer; + }; + + // Note, all sizing inputs for this function must be in "font measurement units" + // By default, for PDF, it's "point". + var splitParagraphIntoLines = function(text, maxlen, options) { + // at this time works only on Western scripts, ones with space char + // separating the words. Feel free to expand. + + if (!options) { + options = {}; + } + + var line = [], + lines = [line], + line_length = options.textIndent || 0, + separator_length = 0, + current_word_length = 0, + word, + widths_array, + words = text.split(" "), + spaceCharWidth = getCharWidthsArray.apply(this, [" ", options])[0], + i, + l, + tmp, + lineIndent; + + if (options.lineIndent === -1) { + lineIndent = words[0].length + 2; + } else { + lineIndent = options.lineIndent || 0; + } + if (lineIndent) { + var pad = Array(lineIndent).join(" "), + wrds = []; + words.map(function(wrd) { + wrd = wrd.split(/\s*\n/); + if (wrd.length > 1) { + wrds = wrds.concat( + wrd.map(function(wrd, idx) { + return (idx && wrd.length ? "\n" : "") + wrd; + }) + ); + } else { + wrds.push(wrd[0]); + } + }); + words = wrds; + lineIndent = getStringUnitWidth.apply(this, [pad, options]); + } + + for (i = 0, l = words.length; i < l; i++) { + var force = 0; + + word = words[i]; + if (lineIndent && word[0] == "\n") { + word = word.substr(1); + force = 1; + } + widths_array = getCharWidthsArray.apply(this, [word, options]); + current_word_length = widths_array.reduce(function(pv, cv) { + return pv + cv; + }, 0); + + if ( + line_length + separator_length + current_word_length > maxlen || + force + ) { + if (current_word_length > maxlen) { + // this happens when you have space-less long URLs for example. + // we just chop these to size. We do NOT insert hiphens + tmp = splitLongWord.apply(this, [ + word, + widths_array, + maxlen - (line_length + separator_length), + maxlen + ]); + // first line we add to existing line object + line.push(tmp.shift()); // it's ok to have extra space indicator there + // last line we make into new line object + line = [tmp.pop()]; + // lines in the middle we apped to lines object as whole lines + while (tmp.length) { + lines.push([tmp.shift()]); // single fragment occupies whole line + } + current_word_length = widths_array + .slice(word.length - (line[0] ? line[0].length : 0)) + .reduce(function(pv, cv) { + return pv + cv; + }, 0); + } else { + // just put it on a new line + line = [word]; + } + + // now we attach new line to lines + lines.push(line); + line_length = current_word_length + lineIndent; + separator_length = spaceCharWidth; + } else { + line.push(word); + + line_length += separator_length + current_word_length; + separator_length = spaceCharWidth; + } + } + + var postProcess; + if (lineIndent) { + postProcess = function(ln, idx) { + return (idx ? pad : "") + ln.join(" "); + }; + } else { + postProcess = function(ln) { + return ln.join(" "); + }; + } + + return lines.map(postProcess); + }; + + /** + * Splits a given string into an array of strings. Uses 'size' value + * (in measurement units declared as default for the jsPDF instance) + * and the font's "widths" and "Kerning" tables, where available, to + * determine display length of a given string for a given font. + * + * We use character's 100% of unit size (height) as width when Width + * table or other default width is not available. + * + * @name splitTextToSize + * @public + * @function + * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string. + * @param {number} size Nominal number, measured in units default to this instance of jsPDF. + * @param {Object} options Optional flags needed for chopper to do the right thing. + * @returns {Array} array Array with strings chopped to size. + */ + API.splitTextToSize = function(text, maxlen, options) { + + options = options || {}; + + var fsize = options.fontSize || this.internal.getFontSize(), + newOptions = function(options) { + var widths = { + 0: 1 + }, + kerning = {}; + + if (!options.widths || !options.kerning) { + var f = this.internal.getFont(options.fontName, options.fontStyle), + encoding = "Unicode"; + // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE + // Actual JavaScript-native String's 16bit char codes used. + // no multi-byte logic here + + if (f.metadata[encoding]) { + return { + widths: f.metadata[encoding].widths || widths, + kerning: f.metadata[encoding].kerning || kerning + }; + } else { + return { + font: f.metadata, + fontSize: this.internal.getFontSize(), + charSpace: this.internal.getCharSpace() + }; + } + } else { + return { + widths: options.widths, + kerning: options.kerning + }; + } + }.call(this, options); + + // first we split on end-of-line chars + var paragraphs; + if (Array.isArray(text)) { + paragraphs = text; + } else { + paragraphs = String(text).split(/\r?\n/); + } + + // now we convert size (max length of line) into "font size units" + // at present time, the "font size unit" is always 'point' + // 'proportional' means, "in proportion to font size" + var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize; + // at this time, fsize is always in "points" regardless of the default measurement unit of the doc. + // this may change in the future? + // until then, proportional_maxlen is likely to be in 'points' + + // If first line is to be indented (shorter or longer) than maxLen + // we indicate that by using CSS-style "text-indent" option. + // here it's in font units too (which is likely 'points') + // it can be negative (which makes the first line longer than maxLen) + newOptions.textIndent = options.textIndent + ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize + : 0; + newOptions.lineIndent = options.lineIndent; + + var i, + l, + output = []; + for (i = 0, l = paragraphs.length; i < l; i++) { + output = output.concat( + splitParagraphIntoLines.apply(this, [ + paragraphs[i], + fontUnit_maxLen, + newOptions + ]) + ); + } + + return output; + }; +})(jsPDF.API); + +/** @license + jsPDF standard_fonts_metrics plugin + * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems + * MIT license. + * 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. + * ==================================================================== + */ + +/** + * This file adds the standard font metrics to jsPDF. + * + * Font metrics data is reprocessed derivative of contents of + * "Font Metrics for PDF Core 14 Fonts" package, which exhibits the following copyright and license: + * + * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. + * + * This file and the 14 PostScript(R) AFM files it accompanies may be used, + * copied, and distributed for any purpose and without charge, with or without + * modification, provided that all copyright notices are retained; that the AFM + * files are not distributed without this file; that all modifications to this + * file or any of the AFM files are prominently noted in the modified file(s); + * and that this paragraph is not modified. Adobe Systems has no responsibility + * or obligation to support the use of the AFM files. + * + * @name standard_fonts_metrics + * @module + */ + +(function(API) { + API.__fontmetrics__ = API.__fontmetrics__ || {}; + + var decoded = "0123456789abcdef", + encoded = "klmnopqrstuvwxyz", + mappingUncompress = {}, + mappingCompress = {}; + + for (var i = 0; i < encoded.length; i++) { + mappingUncompress[encoded[i]] = decoded[i]; + mappingCompress[decoded[i]] = encoded[i]; + } + + var hex = function(value) { + return "0x" + parseInt(value, 10).toString(16); + }; + + var compress = (API.__fontmetrics__.compress = function(data) { + var vals = ["{"]; + var value, keystring, valuestring, numberprefix; + + for (var key in data) { + value = data[key]; + + if (!isNaN(parseInt(key, 10))) { + key = parseInt(key, 10); + keystring = hex(key).slice(2); + keystring = + keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)]; + } else { + keystring = "'" + key + "'"; + } + + if (typeof value == "number") { + if (value < 0) { + valuestring = hex(value).slice(3); + numberprefix = "-"; + } else { + valuestring = hex(value).slice(2); + numberprefix = ""; + } + valuestring = + numberprefix + + valuestring.slice(0, -1) + + mappingCompress[valuestring.slice(-1)]; + } else { + if (typeof value === "object") { + valuestring = compress(value); + } else { + throw new Error( + "Don't know what to do with value type " + typeof value + "." + ); + } + } + vals.push(keystring + valuestring); + } + vals.push("}"); + return vals.join(""); + }); + + /** + * Uncompresses data compressed into custom, base16-like format. + * + * @public + * @function + * @param + * @returns {Type} + */ + var uncompress = (API.__fontmetrics__.uncompress = function(data) { + if (typeof data !== "string") { + throw new Error("Invalid argument passed to uncompress."); + } + + var output = {}, + sign = 1, + stringparts, // undef. will be [] in string mode + activeobject = output, + parentchain = [], + parent_key_pair, + keyparts = "", + valueparts = "", + key, // undef. will be Truthy when Key is resolved. + datalen = data.length - 1, // stripping ending } + ch; + + for (var i = 1; i < datalen; i += 1) { + // - { } ' are special. + + ch = data[i]; + + if (ch == "'") { + if (stringparts) { + // end of string mode + key = stringparts.join(""); + stringparts = undefined; + } else { + // start of string mode + stringparts = []; + } + } else if (stringparts) { + stringparts.push(ch); + } else if (ch == "{") { + // start of object + parentchain.push([activeobject, key]); + activeobject = {}; + key = undefined; + } else if (ch == "}") { + // end of object + parent_key_pair = parentchain.pop(); + parent_key_pair[0][parent_key_pair[1]] = activeobject; + key = undefined; + activeobject = parent_key_pair[0]; + } else if (ch == "-") { + sign = -1; + } else { + // must be number + if (key === undefined) { + if (mappingUncompress.hasOwnProperty(ch)) { + keyparts += mappingUncompress[ch]; + key = parseInt(keyparts, 16) * sign; + sign = +1; + keyparts = ""; + } else { + keyparts += ch; + } + } else { + if (mappingUncompress.hasOwnProperty(ch)) { + valueparts += mappingUncompress[ch]; + activeobject[key] = parseInt(valueparts, 16) * sign; + sign = +1; + key = undefined; + valueparts = ""; + } else { + valueparts += ch; + } + } + } + } + return output; + }); + + // encoding = 'Unicode' + // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior + // Actual 16bit char codes used. + // no multi-byte logic here + + // Unicode characters to WinAnsiEncoding: + // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158} + // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts. + // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly + // as well as give strings with some (supported by these fonts) Unicode characters and + // these will be mapped to win cp1252 + // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting "Euro" glyph displayed in both cases. + + var encodingBlock = { + codePages: ["WinAnsiEncoding"], + WinAnsiEncoding: uncompress( + "{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}" + ) + }; + var encodings = { + Unicode: { + Courier: encodingBlock, + "Courier-Bold": encodingBlock, + "Courier-BoldOblique": encodingBlock, + "Courier-Oblique": encodingBlock, + Helvetica: encodingBlock, + "Helvetica-Bold": encodingBlock, + "Helvetica-BoldOblique": encodingBlock, + "Helvetica-Oblique": encodingBlock, + "Times-Roman": encodingBlock, + "Times-Bold": encodingBlock, + "Times-BoldItalic": encodingBlock, + "Times-Italic": encodingBlock + // , 'Symbol' + // , 'ZapfDingbats' + } + }; + + var fontMetrics = { + Unicode: { + // all sizing numbers are n/fontMetricsFractionOf = one font size unit + // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's + // width is 476/1000 or 47.6% of its height (regardless of font size) + // At this time this value applies to "widths" and "kerning" numbers. + + // char code 0 represents "default" (average) width - use it for chars missing in this table. + // key 'fof' represents the "fontMetricsFractionOf" value + + "Courier-Oblique": uncompress( + "{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}" + ), + "Times-BoldItalic": uncompress( + "{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}" + ), + "Helvetica-Bold": uncompress( + "{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}" + ), + Courier: uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Courier-BoldOblique": uncompress( + "{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}" + ), + "Times-Bold": uncompress( + "{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}" + ), + Symbol: uncompress( + "{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}" + ), + Helvetica: uncompress( + "{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}" + ), + "Helvetica-BoldOblique": uncompress( + "{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}" + ), + ZapfDingbats: uncompress("{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}"), + "Courier-Bold": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-Italic": uncompress( + "{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}" + ), + "Times-Roman": uncompress( + "{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}" + ), + "Helvetica-Oblique": uncompress( + "{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}" + ) + } + }; + + /* + This event handler is fired when a new jsPDF object is initialized + This event handler appends metrics data to standard fonts within + that jsPDF instance. The metrics are mapped over Unicode character + codes, NOT CIDs or other codes matching the StandardEncoding table of the + standard PDF fonts. + Future: + Also included is the encoding maping table, converting Unicode (UCS-2, UTF-16) + char codes to StandardEncoding character codes. The encoding table is to be used + somewhere around "pdfEscape" call. + */ + API.events.push([ + "addFont", + function(data) { + var font = data.font; + + var metrics = fontMetrics["Unicode"][font.postScriptName]; + if (metrics) { + font.metadata["Unicode"] = {}; + font.metadata["Unicode"].widths = metrics.widths; + font.metadata["Unicode"].kerning = metrics.kerning; + } + + var encodingBlock = encodings["Unicode"][font.postScriptName]; + if (encodingBlock) { + font.metadata["Unicode"].encoding = encodingBlock; + font.encoding = encodingBlock.codePages[0]; + } + } + ]); // end of adding event handler +})(jsPDF.API); + +/** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * @name ttfsupport + * @module + */ +(function(jsPDF) { + + var binaryStringToUint8Array = function(binary_string) { + var len = binary_string.length; + var bytes = new Uint8Array(len); + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes; + }; + + var addFont = function(font, file) { + // eslint-disable-next-line no-control-regex + if (/^\x00\x01\x00\x00/.test(file)) { + file = binaryStringToUint8Array(file); + } else { + file = binaryStringToUint8Array(atob(file)); + } + font.metadata = jsPDF.API.TTFFont.open(file); + font.metadata.Unicode = font.metadata.Unicode || { + encoding: {}, + kerning: {}, + widths: [] + }; + font.metadata.glyIdsUsed = [0]; + }; + + jsPDF.API.events.push([ + "addFont", + function(data) { + var file = undefined; + var font = data.font; + var instance = data.instance; + if (font.isStandardFont) { + return; + } + if (typeof instance !== "undefined") { + if (instance.existsFileInVFS(font.postScriptName) === false) { + file = instance.loadFile(font.postScriptName); + } else { + file = instance.getFileFromVFS(font.postScriptName); + } + if (typeof file !== "string") { + throw new Error( + "Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('" + + font.postScriptName + + "')." + ); + } + addFont(font, file); + } else { + throw new Error( + "Font does not exist in vFS, import fonts or remove declaration doc.addFont('" + + font.postScriptName + + "')." + ); + } + } + ]); // end of adding event handler +})(jsPDF); + +/** @license + * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems + * + * 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. + * ==================================================================== + */ + +/** + * jsPDF SVG plugin + * + * @name svg + * @module + */ +(function(jsPDFAPI) { + + function loadCanvg() { + return (function() { + if (globalObject["canvg"]) { + return Promise.resolve(globalObject["canvg"]); + } + + + if (typeof exports === "object" && typeof module !== "undefined") { + return new Promise(function(resolve, reject) { + try { + resolve(require("canvg")); + } catch (e) { + reject(e); + } + }); + } + if (typeof define === "function" && define.amd) { + return new Promise(function(resolve, reject) { + try { + require(["canvg"], resolve); + } catch (e) { + reject(e); + } + }); + } + return Promise.reject(new Error("Could not load canvg")); + })() + .catch(function(e) { + return Promise.reject(new Error("Could not load canvg: " + e)); + }) + .then(function(canvg) { + return canvg.default ? canvg.default : canvg; + }); + } + + /** + * Parses SVG XML and saves it as image into the PDF. + * + * Depends on canvas-element and canvg + * + * @name addSvgAsImage + * @public + * @function + * @param {string} SVG-Data as Text + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} width of SVG-Image (in units declared at inception of PDF document) + * @param {number} height of SVG-Image (in units declared at inception of PDF document) + * @param {string} alias of SVG-Image (if used multiple times) + * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW' + * @param {number} rotation of the image in degrees (0-359) + * + * @returns jsPDF jsPDF-instance + */ + jsPDFAPI.addSvgAsImage = function( + svg, + x, + y, + w, + h, + alias, + compression, + rotation + ) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.addSvgAsImage: Invalid coordinates", arguments); + throw new Error("Invalid coordinates passed to jsPDF.addSvgAsImage"); + } + + if (isNaN(w) || isNaN(h)) { + console.error("jsPDF.addSvgAsImage: Invalid measurements", arguments); + throw new Error( + "Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage" + ); + } + + var canvas = document.createElement("canvas"); + canvas.width = w; + canvas.height = h; + var ctx = canvas.getContext("2d"); + ctx.fillStyle = "#fff"; /// set white fill style + ctx.fillRect(0, 0, canvas.width, canvas.height); + + var options = { + ignoreMouse: true, + ignoreAnimation: true, + ignoreDimensions: true + }; + var doc = this; + return loadCanvg() + .then( + function(canvg) { + return canvg.fromString(ctx, svg, options); + }, + function() { + return Promise.reject(new Error("Could not load canvg.")); + } + ) + .then(function(instance) { + return instance.render(options); + }) + .then(function() { + doc.addImage( + canvas.toDataURL("image/jpeg", 1.0), + x, + y, + w, + h, + compression, + rotation + ); + }); + }; +})(jsPDF.API); + +/** + * @license + * ==================================================================== + * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br + * + * 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. + * ==================================================================== + */ + +/** + * jsPDF total_pages plugin + * @name total_pages + * @module + */ +(function(jsPDFAPI) { + /** + * @name putTotalPages + * @function + * @param {string} pageExpression Regular Expression + * @returns {jsPDF} jsPDF-instance + */ + + jsPDFAPI.putTotalPages = function(pageExpression) { + + var replaceExpression; + var totalNumberOfPages = 0; + if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) { + replaceExpression = new RegExp(pageExpression, "g"); + totalNumberOfPages = this.internal.getNumberOfPages(); + } else { + replaceExpression = new RegExp( + this.pdfEscape16(pageExpression, this.internal.getFont()), + "g" + ); + totalNumberOfPages = this.pdfEscape16( + this.internal.getNumberOfPages() + "", + this.internal.getFont() + ); + } + + for (var n = 1; n <= this.internal.getNumberOfPages(); n++) { + for (var i = 0; i < this.internal.pages[n].length; i++) { + this.internal.pages[n][i] = this.internal.pages[n][i].replace( + replaceExpression, + totalNumberOfPages + ); + } + } + + return this; + }; +})(jsPDF.API); + +/** + * @license + * jsPDF viewerPreferences Plugin + * @author Aras Abbasi (github.com/arasabbasi) + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * Adds the ability to set ViewerPreferences and by thus + * controlling the way the document is to be presented on the + * screen or in print. + * @name viewerpreferences + * @module + */ +(function(jsPDFAPI) { + /** + * Set the ViewerPreferences of the generated PDF + * + * @name viewerPreferences + * @function + * @public + * @param {Object} options Array with the ViewerPreferences
    + * Example: doc.viewerPreferences({"FitWindow":true});
    + *
    + * You can set following preferences:
    + *
    + * HideToolbar (boolean)
    + * Default value: false
    + *
    + * HideMenubar (boolean)
    + * Default value: false.
    + *
    + * HideWindowUI (boolean)
    + * Default value: false.
    + *
    + * FitWindow (boolean)
    + * Default value: false.
    + *
    + * CenterWindow (boolean)
    + * Default value: false
    + *
    + * DisplayDocTitle (boolean)
    + * Default value: false.
    + *
    + * NonFullScreenPageMode (string)
    + * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    + * Default value: UseNone
    + *
    + * Direction (string)
    + * Possible values: L2R, R2L
    + * Default value: L2R.
    + *
    + * ViewArea (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox.
    + *
    + * ViewClip (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox
    + *
    + * PrintArea (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox
    + *
    + * PrintClip (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox.
    + *
    + * PrintScaling (string)
    + * Possible values: AppDefault, None
    + * Default value: AppDefault.
    + *
    + * Duplex (string)
    + * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge + * Default value: none
    + *
    + * PickTrayByPDFSize (boolean)
    + * Default value: false
    + *
    + * PrintPageRange (Array)
    + * Example: [[1,5], [7,9]]
    + * Default value: as defined by PDF viewer application
    + *
    + * NumCopies (Number)
    + * Possible values: 1, 2, 3, 4, 5
    + * Default value: 1
    + *
    + * For more information see the PDF Reference, sixth edition on Page 577 + * @param {boolean} doReset True to reset the settings + * @function + * @returns jsPDF jsPDF-instance + * @example + * var doc = new jsPDF() + * doc.text('This is a test', 10, 10) + * doc.viewerPreferences({'FitWindow': true}, true) + * doc.save("viewerPreferences.pdf") + * + * // Example printing 10 copies, using cropbox, and hiding UI. + * doc.viewerPreferences({ + * 'HideWindowUI': true, + * 'PrintArea': 'CropBox', + * 'NumCopies': 10 + * }) + */ + jsPDFAPI.viewerPreferences = function(options, doReset) { + options = options || {}; + doReset = doReset || false; + + var configuration; + var configurationTemplate = { + HideToolbar: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + HideMenubar: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + HideWindowUI: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + FitWindow: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + CenterWindow: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + DisplayDocTitle: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.4 + }, + NonFullScreenPageMode: { + defaultValue: "UseNone", + value: "UseNone", + type: "name", + explicitSet: false, + valueSet: ["UseNone", "UseOutlines", "UseThumbs", "UseOC"], + pdfVersion: 1.3 + }, + Direction: { + defaultValue: "L2R", + value: "L2R", + type: "name", + explicitSet: false, + valueSet: ["L2R", "R2L"], + pdfVersion: 1.3 + }, + ViewArea: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + ViewClip: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintArea: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintClip: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintScaling: { + defaultValue: "AppDefault", + value: "AppDefault", + type: "name", + explicitSet: false, + valueSet: ["AppDefault", "None"], + pdfVersion: 1.6 + }, + Duplex: { + defaultValue: "", + value: "none", + type: "name", + explicitSet: false, + valueSet: [ + "Simplex", + "DuplexFlipShortEdge", + "DuplexFlipLongEdge", + "none" + ], + pdfVersion: 1.7 + }, + PickTrayByPDFSize: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.7 + }, + PrintPageRange: { + defaultValue: "", + value: "", + type: "array", + explicitSet: false, + valueSet: null, + pdfVersion: 1.7 + }, + NumCopies: { + defaultValue: 1, + value: 1, + type: "integer", + explicitSet: false, + valueSet: null, + pdfVersion: 1.7 + } + }; + + var configurationKeys = Object.keys(configurationTemplate); + + var rangeArray = []; + var i = 0; + var j = 0; + var k = 0; + var isValid; + + var method; + var value; + + function arrayContainsElement(array, element) { + var iterator; + var result = false; + + for (iterator = 0; iterator < array.length; iterator += 1) { + if (array[iterator] === element) { + result = true; + } + } + return result; + } + + if (this.internal.viewerpreferences === undefined) { + this.internal.viewerpreferences = {}; + this.internal.viewerpreferences.configuration = JSON.parse( + JSON.stringify(configurationTemplate) + ); + this.internal.viewerpreferences.isSubscribed = false; + } + configuration = this.internal.viewerpreferences.configuration; + + if (options === "reset" || doReset === true) { + var len = configurationKeys.length; + + for (k = 0; k < len; k += 1) { + configuration[configurationKeys[k]].value = + configuration[configurationKeys[k]].defaultValue; + configuration[configurationKeys[k]].explicitSet = false; + } + } + + if (typeof options === "object") { + for (method in options) { + value = options[method]; + if ( + arrayContainsElement(configurationKeys, method) && + value !== undefined + ) { + if ( + configuration[method].type === "boolean" && + typeof value === "boolean" + ) { + configuration[method].value = value; + } else if ( + configuration[method].type === "name" && + arrayContainsElement(configuration[method].valueSet, value) + ) { + configuration[method].value = value; + } else if ( + configuration[method].type === "integer" && + Number.isInteger(value) + ) { + configuration[method].value = value; + } else if (configuration[method].type === "array") { + for (i = 0; i < value.length; i += 1) { + isValid = true; + if (value[i].length === 1 && typeof value[i][0] === "number") { + rangeArray.push(String(value[i] - 1)); + } else if (value[i].length > 1) { + for (j = 0; j < value[i].length; j += 1) { + if (typeof value[i][j] !== "number") { + isValid = false; + } + } + if (isValid === true) { + rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(" ")); + } + } + } + configuration[method].value = "[" + rangeArray.join(" ") + "]"; + } else { + configuration[method].value = configuration[method].defaultValue; + } + + configuration[method].explicitSet = true; + } + } + } + + if (this.internal.viewerpreferences.isSubscribed === false) { + this.internal.events.subscribe("putCatalog", function() { + var pdfDict = []; + var vPref; + for (vPref in configuration) { + if (configuration[vPref].explicitSet === true) { + if (configuration[vPref].type === "name") { + pdfDict.push("/" + vPref + " /" + configuration[vPref].value); + } else { + pdfDict.push("/" + vPref + " " + configuration[vPref].value); + } + } + } + if (pdfDict.length !== 0) { + this.internal.write( + "/ViewerPreferences\n<<\n" + pdfDict.join("\n") + "\n>>" + ); + } + }); + this.internal.viewerpreferences.isSubscribed = true; + } + + this.internal.viewerpreferences.configuration = configuration; + return this; + }; +})(jsPDF.API); + +/** ==================================================================== + * @license + * jsPDF XMP metadata plugin + * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi + * + * 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. + * ==================================================================== + */ + +/** + * @name xmp_metadata + * @module + */ +(function(jsPDFAPI) { + + var postPutResources = function() { + var xmpmeta_beginning = ''; + var rdf_beginning = + ''; + var rdf_ending = ""; + var xmpmeta_ending = ""; + var utf8_xmpmeta_beginning = unescape( + encodeURIComponent(xmpmeta_beginning) + ); + var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning)); + var utf8_metadata = unescape( + encodeURIComponent(this.internal.__metadata__.metadata) + ); + var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending)); + var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending)); + + var total_len = + utf8_rdf_beginning.length + + utf8_metadata.length + + utf8_rdf_ending.length + + utf8_xmpmeta_beginning.length + + utf8_xmpmeta_ending.length; + + this.internal.__metadata__.metadata_object_number = this.internal.newObject(); + this.internal.write( + "<< /Type /Metadata /Subtype /XML /Length " + total_len + " >>" + ); + this.internal.write("stream"); + this.internal.write( + utf8_xmpmeta_beginning + + utf8_rdf_beginning + + utf8_metadata + + utf8_rdf_ending + + utf8_xmpmeta_ending + ); + this.internal.write("endstream"); + this.internal.write("endobj"); + }; + + var putCatalog = function() { + if (this.internal.__metadata__.metadata_object_number) { + this.internal.write( + "/Metadata " + + this.internal.__metadata__.metadata_object_number + + " 0 R" + ); + } + }; + + /** + * Adds XMP formatted metadata to PDF + * + * @name addMetadata + * @function + * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters "<", ">" or "&", those characters should be written using XML entities. + * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash. + * @returns {jsPDF} jsPDF-instance + */ + jsPDFAPI.addMetadata = function(metadata, namespaceuri) { + if (typeof this.internal.__metadata__ === "undefined") { + this.internal.__metadata__ = { + metadata: metadata, + namespaceuri: namespaceuri || "http://jspdf.default.namespaceuri/" + }; + this.internal.events.subscribe("putCatalog", putCatalog); + + this.internal.events.subscribe("postPutResources", postPutResources); + } + return this; + }; +})(jsPDF.API); + +/** + * @name utf8 + * @module + */ +(function(jsPDF) { + var jsPDFAPI = jsPDF.API; + + /***************************************************************************************************/ + /* function : pdfEscape16 */ + /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */ + /* the corresponding glyph id and width, and then adding padding to the string. */ + /***************************************************************************************************/ + var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) { + var widths = font.metadata.Unicode.widths; + var padz = ["", "0", "00", "000", "0000"]; + var ar = [""]; + for (var i = 0, l = text.length, t; i < l; ++i) { + t = font.metadata.characterToGlyph(text.charCodeAt(i)); + font.metadata.glyIdsUsed.push(t); + font.metadata.toUnicode[t] = text.charCodeAt(i); + if (widths.indexOf(t) == -1) { + widths.push(t); + widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]); + } + if (t == "0") { + //Spaces are not allowed in cmap. + return ar.join(""); + } else { + t = t.toString(16); + ar.push(padz[4 - t.length], t); + } + } + return ar.join(""); + }); + + var toUnicodeCmap = function(map) { + var code, codes, range, unicode, unicodeMap, _i, _len; + unicodeMap = + "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange"; + codes = Object.keys(map).sort(function(a, b) { + return a - b; + }); + + range = []; + for (_i = 0, _len = codes.length; _i < _len; _i++) { + code = codes[_i]; + if (range.length >= 100) { + unicodeMap += + "\n" + + range.length + + " beginbfchar\n" + + range.join("\n") + + "\nendbfchar"; + range = []; + } + + if ( + map[code] !== undefined && + map[code] !== null && + typeof map[code].toString === "function" + ) { + unicode = ("0000" + map[code].toString(16)).slice(-4); + code = ("0000" + (+code).toString(16)).slice(-4); + range.push("<" + code + "><" + unicode + ">"); + } + } + + if (range.length) { + unicodeMap += + "\n" + + range.length + + " beginbfchar\n" + + range.join("\n") + + "\nendbfchar\n"; + } + unicodeMap += + "endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; + return unicodeMap; + }; + + var identityHFunction = function(options) { + var font = options.font; + var out = options.out; + var newObject = options.newObject; + var putStream = options.putStream; + + if ( + font.metadata instanceof jsPDF.API.TTFFont && + font.encoding === "Identity-H" + ) { + //Tag with Identity-H + var widths = font.metadata.Unicode.widths; + var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1); + var pdfOutput = data; + var pdfOutput2 = ""; + for (var i = 0; i < pdfOutput.length; i++) { + pdfOutput2 += String.fromCharCode(pdfOutput[i]); + } + var fontTable = newObject(); + putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable }); + out("endobj"); + + var cmap = newObject(); + var cmapData = toUnicodeCmap(font.metadata.toUnicode); + putStream({ data: cmapData, addLength1: true, objectId: cmap }); + out("endobj"); + + var fontDescriptor = newObject(); + out("<<"); + out("/Type /FontDescriptor"); + out("/FontName /" + toPDFName(font.fontName)); + out("/FontFile2 " + fontTable + " 0 R"); + out("/FontBBox " + jsPDF.API.PDFObject.convert(font.metadata.bbox)); + out("/Flags " + font.metadata.flags); + out("/StemV " + font.metadata.stemV); + out("/ItalicAngle " + font.metadata.italicAngle); + out("/Ascent " + font.metadata.ascender); + out("/Descent " + font.metadata.decender); + out("/CapHeight " + font.metadata.capHeight); + out(">>"); + out("endobj"); + + var DescendantFont = newObject(); + out("<<"); + out("/Type /Font"); + out("/BaseFont /" + toPDFName(font.fontName)); + out("/FontDescriptor " + fontDescriptor + " 0 R"); + out("/W " + jsPDF.API.PDFObject.convert(widths)); + out("/CIDToGIDMap /Identity"); + out("/DW 1000"); + out("/Subtype /CIDFontType2"); + out("/CIDSystemInfo"); + out("<<"); + out("/Supplement 0"); + out("/Registry (Adobe)"); + out("/Ordering (" + font.encoding + ")"); + out(">>"); + out(">>"); + out("endobj"); + + font.objectNumber = newObject(); + out("<<"); + out("/Type /Font"); + out("/Subtype /Type0"); + out("/ToUnicode " + cmap + " 0 R"); + out("/BaseFont /" + toPDFName(font.fontName)); + out("/Encoding /" + font.encoding); + out("/DescendantFonts [" + DescendantFont + " 0 R]"); + out(">>"); + out("endobj"); + + font.isAlreadyPutted = true; + } + }; + + jsPDFAPI.events.push([ + "putFont", + function(args) { + identityHFunction(args); + } + ]); + + var winAnsiEncodingFunction = function(options) { + var font = options.font; + var out = options.out; + var newObject = options.newObject; + var putStream = options.putStream; + + if ( + font.metadata instanceof jsPDF.API.TTFFont && + font.encoding === "WinAnsiEncoding" + ) { + //Tag with WinAnsi encoding + var data = font.metadata.rawData; + var pdfOutput = data; + var pdfOutput2 = ""; + for (var i = 0; i < pdfOutput.length; i++) { + pdfOutput2 += String.fromCharCode(pdfOutput[i]); + } + var fontTable = newObject(); + putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable }); + out("endobj"); + + var cmap = newObject(); + var cmapData = toUnicodeCmap(font.metadata.toUnicode); + putStream({ data: cmapData, addLength1: true, objectId: cmap }); + out("endobj"); + + var fontDescriptor = newObject(); + out("<<"); + out("/Descent " + font.metadata.decender); + out("/CapHeight " + font.metadata.capHeight); + out("/StemV " + font.metadata.stemV); + out("/Type /FontDescriptor"); + out("/FontFile2 " + fontTable + " 0 R"); + out("/Flags 96"); + out("/FontBBox " + jsPDF.API.PDFObject.convert(font.metadata.bbox)); + out("/FontName /" + toPDFName(font.fontName)); + out("/ItalicAngle " + font.metadata.italicAngle); + out("/Ascent " + font.metadata.ascender); + out(">>"); + out("endobj"); + font.objectNumber = newObject(); + for (var j = 0; j < font.metadata.hmtx.widths.length; j++) { + font.metadata.hmtx.widths[j] = parseInt( + font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm) + ); //Change the width of Em units to Point units. + } + out( + "<>" + ); + out("endobj"); + font.isAlreadyPutted = true; + } + }; + + jsPDFAPI.events.push([ + "putFont", + function(args) { + winAnsiEncodingFunction(args); + } + ]); + + var utf8TextFunction = function(args) { + var text = args.text || ""; + var x = args.x; + var y = args.y; + var options = args.options || {}; + var mutex = args.mutex || {}; + + var pdfEscape = mutex.pdfEscape; + var activeFontKey = mutex.activeFontKey; + var fonts = mutex.fonts; + var key = activeFontKey; + + var str = "", + s = 0, + cmapConfirm; + var strText = ""; + var encoding = fonts[key].encoding; + + if (fonts[key].encoding !== "Identity-H") { + return { + text: text, + x: x, + y: y, + options: options, + mutex: mutex + }; + } + strText = text; + + key = activeFontKey; + if (Array.isArray(text)) { + strText = text[0]; + } + for (s = 0; s < strText.length; s += 1) { + if (fonts[key].metadata.hasOwnProperty("cmap")) { + cmapConfirm = + fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; + /* + if (Object.prototype.toString.call(text) === '[object Array]') { + var i = 0; + // for (i = 0; i < text.length; i += 1) { + if (Object.prototype.toString.call(text[s]) === '[object Array]') { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id + } else { + + } + //} + + } else { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id + }*/ + } + if (!cmapConfirm) { + if ( + strText[s].charCodeAt(0) < 256 && + fonts[key].metadata.hasOwnProperty("Unicode") + ) { + str += strText[s]; + } else { + str += ""; + } + } else { + str += strText[s]; + } + } + var result = ""; + if (parseInt(key.slice(1)) < 14 || encoding === "WinAnsiEncoding") { + //For the default 13 font + result = pdfEscape(str, key) + .split("") + .map(function(cv) { + return cv.charCodeAt(0).toString(16); + }) + .join(""); + } else if (encoding === "Identity-H") { + result = pdfEscape16(str, fonts[key]); + } + mutex.isHex = true; + + return { + text: result, + x: x, + y: y, + options: options, + mutex: mutex + }; + }; + + var utf8EscapeFunction = function(parms) { + var text = parms.text || "", + x = parms.x, + y = parms.y, + options = parms.options, + mutex = parms.mutex; + var tmpText = []; + var args = { + text: text, + x: x, + y: y, + options: options, + mutex: mutex + }; + + if (Array.isArray(text)) { + var i = 0; + for (i = 0; i < text.length; i += 1) { + if (Array.isArray(text[i])) { + if (text[i].length === 3) { + tmpText.push([ + utf8TextFunction(Object.assign({}, args, { text: text[i][0] })) + .text, + text[i][1], + text[i][2] + ]); + } else { + tmpText.push( + utf8TextFunction(Object.assign({}, args, { text: text[i] })).text + ); + } + } else { + tmpText.push( + utf8TextFunction(Object.assign({}, args, { text: text[i] })).text + ); + } + } + parms.text = tmpText; + } else { + parms.text = utf8TextFunction( + Object.assign({}, args, { text: text }) + ).text; + } + }; + + jsPDFAPI.events.push(["postProcessText", utf8EscapeFunction]); +})(jsPDF); + +/** + * @license + * jsPDF virtual FileSystem functionality + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + +/** + * Use the vFS to handle files + * + * @name vFS + * @module + */ +(function(jsPDFAPI) { + + var _initializeVFS = function() { + if (typeof this.internal.vFS === "undefined") { + this.internal.vFS = {}; + } + return true; + }; + + /** + * Check if the file exists in the vFS + * + * @name existsFileInVFS + * @function + * @param {string} Possible filename in the vFS. + * @returns {boolean} + * @example + * doc.existsFileInVFS("someFile.txt"); + */ + jsPDFAPI.existsFileInVFS = function(filename) { + _initializeVFS.call(this); + return typeof this.internal.vFS[filename] !== "undefined"; + }; + + /** + * Add a file to the vFS + * + * @name addFileToVFS + * @function + * @param {string} filename The name of the file which should be added. + * @param {string} filecontent The content of the file. + * @returns {jsPDF} + * @example + * doc.addFileToVFS("someFile.txt", "BADFACE1"); + */ + jsPDFAPI.addFileToVFS = function(filename, filecontent) { + _initializeVFS.call(this); + this.internal.vFS[filename] = filecontent; + return this; + }; + + /** + * Get the file from the vFS + * + * @name getFileFromVFS + * @function + * @param {string} The name of the file which gets requested. + * @returns {string} + * @example + * doc.getFileFromVFS("someFile.txt"); + */ + jsPDFAPI.getFileFromVFS = function(filename) { + _initializeVFS.call(this); + + if (typeof this.internal.vFS[filename] !== "undefined") { + return this.internal.vFS[filename]; + } + return null; + }; +})(jsPDF.API); + +/** + * @license + * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis) + * MIT License + */ + +(function(jsPDF) { + /** + * Table of Unicode types. + * + * Generated by: + * + * var bidi = require("./bidi/index"); + * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)). + * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)). + * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256)); + * + * for( var i = 0; i < bidi_accumulate.length; i++) { + * if(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON') + * bidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined + * } + * var bidiAccumulateStr = 'return [ "' + bidi_accumulate.toString().replace(/,/g, '", "') + '" ];'; + * require("fs").writeFile('unicode-types.js', bidiAccumulateStr); + * + * Based on: + * https://github.com/mathiasbynens/unicode-8.0.0 + */ + var bidiUnicodeTypes = [ + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "S", + "B", + "S", + "WS", + "B", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "B", + "B", + "B", + "S", + "WS", + "N", + "N", + "ET", + "ET", + "ET", + "N", + "N", + "N", + "N", + "N", + "ES", + "CS", + "ES", + "CS", + "CS", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "CS", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "N", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "B", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "CS", + "N", + "ET", + "ET", + "ET", + "ET", + "N", + "N", + "N", + "N", + "L", + "N", + "N", + "BN", + "N", + "N", + "ET", + "ET", + "EN", + "EN", + "N", + "L", + "N", + "N", + "N", + "EN", + "L", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "L", + "N", + "N", + "N", + "N", + "N", + "ET", + "N", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "R", + "NSM", + "R", + "NSM", + "NSM", + "R", + "NSM", + "NSM", + "R", + "NSM", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "N", + "N", + "N", + "N", + "N", + "R", + "R", + "R", + "R", + "R", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "N", + "N", + "AL", + "ET", + "ET", + "AL", + "CS", + "AL", + "N", + "N", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "AL", + "N", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "AN", + "ET", + "AN", + "AN", + "AL", + "AL", + "AL", + "NSM", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AN", + "N", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "AL", + "NSM", + "NSM", + "N", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "AL", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "N", + "AL", + "AL", + "NSM", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "N", + "N", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "AL", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "R", + "R", + "N", + "N", + "N", + "N", + "R", + "N", + "N", + "N", + "N", + "N", + "WS", + "WS", + "WS", + "WS", + "WS", + "WS", + "WS", + "WS", + "WS", + "WS", + "WS", + "BN", + "BN", + "BN", + "L", + "R", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "WS", + "B", + "LRE", + "RLE", + "PDF", + "LRO", + "RLO", + "CS", + "ET", + "ET", + "ET", + "ET", + "ET", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "CS", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "WS", + "BN", + "BN", + "BN", + "BN", + "BN", + "N", + "LRI", + "RLI", + "FSI", + "PDI", + "BN", + "BN", + "BN", + "BN", + "BN", + "BN", + "EN", + "L", + "N", + "N", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "ES", + "ES", + "N", + "N", + "N", + "L", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "ES", + "ES", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "ET", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "N", + "N", + "R", + "NSM", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "ES", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "N", + "R", + "R", + "R", + "R", + "R", + "N", + "R", + "N", + "R", + "R", + "N", + "R", + "R", + "N", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "R", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "NSM", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "CS", + "N", + "CS", + "N", + "N", + "CS", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "ET", + "N", + "N", + "ES", + "ES", + "N", + "N", + "N", + "N", + "N", + "ET", + "ET", + "N", + "N", + "N", + "N", + "N", + "AL", + "AL", + "AL", + "AL", + "AL", + "N", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "AL", + "N", + "N", + "BN", + "N", + "N", + "N", + "ET", + "ET", + "ET", + "N", + "N", + "N", + "N", + "N", + "ES", + "CS", + "ES", + "CS", + "CS", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "EN", + "CS", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "L", + "L", + "L", + "L", + "L", + "L", + "N", + "N", + "L", + "L", + "L", + "N", + "N", + "N", + "ET", + "ET", + "N", + "N", + "N", + "ET", + "ET", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N", + "N" + ]; + + /** + * Unicode Bidi algorithm compliant Bidi engine. + * For reference see http://unicode.org/reports/tr9/ + */ + + /** + * constructor ( options ) + * + * Initializes Bidi engine + * + * @param {Object} See 'setOptions' below for detailed description. + * options are cashed between invocation of 'doBidiReorder' method + * + * sample usage pattern of BidiEngine: + * var opt = { + * isInputVisual: true, + * isInputRtl: false, + * isOutputVisual: false, + * isOutputRtl: false, + * isSymmetricSwapping: true + * } + * var sourceToTarget = [], levels = []; + * var bidiEng = Globalize.bidiEngine(opt); + * var src = "text string to be reordered"; + * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels); + */ + + jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) { + var _UNICODE_TYPES = _bidiUnicodeTypes; + + var _STATE_TABLE_LTR = [ + [0, 3, 0, 1, 0, 0, 0], + [0, 3, 0, 1, 2, 2, 0], + [0, 3, 0, 0x11, 2, 0, 1], + [0, 3, 5, 5, 4, 1, 0], + [0, 3, 0x15, 0x15, 4, 0, 1], + [0, 3, 5, 5, 4, 2, 0] + ]; + + var _STATE_TABLE_RTL = [ + [2, 0, 1, 1, 0, 1, 0], + [2, 0, 1, 1, 0, 2, 0], + [2, 0, 2, 1, 3, 2, 0], + [2, 0, 2, 0x21, 3, 1, 1] + ]; + + var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 }; + + var _UNICODE_RANGES_MAP = { + 0: 0, + 5: 1, + 6: 2, + 7: 3, + 0x20: 4, + 0xfb: 5, + 0xfe: 6, + 0xff: 7 + }; + + var _SWAP_TABLE = [ + "\u0028", + "\u0029", + "\u0028", + "\u003C", + "\u003E", + "\u003C", + "\u005B", + "\u005D", + "\u005B", + "\u007B", + "\u007D", + "\u007B", + "\u00AB", + "\u00BB", + "\u00AB", + "\u2039", + "\u203A", + "\u2039", + "\u2045", + "\u2046", + "\u2045", + "\u207D", + "\u207E", + "\u207D", + "\u208D", + "\u208E", + "\u208D", + "\u2264", + "\u2265", + "\u2264", + "\u2329", + "\u232A", + "\u2329", + "\uFE59", + "\uFE5A", + "\uFE59", + "\uFE5B", + "\uFE5C", + "\uFE5B", + "\uFE5D", + "\uFE5E", + "\uFE5D", + "\uFE64", + "\uFE65", + "\uFE64" + ]; + + var _LTR_RANGES_REG_EXPR = new RegExp( + /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/ + ); + + var _lastArabic = false, + _hasUbatB, + _hasUbatS, + DIR_LTR = 0, + DIR_RTL = 1, + _isInVisual, + _isInRtl, + _isOutVisual, + _isOutRtl, + _isSymmetricSwapping, + _dir = DIR_LTR; + + this.__bidiEngine__ = {}; + + var _init = function(text, sourceToTargetMap) { + if (sourceToTargetMap) { + for (var i = 0; i < text.length; i++) { + sourceToTargetMap[i] = i; + } + } + if (_isInRtl === undefined) { + _isInRtl = _isContextualDirRtl(text); + } + if (_isOutRtl === undefined) { + _isOutRtl = _isContextualDirRtl(text); + } + }; + + // for reference see 3.2 in http://unicode.org/reports/tr9/ + // + var _getCharType = function(ch) { + var charCode = ch.charCodeAt(), + range = charCode >> 8, + rangeIdx = _UNICODE_RANGES_MAP[range]; + + if (rangeIdx !== undefined) { + return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)]; + } else if (range === 0xfc || range === 0xfd) { + return "AL"; + } else if (_LTR_RANGES_REG_EXPR.test(range)) { + //unlikely case + return "L"; + } else if (range === 8) { + // even less likely + return "R"; + } + return "N"; //undefined type, mark as neutral + }; + + var _isContextualDirRtl = function(text) { + for (var i = 0, charType; i < text.length; i++) { + charType = _getCharType(text.charAt(i)); + if (charType === "L") { + return false; + } else if (charType === "R") { + return true; + } + } + return false; + }; + + // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/ + // + var _resolveCharType = function(chars, types, resolvedTypes, index) { + var cType = types[index], + wType, + nType, + i, + len; + switch (cType) { + case "L": + case "R": + _lastArabic = false; + break; + case "N": + case "AN": + break; + + case "EN": + if (_lastArabic) { + cType = "AN"; + } + break; + + case "AL": + _lastArabic = true; + cType = "R"; + break; + + case "WS": + cType = "N"; + break; + + case "CS": + if ( + index < 1 || + index + 1 >= types.length || + ((wType = resolvedTypes[index - 1]) !== "EN" && wType !== "AN") || + ((nType = types[index + 1]) !== "EN" && nType !== "AN") + ) { + cType = "N"; + } else if (_lastArabic) { + nType = "AN"; + } + cType = nType === wType ? nType : "N"; + break; + + case "ES": + wType = index > 0 ? resolvedTypes[index - 1] : "B"; + cType = + wType === "EN" && + index + 1 < types.length && + types[index + 1] === "EN" + ? "EN" + : "N"; + break; + + case "ET": + if (index > 0 && resolvedTypes[index - 1] === "EN") { + cType = "EN"; + break; + } else if (_lastArabic) { + cType = "N"; + break; + } + i = index + 1; + len = types.length; + while (i < len && types[i] === "ET") { + i++; + } + if (i < len && types[i] === "EN") { + cType = "EN"; + } else { + cType = "N"; + } + break; + + case "NSM": + if (_isInVisual && !_isInRtl) { + //V->L + len = types.length; + i = index + 1; + while (i < len && types[i] === "NSM") { + i++; + } + if (i < len) { + var c = chars[index]; + var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e; + wType = types[i]; + if (rtlCandidate && (wType === "R" || wType === "AL")) { + cType = "R"; + break; + } + } + } + if (index < 1 || (wType = types[index - 1]) === "B") { + cType = "N"; + } else { + cType = resolvedTypes[index - 1]; + } + break; + + case "B": + _lastArabic = false; + _hasUbatB = true; + cType = _dir; + break; + + case "S": + _hasUbatS = true; + cType = "N"; + break; + + case "LRE": + case "RLE": + case "LRO": + case "RLO": + case "PDF": + _lastArabic = false; + break; + case "BN": + cType = "N"; + break; + } + return cType; + }; + + var _handleUbatS = function(types, levels, length) { + for (var i = 0; i < length; i++) { + if (types[i] === "S") { + levels[i] = _dir; + for (var j = i - 1; j >= 0; j--) { + if (types[j] === "WS") { + levels[j] = _dir; + } else { + break; + } + } + } + } + }; + + var _invertString = function(text, sourceToTargetMap, levels) { + var charArray = text.split(""); + if (levels) { + _computeLevels(charArray, levels, { hiLevel: _dir }); + } + charArray.reverse(); + sourceToTargetMap && sourceToTargetMap.reverse(); + return charArray.join(""); + }; + + // For reference see 3.3 in http://unicode.org/reports/tr9/ + // + var _computeLevels = function(chars, levels, params) { + var action, + condition, + i, + index, + newLevel, + prevState, + condPos = -1, + len = chars.length, + newState = 0, + resolvedTypes = [], + stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR, + types = []; + + _lastArabic = false; + _hasUbatB = false; + _hasUbatS = false; + for (i = 0; i < len; i++) { + types[i] = _getCharType(chars[i]); + } + for (index = 0; index < len; index++) { + prevState = newState; + resolvedTypes[index] = _resolveCharType( + chars, + types, + resolvedTypes, + index + ); + newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]]; + action = newState & 0xf0; + newState &= 0x0f; + levels[index] = newLevel = stateTable[newState][5]; + if (action > 0) { + if (action === 0x10) { + for (i = condPos; i < index; i++) { + levels[i] = 1; + } + condPos = -1; + } else { + condPos = -1; + } + } + condition = stateTable[newState][6]; + if (condition) { + if (condPos === -1) { + condPos = index; + } + } else { + if (condPos > -1) { + for (i = condPos; i < index; i++) { + levels[i] = newLevel; + } + condPos = -1; + } + } + if (types[index] === "B") { + levels[index] = 0; + } + params.hiLevel |= newLevel; + } + if (_hasUbatS) { + _handleUbatS(types, levels, len); + } + }; + + // for reference see 3.4 in http://unicode.org/reports/tr9/ + // + var _invertByLevel = function( + level, + charArray, + sourceToTargetMap, + levels, + params + ) { + if (params.hiLevel < level) { + return; + } + if (level === 1 && _dir === DIR_RTL && !_hasUbatB) { + charArray.reverse(); + sourceToTargetMap && sourceToTargetMap.reverse(); + return; + } + var ch, + high, + end, + low, + len = charArray.length, + start = 0; + + while (start < len) { + if (levels[start] >= level) { + end = start + 1; + while (end < len && levels[end] >= level) { + end++; + } + for (low = start, high = end - 1; low < high; low++, high--) { + ch = charArray[low]; + charArray[low] = charArray[high]; + charArray[high] = ch; + if (sourceToTargetMap) { + ch = sourceToTargetMap[low]; + sourceToTargetMap[low] = sourceToTargetMap[high]; + sourceToTargetMap[high] = ch; + } + } + start = end; + } + start++; + } + }; + + // for reference see 7 & BD16 in http://unicode.org/reports/tr9/ + // + var _symmetricSwap = function(charArray, levels, params) { + if (params.hiLevel !== 0 && _isSymmetricSwapping) { + for (var i = 0, index; i < charArray.length; i++) { + if (levels[i] === 1) { + index = _SWAP_TABLE.indexOf(charArray[i]); + if (index >= 0) { + charArray[i] = _SWAP_TABLE[index + 1]; + } + } + } + } + }; + + var _reorder = function(text, sourceToTargetMap, levels) { + var charArray = text.split(""), + params = { hiLevel: _dir }; + + if (!levels) { + levels = []; + } + _computeLevels(charArray, levels, params); + _symmetricSwap(charArray, levels, params); + _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params); + _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params); + return charArray.join(""); + }; + + // doBidiReorder( text, sourceToTargetMap, levels ) + // Performs Bidi reordering by implementing Unicode Bidi algorithm. + // Returns reordered string + // @text [String]: + // - input string to be reordered, this is input parameter + // $sourceToTargetMap [Array] (optional) + // - resultant mapping between input and output strings, this is output parameter + // $levels [Array] (optional) + // - array of calculated Bidi levels, , this is output parameter + this.__bidiEngine__.doBidiReorder = function( + text, + sourceToTargetMap, + levels + ) { + _init(text, sourceToTargetMap); + if (!_isInVisual && _isOutVisual && !_isOutRtl) { + // LLTR->VLTR, LRTL->VLTR + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) { + // VRTL->VLTR, VLTR->VRTL + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _invertString(text, sourceToTargetMap, levels); + } else if (!_isInVisual && _isOutVisual && _isOutRtl) { + // LLTR->VRTL, LRTL->VRTL + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) { + // VLTR->LLTR + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) { + // VLTR->LRTL, VRTL->LLTR + text = _invertString(text, sourceToTargetMap); + if (_isInRtl) { + //LLTR -> VLTR + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else { + //LRTL -> VRTL + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } + } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) { + // VRTL->LRTL + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) { + // LRTL->LLTR, LLTR->LRTL + var isSymmetricSwappingOrig = _isSymmetricSwapping; + if (_isInRtl) { + //LRTL->LLTR + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + _dir = DIR_LTR; + _isSymmetricSwapping = false; + text = _reorder(text, sourceToTargetMap, levels); + _isSymmetricSwapping = isSymmetricSwappingOrig; + } else { + //LLTR->LRTL + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + _dir = DIR_RTL; + _isSymmetricSwapping = false; + text = _reorder(text, sourceToTargetMap, levels); + _isSymmetricSwapping = isSymmetricSwappingOrig; + text = _invertString(text, sourceToTargetMap); + } + } + return text; + }; + + /** + * @name setOptions( options ) + * @function + * Sets options for Bidi conversion + * @param {Object}: + * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode) + * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string) + * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode) + * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string) + * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping), + */ + this.__bidiEngine__.setOptions = function(options) { + if (options) { + _isInVisual = options.isInputVisual; + _isOutVisual = options.isOutputVisual; + _isInRtl = options.isInputRtl; + _isOutRtl = options.isOutputRtl; + _isSymmetricSwapping = options.isSymmetricSwapping; + } + }; + + this.__bidiEngine__.setOptions(options); + return this.__bidiEngine__; + }; + + var _bidiUnicodeTypes = bidiUnicodeTypes; + + var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true }); + + var bidiEngineFunction = function(args) { + var text = args.text; + var x = args.x; + var y = args.y; + var options = args.options || {}; + var mutex = args.mutex || {}; + var lang = options.lang; + var tmpText = []; + + options.isInputVisual = + typeof options.isInputVisual === "boolean" ? options.isInputVisual : true; + bidiEngine.setOptions(options); + + if (Object.prototype.toString.call(text) === "[object Array]") { + var i = 0; + tmpText = []; + for (i = 0; i < text.length; i += 1) { + if (Object.prototype.toString.call(text[i]) === "[object Array]") { + tmpText.push([ + bidiEngine.doBidiReorder(text[i][0]), + text[i][1], + text[i][2] + ]); + } else { + tmpText.push([bidiEngine.doBidiReorder(text[i])]); + } + } + args.text = tmpText; + } else { + args.text = bidiEngine.doBidiReorder(text); + } + bidiEngine.setOptions({ isInputVisual: true }); + }; + + jsPDF.API.events.push(["postProcessText", bidiEngineFunction]); +})(jsPDF); + +/* eslint-disable no-control-regex */ + +jsPDF.API.TTFFont = (function() { + /************************************************************************/ + /* function : open */ + /* comment : Decode the encoded ttf content and create a TTFFont object. */ + /************************************************************************/ + TTFFont.open = function(file) { + return new TTFFont(file); + }; + /***************************************************************/ + /* function : TTFFont gernerator */ + /* comment : Decode TTF contents are parsed, Data, */ + /* Subset object is created, and registerTTF function is called.*/ + /***************************************************************/ + function TTFFont(rawData) { + var data; + this.rawData = rawData; + data = this.contents = new Data(rawData); + this.contents.pos = 4; + if (data.readString(4) === "ttcf") { + throw new Error("TTCF not supported."); + } else { + data.pos = 0; + this.parse(); + this.subset = new Subset(this); + this.registerTTF(); + } + } + /********************************************************/ + /* function : parse */ + /* comment : TTF Parses the file contents by each table.*/ + /********************************************************/ + TTFFont.prototype.parse = function() { + this.directory = new Directory(this.contents); + this.head = new HeadTable(this); + this.name = new NameTable(this); + this.cmap = new CmapTable(this); + this.toUnicode = {}; + this.hhea = new HheaTable(this); + this.maxp = new MaxpTable(this); + this.hmtx = new HmtxTable(this); + this.post = new PostTable(this); + this.os2 = new OS2Table(this); + this.loca = new LocaTable(this); + this.glyf = new GlyfTable(this); + this.ascender = + (this.os2.exists && this.os2.ascender) || this.hhea.ascender; + this.decender = + (this.os2.exists && this.os2.decender) || this.hhea.decender; + this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap; + return (this.bbox = [ + this.head.xMin, + this.head.yMin, + this.head.xMax, + this.head.yMax + ]); + }; + /***************************************************************/ + /* function : registerTTF */ + /* comment : Get the value to assign pdf font descriptors. */ + /***************************************************************/ + TTFFont.prototype.registerTTF = function() { + var e, hi, low, raw, _ref; + this.scaleFactor = 1000.0 / this.head.unitsPerEm; + this.bbox = function() { + var _i, _len, _ref, _results; + _ref = this.bbox; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + e = _ref[_i]; + _results.push(Math.round(e * this.scaleFactor)); + } + return _results; + }.call(this); + this.stemV = 0; + if (this.post.exists) { + raw = this.post.italic_angle; + hi = raw >> 16; + low = raw & 0xff; + if ((hi & 0x8000) !== 0) { + hi = -((hi ^ 0xffff) + 1); + } + this.italicAngle = +("" + hi + "." + low); + } else { + this.italicAngle = 0; + } + this.ascender = Math.round(this.ascender * this.scaleFactor); + this.decender = Math.round(this.decender * this.scaleFactor); + this.lineGap = Math.round(this.lineGap * this.scaleFactor); + this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender; + this.xHeight = (this.os2.exists && this.os2.xHeight) || 0; + this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8; + this.isSerif = + (_ref = this.familyClass) === 1 || + _ref === 2 || + _ref === 3 || + _ref === 4 || + _ref === 5 || + _ref === 7; + this.isScript = this.familyClass === 10; + this.flags = 0; + if (this.post.isFixedPitch) { + this.flags |= 1 << 0; + } + if (this.isSerif) { + this.flags |= 1 << 1; + } + if (this.isScript) { + this.flags |= 1 << 3; + } + if (this.italicAngle !== 0) { + this.flags |= 1 << 6; + } + this.flags |= 1 << 5; + if (!this.cmap.unicode) { + throw new Error("No unicode cmap for font"); + } + }; + TTFFont.prototype.characterToGlyph = function(character) { + var _ref; + return ( + ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) || + 0 + ); + }; + TTFFont.prototype.widthOfGlyph = function(glyph) { + var scale; + scale = 1000.0 / this.head.unitsPerEm; + return this.hmtx.forGlyph(glyph).advance * scale; + }; + TTFFont.prototype.widthOfString = function(string, size, charSpace) { + var charCode, i, scale, width, _ref; + string = "" + string; + width = 0; + for ( + i = 0, _ref = string.length; + 0 <= _ref ? i < _ref : i > _ref; + i = 0 <= _ref ? ++i : --i + ) { + charCode = string.charCodeAt(i); + width += + this.widthOfGlyph(this.characterToGlyph(charCode)) + + charSpace * (1000 / size) || 0; + } + scale = size / 1000; + return width * scale; + }; + TTFFont.prototype.lineHeight = function(size, includeGap) { + var gap; + if (includeGap == null) { + includeGap = false; + } + gap = includeGap ? this.lineGap : 0; + return ((this.ascender + gap - this.decender) / 1000) * size; + }; + return TTFFont; +})(); + +/************************************************************************************************/ +/* function : Data */ +/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/ +/************************************************************************************************/ +var Data = (function() { + function Data(data) { + this.data = data != null ? data : []; + this.pos = 0; + this.length = this.data.length; + } + Data.prototype.readByte = function() { + return this.data[this.pos++]; + }; + Data.prototype.writeByte = function(byte) { + return (this.data[this.pos++] = byte); + }; + Data.prototype.readUInt32 = function() { + var b1, b2, b3, b4; + b1 = this.readByte() * 0x1000000; + b2 = this.readByte() << 16; + b3 = this.readByte() << 8; + b4 = this.readByte(); + return b1 + b2 + b3 + b4; + }; + Data.prototype.writeUInt32 = function(val) { + this.writeByte((val >>> 24) & 0xff); + this.writeByte((val >> 16) & 0xff); + this.writeByte((val >> 8) & 0xff); + return this.writeByte(val & 0xff); + }; + Data.prototype.readInt32 = function() { + var int; + int = this.readUInt32(); + if (int >= 0x80000000) { + return int - 0x100000000; + } else { + return int; + } + }; + Data.prototype.writeInt32 = function(val) { + if (val < 0) { + val += 0x100000000; + } + return this.writeUInt32(val); + }; + Data.prototype.readUInt16 = function() { + var b1, b2; + b1 = this.readByte() << 8; + b2 = this.readByte(); + return b1 | b2; + }; + Data.prototype.writeUInt16 = function(val) { + this.writeByte((val >> 8) & 0xff); + return this.writeByte(val & 0xff); + }; + Data.prototype.readInt16 = function() { + var int; + int = this.readUInt16(); + if (int >= 0x8000) { + return int - 0x10000; + } else { + return int; + } + }; + Data.prototype.writeInt16 = function(val) { + if (val < 0) { + val += 0x10000; + } + return this.writeUInt16(val); + }; + Data.prototype.readString = function(length) { + var i, ret; + ret = []; + for ( + i = 0; + 0 <= length ? i < length : i > length; + i = 0 <= length ? ++i : --i + ) { + ret[i] = String.fromCharCode(this.readByte()); + } + return ret.join(""); + }; + Data.prototype.writeString = function(val) { + var i, _ref, _results; + _results = []; + for ( + i = 0, _ref = val.length; + 0 <= _ref ? i < _ref : i > _ref; + i = 0 <= _ref ? ++i : --i + ) { + _results.push(this.writeByte(val.charCodeAt(i))); + } + return _results; + }; + /*Data.prototype.stringAt = function (pos, length) { + this.pos = pos; + return this.readString(length); + };*/ + Data.prototype.readShort = function() { + return this.readInt16(); + }; + Data.prototype.writeShort = function(val) { + return this.writeInt16(val); + }; + Data.prototype.readLongLong = function() { + var b1, b2, b3, b4, b5, b6, b7, b8; + b1 = this.readByte(); + b2 = this.readByte(); + b3 = this.readByte(); + b4 = this.readByte(); + b5 = this.readByte(); + b6 = this.readByte(); + b7 = this.readByte(); + b8 = this.readByte(); + if (b1 & 0x80) { + return ( + ((b1 ^ 0xff) * 0x100000000000000 + + (b2 ^ 0xff) * 0x1000000000000 + + (b3 ^ 0xff) * 0x10000000000 + + (b4 ^ 0xff) * 0x100000000 + + (b5 ^ 0xff) * 0x1000000 + + (b6 ^ 0xff) * 0x10000 + + (b7 ^ 0xff) * 0x100 + + (b8 ^ 0xff) + + 1) * + -1 + ); + } + return ( + b1 * 0x100000000000000 + + b2 * 0x1000000000000 + + b3 * 0x10000000000 + + b4 * 0x100000000 + + b5 * 0x1000000 + + b6 * 0x10000 + + b7 * 0x100 + + b8 + ); + }; + Data.prototype.writeLongLong = function(val) { + var high, low; + high = Math.floor(val / 0x100000000); + low = val & 0xffffffff; + this.writeByte((high >> 24) & 0xff); + this.writeByte((high >> 16) & 0xff); + this.writeByte((high >> 8) & 0xff); + this.writeByte(high & 0xff); + this.writeByte((low >> 24) & 0xff); + this.writeByte((low >> 16) & 0xff); + this.writeByte((low >> 8) & 0xff); + return this.writeByte(low & 0xff); + }; + Data.prototype.readInt = function() { + return this.readInt32(); + }; + Data.prototype.writeInt = function(val) { + return this.writeInt32(val); + }; + /*Data.prototype.slice = function (start, end) { + return this.data.slice(start, end); + };*/ + Data.prototype.read = function(bytes) { + var buf, i; + buf = []; + for ( + i = 0; + 0 <= bytes ? i < bytes : i > bytes; + i = 0 <= bytes ? ++i : --i + ) { + buf.push(this.readByte()); + } + return buf; + }; + Data.prototype.write = function(bytes) { + var byte, i, _len, _results; + _results = []; + for (i = 0, _len = bytes.length; i < _len; i++) { + byte = bytes[i]; + _results.push(this.writeByte(byte)); + } + return _results; + }; + return Data; +})(); + +var Directory = (function() { + var checksum; + + /*****************************************************************************************************/ + /* function : Directory generator */ + /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/ + /*****************************************************************************************************/ + function Directory(data) { + var entry, i, _ref; + this.scalarType = data.readInt(); + this.tableCount = data.readShort(); + this.searchRange = data.readShort(); + this.entrySelector = data.readShort(); + this.rangeShift = data.readShort(); + this.tables = {}; + for ( + i = 0, _ref = this.tableCount; + 0 <= _ref ? i < _ref : i > _ref; + i = 0 <= _ref ? ++i : --i + ) { + entry = { + tag: data.readString(4), + checksum: data.readInt(), + offset: data.readInt(), + length: data.readInt() + }; + this.tables[entry.tag] = entry; + } + } + /********************************************************************************************************/ + /* function : encode */ + /* comment : It encodes and stores the font table object and information used for the directory object. */ + /********************************************************************************************************/ + Directory.prototype.encode = function(tables) { + var adjustment, + directory, + directoryLength, + entrySelector, + headOffset, + log2, + offset, + rangeShift, + searchRange, + sum, + table, + tableCount, + tableData, + tag; + tableCount = Object.keys(tables).length; + log2 = Math.log(2); + searchRange = Math.floor(Math.log(tableCount) / log2) * 16; + entrySelector = Math.floor(searchRange / log2); + rangeShift = tableCount * 16 - searchRange; + directory = new Data(); + directory.writeInt(this.scalarType); + directory.writeShort(tableCount); + directory.writeShort(searchRange); + directory.writeShort(entrySelector); + directory.writeShort(rangeShift); + directoryLength = tableCount * 16; + offset = directory.pos + directoryLength; + headOffset = null; + tableData = []; + for (tag in tables) { + table = tables[tag]; + directory.writeString(tag); + directory.writeInt(checksum(table)); + directory.writeInt(offset); + directory.writeInt(table.length); + tableData = tableData.concat(table); + if (tag === "head") { + headOffset = offset; + } + offset += table.length; + while (offset % 4) { + tableData.push(0); + offset++; + } + } + directory.write(tableData); + sum = checksum(directory.data); + adjustment = 0xb1b0afba - sum; + directory.pos = headOffset + 8; + directory.writeUInt32(adjustment); + return directory.data; + }; + /***************************************************************/ + /* function : checksum */ + /* comment : Duplicate the table for the tag. */ + /***************************************************************/ + checksum = function(data) { + var i, sum, tmp, _ref; + data = __slice.call(data); + while (data.length % 4) { + data.push(0); + } + tmp = new Data(data); + sum = 0; + for (i = 0, _ref = data.length; i < _ref; i = i += 4) { + sum += tmp.readUInt32(); + } + return sum & 0xffffffff; + }; + return Directory; +})(); + +var Table, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { + for (var key in parent) { + if (__hasProp.call(parent, key)) child[key] = parent[key]; + } + + function ctor() { + this.constructor = child; + } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + child.__super__ = parent.prototype; + return child; + }; + +/***************************************************************/ +/* function : Table */ +/* comment : Save info for each table, and parse the table. */ +/***************************************************************/ +Table = (function() { + function Table(file) { + var info; + this.file = file; + info = this.file.directory.tables[this.tag]; + this.exists = !!info; + if (info) { + (this.offset = info.offset), (this.length = info.length); + this.parse(this.file.contents); + } + } + Table.prototype.parse = function() {}; + Table.prototype.encode = function() {}; + Table.prototype.raw = function() { + if (!this.exists) { + return null; + } + this.file.contents.pos = this.offset; + return this.file.contents.read(this.length); + }; + return Table; +})(); + +var HeadTable = (function(_super) { + __extends(HeadTable, _super); + + function HeadTable() { + return HeadTable.__super__.constructor.apply(this, arguments); + } + HeadTable.prototype.tag = "head"; + HeadTable.prototype.parse = function(data) { + data.pos = this.offset; + this.version = data.readInt(); + this.revision = data.readInt(); + this.checkSumAdjustment = data.readInt(); + this.magicNumber = data.readInt(); + this.flags = data.readShort(); + this.unitsPerEm = data.readShort(); + this.created = data.readLongLong(); + this.modified = data.readLongLong(); + this.xMin = data.readShort(); + this.yMin = data.readShort(); + this.xMax = data.readShort(); + this.yMax = data.readShort(); + this.macStyle = data.readShort(); + this.lowestRecPPEM = data.readShort(); + this.fontDirectionHint = data.readShort(); + this.indexToLocFormat = data.readShort(); + return (this.glyphDataFormat = data.readShort()); + }; + HeadTable.prototype.encode = function(indexToLocFormat) { + var table; + table = new Data(); + table.writeInt(this.version); + table.writeInt(this.revision); + table.writeInt(this.checkSumAdjustment); + table.writeInt(this.magicNumber); + table.writeShort(this.flags); + table.writeShort(this.unitsPerEm); + table.writeLongLong(this.created); + table.writeLongLong(this.modified); + table.writeShort(this.xMin); + table.writeShort(this.yMin); + table.writeShort(this.xMax); + table.writeShort(this.yMax); + table.writeShort(this.macStyle); + table.writeShort(this.lowestRecPPEM); + table.writeShort(this.fontDirectionHint); + table.writeShort(indexToLocFormat); + table.writeShort(this.glyphDataFormat); + return table.data; + }; + return HeadTable; +})(Table); + +/************************************************************************************/ +/* function : CmapEntry */ +/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/ +/************************************************************************************/ +var CmapEntry = (function() { + function CmapEntry(data, offset) { + var code, + count, + endCode, + glyphId, + glyphIds, + i, + idDelta, + idRangeOffset, + index, + saveOffset, + segCount, + segCountX2, + start, + startCode, + tail, + _j, + _k, + _len; + this.platformID = data.readUInt16(); + this.encodingID = data.readShort(); + this.offset = offset + data.readInt(); + saveOffset = data.pos; + data.pos = this.offset; + this.format = data.readUInt16(); + this.length = data.readUInt16(); + this.language = data.readUInt16(); + this.isUnicode = + (this.platformID === 3 && this.encodingID === 1 && this.format === 4) || + (this.platformID === 0 && this.format === 4); + this.codeMap = {}; + switch (this.format) { + case 0: + for (i = 0; i < 256; ++i) { + this.codeMap[i] = data.readByte(); + } + break; + case 4: + segCountX2 = data.readUInt16(); + segCount = segCountX2 / 2; + data.pos += 6; + endCode = (function() { + var _j, _results; + _results = []; + for ( + i = _j = 0; + 0 <= segCount ? _j < segCount : _j > segCount; + i = 0 <= segCount ? ++_j : --_j + ) { + _results.push(data.readUInt16()); + } + return _results; + })(); + data.pos += 2; + startCode = (function() { + var _j, _results; + _results = []; + for ( + i = _j = 0; + 0 <= segCount ? _j < segCount : _j > segCount; + i = 0 <= segCount ? ++_j : --_j + ) { + _results.push(data.readUInt16()); + } + return _results; + })(); + idDelta = (function() { + var _j, _results; + _results = []; + for ( + i = _j = 0; + 0 <= segCount ? _j < segCount : _j > segCount; + i = 0 <= segCount ? ++_j : --_j + ) { + _results.push(data.readUInt16()); + } + return _results; + })(); + idRangeOffset = (function() { + var _j, _results; + _results = []; + for ( + i = _j = 0; + 0 <= segCount ? _j < segCount : _j > segCount; + i = 0 <= segCount ? ++_j : --_j + ) { + _results.push(data.readUInt16()); + } + return _results; + })(); + count = (this.length - data.pos + this.offset) / 2; + glyphIds = (function() { + var _j, _results; + _results = []; + for ( + i = _j = 0; + 0 <= count ? _j < count : _j > count; + i = 0 <= count ? ++_j : --_j + ) { + _results.push(data.readUInt16()); + } + return _results; + })(); + for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) { + tail = endCode[i]; + start = startCode[i]; + for ( + code = _k = start; + start <= tail ? _k <= tail : _k >= tail; + code = start <= tail ? ++_k : --_k + ) { + if (idRangeOffset[i] === 0) { + glyphId = code + idDelta[i]; + } else { + index = idRangeOffset[i] / 2 + (code - start) - (segCount - i); + glyphId = glyphIds[index] || 0; + if (glyphId !== 0) { + glyphId += idDelta[i]; + } + } + this.codeMap[code] = glyphId & 0xffff; + } + } + } + data.pos = saveOffset; + } + CmapEntry.encode = function(charmap, encoding) { + var charMap, + code, + codeMap, + codes, + delta, + deltas, + diff, + endCode, + endCodes, + entrySelector, + glyphIDs, + i, + id, + indexes, + last, + map, + nextID, + offset, + old, + rangeOffsets, + rangeShift, + searchRange, + segCount, + segCountX2, + startCode, + startCodes, + startGlyph, + subtable, + _i, + _j, + _k, + _l, + _len, + _len1, + _len2, + _len3, + _len4, + _len5, + _len6, + _len7, + _m, + _n, + _name, + _o, + _p, + _q; + subtable = new Data(); + codes = Object.keys(charmap).sort(function(a, b) { + return a - b; + }); + switch (encoding) { + case "macroman": + id = 0; + indexes = (function() { + var _results = []; + for (i = 0; i < 256; ++i) { + _results.push(0); + } + return _results; + })(); + map = { + 0: 0 + }; + codeMap = {}; + for (_i = 0, _len = codes.length; _i < _len; _i++) { + code = codes[_i]; + if (map[(_name = charmap[code])] == null) { + map[_name] = ++id; + } + codeMap[code] = { + old: charmap[code], + new: map[charmap[code]] + }; + indexes[code] = map[charmap[code]]; + } + subtable.writeUInt16(1); + subtable.writeUInt16(0); + subtable.writeUInt32(12); + subtable.writeUInt16(0); + subtable.writeUInt16(262); + subtable.writeUInt16(0); + subtable.write(indexes); + return { + charMap: codeMap, + subtable: subtable.data, + maxGlyphID: id + 1 + }; + case "unicode": + startCodes = []; + endCodes = []; + nextID = 0; + map = {}; + charMap = {}; + last = diff = null; + for (_j = 0, _len1 = codes.length; _j < _len1; _j++) { + code = codes[_j]; + old = charmap[code]; + if (map[old] == null) { + map[old] = ++nextID; + } + charMap[code] = { + old: old, + new: map[old] + }; + delta = map[old] - code; + if (last == null || delta !== diff) { + if (last) { + endCodes.push(last); + } + startCodes.push(code); + diff = delta; + } + last = code; + } + if (last) { + endCodes.push(last); + } + endCodes.push(0xffff); + startCodes.push(0xffff); + segCount = startCodes.length; + segCountX2 = segCount * 2; + searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2); + entrySelector = Math.log(searchRange / 2) / Math.LN2; + rangeShift = 2 * segCount - searchRange; + deltas = []; + rangeOffsets = []; + glyphIDs = []; + for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) { + startCode = startCodes[i]; + endCode = endCodes[i]; + if (startCode === 0xffff) { + deltas.push(0); + rangeOffsets.push(0); + break; + } + startGlyph = charMap[startCode]["new"]; + if (startCode - startGlyph >= 0x8000) { + deltas.push(0); + rangeOffsets.push(2 * (glyphIDs.length + segCount - i)); + for ( + code = _l = startCode; + startCode <= endCode ? _l <= endCode : _l >= endCode; + code = startCode <= endCode ? ++_l : --_l + ) { + glyphIDs.push(charMap[code]["new"]); + } + } else { + deltas.push(startGlyph - startCode); + rangeOffsets.push(0); + } + } + subtable.writeUInt16(3); + subtable.writeUInt16(1); + subtable.writeUInt32(12); + subtable.writeUInt16(4); + subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2); + subtable.writeUInt16(0); + subtable.writeUInt16(segCountX2); + subtable.writeUInt16(searchRange); + subtable.writeUInt16(entrySelector); + subtable.writeUInt16(rangeShift); + for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) { + code = endCodes[_m]; + subtable.writeUInt16(code); + } + subtable.writeUInt16(0); + for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) { + code = startCodes[_n]; + subtable.writeUInt16(code); + } + for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) { + delta = deltas[_o]; + subtable.writeUInt16(delta); + } + for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) { + offset = rangeOffsets[_p]; + subtable.writeUInt16(offset); + } + for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) { + id = glyphIDs[_q]; + subtable.writeUInt16(id); + } + return { + charMap: charMap, + subtable: subtable.data, + maxGlyphID: nextID + 1 + }; + } + }; + return CmapEntry; +})(); + +var CmapTable = (function(_super) { + __extends(CmapTable, _super); + + function CmapTable() { + return CmapTable.__super__.constructor.apply(this, arguments); + } + CmapTable.prototype.tag = "cmap"; + CmapTable.prototype.parse = function(data) { + var entry, i, tableCount; + data.pos = this.offset; + this.version = data.readUInt16(); + tableCount = data.readUInt16(); + this.tables = []; + this.unicode = null; + for ( + i = 0; + 0 <= tableCount ? i < tableCount : i > tableCount; + i = 0 <= tableCount ? ++i : --i + ) { + entry = new CmapEntry(data, this.offset); + this.tables.push(entry); + if (entry.isUnicode) { + if (this.unicode == null) { + this.unicode = entry; + } + } + } + return true; + }; + /*************************************************************************/ + /* function : encode */ + /* comment : Encode the cmap table corresponding to the input character. */ + /*************************************************************************/ + CmapTable.encode = function(charmap, encoding) { + var result, table; + if (encoding == null) { + encoding = "macroman"; + } + result = CmapEntry.encode(charmap, encoding); + table = new Data(); + table.writeUInt16(0); + table.writeUInt16(1); + result.table = table.data.concat(result.subtable); + return result; + }; + return CmapTable; +})(Table); + +var HheaTable = (function(_super) { + __extends(HheaTable, _super); + + function HheaTable() { + return HheaTable.__super__.constructor.apply(this, arguments); + } + HheaTable.prototype.tag = "hhea"; + HheaTable.prototype.parse = function(data) { + data.pos = this.offset; + this.version = data.readInt(); + this.ascender = data.readShort(); + this.decender = data.readShort(); + this.lineGap = data.readShort(); + this.advanceWidthMax = data.readShort(); + this.minLeftSideBearing = data.readShort(); + this.minRightSideBearing = data.readShort(); + this.xMaxExtent = data.readShort(); + this.caretSlopeRise = data.readShort(); + this.caretSlopeRun = data.readShort(); + this.caretOffset = data.readShort(); + data.pos += 4 * 2; + this.metricDataFormat = data.readShort(); + return (this.numberOfMetrics = data.readUInt16()); + }; + /*HheaTable.prototype.encode = function (ids) { + var i, table, _i, _ref; + table = new Data; + table.writeInt(this.version); + table.writeShort(this.ascender); + table.writeShort(this.decender); + table.writeShort(this.lineGap); + table.writeShort(this.advanceWidthMax); + table.writeShort(this.minLeftSideBearing); + table.writeShort(this.minRightSideBearing); + table.writeShort(this.xMaxExtent); + table.writeShort(this.caretSlopeRise); + table.writeShort(this.caretSlopeRun); + table.writeShort(this.caretOffset); + for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + table.writeByte(0); + } + table.writeShort(this.metricDataFormat); + table.writeUInt16(ids.length); + return table.data; + };*/ + return HheaTable; +})(Table); + +var OS2Table = (function(_super) { + __extends(OS2Table, _super); + + function OS2Table() { + return OS2Table.__super__.constructor.apply(this, arguments); + } + OS2Table.prototype.tag = "OS/2"; + OS2Table.prototype.parse = function(data) { + data.pos = this.offset; + this.version = data.readUInt16(); + this.averageCharWidth = data.readShort(); + this.weightClass = data.readUInt16(); + this.widthClass = data.readUInt16(); + this.type = data.readShort(); + this.ySubscriptXSize = data.readShort(); + this.ySubscriptYSize = data.readShort(); + this.ySubscriptXOffset = data.readShort(); + this.ySubscriptYOffset = data.readShort(); + this.ySuperscriptXSize = data.readShort(); + this.ySuperscriptYSize = data.readShort(); + this.ySuperscriptXOffset = data.readShort(); + this.ySuperscriptYOffset = data.readShort(); + this.yStrikeoutSize = data.readShort(); + this.yStrikeoutPosition = data.readShort(); + this.familyClass = data.readShort(); + this.panose = (function() { + var i, _results; + _results = []; + for (i = 0; i < 10; ++i) { + _results.push(data.readByte()); + } + return _results; + })(); + this.charRange = (function() { + var i, _results; + _results = []; + for (i = 0; i < 4; ++i) { + _results.push(data.readInt()); + } + return _results; + })(); + this.vendorID = data.readString(4); + this.selection = data.readShort(); + this.firstCharIndex = data.readShort(); + this.lastCharIndex = data.readShort(); + if (this.version > 0) { + this.ascent = data.readShort(); + this.descent = data.readShort(); + this.lineGap = data.readShort(); + this.winAscent = data.readShort(); + this.winDescent = data.readShort(); + this.codePageRange = (function() { + var i, _results; + _results = []; + for (i = 0; i < 2; i = ++i) { + _results.push(data.readInt()); + } + return _results; + })(); + if (this.version > 1) { + this.xHeight = data.readShort(); + this.capHeight = data.readShort(); + this.defaultChar = data.readShort(); + this.breakChar = data.readShort(); + return (this.maxContext = data.readShort()); + } + } + }; + /*OS2Table.prototype.encode = function () { + return this.raw(); + };*/ + return OS2Table; +})(Table); + +var PostTable = (function(_super) { + __extends(PostTable, _super); + + function PostTable() { + return PostTable.__super__.constructor.apply(this, arguments); + } + PostTable.prototype.tag = "post"; + PostTable.prototype.parse = function(data) { + var length, numberOfGlyphs, _results; + data.pos = this.offset; + this.format = data.readInt(); + this.italicAngle = data.readInt(); + this.underlinePosition = data.readShort(); + this.underlineThickness = data.readShort(); + this.isFixedPitch = data.readInt(); + this.minMemType42 = data.readInt(); + this.maxMemType42 = data.readInt(); + this.minMemType1 = data.readInt(); + this.maxMemType1 = data.readInt(); + switch (this.format) { + case 0x00010000: + break; + case 0x00020000: + numberOfGlyphs = data.readUInt16(); + this.glyphNameIndex = []; + var i; + for ( + i = 0; + 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs; + i = 0 <= numberOfGlyphs ? ++i : --i + ) { + this.glyphNameIndex.push(data.readUInt16()); + } + this.names = []; + _results = []; + while (data.pos < this.offset + this.length) { + length = data.readByte(); + _results.push(this.names.push(data.readString(length))); + } + return _results; + case 0x00025000: + numberOfGlyphs = data.readUInt16(); + return (this.offsets = data.read(numberOfGlyphs)); + case 0x00030000: + break; + case 0x00040000: + return (this.map = function() { + var _j, _ref, _results1; + _results1 = []; + for ( + i = _j = 0, _ref = this.file.maxp.numGlyphs; + 0 <= _ref ? _j < _ref : _j > _ref; + i = 0 <= _ref ? ++_j : --_j + ) { + _results1.push(data.readUInt32()); + } + return _results1; + }.call(this)); + } + }; + return PostTable; +})(Table); + +/*********************************************************************************************************/ +/* function : NameEntry */ +/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/ +/*********************************************************************************************************/ +var NameEntry = (function() { + function NameEntry(raw, entry) { + this.raw = raw; + this.length = raw.length; + this.platformID = entry.platformID; + this.encodingID = entry.encodingID; + this.languageID = entry.languageID; + } + return NameEntry; +})(); + +var NameTable = (function(_super) { + __extends(NameTable, _super); + + function NameTable() { + return NameTable.__super__.constructor.apply(this, arguments); + } + NameTable.prototype.tag = "name"; + NameTable.prototype.parse = function(data) { + var count, + entries, + entry, + i, + name, + stringOffset, + strings, + text, + _j, + _len, + _name; + data.pos = this.offset; + data.readShort(); //format + count = data.readShort(); + stringOffset = data.readShort(); + entries = []; + for ( + i = 0; + 0 <= count ? i < count : i > count; + i = 0 <= count ? ++i : --i + ) { + entries.push({ + platformID: data.readShort(), + encodingID: data.readShort(), + languageID: data.readShort(), + nameID: data.readShort(), + length: data.readShort(), + offset: this.offset + stringOffset + data.readShort() + }); + } + strings = {}; + for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) { + entry = entries[i]; + data.pos = entry.offset; + text = data.readString(entry.length); + name = new NameEntry(text, entry); + if (strings[(_name = entry.nameID)] == null) { + strings[_name] = []; + } + strings[entry.nameID].push(name); + } + this.strings = strings; + this.copyright = strings[0]; + this.fontFamily = strings[1]; + this.fontSubfamily = strings[2]; + this.uniqueSubfamily = strings[3]; + this.fontName = strings[4]; + this.version = strings[5]; + try { + this.postscriptName = strings[6][0].raw.replace( + /[\x00-\x19\x80-\xff]/g, + "" + ); + } catch (e) { + this.postscriptName = strings[4][0].raw.replace( + /[\x00-\x19\x80-\xff]/g, + "" + ); + } + this.trademark = strings[7]; + this.manufacturer = strings[8]; + this.designer = strings[9]; + this.description = strings[10]; + this.vendorUrl = strings[11]; + this.designerUrl = strings[12]; + this.license = strings[13]; + this.licenseUrl = strings[14]; + this.preferredFamily = strings[15]; + this.preferredSubfamily = strings[17]; + this.compatibleFull = strings[18]; + return (this.sampleText = strings[19]); + }; + /*NameTable.prototype.encode = function () { + var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref; + strings = {}; + _ref = this.strings; + for (id in _ref) { + val = _ref[id]; + strings[id] = val; + } + postscriptName = new NameEntry("" + subsetTag + "+" + this.postscriptName, { + platformID: 1 + , encodingID: 0 + , languageID: 0 + }); + strings[6] = [postscriptName]; + subsetTag = successorOf(subsetTag); + strCount = 0; + for (id in strings) { + list = strings[id]; + if (list != null) { + strCount += list.length; + } + } + table = new Data; + strTable = new Data; + table.writeShort(0); + table.writeShort(strCount); + table.writeShort(6 + 12 * strCount); + for (nameID in strings) { + list = strings[nameID]; + if (list != null) { + for (_i = 0, _len = list.length; _i < _len; _i++) { + string = list[_i]; + table.writeShort(string.platformID); + table.writeShort(string.encodingID); + table.writeShort(string.languageID); + table.writeShort(nameID); + table.writeShort(string.length); + table.writeShort(strTable.pos); + strTable.writeString(string.raw); + } + } + } + return nameTable = { + postscriptName: postscriptName.raw + , table: table.data.concat(strTable.data) + }; + };*/ + return NameTable; +})(Table); + +var MaxpTable = (function(_super) { + __extends(MaxpTable, _super); + + function MaxpTable() { + return MaxpTable.__super__.constructor.apply(this, arguments); + } + MaxpTable.prototype.tag = "maxp"; + MaxpTable.prototype.parse = function(data) { + data.pos = this.offset; + this.version = data.readInt(); + this.numGlyphs = data.readUInt16(); + this.maxPoints = data.readUInt16(); + this.maxContours = data.readUInt16(); + this.maxCompositePoints = data.readUInt16(); + this.maxComponentContours = data.readUInt16(); + this.maxZones = data.readUInt16(); + this.maxTwilightPoints = data.readUInt16(); + this.maxStorage = data.readUInt16(); + this.maxFunctionDefs = data.readUInt16(); + this.maxInstructionDefs = data.readUInt16(); + this.maxStackElements = data.readUInt16(); + this.maxSizeOfInstructions = data.readUInt16(); + this.maxComponentElements = data.readUInt16(); + return (this.maxComponentDepth = data.readUInt16()); + }; + /*MaxpTable.prototype.encode = function (ids) { + var table; + table = new Data; + table.writeInt(this.version); + table.writeUInt16(ids.length); + table.writeUInt16(this.maxPoints); + table.writeUInt16(this.maxContours); + table.writeUInt16(this.maxCompositePoints); + table.writeUInt16(this.maxComponentContours); + table.writeUInt16(this.maxZones); + table.writeUInt16(this.maxTwilightPoints); + table.writeUInt16(this.maxStorage); + table.writeUInt16(this.maxFunctionDefs); + table.writeUInt16(this.maxInstructionDefs); + table.writeUInt16(this.maxStackElements); + table.writeUInt16(this.maxSizeOfInstructions); + table.writeUInt16(this.maxComponentElements); + table.writeUInt16(this.maxComponentDepth); + return table.data; + };*/ + return MaxpTable; +})(Table); + +var HmtxTable = (function(_super) { + __extends(HmtxTable, _super); + + function HmtxTable() { + return HmtxTable.__super__.constructor.apply(this, arguments); + } + HmtxTable.prototype.tag = "hmtx"; + HmtxTable.prototype.parse = function(data) { + var i, last, lsbCount, m, _j, _ref, _results; + data.pos = this.offset; + this.metrics = []; + for ( + i = 0, _ref = this.file.hhea.numberOfMetrics; + 0 <= _ref ? i < _ref : i > _ref; + i = 0 <= _ref ? ++i : --i + ) { + this.metrics.push({ + advance: data.readUInt16(), + lsb: data.readInt16() + }); + } + lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics; + this.leftSideBearings = (function() { + var _j, _results; + _results = []; + for ( + i = _j = 0; + 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; + i = 0 <= lsbCount ? ++_j : --_j + ) { + _results.push(data.readInt16()); + } + return _results; + })(); + this.widths = function() { + var _j, _len, _ref1, _results; + _ref1 = this.metrics; + _results = []; + for (_j = 0, _len = _ref1.length; _j < _len; _j++) { + m = _ref1[_j]; + _results.push(m.advance); + } + return _results; + }.call(this); + last = this.widths[this.widths.length - 1]; + _results = []; + for ( + i = _j = 0; + 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; + i = 0 <= lsbCount ? ++_j : --_j + ) { + _results.push(this.widths.push(last)); + } + return _results; + }; + /***************************************************************/ + /* function : forGlyph */ + /* comment : Returns the advance width and lsb for this glyph. */ + /***************************************************************/ + HmtxTable.prototype.forGlyph = function(id) { + if (id in this.metrics) { + return this.metrics[id]; + } + return { + advance: this.metrics[this.metrics.length - 1].advance, + lsb: this.leftSideBearings[id - this.metrics.length] + }; + }; + /*HmtxTable.prototype.encode = function (mapping) { + var id, metric, table, _i, _len; + table = new Data; + for (_i = 0, _len = mapping.length; _i < _len; _i++) { + id = mapping[_i]; + metric = this.forGlyph(id); + table.writeUInt16(metric.advance); + table.writeUInt16(metric.lsb); + } + return table.data; + };*/ + return HmtxTable; +})(Table); + +var __slice = [].slice; + +var GlyfTable = (function(_super) { + __extends(GlyfTable, _super); + + function GlyfTable() { + return GlyfTable.__super__.constructor.apply(this, arguments); + } + GlyfTable.prototype.tag = "glyf"; + GlyfTable.prototype.parse = function() { + return (this.cache = {}); + }; + GlyfTable.prototype.glyphFor = function(id) { + var data, + index, + length, + loca, + numberOfContours, + raw, + xMax, + xMin, + yMax, + yMin; + if (id in this.cache) { + return this.cache[id]; + } + loca = this.file.loca; + data = this.file.contents; + index = loca.indexOf(id); + length = loca.lengthOf(id); + if (length === 0) { + return (this.cache[id] = null); + } + data.pos = this.offset + index; + raw = new Data(data.read(length)); + numberOfContours = raw.readShort(); + xMin = raw.readShort(); + yMin = raw.readShort(); + xMax = raw.readShort(); + yMax = raw.readShort(); + if (numberOfContours === -1) { + this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax); + } else { + this.cache[id] = new SimpleGlyph( + raw, + numberOfContours, + xMin, + yMin, + xMax, + yMax + ); + } + return this.cache[id]; + }; + GlyfTable.prototype.encode = function(glyphs, mapping, old2new) { + var glyph, id, offsets, table, _i, _len; + table = []; + offsets = []; + for (_i = 0, _len = mapping.length; _i < _len; _i++) { + id = mapping[_i]; + glyph = glyphs[id]; + offsets.push(table.length); + if (glyph) { + table = table.concat(glyph.encode(old2new)); + } + } + offsets.push(table.length); + return { + table: table, + offsets: offsets + }; + }; + return GlyfTable; +})(Table); + +var SimpleGlyph = (function() { + /**************************************************************************/ + /* function : SimpleGlyph */ + /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/ + /**************************************************************************/ + function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) { + this.raw = raw; + this.numberOfContours = numberOfContours; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + this.compound = false; + } + SimpleGlyph.prototype.encode = function() { + return this.raw.data; + }; + return SimpleGlyph; +})(); + +var CompoundGlyph = (function() { + var ARG_1_AND_2_ARE_WORDS, + MORE_COMPONENTS, + WE_HAVE_AN_X_AND_Y_SCALE, + WE_HAVE_A_SCALE, + WE_HAVE_A_TWO_BY_TWO; + ARG_1_AND_2_ARE_WORDS = 0x0001; + WE_HAVE_A_SCALE = 0x0008; + MORE_COMPONENTS = 0x0020; + WE_HAVE_AN_X_AND_Y_SCALE = 0x0040; + WE_HAVE_A_TWO_BY_TWO = 0x0080; + + /********************************************************************************************************************/ + /* function : CompoundGlypg generator */ + /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/ + /********************************************************************************************************************/ + function CompoundGlyph(raw, xMin, yMin, xMax, yMax) { + var data, flags; + this.raw = raw; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + this.compound = true; + this.glyphIDs = []; + this.glyphOffsets = []; + data = this.raw; + while (true) { + flags = data.readShort(); + this.glyphOffsets.push(data.pos); + this.glyphIDs.push(data.readUInt16()); + if (!(flags & MORE_COMPONENTS)) { + break; + } + if (flags & ARG_1_AND_2_ARE_WORDS) { + data.pos += 4; + } else { + data.pos += 2; + } + if (flags & WE_HAVE_A_TWO_BY_TWO) { + data.pos += 8; + } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { + data.pos += 4; + } else if (flags & WE_HAVE_A_SCALE) { + data.pos += 2; + } + } + } + /****************************************************************************************************************/ + /* function : CompoundGlypg encode */ + /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/ + /****************************************************************************************************************/ + CompoundGlyph.prototype.encode = function() { + var i, result, _len, _ref; + result = new Data(__slice.call(this.raw.data)); + _ref = this.glyphIDs; + for (i = 0, _len = _ref.length; i < _len; ++i) { + result.pos = this.glyphOffsets[i]; + } + return result.data; + }; + return CompoundGlyph; +})(); + +var LocaTable = (function(_super) { + __extends(LocaTable, _super); + + function LocaTable() { + return LocaTable.__super__.constructor.apply(this, arguments); + } + LocaTable.prototype.tag = "loca"; + LocaTable.prototype.parse = function(data) { + var format, i; + data.pos = this.offset; + format = this.file.head.indexToLocFormat; + if (format === 0) { + return (this.offsets = function() { + var _ref, _results; + _results = []; + for (i = 0, _ref = this.length; i < _ref; i += 2) { + _results.push(data.readUInt16() * 2); + } + return _results; + }.call(this)); + } else { + return (this.offsets = function() { + var _ref, _results; + _results = []; + for (i = 0, _ref = this.length; i < _ref; i += 4) { + _results.push(data.readUInt32()); + } + return _results; + }.call(this)); + } + }; + LocaTable.prototype.indexOf = function(id) { + return this.offsets[id]; + }; + LocaTable.prototype.lengthOf = function(id) { + return this.offsets[id + 1] - this.offsets[id]; + }; + LocaTable.prototype.encode = function(offsets, activeGlyphs) { + var LocaTable = new Uint32Array(this.offsets.length); + var glyfPtr = 0; + var listGlyf = 0; + for (var k = 0; k < LocaTable.length; ++k) { + LocaTable[k] = glyfPtr; + if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) { + ++listGlyf; + LocaTable[k] = glyfPtr; + var start = this.offsets[k]; + var len = this.offsets[k + 1] - start; + if (len > 0) { + glyfPtr += len; + } + } + } + var newLocaTable = new Array(LocaTable.length * 4); + for (var j = 0; j < LocaTable.length; ++j) { + newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff; + newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8; + newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16; + newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24; + } + return newLocaTable; + }; + return LocaTable; +})(Table); + +/************************************************************************************/ +/* function : invert */ +/* comment : Change the object's (key: value) to create an object with (value: key).*/ +/************************************************************************************/ +var invert = function(object) { + var key, ret, val; + ret = {}; + for (key in object) { + val = object[key]; + ret[val] = key; + } + return ret; +}; + +/*var successorOf = function (input) { + var added, alphabet, carry, i, index, isUpperCase, last, length, next, result; + alphabet = 'abcdefghijklmnopqrstuvwxyz'; + length = alphabet.length; + result = input; + i = input.length; + while (i >= 0) { + last = input.charAt(--i); + if (isNaN(last)) { + index = alphabet.indexOf(last.toLowerCase()); + if (index === -1) { + next = last; + carry = true; + } + else { + next = alphabet.charAt((index + 1) % length); + isUpperCase = last === last.toUpperCase(); + if (isUpperCase) { + next = next.toUpperCase(); + } + carry = index + 1 >= length; + if (carry && i === 0) { + added = isUpperCase ? 'A' : 'a'; + result = added + next + result.slice(1); + break; + } + } + } + else { + next = +last + 1; + carry = next > 9; + if (carry) { + next = 0; + } + if (carry && i === 0) { + result = '1' + next + result.slice(1); + break; + } + } + result = result.slice(0, i) + next + result.slice(i + 1); + if (!carry) { + break; + } + } + return result; + };*/ + +var Subset = (function() { + function Subset(font) { + this.font = font; + this.subset = {}; + this.unicodes = {}; + this.next = 33; + } + /*Subset.prototype.use = function (character) { + var i, _i, _ref; + if (typeof character === 'string') { + for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + this.use(character.charCodeAt(i)); + } + return; + } + if (!this.unicodes[character]) { + this.subset[this.next] = character; + return this.unicodes[character] = this.next++; + } + };*/ + /*Subset.prototype.encodeText = function (text) { + var char, i, string, _i, _ref; + string = ''; + for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + char = this.unicodes[text.charCodeAt(i)]; + string += String.fromCharCode(char); + } + return string; + };*/ + /***************************************************************/ + /* function : generateCmap */ + /* comment : Returns the unicode cmap for this font. */ + /***************************************************************/ + Subset.prototype.generateCmap = function() { + var mapping, roman, unicode, unicodeCmap, _ref; + unicodeCmap = this.font.cmap.tables[0].codeMap; + mapping = {}; + _ref = this.subset; + for (roman in _ref) { + unicode = _ref[roman]; + mapping[roman] = unicodeCmap[unicode]; + } + return mapping; + }; + /*Subset.prototype.glyphIDs = function () { + var ret, roman, unicode, unicodeCmap, val, _ref; + unicodeCmap = this.font.cmap.tables[0].codeMap; + ret = [0]; + _ref = this.subset; + for (roman in _ref) { + unicode = _ref[roman]; + val = unicodeCmap[unicode]; + if ((val != null) && __indexOf.call(ret, val) < 0) { + ret.push(val); + } + } + return ret.sort(); + };*/ + /******************************************************************/ + /* function : glyphsFor */ + /* comment : Returns simple glyph objects for the input character.*/ + /******************************************************************/ + Subset.prototype.glyphsFor = function(glyphIDs) { + var additionalIDs, glyph, glyphs, id, _i, _len, _ref; + glyphs = {}; + for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) { + id = glyphIDs[_i]; + glyphs[id] = this.font.glyf.glyphFor(id); + } + additionalIDs = []; + for (id in glyphs) { + glyph = glyphs[id]; + if (glyph != null ? glyph.compound : void 0) { + additionalIDs.push.apply(additionalIDs, glyph.glyphIDs); + } + } + if (additionalIDs.length > 0) { + _ref = this.glyphsFor(additionalIDs); + for (id in _ref) { + glyph = _ref[id]; + glyphs[id] = glyph; + } + } + return glyphs; + }; + /***************************************************************/ + /* function : encode */ + /* comment : Encode various tables for the characters you use. */ + /***************************************************************/ + Subset.prototype.encode = function(glyID, indexToLocFormat) { + var cmap, + code, + glyf, + glyphs, + id, + ids, + loca, + new2old, + newIDs, + nextGlyphID, + old2new, + oldID, + oldIDs, + tables, + _ref; + cmap = CmapTable.encode(this.generateCmap(), "unicode"); + glyphs = this.glyphsFor(glyID); + old2new = { + 0: 0 + }; + _ref = cmap.charMap; + for (code in _ref) { + ids = _ref[code]; + old2new[ids.old] = ids["new"]; + } + nextGlyphID = cmap.maxGlyphID; + for (oldID in glyphs) { + if (!(oldID in old2new)) { + old2new[oldID] = nextGlyphID++; + } + } + new2old = invert(old2new); + newIDs = Object.keys(new2old).sort(function(a, b) { + return a - b; + }); + oldIDs = (function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = newIDs.length; _i < _len; _i++) { + id = newIDs[_i]; + _results.push(new2old[id]); + } + return _results; + })(); + glyf = this.font.glyf.encode(glyphs, oldIDs, old2new); + loca = this.font.loca.encode(glyf.offsets, oldIDs); + tables = { + cmap: this.font.cmap.raw(), + glyf: glyf.table, + loca: loca, + hmtx: this.font.hmtx.raw(), + hhea: this.font.hhea.raw(), + maxp: this.font.maxp.raw(), + post: this.font.post.raw(), + name: this.font.name.raw(), + head: this.font.head.encode(indexToLocFormat) + }; + if (this.font.os2.exists) { + tables["OS/2"] = this.font.os2.raw(); + } + return this.font.directory.encode(tables); + }; + return Subset; +})(); + +jsPDF.API.PDFObject = (function() { + var pad; + + function PDFObject() {} + pad = function(str, length) { + return (Array(length + 1).join("0") + str).slice(-length); + }; + /*****************************************************************************/ + /* function : convert */ + /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */ + /*****************************************************************************/ + PDFObject.convert = function(object) { + var e, items, key, out, val; + if (Array.isArray(object)) { + items = (function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = object.length; _i < _len; _i++) { + e = object[_i]; + _results.push(PDFObject.convert(e)); + } + return _results; + })().join(" "); + return "[" + items + "]"; + } else if (typeof object === "string") { + return "/" + object; + } else if (object != null ? object.isString : void 0) { + return "(" + object + ")"; + } else if (object instanceof Date) { + return ( + "(D:" + + pad(object.getUTCFullYear(), 4) + + pad(object.getUTCMonth(), 2) + + pad(object.getUTCDate(), 2) + + pad(object.getUTCHours(), 2) + + pad(object.getUTCMinutes(), 2) + + pad(object.getUTCSeconds(), 2) + + "Z)" + ); + } else if ({}.toString.call(object) === "[object Object]") { + out = ["<<"]; + for (key in object) { + val = object[key]; + out.push("/" + key + " " + PDFObject.convert(val)); + } + out.push(">>"); + return out.join("\n"); + } else { + return "" + object; + } + }; + return PDFObject; +})(); + +exports.AcroForm = AcroForm; +exports.AcroFormAppearance = AcroFormAppearance; +exports.AcroFormButton = AcroFormButton; +exports.AcroFormCheckBox = AcroFormCheckBox; +exports.AcroFormChoiceField = AcroFormChoiceField; +exports.AcroFormComboBox = AcroFormComboBox; +exports.AcroFormEditBox = AcroFormEditBox; +exports.AcroFormListBox = AcroFormListBox; +exports.AcroFormPasswordField = AcroFormPasswordField; +exports.AcroFormPushButton = AcroFormPushButton; +exports.AcroFormRadioButton = AcroFormRadioButton; +exports.AcroFormTextField = AcroFormTextField; +exports.GState = GState; +exports.ShadingPattern = ShadingPattern; +exports.TilingPattern = TilingPattern; +exports.default = jsPDF; +exports.jsPDF = jsPDF; +//# sourceMappingURL=jspdf.node.js.map diff --git a/lib/jspdf/jspdf.node.js.map b/lib/jspdf/jspdf.node.js.map new file mode 100644 index 0000000..33c40d8 --- /dev/null +++ b/lib/jspdf/jspdf.node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jspdf.node.js","sources":["../src/libs/globalObject.js","../src/libs/rgbcolor.js","../src/libs/AtobBtoa.js","../src/libs/console.js","../src/libs/md5.js","../src/libs/rc4.js","../src/libs/pdfsecurity.js","../src/libs/pdfname.js","../src/jspdf.js","../src/modules/acroform.js","../src/modules/addimage.js","../src/modules/annotations.js","../src/modules/arabic.js","../src/modules/autoprint.js","../src/modules/canvas.js","../src/modules/cell.js","../src/libs/fontFace.js","../src/modules/context2d.js","../src/modules/filters.js","../src/modules/fileloading.js","../src/modules/html.js","../src/modules/javascript.js","../src/modules/outline.js","../src/modules/jpeg_support.js","../src/libs/png.js","../src/modules/png_support.js","../src/libs/omggif.js","../src/libs/JPEGEncoder.js","../src/modules/gif_support.js","../src/libs/BMPDecoder.js","../src/modules/bmp_support.js","../src/libs/WebPDecoder.js","../src/modules/webp_support.js","../src/modules/rgba_support.js","../src/modules/setlanguage.js","../src/modules/split_text_to_size.js","../src/modules/standard_fonts_metrics.js","../src/modules/ttfsupport.js","../src/modules/svg.js","../src/modules/total_pages.js","../src/modules/viewerpreferences.js","../src/modules/xmp_metadata.js","../src/modules/utf8.js","../src/modules/vfs.js","../src/libs/bidiEngine.js","../src/libs/ttffont.js"],"sourcesContent":["export var globalObject = (function() {\n return \"undefined\" !== typeof window\n ? window\n : \"undefined\" !== typeof global\n ? global\n : \"undefined\" !== typeof self\n ? self\n : this;\n})();\n","/**\n * A class to parse color values\n * @author Stoyan Stefanov \n * {@link http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */\n\nfunction RGBColor(color_string) {\n color_string = color_string || \"\";\n this.ok = false;\n\n // strip any leading #\n if (color_string.charAt(0) == \"#\") {\n // remove # if any\n color_string = color_string.substr(1, 6);\n }\n\n color_string = color_string.replace(/ /g, \"\");\n color_string = color_string.toLowerCase();\n\n var channels;\n\n // before getting into regexps, try simple matches\n // and overwrite the input\n var simple_colors = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"00ffff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000000\",\n blanchedalmond: \"ffebcd\",\n blue: \"0000ff\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"00ffff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dodgerblue: \"1e90ff\",\n feldspar: \"d19275\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"ff00ff\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgrey: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslateblue: \"8470ff\",\n lightslategray: \"778899\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"00ff00\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"ff00ff\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370d8\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"d87093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n red: \"ff0000\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n violetred: \"d02090\",\n wheat: \"f5deb3\",\n white: \"ffffff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ffff00\",\n yellowgreen: \"9acd32\"\n };\n color_string = simple_colors[color_string] || color_string;\n\n // array of color definition objects\n var color_defs = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n example: [\"rgb(123, 234, 45)\", \"rgb(255,234,245)\"],\n process: function(bits) {\n return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n example: [\"#00ff00\", \"336699\"],\n process: function(bits) {\n return [\n parseInt(bits[1], 16),\n parseInt(bits[2], 16),\n parseInt(bits[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n example: [\"#fb0\", \"f0f\"],\n process: function(bits) {\n return [\n parseInt(bits[1] + bits[1], 16),\n parseInt(bits[2] + bits[2], 16),\n parseInt(bits[3] + bits[3], 16)\n ];\n }\n }\n ];\n\n // search through the definitions to find a match\n for (var i = 0; i < color_defs.length; i++) {\n var re = color_defs[i].re;\n var processor = color_defs[i].process;\n var bits = re.exec(color_string);\n if (bits) {\n channels = processor(bits);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n this.ok = true;\n }\n }\n\n // validate/cleanup values\n this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r;\n this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g;\n this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b;\n\n // some getters\n this.toRGB = function() {\n return \"rgb(\" + this.r + \", \" + this.g + \", \" + this.b + \")\";\n };\n this.toHex = function() {\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n if (r.length == 1) r = \"0\" + r;\n if (g.length == 1) g = \"0\" + g;\n if (b.length == 1) b = \"0\" + b;\n return \"#\" + r + g + b;\n };\n}\n\nexport { RGBColor };\n","import { globalObject } from \"./globalObject.js\";\n\nvar atob, btoa;\n\n(function() {\n\n atob = require(\"atob\");\n btoa = require(\"btoa\");\n})();\n\nexport { atob, btoa };\n","import { globalObject } from \"./globalObject.js\";\n\nfunction consoleLog() {\n if (globalObject.console && typeof globalObject.console.log === \"function\") {\n globalObject.console.log.apply(globalObject.console, arguments);\n }\n}\n\nfunction consoleWarn(str) {\n if (globalObject.console) {\n if (typeof globalObject.console.warn === \"function\") {\n globalObject.console.warn.apply(globalObject.console, arguments);\n } else {\n consoleLog.call(null, arguments);\n }\n }\n}\n\nfunction consoleError(str) {\n if (globalObject.console) {\n if (typeof globalObject.console.error === \"function\") {\n globalObject.console.error.apply(globalObject.console, arguments);\n } else {\n consoleLog(str);\n }\n }\n}\nexport var console = {\n log: consoleLog,\n warn: consoleWarn,\n error: consoleError\n};\n","/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\n\nfunction md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n // txt = '';\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i;\n for (i = 64; i <= s.length; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < s.length; i++)\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i++) tail[i] = 0;\n }\n tail[14] = n * 8;\n md5cycle(state, tail);\n return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n /* I figured global was faster. */\n var md5blks = [],\n i; /* Andy King said do it this way. */\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] =\n s.charCodeAt(i) +\n (s.charCodeAt(i + 1) << 8) +\n (s.charCodeAt(i + 2) << 16) +\n (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n}\n\nvar hex_chr = \"0123456789abcdef\".split(\"\");\n\nfunction rhex(n) {\n var s = \"\",\n j = 0;\n for (; j < 4; j++)\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];\n return s;\n}\n\nfunction hex(x) {\n for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]);\n return x.join(\"\");\n}\n\n// Converts a 4-byte number to byte string\nfunction singleToByteString(n) {\n return String.fromCharCode(\n (n & 0xff) >> 0,\n (n & 0xff00) >> 8,\n (n & 0xff0000) >> 16,\n (n & 0xff000000) >> 24\n );\n}\n\n// Converts an array of numbers to a byte string\nfunction toByteString(x) {\n return x.map(singleToByteString).join(\"\");\n}\n\n// Returns the MD5 hash as a byte string\nfunction md5Bin(s) {\n return toByteString(md51(s));\n}\n\n// Returns MD5 hash as a hex string\nfunction md5(s) {\n return hex(md51(s));\n}\n\nvar md5Check = md5(\"hello\") != \"5d41402abc4b2a76b9719d911017c592\";\n\nfunction add32(a, b) {\n if (md5Check) {\n /* if the md5Check does not match\n the expected value, we're dealing\n with an old browser and need\n this function. */\n var lsw = (a & 0xffff) + (b & 0xffff),\n msw = (a >> 16) + (b >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n } else {\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n return (a + b) & 0xffffffff;\n }\n}\n\nexport { md5, md5Bin };\n","/**\r\n * @license\r\n * FPDF is released under a permissive license: there is no usage restriction.\r\n * You may embed it freely in your application (commercial or not), with or\r\n * without modifications.\r\n *\r\n * Reference: http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nfunction repeat(str, num) {\r\n return new Array(num + 1).join(str);\r\n}\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name rc4\r\n * @function\r\n * @param {string} key Byte string of encryption key\r\n * @param {string} data Byte string of data to be encrypted\r\n * @returns {string} Encrypted string\r\n */\r\nfunction rc4(key, data) {\r\n var lastKey, lastState;\r\n if (key !== lastKey) {\r\n var k = repeat(key, ((256 / key.length) >> 0) + 1);\r\n var state = [];\r\n for (var i = 0; i < 256; i++) {\r\n state[i] = i;\r\n }\r\n var j = 0;\r\n for (var i = 0; i < 256; i++) {\r\n var t = state[i];\r\n j = (j + t + k.charCodeAt(i)) % 256;\r\n state[i] = state[j];\r\n state[j] = t;\r\n }\r\n lastKey = key;\r\n lastState = state;\r\n } else {\r\n state = lastState;\r\n }\r\n var length = data.length;\r\n var a = 0;\r\n var b = 0;\r\n var out = \"\";\r\n for (var i = 0; i < length; i++) {\r\n a = (a + 1) % 256;\r\n t = state[a];\r\n b = (b + t) % 256;\r\n state[a] = state[b];\r\n state[b] = t;\r\n k = state[(state[a] + state[b]) % 256];\r\n out += String.fromCharCode(data.charCodeAt(i) ^ k);\r\n }\r\n return out;\r\n}\r\n\r\nexport { rc4 };\r\n","/**\r\n * @license\r\n * Licensed under the MIT License.\r\n * http://opensource.org/licenses/mit-license\r\n * Author: Owen Leong (@owenl131)\r\n * Date: 15 Oct 2020\r\n * References:\r\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\r\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\r\n * http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nimport { md5Bin } from \"./md5.js\";\r\nimport { rc4 } from \"./rc4.js\";\r\n\r\nvar permissionOptions = {\r\n print: 4,\r\n modify: 8,\r\n copy: 16,\r\n \"annot-forms\": 32\r\n};\r\n\r\n/**\r\n * Initializes encryption settings\r\n *\r\n * @name constructor\r\n * @function\r\n * @param {Array} permissions Permissions allowed for user, \"print\", \"modify\", \"copy\" and \"annot-forms\".\r\n * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document\r\n * is not password protected but viewer has the above permissions.\r\n * @param {String} ownerPassword Owner has full functionalities to the file.\r\n * @param {String} fileId As hex string, should be same as the file ID in the trailer.\r\n * @example\r\n * var security = new PDFSecurity([\"print\"])\r\n */\r\nfunction PDFSecurity(permissions, userPassword, ownerPassword, fileId) {\r\n this.v = 1; // algorithm 1, future work can add in more recent encryption schemes\r\n this.r = 2; // revision 2\r\n\r\n // set flags for what functionalities the user can access\r\n let protection = 192;\r\n permissions.forEach(function(perm) {\r\n if (typeof permissionOptions.perm !== \"undefined\") {\r\n throw new Error(\"Invalid permission: \" + perm);\r\n }\r\n protection += permissionOptions[perm];\r\n });\r\n\r\n // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF\r\n this.padding =\r\n \"\\x28\\xBF\\x4E\\x5E\\x4E\\x75\\x8A\\x41\\x64\\x00\\x4E\\x56\\xFF\\xFA\\x01\\x08\" +\r\n \"\\x2E\\x2E\\x00\\xB6\\xD0\\x68\\x3E\\x80\\x2F\\x0C\\xA9\\xFE\\x64\\x53\\x69\\x7A\";\r\n let paddedUserPassword = (userPassword + this.padding).substr(0, 32);\r\n let paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32);\r\n\r\n this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword);\r\n this.P = -((protection ^ 255) + 1);\r\n this.encryptionKey = md5Bin(\r\n paddedUserPassword +\r\n this.O +\r\n this.lsbFirstWord(this.P) +\r\n this.hexToBytes(fileId)\r\n ).substr(0, 5);\r\n this.U = rc4(this.encryptionKey, this.padding);\r\n}\r\n\r\n/**\r\n * Breaks down a 4-byte number into its individual bytes, with the least significant bit first\r\n *\r\n * @name lsbFirstWord\r\n * @function\r\n * @param {number} data 32-bit number\r\n * @returns {Array}\r\n */\r\nPDFSecurity.prototype.lsbFirstWord = function(data) {\r\n return String.fromCharCode(\r\n (data >> 0) & 0xff,\r\n (data >> 8) & 0xff,\r\n (data >> 16) & 0xff,\r\n (data >> 24) & 0xff\r\n );\r\n};\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name toHexString\r\n * @function\r\n * @param {String} byteString Byte string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.toHexString = function(byteString) {\r\n return byteString\r\n .split(\"\")\r\n .map(function(byte) {\r\n return (\"0\" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2);\r\n })\r\n .join(\"\");\r\n};\r\n\r\n/**\r\n * Converts a hex string to a byte string\r\n *\r\n * @name hexToBytes\r\n * @function\r\n * @param {String} hex Hex string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.hexToBytes = function(hex) {\r\n for (var bytes = [], c = 0; c < hex.length; c += 2)\r\n bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16)));\r\n return bytes.join(\"\");\r\n};\r\n\r\n/**\r\n * Computes the 'O' field in the encryption dictionary\r\n *\r\n * @name processOwnerPassword\r\n * @function\r\n * @param {String} paddedUserPassword Byte string of padded user password\r\n * @param {String} paddedOwnerPassword Byte string of padded owner password\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.processOwnerPassword = function(\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let key = md5Bin(paddedOwnerPassword).substr(0, 5);\r\n return rc4(key, paddedUserPassword);\r\n};\r\n\r\n/**\r\n * Returns an encryptor function which can take in a byte string and returns the encrypted version\r\n *\r\n * @name encryptor\r\n * @function\r\n * @param {number} objectId\r\n * @param {number} generation Not sure what this is for, you can set it to 0\r\n * @returns {Function}\r\n * @example\r\n * out(\"stream\");\r\n * encryptor = security.encryptor(object.id, 0);\r\n * out(encryptor(data));\r\n * out(\"endstream\");\r\n */\r\nPDFSecurity.prototype.encryptor = function(objectId, generation) {\r\n let key = md5Bin(\r\n this.encryptionKey +\r\n String.fromCharCode(\r\n objectId & 0xff,\r\n (objectId >> 8) & 0xff,\r\n (objectId >> 16) & 0xff,\r\n generation & 0xff,\r\n (generation >> 8) & 0xff\r\n )\r\n ).substr(0, 10);\r\n return function(data) {\r\n return rc4(key, data);\r\n };\r\n};\r\n\r\nexport { PDFSecurity };\r\n","/**\n * Convert string to `PDF Name Object`.\n * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object\n * @param str\n */\nfunction toPDFName(str) {\n // eslint-disable-next-line no-control-regex\n if (/[^\\u0000-\\u00ff]/.test(str)) {\n // non ascii string\n throw new Error(\n \"Invalid PDF Name Object: \" + str + \", Only accept ASCII characters.\"\n );\n }\n var result = \"\",\n strLength = str.length;\n for (var i = 0; i < strLength; i++) {\n var charCode = str.charCodeAt(i);\n if (\n charCode < 0x21 ||\n charCode === 0x23 /* # */ ||\n charCode === 0x25 /* % */ ||\n charCode === 0x28 /* ( */ ||\n charCode === 0x29 /* ) */ ||\n charCode === 0x2f /* / */ ||\n charCode === 0x3c /* < */ ||\n charCode === 0x3e /* > */ ||\n charCode === 0x5b /* [ */ ||\n charCode === 0x5d /* ] */ ||\n charCode === 0x7b /* { */ ||\n charCode === 0x7d /* } */ ||\n charCode > 0x7e\n ) {\n // Char CharCode hexStr paddingHexStr Result\n // \"\\t\" 9 9 09 #09\n // \" \" 32 20 20 #20\n // \"©\" 169 a9 a9 #a9\n var hexStr = charCode.toString(16),\n paddingHexStr = (\"0\" + hexStr).slice(-2);\n\n result += \"#\" + paddingHexStr;\n } else {\n // Other ASCII printable characters between 0x21 <= X <= 0x7e\n result += str[i];\n }\n }\n return result;\n}\n\nexport { toPDFName };\n","/* eslint-disable no-console */\r\n\r\nimport { globalObject } from \"./libs/globalObject.js\";\r\nimport { RGBColor } from \"./libs/rgbcolor.js\";\r\nimport { btoa } from \"./libs/AtobBtoa.js\";\r\nimport { console } from \"./libs/console.js\";\r\nimport { PDFSecurity } from \"./libs/pdfsecurity.js\";\r\nimport { toPDFName } from \"./libs/pdfname.js\";\r\n/**\r\n * jsPDF's Internal PubSub Implementation.\r\n * Backward compatible rewritten on 2014 by\r\n * Diego Casorran, https://github.com/diegocr\r\n *\r\n * @class\r\n * @name PubSub\r\n * @ignore\r\n */\r\nfunction PubSub(context) {\r\n if (typeof context !== \"object\") {\r\n throw new Error(\r\n \"Invalid Context passed to initialize PubSub (jsPDF-module)\"\r\n );\r\n }\r\n var topics = {};\r\n\r\n this.subscribe = function(topic, callback, once) {\r\n once = once || false;\r\n if (\r\n typeof topic !== \"string\" ||\r\n typeof callback !== \"function\" ||\r\n typeof once !== \"boolean\"\r\n ) {\r\n throw new Error(\r\n \"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\"\r\n );\r\n }\r\n\r\n if (!topics.hasOwnProperty(topic)) {\r\n topics[topic] = {};\r\n }\r\n\r\n var token = Math.random().toString(35);\r\n topics[topic][token] = [callback, !!once];\r\n\r\n return token;\r\n };\r\n\r\n this.unsubscribe = function(token) {\r\n for (var topic in topics) {\r\n if (topics[topic][token]) {\r\n delete topics[topic][token];\r\n if (Object.keys(topics[topic]).length === 0) {\r\n delete topics[topic];\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n this.publish = function(topic) {\r\n if (topics.hasOwnProperty(topic)) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n tokens = [];\r\n\r\n for (var token in topics[topic]) {\r\n var sub = topics[topic][token];\r\n try {\r\n sub[0].apply(context, args);\r\n } catch (ex) {\r\n if (globalObject.console) {\r\n console.error(\"jsPDF PubSub Error\", ex.message, ex);\r\n }\r\n }\r\n if (sub[1]) tokens.push(token);\r\n }\r\n if (tokens.length) tokens.forEach(this.unsubscribe);\r\n }\r\n };\r\n\r\n this.getTopics = function() {\r\n return topics;\r\n };\r\n}\r\n\r\nfunction GState(parameters) {\r\n if (!(this instanceof GState)) {\r\n return new GState(parameters);\r\n }\r\n\r\n /**\r\n * @name GState#opacity\r\n * @type {any}\r\n */\r\n /**\r\n * @name GState#stroke-opacity\r\n * @type {any}\r\n */\r\n var supported = \"opacity,stroke-opacity\".split(\",\");\r\n for (var p in parameters) {\r\n if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) {\r\n this[p] = parameters[p];\r\n }\r\n }\r\n /**\r\n * @name GState#id\r\n * @type {string}\r\n */\r\n this.id = \"\"; // set by addGState()\r\n /**\r\n * @name GState#objectNumber\r\n * @type {number}\r\n */\r\n this.objectNumber = -1; // will be set by putGState()\r\n}\r\n\r\nGState.prototype.equals = function equals(other) {\r\n var ignore = \"id,objectNumber,equals\";\r\n var p;\r\n if (!other || typeof other !== typeof this) return false;\r\n var count = 0;\r\n for (p in this) {\r\n if (ignore.indexOf(p) >= 0) continue;\r\n if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false;\r\n if (this[p] !== other[p]) return false;\r\n count++;\r\n }\r\n for (p in other) {\r\n if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--;\r\n }\r\n return count === 0;\r\n};\r\n\r\nfunction Pattern(gState, matrix) {\r\n this.gState = gState;\r\n this.matrix = matrix;\r\n\r\n this.id = \"\"; // set by addPattern()\r\n this.objectNumber = -1; // will be set by putPattern()\r\n}\r\n\r\nfunction ShadingPattern(type, coords, colors, gState, matrix) {\r\n if (!(this instanceof ShadingPattern)) {\r\n return new ShadingPattern(type, coords, colors, gState, matrix);\r\n }\r\n\r\n // see putPattern() for information how they are realized\r\n this.type = type === \"axial\" ? 2 : 3;\r\n this.coords = coords;\r\n this.colors = colors;\r\n\r\n Pattern.call(this, gState, matrix);\r\n}\r\n\r\nfunction TilingPattern(boundingBox, xStep, yStep, gState, matrix) {\r\n if (!(this instanceof TilingPattern)) {\r\n return new TilingPattern(boundingBox, xStep, yStep, gState, matrix);\r\n }\r\n\r\n this.boundingBox = boundingBox;\r\n this.xStep = xStep;\r\n this.yStep = yStep;\r\n\r\n this.stream = \"\"; // set by endTilingPattern();\r\n\r\n this.cloneIndex = 0;\r\n\r\n Pattern.call(this, gState, matrix);\r\n}\r\n\r\n/**\r\n * Creates new jsPDF document object instance.\r\n * @name jsPDF\r\n * @class\r\n * @param {Object} [options] - Collection of settings initializing the jsPDF-instance\r\n * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" or \"l\").
    \r\n * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.
    \r\n * Possible values are \"pt\" (points), \"mm\", \"cm\", \"in\", \"px\", \"pc\", \"em\" or \"ex\". Note that in order to get the correct scaling for \"px\"\r\n * units, you need to enable the hotfix \"px_scaling\" by setting options.hotfixes = [\"px_scaling\"].\r\n * @param {string/Array} [options.format=a4] The format of the first page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used.\r\n * @param {boolean} [options.compress=false] Compress the generated PDF.\r\n * @param {number} [options.precision=16] Precision of the element-positions.\r\n * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it.\r\n * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling.\r\n * @param {Object} [options.encryption]\r\n * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list.\r\n * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication.\r\n * @param {string[]} [options.encryption.userPermissions] Array of permissions \"print\", \"modify\", \"copy\", \"annot-forms\", accessible by the user.\r\n * @param {number|\"smart\"} [options.floatPrecision=16]\r\n * @returns {jsPDF} jsPDF-instance\r\n * @description\r\n * ```\r\n * {\r\n * orientation: 'p',\r\n * unit: 'mm',\r\n * format: 'a4',\r\n * putOnlyUsedFonts:true,\r\n * floatPrecision: 16 // or \"smart\", default is 16\r\n * }\r\n * ```\r\n *\r\n * @constructor\r\n */\r\nfunction jsPDF(options) {\r\n var orientation = typeof arguments[0] === \"string\" ? arguments[0] : \"p\";\r\n var unit = arguments[1];\r\n var format = arguments[2];\r\n var compressPdf = arguments[3];\r\n var filters = [];\r\n var userUnit = 1.0;\r\n var precision;\r\n var floatPrecision = 16;\r\n var defaultPathOperation = \"S\";\r\n var encryptionOptions = null;\r\n\r\n options = options || {};\r\n\r\n if (typeof options === \"object\") {\r\n orientation = options.orientation;\r\n unit = options.unit || unit;\r\n format = options.format || format;\r\n compressPdf = options.compress || options.compressPdf || compressPdf;\r\n encryptionOptions = options.encryption || null;\r\n if (encryptionOptions !== null) {\r\n encryptionOptions.userPassword = encryptionOptions.userPassword || \"\";\r\n encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || \"\";\r\n encryptionOptions.userPermissions =\r\n encryptionOptions.userPermissions || [];\r\n }\r\n userUnit =\r\n typeof options.userUnit === \"number\" ? Math.abs(options.userUnit) : 1.0;\r\n if (typeof options.precision !== \"undefined\") {\r\n precision = options.precision;\r\n }\r\n if (typeof options.floatPrecision !== \"undefined\") {\r\n floatPrecision = options.floatPrecision;\r\n }\r\n defaultPathOperation = options.defaultPathOperation || \"S\";\r\n }\r\n\r\n filters =\r\n options.filters || (compressPdf === true ? [\"FlateEncode\"] : filters);\r\n\r\n unit = unit || \"mm\";\r\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\r\n var putOnlyUsedFonts = options.putOnlyUsedFonts || false;\r\n var usedFonts = {};\r\n\r\n var API = {\r\n internal: {},\r\n __private__: {}\r\n };\r\n\r\n API.__private__.PubSub = PubSub;\r\n\r\n var pdfVersion = \"1.3\";\r\n var getPdfVersion = (API.__private__.getPdfVersion = function() {\r\n return pdfVersion;\r\n });\r\n\r\n API.__private__.setPdfVersion = function(value) {\r\n pdfVersion = value;\r\n };\r\n\r\n // Size in pt of various paper formats\r\n var pageFormats = {\r\n a0: [2383.94, 3370.39],\r\n a1: [1683.78, 2383.94],\r\n a2: [1190.55, 1683.78],\r\n a3: [841.89, 1190.55],\r\n a4: [595.28, 841.89],\r\n a5: [419.53, 595.28],\r\n a6: [297.64, 419.53],\r\n a7: [209.76, 297.64],\r\n a8: [147.4, 209.76],\r\n a9: [104.88, 147.4],\r\n a10: [73.7, 104.88],\r\n b0: [2834.65, 4008.19],\r\n b1: [2004.09, 2834.65],\r\n b2: [1417.32, 2004.09],\r\n b3: [1000.63, 1417.32],\r\n b4: [708.66, 1000.63],\r\n b5: [498.9, 708.66],\r\n b6: [354.33, 498.9],\r\n b7: [249.45, 354.33],\r\n b8: [175.75, 249.45],\r\n b9: [124.72, 175.75],\r\n b10: [87.87, 124.72],\r\n c0: [2599.37, 3676.54],\r\n c1: [1836.85, 2599.37],\r\n c2: [1298.27, 1836.85],\r\n c3: [918.43, 1298.27],\r\n c4: [649.13, 918.43],\r\n c5: [459.21, 649.13],\r\n c6: [323.15, 459.21],\r\n c7: [229.61, 323.15],\r\n c8: [161.57, 229.61],\r\n c9: [113.39, 161.57],\r\n c10: [79.37, 113.39],\r\n dl: [311.81, 623.62],\r\n letter: [612, 792],\r\n \"government-letter\": [576, 756],\r\n legal: [612, 1008],\r\n \"junior-legal\": [576, 360],\r\n ledger: [1224, 792],\r\n tabloid: [792, 1224],\r\n \"credit-card\": [153, 243]\r\n };\r\n\r\n API.__private__.getPageFormats = function() {\r\n return pageFormats;\r\n };\r\n\r\n var getPageFormat = (API.__private__.getPageFormat = function(value) {\r\n return pageFormats[value];\r\n });\r\n\r\n format = format || \"a4\";\r\n\r\n var ApiMode = {\r\n COMPAT: \"compat\",\r\n ADVANCED: \"advanced\"\r\n };\r\n var apiMode = ApiMode.COMPAT;\r\n\r\n function advancedAPI() {\r\n // prepend global change of basis matrix\r\n // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix\r\n // that does this job for us (however, texts, images and similar objects must be drawn bottom up))\r\n this.saveGraphicsState();\r\n out(\r\n new Matrix(\r\n scaleFactor,\r\n 0,\r\n 0,\r\n -scaleFactor,\r\n 0,\r\n getPageHeight() * scaleFactor\r\n ).toString() + \" cm\"\r\n );\r\n this.setFontSize(this.getFontSize() / scaleFactor);\r\n\r\n // The default in MrRio's implementation is \"S\" (stroke), whereas the default in the yWorks implementation\r\n // was \"n\" (none). Although this has nothing to do with transforms, we should use the API switch here.\r\n defaultPathOperation = \"n\";\r\n\r\n apiMode = ApiMode.ADVANCED;\r\n }\r\n\r\n function compatAPI() {\r\n this.restoreGraphicsState();\r\n defaultPathOperation = \"S\";\r\n apiMode = ApiMode.COMPAT;\r\n }\r\n\r\n /**\r\n * @function combineFontStyleAndFontWeight\r\n * @param {string} fontStyle Fontstyle or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @returns {string}\r\n * @private\r\n */\r\n var combineFontStyleAndFontWeight = (API.__private__.combineFontStyleAndFontWeight = function(\r\n fontStyle,\r\n fontWeight\r\n ) {\r\n if (\r\n (fontStyle == \"bold\" && fontWeight == \"normal\") ||\r\n (fontStyle == \"bold\" && fontWeight == 400) ||\r\n (fontStyle == \"normal\" && fontWeight == \"italic\") ||\r\n (fontStyle == \"bold\" && fontWeight == \"italic\")\r\n ) {\r\n throw new Error(\"Invalid Combination of fontweight and fontstyle\");\r\n }\r\n if (fontWeight) {\r\n fontStyle =\r\n fontWeight == 400 || fontWeight === \"normal\"\r\n ? fontStyle === \"italic\"\r\n ? \"italic\"\r\n : \"normal\"\r\n : (fontWeight == 700 || fontWeight === \"bold\") &&\r\n fontStyle === \"normal\"\r\n ? \"bold\"\r\n : (fontWeight == 700 ? \"bold\" : fontWeight) + \"\" + fontStyle;\r\n }\r\n return fontStyle;\r\n });\r\n\r\n /**\r\n * @callback ApiSwitchBody\r\n * @param {jsPDF} pdf\r\n */\r\n\r\n /**\r\n * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual\r\n * screen coordinates and the PDF coordinate system.\r\n * - \"compat\": Offers full compatibility across all plugins but does not allow arbitrary transforms\r\n * - \"advanced\": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might\r\n * not support this mode, though.\r\n * Initial mode is \"compat\".\r\n *\r\n * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to\r\n * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}.\r\n *\r\n * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the\r\n * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject}\r\n * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to \"compat\" API mode.\r\n *\r\n * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n * The API mode will be switched back automatically afterwards.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name advancedAPI\r\n */\r\n API.advancedAPI = function(body) {\r\n var doSwitch = apiMode === ApiMode.COMPAT;\r\n\r\n if (doSwitch) {\r\n advancedAPI.call(this);\r\n }\r\n\r\n if (typeof body !== \"function\") {\r\n return this;\r\n }\r\n\r\n body(this);\r\n\r\n if (doSwitch) {\r\n compatAPI.call(this);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches to \"compat\" API mode. See {@link advancedAPI} for more details.\r\n *\r\n * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n * The API mode will be switched back automatically afterwards.\r\n * @return {jsPDF}\r\n * @memberof jsPDF#\r\n * @name compatApi\r\n */\r\n API.compatAPI = function(body) {\r\n var doSwitch = apiMode === ApiMode.ADVANCED;\r\n\r\n if (doSwitch) {\r\n compatAPI.call(this);\r\n }\r\n\r\n if (typeof body !== \"function\") {\r\n return this;\r\n }\r\n\r\n body(this);\r\n\r\n if (doSwitch) {\r\n advancedAPI.call(this);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * @return {boolean} True iff the current API mode is \"advanced\". See {@link advancedAPI}.\r\n * @memberof jsPDF#\r\n * @name isAdvancedAPI\r\n */\r\n API.isAdvancedAPI = function() {\r\n return apiMode === ApiMode.ADVANCED;\r\n };\r\n\r\n var advancedApiModeTrap = function(methodName) {\r\n if (apiMode !== ApiMode.ADVANCED) {\r\n throw new Error(\r\n methodName +\r\n \" is only available in 'advanced' API mode. \" +\r\n \"You need to call advancedAPI() first.\"\r\n );\r\n }\r\n };\r\n\r\n var roundToPrecision = (API.roundToPrecision = API.__private__.roundToPrecision = function(\r\n number,\r\n parmPrecision\r\n ) {\r\n var tmpPrecision = precision || parmPrecision;\r\n if (isNaN(number) || isNaN(tmpPrecision)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");\r\n }\r\n return number.toFixed(tmpPrecision).replace(/0+$/, \"\");\r\n });\r\n\r\n // high precision float\r\n var hpf;\r\n if (typeof floatPrecision === \"number\") {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n return roundToPrecision(number, floatPrecision);\r\n };\r\n } else if (floatPrecision === \"smart\") {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n if (number > -1 && number < 1) {\r\n return roundToPrecision(number, 16);\r\n } else {\r\n return roundToPrecision(number, 5);\r\n }\r\n };\r\n } else {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n return roundToPrecision(number, 16);\r\n };\r\n }\r\n var f2 = (API.f2 = API.__private__.f2 = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.f2\");\r\n }\r\n return roundToPrecision(number, 2);\r\n });\r\n\r\n var f3 = (API.__private__.f3 = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.f3\");\r\n }\r\n return roundToPrecision(number, 3);\r\n });\r\n\r\n var scale = (API.scale = API.__private__.scale = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.scale\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return number * scaleFactor;\r\n } else if (apiMode === ApiMode.ADVANCED) {\r\n return number;\r\n }\r\n });\r\n\r\n var transformY = function(y) {\r\n if (apiMode === ApiMode.COMPAT) {\r\n return getPageHeight() - y;\r\n } else if (apiMode === ApiMode.ADVANCED) {\r\n return y;\r\n }\r\n };\r\n\r\n var transformScaleY = function(y) {\r\n return scale(transformY(y));\r\n };\r\n\r\n /**\r\n * @name setPrecision\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {string} precision\r\n * @returns {jsPDF}\r\n */\r\n API.__private__.setPrecision = API.setPrecision = function(value) {\r\n if (typeof parseInt(value, 10) === \"number\") {\r\n precision = parseInt(value, 10);\r\n }\r\n };\r\n\r\n var fileId = \"00000000000000000000000000000000\";\r\n\r\n var getFileId = (API.__private__.getFileId = function() {\r\n return fileId;\r\n });\r\n\r\n var setFileId = (API.__private__.setFileId = function(value) {\r\n if (typeof value !== \"undefined\" && /^[a-fA-F0-9]{32}$/.test(value)) {\r\n fileId = value.toUpperCase();\r\n } else {\r\n fileId = fileId\r\n .split(\"\")\r\n .map(function() {\r\n return \"ABCDEF0123456789\".charAt(Math.floor(Math.random() * 16));\r\n })\r\n .join(\"\");\r\n }\r\n\r\n if (encryptionOptions !== null) {\r\n encryption = new PDFSecurity(\r\n encryptionOptions.userPermissions,\r\n encryptionOptions.userPassword,\r\n encryptionOptions.ownerPassword,\r\n fileId\r\n );\r\n }\r\n return fileId;\r\n });\r\n\r\n /**\r\n * @name setFileId\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {string} value GUID.\r\n * @returns {jsPDF}\r\n */\r\n API.setFileId = function(value) {\r\n setFileId(value);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name getFileId\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n *\r\n * @returns {string} GUID.\r\n */\r\n API.getFileId = function() {\r\n return getFileId();\r\n };\r\n\r\n var creationDate;\r\n\r\n var convertDateToPDFDate = (API.__private__.convertDateToPDFDate = function(\r\n parmDate\r\n ) {\r\n var result = \"\";\r\n var tzoffset = parmDate.getTimezoneOffset(),\r\n tzsign = tzoffset < 0 ? \"+\" : \"-\",\r\n tzhour = Math.floor(Math.abs(tzoffset / 60)),\r\n tzmin = Math.abs(tzoffset % 60),\r\n timeZoneString = [tzsign, padd2(tzhour), \"'\", padd2(tzmin), \"'\"].join(\"\");\r\n\r\n result = [\r\n \"D:\",\r\n parmDate.getFullYear(),\r\n padd2(parmDate.getMonth() + 1),\r\n padd2(parmDate.getDate()),\r\n padd2(parmDate.getHours()),\r\n padd2(parmDate.getMinutes()),\r\n padd2(parmDate.getSeconds()),\r\n timeZoneString\r\n ].join(\"\");\r\n return result;\r\n });\r\n\r\n var convertPDFDateToDate = (API.__private__.convertPDFDateToDate = function(\r\n parmPDFDate\r\n ) {\r\n var year = parseInt(parmPDFDate.substr(2, 4), 10);\r\n var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1;\r\n var date = parseInt(parmPDFDate.substr(8, 2), 10);\r\n var hour = parseInt(parmPDFDate.substr(10, 2), 10);\r\n var minutes = parseInt(parmPDFDate.substr(12, 2), 10);\r\n var seconds = parseInt(parmPDFDate.substr(14, 2), 10);\r\n // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10);\r\n // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10);\r\n\r\n var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0);\r\n return resultingDate;\r\n });\r\n\r\n var setCreationDate = (API.__private__.setCreationDate = function(date) {\r\n var tmpCreationDateString;\r\n var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/;\r\n if (typeof date === \"undefined\") {\r\n date = new Date();\r\n }\r\n\r\n if (date instanceof Date) {\r\n tmpCreationDateString = convertDateToPDFDate(date);\r\n } else if (regexPDFCreationDate.test(date)) {\r\n tmpCreationDateString = date;\r\n } else {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");\r\n }\r\n creationDate = tmpCreationDateString;\r\n return creationDate;\r\n });\r\n\r\n var getCreationDate = (API.__private__.getCreationDate = function(type) {\r\n var result = creationDate;\r\n if (type === \"jsDate\") {\r\n result = convertPDFDateToDate(creationDate);\r\n }\r\n return result;\r\n });\r\n\r\n /**\r\n * @name setCreationDate\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {Object} date\r\n * @returns {jsPDF}\r\n */\r\n API.setCreationDate = function(date) {\r\n setCreationDate(date);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name getCreationDate\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {Object} type\r\n * @returns {Object}\r\n */\r\n API.getCreationDate = function(type) {\r\n return getCreationDate(type);\r\n };\r\n\r\n var padd2 = (API.__private__.padd2 = function(number) {\r\n return (\"0\" + parseInt(number)).slice(-2);\r\n });\r\n\r\n var padd2Hex = (API.__private__.padd2Hex = function(hexString) {\r\n hexString = hexString.toString();\r\n return (\"00\" + hexString).substr(hexString.length);\r\n });\r\n\r\n var objectNumber = 0; // 'n' Current object number\r\n var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes.\r\n var content = [];\r\n var contentLength = 0;\r\n var additionalObjects = [];\r\n\r\n var pages = [];\r\n var currentPage;\r\n var hasCustomDestination = false;\r\n var outputDestination = content;\r\n\r\n var resetDocument = function() {\r\n //reset fields relevant for objectNumber generation and xref.\r\n objectNumber = 0;\r\n contentLength = 0;\r\n content = [];\r\n offsets = [];\r\n additionalObjects = [];\r\n\r\n rootDictionaryObjId = newObjectDeferred();\r\n resourceDictionaryObjId = newObjectDeferred();\r\n };\r\n\r\n API.__private__.setCustomOutputDestination = function(destination) {\r\n hasCustomDestination = true;\r\n outputDestination = destination;\r\n };\r\n var setOutputDestination = function(destination) {\r\n if (!hasCustomDestination) {\r\n outputDestination = destination;\r\n }\r\n };\r\n\r\n API.__private__.resetCustomOutputDestination = function() {\r\n hasCustomDestination = false;\r\n outputDestination = content;\r\n };\r\n\r\n var out = (API.__private__.out = function(string) {\r\n string = string.toString();\r\n contentLength += string.length + 1;\r\n outputDestination.push(string);\r\n\r\n return outputDestination;\r\n });\r\n\r\n var write = (API.__private__.write = function(value) {\r\n return out(\r\n arguments.length === 1\r\n ? value.toString()\r\n : Array.prototype.join.call(arguments, \" \")\r\n );\r\n });\r\n\r\n var getArrayBuffer = (API.__private__.getArrayBuffer = function(data) {\r\n var len = data.length,\r\n ab = new ArrayBuffer(len),\r\n u8 = new Uint8Array(ab);\r\n\r\n while (len--) u8[len] = data.charCodeAt(len);\r\n return ab;\r\n });\r\n\r\n var standardFonts = [\r\n [\"Helvetica\", \"helvetica\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-Bold\", \"helvetica\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-Oblique\", \"helvetica\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-BoldOblique\", \"helvetica\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"Courier\", \"courier\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Courier-Bold\", \"courier\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Courier-Oblique\", \"courier\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Courier-BoldOblique\", \"courier\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"Times-Roman\", \"times\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Times-Bold\", \"times\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Times-Italic\", \"times\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Times-BoldItalic\", \"times\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"ZapfDingbats\", \"zapfdingbats\", \"normal\", null],\r\n [\"Symbol\", \"symbol\", \"normal\", null]\r\n ];\r\n\r\n API.__private__.getStandardFonts = function() {\r\n return standardFonts;\r\n };\r\n\r\n var activeFontSize = options.fontSize || 16;\r\n\r\n /**\r\n * Sets font size for upcoming text elements.\r\n *\r\n * @param {number} size Font size in points.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFontSize\r\n */\r\n API.__private__.setFontSize = API.setFontSize = function(size) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n activeFontSize = size / scaleFactor;\r\n } else {\r\n activeFontSize = size;\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the fontsize for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number}\r\n * @memberof jsPDF#\r\n * @name getFontSize\r\n */\r\n var getFontSize = (API.__private__.getFontSize = API.getFontSize = function() {\r\n if (apiMode === ApiMode.COMPAT) {\r\n return activeFontSize;\r\n } else {\r\n return activeFontSize * scaleFactor;\r\n }\r\n });\r\n\r\n var R2L = options.R2L || false;\r\n\r\n /**\r\n * Set value of R2L functionality.\r\n *\r\n * @param {boolean} value\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setR2L\r\n */\r\n API.__private__.setR2L = API.setR2L = function(value) {\r\n R2L = value;\r\n return this;\r\n };\r\n\r\n /**\r\n * Get value of R2L functionality.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {boolean} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name getR2L\r\n */\r\n API.__private__.getR2L = API.getR2L = function() {\r\n return R2L;\r\n };\r\n\r\n var zoomMode; // default: 1;\r\n\r\n var setZoomMode = (API.__private__.setZoomMode = function(zoom) {\r\n var validZoomModes = [\r\n undefined,\r\n null,\r\n \"fullwidth\",\r\n \"fullheight\",\r\n \"fullpage\",\r\n \"original\"\r\n ];\r\n\r\n if (/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(zoom)) {\r\n zoomMode = zoom;\r\n } else if (!isNaN(zoom)) {\r\n zoomMode = parseInt(zoom, 10);\r\n } else if (validZoomModes.indexOf(zoom) !== -1) {\r\n zoomMode = zoom;\r\n } else {\r\n throw new Error(\r\n 'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"' +\r\n zoom +\r\n '\" is not recognized.'\r\n );\r\n }\r\n });\r\n\r\n API.__private__.getZoomMode = function() {\r\n return zoomMode;\r\n };\r\n\r\n var pageMode; // default: 'UseOutlines';\r\n var setPageMode = (API.__private__.setPageMode = function(pmode) {\r\n var validPageModes = [\r\n undefined,\r\n null,\r\n \"UseNone\",\r\n \"UseOutlines\",\r\n \"UseThumbs\",\r\n \"FullScreen\"\r\n ];\r\n\r\n if (validPageModes.indexOf(pmode) == -1) {\r\n throw new Error(\r\n 'Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"' +\r\n pmode +\r\n '\" is not recognized.'\r\n );\r\n }\r\n pageMode = pmode;\r\n });\r\n\r\n API.__private__.getPageMode = function() {\r\n return pageMode;\r\n };\r\n\r\n var layoutMode; // default: 'continuous';\r\n var setLayoutMode = (API.__private__.setLayoutMode = function(layout) {\r\n var validLayoutModes = [\r\n undefined,\r\n null,\r\n \"continuous\",\r\n \"single\",\r\n \"twoleft\",\r\n \"tworight\",\r\n \"two\"\r\n ];\r\n\r\n if (validLayoutModes.indexOf(layout) == -1) {\r\n throw new Error(\r\n 'Layout mode must be one of continuous, single, twoleft, tworight. \"' +\r\n layout +\r\n '\" is not recognized.'\r\n );\r\n }\r\n layoutMode = layout;\r\n });\r\n\r\n API.__private__.getLayoutMode = function() {\r\n return layoutMode;\r\n };\r\n\r\n /**\r\n * Set the display mode options of the page like zoom and layout.\r\n *\r\n * @name setDisplayMode\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {integer|String} zoom You can pass an integer or percentage as\r\n * a string. 2 will scale the document up 2x, '200%' will scale up by the\r\n * same amount. You can also set it to 'fullwidth', 'fullheight',\r\n * 'fullpage', or 'original'.\r\n *\r\n * Only certain PDF readers support this, such as Adobe Acrobat.\r\n *\r\n * @param {string} layout Layout mode can be: 'continuous' - this is the\r\n * default continuous scroll. 'single' - the single page mode only shows one\r\n * page at a time. 'twoleft' - two column left mode, first page starts on\r\n * the left, and 'tworight' - pages are laid out in two columns, with the\r\n * first page on the right. This would be used for books.\r\n * @param {string} pmode 'UseOutlines' - it shows the\r\n * outline of the document on the left. 'UseThumbs' - shows thumbnails along\r\n * the left. 'FullScreen' - prompts the user to enter fullscreen mode.\r\n *\r\n * @returns {jsPDF}\r\n */\r\n API.__private__.setDisplayMode = API.setDisplayMode = function(\r\n zoom,\r\n layout,\r\n pmode\r\n ) {\r\n setZoomMode(zoom);\r\n setLayoutMode(layout);\r\n setPageMode(pmode);\r\n return this;\r\n };\r\n\r\n var documentProperties = {\r\n title: \"\",\r\n subject: \"\",\r\n author: \"\",\r\n keywords: \"\",\r\n creator: \"\"\r\n };\r\n\r\n API.__private__.getDocumentProperty = function(key) {\r\n if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");\r\n }\r\n return documentProperties[key];\r\n };\r\n\r\n API.__private__.getDocumentProperties = function() {\r\n return documentProperties;\r\n };\r\n\r\n /**\r\n * Adds a properties to the PDF document.\r\n *\r\n * @param {Object} A property_name-to-property_value object structure.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDocumentProperties\r\n */\r\n API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function(\r\n properties\r\n ) {\r\n // copying only those properties we can render.\r\n for (var property in documentProperties) {\r\n if (documentProperties.hasOwnProperty(property) && properties[property]) {\r\n documentProperties[property] = properties[property];\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n API.__private__.setDocumentProperty = function(key, value) {\r\n if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");\r\n }\r\n return (documentProperties[key] = value);\r\n };\r\n\r\n var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font.\r\n var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont()\r\n var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle\r\n var fontStateStack = []; //\r\n var patterns = {}; // collection of pattern objects\r\n var patternMap = {}; // see fonts\r\n var gStates = {}; // collection of graphic state objects\r\n var gStatesMap = {}; // see fonts\r\n var activeGState = null;\r\n var scaleFactor; // Scale factor\r\n var page = 0;\r\n var pagesContext = [];\r\n var events = new PubSub(API);\r\n var hotfixes = options.hotfixes || [];\r\n\r\n var renderTargets = {};\r\n var renderTargetMap = {};\r\n var renderTargetStack = [];\r\n var pageX;\r\n var pageY;\r\n var pageMatrix; // only used for FormObjects\r\n\r\n /**\r\n * A matrix object for 2D homogenous transformations:
    \r\n * | a b 0 |
    \r\n * | c d 0 |
    \r\n * | e f 1 |
    \r\n * pdf multiplies matrices righthand: v' = v x m1 x m2 x ...\r\n *\r\n * @class\r\n * @name Matrix\r\n * @param {number} sx\r\n * @param {number} shy\r\n * @param {number} shx\r\n * @param {number} sy\r\n * @param {number} tx\r\n * @param {number} ty\r\n * @constructor\r\n */\r\n var Matrix = function(sx, shy, shx, sy, tx, ty) {\r\n if (!(this instanceof Matrix)) {\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n }\r\n\r\n if (isNaN(sx)) sx = 1;\r\n if (isNaN(shy)) shy = 0;\r\n if (isNaN(shx)) shx = 0;\r\n if (isNaN(sy)) sy = 1;\r\n if (isNaN(tx)) tx = 0;\r\n if (isNaN(ty)) ty = 0;\r\n\r\n this._matrix = [sx, shy, shx, sy, tx, ty];\r\n };\r\n\r\n /**\r\n * @name sx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"sx\", {\r\n get: function() {\r\n return this._matrix[0];\r\n },\r\n set: function(value) {\r\n this._matrix[0] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name shy\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"shy\", {\r\n get: function() {\r\n return this._matrix[1];\r\n },\r\n set: function(value) {\r\n this._matrix[1] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name shx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"shx\", {\r\n get: function() {\r\n return this._matrix[2];\r\n },\r\n set: function(value) {\r\n this._matrix[2] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name sy\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"sy\", {\r\n get: function() {\r\n return this._matrix[3];\r\n },\r\n set: function(value) {\r\n this._matrix[3] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name tx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"tx\", {\r\n get: function() {\r\n return this._matrix[4];\r\n },\r\n set: function(value) {\r\n this._matrix[4] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ty\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"ty\", {\r\n get: function() {\r\n return this._matrix[5];\r\n },\r\n set: function(value) {\r\n this._matrix[5] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"a\", {\r\n get: function() {\r\n return this._matrix[0];\r\n },\r\n set: function(value) {\r\n this._matrix[0] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"b\", {\r\n get: function() {\r\n return this._matrix[1];\r\n },\r\n set: function(value) {\r\n this._matrix[1] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"c\", {\r\n get: function() {\r\n return this._matrix[2];\r\n },\r\n set: function(value) {\r\n this._matrix[2] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"d\", {\r\n get: function() {\r\n return this._matrix[3];\r\n },\r\n set: function(value) {\r\n this._matrix[3] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"e\", {\r\n get: function() {\r\n return this._matrix[4];\r\n },\r\n set: function(value) {\r\n this._matrix[4] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"f\", {\r\n get: function() {\r\n return this._matrix[5];\r\n },\r\n set: function(value) {\r\n this._matrix[5] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name rotation\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"rotation\", {\r\n get: function() {\r\n return Math.atan2(this.shx, this.sx);\r\n }\r\n });\r\n\r\n /**\r\n * @name scaleX\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"scaleX\", {\r\n get: function() {\r\n return this.decompose().scale.sx;\r\n }\r\n });\r\n\r\n /**\r\n * @name scaleY\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"scaleY\", {\r\n get: function() {\r\n return this.decompose().scale.sy;\r\n }\r\n });\r\n\r\n /**\r\n * @name isIdentity\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"isIdentity\", {\r\n get: function() {\r\n if (this.sx !== 1) {\r\n return false;\r\n }\r\n if (this.shy !== 0) {\r\n return false;\r\n }\r\n if (this.shx !== 0) {\r\n return false;\r\n }\r\n if (this.sy !== 1) {\r\n return false;\r\n }\r\n if (this.tx !== 0) {\r\n return false;\r\n }\r\n if (this.ty !== 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n /**\r\n * Join the Matrix Values to a String\r\n *\r\n * @function join\r\n * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (\",\"). If separator is an empty string, all elements are joined without any characters in between them.\r\n * @returns {string} A string with all array elements joined.\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.join = function(separator) {\r\n return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty]\r\n .map(hpf)\r\n .join(separator);\r\n };\r\n\r\n /**\r\n * Multiply the matrix with given Matrix\r\n *\r\n * @function multiply\r\n * @param matrix\r\n * @returns {Matrix}\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.multiply = function(matrix) {\r\n var sx = matrix.sx * this.sx + matrix.shy * this.shx;\r\n var shy = matrix.sx * this.shy + matrix.shy * this.sy;\r\n var shx = matrix.shx * this.sx + matrix.sy * this.shx;\r\n var sy = matrix.shx * this.shy + matrix.sy * this.sy;\r\n var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx;\r\n var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty;\r\n\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n };\r\n\r\n /**\r\n * @function decompose\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.decompose = function() {\r\n var a = this.sx;\r\n var b = this.shy;\r\n var c = this.shx;\r\n var d = this.sy;\r\n var e = this.tx;\r\n var f = this.ty;\r\n\r\n var scaleX = Math.sqrt(a * a + b * b);\r\n a /= scaleX;\r\n b /= scaleX;\r\n\r\n var shear = a * c + b * d;\r\n c -= a * shear;\r\n d -= b * shear;\r\n\r\n var scaleY = Math.sqrt(c * c + d * d);\r\n c /= scaleY;\r\n d /= scaleY;\r\n shear /= scaleY;\r\n\r\n if (a * d < b * c) {\r\n a = -a;\r\n b = -b;\r\n shear = -shear;\r\n scaleX = -scaleX;\r\n }\r\n\r\n return {\r\n scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0),\r\n translate: new Matrix(1, 0, 0, 1, e, f),\r\n rotate: new Matrix(a, b, -b, a, 0, 0),\r\n skew: new Matrix(1, 0, shear, 1, 0, 0)\r\n };\r\n };\r\n\r\n /**\r\n * @function toString\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.toString = function(parmPrecision) {\r\n return this.join(\" \");\r\n };\r\n\r\n /**\r\n * @function inversed\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.inversed = function() {\r\n var a = this.sx,\r\n b = this.shy,\r\n c = this.shx,\r\n d = this.sy,\r\n e = this.tx,\r\n f = this.ty;\r\n\r\n var quot = 1 / (a * d - b * c);\r\n\r\n var aInv = d * quot;\r\n var bInv = -b * quot;\r\n var cInv = -c * quot;\r\n var dInv = a * quot;\r\n var eInv = -aInv * e - cInv * f;\r\n var fInv = -bInv * e - dInv * f;\r\n\r\n return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv);\r\n };\r\n\r\n /**\r\n * @function applyToPoint\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.applyToPoint = function(pt) {\r\n var x = pt.x * this.sx + pt.y * this.shx + this.tx;\r\n var y = pt.x * this.shy + pt.y * this.sy + this.ty;\r\n return new Point(x, y);\r\n };\r\n\r\n /**\r\n * @function applyToRectangle\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.applyToRectangle = function(rect) {\r\n var pt1 = this.applyToPoint(rect);\r\n var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h));\r\n return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y);\r\n };\r\n\r\n /**\r\n * Clone the Matrix\r\n *\r\n * @function clone\r\n * @memberof Matrix#\r\n * @name clone\r\n * @instance\r\n */\r\n Matrix.prototype.clone = function() {\r\n var sx = this.sx;\r\n var shy = this.shy;\r\n var shx = this.shx;\r\n var sy = this.sy;\r\n var tx = this.tx;\r\n var ty = this.ty;\r\n\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n };\r\n\r\n API.Matrix = Matrix;\r\n\r\n /**\r\n * Multiplies two matrices. (see {@link Matrix})\r\n * @param {Matrix} m1\r\n * @param {Matrix} m2\r\n * @memberof jsPDF#\r\n * @name matrixMult\r\n */\r\n var matrixMult = (API.matrixMult = function(m1, m2) {\r\n return m2.multiply(m1);\r\n });\r\n\r\n /**\r\n * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)).\r\n * @type {Matrix}\r\n * @memberof! jsPDF#\r\n * @name identityMatrix\r\n */\r\n var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0);\r\n API.unitMatrix = API.identityMatrix = identityMatrix;\r\n\r\n /**\r\n * Adds a new pattern for later use.\r\n * @param {String} key The key by it can be referenced later. The keys must be unique!\r\n * @param {API.Pattern} pattern The pattern\r\n */\r\n var addPattern = function(key, pattern) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (patternMap[key]) return;\r\n\r\n var prefix = pattern instanceof ShadingPattern ? \"Sh\" : \"P\";\r\n var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10);\r\n pattern.id = patternKey;\r\n\r\n patternMap[key] = patternKey;\r\n patterns[patternKey] = pattern;\r\n\r\n events.publish(\"addPattern\", pattern);\r\n };\r\n\r\n /**\r\n * A pattern describing a shading pattern.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {String} type One of \"axial\" or \"radial\"\r\n * @param {Array} coords Either [x1, y1, x2, y2] for \"axial\" type describing the two interpolation points\r\n * or [x1, y1, r, x2, y2, r2] for \"radial\" describing inner and the outer circle.\r\n * @param {Array} colors An array of objects with the fields \"offset\" and \"color\". \"offset\" describes\r\n * the offset in parameter space [0, 1]. \"color\" is an array of length 3 describing RGB values in [0, 255].\r\n * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n * and the use coordinate system (optional).\r\n * @constructor\r\n * @extends API.Pattern\r\n */\r\n API.ShadingPattern = ShadingPattern;\r\n\r\n /**\r\n * A PDF Tiling pattern.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {Array.} boundingBox The bounding box at which one pattern cell gets clipped.\r\n * @param {Number} xStep Horizontal spacing between pattern cells.\r\n * @param {Number} yStep Vertical spacing between pattern cells.\r\n * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n * and the use coordinate system (optional).\r\n * @constructor\r\n * @extends API.Pattern\r\n */\r\n API.TilingPattern = TilingPattern;\r\n\r\n /**\r\n * Adds a new {@link API.ShadingPattern} for later use. Only available in \"advanced\" API mode.\r\n * @param {String} key\r\n * @param {Pattern} pattern\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name addPattern\r\n */\r\n API.addShadingPattern = function(key, pattern) {\r\n advancedApiModeTrap(\"addShadingPattern()\");\r\n\r\n addPattern(key, pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern}\r\n * gets called. Only available in \"advanced\" API mode.\r\n * @param {API.Pattern} pattern\r\n * @memberof jsPDF#\r\n * @name beginTilingPattern\r\n */\r\n API.beginTilingPattern = function(pattern) {\r\n advancedApiModeTrap(\"beginTilingPattern()\");\r\n\r\n beginNewRenderTarget(\r\n pattern.boundingBox[0],\r\n pattern.boundingBox[1],\r\n pattern.boundingBox[2] - pattern.boundingBox[0],\r\n pattern.boundingBox[3] - pattern.boundingBox[1],\r\n pattern.matrix\r\n );\r\n };\r\n\r\n /**\r\n * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {string} key A unique key that is used to reference this pattern at later use.\r\n * @param {API.Pattern} pattern The pattern to end.\r\n * @memberof jsPDF#\r\n * @name endTilingPattern\r\n */\r\n API.endTilingPattern = function(key, pattern) {\r\n advancedApiModeTrap(\"endTilingPattern()\");\r\n\r\n // retrieve the stream\r\n pattern.stream = pages[currentPage].join(\"\\n\");\r\n\r\n addPattern(key, pattern);\r\n\r\n events.publish(\"endTilingPattern\", pattern);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n var newObject = (API.__private__.newObject = function() {\r\n var oid = newObjectDeferred();\r\n newObjectDeferredBegin(oid, true);\r\n return oid;\r\n });\r\n\r\n // Does not output the object. The caller must call newObjectDeferredBegin(oid) before outputing any data\r\n var newObjectDeferred = (API.__private__.newObjectDeferred = function() {\r\n objectNumber++;\r\n offsets[objectNumber] = function() {\r\n return contentLength;\r\n };\r\n return objectNumber;\r\n });\r\n\r\n var newObjectDeferredBegin = function(oid, doOutput) {\r\n doOutput = typeof doOutput === \"boolean\" ? doOutput : false;\r\n offsets[oid] = contentLength;\r\n if (doOutput) {\r\n out(oid + \" 0 obj\");\r\n }\r\n return oid;\r\n };\r\n // Does not output the object until after the pages have been output.\r\n // Returns an object containing the objectId and content.\r\n // All pages have been added so the object ID can be estimated to start right after.\r\n // This does not modify the current objectNumber; It must be updated after the newObjects are output.\r\n var newAdditionalObject = (API.__private__.newAdditionalObject = function() {\r\n var objId = newObjectDeferred();\r\n var obj = {\r\n objId: objId,\r\n content: \"\"\r\n };\r\n additionalObjects.push(obj);\r\n return obj;\r\n });\r\n\r\n var rootDictionaryObjId = newObjectDeferred();\r\n var resourceDictionaryObjId = newObjectDeferred();\r\n\r\n /////////////////////\r\n // Private functions\r\n /////////////////////\r\n\r\n var decodeColorString = (API.__private__.decodeColorString = function(color) {\r\n var colorEncoded = color.split(\" \");\r\n if (\r\n colorEncoded.length === 2 &&\r\n (colorEncoded[1] === \"g\" || colorEncoded[1] === \"G\")\r\n ) {\r\n // convert grayscale value to rgb so that it can be converted to hex for consistency\r\n var floatVal = parseFloat(colorEncoded[0]);\r\n colorEncoded = [floatVal, floatVal, floatVal, \"r\"];\r\n } else if (\r\n colorEncoded.length === 5 &&\r\n (colorEncoded[4] === \"k\" || colorEncoded[4] === \"K\")\r\n ) {\r\n // convert CMYK values to rbg so that it can be converted to hex for consistency\r\n var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]);\r\n var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]);\r\n var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]);\r\n\r\n colorEncoded = [red, green, blue, \"r\"];\r\n }\r\n var colorAsRGB = \"#\";\r\n for (var i = 0; i < 3; i++) {\r\n colorAsRGB += (\r\n \"0\" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16)\r\n ).slice(-2);\r\n }\r\n return colorAsRGB;\r\n });\r\n\r\n var encodeColorString = (API.__private__.encodeColorString = function(\r\n options\r\n ) {\r\n var color;\r\n\r\n if (typeof options === \"string\") {\r\n options = {\r\n ch1: options\r\n };\r\n }\r\n var ch1 = options.ch1;\r\n var ch2 = options.ch2;\r\n var ch3 = options.ch3;\r\n var ch4 = options.ch4;\r\n var letterArray =\r\n options.pdfColorType === \"draw\" ? [\"G\", \"RG\", \"K\"] : [\"g\", \"rg\", \"k\"];\r\n\r\n if (typeof ch1 === \"string\" && ch1.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(ch1);\r\n if (rgbColor.ok) {\r\n ch1 = rgbColor.toHex();\r\n } else if (!/^\\d*\\.?\\d*$/.test(ch1)) {\r\n throw new Error(\r\n 'Invalid color \"' + ch1 + '\" passed to jsPDF.encodeColorString.'\r\n );\r\n }\r\n }\r\n //convert short rgb to long form\r\n if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) {\r\n ch1 = \"#\" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3];\r\n }\r\n\r\n if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) {\r\n var hex = parseInt(ch1.substr(1), 16);\r\n ch1 = (hex >> 16) & 255;\r\n ch2 = (hex >> 8) & 255;\r\n ch3 = hex & 255;\r\n }\r\n\r\n if (\r\n typeof ch2 === \"undefined\" ||\r\n (typeof ch4 === \"undefined\" && ch1 === ch2 && ch2 === ch3)\r\n ) {\r\n // Gray color space.\r\n if (typeof ch1 === \"string\") {\r\n color = ch1 + \" \" + letterArray[0];\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = f2(ch1 / 255) + \" \" + letterArray[0];\r\n break;\r\n case 3:\r\n default:\r\n color = f3(ch1 / 255) + \" \" + letterArray[0];\r\n }\r\n }\r\n } else if (typeof ch4 === \"undefined\" || typeof ch4 === \"object\") {\r\n // assume RGBA\r\n if (ch4 && !isNaN(ch4.a)) {\r\n //TODO Implement transparency.\r\n //WORKAROUND use white for now, if transparent, otherwise handle as rgb\r\n if (ch4.a === 0) {\r\n color = [\"1.\", \"1.\", \"1.\", letterArray[1]].join(\" \");\r\n return color;\r\n }\r\n }\r\n // assume RGB\r\n if (typeof ch1 === \"string\") {\r\n color = [ch1, ch2, ch3, letterArray[1]].join(\" \");\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = [\r\n f2(ch1 / 255),\r\n f2(ch2 / 255),\r\n f2(ch3 / 255),\r\n letterArray[1]\r\n ].join(\" \");\r\n break;\r\n default:\r\n case 3:\r\n color = [\r\n f3(ch1 / 255),\r\n f3(ch2 / 255),\r\n f3(ch3 / 255),\r\n letterArray[1]\r\n ].join(\" \");\r\n }\r\n }\r\n } else {\r\n // assume CMYK\r\n if (typeof ch1 === \"string\") {\r\n color = [ch1, ch2, ch3, ch4, letterArray[2]].join(\" \");\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(\r\n \" \"\r\n );\r\n break;\r\n case 3:\r\n default:\r\n color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(\r\n \" \"\r\n );\r\n }\r\n }\r\n }\r\n return color;\r\n });\r\n\r\n var getFilters = (API.__private__.getFilters = function() {\r\n return filters;\r\n });\r\n\r\n var putStream = (API.__private__.putStream = function(options) {\r\n options = options || {};\r\n var data = options.data || \"\";\r\n var filters = options.filters || getFilters();\r\n var alreadyAppliedFilters = options.alreadyAppliedFilters || [];\r\n var addLength1 = options.addLength1 || false;\r\n var valueOfLength1 = data.length;\r\n var objectId = options.objectId;\r\n var encryptor = function(data) {\r\n return data;\r\n };\r\n if (encryptionOptions !== null && typeof objectId == \"undefined\") {\r\n throw new Error(\r\n \"ObjectId must be passed to putStream for file encryption\"\r\n );\r\n }\r\n if (encryptionOptions !== null) {\r\n encryptor = encryption.encryptor(objectId, 0);\r\n }\r\n\r\n var processedData = {};\r\n if (filters === true) {\r\n filters = [\"FlateEncode\"];\r\n }\r\n var keyValues = options.additionalKeyValues || [];\r\n if (typeof jsPDF.API.processDataByFilters !== \"undefined\") {\r\n processedData = jsPDF.API.processDataByFilters(data, filters);\r\n } else {\r\n processedData = { data: data, reverseChain: [] };\r\n }\r\n var filterAsString =\r\n processedData.reverseChain +\r\n (Array.isArray(alreadyAppliedFilters)\r\n ? alreadyAppliedFilters.join(\" \")\r\n : alreadyAppliedFilters.toString());\r\n\r\n if (processedData.data.length !== 0) {\r\n keyValues.push({\r\n key: \"Length\",\r\n value: processedData.data.length\r\n });\r\n if (addLength1 === true) {\r\n keyValues.push({\r\n key: \"Length1\",\r\n value: valueOfLength1\r\n });\r\n }\r\n }\r\n\r\n if (filterAsString.length != 0) {\r\n if (filterAsString.split(\"/\").length - 1 === 1) {\r\n keyValues.push({\r\n key: \"Filter\",\r\n value: filterAsString\r\n });\r\n } else {\r\n keyValues.push({\r\n key: \"Filter\",\r\n value: \"[\" + filterAsString + \"]\"\r\n });\r\n\r\n for (var j = 0; j < keyValues.length; j += 1) {\r\n if (keyValues[j].key === \"DecodeParms\") {\r\n var decodeParmsArray = [];\r\n\r\n for (\r\n var i = 0;\r\n i < processedData.reverseChain.split(\"/\").length - 1;\r\n i += 1\r\n ) {\r\n decodeParmsArray.push(\"null\");\r\n }\r\n\r\n decodeParmsArray.push(keyValues[j].value);\r\n keyValues[j].value = \"[\" + decodeParmsArray.join(\" \") + \"]\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n out(\"<<\");\r\n for (var k = 0; k < keyValues.length; k++) {\r\n out(\"/\" + keyValues[k].key + \" \" + keyValues[k].value);\r\n }\r\n out(\">>\");\r\n if (processedData.data.length !== 0) {\r\n out(\"stream\");\r\n out(encryptor(processedData.data));\r\n out(\"endstream\");\r\n }\r\n });\r\n\r\n var putPage = (API.__private__.putPage = function(page) {\r\n var pageNumber = page.number;\r\n var data = page.data;\r\n var pageObjectNumber = page.objId;\r\n var pageContentsObjId = page.contentsObjId;\r\n\r\n newObjectDeferredBegin(pageObjectNumber, true);\r\n out(\"<>\");\r\n out(\"endobj\");\r\n // Page content\r\n var pageContent = data.join(\"\\n\");\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again\r\n pageContent += \"\\nQ\";\r\n }\r\n\r\n newObjectDeferredBegin(pageContentsObjId, true);\r\n putStream({\r\n data: pageContent,\r\n filters: getFilters(),\r\n objectId: pageContentsObjId\r\n });\r\n out(\"endobj\");\r\n return pageObjectNumber;\r\n });\r\n\r\n var putPages = (API.__private__.putPages = function() {\r\n var n,\r\n i,\r\n pageObjectNumbers = [];\r\n\r\n for (n = 1; n <= page; n++) {\r\n pagesContext[n].objId = newObjectDeferred();\r\n pagesContext[n].contentsObjId = newObjectDeferred();\r\n }\r\n\r\n for (n = 1; n <= page; n++) {\r\n pageObjectNumbers.push(\r\n putPage({\r\n number: n,\r\n data: pages[n],\r\n objId: pagesContext[n].objId,\r\n contentsObjId: pagesContext[n].contentsObjId,\r\n mediaBox: pagesContext[n].mediaBox,\r\n cropBox: pagesContext[n].cropBox,\r\n bleedBox: pagesContext[n].bleedBox,\r\n trimBox: pagesContext[n].trimBox,\r\n artBox: pagesContext[n].artBox,\r\n userUnit: pagesContext[n].userUnit,\r\n rootDictionaryObjId: rootDictionaryObjId,\r\n resourceDictionaryObjId: resourceDictionaryObjId\r\n })\r\n );\r\n }\r\n newObjectDeferredBegin(rootDictionaryObjId, true);\r\n out(\"<>\");\r\n out(\"endobj\");\r\n events.publish(\"postPutPages\");\r\n });\r\n\r\n var putFont = function(font) {\r\n events.publish(\"putFont\", {\r\n font: font,\r\n out: out,\r\n newObject: newObject,\r\n putStream: putStream\r\n });\r\n\r\n if (font.isAlreadyPutted !== true) {\r\n font.objectNumber = newObject();\r\n out(\"<<\");\r\n out(\"/Type /Font\");\r\n out(\"/BaseFont /\" + toPDFName(font.postScriptName));\r\n out(\"/Subtype /Type1\");\r\n if (typeof font.encoding === \"string\") {\r\n out(\"/Encoding /\" + font.encoding);\r\n }\r\n out(\"/FirstChar 32\");\r\n out(\"/LastChar 255\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n }\r\n };\r\n\r\n var putFonts = function() {\r\n for (var fontKey in fonts) {\r\n if (fonts.hasOwnProperty(fontKey)) {\r\n if (\r\n putOnlyUsedFonts === false ||\r\n (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n ) {\r\n putFont(fonts[fontKey]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var putXObject = function(xObject) {\r\n xObject.objectNumber = newObject();\r\n\r\n var options = [];\r\n options.push({ key: \"Type\", value: \"/XObject\" });\r\n options.push({ key: \"Subtype\", value: \"/Form\" });\r\n options.push({\r\n key: \"BBox\",\r\n value:\r\n \"[\" +\r\n [\r\n hpf(xObject.x),\r\n hpf(xObject.y),\r\n hpf(xObject.x + xObject.width),\r\n hpf(xObject.y + xObject.height)\r\n ].join(\" \") +\r\n \"]\"\r\n });\r\n options.push({\r\n key: \"Matrix\",\r\n value: \"[\" + xObject.matrix.toString() + \"]\"\r\n });\r\n // TODO: /Resources\r\n\r\n var stream = xObject.pages[1].join(\"\\n\");\r\n putStream({\r\n data: stream,\r\n additionalKeyValues: options,\r\n objectId: xObject.objectNumber\r\n });\r\n out(\"endobj\");\r\n };\r\n\r\n var putXObjects = function() {\r\n for (var xObjectKey in renderTargets) {\r\n if (renderTargets.hasOwnProperty(xObjectKey)) {\r\n putXObject(renderTargets[xObjectKey]);\r\n }\r\n }\r\n };\r\n\r\n var interpolateAndEncodeRGBStream = function(colors, numberSamples) {\r\n var tValues = [];\r\n var t;\r\n var dT = 1.0 / (numberSamples - 1);\r\n for (t = 0.0; t < 1.0; t += dT) {\r\n tValues.push(t);\r\n }\r\n tValues.push(1.0);\r\n // add first and last control point if not present\r\n if (colors[0].offset != 0.0) {\r\n var c0 = {\r\n offset: 0.0,\r\n color: colors[0].color\r\n };\r\n colors.unshift(c0);\r\n }\r\n if (colors[colors.length - 1].offset != 1.0) {\r\n var c1 = {\r\n offset: 1.0,\r\n color: colors[colors.length - 1].color\r\n };\r\n colors.push(c1);\r\n }\r\n var out = \"\";\r\n var index = 0;\r\n\r\n for (var i = 0; i < tValues.length; i++) {\r\n t = tValues[i];\r\n while (t > colors[index + 1].offset) index++;\r\n var a = colors[index].offset;\r\n var b = colors[index + 1].offset;\r\n var d = (t - a) / (b - a);\r\n\r\n var aColor = colors[index].color;\r\n var bColor = colors[index + 1].color;\r\n\r\n out +=\r\n padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) +\r\n padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) +\r\n padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16));\r\n }\r\n return out.trim();\r\n };\r\n\r\n var putShadingPattern = function(pattern, numberSamples) {\r\n /*\r\n Axial patterns shade between the two points specified in coords, radial patterns between the inner\r\n and outer circle.\r\n The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now\r\n interpolated to equidistant samples and written to pdf as a sample (type 0) function.\r\n */\r\n // The number of color samples that should be used to describe the shading.\r\n // The higher, the more accurate the gradient will be.\r\n numberSamples || (numberSamples = 21);\r\n var funcObjectNumber = newObject();\r\n var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples);\r\n\r\n var options = [];\r\n options.push({ key: \"FunctionType\", value: \"0\" });\r\n options.push({ key: \"Domain\", value: \"[0.0 1.0]\" });\r\n options.push({ key: \"Size\", value: \"[\" + numberSamples + \"]\" });\r\n options.push({ key: \"BitsPerSample\", value: \"8\" });\r\n options.push({ key: \"Range\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n options.push({ key: \"Decode\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n\r\n putStream({\r\n data: stream,\r\n additionalKeyValues: options,\r\n alreadyAppliedFilters: [\"/ASCIIHexDecode\"],\r\n objectId: funcObjectNumber\r\n });\r\n out(\"endobj\");\r\n\r\n pattern.objectNumber = newObject();\r\n out(\"<< /ShadingType \" + pattern.type);\r\n out(\"/ColorSpace /DeviceRGB\");\r\n var coords =\r\n \"/Coords [\" +\r\n hpf(parseFloat(pattern.coords[0])) +\r\n \" \" + // x1\r\n hpf(parseFloat(pattern.coords[1])) +\r\n \" \"; // y1\r\n if (pattern.type === 2) {\r\n // axial\r\n coords +=\r\n hpf(parseFloat(pattern.coords[2])) +\r\n \" \" + // x2\r\n hpf(parseFloat(pattern.coords[3])); // y2\r\n } else {\r\n // radial\r\n coords +=\r\n hpf(parseFloat(pattern.coords[2])) +\r\n \" \" + // r1\r\n hpf(parseFloat(pattern.coords[3])) +\r\n \" \" + // x2\r\n hpf(parseFloat(pattern.coords[4])) +\r\n \" \" + // y2\r\n hpf(parseFloat(pattern.coords[5])); // r2\r\n }\r\n coords += \"]\";\r\n out(coords);\r\n\r\n if (pattern.matrix) {\r\n out(\"/Matrix [\" + pattern.matrix.toString() + \"]\");\r\n }\r\n out(\"/Function \" + funcObjectNumber + \" 0 R\");\r\n out(\"/Extend [true true]\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putTilingPattern = function(pattern, deferredResourceDictionaryIds) {\r\n var resourcesObjectId = newObjectDeferred();\r\n var patternObjectId = newObject();\r\n\r\n deferredResourceDictionaryIds.push({\r\n resourcesOid: resourcesObjectId,\r\n objectOid: patternObjectId\r\n });\r\n\r\n pattern.objectNumber = patternObjectId;\r\n var options = [];\r\n options.push({ key: \"Type\", value: \"/Pattern\" });\r\n options.push({ key: \"PatternType\", value: \"1\" }); // tiling pattern\r\n options.push({ key: \"PaintType\", value: \"1\" }); // colored tiling pattern\r\n options.push({ key: \"TilingType\", value: \"1\" }); // constant spacing\r\n options.push({\r\n key: \"BBox\",\r\n value: \"[\" + pattern.boundingBox.map(hpf).join(\" \") + \"]\"\r\n });\r\n options.push({ key: \"XStep\", value: hpf(pattern.xStep) });\r\n options.push({ key: \"YStep\", value: hpf(pattern.yStep) });\r\n options.push({ key: \"Resources\", value: resourcesObjectId + \" 0 R\" });\r\n if (pattern.matrix) {\r\n options.push({\r\n key: \"Matrix\",\r\n value: \"[\" + pattern.matrix.toString() + \"]\"\r\n });\r\n }\r\n\r\n putStream({\r\n data: pattern.stream,\r\n additionalKeyValues: options,\r\n objectId: pattern.objectNumber\r\n });\r\n out(\"endobj\");\r\n };\r\n\r\n var putPatterns = function(deferredResourceDictionaryIds) {\r\n var patternKey;\r\n for (patternKey in patterns) {\r\n if (patterns.hasOwnProperty(patternKey)) {\r\n if (patterns[patternKey] instanceof ShadingPattern) {\r\n putShadingPattern(patterns[patternKey]);\r\n } else if (patterns[patternKey] instanceof TilingPattern) {\r\n putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var putGState = function(gState) {\r\n gState.objectNumber = newObject();\r\n out(\"<<\");\r\n for (var p in gState) {\r\n switch (p) {\r\n case \"opacity\":\r\n out(\"/ca \" + f2(gState[p]));\r\n break;\r\n case \"stroke-opacity\":\r\n out(\"/CA \" + f2(gState[p]));\r\n break;\r\n }\r\n }\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putGStates = function() {\r\n var gStateKey;\r\n for (gStateKey in gStates) {\r\n if (gStates.hasOwnProperty(gStateKey)) {\r\n putGState(gStates[gStateKey]);\r\n }\r\n }\r\n };\r\n\r\n var putXobjectDict = function() {\r\n out(\"/XObject <<\");\r\n for (var xObjectKey in renderTargets) {\r\n if (\r\n renderTargets.hasOwnProperty(xObjectKey) &&\r\n renderTargets[xObjectKey].objectNumber >= 0\r\n ) {\r\n out(\r\n \"/\" +\r\n xObjectKey +\r\n \" \" +\r\n renderTargets[xObjectKey].objectNumber +\r\n \" 0 R\"\r\n );\r\n }\r\n }\r\n\r\n // Loop through images, or other data objects\r\n events.publish(\"putXobjectDict\");\r\n out(\">>\");\r\n };\r\n\r\n var putEncryptionDict = function() {\r\n encryption.oid = newObject();\r\n out(\"<<\");\r\n out(\"/Filter /Standard\");\r\n out(\"/V \" + encryption.v);\r\n out(\"/R \" + encryption.r);\r\n out(\"/U <\" + encryption.toHexString(encryption.U) + \">\");\r\n out(\"/O <\" + encryption.toHexString(encryption.O) + \">\");\r\n out(\"/P \" + encryption.P);\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putFontDict = function() {\r\n out(\"/Font <<\");\r\n\r\n for (var fontKey in fonts) {\r\n if (fonts.hasOwnProperty(fontKey)) {\r\n if (\r\n putOnlyUsedFonts === false ||\r\n (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n ) {\r\n out(\"/\" + fontKey + \" \" + fonts[fontKey].objectNumber + \" 0 R\");\r\n }\r\n }\r\n }\r\n out(\">>\");\r\n };\r\n\r\n var putShadingPatternDict = function() {\r\n if (Object.keys(patterns).length > 0) {\r\n out(\"/Shading <<\");\r\n for (var patternKey in patterns) {\r\n if (\r\n patterns.hasOwnProperty(patternKey) &&\r\n patterns[patternKey] instanceof ShadingPattern &&\r\n patterns[patternKey].objectNumber >= 0\r\n ) {\r\n out(\r\n \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n );\r\n }\r\n }\r\n\r\n events.publish(\"putShadingPatternDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putTilingPatternDict = function(objectOid) {\r\n if (Object.keys(patterns).length > 0) {\r\n out(\"/Pattern <<\");\r\n for (var patternKey in patterns) {\r\n if (\r\n patterns.hasOwnProperty(patternKey) &&\r\n patterns[patternKey] instanceof API.TilingPattern &&\r\n patterns[patternKey].objectNumber >= 0 &&\r\n patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies\r\n ) {\r\n out(\r\n \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n );\r\n }\r\n }\r\n events.publish(\"putTilingPatternDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putGStatesDict = function() {\r\n if (Object.keys(gStates).length > 0) {\r\n var gStateKey;\r\n out(\"/ExtGState <<\");\r\n for (gStateKey in gStates) {\r\n if (\r\n gStates.hasOwnProperty(gStateKey) &&\r\n gStates[gStateKey].objectNumber >= 0\r\n ) {\r\n out(\"/\" + gStateKey + \" \" + gStates[gStateKey].objectNumber + \" 0 R\");\r\n }\r\n }\r\n\r\n events.publish(\"putGStateDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putResourceDictionary = function(objectIds) {\r\n newObjectDeferredBegin(objectIds.resourcesOid, true);\r\n out(\"<<\");\r\n out(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\");\r\n putFontDict();\r\n putShadingPatternDict();\r\n putTilingPatternDict(objectIds.objectOid);\r\n putGStatesDict();\r\n putXobjectDict();\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putResources = function() {\r\n // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images\r\n // which means their resource dictionaries must contain the already resolved\r\n // object ids. For this reason we defer the serialization of the resource\r\n // dicts until all objects have been serialized and have object ids.\r\n //\r\n // In order to prevent cyclic dependencies (which Adobe Reader doesn't like),\r\n // we only put all oids that are smaller than the oid of the object the\r\n // resource dict belongs to. This is correct behavior, since the streams\r\n // may only use other objects that have already been defined and thus appear\r\n // earlier in their respective collection.\r\n // Currently, this only affects tiling patterns, but a (more) correct\r\n // implementation of FormObjects would also define their own resource dicts.\r\n var deferredResourceDictionaryIds = [];\r\n\r\n putFonts();\r\n putGStates();\r\n putXObjects();\r\n putPatterns(deferredResourceDictionaryIds);\r\n\r\n events.publish(\"putResources\");\r\n deferredResourceDictionaryIds.forEach(putResourceDictionary);\r\n putResourceDictionary({\r\n resourcesOid: resourceDictionaryObjId,\r\n objectOid: Number.MAX_SAFE_INTEGER // output all objects\r\n });\r\n events.publish(\"postPutResources\");\r\n };\r\n\r\n var putAdditionalObjects = function() {\r\n events.publish(\"putAdditionalObjects\");\r\n for (var i = 0; i < additionalObjects.length; i++) {\r\n var obj = additionalObjects[i];\r\n newObjectDeferredBegin(obj.objId, true);\r\n out(obj.content);\r\n out(\"endobj\");\r\n }\r\n events.publish(\"postPutAdditionalObjects\");\r\n };\r\n\r\n var addFontToFontDictionary = function(font) {\r\n fontmap[font.fontName] = fontmap[font.fontName] || {};\r\n fontmap[font.fontName][font.fontStyle] = font.id;\r\n };\r\n\r\n var addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n encoding,\r\n isStandardFont\r\n ) {\r\n var font = {\r\n id: \"F\" + (Object.keys(fonts).length + 1).toString(10),\r\n postScriptName: postScriptName,\r\n fontName: fontName,\r\n fontStyle: fontStyle,\r\n encoding: encoding,\r\n isStandardFont: isStandardFont || false,\r\n metadata: {}\r\n };\r\n\r\n events.publish(\"addFont\", {\r\n font: font,\r\n instance: this\r\n });\r\n\r\n fonts[font.id] = font;\r\n addFontToFontDictionary(font);\r\n return font.id;\r\n };\r\n\r\n var addFonts = function(arrayOfFonts) {\r\n for (var i = 0, l = standardFonts.length; i < l; i++) {\r\n var fontKey = addFont.call(\r\n this,\r\n arrayOfFonts[i][0],\r\n arrayOfFonts[i][1],\r\n arrayOfFonts[i][2],\r\n standardFonts[i][3],\r\n true\r\n );\r\n\r\n if (putOnlyUsedFonts === false) {\r\n usedFonts[fontKey] = true;\r\n }\r\n // adding aliases for standard fonts, this time matching the capitalization\r\n var parts = arrayOfFonts[i][0].split(\"-\");\r\n addFontToFontDictionary({\r\n id: fontKey,\r\n fontName: parts[0],\r\n fontStyle: parts[1] || \"\"\r\n });\r\n }\r\n events.publish(\"addFonts\", {\r\n fonts: fonts,\r\n dictionary: fontmap\r\n });\r\n };\r\n\r\n var SAFE = function __safeCall(fn) {\r\n fn.foo = function __safeCallWrapper() {\r\n try {\r\n return fn.apply(this, arguments);\r\n } catch (e) {\r\n var stack = e.stack || \"\";\r\n if (~stack.indexOf(\" at \")) stack = stack.split(\" at \")[1];\r\n var m =\r\n \"Error in function \" +\r\n stack.split(\"\\n\")[0].split(\"<\")[0] +\r\n \": \" +\r\n e.message;\r\n if (globalObject.console) {\r\n globalObject.console.error(m, e);\r\n if (globalObject.alert) alert(m);\r\n } else {\r\n throw new Error(m);\r\n }\r\n }\r\n };\r\n fn.foo.bar = fn;\r\n return fn.foo;\r\n };\r\n\r\n var to8bitStream = function(text, flags) {\r\n /**\r\n * PDF 1.3 spec:\r\n * \"For text strings encoded in Unicode, the first two bytes must be 254 followed by\r\n * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts\r\n * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely\r\n * to be a meaningful beginning of a word or phrase.) The remainder of the\r\n * string consists of Unicode character codes, according to the UTF-16 encoding\r\n * specified in the Unicode standard, version 2.0. Commonly used Unicode values\r\n * are represented as 2 bytes per character, with the high-order byte appearing first\r\n * in the string.\"\r\n *\r\n * In other words, if there are chars in a string with char code above 255, we\r\n * recode the string to UCS2 BE - string doubles in length and BOM is prepended.\r\n *\r\n * HOWEVER!\r\n * Actual *content* (body) text (as opposed to strings used in document properties etc)\r\n * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID)\r\n *\r\n * Because of Adobe's focus on \"you subset your fonts!\" you are not supposed to have\r\n * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could\r\n * fudge it with \"Identity-H\" encoding and custom CIDtoGID map that mimics Unicode\r\n * code page. There, however, all characters in the stream are treated as GIDs,\r\n * including BOM, which is the reason we need to skip BOM in content text (i.e. that\r\n * that is tied to a font).\r\n *\r\n * To signal this \"special\" PDFEscape / to8bitStream handling mode,\r\n * API.text() function sets (unless you overwrite it with manual values\r\n * given to API.text(.., flags) )\r\n * flags.autoencode = true\r\n * flags.noBOM = true\r\n *\r\n * ===================================================================================\r\n * `flags` properties relied upon:\r\n * .sourceEncoding = string with encoding label.\r\n * \"Unicode\" by default. = encoding of the incoming text.\r\n * pass some non-existing encoding name\r\n * (ex: 'Do not touch my strings! I know what I am doing.')\r\n * to make encoding code skip the encoding step.\r\n * .outputEncoding = Either valid PDF encoding name\r\n * (must be supported by jsPDF font metrics, otherwise no encoding)\r\n * or a JS object, where key = sourceCharCode, value = outputCharCode\r\n * missing keys will be treated as: sourceCharCode === outputCharCode\r\n * .noBOM\r\n * See comment higher above for explanation for why this is important\r\n * .autoencode\r\n * See comment higher above for explanation for why this is important\r\n */\r\n\r\n var i,\r\n l,\r\n sourceEncoding,\r\n encodingBlock,\r\n outputEncoding,\r\n newtext,\r\n isUnicode,\r\n ch,\r\n bch;\r\n\r\n flags = flags || {};\r\n sourceEncoding = flags.sourceEncoding || \"Unicode\";\r\n outputEncoding = flags.outputEncoding;\r\n\r\n // This 'encoding' section relies on font metrics format\r\n // attached to font objects by, among others,\r\n // \"Willow Systems' standard_font_metrics plugin\"\r\n // see jspdf.plugin.standard_font_metrics.js for format\r\n // of the font.metadata.encoding Object.\r\n // It should be something like\r\n // .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}}\r\n // .widths = {0:width, code:width, ..., 'fof':divisor}\r\n // .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...}\r\n if (\r\n (flags.autoencode || outputEncoding) &&\r\n fonts[activeFontKey].metadata &&\r\n fonts[activeFontKey].metadata[sourceEncoding] &&\r\n fonts[activeFontKey].metadata[sourceEncoding].encoding\r\n ) {\r\n encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding;\r\n\r\n // each font has default encoding. Some have it clearly defined.\r\n if (!outputEncoding && fonts[activeFontKey].encoding) {\r\n outputEncoding = fonts[activeFontKey].encoding;\r\n }\r\n\r\n // Hmmm, the above did not work? Let's try again, in different place.\r\n if (!outputEncoding && encodingBlock.codePages) {\r\n outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default\r\n }\r\n\r\n if (typeof outputEncoding === \"string\") {\r\n outputEncoding = encodingBlock[outputEncoding];\r\n }\r\n // we want output encoding to be a JS Object, where\r\n // key = sourceEncoding's character code and\r\n // value = outputEncoding's character code.\r\n if (outputEncoding) {\r\n isUnicode = false;\r\n newtext = [];\r\n for (i = 0, l = text.length; i < l; i++) {\r\n ch = outputEncoding[text.charCodeAt(i)];\r\n if (ch) {\r\n newtext.push(String.fromCharCode(ch));\r\n } else {\r\n newtext.push(text[i]);\r\n }\r\n\r\n // since we are looping over chars anyway, might as well\r\n // check for residual unicodeness\r\n if (newtext[i].charCodeAt(0) >> 8) {\r\n /* more than 255 */\r\n isUnicode = true;\r\n }\r\n }\r\n text = newtext.join(\"\");\r\n }\r\n }\r\n\r\n i = text.length;\r\n // isUnicode may be set to false above. Hence the triple-equal to undefined\r\n while (isUnicode === undefined && i !== 0) {\r\n if (text.charCodeAt(i - 1) >> 8) {\r\n /* more than 255 */\r\n isUnicode = true;\r\n }\r\n i--;\r\n }\r\n if (!isUnicode) {\r\n return text;\r\n }\r\n\r\n newtext = flags.noBOM ? [] : [254, 255];\r\n for (i = 0, l = text.length; i < l; i++) {\r\n ch = text.charCodeAt(i);\r\n bch = ch >> 8; // divide by 256\r\n if (bch >> 8) {\r\n /* something left after dividing by 256 second time */\r\n throw new Error(\r\n \"Character at position \" +\r\n i +\r\n \" of string '\" +\r\n text +\r\n \"' exceeds 16bits. Cannot be encoded into UCS-2 BE\"\r\n );\r\n }\r\n newtext.push(bch);\r\n newtext.push(ch - (bch << 8));\r\n }\r\n return String.fromCharCode.apply(undefined, newtext);\r\n };\r\n\r\n var pdfEscape = (API.__private__.pdfEscape = API.pdfEscape = function(\r\n text,\r\n flags\r\n ) {\r\n /**\r\n * Replace '/', '(', and ')' with pdf-safe versions\r\n *\r\n * Doing to8bitStream does NOT make this PDF display unicode text. For that\r\n * we also need to reference a unicode font and embed it - royal pain in the rear.\r\n *\r\n * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars,\r\n * which JavaScript Strings are happy to provide. So, while we still cannot display\r\n * 2-byte characters property, at least CONDITIONALLY converting (entire string containing)\r\n * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF\r\n * is still parseable.\r\n * This will allow immediate support for unicode in document properties strings.\r\n */\r\n return to8bitStream(text, flags)\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/\\(/g, \"\\\\(\")\r\n .replace(/\\)/g, \"\\\\)\");\r\n });\r\n\r\n var beginPage = (API.__private__.beginPage = function(format) {\r\n pages[++page] = [];\r\n pagesContext[page] = {\r\n objId: 0,\r\n contentsObjId: 0,\r\n userUnit: Number(userUnit),\r\n artBox: null,\r\n bleedBox: null,\r\n cropBox: null,\r\n trimBox: null,\r\n mediaBox: {\r\n bottomLeftX: 0,\r\n bottomLeftY: 0,\r\n topRightX: Number(format[0]),\r\n topRightY: Number(format[1])\r\n }\r\n };\r\n _setPage(page);\r\n setOutputDestination(pages[currentPage]);\r\n });\r\n\r\n var _addPage = function(parmFormat, parmOrientation) {\r\n var dimensions, width, height;\r\n\r\n orientation = parmOrientation || orientation;\r\n\r\n if (typeof parmFormat === \"string\") {\r\n dimensions = getPageFormat(parmFormat.toLowerCase());\r\n if (Array.isArray(dimensions)) {\r\n width = dimensions[0];\r\n height = dimensions[1];\r\n }\r\n }\r\n\r\n if (Array.isArray(parmFormat)) {\r\n width = parmFormat[0] * scaleFactor;\r\n height = parmFormat[1] * scaleFactor;\r\n }\r\n\r\n if (isNaN(width)) {\r\n width = format[0];\r\n height = format[1];\r\n }\r\n\r\n if (width > 14400 || height > 14400) {\r\n console.warn(\r\n \"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"\r\n );\r\n width = Math.min(14400, width);\r\n height = Math.min(14400, height);\r\n }\r\n\r\n format = [width, height];\r\n\r\n switch (orientation.substr(0, 1)) {\r\n case \"l\":\r\n if (height > width) {\r\n format = [height, width];\r\n }\r\n break;\r\n case \"p\":\r\n if (width > height) {\r\n format = [height, width];\r\n }\r\n break;\r\n }\r\n\r\n beginPage(format);\r\n\r\n // Set line width\r\n setLineWidth(lineWidth);\r\n // Set draw color\r\n out(strokeColor);\r\n // resurrecting non-default line caps, joins\r\n if (lineCapID !== 0) {\r\n out(lineCapID + \" J\");\r\n }\r\n if (lineJoinID !== 0) {\r\n out(lineJoinID + \" j\");\r\n }\r\n events.publish(\"addPage\", {\r\n pageNumber: page\r\n });\r\n };\r\n\r\n var _deletePage = function(n) {\r\n if (n > 0 && n <= page) {\r\n pages.splice(n, 1);\r\n pagesContext.splice(n, 1);\r\n page--;\r\n if (currentPage > page) {\r\n currentPage = page;\r\n }\r\n this.setPage(currentPage);\r\n }\r\n };\r\n\r\n var _setPage = function(n) {\r\n if (n > 0 && n <= page) {\r\n currentPage = n;\r\n }\r\n };\r\n\r\n var getNumberOfPages = (API.__private__.getNumberOfPages = API.getNumberOfPages = function() {\r\n return pages.length - 1;\r\n });\r\n\r\n /**\r\n * Returns a document-specific font key - a label assigned to a\r\n * font name + font type combination at the time the font was added\r\n * to the font inventory.\r\n *\r\n * Font key is used as label for the desired font for a block of text\r\n * to be added to the PDF document stream.\r\n * @private\r\n * @function\r\n * @param fontName {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n * @param fontStyle {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n * @returns {string} Font key.\r\n * @ignore\r\n */\r\n var getFont = function(fontName, fontStyle, options) {\r\n var key = undefined,\r\n fontNameLowerCase;\r\n options = options || {};\r\n\r\n fontName =\r\n fontName !== undefined ? fontName : fonts[activeFontKey].fontName;\r\n fontStyle =\r\n fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle;\r\n fontNameLowerCase = fontName.toLowerCase();\r\n\r\n if (\r\n fontmap[fontNameLowerCase] !== undefined &&\r\n fontmap[fontNameLowerCase][fontStyle] !== undefined\r\n ) {\r\n key = fontmap[fontNameLowerCase][fontStyle];\r\n } else if (\r\n fontmap[fontName] !== undefined &&\r\n fontmap[fontName][fontStyle] !== undefined\r\n ) {\r\n key = fontmap[fontName][fontStyle];\r\n } else {\r\n if (options.disableWarning === false) {\r\n console.warn(\r\n \"Unable to look up font label for font '\" +\r\n fontName +\r\n \"', '\" +\r\n fontStyle +\r\n \"'. Refer to getFontList() for available fonts.\"\r\n );\r\n }\r\n }\r\n\r\n if (!key && !options.noFallback) {\r\n key = fontmap[\"times\"][fontStyle];\r\n if (key == null) {\r\n key = fontmap[\"times\"][\"normal\"];\r\n }\r\n }\r\n return key;\r\n };\r\n\r\n var putInfo = (API.__private__.putInfo = function() {\r\n var objectId = newObject();\r\n var encryptor = function(data) {\r\n return data;\r\n };\r\n if (encryptionOptions !== null) {\r\n encryptor = encryption.encryptor(objectId, 0);\r\n }\r\n out(\"<<\");\r\n out(\"/Producer (\" + pdfEscape(encryptor(\"jsPDF \" + jsPDF.version)) + \")\");\r\n for (var key in documentProperties) {\r\n if (documentProperties.hasOwnProperty(key) && documentProperties[key]) {\r\n out(\r\n \"/\" +\r\n key.substr(0, 1).toUpperCase() +\r\n key.substr(1) +\r\n \" (\" +\r\n pdfEscape(encryptor(documentProperties[key])) +\r\n \")\"\r\n );\r\n }\r\n }\r\n out(\"/CreationDate (\" + pdfEscape(encryptor(creationDate)) + \")\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n });\r\n\r\n var putCatalog = (API.__private__.putCatalog = function(options) {\r\n options = options || {};\r\n var tmpRootDictionaryObjId =\r\n options.rootDictionaryObjId || rootDictionaryObjId;\r\n newObject();\r\n out(\"<<\");\r\n out(\"/Type /Catalog\");\r\n out(\"/Pages \" + tmpRootDictionaryObjId + \" 0 R\");\r\n // PDF13ref Section 7.2.1\r\n if (!zoomMode) zoomMode = \"fullwidth\";\r\n switch (zoomMode) {\r\n case \"fullwidth\":\r\n out(\"/OpenAction [3 0 R /FitH null]\");\r\n break;\r\n case \"fullheight\":\r\n out(\"/OpenAction [3 0 R /FitV null]\");\r\n break;\r\n case \"fullpage\":\r\n out(\"/OpenAction [3 0 R /Fit]\");\r\n break;\r\n case \"original\":\r\n out(\"/OpenAction [3 0 R /XYZ null null 1]\");\r\n break;\r\n default:\r\n var pcn = \"\" + zoomMode;\r\n if (pcn.substr(pcn.length - 1) === \"%\")\r\n zoomMode = parseInt(zoomMode) / 100;\r\n if (typeof zoomMode === \"number\") {\r\n out(\"/OpenAction [3 0 R /XYZ null null \" + f2(zoomMode) + \"]\");\r\n }\r\n }\r\n if (!layoutMode) layoutMode = \"continuous\";\r\n switch (layoutMode) {\r\n case \"continuous\":\r\n out(\"/PageLayout /OneColumn\");\r\n break;\r\n case \"single\":\r\n out(\"/PageLayout /SinglePage\");\r\n break;\r\n case \"two\":\r\n case \"twoleft\":\r\n out(\"/PageLayout /TwoColumnLeft\");\r\n break;\r\n case \"tworight\":\r\n out(\"/PageLayout /TwoColumnRight\");\r\n break;\r\n }\r\n if (pageMode) {\r\n /**\r\n * A name object specifying how the document should be displayed when opened:\r\n * UseNone : Neither document outline nor thumbnail images visible -- DEFAULT\r\n * UseOutlines : Document outline visible\r\n * UseThumbs : Thumbnail images visible\r\n * FullScreen : Full-screen mode, with no menu bar, window controls, or any other window visible\r\n */\r\n out(\"/PageMode /\" + pageMode);\r\n }\r\n events.publish(\"putCatalog\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n });\r\n\r\n var putTrailer = (API.__private__.putTrailer = function() {\r\n out(\"trailer\");\r\n out(\"<<\");\r\n out(\"/Size \" + (objectNumber + 1));\r\n // Root and Info must be the last and second last objects written respectively\r\n out(\"/Root \" + objectNumber + \" 0 R\");\r\n out(\"/Info \" + (objectNumber - 1) + \" 0 R\");\r\n if (encryptionOptions !== null) {\r\n out(\"/Encrypt \" + encryption.oid + \" 0 R\");\r\n }\r\n out(\"/ID [ <\" + fileId + \"> <\" + fileId + \"> ]\");\r\n out(\">>\");\r\n });\r\n\r\n var putHeader = (API.__private__.putHeader = function() {\r\n out(\"%PDF-\" + pdfVersion);\r\n out(\"%\\xBA\\xDF\\xAC\\xE0\");\r\n });\r\n\r\n var putXRef = (API.__private__.putXRef = function() {\r\n var p = \"0000000000\";\r\n\r\n out(\"xref\");\r\n out(\"0 \" + (objectNumber + 1));\r\n out(\"0000000000 65535 f \");\r\n for (var i = 1; i <= objectNumber; i++) {\r\n var offset = offsets[i];\r\n if (typeof offset === \"function\") {\r\n out((p + offsets[i]()).slice(-10) + \" 00000 n \");\r\n } else {\r\n if (typeof offsets[i] !== \"undefined\") {\r\n out((p + offsets[i]).slice(-10) + \" 00000 n \");\r\n } else {\r\n out(\"0000000000 00000 n \");\r\n }\r\n }\r\n }\r\n });\r\n\r\n var buildDocument = (API.__private__.buildDocument = function() {\r\n resetDocument();\r\n setOutputDestination(content);\r\n\r\n events.publish(\"buildDocument\");\r\n\r\n putHeader();\r\n putPages();\r\n putAdditionalObjects();\r\n putResources();\r\n if (encryptionOptions !== null) putEncryptionDict();\r\n putInfo();\r\n putCatalog();\r\n\r\n var offsetOfXRef = contentLength;\r\n putXRef();\r\n putTrailer();\r\n out(\"startxref\");\r\n out(\"\" + offsetOfXRef);\r\n out(\"%%EOF\");\r\n\r\n setOutputDestination(pages[currentPage]);\r\n\r\n return content.join(\"\\n\");\r\n });\r\n\r\n var getBlob = (API.__private__.getBlob = function(data) {\r\n return new Blob([getArrayBuffer(data)], {\r\n type: \"application/pdf\"\r\n });\r\n });\r\n\r\n /**\r\n * Generates the PDF document.\r\n *\r\n * If `type` argument is undefined, output is raw body of resulting PDF returned as a string.\r\n *\r\n * @param {string} type A string identifying one of the possible output types.
    \r\n * Possible values are:
    \r\n * 'arraybuffer' -> (ArrayBuffer)
    \r\n * 'blob' -> (Blob)
    \r\n * 'bloburi'/'bloburl' -> (string)
    \r\n * 'datauristring'/'dataurlstring' -> (string)
    \r\n * 'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring
    \r\n * 'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)
    \r\n * 'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)
    \r\n * 'pdfjsnewwindow' -> (wind | null)\r\n * @param {Object|string} options An object providing some additional signalling to PDF generator.
    \r\n * Possible options are 'filename'.
    \r\n * A string can be passed instead of {filename:string} and defaults to 'generated.pdf'\r\n * @function\r\n * @instance\r\n * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined}\r\n * @memberof jsPDF#\r\n * @name output\r\n */\r\n var output = (API.output = API.__private__.output = SAFE(function output(\r\n type,\r\n options\r\n ) {\r\n options = options || {};\r\n\r\n if (typeof options === \"string\") {\r\n options = {\r\n filename: options\r\n };\r\n } else {\r\n options.filename = options.filename || \"generated.pdf\";\r\n }\r\n\r\n switch (type) {\r\n case undefined:\r\n return buildDocument();\r\n case \"save\":\r\n API.save(options.filename);\r\n break;\r\n case \"arraybuffer\":\r\n return getArrayBuffer(buildDocument());\r\n case \"blob\":\r\n return getBlob(buildDocument());\r\n case \"bloburi\":\r\n case \"bloburl\":\r\n // Developer is responsible of calling revokeObjectURL\r\n if (\r\n typeof globalObject.URL !== \"undefined\" &&\r\n typeof globalObject.URL.createObjectURL === \"function\"\r\n ) {\r\n return (\r\n (globalObject.URL &&\r\n globalObject.URL.createObjectURL(getBlob(buildDocument()))) ||\r\n void 0\r\n );\r\n } else {\r\n console.warn(\r\n \"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\"\r\n );\r\n }\r\n break;\r\n case \"datauristring\":\r\n case \"dataurlstring\":\r\n var dataURI = \"\";\r\n var pdfDocument = buildDocument();\r\n try {\r\n dataURI = btoa(pdfDocument);\r\n } catch (e) {\r\n dataURI = btoa(unescape(encodeURIComponent(pdfDocument)));\r\n }\r\n return (\r\n \"data:application/pdf;filename=\" +\r\n options.filename +\r\n \";base64,\" +\r\n dataURI\r\n );\r\n case \"pdfobjectnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfObjectUrl =\r\n \"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\";\r\n var integrity =\r\n ' integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\" crossorigin=\"anonymous\"';\r\n\r\n if (options.pdfObjectUrl) {\r\n pdfObjectUrl = options.pdfObjectUrl;\r\n integrity = \"\";\r\n }\r\n\r\n var htmlForNewWindow =\r\n \"\" +\r\n '\";\r\n var nW = globalObject.open();\r\n\r\n if (nW !== null) {\r\n nW.document.write(htmlForNewWindow);\r\n }\r\n return nW;\r\n } else {\r\n throw new Error(\r\n \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n case \"pdfjsnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n var htmlForPDFjsNewWindow =\r\n \"\" +\r\n \"\" +\r\n '' +\r\n \"\";\r\n var dataURLNewWindow = globalObject.open();\r\n if (dataURLNewWindow !== null) {\r\n dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n dataURLNewWindow.document.title = options.filename;\r\n }\r\n if (dataURLNewWindow || typeof safari === \"undefined\")\r\n return dataURLNewWindow;\r\n } else {\r\n throw new Error(\r\n \"The option dataurlnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n break;\r\n case \"datauri\":\r\n case \"dataurl\":\r\n return (globalObject.document.location.href = this.output(\r\n \"datauristring\",\r\n options\r\n ));\r\n default:\r\n return null;\r\n }\r\n }));\r\n\r\n /**\r\n * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n * @param {string} hotfixName - The name of the hotfix to check.\r\n * @returns {boolean}\r\n */\r\n var hasHotfix = function(hotfixName) {\r\n return (\r\n Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n );\r\n };\r\n\r\n switch (unit) {\r\n case \"pt\":\r\n scaleFactor = 1;\r\n break;\r\n case \"mm\":\r\n scaleFactor = 72 / 25.4;\r\n break;\r\n case \"cm\":\r\n scaleFactor = 72 / 2.54;\r\n break;\r\n case \"in\":\r\n scaleFactor = 72;\r\n break;\r\n case \"px\":\r\n if (hasHotfix(\"px_scaling\") == true) {\r\n scaleFactor = 72 / 96;\r\n } else {\r\n scaleFactor = 96 / 72;\r\n }\r\n break;\r\n case \"pc\":\r\n scaleFactor = 12;\r\n break;\r\n case \"em\":\r\n scaleFactor = 12;\r\n break;\r\n case \"ex\":\r\n scaleFactor = 6;\r\n break;\r\n default:\r\n if (typeof unit === \"number\") {\r\n scaleFactor = unit;\r\n } else {\r\n throw new Error(\"Invalid unit: \" + unit);\r\n }\r\n }\r\n\r\n var encryption = null;\r\n setCreationDate();\r\n setFileId();\r\n\r\n var getEncryptor = function(objectId) {\r\n if (encryptionOptions !== null) {\r\n return encryption.encryptor(objectId, 0);\r\n }\r\n return function(data) {\r\n return data;\r\n };\r\n };\r\n\r\n //---------------------------------------\r\n // Public API\r\n\r\n var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n pageNumberOneBased\r\n ) {\r\n if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n }\r\n var objId = pagesContext[pageNumberOneBased].objId;\r\n return {\r\n objId: objId,\r\n pageNumber: pageNumberOneBased,\r\n pageContext: pagesContext[pageNumberOneBased]\r\n };\r\n });\r\n\r\n var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n objId\r\n ) {\r\n if (isNaN(objId) || objId % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n }\r\n for (var pageNumber in pagesContext) {\r\n if (pagesContext[pageNumber].objId === objId) {\r\n break;\r\n }\r\n }\r\n return getPageInfo(pageNumber);\r\n });\r\n\r\n var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n return {\r\n objId: pagesContext[currentPage].objId,\r\n pageNumber: currentPage,\r\n pageContext: pagesContext[currentPage]\r\n };\r\n });\r\n\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addPage\r\n */\r\n API.addPage = function() {\r\n _addPage.apply(this, arguments);\r\n return this;\r\n };\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name setPage\r\n * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n * @example\r\n * doc = jsPDF()\r\n * doc.addPage()\r\n * doc.addPage()\r\n * doc.text('I am on page 3', 10, 10)\r\n * doc.setPage(1)\r\n * doc.text('I am on page 1', 10, 10)\r\n */\r\n API.setPage = function() {\r\n _setPage.apply(this, arguments);\r\n setOutputDestination.call(this, pages[currentPage]);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name insertPage\r\n * @memberof jsPDF#\r\n *\r\n * @function\r\n * @instance\r\n * @param {Object} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.insertPage = function(beforePage) {\r\n this.addPage();\r\n this.movePage(currentPage, beforePage);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name movePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {number} targetPage\r\n * @param {number} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.movePage = function(targetPage, beforePage) {\r\n var tmpPages, tmpPagesContext;\r\n if (targetPage > beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var i = targetPage; i > beforePage; i--) {\r\n pages[i] = pages[i - 1];\r\n pagesContext[i] = pagesContext[i - 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n } else if (targetPage < beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var j = targetPage; j < beforePage; j++) {\r\n pages[j] = pages[j + 1];\r\n pagesContext[j] = pagesContext[j + 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Deletes a page from the PDF.\r\n * @name deletePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @param {number} targetPage\r\n * @instance\r\n * @returns {jsPDF}\r\n */\r\n API.deletePage = function() {\r\n _deletePage.apply(this, arguments);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n *\r\n * @function\r\n * @instance\r\n * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n * @param {number} [options.charSpace=0] - The space between each letter.\r\n * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n * @param {Object} [options.flags] - Flags for to8bitStream.\r\n * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n *\r\n * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name text\r\n */\r\n API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n /*\r\n * Inserts something like this into PDF\r\n * BT\r\n * /F1 16 Tf % Font name + size\r\n * 16 TL % How many units down for next line in multiline text\r\n * 0 g % color\r\n * 28.35 813.54 Td % position\r\n * (line one) Tj\r\n * T* (line two) Tj\r\n * T* (line three) Tj\r\n * ET\r\n */\r\n options = options || {};\r\n var scope = options.scope || this;\r\n var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n // in effort to make all calls have similar signature like\r\n // function(data, coordinates... , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (\r\n typeof text === \"number\" &&\r\n typeof x === \"number\" &&\r\n (typeof y === \"string\" || Array.isArray(y))\r\n ) {\r\n var tmp = y;\r\n y = x;\r\n x = text;\r\n text = tmp;\r\n }\r\n\r\n var transformationMatrix;\r\n\r\n if (arguments[3] instanceof Matrix === false) {\r\n flags = arguments[3];\r\n angle = arguments[4];\r\n align = arguments[5];\r\n\r\n if (typeof flags !== \"object\" || flags === null) {\r\n if (typeof angle === \"string\") {\r\n align = angle;\r\n angle = null;\r\n }\r\n if (typeof flags === \"string\") {\r\n align = flags;\r\n flags = null;\r\n }\r\n if (typeof flags === \"number\") {\r\n angle = flags;\r\n flags = null;\r\n }\r\n options = {\r\n flags: flags,\r\n angle: angle,\r\n align: align\r\n };\r\n }\r\n } else {\r\n advancedApiModeTrap(\r\n \"The transform parameter of text() with a Matrix value\"\r\n );\r\n transformationMatrix = transform;\r\n }\r\n\r\n if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n }\r\n\r\n if (text.length === 0) {\r\n return scope;\r\n }\r\n\r\n var xtra = \"\";\r\n var isHex = false;\r\n var lineHeight =\r\n typeof options.lineHeightFactor === \"number\"\r\n ? options.lineHeightFactor\r\n : lineHeightFactor;\r\n var scaleFactor = scope.internal.scaleFactor;\r\n\r\n function ESC(s) {\r\n s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n return pdfEscape(s, flags);\r\n }\r\n\r\n function transformTextToSpecialArray(text) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(curDa);\r\n } else {\r\n if (\r\n Array.isArray(text) &&\r\n (curDa.length === 1 ||\r\n (curDa[1] === undefined && curDa[2] === undefined))\r\n ) {\r\n da.push(curDa[0]);\r\n } else {\r\n da.push([curDa[0], curDa[1], curDa[2]]);\r\n }\r\n }\r\n }\r\n return da;\r\n }\r\n\r\n function processTextByFunction(text, processingFunction) {\r\n var result;\r\n if (typeof text === \"string\") {\r\n result = processingFunction(text)[0];\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n var tmpResult;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(processingFunction(curDa)[0]);\r\n } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n }\r\n }\r\n result = da;\r\n }\r\n return result;\r\n }\r\n\r\n //Check if text is of type String\r\n var textIsOfTypeString = false;\r\n var tmpTextIsOfTypeString = true;\r\n\r\n if (typeof text === \"string\") {\r\n textIsOfTypeString = true;\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (\r\n typeof curDa !== \"string\" ||\r\n (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n ) {\r\n tmpTextIsOfTypeString = false;\r\n }\r\n }\r\n textIsOfTypeString = tmpTextIsOfTypeString;\r\n }\r\n if (textIsOfTypeString === false) {\r\n throw new Error(\r\n 'Type of text must be string or Array. \"' +\r\n text +\r\n '\" is not recognized.'\r\n );\r\n }\r\n\r\n //If there are any newlines in text, we assume\r\n //the user wanted to print multiple lines, so break the\r\n //text up into an array. If the text is already an array,\r\n //we assume the user knows what they are doing.\r\n //Convert text into an array anyway to simplify\r\n //later code.\r\n\r\n if (typeof text === \"string\") {\r\n if (text.match(/[\\r?\\n]/)) {\r\n text = text.split(/\\r\\n|\\r|\\n/g);\r\n } else {\r\n text = [text];\r\n }\r\n }\r\n\r\n //baseline\r\n var height = activeFontSize / scope.internal.scaleFactor;\r\n var descent = height * (lineHeight - 1);\r\n\r\n switch (options.baseline) {\r\n case \"bottom\":\r\n y -= descent;\r\n break;\r\n case \"top\":\r\n y += height - descent;\r\n break;\r\n case \"hanging\":\r\n y += height - 2 * descent;\r\n break;\r\n case \"middle\":\r\n y += height / 2 - descent;\r\n break;\r\n case \"ideographic\":\r\n case \"alphabetic\":\r\n default:\r\n // do nothing, everything is fine\r\n break;\r\n }\r\n\r\n //multiline\r\n maxWidth = options.maxWidth || 0;\r\n\r\n if (maxWidth > 0) {\r\n if (typeof text === \"string\") {\r\n text = scope.splitTextToSize(text, maxWidth);\r\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n text = text.reduce(function(acc, textLine) {\r\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n }, []);\r\n }\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"preProcessText\", payload);\r\n\r\n text = payload.text;\r\n options = payload.options;\r\n\r\n //angle\r\n angle = options.angle;\r\n\r\n if (\r\n transformationMatrix instanceof Matrix === false &&\r\n angle &&\r\n typeof angle === \"number\"\r\n ) {\r\n angle *= Math.PI / 180;\r\n\r\n if (options.rotationDirection === 0) {\r\n angle = -angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n angle = -angle;\r\n }\r\n\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n } else if (angle && angle instanceof Matrix) {\r\n transformationMatrix = angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n transformationMatrix = identityMatrix;\r\n }\r\n\r\n //charSpace\r\n\r\n charSpace = options.charSpace || activeCharSpace;\r\n\r\n if (typeof charSpace !== \"undefined\") {\r\n xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n this.setCharSpace(this.getCharSpace() || 0);\r\n }\r\n\r\n horizontalScale = options.horizontalScale;\r\n if (typeof horizontalScale !== \"undefined\") {\r\n xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n }\r\n\r\n //lang\r\n\r\n var lang = options.lang;\r\n\r\n if (lang) {\r\n // xtra += \"/Lang (\" + lang +\")\\n\";\r\n }\r\n\r\n //renderingMode\r\n var renderingMode = -1;\r\n var parmRenderingMode =\r\n typeof options.renderingMode !== \"undefined\"\r\n ? options.renderingMode\r\n : options.stroke;\r\n var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n switch (parmRenderingMode) {\r\n case 0:\r\n case false:\r\n case \"fill\":\r\n renderingMode = 0;\r\n break;\r\n case 1:\r\n case true:\r\n case \"stroke\":\r\n renderingMode = 1;\r\n break;\r\n case 2:\r\n case \"fillThenStroke\":\r\n renderingMode = 2;\r\n break;\r\n case 3:\r\n case \"invisible\":\r\n renderingMode = 3;\r\n break;\r\n case 4:\r\n case \"fillAndAddForClipping\":\r\n renderingMode = 4;\r\n break;\r\n case 5:\r\n case \"strokeAndAddPathForClipping\":\r\n renderingMode = 5;\r\n break;\r\n case 6:\r\n case \"fillThenStrokeAndAddToPathForClipping\":\r\n renderingMode = 6;\r\n break;\r\n case 7:\r\n case \"addToPathForClipping\":\r\n renderingMode = 7;\r\n break;\r\n }\r\n\r\n var usedRenderingMode =\r\n typeof pageContext.usedRenderingMode !== \"undefined\"\r\n ? pageContext.usedRenderingMode\r\n : -1;\r\n\r\n //if the coder wrote it explicitly to use a specific\r\n //renderingMode, then use it\r\n if (renderingMode !== -1) {\r\n xtra += renderingMode + \" Tr\\n\";\r\n //otherwise check if we used the rendering Mode already\r\n //if so then set the rendering Mode...\r\n } else if (usedRenderingMode !== -1) {\r\n xtra += \"0 Tr\\n\";\r\n }\r\n\r\n if (renderingMode !== -1) {\r\n pageContext.usedRenderingMode = renderingMode;\r\n }\r\n\r\n //align\r\n align = options.align || \"left\";\r\n var leading = activeFontSize * lineHeight;\r\n var pageWidth = scope.internal.pageSize.getWidth();\r\n var activeFont = fonts[activeFontKey];\r\n charSpace = options.charSpace || activeCharSpace;\r\n maxWidth = options.maxWidth || 0;\r\n\r\n var lineWidths;\r\n flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n var wordSpacingPerLine = [];\r\n\r\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n da = transformTextToSpecialArray(text);\r\n var newY;\r\n if (align !== \"left\") {\r\n lineWidths = da.map(function(v) {\r\n return (\r\n (scope.getStringUnitWidth(v, {\r\n font: activeFont,\r\n charSpace: charSpace,\r\n fontSize: activeFontSize,\r\n doKerning: false\r\n }) *\r\n activeFontSize) /\r\n scaleFactor\r\n );\r\n });\r\n }\r\n //The first line uses the \"main\" Td setting,\r\n //and the subsequent lines are offset by the\r\n //previous line's x coordinate.\r\n var prevWidth = 0;\r\n var newX;\r\n if (align === \"right\") {\r\n //The passed in x coordinate defines the\r\n //rightmost point of the text.\r\n x -= lineWidths[0];\r\n text = [];\r\n len = da.length;\r\n for (var i = 0; i < len; i++) {\r\n if (i === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale(prevWidth - lineWidths[i]);\r\n newY = -leading;\r\n }\r\n text.push([da[i], newX, newY]);\r\n prevWidth = lineWidths[i];\r\n }\r\n } else if (align === \"center\") {\r\n //The passed in x coordinate defines\r\n //the center point.\r\n x -= lineWidths[0] / 2;\r\n text = [];\r\n len = da.length;\r\n for (var j = 0; j < len; j++) {\r\n if (j === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale((prevWidth - lineWidths[j]) / 2);\r\n newY = -leading;\r\n }\r\n text.push([da[j], newX, newY]);\r\n prevWidth = lineWidths[j];\r\n }\r\n } else if (align === \"left\") {\r\n text = [];\r\n len = da.length;\r\n for (var h = 0; h < len; h++) {\r\n text.push(da[h]);\r\n }\r\n } else if (align === \"justify\") {\r\n text = [];\r\n len = da.length;\r\n maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n for (var l = 0; l < len; l++) {\r\n newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n if (l < len - 1) {\r\n wordSpacingPerLine.push(\r\n hpf(\r\n scale(\r\n (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n )\r\n )\r\n );\r\n } else {\r\n wordSpacingPerLine.push(0);\r\n }\r\n text.push([da[l], newX, newY]);\r\n }\r\n } else {\r\n throw new Error(\r\n 'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n );\r\n }\r\n }\r\n\r\n //R2L\r\n var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n if (doReversing === true) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [\r\n text\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\"),\r\n posX,\r\n posY\r\n ];\r\n });\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"postProcessText\", payload);\r\n\r\n text = payload.text;\r\n isHex = payload.mutex.isHex || false;\r\n\r\n //Escaping\r\n var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n if (\r\n activeFontEncoding === \"WinAnsiEncoding\" ||\r\n activeFontEncoding === \"StandardEncoding\"\r\n ) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [ESC(text), posX, posY];\r\n });\r\n }\r\n\r\n da = transformTextToSpecialArray(text);\r\n\r\n text = [];\r\n var STRING = 0;\r\n var ARRAY = 1;\r\n var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n var posX;\r\n var posY;\r\n var content;\r\n var wordSpacing = \"\";\r\n\r\n var generatePosition = function(\r\n parmPosX,\r\n parmPosY,\r\n parmTransformationMatrix\r\n ) {\r\n var position = \"\";\r\n if (parmTransformationMatrix instanceof Matrix) {\r\n // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n // in the coordinate system established by this matrix\r\n if (typeof options.angle === \"number\") {\r\n parmTransformationMatrix = matrixMult(\r\n parmTransformationMatrix,\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n );\r\n } else {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, -1, 0, 0),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n } else {\r\n position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n }\r\n return position;\r\n };\r\n\r\n for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n wordSpacing = \"\";\r\n\r\n switch (variant) {\r\n case ARRAY:\r\n content =\r\n (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n posX = parseFloat(da[lineIndex][1]);\r\n posY = parseFloat(da[lineIndex][2]);\r\n break;\r\n case STRING:\r\n content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n posX = getHorizontalCoordinate(x);\r\n posY = getVerticalCoordinate(y);\r\n break;\r\n }\r\n\r\n if (\r\n typeof wordSpacingPerLine !== \"undefined\" &&\r\n typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n ) {\r\n wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n }\r\n\r\n if (lineIndex === 0) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n } else if (variant === STRING) {\r\n text.push(wordSpacing + content);\r\n } else if (variant === ARRAY) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n }\r\n }\r\n\r\n text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n text += \" Tj\\n\";\r\n\r\n var result = \"BT\\n/\";\r\n result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n result += textColor + \"\\n\";\r\n result += xtra;\r\n result += text;\r\n result += \"ET\";\r\n\r\n out(result);\r\n usedFonts[activeFontKey] = true;\r\n return scope;\r\n };\r\n\r\n // PDF supports these path painting and clip path operators:\r\n //\r\n // S - stroke\r\n // s - close/stroke\r\n // f (F) - fill non-zero\r\n // f* - fill evenodd\r\n // B - fill stroke nonzero\r\n // B* - fill stroke evenodd\r\n // b - close fill stroke nonzero\r\n // b* - close fill stroke evenodd\r\n // n - nothing (consume path)\r\n // W - clip nonzero\r\n // W* - clip evenodd\r\n //\r\n // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n // method.\r\n /**\r\n *\r\n * @name clip\r\n * @function\r\n * @instance\r\n * @param {string} rule Only possible value is 'evenodd'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description All .clip() after calling drawing ops with a style argument of null.\r\n */\r\n var clip = (API.__private__.clip = API.clip = function(rule) {\r\n // Call .clip() after calling drawing ops with a style argument of null\r\n // W is the PDF clipping op\r\n if (\"evenodd\" === rule) {\r\n out(\"W*\");\r\n } else {\r\n out(\"W\");\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * @name clipEvenOdd\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n * that this will NOT consume the current path. In order to only use this path for clipping call\r\n * {@link API.discardPath} afterwards.\r\n */\r\n API.clipEvenOdd = function() {\r\n return clip(\"evenodd\");\r\n };\r\n\r\n /**\r\n * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n * @name discardPath\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.discardPath = API.discardPath = function() {\r\n out(\"n\");\r\n return this;\r\n };\r\n\r\n var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n var validStyleVariants = [\r\n undefined,\r\n null,\r\n \"S\",\r\n \"D\",\r\n \"F\",\r\n \"DF\",\r\n \"FD\",\r\n \"f\",\r\n \"f*\",\r\n \"B\",\r\n \"B*\",\r\n \"n\"\r\n ];\r\n var result = false;\r\n if (validStyleVariants.indexOf(style) !== -1) {\r\n result = true;\r\n }\r\n return result;\r\n });\r\n\r\n API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n operator\r\n ) {\r\n if (isValidStyle(operator)) {\r\n defaultPathOperation = operator;\r\n }\r\n return this;\r\n };\r\n\r\n var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n // see path-painting operators in PDF spec\r\n var op = defaultPathOperation; // stroke\r\n\r\n switch (style) {\r\n case \"D\":\r\n case \"S\":\r\n op = \"S\"; // stroke\r\n break;\r\n case \"F\":\r\n op = \"f\"; // fill\r\n break;\r\n case \"FD\":\r\n case \"DF\":\r\n op = \"B\";\r\n break;\r\n case \"f\":\r\n case \"f*\":\r\n case \"B\":\r\n case \"B*\":\r\n /*\r\n Allow direct use of these PDF path-painting operators:\r\n - f fill using nonzero winding number rule\r\n - f* fill using even-odd rule\r\n - B fill then stroke with fill using non-zero winding number rule\r\n - B* fill then stroke with fill using even-odd rule\r\n */\r\n op = style;\r\n break;\r\n }\r\n return op;\r\n });\r\n\r\n /**\r\n * Close the current path. The PDF \"h\" operator.\r\n * @name close\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n var close = (API.close = function() {\r\n out(\"h\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Stroke the path. The PDF \"S\" operator.\r\n * @name stroke\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.stroke = function() {\r\n out(\"S\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n * @name fill\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fill = function(pattern) {\r\n fillWithOptionalPattern(\"f\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the even-odd rule. The PDF f* operator.\r\n * @see API.fill\r\n * @name fillEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"f*\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStroke\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStroke = function(pattern) {\r\n fillWithOptionalPattern(\"B\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStrokeEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStrokeEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"B*\", pattern);\r\n return this;\r\n };\r\n\r\n var fillWithOptionalPattern = function(style, pattern) {\r\n if (typeof pattern === \"object\") {\r\n fillWithPattern(pattern, style);\r\n } else {\r\n out(style);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n if (\r\n style === null ||\r\n (apiMode === ApiMode.ADVANCED && style === undefined)\r\n ) {\r\n return;\r\n }\r\n\r\n style = getStyle(style);\r\n\r\n // stroking / filling / both the path\r\n out(style);\r\n };\r\n\r\n function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n var clone = new TilingPattern(\r\n boundingBox || this.boundingBox,\r\n xStep || this.xStep,\r\n yStep || this.yStep,\r\n this.gState,\r\n matrix || this.matrix\r\n );\r\n clone.stream = this.stream;\r\n var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n addPattern(key, clone);\r\n return clone;\r\n }\r\n\r\n var fillWithPattern = function(patternData, style) {\r\n var patternId = patternMap[patternData.key];\r\n var pattern = patterns[patternId];\r\n\r\n if (pattern instanceof ShadingPattern) {\r\n out(\"q\");\r\n\r\n out(clipRuleFromStyle(style));\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n out(patternData.matrix.toString() + \" cm\");\r\n out(\"/\" + patternId + \" sh\");\r\n out(\"Q\");\r\n } else if (pattern instanceof TilingPattern) {\r\n // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n // so we must flip them\r\n var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n if (patternData.matrix) {\r\n matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n // for each use\r\n patternId = cloneTilingPattern.call(\r\n pattern,\r\n patternData.key,\r\n patternData.boundingBox,\r\n patternData.xStep,\r\n patternData.yStep,\r\n matrix\r\n ).id;\r\n }\r\n\r\n out(\"q\");\r\n out(\"/Pattern cs\");\r\n out(\"/\" + patternId + \" scn\");\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n\r\n out(style);\r\n out(\"Q\");\r\n }\r\n };\r\n\r\n var clipRuleFromStyle = function(style) {\r\n switch (style) {\r\n case \"f\":\r\n case \"F\":\r\n return \"W n\";\r\n case \"f*\":\r\n return \"W* n\";\r\n case \"B\":\r\n return \"W S\";\r\n case \"B*\":\r\n return \"W* S\";\r\n\r\n // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n case \"S\":\r\n return \"W S\";\r\n case \"n\":\r\n return \"W n\";\r\n }\r\n };\r\n\r\n /**\r\n * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @name moveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var moveTo = (API.moveTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @memberof jsPDF#\r\n * @name lineTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var lineTo = (API.lineTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x3\r\n * @param {number} y3\r\n * @memberof jsPDF#\r\n * @name curveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n out(\r\n [\r\n hpf(scale(x1)),\r\n hpf(transformScaleY(y1)),\r\n hpf(scale(x2)),\r\n hpf(transformScaleY(y2)),\r\n hpf(scale(x3)),\r\n hpf(transformScaleY(y3)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n return this;\r\n });\r\n\r\n /**\r\n * Draw a line on the current page.\r\n *\r\n * @name line\r\n * @function\r\n * @instance\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n } else {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n }\r\n };\r\n\r\n /**\r\n * @typedef {Object} PatternData\r\n * {Matrix|undefined} matrix\r\n * {Number|undefined} xStep\r\n * {Number|undefined} yStep\r\n * {Array.|undefined} boundingBox\r\n */\r\n\r\n /**\r\n * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n * All data points in `lines` are relative to last line origin.\r\n * `x`, `y` become x1,y1 for first line / curve in the set.\r\n * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n *\r\n * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name lines\r\n */\r\n API.__private__.lines = API.lines = function(\r\n lines,\r\n x,\r\n y,\r\n scale,\r\n style,\r\n closed\r\n ) {\r\n var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n // in effort to make all calls have similar signature like\r\n // function(content, coordinateX, coordinateY , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (typeof lines === \"number\") {\r\n tmp = y;\r\n y = x;\r\n x = lines;\r\n lines = tmp;\r\n }\r\n\r\n scale = scale || [1, 1];\r\n closed = closed || false;\r\n\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n !Array.isArray(lines) ||\r\n !Array.isArray(scale) ||\r\n !isValidStyle(style) ||\r\n typeof closed !== \"boolean\"\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n }\r\n\r\n // starting point\r\n moveTo(x, y);\r\n\r\n scalex = scale[0];\r\n scaley = scale[1];\r\n l = lines.length;\r\n //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n x4 = x; // last / ending point = starting point for first item.\r\n y4 = y; // last / ending point = starting point for first item.\r\n\r\n for (i = 0; i < l; i++) {\r\n leg = lines[i];\r\n if (leg.length === 2) {\r\n // simple line\r\n x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n lineTo(x4, y4);\r\n } else {\r\n // bezier curve\r\n x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n curveTo(x2, y2, x3, y3, x4, y4);\r\n }\r\n }\r\n\r\n if (closed) {\r\n close();\r\n }\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n * six and \"h\" an empty array (or undefined).\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name path\r\n */\r\n API.path = function(lines) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var leg = lines[i];\r\n var coords = leg.c;\r\n switch (leg.op) {\r\n case \"m\":\r\n moveTo(coords[0], coords[1]);\r\n break;\r\n case \"l\":\r\n lineTo(coords[0], coords[1]);\r\n break;\r\n case \"c\":\r\n curveTo.apply(this, coords);\r\n break;\r\n case \"h\":\r\n close();\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name rect\r\n */\r\n API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n h = -h;\r\n }\r\n\r\n out(\r\n [\r\n hpf(scale(x)),\r\n hpf(transformScaleY(y)),\r\n hpf(scale(w)),\r\n hpf(scale(h)),\r\n \"re\"\r\n ].join(\" \")\r\n );\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a triangle to PDF.\r\n *\r\n * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name triangle\r\n */\r\n API.__private__.triangle = API.triangle = function(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n style\r\n ) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n isNaN(x3) ||\r\n isNaN(y3) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n }\r\n this.lines(\r\n [\r\n [x2 - x1, y2 - y1], // vector to point 2\r\n [x3 - x2, y3 - y2], // vector to point 3\r\n [x1 - x3, y1 - y3] // closing vector back to point 1\r\n ],\r\n x1,\r\n y1, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle with rounded corners to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name roundedRect\r\n */\r\n API.__private__.roundedRect = API.roundedRect = function(\r\n x,\r\n y,\r\n w,\r\n h,\r\n rx,\r\n ry,\r\n style\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(w) ||\r\n isNaN(h) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n }\r\n var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n rx = Math.min(rx, w * 0.5);\r\n ry = Math.min(ry, h * 0.5);\r\n\r\n this.lines(\r\n [\r\n [w - 2 * rx, 0],\r\n [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n [0, h - 2 * ry],\r\n [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n [-w + 2 * rx, 0],\r\n [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n [0, -h + 2 * ry],\r\n [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n ],\r\n x + rx,\r\n y, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an ellipse to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name ellipse\r\n */\r\n API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n }\r\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n moveTo(x + rx, y);\r\n curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an circle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} r Radius (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name circle\r\n */\r\n API.__private__.circle = API.circle = function(x, y, r, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n }\r\n return this.ellipse(x, y, r, r, style);\r\n };\r\n\r\n /**\r\n * Sets text font face, variant for upcoming text elements.\r\n * See output of jsPDF.getFontList() for possible font names, styles.\r\n *\r\n * @param {string} fontName Font name or family. Example: \"times\".\r\n * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFont\r\n */\r\n API.setFont = function(fontName, fontStyle, fontWeight) {\r\n if (fontWeight) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n activeFontKey = getFont(fontName, fontStyle, {\r\n disableWarning: false\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets text font face, variant for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {Object}\r\n * @memberof jsPDF#\r\n * @name getFont\r\n */\r\n var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n return fonts[getFont.apply(API, arguments)];\r\n });\r\n\r\n /**\r\n * Returns an object - a tree of fontName to fontStyle relationships available to\r\n * active PDF document.\r\n *\r\n * @public\r\n * @function\r\n * @instance\r\n * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n * @memberof jsPDF#\r\n * @name getFontList\r\n */\r\n API.__private__.getFontList = API.getFontList = function() {\r\n var list = {},\r\n fontName,\r\n fontStyle;\r\n\r\n for (fontName in fontmap) {\r\n if (fontmap.hasOwnProperty(fontName)) {\r\n list[fontName] = [];\r\n for (fontStyle in fontmap[fontName]) {\r\n if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n list[fontName].push(fontStyle);\r\n }\r\n }\r\n }\r\n }\r\n return list;\r\n };\r\n\r\n /**\r\n * Add a custom font to the current instance.\r\n *\r\n * @param {string} postScriptName PDF specification full name for the font.\r\n * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n * @param {string} fontStyle Style of the Font.\r\n * @param {number | string} fontWeight Weight of the Font.\r\n * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @name addFont\r\n * @returns {string} fontId\r\n */\r\n API.addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n fontWeight,\r\n encoding\r\n ) {\r\n var encodingOptions = [\r\n \"StandardEncoding\",\r\n \"MacRomanEncoding\",\r\n \"Identity-H\",\r\n \"WinAnsiEncoding\"\r\n ];\r\n if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n //IE 11 fix\r\n encoding = arguments[3];\r\n } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n encoding = encoding || \"Identity-H\";\r\n return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n };\r\n\r\n var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n /**\r\n * Gets the line width, default: 0.200025.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineWidth\r\n * @memberof jsPDF#\r\n * @name getLineWidth\r\n */\r\n var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n return lineWidth;\r\n });\r\n\r\n /**\r\n * Sets line width for upcoming lines.\r\n *\r\n * @param {number} width Line width (in units declared at inception of PDF document).\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineWidth\r\n */\r\n var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n width\r\n ) {\r\n lineWidth = width;\r\n out(hpf(scale(width)) + \" w\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Sets the dash pattern for upcoming lines.\r\n *\r\n * To reset the settings simply call the method without any parameters.\r\n * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n * @param {number} dashPhase The phase lines start with.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineDashPattern\r\n */\r\n API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n dashArray,\r\n dashPhase\r\n ) {\r\n dashArray = dashArray || [];\r\n dashPhase = dashPhase || 0;\r\n\r\n if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n }\r\n\r\n dashArray = dashArray\r\n .map(function(x) {\r\n return hpf(scale(x));\r\n })\r\n .join(\" \");\r\n dashPhase = hpf(scale(dashPhase));\r\n\r\n out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n return this;\r\n };\r\n\r\n var lineHeightFactor;\r\n\r\n var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n });\r\n\r\n API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n };\r\n\r\n /**\r\n * Sets the LineHeightFactor of proportion.\r\n *\r\n * @param {number} value LineHeightFactor value. Default: 1.15.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineHeightFactor\r\n */\r\n var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n value\r\n ) {\r\n value = value || 1.15;\r\n if (typeof value === \"number\") {\r\n lineHeightFactor = value;\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * Gets the LineHeightFactor, default: 1.15.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineHeightFactor\r\n * @memberof jsPDF#\r\n * @name getLineHeightFactor\r\n */\r\n var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n return lineHeightFactor;\r\n });\r\n\r\n setLineHeightFactor(options.lineHeight);\r\n\r\n var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n value\r\n ) {\r\n return scale(value);\r\n });\r\n\r\n var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n value\r\n ) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n return value;\r\n } else {\r\n var pageHeight =\r\n pagesContext[currentPage].mediaBox.topRightY -\r\n pagesContext[currentPage].mediaBox.bottomLeftY;\r\n return pageHeight - scale(value);\r\n }\r\n });\r\n\r\n var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getHorizontalCoordinate(value));\r\n });\r\n\r\n var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getVerticalCoordinate(value));\r\n });\r\n\r\n var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n /**\r\n * Gets the stroke color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getDrawColor\r\n */\r\n API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n return decodeColorString(strokeColor);\r\n };\r\n\r\n /**\r\n * Sets the stroke color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDrawColor\r\n */\r\n API.__private__.setStrokeColor = API.setDrawColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"draw\",\r\n precision: 2\r\n };\r\n\r\n strokeColor = encodeColorString(options);\r\n out(strokeColor);\r\n return this;\r\n };\r\n\r\n var fillColor = options.fillColor || \"0 g\";\r\n\r\n /**\r\n * Gets the fill color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getFillColor\r\n */\r\n API.__private__.getFillColor = API.getFillColor = function() {\r\n return decodeColorString(fillColor);\r\n };\r\n\r\n /**\r\n * Sets the fill color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFillColor\r\n */\r\n API.__private__.setFillColor = API.setFillColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"fill\",\r\n precision: 2\r\n };\r\n\r\n fillColor = encodeColorString(options);\r\n out(fillColor);\r\n return this;\r\n };\r\n\r\n var textColor = options.textColor || \"0 g\";\r\n /**\r\n * Gets the text color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getTextColor\r\n */\r\n var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n return decodeColorString(textColor);\r\n });\r\n /**\r\n * Sets the text color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setTextColor\r\n */\r\n API.__private__.setTextColor = API.setTextColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"text\",\r\n precision: 3\r\n };\r\n textColor = encodeColorString(options);\r\n\r\n return this;\r\n };\r\n\r\n var activeCharSpace = options.charSpace;\r\n\r\n /**\r\n * Get global value of CharSpace.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} charSpace\r\n * @memberof jsPDF#\r\n * @name getCharSpace\r\n */\r\n var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n return parseFloat(activeCharSpace || 0);\r\n });\r\n\r\n /**\r\n * Set global value of CharSpace.\r\n *\r\n * @param {number} charSpace\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setCharSpace\r\n */\r\n API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n if (isNaN(charSpace)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n }\r\n activeCharSpace = charSpace;\r\n return this;\r\n };\r\n\r\n var lineCapID = 0;\r\n /**\r\n * Is an Object providing a mapping from human-readable to\r\n * integer flag values designating the varieties of line cap\r\n * and join styles.\r\n *\r\n * @memberof jsPDF#\r\n * @name CapJoinStyles\r\n */\r\n API.CapJoinStyles = {\r\n 0: 0,\r\n butt: 0,\r\n but: 0,\r\n miter: 0,\r\n 1: 1,\r\n round: 1,\r\n rounded: 1,\r\n circle: 1,\r\n 2: 2,\r\n projecting: 2,\r\n project: 2,\r\n square: 2,\r\n bevel: 2\r\n };\r\n\r\n /**\r\n * Sets the line cap styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line cap.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineCap\r\n */\r\n API.__private__.setLineCap = API.setLineCap = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line cap style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineCapID = id;\r\n out(id + \" J\");\r\n\r\n return this;\r\n };\r\n\r\n var lineJoinID = 0;\r\n /**\r\n * Sets the line join styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line join.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineJoin\r\n */\r\n API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line join style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineJoinID = id;\r\n out(id + \" j\");\r\n\r\n return this;\r\n };\r\n\r\n var miterLimit;\r\n /**\r\n * Sets the miterLimit property, which effects the maximum miter length.\r\n *\r\n * @param {number} length The length of the miter\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineMiterLimit\r\n */\r\n API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n length\r\n ) {\r\n length = length || 0;\r\n if (isNaN(length)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n }\r\n out(hpf(scale(length)) + \" M\");\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * An object representing a pdf graphics state.\r\n * @class GState\r\n */\r\n\r\n /**\r\n *\r\n * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n * Supported are: opacity, stroke-opacity\r\n * @constructor\r\n */\r\n API.GState = GState;\r\n\r\n /**\r\n * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n * it will be added before use.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setGState\r\n */\r\n API.setGState = function(gState) {\r\n if (typeof gState === \"string\") {\r\n gState = gStates[gStatesMap[gState]];\r\n } else {\r\n gState = addGState(null, gState);\r\n }\r\n\r\n if (!gState.equals(activeGState)) {\r\n out(\"/\" + gState.id + \" gs\");\r\n activeGState = gState;\r\n }\r\n };\r\n\r\n /**\r\n * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n * @param {String} key Might also be null, if no later reference to this gState is needed\r\n * @param {Object} gState The gState object\r\n */\r\n var addGState = function(key, gState) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (key && gStatesMap[key]) return;\r\n var duplicate = false;\r\n for (var s in gStates) {\r\n if (gStates.hasOwnProperty(s)) {\r\n if (gStates[s].equals(gState)) {\r\n duplicate = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (duplicate) {\r\n gState = gStates[s];\r\n } else {\r\n var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n gStates[gStateKey] = gState;\r\n gState.id = gStateKey;\r\n }\r\n\r\n // several user keys may point to the same GState object\r\n key && (gStatesMap[key] = gState.id);\r\n\r\n events.publish(\"addGState\", gState);\r\n\r\n return gState;\r\n };\r\n\r\n /**\r\n * Adds a new {@link GState} for later use. See {@link setGState}.\r\n * @param {String} key\r\n * @param {GState} gState\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addGState\r\n */\r\n API.addGState = function(key, gState) {\r\n addGState(key, gState);\r\n return this;\r\n };\r\n\r\n /**\r\n * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n * fill and stroke colors etc.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name saveGraphicsState\r\n */\r\n API.saveGraphicsState = function() {\r\n out(\"q\");\r\n // as we cannot set font key and size independently we must keep track of both\r\n fontStateStack.push({\r\n key: activeFontKey,\r\n size: activeFontSize,\r\n color: textColor\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name restoreGraphicsState\r\n */\r\n API.restoreGraphicsState = function() {\r\n out(\"Q\");\r\n\r\n // restore previous font state\r\n var fontState = fontStateStack.pop();\r\n activeFontKey = fontState.key;\r\n activeFontSize = fontState.size;\r\n textColor = fontState.color;\r\n\r\n activeGState = null;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Appends this matrix to the left of all previously applied matrices.\r\n *\r\n * @param {Matrix} matrix\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setCurrentTransformationMatrix\r\n */\r\n API.setCurrentTransformationMatrix = function(matrix) {\r\n out(matrix.toString() + \" cm\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Inserts a debug comment into the generated pdf.\r\n * @function\r\n * @instance\r\n * @param {String} text\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name comment\r\n */\r\n API.comment = function(text) {\r\n out(\"#\" + text);\r\n return this;\r\n };\r\n\r\n /**\r\n * Point\r\n */\r\n var Point = function(x, y) {\r\n var _x = x || 0;\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n get: function() {\r\n return _x;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _x = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _y = y || 0;\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n get: function() {\r\n return _y;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _y = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _type = \"pt\";\r\n Object.defineProperty(this, \"type\", {\r\n enumerable: true,\r\n get: function() {\r\n return _type;\r\n },\r\n set: function(value) {\r\n _type = value.toString();\r\n }\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Rectangle\r\n */\r\n var Rectangle = function(x, y, w, h) {\r\n Point.call(this, x, y);\r\n this.type = \"rect\";\r\n\r\n var _w = w || 0;\r\n Object.defineProperty(this, \"w\", {\r\n enumerable: true,\r\n get: function() {\r\n return _w;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _w = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _h = h || 0;\r\n Object.defineProperty(this, \"h\", {\r\n enumerable: true,\r\n get: function() {\r\n return _h;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _h = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * FormObject/RenderTarget\r\n */\r\n\r\n var RenderTarget = function() {\r\n this.page = page;\r\n this.currentPage = currentPage;\r\n this.pages = pages.slice(0);\r\n this.pagesContext = pagesContext.slice(0);\r\n this.x = pageX;\r\n this.y = pageY;\r\n this.matrix = pageMatrix;\r\n this.width = getPageWidth(currentPage);\r\n this.height = getPageHeight(currentPage);\r\n this.outputDestination = outputDestination;\r\n\r\n this.id = \"\"; // set by endFormObject()\r\n this.objectNumber = -1; // will be set by putXObject()\r\n };\r\n\r\n RenderTarget.prototype.restore = function() {\r\n page = this.page;\r\n currentPage = this.currentPage;\r\n pagesContext = this.pagesContext;\r\n pages = this.pages;\r\n pageX = this.x;\r\n pageY = this.y;\r\n pageMatrix = this.matrix;\r\n setPageWidth(currentPage, this.width);\r\n setPageHeight(currentPage, this.height);\r\n outputDestination = this.outputDestination;\r\n };\r\n\r\n var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n // save current state\r\n renderTargetStack.push(new RenderTarget());\r\n\r\n // clear pages\r\n page = currentPage = 0;\r\n pages = [];\r\n pageX = x;\r\n pageY = y;\r\n\r\n pageMatrix = matrix;\r\n\r\n beginPage([width, height]);\r\n };\r\n\r\n var endFormObject = function(key) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (renderTargetMap[key]) {\r\n renderTargetStack.pop().restore();\r\n return;\r\n }\r\n\r\n // save the created xObject\r\n var newXObject = new RenderTarget();\r\n\r\n var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n newXObject.id = xObjectId;\r\n\r\n renderTargetMap[key] = xObjectId;\r\n renderTargets[xObjectId] = newXObject;\r\n\r\n events.publish(\"addFormObject\", newXObject);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n /**\r\n * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n * {@link doFormObject}. Nested form objects are possible.\r\n * x, y, width, height set the bounding box that is used to clip the content.\r\n *\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n * the parent's.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name beginFormObject\r\n */\r\n API.beginFormObject = function(x, y, width, height, matrix) {\r\n // The user can set the output target to a new form object. Nested form objects are possible.\r\n // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n // the PDF-Spec states:\r\n // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n // recommended although not required\"\r\n beginNewRenderTarget(x, y, width, height, matrix);\r\n return this;\r\n };\r\n\r\n /**\r\n * Completes and saves the form object.\r\n * @param {String} key The key by which this form object can be referenced.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name endFormObject\r\n */\r\n API.endFormObject = function(key) {\r\n endFormObject(key);\r\n return this;\r\n };\r\n\r\n /**\r\n * Draws the specified form object by referencing to the respective pdf XObject created with\r\n * {@link API.beginFormObject} and {@link endFormObject}.\r\n * The location is determined by matrix.\r\n *\r\n * @param {String} key The key to the form object.\r\n * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name doFormObject\r\n */\r\n API.doFormObject = function(key, matrix) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n out(\"q\");\r\n out(matrix.toString() + \" cm\");\r\n out(\"/\" + xObject.id + \" Do\");\r\n out(\"Q\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Returns the form object specified by key.\r\n * @param key {String}\r\n * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name getFormObject\r\n */\r\n API.getFormObject = function(key) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n return {\r\n x: xObject.x,\r\n y: xObject.y,\r\n width: xObject.width,\r\n height: xObject.height,\r\n matrix: xObject.matrix\r\n };\r\n };\r\n\r\n /**\r\n * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n * Uses FileSaver.js-method saveAs.\r\n *\r\n * @memberof jsPDF#\r\n * @name save\r\n * @function\r\n * @instance\r\n * @param {string} filename The filename including extension.\r\n * @param {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n * @returns {jsPDF|Promise} jsPDF-instance */\r\n API.save = function(filename, options) {\r\n filename = filename || \"generated.pdf\";\r\n\r\n options = options || {};\r\n options.returnPromise = options.returnPromise || false;\r\n\r\n\r\n // eslint-disable-next-line no-unreachable\r\n var fs = require(\"fs\");\r\n var buffer = Buffer.from(getArrayBuffer(buildDocument()));\r\n if (options.returnPromise === false) {\r\n fs.writeFileSync(filename, buffer);\r\n } else {\r\n return new Promise(function(resolve, reject) {\r\n fs.writeFile(filename, buffer, function(err) {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n // applying plugins (more methods) ON TOP of built-in API.\r\n // this is intentional as we allow plugins to override\r\n // built-ins\r\n for (var plugin in jsPDF.API) {\r\n if (jsPDF.API.hasOwnProperty(plugin)) {\r\n if (plugin === \"events\" && jsPDF.API.events.length) {\r\n (function(events, newEvents) {\r\n // jsPDF.API.events is a JS Array of Arrays\r\n // where each Array is a pair of event name, handler\r\n // Events were added by plugins to the jsPDF instantiator.\r\n // These are always added to the new instance and some ran\r\n // during instantiation.\r\n var eventname, handler_and_args, i;\r\n\r\n for (i = newEvents.length - 1; i !== -1; i--) {\r\n // subscribe takes 3 args: 'topic', function, runonce_flag\r\n // if undefined, runonce is false.\r\n // users can attach callback directly,\r\n // or they can attach an array with [callback, runonce_flag]\r\n // that's what the \"apply\" magic is for below.\r\n eventname = newEvents[i][0];\r\n handler_and_args = newEvents[i][1];\r\n events.subscribe.apply(\r\n events,\r\n [eventname].concat(\r\n typeof handler_and_args === \"function\"\r\n ? [handler_and_args]\r\n : handler_and_args\r\n )\r\n );\r\n }\r\n })(events, jsPDF.API.events);\r\n } else {\r\n API[plugin] = jsPDF.API[plugin];\r\n }\r\n }\r\n }\r\n\r\n var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightX -\r\n pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightX =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n });\r\n\r\n var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightY -\r\n pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightY =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n });\r\n\r\n /**\r\n * Object exposing internal API to plugins\r\n * @public\r\n * @ignore\r\n */\r\n API.internal = {\r\n pdfEscape: pdfEscape,\r\n getStyle: getStyle,\r\n getFont: getFontEntry,\r\n getFontSize: getFontSize,\r\n getCharSpace: getCharSpace,\r\n getTextColor: getTextColor,\r\n getLineHeight: getLineHeight,\r\n getLineHeightFactor: getLineHeightFactor,\r\n getLineWidth: getLineWidth,\r\n write: write,\r\n getHorizontalCoordinate: getHorizontalCoordinate,\r\n getVerticalCoordinate: getVerticalCoordinate,\r\n getCoordinateString: getHorizontalCoordinateString,\r\n getVerticalCoordinateString: getVerticalCoordinateString,\r\n collections: {},\r\n newObject: newObject,\r\n newAdditionalObject: newAdditionalObject,\r\n newObjectDeferred: newObjectDeferred,\r\n newObjectDeferredBegin: newObjectDeferredBegin,\r\n getFilters: getFilters,\r\n putStream: putStream,\r\n events: events,\r\n scaleFactor: scaleFactor,\r\n pageSize: {\r\n getWidth: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n setWidth: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n getHeight: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n setHeight: function(value) {\r\n setPageHeight(currentPage, value);\r\n }\r\n },\r\n encryptionOptions: encryptionOptions,\r\n encryption: encryption,\r\n getEncryptor: getEncryptor,\r\n output: output,\r\n getNumberOfPages: getNumberOfPages,\r\n pages: pages,\r\n out: out,\r\n f2: f2,\r\n f3: f3,\r\n getPageInfo: getPageInfo,\r\n getPageInfoByObjId: getPageInfoByObjId,\r\n getCurrentPageInfo: getCurrentPageInfo,\r\n getPDFVersion: getPdfVersion,\r\n Point: Point,\r\n Rectangle: Rectangle,\r\n Matrix: Matrix,\r\n hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n };\r\n\r\n Object.defineProperty(API.internal.pageSize, \"width\", {\r\n get: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n set: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(API.internal.pageSize, \"height\", {\r\n get: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n set: function(value) {\r\n setPageHeight(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // continuing initialization of jsPDF Document object\r\n //////////////////////////////////////////////////////\r\n // Add the first page automatically\r\n addFonts.call(API, standardFonts);\r\n activeFontKey = \"F1\";\r\n _addPage(format, orientation);\r\n\r\n events.publish(\"initialized\");\r\n return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n * // 'this' will be ref to internal API object. see jsPDF source\r\n * // , so you can refer to built-in methods like so:\r\n * // this.line(....)\r\n * // this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\(/g, \"\\\\(\")\n .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n return value\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\\(/g, \"(\")\n .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n var xobj = new AcroFormXObject();\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number |= bitMask;\n\n return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number &= ~bitMask;\n\n return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n );\n }\n return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n );\n }\n return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n );\n }\n return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n );\n }\n return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n args,\n scope\n) {\n var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n var x = args[0];\n var y = args[1];\n var w = args[2];\n var h = args[3];\n\n var coordinates = {};\n\n coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n return [\n Number(f2(coordinates.lowerLeft_X)),\n Number(f2(coordinates.lowerLeft_Y)),\n Number(f2(coordinates.upperRight_X)),\n Number(f2(coordinates.upperRight_Y))\n ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n if (formObject.appearanceStreamContent) {\n return formObject.appearanceStreamContent;\n }\n\n if (!formObject.V && !formObject.DV) {\n return;\n }\n\n // else calculate it\n\n var stream = [];\n var text = formObject._V || formObject.DV;\n var calcRes = calculateX(formObject, text);\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n\n //PDF 32000-1:2008, page 444\n stream.push(\"/Tx BMC\");\n stream.push(\"q\");\n stream.push(\"BT\"); // Begin Text\n stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n stream.push(calcRes.text);\n stream.push(\"ET\"); // End Text\n stream.push(\"Q\");\n stream.push(\"EMC\");\n\n var appearanceStreamContent = createFormXObject(formObject);\n appearanceStreamContent.scope = formObject.scope;\n appearanceStreamContent.stream = stream.join(\"\\n\");\n return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n var maxFontSize =\n formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n var returnValue = {\n text: \"\",\n fontSize: \"\"\n };\n // Remove Brackets\n text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n text =\n text.substr(text.length - 1) == \")\"\n ? text.substr(0, text.length - 1)\n : text;\n // split into array of words\n var textSplit = text.split(\" \");\n if (formObject.multiline) {\n textSplit = textSplit.map(word => word.split(\"\\n\"));\n } else {\n textSplit = textSplit.map(word => [word]);\n }\n\n var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n var lineSpacing = 2;\n var borderPadding = 2;\n\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n height = height < 0 ? -height : height;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n width = width < 0 ? -width : width;\n\n var isSmallerThanWidth = function(i, lastLine, fontSize) {\n if (i + 1 < textSplit.length) {\n var tmp = lastLine + \" \" + textSplit[i + 1][0];\n var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n var FieldWidth = width - 2 * borderPadding;\n return TextWidth <= FieldWidth;\n } else {\n return false;\n }\n };\n\n fontSize++;\n FontSize: while (fontSize > 0) {\n text = \"\";\n fontSize--;\n var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n var startY = formObject.multiline\n ? height - fontSize\n : (height - textHeight) / 2;\n startY += lineSpacing;\n var startX;\n\n var lastY = startY;\n var firstWordInLine = 0,\n lastWordInLine = 0;\n var lastLength;\n var currWord = 0;\n\n if (fontSize <= 0) {\n // In case, the Text doesn't fit at all\n fontSize = 12;\n text = \"(...) Tj\\n\";\n text +=\n \"% Width of Text: \" +\n calculateFontSpace(text, formObject, fontSize).width +\n \", FieldWidth:\" +\n width +\n \"\\n\";\n break;\n }\n\n var lastLine = \"\";\n var lineCount = 0;\n Line: for (var i = 0; i < textSplit.length; i++) {\n if (textSplit.hasOwnProperty(i)) {\n let isWithNewLine = false;\n if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n continue FontSize;\n }\n\n lastLine += textSplit[i][currWord];\n isWithNewLine = true;\n lastWordInLine = i;\n i--;\n } else {\n lastLine += textSplit[i][currWord] + \" \";\n lastLine =\n lastLine.substr(lastLine.length - 1) == \" \"\n ? lastLine.substr(0, lastLine.length - 1)\n : lastLine;\n var key = parseInt(i);\n var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n var isLastWord = i >= textSplit.length - 1;\n\n if (nextLineIsSmaller && !isLastWord) {\n lastLine += \" \";\n currWord = 0;\n continue; // Line\n } else if (!nextLineIsSmaller && !isLastWord) {\n if (!formObject.multiline) {\n continue FontSize;\n } else {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the\n // FieldObject\n continue FontSize;\n }\n lastWordInLine = key;\n // go on\n }\n } else if (isLastWord) {\n lastWordInLine = key;\n } else {\n if (\n formObject.multiline &&\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the FieldObject\n continue FontSize;\n }\n }\n }\n // Remove last blank\n\n var line = \"\";\n\n for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n var currLine = textSplit[x];\n if (formObject.multiline) {\n if (x === lastWordInLine) {\n line += currLine[currWord] + \" \";\n currWord = (currWord + 1) % currLine.length;\n continue;\n }\n if (x === firstWordInLine) {\n line += currLine[currLine.length - 1] + \" \";\n continue;\n }\n }\n line += currLine[0] + \" \";\n }\n\n // Remove last blank\n line =\n line.substr(line.length - 1) == \" \"\n ? line.substr(0, line.length - 1)\n : line;\n // lastLength -= blankSpace.width;\n lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n // Calculate startX\n switch (formObject.textAlign) {\n case \"right\":\n startX = width - lastLength - borderPadding;\n break;\n case \"center\":\n startX = (width - lastLength) / 2;\n break;\n case \"left\":\n default:\n startX = borderPadding;\n break;\n }\n text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n // reset X in PDF\n text += -f2(startX) + \" 0 Td\\n\";\n\n // After a Line, adjust y position\n lastY = -(fontSize + lineSpacing);\n\n // Reset for next iteration step\n lastLength = 0;\n firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n lineCount++;\n\n lastLine = \"\";\n continue Line;\n }\n }\n break;\n }\n\n returnValue.text = text;\n returnValue.fontSize = fontSize;\n\n return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n var font = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n );\n var width =\n formObject.scope.getStringUnitWidth(text, {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) * parseFloat(fontSize);\n var height =\n formObject.scope.getStringUnitWidth(\"3\", {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) *\n parseFloat(fontSize) *\n 1.5;\n return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n fields: [],\n xForms: [],\n /**\n * acroFormDictionaryRoot contains information about the AcroForm\n * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n * 1: The Object ID of the Root\n */\n acroFormDictionaryRoot: null,\n /**\n * After the PDF gets evaluated, the reference to the root has to be\n * reset, this indicates, whether the root has already been printed\n * out\n */\n printedOut: false,\n internal: null,\n isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n //set objId to undefined and force it to get a new objId on buildDocument\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n for (var i in fields) {\n if (fields.hasOwnProperty(i)) {\n var formObject = fields[i];\n //set objId to undefined and force it to get a new objId on buildDocument\n formObject.objId = undefined;\n // add Annot Reference!\n if (formObject.hasAnnotation) {\n // If theres an Annotation Widget in the Form Object, put the\n // Reference in the /Annot array\n createAnnotationReference(formObject, scope);\n }\n }\n }\n};\n\nvar putForm = function(formObject) {\n if (formObject.scope.internal.acroformPlugin.printedOut) {\n formObject.scope.internal.acroformPlugin.printedOut = false;\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n }\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n formObject\n );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n var options = {\n type: \"reference\",\n object: object\n };\n var findEntry = function(entry) {\n return entry.type === options.type && entry.object === options.object;\n };\n if (\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.find(findEntry) === undefined\n ) {\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.push(options);\n }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n // Put reference to AcroForm to DocumentCatalog\n if (\n typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n ) {\n // for safety, shouldn't normally be the case\n scope.internal.write(\n \"/AcroForm \" +\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n \" \" +\n 0 +\n \" R\"\n );\n } else {\n throw new Error(\"putCatalogCallback: Root missing.\");\n }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n // Remove event\n scope.internal.events.unsubscribe(\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n );\n delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n var standardFields = !fieldArray;\n\n if (!fieldArray) {\n // in case there is no fieldArray specified, we want to print out\n // the Fields of the AcroForm\n // Print out Root\n scope.internal.newObjectDeferredBegin(\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n true\n );\n scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n }\n\n fieldArray =\n fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var fieldObject = fieldArray[i];\n var keyValueList = [];\n var oldRect = fieldObject.Rect;\n\n if (fieldObject.Rect) {\n fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n }\n\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n fieldObject\n );\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.getKeyValueListForStream === \"function\"\n ) {\n keyValueList = fieldObject.getKeyValueListForStream();\n }\n\n fieldObject.Rect = oldRect;\n\n if (\n fieldObject.hasAppearanceStream &&\n !fieldObject.appearanceStreamContent\n ) {\n // Calculate Appearance\n var appearance = calculateAppearanceStream(fieldObject);\n keyValueList.push({ key: \"AP\", value: \"<>\" });\n\n scope.internal.acroformPlugin.xForms.push(appearance);\n }\n\n // Assume AppearanceStreamContent is a Array with N,R,D (at least\n // one of them!)\n if (fieldObject.appearanceStreamContent) {\n var appearanceStreamString = \"\";\n // Iterate over N,R and D\n for (var k in fieldObject.appearanceStreamContent) {\n if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n var value = fieldObject.appearanceStreamContent[k];\n appearanceStreamString += \"/\" + k + \" \";\n appearanceStreamString += \"<<\";\n if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n // appearanceStream is an Array or Object!\n for (var i in value) {\n if (value.hasOwnProperty(i)) {\n var obj = value[i];\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order\n // to get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n // In case the XForm is already used, e.g. OffState\n // of CheckBoxes, don't add it\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n }\n } else {\n obj = value;\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order to\n // get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj;\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n appearanceStreamString += \">>\";\n }\n }\n\n // appearance stream is a normal Object..\n keyValueList.push({\n key: \"AP\",\n value: \"<<\\n\" + appearanceStreamString + \">>\"\n });\n }\n\n scope.internal.putStream({\n additionalKeyValues: keyValueList,\n objectId: fieldObject.objId\n });\n\n scope.internal.out(\"endobj\");\n }\n }\n if (standardFields) {\n createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var key = i;\n var fieldObject = fieldArray[i];\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.putStream === \"function\"\n ) {\n fieldObject.putStream();\n }\n delete fieldArray[key];\n }\n }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n formObject.scope = scope;\n if (\n scope.internal !== undefined &&\n (scope.internal.acroformPlugin === undefined ||\n scope.internal.acroformPlugin.isInitialized === false)\n ) {\n AcroFormField.FieldNum = 0;\n scope.internal.acroformPlugin = JSON.parse(\n JSON.stringify(acroformPluginTemplate)\n );\n if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n throw new Error(\"Exception while creating AcroformDictionary\");\n }\n scaleFactor = scope.internal.scaleFactor;\n // The Object Number of the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n // add Callback for creating the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n \"postPutResources\",\n function() {\n AcroFormDictionaryCallback(scope);\n }\n );\n\n scope.internal.events.subscribe(\"buildDocument\", function() {\n annotReferenceCallback(scope);\n }); // buildDocument\n\n // Register event, that is triggered when the DocumentCatalog is\n // written, in order to add /AcroForm\n\n scope.internal.events.subscribe(\"putCatalog\", function() {\n putCatalogCallback(scope);\n });\n\n // Register event, that creates all Fields\n scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n createFieldCallback(fieldArray, scope);\n });\n\n scope.internal.acroformPlugin.isInitialized = true;\n }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n array,\n objId,\n scope\n) {\n var encryptor = function(data) {\n return data;\n };\n if (Array.isArray(array)) {\n var content = \"[\";\n for (var i = 0; i < array.length; i++) {\n if (i !== 0) {\n content += \" \";\n }\n switch (typeof array[i]) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n content += array[i].toString();\n break;\n case \"string\":\n if (array[i].substr(0, 1) !== \"/\") {\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n } else {\n content += array[i].toString();\n }\n break;\n }\n }\n content += \"]\";\n return content;\n }\n throw new Error(\n \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n );\n});\nfunction getMatches(string, regex, index) {\n index || (index = 1); // default to the first capturing group\n var matches = [];\n var match;\n while ((match = regex.exec(string))) {\n matches.push(match[index]);\n }\n return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n var result = [];\n if (typeof array === \"string\") {\n result = getMatches(array, /\\((.*?)\\)/g);\n }\n return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n var encryptor = function(data) {\n return data;\n };\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n string = string || \"\";\n string.toString();\n string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n this._objId = undefined;\n this._scope = undefined;\n\n /**\n * @name AcroFormPDFObject#objId\n * @type {any}\n */\n Object.defineProperty(this, \"objId\", {\n get: function() {\n if (typeof this._objId === \"undefined\") {\n if (typeof this.scope === \"undefined\") {\n return undefined;\n }\n this._objId = this.scope.internal.newObjectDeferred();\n }\n return this._objId;\n },\n set: function(value) {\n this._objId = value;\n }\n });\n Object.defineProperty(this, \"scope\", {\n value: this._scope,\n writable: true\n });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n var keyValueList = this.getKeyValueListForStream();\n this.scope.internal.putStream({\n data: this.stream,\n additionalKeyValues: keyValueList,\n objectId: this.objId\n });\n this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n var keyValueList = [];\n var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n return (\n key != \"content\" &&\n key != \"appearanceStreamContent\" &&\n key != \"scope\" &&\n key != \"objId\" &&\n key.substring(0, 1) != \"_\"\n );\n });\n\n for (var i in keys) {\n if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n var key = keys[i];\n var value = this[key];\n\n if (value) {\n if (Array.isArray(value)) {\n keyValueList.push({\n key: key,\n value: arrayToPdfArray(value, this.objId, this.scope)\n });\n } else if (value instanceof AcroFormPDFObject) {\n // In case it is a reference to another PDFObject,\n // take the reference number\n value.scope = this.scope;\n keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n } else if (typeof value !== \"function\") {\n keyValueList.push({ key: key, value: value });\n }\n }\n }\n }\n return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n AcroFormPDFObject.call(this);\n\n Object.defineProperty(this, \"Type\", {\n value: \"/XObject\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"Subtype\", {\n value: \"/Form\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"FormType\", {\n value: 1,\n configurable: false,\n writable: true\n });\n\n var _BBox = [];\n Object.defineProperty(this, \"BBox\", {\n configurable: false,\n get: function() {\n return _BBox;\n },\n set: function(value) {\n _BBox = value;\n }\n });\n\n Object.defineProperty(this, \"Resources\", {\n value: \"2 0 R\",\n configurable: false,\n writable: true\n });\n\n var _stream;\n Object.defineProperty(this, \"stream\", {\n enumerable: false,\n configurable: true,\n set: function(value) {\n _stream = value.trim();\n },\n get: function() {\n if (_stream) {\n return _stream;\n } else {\n return null;\n }\n }\n });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n AcroFormPDFObject.call(this);\n\n var _Kids = [];\n\n Object.defineProperty(this, \"Kids\", {\n enumerable: false,\n configurable: true,\n get: function() {\n if (_Kids.length > 0) {\n return _Kids;\n } else {\n return undefined;\n }\n }\n });\n Object.defineProperty(this, \"Fields\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Kids;\n }\n });\n\n // Default Appearance\n var _DA;\n Object.defineProperty(this, \"DA\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DA) {\n return undefined;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n },\n set: function(value) {\n _DA = value;\n }\n });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n AcroFormPDFObject.call(this);\n\n //Annotation-Flag See Table 165\n var _F = 4;\n Object.defineProperty(this, \"F\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _F;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _F = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute F supplied.'\n );\n }\n }\n });\n\n /**\n * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n *\n * @name AcroFormField#showWhenPrinted\n * @default true\n * @type {boolean}\n */\n Object.defineProperty(this, \"showWhenPrinted\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(_F, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.F = setBitForPdf(_F, 3);\n } else {\n this.F = clearBitForPdf(_F, 3);\n }\n }\n });\n\n var _Ff = 0;\n Object.defineProperty(this, \"Ff\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Ff;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _Ff = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Ff supplied.'\n );\n }\n }\n });\n\n var _Rect = [];\n Object.defineProperty(this, \"Rect\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (_Rect.length === 0) {\n return undefined;\n }\n return _Rect;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Rect = value;\n } else {\n _Rect = [];\n }\n }\n });\n\n /**\n * The x-position of the field.\n *\n * @name AcroFormField#x\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[0])) {\n return 0;\n }\n return _Rect[0];\n },\n set: function(value) {\n _Rect[0] = value;\n }\n });\n\n /**\n * The y-position of the field.\n *\n * @name AcroFormField#y\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[1])) {\n return 0;\n }\n return _Rect[1];\n },\n set: function(value) {\n _Rect[1] = value;\n }\n });\n\n /**\n * The width of the field.\n *\n * @name AcroFormField#width\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[2])) {\n return 0;\n }\n return _Rect[2];\n },\n set: function(value) {\n _Rect[2] = value;\n }\n });\n\n /**\n * The height of the field.\n *\n * @name AcroFormField#height\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[3])) {\n return 0;\n }\n return _Rect[3];\n },\n set: function(value) {\n _Rect[3] = value;\n }\n });\n\n var _FT = \"\";\n Object.defineProperty(this, \"FT\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _FT;\n },\n set: function(value) {\n switch (value) {\n case \"/Btn\":\n case \"/Tx\":\n case \"/Ch\":\n case \"/Sig\":\n _FT = value;\n break;\n default:\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute FT supplied.'\n );\n }\n }\n });\n\n var _T = null;\n\n Object.defineProperty(this, \"T\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (!_T || _T.length < 1) {\n // In case of a Child from a Radio´Group, you don't need a FieldName\n if (this instanceof AcroFormChildClass) {\n return undefined;\n }\n _T = \"FieldObject\" + AcroFormField.FieldNum++;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n },\n set: function(value) {\n _T = value.toString();\n }\n });\n\n /**\n * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n *\n * @name AcroFormField#fieldName\n * @default null\n * @type {string}\n */\n Object.defineProperty(this, \"fieldName\", {\n configurable: true,\n enumerable: true,\n get: function() {\n return _T;\n },\n set: function(value) {\n _T = value;\n }\n });\n\n var _fontName = \"helvetica\";\n /**\n * The fontName of the font to be used.\n *\n * @name AcroFormField#fontName\n * @default 'helvetica'\n * @type {string}\n */\n Object.defineProperty(this, \"fontName\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontName;\n },\n set: function(value) {\n _fontName = value;\n }\n });\n\n var _fontStyle = \"normal\";\n /**\n * The fontStyle of the font to be used.\n *\n * @name AcroFormField#fontStyle\n * @default 'normal'\n * @type {string}\n */\n Object.defineProperty(this, \"fontStyle\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontStyle;\n },\n set: function(value) {\n _fontStyle = value;\n }\n });\n\n var _fontSize = 0;\n /**\n * The fontSize of the font to be used.\n *\n * @name AcroFormField#fontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"fontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontSize;\n },\n set: function(value) {\n _fontSize = value;\n }\n });\n\n var _maxFontSize = undefined;\n /**\n * The maximum fontSize of the font to be used.\n *\n * @name AcroFormField#maxFontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"maxFontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (_maxFontSize === undefined) {\n // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n return 50 / scaleFactor;\n } else {\n return _maxFontSize;\n }\n },\n set: function(value) {\n _maxFontSize = value;\n }\n });\n\n var _color = \"black\";\n /**\n * The color of the text\n *\n * @name AcroFormField#color\n * @default 'black'\n * @type {string|rgba}\n */\n Object.defineProperty(this, \"color\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _color;\n },\n set: function(value) {\n _color = value;\n }\n });\n\n var _DA = \"/F1 0 Tf 0 g\";\n // Defines the default appearance (Needed for variable Text)\n Object.defineProperty(this, \"DA\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (\n !_DA ||\n this instanceof AcroFormChildClass ||\n this instanceof AcroFormTextField\n ) {\n return undefined;\n }\n return toPdfString(_DA, this.objId, this.scope);\n },\n set: function(value) {\n value = value.toString();\n _DA = value;\n }\n });\n\n var _DV = null;\n Object.defineProperty(this, \"DV\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DV) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_DV, this.objId, this.scope);\n }\n return _DV;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _DV = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _DV = pdfUnescape(value);\n }\n } else {\n _DV = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n *\n * @name AcroFormField#defaultValue\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"defaultValue\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_DV.substr(1, _DV.length - 1));\n } else {\n return _DV;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _DV = \"/\" + value;\n } else {\n _DV = value;\n }\n }\n });\n\n var _V = null;\n Object.defineProperty(this, \"_V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n return _V;\n },\n set: function(value) {\n this.V = value;\n }\n });\n Object.defineProperty(this, \"V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_V, this.objId, this.scope);\n }\n return _V;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _V = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _V = pdfUnescape(value);\n }\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n *\n * @name AcroFormField#value\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"value\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_V.substr(1, _V.length - 1));\n } else {\n return _V;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _V = \"/\" + value;\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * Check if field has annotations\n *\n * @name AcroFormField#hasAnnotation\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAnnotation\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.Rect;\n }\n });\n\n Object.defineProperty(this, \"Type\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Annot\" : null;\n }\n });\n\n Object.defineProperty(this, \"Subtype\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Widget\" : null;\n }\n });\n\n var _hasAppearanceStream = false;\n /**\n * true if field has an appearanceStream\n *\n * @name AcroFormField#hasAppearanceStream\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _hasAppearanceStream;\n },\n set: function(value) {\n value = Boolean(value);\n _hasAppearanceStream = value;\n }\n });\n\n /**\n * The page on which the AcroFormField is placed\n *\n * @name AcroFormField#page\n * @type {number}\n */\n var _page;\n Object.defineProperty(this, \"page\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_page) {\n return undefined;\n }\n return _page;\n },\n set: function(value) {\n _page = value;\n }\n });\n\n /**\n * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n *\n * @name AcroFormField#readOnly\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"readOnly\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 1));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 1);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 1);\n }\n }\n });\n\n /**\n * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n *\n * @name AcroFormField#required\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 2));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 2);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 2);\n }\n }\n });\n\n /**\n * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n *\n * @name AcroFormField#noExport\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"noExport\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 3);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 3);\n }\n }\n });\n\n var _Q = null;\n Object.defineProperty(this, \"Q\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (_Q === null) {\n return undefined;\n }\n return _Q;\n },\n set: function(value) {\n if ([0, 1, 2].indexOf(value) !== -1) {\n _Q = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Q supplied.'\n );\n }\n }\n });\n\n /**\n * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n * 'left', 'center', 'right'\n *\n * @name AcroFormField#textAlign\n * @default 'left'\n * @type {string}\n */\n Object.defineProperty(this, \"textAlign\", {\n get: function() {\n var result;\n switch (_Q) {\n case 0:\n default:\n result = \"left\";\n break;\n case 1:\n result = \"center\";\n break;\n case 2:\n result = \"right\";\n break;\n }\n return result;\n },\n configurable: true,\n enumerable: true,\n set: function(value) {\n switch (value) {\n case \"right\":\n case 2:\n _Q = 2;\n break;\n case \"center\":\n case 1:\n _Q = 1;\n break;\n case \"left\":\n case 0:\n default:\n _Q = 0;\n }\n }\n });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n AcroFormField.call(this);\n // Field Type = Choice Field\n this.FT = \"/Ch\";\n // options\n this.V = \"()\";\n\n this.fontName = \"zapfdingbats\";\n // Top Index\n var _TI = 0;\n\n Object.defineProperty(this, \"TI\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n /**\n * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n *\n * @name AcroFormChoiceField#topIndex\n * @default 0\n * @type {number}\n */\n Object.defineProperty(this, \"topIndex\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n var _Opt = [];\n Object.defineProperty(this, \"Opt\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return arrayToPdfArray(_Opt, this.objId, this.scope);\n },\n set: function(value) {\n _Opt = pdfArrayToStringArray(value);\n }\n });\n\n /**\n * @memberof AcroFormChoiceField\n * @name getOptions\n * @function\n * @instance\n * @returns {array} array of Options\n */\n this.getOptions = function() {\n return _Opt;\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name setOptions\n * @function\n * @instance\n * @param {array} value\n */\n this.setOptions = function(value) {\n _Opt = value;\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name addOption\n * @function\n * @instance\n * @param {string} value\n */\n this.addOption = function(value) {\n value = value || \"\";\n value = value.toString();\n _Opt.push(value);\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name removeOption\n * @function\n * @instance\n * @param {string} value\n * @param {boolean} allEntries (default: false)\n */\n this.removeOption = function(value, allEntries) {\n allEntries = allEntries || false;\n value = value || \"\";\n value = value.toString();\n\n while (_Opt.indexOf(value) !== -1) {\n _Opt.splice(_Opt.indexOf(value), 1);\n if (allEntries === false) {\n break;\n }\n }\n };\n\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n *\n * @name AcroFormChoiceField#combo\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"combo\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 18));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 18);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 18);\n }\n }\n });\n\n /**\n * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n *\n * @name AcroFormChoiceField#edit\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"edit\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 19));\n },\n set: function(value) {\n //PDF 32000-1:2008, page 444\n if (this.combo === true) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 19);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 19);\n }\n }\n }\n });\n\n /**\n * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n *\n * @name AcroFormChoiceField#sort\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"sort\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 20));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 20);\n _Opt.sort();\n } else {\n this.Ff = clearBitForPdf(this.Ff, 20);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n *\n * @name AcroFormChoiceField#multiSelect\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 22));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 22);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 22);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n *\n * @name AcroFormChoiceField#doNotSpellCheck\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n *\n * @name AcroFormChoiceField#commitOnSelChange\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"commitOnSelChange\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 27));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 27);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 27);\n }\n }\n });\n\n this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n AcroFormChoiceField.call(this);\n this.fontName = \"helvetica\";\n\n //PDF 32000-1:2008, page 444\n this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n AcroFormListBox.call(this);\n this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n AcroFormComboBox.call(this);\n this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n AcroFormField.call(this);\n this.FT = \"/Btn\";\n\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n *\n * @name AcroFormButton#noToggleToOff\n * @type {boolean}\n */\n Object.defineProperty(this, \"noToggleToOff\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 15));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 15);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 15);\n }\n }\n });\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n *\n * @name AcroFormButton#radio\n * @type {boolean}\n */\n Object.defineProperty(this, \"radio\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 16));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 16);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 16);\n }\n }\n });\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n *\n * @name AcroFormButton#pushButton\n * @type {boolean}\n */\n Object.defineProperty(this, \"pushButton\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 17));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 17);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 17);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n *\n * @name AcroFormButton#radioIsUnison\n * @type {boolean}\n */\n Object.defineProperty(this, \"radioIsUnison\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n if (Object.keys(_MK).length !== 0) {\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n }\n return undefined;\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n AcroFormButton.call(this);\n this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n AcroFormButton.call(this);\n this.radio = true;\n this.pushButton = false;\n\n var _Kids = [];\n Object.defineProperty(this, \"Kids\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _Kids;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Kids = value;\n } else {\n _Kids = [];\n }\n }\n });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n AcroFormField.call(this);\n\n var _parent;\n Object.defineProperty(this, \"Parent\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _parent;\n },\n set: function(value) {\n _parent = value;\n }\n });\n\n var _optionName;\n Object.defineProperty(this, \"optionName\", {\n enumerable: false,\n configurable: true,\n get: function() {\n return _optionName;\n },\n set: function(value) {\n _optionName = value;\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n this.caption = \"l\";\n this.appearanceState = \"Off\";\n // todo: set AppearanceType as variable that can be set from the\n // outside...\n this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n // The Default appearanceType is the Circle\n this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n this.optionName\n );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n throw new Error(\n \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n );\n }\n for (var objId in this.Kids) {\n if (this.Kids.hasOwnProperty(objId)) {\n var child = this.Kids[objId];\n child.appearanceStreamContent = appearance.createAppearanceStream(\n child.optionName\n );\n child.caption = appearance.getCA();\n }\n }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n // Create new Child for RadioGroup\n var child = new AcroFormChildClass();\n child.Parent = this;\n child.optionName = name;\n // Add to Parent\n this.Kids.push(child);\n\n addField.call(this.scope, child);\n\n return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n AcroFormButton.call(this);\n\n this.fontName = \"zapfdingbats\";\n this.caption = \"3\";\n this.appearanceState = \"On\";\n this.value = \"On\";\n this.textAlign = \"center\";\n this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n AcroFormField.call(this);\n this.FT = \"/Tx\";\n\n /**\n * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n *\n * @name AcroFormTextField#multiline\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiline\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 13));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 13);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 13);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n *\n * @name AcroFormTextField#fileSelect\n * @type {boolean}\n */\n Object.defineProperty(this, \"fileSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 21));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 21);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 21);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n *\n * @name AcroFormTextField#doNotSpellCheck\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n *\n * @name AcroFormTextField#doNotScroll\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotScroll\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 24));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 24);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 24);\n }\n }\n });\n\n /**\n * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n *\n * @name AcroFormTextField#comb\n * @type {boolean}\n */\n Object.defineProperty(this, \"comb\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 25));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 25);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 25);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n *\n * @name AcroFormTextField#richText\n * @type {boolean}\n */\n Object.defineProperty(this, \"richText\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MaxLen = null;\n Object.defineProperty(this, \"MaxLen\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n _MaxLen = value;\n }\n });\n\n /**\n * (Optional; inheritable) The maximum length of the field’s text, in characters.\n *\n * @name AcroFormTextField#maxLength\n * @type {number}\n */\n Object.defineProperty(this, \"maxLength\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n if (Number.isInteger(value)) {\n _MaxLen = value;\n }\n }\n });\n\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.V || this.DV;\n }\n });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n AcroFormTextField.call(this);\n\n /**\n * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n *\n * @name AcroFormTextField#password\n * @type {boolean}\n */\n Object.defineProperty(this, \"password\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 14));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 14);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 14);\n }\n }\n });\n this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n CheckBox: {\n createAppearanceStream: function() {\n var appearance = {\n N: {\n On: AcroFormAppearance.CheckBox.YesNormal\n },\n D: {\n On: AcroFormAppearance.CheckBox.YesPushDown,\n Off: AcroFormAppearance.CheckBox.OffPushDown\n }\n };\n\n return appearance;\n },\n /**\n * Returns the standard On Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"BMC\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(\"BT\");\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n stream.push(\"EMC\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var stream = [];\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"1 g\");\n stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(\"0 g\");\n stream.push(\"BT\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n /**\n * Returns the standard Off Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n RadioButton: {\n Circle: {\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Circle.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Circle.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"l\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n // Make the Radius of the Circle relative to min(height, width) of formObject\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n var c = AcroFormAppearance.internal.Bezier_C;\n var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n /*\n * The Following is a Circle created with Bezier-Curves.\n */\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n var dc = Number(\n (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n );\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n stream.push(\"0 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n \"\" +\n DotRadius +\n \" \" +\n dc +\n \" \" +\n dc +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n dc +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n dc +\n \" -\" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n dc +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n dc +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n Cross: {\n /**\n * Creates the Actual AppearanceDictionary-References\n *\n * @param {string} name\n * @returns {Object}\n * @ignore\n */\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Cross.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Cross.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"8\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n }\n },\n\n /**\n * Returns the standard Appearance\n *\n * @returns {AcroFormXObject}\n */\n createDefaultAppearanceStream: function(formObject) {\n // Set Helvetica to Standard Font (size: auto)\n // Color: Black\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var fontSize = formObject.fontSize;\n var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n return result;\n }\n};\n\nAcroFormAppearance.internal = {\n Bezier_C: 0.551915024494,\n\n calculateCross: function(formObject) {\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var a = Math.min(width, height);\n\n var cross = {\n x1: {\n // upperLeft\n x: (width - a) / 2,\n y: (height - a) / 2 + a // height - borderPadding\n },\n x2: {\n // lowerRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 // borderPadding\n },\n x3: {\n // lowerLeft\n x: (width - a) / 2,\n y: (height - a) / 2 // borderPadding\n },\n x4: {\n // upperRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 + a // height - borderPadding\n }\n };\n\n return cross;\n }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[2]);\n }\n return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[3]);\n }\n return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n initializeAcroForm(this, fieldObject);\n\n if (fieldObject instanceof AcroFormField) {\n putForm(fieldObject);\n } else {\n throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n }\n fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n AcroForm,\n AcroFormChoiceField,\n AcroFormListBox,\n AcroFormComboBox,\n AcroFormEditBox,\n AcroFormButton,\n AcroFormPushButton,\n AcroFormRadioButton,\n AcroFormCheckBox,\n AcroFormTextField,\n AcroFormPasswordField,\n AcroFormAppearance\n};\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namespace = \"addImage_\";\n jsPDFAPI.__addimage__ = {};\n\n var UNKNOWN = \"UNKNOWN\";\n\n // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n // With too small batch iteration will be slow as more calls are made,\n // higher values cause larger and slower garbage collection.\n var ARRAY_APPLY_BATCH = 8192;\n\n var imageFileTypeHeaders = {\n PNG: [[0x89, 0x50, 0x4e, 0x47]],\n TIFF: [\n [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n [0x49, 0x49, 0x2a, 0x00] //Intel\n ],\n JPEG: [\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe0,\n undefined,\n undefined,\n 0x4a,\n 0x46,\n 0x49,\n 0x46,\n 0x00\n ], //JFIF\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe1,\n undefined,\n undefined,\n 0x45,\n 0x78,\n 0x69,\n 0x66,\n 0x00,\n 0x00\n ], //Exif\n [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n ],\n JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n WEBP: [\n [\n 0x52,\n 0x49,\n 0x46,\n 0x46,\n undefined,\n undefined,\n undefined,\n undefined,\n 0x57,\n 0x45,\n 0x42,\n 0x50\n ]\n ],\n BMP: [\n [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n [0x42, 0x41], //BA - OS/2 struct bitmap array\n [0x43, 0x49], //CI - OS/2 struct color icon\n [0x43, 0x50], //CP - OS/2 const color pointer\n [0x49, 0x43], //IC - OS/2 struct icon\n [0x50, 0x54] //PT - OS/2 pointer\n ]\n };\n\n /**\n * Recognize filetype of Image by magic-bytes\n *\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n *\n * @name getImageFileTypeByImageData\n * @public\n * @function\n * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n *\n * @returns {string} filetype of Image\n */\n var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n imageData,\n fallbackFormat\n ) {\n fallbackFormat = fallbackFormat || UNKNOWN;\n var i;\n var j;\n var result = UNKNOWN;\n var headerSchemata;\n var compareResult;\n var fileType;\n\n if (\n fallbackFormat === \"RGBA\" ||\n (imageData.data !== undefined &&\n imageData.data instanceof Uint8ClampedArray &&\n \"height\" in imageData &&\n \"width\" in imageData)\n ) {\n return \"RGBA\";\n }\n\n if (isArrayBufferView(imageData)) {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData[j]) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n } else {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n }\n\n if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n result = fallbackFormat;\n }\n return result;\n });\n\n // Image functionality ported from pdf.js\n var putImage = function(image) {\n var out = this.internal.write;\n var putStream = this.internal.putStream;\n var getFilters = this.internal.getFilters;\n\n var filter = getFilters();\n while (filter.indexOf(\"FlateEncode\") !== -1) {\n filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n }\n\n image.objectId = this.internal.newObject();\n\n var additionalKeyValues = [];\n additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n additionalKeyValues.push({ key: \"Width\", value: image.width });\n additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n if (image.colorSpace === color_spaces.INDEXED) {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value:\n \"[/Indexed /DeviceRGB \" +\n // if an indexed png defines more than one colour with transparency, we've created a sMask\n (image.palette.length / 3 - 1) +\n \" \" +\n (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n ? image.objectId + 2\n : image.objectId + 1) +\n \" 0 R]\"\n });\n } else {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value: \"/\" + image.colorSpace\n });\n if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n }\n }\n additionalKeyValues.push({\n key: \"BitsPerComponent\",\n value: image.bitsPerComponent\n });\n if (\n \"decodeParameters\" in image &&\n typeof image.decodeParameters !== \"undefined\"\n ) {\n additionalKeyValues.push({\n key: \"DecodeParms\",\n value: \"<<\" + image.decodeParameters + \">>\"\n });\n }\n if (\"transparency\" in image && Array.isArray(image.transparency)) {\n var transparency = \"\",\n i = 0,\n len = image.transparency.length;\n for (; i < len; i++)\n transparency +=\n image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n additionalKeyValues.push({\n key: \"Mask\",\n value: \"[\" + transparency + \"]\"\n });\n }\n if (typeof image.sMask !== \"undefined\") {\n additionalKeyValues.push({\n key: \"SMask\",\n value: image.objectId + 1 + \" 0 R\"\n });\n }\n\n var alreadyAppliedFilters =\n typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n putStream({\n data: image.data,\n additionalKeyValues: additionalKeyValues,\n alreadyAppliedFilters: alreadyAppliedFilters,\n objectId: image.objectId\n });\n\n out(\"endobj\");\n\n // Soft mask\n if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n var decodeParameters =\n \"/Predictor \" +\n image.predictor +\n \" /Colors 1 /BitsPerComponent \" +\n image.bitsPerComponent +\n \" /Columns \" +\n image.width;\n var sMask = {\n width: image.width,\n height: image.height,\n colorSpace: \"DeviceGray\",\n bitsPerComponent: image.bitsPerComponent,\n decodeParameters: decodeParameters,\n data: image.sMask\n };\n if (\"filter\" in image) {\n sMask.filter = image.filter;\n }\n putImage.call(this, sMask);\n }\n\n //Palette\n if (image.colorSpace === color_spaces.INDEXED) {\n var objId = this.internal.newObject();\n //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n //putStream(zlib.compress(img['pal']));\n putStream({\n data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n objectId: objId\n });\n out(\"endobj\");\n }\n };\n var putResourcesCallback = function() {\n var images = this.internal.collections[namespace + \"images\"];\n for (var i in images) {\n putImage.call(this, images[i]);\n }\n };\n var putXObjectsDictCallback = function() {\n var images = this.internal.collections[namespace + \"images\"],\n out = this.internal.write,\n image;\n for (var i in images) {\n image = images[i];\n out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n }\n };\n\n var checkCompressValue = function(value) {\n if (value && typeof value === \"string\") value = value.toUpperCase();\n return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n };\n\n var initialize = function() {\n if (!this.internal.collections[namespace + \"images\"]) {\n this.internal.collections[namespace + \"images\"] = {};\n this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n }\n };\n\n var getImages = function() {\n var images = this.internal.collections[namespace + \"images\"];\n initialize.call(this);\n return images;\n };\n var getImageIndex = function() {\n return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n };\n var notDefined = function(value) {\n return typeof value === \"undefined\" || value === null || value.length === 0;\n };\n var generateAliasFromImageData = function(imageData) {\n if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n return sHashCode(imageData);\n } else if (isArrayBufferView(imageData.data)) {\n return sHashCode(imageData.data);\n }\n\n return null;\n };\n\n var isImageTypeSupported = function(type) {\n return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n };\n\n var isDOMElement = function(object) {\n return typeof object === \"object\" && object.nodeType === 1;\n };\n\n var getImageDataFromElement = function(element, format) {\n //if element is an image which uses data url definition, just return the dataurl\n if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n var src = \"\" + element.getAttribute(\"src\");\n\n //is base64 encoded dataUrl, directly process it\n if (src.indexOf(\"data:image/\") === 0) {\n return atob(\n unescape(src)\n .split(\"base64,\")\n .pop()\n );\n }\n\n //it is probably an url, try to load it\n var tmpImageData = jsPDFAPI.loadFile(src, true);\n if (tmpImageData !== undefined) {\n return tmpImageData;\n }\n }\n\n if (element.nodeName === \"CANVAS\") {\n if (element.width === 0 || element.height === 0) {\n throw new Error(\n \"Given canvas must have data. Canvas width: \" +\n element.width +\n \", height: \" +\n element.height\n );\n }\n var mimeType;\n switch (format) {\n case \"PNG\":\n mimeType = \"image/png\";\n break;\n case \"WEBP\":\n mimeType = \"image/webp\";\n break;\n case \"JPEG\":\n case \"JPG\":\n default:\n mimeType = \"image/jpeg\";\n break;\n }\n return atob(\n element\n .toDataURL(mimeType, 1.0)\n .split(\"base64,\")\n .pop()\n );\n }\n };\n\n var checkImagesForAlias = function(alias) {\n var images = this.internal.collections[namespace + \"images\"];\n if (images) {\n for (var e in images) {\n if (alias === images[e].alias) {\n return images[e];\n }\n }\n }\n };\n\n var determineWidthAndHeight = function(width, height, image) {\n if (!width && !height) {\n width = -96;\n height = -96;\n }\n if (width < 0) {\n width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n }\n if (height < 0) {\n height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n }\n if (width === 0) {\n width = (height * image.width) / image.height;\n }\n if (height === 0) {\n height = (width * image.height) / image.width;\n }\n\n return [width, height];\n };\n\n var writeImageToPDF = function(x, y, width, height, image, rotation) {\n var dims = determineWidthAndHeight.call(this, width, height, image),\n coord = this.internal.getCoordinateString,\n vcoord = this.internal.getVerticalCoordinateString;\n\n var images = getImages.call(this);\n\n width = dims[0];\n height = dims[1];\n images[image.index] = image;\n\n if (rotation) {\n rotation *= Math.PI / 180;\n var c = Math.cos(rotation);\n var s = Math.sin(rotation);\n //like in pdf Reference do it 4 digits instead of 2\n var f4 = function(number) {\n return number.toFixed(4);\n };\n var rotationTransformationMatrix = [\n f4(c),\n f4(s),\n f4(s * -1),\n f4(c),\n 0,\n 0,\n \"cm\"\n ];\n }\n this.internal.write(\"q\"); //Save graphics state\n if (rotation) {\n this.internal.write(\n [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n ); //Translate\n this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n this.internal.write(\n [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n ); //Scale\n } else {\n this.internal.write(\n [\n coord(width),\n \"0\",\n \"0\",\n coord(height),\n coord(x),\n vcoord(y + height),\n \"cm\"\n ].join(\" \")\n ); //Translate and Scale\n }\n\n if (this.isAdvancedAPI()) {\n // draw image bottom up when in \"advanced\" API mode\n this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n }\n\n this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n this.internal.write(\"Q\"); //Restore graphics state\n };\n\n /**\n * COLOR SPACES\n */\n var color_spaces = (jsPDFAPI.color_spaces = {\n DEVICE_RGB: \"DeviceRGB\",\n DEVICE_GRAY: \"DeviceGray\",\n DEVICE_CMYK: \"DeviceCMYK\",\n CAL_GREY: \"CalGray\",\n CAL_RGB: \"CalRGB\",\n LAB: \"Lab\",\n ICC_BASED: \"ICCBased\",\n INDEXED: \"Indexed\",\n PATTERN: \"Pattern\",\n SEPARATION: \"Separation\",\n DEVICE_N: \"DeviceN\"\n });\n\n /**\n * DECODE METHODS\n */\n jsPDFAPI.decode = {\n DCT_DECODE: \"DCTDecode\",\n FLATE_DECODE: \"FlateDecode\",\n LZW_DECODE: \"LZWDecode\",\n JPX_DECODE: \"JPXDecode\",\n JBIG2_DECODE: \"JBIG2Decode\",\n ASCII85_DECODE: \"ASCII85Decode\",\n ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n RUN_LENGTH_DECODE: \"RunLengthDecode\",\n CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n };\n\n /**\n * IMAGE COMPRESSION TYPES\n */\n var image_compression = (jsPDFAPI.image_compression = {\n NONE: \"NONE\",\n FAST: \"FAST\",\n MEDIUM: \"MEDIUM\",\n SLOW: \"SLOW\"\n });\n\n /**\n * @name sHashCode\n * @function\n * @param {string} data\n * @returns {string}\n */\n var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n var hash = 0,\n i,\n len;\n\n if (typeof data === \"string\") {\n len = data.length;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n } else if (isArrayBufferView(data)) {\n len = data.byteLength / 2;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data[i];\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n });\n\n /**\n * Validates if given String is a valid Base64-String\n *\n * @name validateStringAsBase64\n * @public\n * @function\n * @param {String} possible Base64-String\n *\n * @returns {boolean}\n */\n var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n possibleBase64String\n ) {\n possibleBase64String = possibleBase64String || \"\";\n possibleBase64String.toString().trim();\n\n var result = true;\n\n if (possibleBase64String.length === 0) {\n result = false;\n }\n\n if (possibleBase64String.length % 4 !== 0) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9+/]+$/.test(\n possibleBase64String.substr(0, possibleBase64String.length - 2)\n ) === false\n ) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n possibleBase64String.substr(-2)\n ) === false\n ) {\n result = false;\n }\n return result;\n });\n\n /**\n * Strips out and returns info from a valid base64 data URI\n *\n * @name extractImageFromDataUrl\n * @function\n * @param {string} dataUrl a valid data URI of format 'data:[][;base64],'\n * @returns {Array}an Array containing the following\n * [0] the complete data URI\n * [1] \n * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n * [4] \n */\n var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n dataUrl\n ) {\n dataUrl = dataUrl || \"\";\n var dataUrlParts = dataUrl.split(\"base64,\");\n var result = null;\n\n if (dataUrlParts.length === 2) {\n var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n dataUrlParts[0]\n );\n if (Array.isArray(extractedInfo)) {\n result = {\n mimeType: extractedInfo[1],\n charset: extractedInfo[2],\n data: dataUrlParts[1]\n };\n }\n }\n return result;\n });\n\n /**\n * Check to see if ArrayBuffer is supported\n *\n * @name supportsArrayBuffer\n * @function\n * @returns {boolean}\n */\n var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n return (\n typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n );\n });\n\n /**\n * Tests supplied object to determine if ArrayBuffer\n *\n * @name isArrayBuffer\n * @function\n * @param {Object} object an Object\n *\n * @returns {boolean}\n */\n jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n return supportsArrayBuffer() && object instanceof ArrayBuffer;\n };\n\n /**\n * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n *\n * @name isArrayBufferView\n * @function\n * @param {Object} object an Object\n * @returns {boolean}\n */\n var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n object\n ) {\n return (\n supportsArrayBuffer() &&\n typeof Uint32Array !== \"undefined\" &&\n (object instanceof Int8Array ||\n object instanceof Uint8Array ||\n (typeof Uint8ClampedArray !== \"undefined\" &&\n object instanceof Uint8ClampedArray) ||\n object instanceof Int16Array ||\n object instanceof Uint16Array ||\n object instanceof Int32Array ||\n object instanceof Uint32Array ||\n object instanceof Float32Array ||\n object instanceof Float64Array)\n );\n });\n\n /**\n * Convert Binary String to ArrayBuffer\n *\n * @name binaryStringToUint8Array\n * @public\n * @function\n * @param {string} BinaryString with ImageData\n * @returns {Uint8Array}\n */\n var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n binary_string\n ) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n });\n\n /**\n * Convert the Buffer to a Binary String\n *\n * @name arrayBufferToBinaryString\n * @public\n * @function\n * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n *\n * @returns {String}\n */\n var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n buffer\n ) {\n var out = \"\";\n // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n // Do not copy the array if input is already an array.\n var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n // Limit the amount of characters being parsed to prevent overflow.\n // Note that while TextDecoder would be faster, it does not have the same\n // functionality as fromCharCode with any provided encodings as of 3/2021.\n out += String.fromCharCode.apply(\n null,\n buf.subarray(i, i + ARRAY_APPLY_BATCH)\n );\n }\n return out;\n });\n\n /**\n * Possible parameter for addImage, an RGBA buffer with size.\n *\n * @typedef {Object} RGBAData\n * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n * @property {number} width - Image width as the data does not carry this information in itself.\n * @property {number} height - Image height as the data does not carry this information in itself.\n */\n\n /**\n * Adds an Image to the PDF.\n *\n * @name addImage\n * @public\n * @function\n * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width width of the image (in units declared at inception of PDF document)\n * @param {number} height height of the Image (in units declared at inception of PDF document)\n * @param {string} alias alias of the image (if used multiple times)\n * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation rotation of the image in degrees (0-359)\n *\n * @returns jsPDF\n */\n jsPDFAPI.addImage = function() {\n var imageData, format, x, y, w, h, alias, compression, rotation;\n\n imageData = arguments[0];\n if (typeof arguments[1] === \"number\") {\n format = UNKNOWN;\n x = arguments[1];\n y = arguments[2];\n w = arguments[3];\n h = arguments[4];\n alias = arguments[5];\n compression = arguments[6];\n rotation = arguments[7];\n } else {\n format = arguments[1];\n x = arguments[2];\n y = arguments[3];\n w = arguments[4];\n h = arguments[5];\n alias = arguments[6];\n compression = arguments[7];\n rotation = arguments[8];\n }\n\n if (\n typeof imageData === \"object\" &&\n !isDOMElement(imageData) &&\n \"imageData\" in imageData\n ) {\n var options = imageData;\n\n imageData = options.imageData;\n format = options.format || format || UNKNOWN;\n x = options.x || x || 0;\n y = options.y || y || 0;\n w = options.w || options.width || w;\n h = options.h || options.height || h;\n alias = options.alias || alias;\n compression = options.compression || compression;\n rotation = options.rotation || options.angle || rotation;\n }\n\n //If compression is not explicitly set, determine if we should use compression\n var filter = this.internal.getFilters();\n if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n compression = \"SLOW\";\n }\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n }\n\n initialize.call(this);\n\n var image = processImageData.call(\n this,\n imageData,\n format,\n alias,\n compression\n );\n\n writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n return this;\n };\n\n var processImageData = function(imageData, format, alias, compression) {\n var result, dataAsBinaryString;\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n imageData = unescape(imageData);\n var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData !== \"\") {\n imageData = tmpImageData;\n } else {\n tmpImageData = jsPDFAPI.loadFile(imageData, true);\n if (tmpImageData !== undefined) {\n imageData = tmpImageData;\n }\n }\n }\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData, format);\n }\n\n format = getImageFileTypeByImageData(imageData, format);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n // now do the heavy lifting\n\n if (notDefined(alias)) {\n alias = generateAliasFromImageData(imageData);\n }\n result = checkImagesForAlias.call(this, alias);\n\n if (!result) {\n if (supportsArrayBuffer()) {\n // no need to convert if imageData is already uint8array\n if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n dataAsBinaryString = imageData;\n imageData = binaryStringToUint8Array(imageData);\n }\n }\n\n result = this[\"process\" + format.toUpperCase()](\n imageData,\n getImageIndex.call(this),\n alias,\n checkCompressValue(compression),\n dataAsBinaryString\n );\n }\n\n if (!result) {\n throw new Error(\"An unknown error occurred whilst processing the image.\");\n }\n return result;\n };\n\n /**\n * @name convertBase64ToBinaryString\n * @function\n * @param {string} stringData\n * @returns {string} binary string\n */\n var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n stringData,\n throwError\n ) {\n throwError = typeof throwError === \"boolean\" ? throwError : true;\n var base64Info;\n var imageData = \"\";\n var rawData;\n\n if (typeof stringData === \"string\") {\n base64Info = extractImageFromDataUrl(stringData);\n rawData = base64Info !== null ? base64Info.data : stringData;\n\n try {\n imageData = atob(rawData);\n } catch (e) {\n if (throwError) {\n if (!validateStringAsBase64(rawData)) {\n throw new Error(\n \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n );\n } else {\n throw new Error(\n \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n );\n }\n }\n }\n }\n return imageData;\n });\n\n /**\n * @name getImageProperties\n * @function\n * @param {Object} imageData\n * @returns {Object}\n */\n jsPDFAPI.getImageProperties = function(imageData) {\n var image;\n var tmpImageData = \"\";\n var format;\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData);\n }\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData === \"\") {\n tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n }\n imageData = tmpImageData;\n }\n\n format = getImageFileTypeByImageData(imageData);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n imageData = binaryStringToUint8Array(imageData);\n }\n\n image = this[\"process\" + format.toUpperCase()](imageData);\n\n if (!image) {\n throw new Error(\"An unknown error occurred whilst processing the image\");\n }\n\n image.fileType = format;\n\n return image;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n *
    \n * This plugin current supports
    \n *
  21. Goto Page (set pageNumber and top in options)\n *
  22. Goto Name (set name and top in options)\n *
  23. Goto URL (set url in options)\n *

    \n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n * (set magFactor in options). XYZ is the default.\n *

    \n *

    \n * Links, Text, Popup, and FreeText are supported.\n *

    \n *

    \n * Options In PDF spec Not Implemented Yet\n *

  24. link border\n *
  25. named target\n *
  26. page coordinates\n *
  27. destination page scaling and layout\n *
  28. actions other than URL and GotoPage\n *
  29. background / hover actions\n *

    \n * @name annotations\n * @module\n */\n\n/*\n Destination Magnification Factors\n See PDF 1.3 Page 386 for meanings and options\n\n [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var notEmpty = function(obj) {\n if (typeof obj != \"undefined\") {\n if (obj != \"\") {\n return true;\n }\n }\n };\n\n jsPDF.API.events.push([\n \"addPage\",\n function(addPageData) {\n var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n pageInfo.pageContext.annotations = [];\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putPage\",\n function(putPageData) {\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal\n .getVerticalCoordinateString;\n var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n var pageAnnos = putPageData.pageContext.annotations;\n\n var anno, rect, line;\n var found = false;\n for (var a = 0; a < pageAnnos.length && !found; a++) {\n anno = pageAnnos[a];\n switch (anno.type) {\n case \"link\":\n if (\n notEmpty(anno.options.url) ||\n notEmpty(anno.options.pageNumber)\n ) {\n found = true;\n }\n break;\n case \"reference\":\n case \"text\":\n case \"freetext\":\n found = true;\n break;\n }\n }\n if (found == false) {\n return;\n }\n\n this.internal.write(\"/Annots [\");\n for (var i = 0; i < pageAnnos.length; i++) {\n anno = pageAnnos[i];\n var escape = this.internal.pdfEscape;\n var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n switch (anno.type) {\n case \"reference\":\n // References to Widget Annotations (for AcroForm Fields)\n this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n break;\n case \"text\":\n // Create a an object for both the text and the popup\n var objText = this.internal.newAdditionalObject();\n var objPopup = this.internal.newAdditionalObject();\n var encryptorText = this.internal.getEncryptor(objText.objId);\n\n var title = anno.title || \"Note\";\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n\n line =\n \"<>\";\n objText.content = line;\n\n var parent = objText.objId + \" 0 R\";\n var popoff = 30;\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x + popoff) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(\n anno.bounds.x + anno.bounds.w + popoff\n ) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n line =\n \"<>\";\n objPopup.content = line;\n\n this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n break;\n case \"freetext\":\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \"] \";\n var color = anno.color || \"#000000\";\n line =\n \"<>\";\n this.internal.write(line);\n break;\n case \"link\":\n if (anno.options.name) {\n var loc = this.annotations._nameMap[anno.options.name];\n anno.options.pageNumber = loc.page;\n anno.options.top = loc.y;\n } else {\n if (!anno.options.top) {\n anno.options.top = 0;\n }\n }\n\n rect =\n \"/Rect [\" +\n anno.finalBounds.x +\n \" \" +\n anno.finalBounds.y +\n \" \" +\n anno.finalBounds.w +\n \" \" +\n anno.finalBounds.h +\n \"] \";\n\n line = \"\";\n if (anno.options.url) {\n line =\n \"<>\";\n } else if (anno.options.pageNumber) {\n // first page is 0\n var info = this.internal.getPageInfo(anno.options.pageNumber);\n line =\n \"<>\";\n this.internal.write(line);\n }\n break;\n }\n }\n this.internal.write(\"]\");\n }\n ]);\n\n /**\n * @name createAnnotation\n * @function\n * @param {Object} options\n */\n jsPDFAPI.createAnnotation = function(options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n switch (options.type) {\n case \"link\":\n this.link(\n options.bounds.x,\n options.bounds.y,\n options.bounds.w,\n options.bounds.h,\n options\n );\n break;\n case \"text\":\n case \"freetext\":\n pageInfo.pageContext.annotations.push(options);\n break;\n }\n };\n\n /**\n * Create a link\n *\n * valid options\n *
  30. pageNumber or url [required]\n *

    If pageNumber is specified, top and zoom may also be specified

    \n * @name link\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {Object} options\n */\n jsPDFAPI.link = function(x, y, w, h, options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n pageInfo.pageContext.annotations.push({\n finalBounds: {\n x: getHorizontalCoordinateString(x),\n y: getVerticalCoordinateString(y),\n w: getHorizontalCoordinateString(x + w),\n h: getVerticalCoordinateString(y + h)\n },\n options: options,\n type: \"link\"\n });\n };\n\n /**\n * Currently only supports single line text.\n * Returns the width of the text/link\n *\n * @name textWithLink\n * @function\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {Object} options\n * @returns {number} width the width of the text/link\n */\n jsPDFAPI.textWithLink = function(text, x, y, options) {\n var totalLineWidth = this.getTextWidth(text);\n var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n var linkHeight, linkWidth;\n\n // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n if (options.maxWidth !== undefined) {\n var { maxWidth } = options;\n linkWidth = maxWidth;\n var numOfLines = this.splitTextToSize(text, linkWidth).length;\n linkHeight = Math.ceil(lineHeight * numOfLines);\n } else {\n linkWidth = totalLineWidth;\n linkHeight = lineHeight;\n }\n\n this.text(text, x, y, options);\n\n //TODO We really need the text baseline height to do this correctly.\n // Or ability to draw text on top, bottom, center, or baseline.\n y += lineHeight * 0.2;\n //handle x position based on the align option\n if (options.align === \"center\") {\n x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n }\n if (options.align === \"right\") {\n x = x - totalLineWidth;\n }\n this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n return totalLineWidth;\n };\n\n //TODO move into external library\n /**\n * @name getTextWidth\n * @function\n * @param {string} text\n * @returns {number} txtWidth\n */\n jsPDFAPI.getTextWidth = function(text) {\n var fontSize = this.internal.getFontSize();\n var txtWidth =\n (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n return txtWidth;\n };\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n * Arabic Substition A\n */\n var arabicSubstitionA = {\n 0x0621: [0xfe80], // ARABIC LETTER HAMZA\n 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n };\n\n /*\n var ligaturesSubstitutionA = {\n 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n };\n */\n\n var ligatures = {\n 0xfedf: {\n 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n },\n 0xfee0: {\n 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n },\n 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n 0x0651: {\n 0x064c: 0xfc5e, // Shadda + Dammatan\n 0x064d: 0xfc5f, // Shadda + Kasratan\n 0x064e: 0xfc60, // Shadda + Fatha\n 0x064f: 0xfc61, // Shadda + Damma\n 0x0650: 0xfc62 // Shadda + Kasra\n }\n };\n\n var arabic_diacritics = {\n 1612: 64606, // Shadda + Dammatan\n 1613: 64607, // Shadda + Kasratan\n 1614: 64608, // Shadda + Fatha\n 1615: 64609, // Shadda + Damma\n 1616: 64610 // Shadda + Kasra\n };\n\n var alfletter = [1570, 1571, 1573, 1575];\n\n var noChangeInForm = -1;\n var isolatedForm = 0;\n var finalForm = 1;\n var initialForm = 2;\n var medialForm = 3;\n\n jsPDFAPI.__arabicParser__ = {};\n\n //private\n var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n letter\n ) {\n return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n });\n\n var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n letter\n ) {\n return (\n typeof letter === \"string\" &&\n /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n letter\n )\n );\n });\n\n var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n );\n });\n\n var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n );\n };\n\n var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n );\n };\n\n var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length == 4\n );\n });\n\n var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n letters\n ) {\n var i = 0;\n var tmpLigatures = ligatures;\n var result = \"\";\n var effectedLetters = 0;\n\n for (i = 0; i < letters.length; i += 1) {\n if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n effectedLetters++;\n tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n if (typeof tmpLigatures === \"number\") {\n result += String.fromCharCode(tmpLigatures);\n tmpLigatures = ligatures;\n effectedLetters = 0;\n }\n if (i === letters.length - 1) {\n tmpLigatures = ligatures;\n result += letters.charAt(i - (effectedLetters - 1));\n i = i - (effectedLetters - 1);\n effectedLetters = 0;\n }\n } else {\n tmpLigatures = ligatures;\n result += letters.charAt(i - effectedLetters);\n i = i - effectedLetters;\n effectedLetters = 0;\n }\n }\n\n return result;\n });\n\n jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n return (\n letter !== undefined &&\n arabic_diacritics[letter.charCodeAt(0)] !== undefined\n );\n };\n\n var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n currentChar,\n beforeChar,\n nextChar\n ) {\n if (!isArabicLetter(currentChar)) {\n return -1;\n }\n\n if (isInArabicSubstitutionA(currentChar) === false) {\n return noChangeInForm;\n }\n if (\n !arabicLetterHasFinalForm(currentChar) ||\n (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n ) {\n return isolatedForm;\n }\n\n if (\n arabicLetterHasMedialForm(currentChar) &&\n isArabicLetter(beforeChar) &&\n !isArabicEndLetter(beforeChar) &&\n isArabicLetter(nextChar) &&\n arabicLetterHasFinalForm(nextChar)\n ) {\n return medialForm;\n }\n\n if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n return finalForm;\n }\n return initialForm;\n });\n\n /**\n * @name processArabic\n * @function\n * @param {string} text\n * @returns {string}\n */\n var parseArabic = function(text) {\n text = text || \"\";\n\n var result = \"\";\n var i = 0;\n var j = 0;\n var position = 0;\n var currentLetter = \"\";\n var prevLetter = \"\";\n var nextLetter = \"\";\n\n var words = text.split(\"\\\\s+\");\n var newWords = [];\n for (i = 0; i < words.length; i += 1) {\n newWords.push(\"\");\n for (j = 0; j < words[i].length; j += 1) {\n currentLetter = words[i][j];\n prevLetter = words[i][j - 1];\n nextLetter = words[i][j + 1];\n if (isArabicLetter(currentLetter)) {\n position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n if (position !== -1) {\n newWords[i] += String.fromCharCode(\n arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n );\n } else {\n newWords[i] += currentLetter;\n }\n } else {\n newWords[i] += currentLetter;\n }\n }\n\n newWords[i] = resolveLigatures(newWords[i]);\n }\n result = newWords.join(\" \");\n\n return result;\n };\n\n var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n var text =\n typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n var tmpText = [];\n var result;\n\n if (Array.isArray(text)) {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n } else {\n tmpText.push([parseArabic(text[i])]);\n }\n }\n result = tmpText;\n } else {\n result = parseArabic(text);\n }\n if (typeof arguments[0] === \"string\") {\n return result;\n } else {\n arguments[0].text = result;\n return arguments[0];\n }\n });\n\n jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n *\n * @name autoPrint\n * @function\n * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF();\n * doc.text(10, 10, 'This is a test');\n * doc.autoPrint({variant: 'non-conform'});\n * doc.save('autoprint.pdf');\n */\n jsPDFAPI.autoPrint = function(options) {\n \"use strict\";\n var refAutoPrintTag;\n options = options || {};\n options.variant = options.variant || \"non-conform\";\n\n switch (options.variant) {\n case \"javascript\":\n //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n this.addJS(\"print({});\");\n break;\n case \"non-conform\":\n default:\n this.internal.events.subscribe(\"postPutResources\", function() {\n refAutoPrintTag = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /Named\");\n this.internal.out(\"/Type /Action\");\n this.internal.out(\"/N /Print\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n });\n break;\n }\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @class Canvas\n * @classdesc A Canvas Wrapper for jsPDF\n */\n var Canvas = function() {\n var jsPdfInstance = undefined;\n Object.defineProperty(this, \"pdf\", {\n get: function() {\n return jsPdfInstance;\n },\n set: function(value) {\n jsPdfInstance = value;\n }\n });\n\n var _width = 150;\n /**\n * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n * This is one of the two properties, the other being width, that controls the size of the canvas.\n *\n * @name width\n */\n Object.defineProperty(this, \"width\", {\n get: function() {\n return _width;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _width = 150;\n } else {\n _width = value;\n }\n if (this.getContext(\"2d\").pageWrapXEnabled) {\n this.getContext(\"2d\").pageWrapX = _width + 1;\n }\n }\n });\n\n var _height = 300;\n /**\n * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n * This is one of the two properties, the other being height, that controls the size of the canvas.\n *\n * @name height\n */\n Object.defineProperty(this, \"height\", {\n get: function() {\n return _height;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _height = 300;\n } else {\n _height = value;\n }\n if (this.getContext(\"2d\").pageWrapYEnabled) {\n this.getContext(\"2d\").pageWrapY = _height + 1;\n }\n }\n });\n\n var _childNodes = [];\n Object.defineProperty(this, \"childNodes\", {\n get: function() {\n return _childNodes;\n },\n set: function(value) {\n _childNodes = value;\n }\n });\n\n var _style = {};\n Object.defineProperty(this, \"style\", {\n get: function() {\n return _style;\n },\n set: function(value) {\n _style = value;\n }\n });\n\n Object.defineProperty(this, \"parentNode\", {});\n };\n\n /**\n * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n *\n * @name getContext\n * @function\n * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n * @param {object} contextAttributes\n */\n Canvas.prototype.getContext = function(contextType, contextAttributes) {\n contextType = contextType || \"2d\";\n var key;\n\n if (contextType !== \"2d\") {\n return null;\n }\n for (key in contextAttributes) {\n if (this.pdf.context2d.hasOwnProperty(key)) {\n this.pdf.context2d[key] = contextAttributes[key];\n }\n }\n this.pdf.context2d._canvas = this;\n return this.pdf.context2d;\n };\n\n /**\n * The toDataURL() method is just a stub to throw an error if accidently called.\n *\n * @name toDataURL\n * @function\n */\n Canvas.prototype.toDataURL = function() {\n throw new Error(\"toDataURL is not implemented.\");\n };\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n this.canvas = new Canvas();\n this.canvas.pdf = this;\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n var px2pt = (0.264583 * 72) / 25.4;\n var printingHeaderRow = false;\n\n var _initialize = function() {\n if (typeof this.internal.__cell__ === \"undefined\") {\n this.internal.__cell__ = {};\n this.internal.__cell__.padding = 3;\n this.internal.__cell__.headerFunction = undefined;\n this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n this.internal.__cell__.margins.width = this.getPageWidth();\n _reset.call(this);\n }\n };\n\n var _reset = function() {\n this.internal.__cell__.lastCell = new Cell();\n this.internal.__cell__.pages = 1;\n };\n\n var Cell = function() {\n var _x = arguments[0];\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n get: function() {\n return _x;\n },\n set: function(value) {\n _x = value;\n }\n });\n var _y = arguments[1];\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n get: function() {\n return _y;\n },\n set: function(value) {\n _y = value;\n }\n });\n var _width = arguments[2];\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n _width = value;\n }\n });\n var _height = arguments[3];\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n get: function() {\n return _height;\n },\n set: function(value) {\n _height = value;\n }\n });\n var _text = arguments[4];\n Object.defineProperty(this, \"text\", {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = value;\n }\n });\n var _lineNumber = arguments[5];\n Object.defineProperty(this, \"lineNumber\", {\n enumerable: true,\n get: function() {\n return _lineNumber;\n },\n set: function(value) {\n _lineNumber = value;\n }\n });\n var _align = arguments[6];\n Object.defineProperty(this, \"align\", {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n _align = value;\n }\n });\n\n return this;\n };\n\n Cell.prototype.clone = function() {\n return new Cell(\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n );\n };\n\n Cell.prototype.toArray = function() {\n return [\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n ];\n };\n\n /**\n * @name setHeaderFunction\n * @function\n * @param {function} func\n */\n jsPDFAPI.setHeaderFunction = function(func) {\n _initialize.call(this);\n this.internal.__cell__.headerFunction =\n typeof func === \"function\" ? func : undefined;\n return this;\n };\n\n /**\n * @name getTextDimensions\n * @function\n * @param {string} txt\n * @returns {Object} dimensions\n */\n jsPDFAPI.getTextDimensions = function(text, options) {\n _initialize.call(this);\n options = options || {};\n var fontSize = options.fontSize || this.getFontSize();\n var font = options.font || this.getFont();\n var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n var width = 0;\n var amountOfLines = 0;\n var height = 0;\n var tempWidth = 0;\n var scope = this;\n\n if (!Array.isArray(text) && typeof text !== \"string\") {\n if (typeof text === \"number\") {\n text = String(text);\n } else {\n throw new Error(\n \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n );\n }\n }\n\n const maxWidth = options.maxWidth;\n if (maxWidth > 0) {\n if (typeof text === \"string\") {\n text = this.splitTextToSize(text, maxWidth);\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n text = text.reduce(function(acc, textLine) {\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n }, []);\n }\n } else {\n // Without the else clause, it will not work if you do not pass along maxWidth\n text = Array.isArray(text) ? text : [text];\n }\n\n for (var i = 0; i < text.length; i++) {\n tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n if (width < tempWidth) {\n width = tempWidth;\n }\n }\n\n if (width !== 0) {\n amountOfLines = text.length;\n }\n\n width = width / scaleFactor;\n height = Math.max(\n (amountOfLines * fontSize * this.getLineHeightFactor() -\n fontSize * (this.getLineHeightFactor() - 1)) /\n scaleFactor,\n 0\n );\n return { w: width, h: height };\n };\n\n /**\n * @name cellAddPage\n * @function\n */\n jsPDFAPI.cellAddPage = function() {\n _initialize.call(this);\n\n this.addPage();\n\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n this.internal.__cell__.lastCell = new Cell(\n margins.left,\n margins.top,\n undefined,\n undefined\n );\n this.internal.__cell__.pages += 1;\n\n return this;\n };\n\n /**\n * @name cell\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} text\n * @param {number} lineNumber lineNumber\n * @param {string} align\n * @return {jsPDF} jsPDF-instance\n */\n var cell = (jsPDFAPI.cell = function() {\n var currentCell;\n\n if (arguments[0] instanceof Cell) {\n currentCell = arguments[0];\n } else {\n currentCell = new Cell(\n arguments[0],\n arguments[1],\n arguments[2],\n arguments[3],\n arguments[4],\n arguments[5]\n );\n }\n _initialize.call(this);\n var lastCell = this.internal.__cell__.lastCell;\n var padding = this.internal.__cell__.padding;\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n var printHeaders = this.internal.__cell__.printHeaders;\n // If this is not the first cell, we must change its position\n if (typeof lastCell.lineNumber !== \"undefined\") {\n if (lastCell.lineNumber === currentCell.lineNumber) {\n //Same line\n currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n currentCell.y = lastCell.y || 0;\n } else {\n //New line\n if (\n lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n this.getPageHeight()\n ) {\n this.cellAddPage();\n currentCell.y = margins.top;\n if (printHeaders && tableHeaderRow) {\n this.printHeaderRow(currentCell.lineNumber, true);\n currentCell.y += tableHeaderRow[0].height;\n }\n } else {\n currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n }\n }\n }\n\n if (typeof currentCell.text[0] !== \"undefined\") {\n this.rect(\n currentCell.x,\n currentCell.y,\n currentCell.width,\n currentCell.height,\n printingHeaderRow === true ? \"FD\" : undefined\n );\n if (currentCell.align === \"right\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width - padding,\n currentCell.y + padding,\n { align: \"right\", baseline: \"top\" }\n );\n } else if (currentCell.align === \"center\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width / 2,\n currentCell.y + padding,\n {\n align: \"center\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n } else {\n this.text(\n currentCell.text,\n currentCell.x + padding,\n currentCell.y + padding,\n {\n align: \"left\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n }\n }\n this.internal.__cell__.lastCell = currentCell;\n return this;\n });\n\n /**\n * Create a table from a set of data.\n * @name table\n * @function\n * @param {Integer} [x] : left-position for top-left corner of table\n * @param {Integer} [y] top-position for top-left corner of table\n * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n * @param {Object} [config.margins] margin values for left, top, bottom, and width\n * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n * @param {Object} [config.padding] cell-padding in pt to use (optional)\n * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n * @param {Object} [config.headerTextColor] default is #000 (optional)\n * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.table = function(x, y, data, headers, config) {\n _initialize.call(this);\n if (!data) {\n throw new Error(\"No data for PDF table.\");\n }\n\n config = config || {};\n\n var headerNames = [],\n headerLabels = [],\n headerAligns = [],\n i,\n columnMatrix = {},\n columnWidths = {},\n column,\n columnMinWidths = [],\n j,\n tableHeaderConfigs = [],\n //set up defaults. If a value is provided in config, defaults will be overwritten:\n autoSize = config.autoSize || false,\n printHeaders = config.printHeaders === false ? false : true,\n fontSize =\n config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n ? config.css[\"font-size\"] * 16\n : config.fontSize || 12,\n margins =\n config.margins ||\n Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n padding = typeof config.padding === \"number\" ? config.padding : 3,\n headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n headerTextColor = config.headerTextColor || \"#000\";\n\n _reset.call(this);\n\n this.internal.__cell__.printHeaders = printHeaders;\n this.internal.__cell__.margins = margins;\n this.internal.__cell__.table_font_size = fontSize;\n this.internal.__cell__.padding = padding;\n this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n this.internal.__cell__.headerTextColor = headerTextColor;\n this.setFontSize(fontSize);\n\n // Set header values\n if (headers === undefined || headers === null) {\n // No headers defined so we derive from data\n headerNames = Object.keys(data[0]);\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n headerNames = headers.map(function(header) {\n return header.name;\n });\n headerLabels = headers.map(function(header) {\n return header.prompt || header.name || \"\";\n });\n headerAligns = headers.map(function(header) {\n return header.align || \"left\";\n });\n // Split header configs into names and prompts\n for (i = 0; i < headers.length; i += 1) {\n columnWidths[headers[i].name] = headers[i].width * px2pt;\n }\n } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n headerNames = headers;\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n }\n\n if (\n autoSize ||\n (Array.isArray(headers) && typeof headers[0] === \"string\")\n ) {\n var headerName;\n for (i = 0; i < headerNames.length; i += 1) {\n headerName = headerNames[i];\n\n // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n columnMatrix[headerName] = data.map(function(rec) {\n return rec[headerName];\n });\n\n // get header width\n this.setFont(undefined, \"bold\");\n columnMinWidths.push(\n this.getTextDimensions(headerLabels[i], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n column = columnMatrix[headerName];\n\n // get cell widths\n this.setFont(undefined, \"normal\");\n for (j = 0; j < column.length; j += 1) {\n columnMinWidths.push(\n this.getTextDimensions(column[j], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n }\n\n // get final column width\n columnWidths[headerName] =\n Math.max.apply(null, columnMinWidths) + padding + padding;\n\n //have to reset\n columnMinWidths = [];\n }\n }\n\n // -- Construct the table\n\n if (printHeaders) {\n var row = {};\n for (i = 0; i < headerNames.length; i += 1) {\n row[headerNames[i]] = {};\n row[headerNames[i]].text = headerLabels[i];\n row[headerNames[i]].align = headerAligns[i];\n }\n\n var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n // Construct the header row\n tableHeaderConfigs = headerNames.map(function(value) {\n return new Cell(\n x,\n y,\n columnWidths[value],\n rowHeight,\n row[value].text,\n undefined,\n row[value].align\n );\n });\n\n // Store the table header config\n this.setTableHeaderRow(tableHeaderConfigs);\n\n // Print the header for the start of the table\n this.printHeaderRow(1, false);\n }\n\n // Construct the data rows\n\n var align = headers.reduce(function(pv, cv) {\n pv[cv.name] = cv.align;\n return pv;\n }, {});\n for (i = 0; i < data.length; i += 1) {\n if (\"rowStart\" in config && config.rowStart instanceof Function) {\n config.rowStart(\n {\n row: i,\n data: data[i]\n },\n this\n );\n }\n var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n for (j = 0; j < headerNames.length; j += 1) {\n var cellData = data[i][headerNames[j]];\n if (\"cellStart\" in config && config.cellStart instanceof Function) {\n config.cellStart(\n {\n row: i,\n col: j,\n data: cellData\n },\n this\n );\n }\n cell.call(\n this,\n new Cell(\n x,\n y,\n columnWidths[headerNames[j]],\n lineHeight,\n cellData,\n i + 2,\n align[headerNames[j]]\n )\n );\n }\n }\n this.internal.__cell__.table_x = x;\n this.internal.__cell__.table_y = y;\n return this;\n };\n\n /**\n * Calculate the height for containing the highest column\n *\n * @name calculateLineHeight\n * @function\n * @param {Object[]} model is the line of data we want to calculate the height of\n * @param {Integer[]} columnWidths is size of each column\n * @returns {number} lineHeight\n * @private\n */\n var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n var padding = this.internal.__cell__.padding;\n var fontSize = this.internal.__cell__.table_font_size;\n var scaleFactor = this.internal.scaleFactor;\n\n return Object.keys(model)\n .map(function(key) {\n var value = model[key];\n return this.splitTextToSize(\n value.hasOwnProperty(\"text\") ? value.text : value,\n columnWidths[key] - padding - padding\n );\n }, this)\n .map(function(value) {\n return (\n (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n padding +\n padding\n );\n }, this)\n .reduce(function(pv, cv) {\n return Math.max(pv, cv);\n }, 0);\n };\n\n /**\n * Store the config for outputting a table header\n *\n * @name setTableHeaderRow\n * @function\n * @param {Object[]} config\n * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n * except the lineNumber parameter is excluded\n */\n jsPDFAPI.setTableHeaderRow = function(config) {\n _initialize.call(this);\n this.internal.__cell__.tableHeaderRow = config;\n };\n\n /**\n * Output the store header row\n *\n * @name printHeaderRow\n * @function\n * @param {number} lineNumber The line number to output the header at\n * @param {boolean} new_page\n */\n jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n _initialize.call(this);\n if (!this.internal.__cell__.tableHeaderRow) {\n throw new Error(\"Property tableHeaderRow does not exist.\");\n }\n\n var tableHeaderCell;\n\n printingHeaderRow = true;\n if (typeof this.internal.__cell__.headerFunction === \"function\") {\n var position = this.internal.__cell__.headerFunction(\n this,\n this.internal.__cell__.pages\n );\n this.internal.__cell__.lastCell = new Cell(\n position[0],\n position[1],\n position[2],\n position[3],\n undefined,\n -1\n );\n }\n this.setFont(undefined, \"bold\");\n\n var tempHeaderConf = [];\n for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n if (new_page) {\n tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n tempHeaderConf.push(tableHeaderCell);\n }\n tableHeaderCell.lineNumber = lineNumber;\n var currentTextColor = this.getTextColor();\n this.setTextColor(this.internal.__cell__.headerTextColor);\n this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n cell.call(this, tableHeaderCell);\n this.setTextColor(currentTextColor);\n }\n if (tempHeaderConf.length > 0) {\n this.setTableHeaderRow(tempHeaderConf);\n }\n this.setFont(undefined, \"normal\");\n printingHeaderRow = false;\n };\n})(jsPDF.API);\n","function toLookup(arr) {\n return arr.reduce(function(lookup, name, index) {\n lookup[name] = index;\n\n return lookup;\n }, {});\n}\n\nvar fontStyleOrder = {\n italic: [\"italic\", \"oblique\", \"normal\"],\n oblique: [\"oblique\", \"italic\", \"normal\"],\n normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n \"ultra-condensed\",\n \"extra-condensed\",\n \"condensed\",\n \"semi-condensed\",\n \"normal\",\n \"semi-expanded\",\n \"expanded\",\n \"extra-expanded\",\n \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n stretch = stretch || \"normal\";\n\n return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n style = style || \"normal\";\n\n return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n if (!weight) {\n return 400;\n }\n\n if (typeof weight === \"number\") {\n // Ignore values which aren't valid font-weights.\n return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n }\n\n if (/^\\d00$/.test(weight)) {\n return parseInt(weight);\n }\n\n switch (weight) {\n case \"bold\":\n return 700;\n\n case \"normal\":\n default:\n return 400;\n }\n}\n\nexport function normalizeFontFace(fontFace) {\n var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n var style = normalizeFontStyle(fontFace.style);\n var weight = normalizeFontWeight(fontFace.weight);\n var stretch = normalizeFontStretch(fontFace.stretch);\n\n return {\n family: family,\n style: style,\n weight: weight,\n stretch: stretch,\n src: fontFace.src || [],\n\n // The ref property maps this font-face to the font\n // added by the .addFont() method.\n ref: fontFace.ref || {\n name: family,\n style: [stretch, style, weight].join(\" \")\n }\n };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n var map = {};\n\n for (var i = 0; i < fontFaces.length; ++i) {\n var normalized = normalizeFontFace(fontFaces[i]);\n\n var name = normalized.family;\n var stretch = normalized.stretch;\n var style = normalized.style;\n var weight = normalized.weight;\n\n map[name] = map[name] || {};\n\n map[name][stretch] = map[name][stretch] || {};\n map[name][stretch][style] = map[name][stretch][style] || {};\n map[name][stretch][style][weight] = normalized;\n }\n\n return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n var i;\n\n for (i = pivot; i >= 0 && i < order.length; i += dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n\n for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n if (matchingSet[stretch]) {\n return matchingSet[stretch];\n }\n\n var pivot = fontStretchLookup[stretch];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-stretch value for \" + stretch\n );\n }\n\n return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n if (matchingSet[fontStyle]) {\n return matchingSet[fontStyle];\n }\n\n var ordering = fontStyleOrder[fontStyle];\n\n for (var i = 0; i < ordering.length; ++i) {\n if (matchingSet[ordering[i]]) {\n return matchingSet[ordering[i]];\n }\n }\n\n // Since a font-family cannot exist without having at least one style value\n // we should never reach this point.\n throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n if (matchingSet[weight]) {\n return matchingSet[weight];\n }\n\n if (weight === 400 && matchingSet[500]) {\n return matchingSet[500];\n }\n\n if (weight === 500 && matchingSet[400]) {\n return matchingSet[400];\n }\n\n var pivot = fontWeightsLookup[weight];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = weight < 400 ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-weight for value \" + weight\n );\n }\n\n return match;\n}\n\nvar defaultGenericFontFamilies = {\n \"sans-serif\": \"helvetica\",\n fixed: \"courier\",\n monospace: \"courier\",\n terminal: \"courier\",\n cursive: \"times\",\n fantasy: \"times\",\n serif: \"times\"\n};\n\nvar systemFonts = {\n caption: \"times\",\n icon: \"times\",\n menu: \"times\",\n \"message-box\": \"times\",\n \"small-caption\": \"times\",\n \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n opts = opts || {};\n\n var defaultFontFamily = opts.defaultFontFamily || \"times\";\n var genericFontFamilies = Object.assign(\n {},\n defaultGenericFontFamilies,\n opts.genericFontFamilies || {}\n );\n\n var rule = null;\n var matches = null;\n\n for (var i = 0; i < rules.length; ++i) {\n rule = normalizeFontFace(rules[i]);\n\n if (genericFontFamilies[rule.family]) {\n rule.family = genericFontFamilies[rule.family];\n }\n\n if (fontFaceMap.hasOwnProperty(rule.family)) {\n matches = fontFaceMap[rule.family];\n\n break;\n }\n }\n\n // Always fallback to a known font family.\n matches = matches || fontFaceMap[defaultFontFamily];\n\n if (!matches) {\n // At this point we should definitiely have a font family, but if we\n // don't there is something wrong with our configuration\n throw new Error(\n \"Could not find a font-family for the rule '\" +\n ruleToString(rule) +\n \"' and default family '\" +\n defaultFontFamily +\n \"'.\"\n );\n }\n\n matches = resolveFontStretch(rule.stretch, matches);\n matches = resolveFontStyle(rule.style, matches);\n matches = resolveFontWeight(rule.weight, matches);\n\n if (!matches) {\n // We should've fount\n throw new Error(\n \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n );\n }\n\n return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n var index = 0;\n\n while (index < input.length) {\n var current = input.charAt(index);\n\n if (current === quote) {\n return [input.substring(0, index), input.substring(index + 1)];\n }\n\n index += 1;\n }\n\n // Unexpected end of input\n return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n //\n // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n //\n // Breakdown of regexp:\n // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n // [a-z_] - allow a-z and underscore at beginning of input\n // [a-z0-9_-]* - after that, anything goes\n var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n // non quoted value contains illegal characters\n if (match === null) {\n return null;\n }\n\n return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n var result = [];\n var ch, parsed;\n var remaining = input.trim();\n\n if (remaining === \"\") {\n return defaultFont;\n }\n\n if (remaining in systemFonts) {\n return [systemFonts[remaining]];\n }\n\n while (remaining !== \"\") {\n parsed = null;\n remaining = eatWhiteSpace(remaining);\n ch = remaining.charAt(0);\n\n switch (ch) {\n case '\"':\n case \"'\":\n parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n break;\n\n default:\n parsed = parseNonQuotedFontFamily(remaining);\n break;\n }\n\n if (parsed === null) {\n return defaultFont;\n }\n\n result.push(parsed[0]);\n\n remaining = eatWhiteSpace(parsed[1]);\n\n // We expect end of input or a comma separator here\n if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n return defaultFont;\n }\n\n remaining = remaining.replace(/^,/, \"\");\n }\n\n return result;\n}\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n buildFontFaceMap,\r\n parseFontFamily,\r\n resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n \"use strict\";\r\n var ContextLayer = function(ctx) {\r\n ctx = ctx || {};\r\n this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n this.strokeOpacity = ctx.strokeOpacity || 1;\r\n this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n this.fillStyle = ctx.fillStyle || \"#000000\";\r\n this.isFillTransparent = ctx.isFillTransparent || false;\r\n this.fillOpacity = ctx.fillOpacity || 1;\r\n this.font = ctx.font || \"10px sans-serif\";\r\n this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n this.textAlign = ctx.textAlign || \"left\";\r\n this.lineWidth = ctx.lineWidth || 1;\r\n this.lineJoin = ctx.lineJoin || \"miter\";\r\n this.lineCap = ctx.lineCap || \"butt\";\r\n this.path = ctx.path || [];\r\n this.transform =\r\n typeof ctx.transform !== \"undefined\"\r\n ? ctx.transform.clone()\r\n : new Matrix();\r\n this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n this.globalAlpha = ctx.globalAlpha || 1.0;\r\n this.clip_path = ctx.clip_path || [];\r\n this.currentPoint = ctx.currentPoint || new Point();\r\n this.miterLimit = ctx.miterLimit || 10.0;\r\n this.lastPoint = ctx.lastPoint || new Point();\r\n this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n this.lineDash = ctx.lineDash || [];\r\n this.margin = ctx.margin || [0, 0, 0, 0];\r\n this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n this.ignoreClearRect =\r\n typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n return this;\r\n };\r\n\r\n //stub\r\n var f2,\r\n getHorizontalCoordinateString,\r\n getVerticalCoordinateString,\r\n getHorizontalCoordinate,\r\n getVerticalCoordinate,\r\n Point,\r\n Rectangle,\r\n Matrix,\r\n _ctx;\r\n jsPDFAPI.events.push([\r\n \"initialized\",\r\n function() {\r\n this.context2d = new Context2D(this);\r\n\r\n f2 = this.internal.f2;\r\n getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n Point = this.internal.Point;\r\n Rectangle = this.internal.Rectangle;\r\n Matrix = this.internal.Matrix;\r\n _ctx = new ContextLayer();\r\n }\r\n ]);\r\n\r\n var Context2D = function(pdf) {\r\n Object.defineProperty(this, \"canvas\", {\r\n get: function() {\r\n return { parentNode: false, style: false };\r\n }\r\n });\r\n\r\n var _pdf = pdf;\r\n Object.defineProperty(this, \"pdf\", {\r\n get: function() {\r\n return _pdf;\r\n }\r\n });\r\n\r\n var _pageWrapXEnabled = false;\r\n /**\r\n * @name pageWrapXEnabled\r\n * @type {boolean}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n get: function() {\r\n return _pageWrapXEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapXEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _pageWrapYEnabled = false;\r\n /**\r\n * @name pageWrapYEnabled\r\n * @type {boolean}\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n get: function() {\r\n return _pageWrapYEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapYEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _posX = 0;\r\n /**\r\n * @name posX\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posX\", {\r\n get: function() {\r\n return _posX;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posX = value;\r\n }\r\n }\r\n });\r\n\r\n var _posY = 0;\r\n /**\r\n * @name posY\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posY\", {\r\n get: function() {\r\n return _posY;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posY = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n * @name margin\r\n * @type {number|number[]}\r\n * @default [0, 0, 0, 0]\r\n */\r\n Object.defineProperty(this, \"margin\", {\r\n get: function() {\r\n return _ctx.margin;\r\n },\r\n set: function(value) {\r\n var margin;\r\n if (typeof value === \"number\") {\r\n margin = [value, value, value, value];\r\n } else {\r\n margin = new Array(4);\r\n margin[0] = value[0];\r\n margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n }\r\n _ctx.margin = margin;\r\n }\r\n });\r\n\r\n var _autoPaging = false;\r\n /**\r\n * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n * pages if required.\r\n *\r\n * Context2d supports different modes:\r\n *
      \r\n *
    • \r\n * false: Auto paging is disabled.\r\n *
    • \r\n *
    • \r\n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\r\n * slice text in half, making it difficult to read.\r\n *
    • \r\n *
    • \r\n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\r\n * mostly of a single column of text.\r\n *
    • \r\n *
    \r\n * @name Context2D#autoPaging\r\n * @type {boolean|\"slice\"|\"text\"}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"autoPaging\", {\r\n get: function() {\r\n return _autoPaging;\r\n },\r\n set: function(value) {\r\n _autoPaging = value;\r\n }\r\n });\r\n\r\n var lastBreak = 0;\r\n /**\r\n * @name lastBreak\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"lastBreak\", {\r\n get: function() {\r\n return lastBreak;\r\n },\r\n set: function(value) {\r\n lastBreak = value;\r\n }\r\n });\r\n\r\n var pageBreaks = [];\r\n /**\r\n * Y Position of page breaks.\r\n * @name pageBreaks\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"pageBreaks\", {\r\n get: function() {\r\n return pageBreaks;\r\n },\r\n set: function(value) {\r\n pageBreaks = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctx\r\n * @type {object}\r\n * @default {}\r\n */\r\n Object.defineProperty(this, \"ctx\", {\r\n get: function() {\r\n return _ctx;\r\n },\r\n set: function(value) {\r\n if (value instanceof ContextLayer) {\r\n _ctx = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * @name path\r\n * @type {array}\r\n * @default []\r\n */\r\n Object.defineProperty(this, \"path\", {\r\n get: function() {\r\n return _ctx.path;\r\n },\r\n set: function(value) {\r\n _ctx.path = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctxStack\r\n * @type {array}\r\n * @default []\r\n */\r\n var _ctxStack = [];\r\n Object.defineProperty(this, \"ctxStack\", {\r\n get: function() {\r\n return _ctxStack;\r\n },\r\n set: function(value) {\r\n _ctxStack = value;\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n *\r\n * @name fillStyle\r\n * @default #000000\r\n * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    \r\n * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    \r\n * A pattern object to use to fill the drawing (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"fillStyle\", {\r\n get: function() {\r\n return this.ctx.fillStyle;\r\n },\r\n set: function(value) {\r\n var rgba;\r\n rgba = getRGBA(value);\r\n\r\n this.ctx.fillStyle = rgba.style;\r\n this.ctx.isFillTransparent = rgba.a === 0;\r\n this.ctx.fillOpacity = rgba.a;\r\n\r\n this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used for strokes\r\n *\r\n * @name strokeStyle\r\n * @default #000000\r\n * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"strokeStyle\", {\r\n get: function() {\r\n return this.ctx.strokeStyle;\r\n },\r\n set: function(value) {\r\n var rgba = getRGBA(value);\r\n\r\n this.ctx.strokeStyle = rgba.style;\r\n this.ctx.isStrokeTransparent = rgba.a === 0;\r\n this.ctx.strokeOpacity = rgba.a;\r\n\r\n if (rgba.a === 0) {\r\n this.pdf.setDrawColor(255, 255, 255);\r\n } else if (rgba.a === 1) {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n } else {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the style of the end caps for a line\r\n *\r\n * @name lineCap\r\n * @default butt\r\n * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    \r\n * round A rounded end cap is added to each end of the line
    \r\n * square A square end cap is added to each end of the line
    \r\n */\r\n Object.defineProperty(this, \"lineCap\", {\r\n get: function() {\r\n return this.ctx.lineCap;\r\n },\r\n set: function(value) {\r\n if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n this.ctx.lineCap = value;\r\n this.pdf.setLineCap(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the current line width\r\n *\r\n * @name lineWidth\r\n * @default 1\r\n * @property {number} lineWidth The current line width, in pixels\r\n */\r\n Object.defineProperty(this, \"lineWidth\", {\r\n get: function() {\r\n return this.ctx.lineWidth;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.lineWidth = value;\r\n this.pdf.setLineWidth(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the type of corner created, when two lines meet\r\n */\r\n Object.defineProperty(this, \"lineJoin\", {\r\n get: function() {\r\n return this.ctx.lineJoin;\r\n },\r\n set: function(value) {\r\n if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n this.ctx.lineJoin = value;\r\n this.pdf.setLineJoin(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n *\r\n * @name miterLimit\r\n * @default 10\r\n */\r\n Object.defineProperty(this, \"miterLimit\", {\r\n get: function() {\r\n return this.ctx.miterLimit;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.miterLimit = value;\r\n this.pdf.setMiterLimit(value);\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textBaseline\", {\r\n get: function() {\r\n return this.ctx.textBaseline;\r\n },\r\n set: function(value) {\r\n this.ctx.textBaseline = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textAlign\", {\r\n get: function() {\r\n return this.ctx.textAlign;\r\n },\r\n set: function(value) {\r\n if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n this.ctx.textAlign = value;\r\n }\r\n }\r\n });\r\n\r\n var _fontFaceMap = null;\r\n\r\n function getFontFaceMap(pdf, fontFaces) {\r\n if (_fontFaceMap === null) {\r\n var fontMap = pdf.getFontList();\r\n\r\n var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n }\r\n\r\n return _fontFaceMap;\r\n }\r\n\r\n function convertToFontFaces(fontMap) {\r\n var fontFaces = [];\r\n\r\n Object.keys(fontMap).forEach(function(family) {\r\n var styles = fontMap[family];\r\n\r\n styles.forEach(function(style) {\r\n var fontFace = null;\r\n\r\n switch (style) {\r\n case \"bold\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\"\r\n };\r\n break;\r\n\r\n case \"italic\":\r\n fontFace = {\r\n family: family,\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"bolditalic\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\",\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"\":\r\n case \"normal\":\r\n fontFace = {\r\n family: family\r\n };\r\n break;\r\n }\r\n\r\n // If font-face is still null here, it is a font with some styling we don't recognize and\r\n // cannot map or it is a font added via the fontFaces option of .html().\r\n if (fontFace !== null) {\r\n fontFace.ref = {\r\n name: family,\r\n style: style\r\n };\r\n\r\n fontFaces.push(fontFace);\r\n }\r\n });\r\n });\r\n\r\n return fontFaces;\r\n }\r\n\r\n var _fontFaces = null;\r\n /**\r\n * A map of available font-faces, as passed in the options of\r\n * .html(). If set a limited implementation of the font style matching\r\n * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n * will be used. If not set it will fallback to previous behavior.\r\n */\r\n\r\n Object.defineProperty(this, \"fontFaces\", {\r\n get: function() {\r\n return _fontFaces;\r\n },\r\n set: function(value) {\r\n _fontFaceMap = null;\r\n _fontFaces = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"font\", {\r\n get: function() {\r\n return this.ctx.font;\r\n },\r\n set: function(value) {\r\n this.ctx.font = value;\r\n var rx, matches;\r\n\r\n //source: https://stackoverflow.com/a/10136041\r\n // eslint-disable-next-line no-useless-escape\r\n rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n matches = rx.exec(value);\r\n if (matches !== null) {\r\n var fontStyle = matches[1];\r\n var fontVariant = matches[2];\r\n var fontWeight = matches[3];\r\n var fontSize = matches[4];\r\n var lineHeight = matches[5];\r\n var fontFamily = matches[6];\r\n } else {\r\n return;\r\n }\r\n var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n if (\"px\" === fontSizeUnit) {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n } else if (\"em\" === fontSizeUnit) {\r\n fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n } else {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n }\r\n\r\n this.pdf.setFontSize(fontSize);\r\n var parts = parseFontFamily(fontFamily);\r\n\r\n if (this.fontFaces) {\r\n var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n var rules = parts.map(function(ff) {\r\n return {\r\n family: ff,\r\n stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n weight: fontWeight,\r\n style: fontStyle\r\n };\r\n });\r\n\r\n var font = resolveFontFace(fontFaceMap, rules);\r\n this.pdf.setFont(font.ref.name, font.ref.style);\r\n return;\r\n }\r\n\r\n var style = \"\";\r\n if (\r\n fontWeight === \"bold\" ||\r\n parseInt(fontWeight, 10) >= 700 ||\r\n fontStyle === \"bold\"\r\n ) {\r\n style = \"bold\";\r\n }\r\n\r\n if (fontStyle === \"italic\") {\r\n style += \"italic\";\r\n }\r\n\r\n if (style.length === 0) {\r\n style = \"normal\";\r\n }\r\n var jsPdfFontName = \"\";\r\n\r\n var fallbackFonts = {\r\n arial: \"Helvetica\",\r\n Arial: \"Helvetica\",\r\n verdana: \"Helvetica\",\r\n Verdana: \"Helvetica\",\r\n helvetica: \"Helvetica\",\r\n Helvetica: \"Helvetica\",\r\n \"sans-serif\": \"Helvetica\",\r\n fixed: \"Courier\",\r\n monospace: \"Courier\",\r\n terminal: \"Courier\",\r\n cursive: \"Times\",\r\n fantasy: \"Times\",\r\n serif: \"Times\"\r\n };\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n if (\r\n this.pdf.internal.getFont(parts[i], style, {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n break;\r\n } else if (\r\n style === \"bolditalic\" &&\r\n this.pdf.internal.getFont(parts[i], \"bold\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"bold\";\r\n } else if (\r\n this.pdf.internal.getFont(parts[i], \"normal\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"normal\";\r\n break;\r\n }\r\n }\r\n if (jsPdfFontName === \"\") {\r\n for (var j = 0; j < parts.length; j++) {\r\n if (fallbackFonts[parts[j]]) {\r\n jsPdfFontName = fallbackFonts[parts[j]];\r\n break;\r\n }\r\n }\r\n }\r\n jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n this.pdf.setFont(jsPdfFontName, style);\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalCompositeOperation\", {\r\n get: function() {\r\n return this.ctx.globalCompositeOperation;\r\n },\r\n set: function(value) {\r\n this.ctx.globalCompositeOperation = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalAlpha\", {\r\n get: function() {\r\n return this.ctx.globalAlpha;\r\n },\r\n set: function(value) {\r\n this.ctx.globalAlpha = value;\r\n }\r\n });\r\n\r\n /**\r\n * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n *\r\n * @name lineDashOffset\r\n * @default 0.0\r\n */\r\n Object.defineProperty(this, \"lineDashOffset\", {\r\n get: function() {\r\n return this.ctx.lineDashOffset;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDashOffset = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"lineDash\", {\r\n get: function() {\r\n return this.ctx.lineDash;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDash = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"ignoreClearRect\", {\r\n get: function() {\r\n return this.ctx.ignoreClearRect;\r\n },\r\n set: function(value) {\r\n this.ctx.ignoreClearRect = Boolean(value);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets the line dash pattern used when stroking lines.\r\n * @name setLineDash\r\n * @function\r\n * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n */\r\n Context2D.prototype.setLineDash = function(dashArray) {\r\n this.lineDash = dashArray;\r\n };\r\n\r\n /**\r\n * gets the current line dash pattern.\r\n * @name getLineDash\r\n * @function\r\n * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n */\r\n Context2D.prototype.getLineDash = function() {\r\n if (this.lineDash.length % 2) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n return this.lineDash.concat(this.lineDash);\r\n } else {\r\n // The copied value is returned to prevent contamination from outside.\r\n return this.lineDash.slice();\r\n }\r\n };\r\n\r\n Context2D.prototype.fill = function() {\r\n pathPreProcess.call(this, \"fill\", false);\r\n };\r\n\r\n /**\r\n * Actually draws the path you have defined\r\n *\r\n * @name stroke\r\n * @function\r\n * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n */\r\n Context2D.prototype.stroke = function() {\r\n pathPreProcess.call(this, \"stroke\", false);\r\n };\r\n\r\n /**\r\n * Begins a path, or resets the current\r\n *\r\n * @name beginPath\r\n * @function\r\n * @description The beginPath() method begins a path, or resets the current path.\r\n */\r\n Context2D.prototype.beginPath = function() {\r\n this.path = [\r\n {\r\n type: \"begin\"\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Moves the path to the specified point in the canvas, without creating a line\r\n *\r\n * @name moveTo\r\n * @function\r\n * @param x {Number} The x-coordinate of where to move the path to\r\n * @param y {Number} The y-coordinate of where to move the path to\r\n */\r\n Context2D.prototype.moveTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"mt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(x, y);\r\n };\r\n\r\n /**\r\n * Creates a path from the current point back to the starting point\r\n *\r\n * @name closePath\r\n * @function\r\n * @description The closePath() method creates a path from the current point back to the starting point.\r\n */\r\n Context2D.prototype.closePath = function() {\r\n var pathBegin = new Point(0, 0);\r\n var i = 0;\r\n for (i = this.path.length - 1; i !== -1; i--) {\r\n if (this.path[i].type === \"begin\") {\r\n if (\r\n typeof this.path[i + 1] === \"object\" &&\r\n typeof this.path[i + 1].x === \"number\"\r\n ) {\r\n pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n break;\r\n }\r\n }\r\n }\r\n this.path.push({\r\n type: \"close\"\r\n });\r\n this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n };\r\n\r\n /**\r\n * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n *\r\n * @name lineTo\r\n * @function\r\n * @param x The x-coordinate of where to create the line to\r\n * @param y The y-coordinate of where to create the line to\r\n * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n */\r\n Context2D.prototype.lineTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"lt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n };\r\n\r\n /**\r\n * Clips a region of any shape and size from the original canvas\r\n *\r\n * @name clip\r\n * @function\r\n * @description The clip() method clips a region of any shape and size from the original canvas.\r\n */\r\n Context2D.prototype.clip = function() {\r\n this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n pathPreProcess.call(this, null, true);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name quadraticCurveTo\r\n * @function\r\n * @param cpx {Number} The x-coordinate of the Bézier control point\r\n * @param cpy {Number} The y-coordinate of the Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n console.error(\r\n \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n );\r\n }\r\n\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n this.path.push({\r\n type: \"qct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name bezierCurveTo\r\n * @function\r\n * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(cp1x) ||\r\n isNaN(cp1y) ||\r\n isNaN(cp2x) ||\r\n isNaN(cp2y)\r\n ) {\r\n console.error(\r\n \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n );\r\n }\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n this.path.push({\r\n type: \"bct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x2: pt2.x,\r\n y2: pt2.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates an arc/curve (used to create circles, or parts of circles)\r\n *\r\n * @name arc\r\n * @function\r\n * @param x {Number} The x-coordinate of the center of the circle\r\n * @param y {Number} The y-coordinate of the center of the circle\r\n * @param radius {Number} The radius of the circle\r\n * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n * @param endAngle {Number} The ending angle, in radians\r\n * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n */\r\n Context2D.prototype.arc = function(\r\n x,\r\n y,\r\n radius,\r\n startAngle,\r\n endAngle,\r\n counterclockwise\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(radius) ||\r\n isNaN(startAngle) ||\r\n isNaN(endAngle)\r\n ) {\r\n console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n }\r\n counterclockwise = Boolean(counterclockwise);\r\n\r\n if (!this.ctx.transform.isIdentity) {\r\n var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n x = xpt.x;\r\n y = xpt.y;\r\n\r\n var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n radius = Math.sqrt(\r\n Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n );\r\n }\r\n if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n startAngle = 0;\r\n endAngle = 2 * Math.PI;\r\n }\r\n\r\n this.path.push({\r\n type: \"arc\",\r\n x: x,\r\n y: y,\r\n radius: radius,\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n counterclockwise: counterclockwise\r\n });\r\n // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n };\r\n\r\n /**\r\n * Creates an arc/curve between two tangents\r\n *\r\n * @name arcTo\r\n * @function\r\n * @param x1 {Number} The x-coordinate of the first tangent\r\n * @param y1 {Number} The y-coordinate of the first tangent\r\n * @param x2 {Number} The x-coordinate of the second tangent\r\n * @param y2 {Number} The y-coordinate of the second tangent\r\n * @param radius The radius of the arc\r\n * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n throw new Error(\"arcTo not implemented.\");\r\n };\r\n\r\n /**\r\n * Creates a rectangle\r\n *\r\n * @name rect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The rect() method creates a rectangle.\r\n */\r\n Context2D.prototype.rect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n }\r\n this.moveTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x + w, y + h);\r\n this.lineTo(x, y + h);\r\n this.lineTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x, y);\r\n };\r\n\r\n /**\r\n * Draws a \"filled\" rectangle\r\n *\r\n * @name fillRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n */\r\n Context2D.prototype.fillRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n }\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n var tmp = {};\r\n if (this.lineCap !== \"butt\") {\r\n tmp.lineCap = this.lineCap;\r\n this.lineCap = \"butt\";\r\n }\r\n if (this.lineJoin !== \"miter\") {\r\n tmp.lineJoin = this.lineJoin;\r\n this.lineJoin = \"miter\";\r\n }\r\n\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.fill();\r\n\r\n if (tmp.hasOwnProperty(\"lineCap\")) {\r\n this.lineCap = tmp.lineCap;\r\n }\r\n if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n this.lineJoin = tmp.lineJoin;\r\n }\r\n };\r\n\r\n /**\r\n * Draws a rectangle (no fill)\r\n *\r\n * @name strokeRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n */\r\n Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.stroke();\r\n };\r\n\r\n /**\r\n * Clears the specified pixels within a given rectangle\r\n *\r\n * @name clearRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle to clear, in pixels\r\n * @param h {Number} The height of the rectangle to clear, in pixels\r\n * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    \r\n * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n *\r\n */\r\n Context2D.prototype.clearRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n }\r\n if (this.ignoreClearRect) {\r\n return;\r\n }\r\n\r\n this.fillStyle = \"#ffffff\";\r\n this.fillRect(x, y, w, h);\r\n };\r\n\r\n /**\r\n * Saves the state of the current context\r\n *\r\n * @name save\r\n * @function\r\n */\r\n Context2D.prototype.save = function(doStackPush) {\r\n doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPush) {\r\n this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n var ctx = new ContextLayer(this.ctx);\r\n this.ctxStack.push(this.ctx);\r\n this.ctx = ctx;\r\n }\r\n };\r\n\r\n /**\r\n * Returns previously saved path state and attributes\r\n *\r\n * @name restore\r\n * @function\r\n */\r\n Context2D.prototype.restore = function(doStackPop) {\r\n doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"Q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPop && this.ctxStack.length !== 0) {\r\n this.ctx = this.ctxStack.pop();\r\n this.fillStyle = this.ctx.fillStyle;\r\n this.strokeStyle = this.ctx.strokeStyle;\r\n this.font = this.ctx.font;\r\n this.lineCap = this.ctx.lineCap;\r\n this.lineWidth = this.ctx.lineWidth;\r\n this.lineJoin = this.ctx.lineJoin;\r\n this.lineDash = this.ctx.lineDash;\r\n this.lineDashOffset = this.ctx.lineDashOffset;\r\n }\r\n };\r\n\r\n /**\r\n * @name toDataURL\r\n * @function\r\n */\r\n Context2D.prototype.toDataURL = function() {\r\n throw new Error(\"toDataUrl not implemented.\");\r\n };\r\n\r\n //helper functions\r\n\r\n /**\r\n * Get the decimal values of r, g, b and a\r\n *\r\n * @name getRGBA\r\n * @function\r\n * @private\r\n * @ignore\r\n */\r\n var getRGBA = function(style) {\r\n var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n var r, g, b, a;\r\n\r\n if (style.isCanvasGradient === true) {\r\n style = style.getColor();\r\n }\r\n\r\n if (!style) {\r\n return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n }\r\n\r\n if (rxTransparent.test(style)) {\r\n r = 0;\r\n g = 0;\r\n b = 0;\r\n a = 0;\r\n } else {\r\n var matches = rxRgb.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = 1;\r\n } else {\r\n matches = rxRgba.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = parseFloat(matches[4]);\r\n } else {\r\n a = 1;\r\n\r\n if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(style);\r\n if (rgbColor.ok) {\r\n style = rgbColor.toHex();\r\n } else {\r\n style = \"#000000\";\r\n }\r\n }\r\n\r\n if (style.length === 4) {\r\n r = style.substring(1, 2);\r\n r += r;\r\n g = style.substring(2, 3);\r\n g += g;\r\n b = style.substring(3, 4);\r\n b += b;\r\n } else {\r\n r = style.substring(1, 3);\r\n g = style.substring(3, 5);\r\n b = style.substring(5, 7);\r\n }\r\n r = parseInt(r, 16);\r\n g = parseInt(g, 16);\r\n b = parseInt(b, 16);\r\n }\r\n }\r\n }\r\n return { r: r, g: g, b: b, a: a, style: style };\r\n };\r\n\r\n /**\r\n * @name isFillTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isFillTransparent = function() {\r\n return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n };\r\n\r\n /**\r\n * @name isStrokeTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isStrokeTransparent = function() {\r\n return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n };\r\n\r\n /**\r\n * Draws \"filled\" text on the canvas\r\n *\r\n * @name fillText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n }\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n // We only use X axis as scale hint\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Draws text on the canvas (no fill)\r\n *\r\n * @name strokeText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n renderingMode: \"stroke\",\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Returns an object that contains the width of the specified text\r\n *\r\n * @name measureText\r\n * @function\r\n * @param text {String} The text to be measured\r\n * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n * @returns {Number}\r\n */\r\n Context2D.prototype.measureText = function(text) {\r\n if (typeof text !== \"string\") {\r\n console.error(\r\n \"jsPDF.context2d.measureText: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n );\r\n }\r\n var pdf = this.pdf;\r\n var k = this.pdf.internal.scaleFactor;\r\n\r\n var fontSize = pdf.internal.getFontSize();\r\n var txtWidth =\r\n (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n var TextMetrics = function(options) {\r\n options = options || {};\r\n var _width = options.width || 0;\r\n Object.defineProperty(this, \"width\", {\r\n get: function() {\r\n return _width;\r\n }\r\n });\r\n return this;\r\n };\r\n return new TextMetrics({ width: txtWidth });\r\n };\r\n\r\n //Transformations\r\n\r\n /**\r\n * Scales the current drawing bigger or smaller\r\n *\r\n * @name scale\r\n * @function\r\n * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @description The scale() method scales the current drawing, bigger or smaller.\r\n */\r\n Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n }\r\n var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Rotates the current drawing\r\n *\r\n * @name rotate\r\n * @function\r\n * @param angle {Number} The rotation angle, in radians.\r\n * @description To calculate from degrees to radians: degrees*Math.PI/180.
    \r\n * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n */\r\n Context2D.prototype.rotate = function(angle) {\r\n if (isNaN(angle)) {\r\n console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n }\r\n var matrix = new Matrix(\r\n Math.cos(angle),\r\n Math.sin(angle),\r\n -Math.sin(angle),\r\n Math.cos(angle),\r\n 0.0,\r\n 0.0\r\n );\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Remaps the (0,0) position on the canvas\r\n *\r\n * @name translate\r\n * @function\r\n * @param x {Number} The value to add to horizontal (x) coordinates\r\n * @param y {Number} The value to add to vertical (y) coordinates\r\n * @description The translate() method remaps the (0,0) position on the canvas.\r\n */\r\n Context2D.prototype.translate = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n }\r\n var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Replaces the current transformation matrix for the drawing\r\n *\r\n * @name transform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n }\r\n var matrix = new Matrix(a, b, c, d, e, f);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Resets the current transform to the identity matrix. Then runs transform()\r\n *\r\n * @name setTransform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n a = isNaN(a) ? 1 : a;\r\n b = isNaN(b) ? 0 : b;\r\n c = isNaN(c) ? 0 : c;\r\n d = isNaN(d) ? 1 : d;\r\n e = isNaN(e) ? 0 : e;\r\n f = isNaN(f) ? 0 : f;\r\n this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n };\r\n\r\n /**\r\n * Should only be used if pageWrapYEnabled is true\r\n *\r\n * @name setPageByYPosition\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns One-based Page Number\r\n */\r\n var setPageByYPosition = function(y) {\r\n if (this.pageWrapYEnabled) {\r\n this.lastBreak = 0;\r\n var manualBreaks = 0;\r\n var autoBreaks = 0;\r\n for (var i = 0; i < this.pageBreaks.length; i++) {\r\n if (y >= this.pageBreaks[i]) {\r\n manualBreaks++;\r\n if (this.lastBreak === 0) {\r\n autoBreaks++;\r\n }\r\n var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n this.lastBreak = this.pageBreaks[i];\r\n var pagesSinceLastBreak = Math.floor(\r\n spaceBetweenLastBreak / this.pageWrapY\r\n );\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n }\r\n if (this.lastBreak === 0) {\r\n var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n return autoBreaks + manualBreaks;\r\n } else {\r\n return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n }\r\n };\r\n\r\n var hasMargins = function() {\r\n return (\r\n this.margin[0] > 0 ||\r\n this.margin[1] > 0 ||\r\n this.margin[2] > 0 ||\r\n this.margin[3] > 0\r\n );\r\n };\r\n\r\n /**\r\n * Draws an image, canvas, or video onto the canvas\r\n *\r\n * @function\r\n * @param img {} Specifies the image, canvas, or video element to use\r\n * @param sx {Number} Optional. The x coordinate where to start clipping\r\n * @param sy {Number} Optional. The y coordinate where to start clipping\r\n * @param swidth {Number} Optional. The width of the clipped image\r\n * @param sheight {Number} Optional. The height of the clipped image\r\n * @param x {Number} The x coordinate where to place the image on the canvas\r\n * @param y {Number} The y coordinate where to place the image on the canvas\r\n * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n */\r\n Context2D.prototype.drawImage = function(\r\n img,\r\n sx,\r\n sy,\r\n swidth,\r\n sheight,\r\n x,\r\n y,\r\n width,\r\n height\r\n ) {\r\n var imageProperties = this.pdf.getImageProperties(img);\r\n var factorX = 1;\r\n var factorY = 1;\r\n var isClip;\r\n\r\n var clipFactorX = 1;\r\n var clipFactorY = 1;\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n isClip = true;\r\n clipFactorX = width / swidth;\r\n clipFactorY = height / sheight;\r\n factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n }\r\n\r\n //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n if (typeof x === \"undefined\") {\r\n x = sx;\r\n y = sy;\r\n sx = 0;\r\n sy = 0;\r\n }\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n width = swidth;\r\n height = sheight;\r\n }\r\n if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n width = imageProperties.width;\r\n height = imageProperties.height;\r\n }\r\n\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n var xRect = matrix.applyToRectangle(\r\n new Rectangle(\r\n x - sx * clipFactorX,\r\n y - sy * clipFactorY,\r\n swidth * factorX,\r\n sheight * factorY\r\n )\r\n );\r\n var pageArray = getPagesByPath.call(this, xRect);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n tmpRect = pathPositionRedo(\r\n [tmpRect],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n tmpRect.x,\r\n tmpRect.y,\r\n tmpRect.w,\r\n tmpRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n xRect.x,\r\n xRect.y,\r\n xRect.w,\r\n xRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n }\r\n };\r\n\r\n var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n var result = [];\r\n pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n pageWrapY =\r\n pageWrapY ||\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n switch (path.type) {\r\n default:\r\n case \"mt\":\r\n case \"lt\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n break;\r\n case \"arc\":\r\n result.push(\r\n Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n );\r\n break;\r\n case \"qct\":\r\n var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"bct\":\r\n var rectOfBezierCurve = getBezierCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x2,\r\n path.y2,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"rect\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n }\r\n\r\n for (var i = 0; i < result.length; i += 1) {\r\n while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n addPage.call(this);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var addPage = function() {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var font = this.font;\r\n var lineCap = this.lineCap;\r\n var lineWidth = this.lineWidth;\r\n var lineJoin = this.lineJoin;\r\n this.pdf.addPage();\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.font = font;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n };\r\n\r\n var pathPositionRedo = function(paths, x, y) {\r\n for (var i = 0; i < paths.length; i++) {\r\n switch (paths[i].type) {\r\n case \"bct\":\r\n paths[i].x2 += x;\r\n paths[i].y2 += y;\r\n case \"qct\":\r\n paths[i].x1 += x;\r\n paths[i].y1 += y;\r\n case \"mt\":\r\n case \"lt\":\r\n case \"arc\":\r\n default:\r\n paths[i].x += x;\r\n paths[i].y += y;\r\n }\r\n }\r\n return paths;\r\n };\r\n\r\n var sortPages = function(pages) {\r\n return pages.sort(function(a, b) {\r\n return a - b;\r\n });\r\n };\r\n\r\n var pathPreProcess = function(rule, isClip) {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var lineCap = this.lineCap;\r\n var oldLineWidth = this.lineWidth;\r\n var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n var lineJoin = this.lineJoin;\r\n\r\n var origPath = JSON.parse(JSON.stringify(this.path));\r\n var xPath = JSON.parse(JSON.stringify(this.path));\r\n var clipPath;\r\n var tmpPath;\r\n var pages = [];\r\n\r\n for (var i = 0; i < xPath.length; i++) {\r\n if (typeof xPath[i].x !== \"undefined\") {\r\n var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n for (var ii = 0; ii < page.length; ii += 1) {\r\n if (pages.indexOf(page[ii]) === -1) {\r\n pages.push(page[ii]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var j = 0; j < pages.length; j++) {\r\n while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n addPage.call(this);\r\n }\r\n }\r\n sortPages(pages);\r\n\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var k = min; k < max + 1; k++) {\r\n this.pdf.setPage(k);\r\n\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, rule, true);\r\n this.path = tmpPaths;\r\n }\r\n tmpPath = JSON.parse(JSON.stringify(origPath));\r\n this.path = pathPositionRedo(\r\n tmpPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n if (isClip === false || k === 0) {\r\n const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n drawPaths.call(this, rule, isClip);\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n this.lineWidth = oldLineWidth;\r\n }\r\n } else {\r\n this.lineWidth = lineWidth;\r\n drawPaths.call(this, rule, isClip);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n this.path = origPath;\r\n };\r\n\r\n /**\r\n * Processes the paths\r\n *\r\n * @function\r\n * @param rule {String}\r\n * @param isClip {Boolean}\r\n * @private\r\n * @ignore\r\n */\r\n var drawPaths = function(rule, isClip) {\r\n if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var moves = [];\r\n\r\n //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n var delta;\r\n var xPath = this.path;\r\n for (var i = 0; i < xPath.length; i++) {\r\n var pt = xPath[i];\r\n\r\n switch (pt.type) {\r\n case \"begin\":\r\n moves.push({\r\n begin: true\r\n });\r\n break;\r\n\r\n case \"close\":\r\n moves.push({\r\n close: true\r\n });\r\n break;\r\n\r\n case \"mt\":\r\n moves.push({\r\n start: pt,\r\n deltas: [],\r\n abs: []\r\n });\r\n break;\r\n\r\n case \"lt\":\r\n var iii = moves.length;\r\n if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n if (iii > 0) {\r\n for (iii; iii >= 0; iii--) {\r\n if (\r\n moves[iii - 1].close !== true &&\r\n moves[iii - 1].begin !== true\r\n ) {\r\n moves[iii - 1].deltas.push(delta);\r\n moves[iii - 1].abs.push(pt);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"bct\":\r\n delta = [\r\n pt.x1 - xPath[i - 1].x,\r\n pt.y1 - xPath[i - 1].y,\r\n pt.x2 - xPath[i - 1].x,\r\n pt.y2 - xPath[i - 1].y,\r\n pt.x - xPath[i - 1].x,\r\n pt.y - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"qct\":\r\n var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n var x3 = pt.x;\r\n var y3 = pt.y;\r\n delta = [\r\n x1 - xPath[i - 1].x,\r\n y1 - xPath[i - 1].y,\r\n x2 - xPath[i - 1].x,\r\n y2 - xPath[i - 1].y,\r\n x3 - xPath[i - 1].x,\r\n y3 - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"arc\":\r\n moves.push({\r\n deltas: [],\r\n abs: [],\r\n arc: true\r\n });\r\n\r\n if (Array.isArray(moves[moves.length - 1].abs)) {\r\n moves[moves.length - 1].abs.push(pt);\r\n }\r\n break;\r\n }\r\n }\r\n var style;\r\n if (!isClip) {\r\n if (rule === \"stroke\") {\r\n style = \"stroke\";\r\n } else {\r\n style = \"fill\";\r\n }\r\n } else {\r\n style = null;\r\n }\r\n\r\n var began = false;\r\n for (var k = 0; k < moves.length; k++) {\r\n if (moves[k].arc) {\r\n var arcs = moves[k].abs;\r\n\r\n for (var ii = 0; ii < arcs.length; ii++) {\r\n var arc = arcs[ii];\r\n\r\n if (arc.type === \"arc\") {\r\n drawArc.call(\r\n this,\r\n arc.x,\r\n arc.y,\r\n arc.radius,\r\n arc.startAngle,\r\n arc.endAngle,\r\n arc.counterclockwise,\r\n undefined,\r\n isClip,\r\n !began\r\n );\r\n } else {\r\n drawLine.call(this, arc.x, arc.y);\r\n }\r\n began = true;\r\n }\r\n } else if (moves[k].close === true) {\r\n this.pdf.internal.out(\"h\");\r\n began = false;\r\n } else if (moves[k].begin !== true) {\r\n var x = moves[k].start.x;\r\n var y = moves[k].start.y;\r\n drawLines.call(this, moves[k].deltas, x, y);\r\n began = true;\r\n }\r\n }\r\n\r\n if (style) {\r\n putStyle.call(this, style);\r\n }\r\n if (isClip) {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var getBaseline = function(y) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n switch (this.ctx.textBaseline) {\r\n case \"bottom\":\r\n return y - descent;\r\n case \"top\":\r\n return y + height - descent;\r\n case \"hanging\":\r\n return y + height - 2 * descent;\r\n case \"middle\":\r\n return y + height / 2 - descent;\r\n case \"ideographic\":\r\n // TODO not implemented\r\n return y;\r\n case \"alphabetic\":\r\n default:\r\n return y;\r\n }\r\n };\r\n\r\n var getTextBottom = function(yBaseLine) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n return yBaseLine + descent;\r\n };\r\n\r\n Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n var canvasGradient = function canvasGradient() {};\r\n\r\n canvasGradient.colorStops = [];\r\n canvasGradient.addColorStop = function(offset, color) {\r\n this.colorStops.push([offset, color]);\r\n };\r\n\r\n canvasGradient.getColor = function() {\r\n if (this.colorStops.length === 0) {\r\n return \"#000000\";\r\n }\r\n\r\n return this.colorStops[0][1];\r\n };\r\n\r\n canvasGradient.isCanvasGradient = true;\r\n return canvasGradient;\r\n };\r\n Context2D.prototype.createPattern = function createPattern() {\r\n return this.createLinearGradient();\r\n };\r\n Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n return this.createLinearGradient();\r\n };\r\n\r\n /**\r\n *\r\n * @param x Edge point X\r\n * @param y Edge point Y\r\n * @param r Radius\r\n * @param a1 start angle\r\n * @param a2 end angle\r\n * @param counterclockwise\r\n * @param style\r\n * @param isClip\r\n */\r\n var drawArc = function(\r\n x,\r\n y,\r\n r,\r\n a1,\r\n a2,\r\n counterclockwise,\r\n style,\r\n isClip,\r\n includeMove\r\n ) {\r\n // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n for (var i = 0; i < curves.length; i++) {\r\n var curve = curves[i];\r\n if (i === 0) {\r\n if (includeMove) {\r\n doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n } else {\r\n drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n }\r\n }\r\n drawCurve.call(\r\n this,\r\n x,\r\n y,\r\n curve.x2,\r\n curve.y2,\r\n curve.x3,\r\n curve.y3,\r\n curve.x4,\r\n curve.y4\r\n );\r\n }\r\n\r\n if (!isClip) {\r\n putStyle.call(this, style);\r\n } else {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n switch (style) {\r\n case \"stroke\":\r\n this.pdf.internal.out(\"S\");\r\n break;\r\n case \"fill\":\r\n this.pdf.internal.out(\"f\");\r\n break;\r\n }\r\n };\r\n\r\n var doClip = function() {\r\n this.pdf.clip();\r\n this.pdf.discardPath();\r\n };\r\n\r\n var doMove = function(x, y) {\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x) +\r\n \" \" +\r\n getVerticalCoordinateString(y) +\r\n \" m\"\r\n );\r\n };\r\n\r\n var putText = function(options) {\r\n var textAlign;\r\n switch (options.align) {\r\n case \"right\":\r\n case \"end\":\r\n textAlign = \"right\";\r\n break;\r\n case \"center\":\r\n textAlign = \"center\";\r\n break;\r\n case \"left\":\r\n case \"start\":\r\n default:\r\n textAlign = \"left\";\r\n break;\r\n }\r\n\r\n var textDimensions = this.pdf.getTextDimensions(options.text);\r\n var yBaseLine = getBaseline.call(this, options.y);\r\n var yBottom = getTextBottom.call(this, yBaseLine);\r\n var yTop = yBottom - textDimensions.h;\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n var baselineRect = this.ctx.transform.applyToRectangle(\r\n new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n );\r\n var textBounds = matrix.applyToRectangle(\r\n new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n );\r\n var pageArray = getPagesByPath.call(this, textBounds);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath, oldSize, oldLineWidth;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusBottomMargin =\r\n this.pdf.internal.pageSize.height - this.margin[2];\r\n var pageHeightMinusMargins =\r\n pageHeightMinusBottomMargin - this.margin[0];\r\n var pageWidthMinusRightMargin =\r\n this.pdf.internal.pageSize.width - this.margin[1];\r\n var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -1 * previousPageHeightSum + topMargin\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var textBoundsOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(textBounds))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n\r\n var doSlice = this.autoPaging !== \"text\";\r\n\r\n if (\r\n doSlice ||\r\n textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n ) {\r\n if (\r\n doSlice ||\r\n (textBoundsOnPage.y >= topMargin &&\r\n textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n ) {\r\n var croppedText = doSlice\r\n ? options.text\r\n : this.pdf.splitTextToSize(\r\n options.text,\r\n options.maxWidth ||\r\n pageWidthMinusRightMargin - textBoundsOnPage.x\r\n )[0];\r\n var baseLineRectOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(baselineRect))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum +\r\n topMargin +\r\n this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping =\r\n doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n\r\n this.pdf.text(\r\n croppedText,\r\n baseLineRectOnPage.x,\r\n baseLineRectOnPage.y,\r\n {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode\r\n }\r\n );\r\n\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n // This text is the last element of the page, but it got cut off due to the margin\r\n // so we render it in the next page\r\n\r\n if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n // As a result, all other elements have their y offset increased\r\n this.ctx.prevPageLastElemOffset +=\r\n pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n }\r\n }\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n } else {\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode,\r\n maxWidth: options.maxWidth\r\n });\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n };\r\n\r\n var drawLine = function(x, y, prevX, prevY) {\r\n prevX = prevX || 0;\r\n prevY = prevY || 0;\r\n\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x + prevX) +\r\n \" \" +\r\n getVerticalCoordinateString(y + prevY) +\r\n \" l\"\r\n );\r\n };\r\n\r\n var drawLines = function(lines, x, y) {\r\n return this.pdf.lines(lines, x, y, null, null);\r\n };\r\n\r\n var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n this.pdf.internal.out(\r\n [\r\n f2(getHorizontalCoordinate(x1 + x)),\r\n f2(getVerticalCoordinate(y1 + y)),\r\n f2(getHorizontalCoordinate(x2 + x)),\r\n f2(getVerticalCoordinate(y2 + y)),\r\n f2(getHorizontalCoordinate(x3 + x)),\r\n f2(getVerticalCoordinate(y3 + y)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n };\r\n\r\n /**\r\n * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n *\r\n * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n * @function createArc\r\n */\r\n var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n var twoPi = Math.PI * 2;\r\n var halfPi = Math.PI / 2.0;\r\n\r\n while (startAngle > endAngle) {\r\n startAngle = startAngle - twoPi;\r\n }\r\n var totalAngle = Math.abs(endAngle - startAngle);\r\n if (totalAngle < twoPi) {\r\n if (anticlockwise) {\r\n totalAngle = twoPi - totalAngle;\r\n }\r\n }\r\n\r\n // Compute the sequence of arc curves, up to PI/2 at a time.\r\n var curves = [];\r\n\r\n // clockwise or counterclockwise\r\n var sgn = anticlockwise ? -1 : +1;\r\n\r\n var a1 = startAngle;\r\n for (; totalAngle > EPSILON; ) {\r\n var remain = sgn * Math.min(totalAngle, halfPi);\r\n var a2 = a1 + remain;\r\n curves.push(createSmallArc.call(this, radius, a1, a2));\r\n totalAngle -= Math.abs(a2 - a1);\r\n a1 = a2;\r\n }\r\n\r\n return curves;\r\n };\r\n\r\n /**\r\n * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n *\r\n * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n *\r\n * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n */\r\n var createSmallArc = function(r, a1, a2) {\r\n var a = (a2 - a1) / 2.0;\r\n\r\n var x4 = r * Math.cos(a);\r\n var y4 = r * Math.sin(a);\r\n var x1 = x4;\r\n var y1 = -y4;\r\n\r\n var q1 = x1 * x1 + y1 * y1;\r\n var q2 = q1 + x1 * x4 + y1 * y4;\r\n var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n var x2 = x1 - k2 * y1;\r\n var y2 = y1 + k2 * x1;\r\n var x3 = x2;\r\n var y3 = -y2;\r\n\r\n var ar = a + a1;\r\n var cos_ar = Math.cos(ar);\r\n var sin_ar = Math.sin(ar);\r\n\r\n return {\r\n x1: r * Math.cos(a1),\r\n y1: r * Math.sin(a1),\r\n x2: x2 * cos_ar - y2 * sin_ar,\r\n y2: x2 * sin_ar + y2 * cos_ar,\r\n x3: x3 * cos_ar - y3 * sin_ar,\r\n y3: x3 * sin_ar + y3 * cos_ar,\r\n x4: r * Math.cos(a2),\r\n y4: r * Math.sin(a2)\r\n };\r\n };\r\n\r\n var rad2deg = function(value) {\r\n return (value * 180) / Math.PI;\r\n };\r\n\r\n var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n var midX1 = sx + (cpx - sx) * 0.5;\r\n var midY1 = sy + (cpy - sy) * 0.5;\r\n var midX2 = ex + (cpx - ex) * 0.5;\r\n var midY2 = ey + (cpy - ey) * 0.5;\r\n var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n return new Rectangle(\r\n resultX1,\r\n resultY1,\r\n resultX2 - resultX1,\r\n resultY2 - resultY1\r\n );\r\n };\r\n\r\n //De Casteljau algorithm\r\n var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n var tobx = bx - ax;\r\n var toby = by - ay;\r\n var tocx = cx - bx;\r\n var tocy = cy - by;\r\n var todx = dx - cx;\r\n var tody = dy - cy;\r\n var precision = 40;\r\n var d,\r\n i,\r\n px,\r\n py,\r\n qx,\r\n qy,\r\n rx,\r\n ry,\r\n tx,\r\n ty,\r\n sx,\r\n sy,\r\n x,\r\n y,\r\n minx,\r\n miny,\r\n maxx,\r\n maxy,\r\n toqx,\r\n toqy,\r\n torx,\r\n tory,\r\n totx,\r\n toty;\r\n for (i = 0; i < precision + 1; i++) {\r\n d = i / precision;\r\n px = ax + d * tobx;\r\n py = ay + d * toby;\r\n qx = bx + d * tocx;\r\n qy = by + d * tocy;\r\n rx = cx + d * todx;\r\n ry = cy + d * tody;\r\n toqx = qx - px;\r\n toqy = qy - py;\r\n torx = rx - qx;\r\n tory = ry - qy;\r\n\r\n sx = px + d * toqx;\r\n sy = py + d * toqy;\r\n tx = qx + d * torx;\r\n ty = qy + d * tory;\r\n totx = tx - sx;\r\n toty = ty - sy;\r\n\r\n x = sx + d * totx;\r\n y = sy + d * toty;\r\n if (i == 0) {\r\n minx = x;\r\n miny = y;\r\n maxx = x;\r\n maxy = y;\r\n } else {\r\n minx = Math.min(minx, x);\r\n miny = Math.min(miny, y);\r\n maxx = Math.max(maxx, x);\r\n maxy = Math.max(maxy, y);\r\n }\r\n }\r\n return new Rectangle(\r\n Math.round(minx),\r\n Math.round(miny),\r\n Math.round(maxx - minx),\r\n Math.round(maxy - miny)\r\n );\r\n };\r\n\r\n var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n return JSON.stringify({\r\n lineDash: lineDash,\r\n lineDashOffset: lineDashOffset\r\n });\r\n };\r\n\r\n var setLineDash = function() {\r\n // Avoid unnecessary line dash declarations.\r\n if (\r\n !this.prevLineDash &&\r\n !this.ctx.lineDash.length &&\r\n !this.ctx.lineDashOffset\r\n ) {\r\n return;\r\n }\r\n\r\n // Avoid unnecessary line dash declarations.\r\n const nextLineDash = getPrevLineDashValue(\r\n this.ctx.lineDash,\r\n this.ctx.lineDashOffset\r\n );\r\n if (this.prevLineDash !== nextLineDash) {\r\n this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n this.prevLineDash = nextLineDash;\r\n }\r\n };\r\n})(jsPDF.API);\r\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var ASCII85Encode = function(a) {\n var b, c, d, e, f, g, h, i, j, k;\n // eslint-disable-next-line no-control-regex\n for (\n !/[^\\x00-\\xFF]/.test(a),\n b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n a += b,\n c = [],\n d = 0,\n e = a.length;\n e > d;\n d += 4\n )\n (f =\n (a.charCodeAt(d) << 24) +\n (a.charCodeAt(d + 1) << 16) +\n (a.charCodeAt(d + 2) << 8) +\n a.charCodeAt(d + 3)),\n 0 !== f\n ? ((k = f % 85),\n (f = (f - k) / 85),\n (j = f % 85),\n (f = (f - j) / 85),\n (i = f % 85),\n (f = (f - i) / 85),\n (h = f % 85),\n (f = (f - h) / 85),\n (g = f % 85),\n c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n : c.push(122);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(c, b.length),\n String.fromCharCode.apply(String, c) + \"~>\"\n );\n };\n\n var ASCII85Decode = function(a) {\n var c,\n d,\n e,\n f,\n g,\n h = String,\n l = \"length\",\n w = 255,\n x = \"charCodeAt\",\n y = \"slice\",\n z = \"replace\";\n for (\n \"~>\" === a[y](-2),\n a = a[y](0, -2)\n [z](/\\s/g, \"\")\n [z](\"z\", \"!!!!!\"),\n c = \"uuuuu\"[y](a[l] % 5 || 5),\n a += c,\n e = [],\n f = 0,\n g = a[l];\n g > f;\n f += 5\n )\n (d =\n 52200625 * (a[x](f) - 33) +\n 614125 * (a[x](f + 1) - 33) +\n 7225 * (a[x](f + 2) - 33) +\n 85 * (a[x](f + 3) - 33) +\n (a[x](f + 4) - 33)),\n e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(e, c[l]),\n h.fromCharCode.apply(h, e)\n );\n };\n\n var ASCIIHexEncode = function(value) {\n return (\n value\n .split(\"\")\n .map(function(value) {\n return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n })\n .join(\"\") + \">\"\n );\n };\n\n var ASCIIHexDecode = function(value) {\n var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n value = value.replace(/\\s/g, \"\");\n if (value.indexOf(\">\") !== -1) {\n value = value.substr(0, value.indexOf(\">\"));\n }\n if (value.length % 2) {\n value += \"0\";\n }\n if (regexCheckIfHex.test(value) === false) {\n return \"\";\n }\n var result = \"\";\n for (var i = 0; i < value.length; i += 2) {\n result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n }\n return result;\n };\n /*\n var FlatePredictors = {\n None: 1,\n TIFF: 2,\n PNG_None: 10,\n PNG_Sub: 11,\n PNG_Up: 12,\n PNG_Average: 13,\n PNG_Paeth: 14,\n PNG_Optimum: 15\n };\n */\n\n var FlateEncode = function(data) {\n var arr = new Uint8Array(data.length);\n var i = data.length;\n while (i--) {\n arr[i] = data.charCodeAt(i);\n }\n arr = zlibSync(arr);\n data = arr.reduce(function(data, byte) {\n return data + String.fromCharCode(byte);\n }, \"\");\n return data;\n };\n\n jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n \"use strict\";\n var i = 0;\n var data = origData || \"\";\n var reverseChain = [];\n filterChain = filterChain || [];\n\n if (typeof filterChain === \"string\") {\n filterChain = [filterChain];\n }\n\n for (i = 0; i < filterChain.length; i += 1) {\n switch (filterChain[i]) {\n case \"ASCII85Decode\":\n case \"/ASCII85Decode\":\n data = ASCII85Decode(data);\n reverseChain.push(\"/ASCII85Encode\");\n break;\n case \"ASCII85Encode\":\n case \"/ASCII85Encode\":\n data = ASCII85Encode(data);\n reverseChain.push(\"/ASCII85Decode\");\n break;\n case \"ASCIIHexDecode\":\n case \"/ASCIIHexDecode\":\n data = ASCIIHexDecode(data);\n reverseChain.push(\"/ASCIIHexEncode\");\n break;\n case \"ASCIIHexEncode\":\n case \"/ASCIIHexEncode\":\n data = ASCIIHexEncode(data);\n reverseChain.push(\"/ASCIIHexDecode\");\n break;\n case \"FlateEncode\":\n case \"/FlateEncode\":\n data = FlateEncode(data);\n reverseChain.push(\"/FlateDecode\");\n break;\n default:\n throw new Error(\n 'The filter: \"' + filterChain[i] + '\" is not implemented'\n );\n }\n }\n\n return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name loadFile\n * @function\n * @param {string} url\n * @param {boolean} sync\n * @param {function} callback\n * @returns {string|undefined} result\n */\n jsPDFAPI.loadFile = function(url, sync, callback) {\n\n // eslint-disable-next-line no-unreachable\n return nodeReadFile(url, sync, callback);\n };\n\n /**\n * @name loadImageFile\n * @function\n * @param {string} path\n * @param {boolean} sync\n * @param {function} callback\n */\n jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n function browserRequest(url, sync, callback) {\n sync = sync === false ? false : true;\n callback = typeof callback === \"function\" ? callback : function() {};\n var result = undefined;\n\n var xhr = function(url, sync, callback) {\n var request = new XMLHttpRequest();\n var i = 0;\n\n var sanitizeUnicode = function(data) {\n var dataLength = data.length;\n var charArray = [];\n var StringFromCharCode = String.fromCharCode;\n\n //Transform Unicode to ASCII\n for (i = 0; i < dataLength; i += 1) {\n charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n }\n return charArray.join(\"\");\n };\n\n request.open(\"GET\", url, !sync);\n // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n if (sync === false) {\n request.onload = function() {\n if (request.status === 200) {\n callback(sanitizeUnicode(this.responseText));\n } else {\n callback(undefined);\n }\n };\n }\n request.send(null);\n\n if (sync && request.status === 200) {\n return sanitizeUnicode(request.responseText);\n }\n };\n try {\n result = xhr(url, sync, callback);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return result;\n }\n\n function nodeReadFile(url, sync, callback) {\n sync = sync === false ? false : true;\n var result = undefined;\n\n var fs = require(\"fs\");\n var path = require(\"path\");\n\n url = path.resolve(url);\n if (sync) {\n try {\n result = fs.readFileSync(url, { encoding: \"latin1\" });\n } catch (e) {\n return undefined;\n }\n } else {\n fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n if (!callback) {\n return;\n }\n if (err) {\n callback(undefined);\n }\n callback(data);\n });\n }\n\n return result;\n }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadHtml2Canvas() {\n return (function() {\n if (globalObject[\"html2canvas\"]) {\n return Promise.resolve(globalObject[\"html2canvas\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"html2canvas\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"html2canvas\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load html2canvas\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n })\n .then(function(html2canvas) {\n return html2canvas.default ? html2canvas.default : html2canvas;\n });\n }\n\n function loadDomPurify() {\n return (function() {\n if (globalObject[\"DOMPurify\"]) {\n return Promise.resolve(globalObject[\"DOMPurify\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"dompurify\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"dompurify\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load dompurify\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n })\n .then(function(dompurify) {\n return dompurify.default ? dompurify.default : dompurify;\n });\n }\n\n /**\n * Determine the type of a variable/object.\n *\n * @private\n * @ignore\n */\n var objType = function(obj) {\n var type = typeof obj;\n if (type === \"undefined\") return \"undefined\";\n else if (type === \"string\" || obj instanceof String) return \"string\";\n else if (type === \"number\" || obj instanceof Number) return \"number\";\n else if (type === \"function\" || obj instanceof Function) return \"function\";\n else if (!!obj && obj.constructor === Array) return \"array\";\n else if (obj && obj.nodeType === 1) return \"element\";\n else if (type === \"object\") return \"object\";\n else return \"unknown\";\n };\n\n /**\n * Create an HTML element with optional className, innerHTML, and style.\n *\n * @private\n * @ignore\n */\n var createElement = function(tagName, opt) {\n var el = document.createElement(tagName);\n if (opt.className) el.className = opt.className;\n if (opt.innerHTML && opt.dompurify) {\n el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n }\n for (var key in opt.style) {\n el.style[key] = opt.style[key];\n }\n return el;\n };\n\n /**\n * Deep-clone a node and preserve contents/properties.\n *\n * @private\n * @ignore\n */\n var cloneNode = function(node, javascriptEnabled) {\n // Recursively clone the node.\n var clone =\n node.nodeType === 3\n ? document.createTextNode(node.nodeValue)\n : node.cloneNode(false);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (\n javascriptEnabled === true ||\n child.nodeType !== 1 ||\n child.nodeName !== \"SCRIPT\"\n ) {\n clone.appendChild(cloneNode(child, javascriptEnabled));\n }\n }\n\n if (node.nodeType === 1) {\n // Preserve contents/properties of special nodes.\n if (node.nodeName === \"CANVAS\") {\n clone.width = node.width;\n clone.height = node.height;\n clone.getContext(\"2d\").drawImage(node, 0, 0);\n } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n clone.value = node.value;\n }\n\n // Preserve the node's scroll position when it loads.\n clone.addEventListener(\n \"load\",\n function() {\n clone.scrollTop = node.scrollTop;\n clone.scrollLeft = node.scrollLeft;\n },\n true\n );\n }\n\n // Return the cloned node.\n return clone;\n };\n\n /* ----- CONSTRUCTOR ----- */\n\n var Worker = function Worker(opt) {\n // Create the root parent for the proto chain, and the starting Worker.\n var root = Object.assign(\n Worker.convert(Promise.resolve()),\n JSON.parse(JSON.stringify(Worker.template))\n );\n var self = Worker.convert(Promise.resolve(), root);\n\n // Set progress, optional settings, and return.\n self = self.setProgress(1, Worker, 1, [Worker]);\n self = self.set(opt);\n return self;\n };\n\n // Boilerplate for subclassing Promise.\n Worker.prototype = Object.create(Promise.prototype);\n Worker.prototype.constructor = Worker;\n\n // Converts/casts promises into Workers.\n Worker.convert = function convert(promise, inherit) {\n // Uses prototypal inheritance to receive changes made to ancestors' properties.\n promise.__proto__ = inherit || Worker.prototype;\n return promise;\n };\n\n Worker.template = {\n prop: {\n src: null,\n container: null,\n overlay: null,\n canvas: null,\n img: null,\n pdf: null,\n pageSize: null,\n callback: function() {}\n },\n progress: {\n val: 0,\n state: null,\n n: 0,\n stack: []\n },\n opt: {\n filename: \"file.pdf\",\n margin: [0, 0, 0, 0],\n enableLinks: true,\n x: 0,\n y: 0,\n html2canvas: {},\n jsPDF: {},\n backgroundColor: \"transparent\"\n }\n };\n\n /* ----- FROM / TO ----- */\n\n Worker.prototype.from = function from(src, type) {\n function getType(src) {\n switch (objType(src)) {\n case \"string\":\n return \"string\";\n case \"element\":\n return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n default:\n return \"unknown\";\n }\n }\n\n return this.then(function from_main() {\n type = type || getType(src);\n switch (type) {\n case \"string\":\n return this.then(loadDomPurify).then(function(dompurify) {\n return this.set({\n src: createElement(\"div\", {\n innerHTML: src,\n dompurify: dompurify\n })\n });\n });\n case \"element\":\n return this.set({ src: src });\n case \"canvas\":\n return this.set({ canvas: src });\n case \"img\":\n return this.set({ img: src });\n default:\n return this.error(\"Unknown source type.\");\n }\n });\n };\n\n Worker.prototype.to = function to(target) {\n // Route the 'to' request to the appropriate method.\n switch (target) {\n case \"container\":\n return this.toContainer();\n case \"canvas\":\n return this.toCanvas();\n case \"img\":\n return this.toImg();\n case \"pdf\":\n return this.toPdf();\n default:\n return this.error(\"Invalid target.\");\n }\n };\n\n Worker.prototype.toContainer = function toContainer() {\n // Set up function prerequisites.\n var prereqs = [\n function checkSrc() {\n return (\n this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n );\n },\n function checkPageSize() {\n return this.prop.pageSize || this.setPageSize();\n }\n ];\n return this.thenList(prereqs).then(function toContainer_main() {\n // Define the CSS styles for the container and its overlay parent.\n var overlayCSS = {\n position: \"fixed\",\n overflow: \"hidden\",\n zIndex: 1000,\n left: \"-100000px\",\n right: 0,\n bottom: 0,\n top: 0\n };\n var containerCSS = {\n position: \"relative\",\n display: \"inline-block\",\n width:\n (typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.windowWidth\n : Math.max(\n this.prop.src.clientWidth,\n this.prop.src.scrollWidth,\n this.prop.src.offsetWidth\n )) + \"px\",\n left: 0,\n right: 0,\n top: 0,\n margin: \"auto\",\n backgroundColor: this.opt.backgroundColor\n }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n var source = cloneNode(\n this.prop.src,\n this.opt.html2canvas.javascriptEnabled\n );\n\n if (source.tagName === \"BODY\") {\n containerCSS.height =\n Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) + \"px\";\n }\n\n this.prop.overlay = createElement(\"div\", {\n className: \"html2pdf__overlay\",\n style: overlayCSS\n });\n this.prop.container = createElement(\"div\", {\n className: \"html2pdf__container\",\n style: containerCSS\n });\n this.prop.container.appendChild(source);\n this.prop.container.firstChild.appendChild(\n createElement(\"div\", {\n style: {\n clear: \"both\",\n border: \"0 none transparent\",\n margin: 0,\n padding: 0,\n height: 0\n }\n })\n );\n this.prop.container.style.float = \"none\";\n this.prop.overlay.appendChild(this.prop.container);\n document.body.appendChild(this.prop.overlay);\n this.prop.container.firstChild.style.position = \"relative\";\n this.prop.container.height =\n Math.max(\n this.prop.container.firstChild.clientHeight,\n this.prop.container.firstChild.scrollHeight,\n this.prop.container.firstChild.offsetHeight\n ) + \"px\";\n });\n };\n\n Worker.prototype.toCanvas = function toCanvas() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toCanvas_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var options = Object.assign({}, this.opt.html2canvas);\n delete options.onrendered;\n\n return html2canvas(this.prop.container, options);\n })\n .then(function toCanvas_post(canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toContext2d = function toContext2d() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toContext2d_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n\n var pdf = this.opt.jsPDF;\n var fontFaces = this.opt.fontFaces;\n\n var scale =\n typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.width / this.opt.windowWidth\n : 1;\n\n var options = Object.assign(\n {\n async: true,\n allowTaint: true,\n scale: scale,\n scrollX: this.opt.scrollX || 0,\n scrollY: this.opt.scrollY || 0,\n backgroundColor: \"#ffffff\",\n imageTimeout: 15000,\n logging: true,\n proxy: null,\n removeContainer: true,\n foreignObjectRendering: false,\n useCORS: false\n },\n this.opt.html2canvas\n );\n delete options.onrendered;\n\n pdf.context2d.autoPaging =\n typeof this.opt.autoPaging === \"undefined\"\n ? true\n : this.opt.autoPaging;\n pdf.context2d.posX = this.opt.x;\n pdf.context2d.posY = this.opt.y;\n pdf.context2d.margin = this.opt.margin;\n pdf.context2d.fontFaces = fontFaces;\n\n if (fontFaces) {\n for (var i = 0; i < fontFaces.length; ++i) {\n var font = fontFaces[i];\n var src = font.src.find(function(src) {\n return src.format === \"truetype\";\n });\n\n if (src) {\n pdf.addFont(src.url, font.ref.name, font.ref.style);\n }\n }\n }\n\n options.windowHeight = options.windowHeight || 0;\n options.windowHeight =\n options.windowHeight == 0\n ? Math.max(\n this.prop.container.clientHeight,\n this.prop.container.scrollHeight,\n this.prop.container.offsetHeight\n )\n : options.windowHeight;\n\n pdf.context2d.save(true);\n return html2canvas(this.prop.container, options);\n })\n .then(function toContext2d_post(canvas) {\n this.opt.jsPDF.context2d.restore(true);\n\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toImg = function toImg() {\n // Set up function prerequisites.\n var prereqs = [\n function checkCanvas() {\n return this.prop.canvas || this.toCanvas();\n }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toImg_main() {\n var imgData = this.prop.canvas.toDataURL(\n \"image/\" + this.opt.image.type,\n this.opt.image.quality\n );\n this.prop.img = document.createElement(\"img\");\n this.prop.img.src = imgData;\n });\n };\n\n Worker.prototype.toPdf = function toPdf() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContext2d() {\n return this.toContext2d();\n }\n //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toPdf_main() {\n // Create local copies of frequently used properties.\n this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n });\n };\n\n /* ----- OUTPUT / SAVE ----- */\n\n Worker.prototype.output = function output(type, options, src) {\n // Redirect requests to the correct function (outputPdf / outputImg).\n src = src || \"pdf\";\n if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n return this.outputImg(type, options);\n } else {\n return this.outputPdf(type, options);\n }\n };\n\n Worker.prototype.outputPdf = function outputPdf(type, options) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputPdf_main() {\n /* Currently implemented output types:\n * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n * save(options), arraybuffer, blob, bloburi/bloburl,\n * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n */\n return this.prop.pdf.output(type, options);\n });\n };\n\n Worker.prototype.outputImg = function outputImg(type) {\n // Set up function prerequisites.\n var prereqs = [\n function checkImg() {\n return this.prop.img || this.toImg();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputImg_main() {\n switch (type) {\n case undefined:\n case \"img\":\n return this.prop.img;\n case \"datauristring\":\n case \"dataurlstring\":\n return this.prop.img.src;\n case \"datauri\":\n case \"dataurl\":\n return (document.location.href = this.prop.img.src);\n default:\n throw 'Image output type \"' + type + '\" is not supported.';\n }\n });\n };\n\n Worker.prototype.save = function save(filename) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs)\n .set(filename ? { filename: filename } : null)\n .then(function save_main() {\n this.prop.pdf.save(this.opt.filename);\n });\n };\n\n Worker.prototype.doCallback = function doCallback() {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs).then(function doCallback_main() {\n this.prop.callback(this.prop.pdf);\n });\n };\n\n /* ----- SET / GET ----- */\n\n Worker.prototype.set = function set(opt) {\n // TODO: Implement ordered pairs?\n\n // Silently ignore invalid or empty input.\n if (objType(opt) !== \"object\") {\n return this;\n }\n\n // Build an array of setter functions to queue.\n var fns = Object.keys(opt || {}).map(function(key) {\n if (key in Worker.template.prop) {\n // Set pre-defined properties.\n return function set_prop() {\n this.prop[key] = opt[key];\n };\n } else {\n switch (key) {\n case \"margin\":\n return this.setMargin.bind(this, opt.margin);\n case \"jsPDF\":\n return function set_jsPDF() {\n this.opt.jsPDF = opt.jsPDF;\n return this.setPageSize();\n };\n case \"pageSize\":\n return this.setPageSize.bind(this, opt.pageSize);\n default:\n // Set any other properties in opt.\n return function set_opt() {\n this.opt[key] = opt[key];\n };\n }\n }\n }, this);\n\n // Set properties within the promise chain.\n return this.then(function set_main() {\n return this.thenList(fns);\n });\n };\n\n Worker.prototype.get = function get(key, cbk) {\n return this.then(function get_main() {\n // Fetch the requested property, either as a predefined prop or in opt.\n var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n return cbk ? cbk(val) : val;\n });\n };\n\n Worker.prototype.setMargin = function setMargin(margin) {\n return this.then(function setMargin_main() {\n // Parse the margin property.\n switch (objType(margin)) {\n case \"number\":\n margin = [margin, margin, margin, margin];\n // eslint-disable-next-line no-fallthrough\n case \"array\":\n if (margin.length === 2) {\n margin = [margin[0], margin[1], margin[0], margin[1]];\n }\n if (margin.length === 4) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return this.error(\"Invalid margin array.\");\n }\n\n // Set the margin property, then update pageSize.\n this.opt.margin = margin;\n }).then(this.setPageSize);\n };\n\n Worker.prototype.setPageSize = function setPageSize(pageSize) {\n function toPx(val, k) {\n return Math.floor(((val * k) / 72) * 96);\n }\n\n return this.then(function setPageSize_main() {\n // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n // Add 'inner' field if not present.\n if (!pageSize.hasOwnProperty(\"inner\")) {\n pageSize.inner = {\n width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n };\n pageSize.inner.px = {\n width: toPx(pageSize.inner.width, pageSize.k),\n height: toPx(pageSize.inner.height, pageSize.k)\n };\n pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n }\n\n // Attach pageSize to this.\n this.prop.pageSize = pageSize;\n });\n };\n\n Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n // Immediately update all progress values.\n if (val != null) this.progress.val = val;\n if (state != null) this.progress.state = state;\n if (n != null) this.progress.n = n;\n if (stack != null) this.progress.stack = stack;\n this.progress.ratio = this.progress.val / this.progress.state;\n\n // Return this for command chaining.\n return this;\n };\n\n Worker.prototype.updateProgress = function updateProgress(\n val,\n state,\n n,\n stack\n ) {\n // Immediately update all progress values, using setProgress.\n return this.setProgress(\n val ? this.progress.val + val : null,\n state ? state : null,\n n ? this.progress.n + n : null,\n stack ? this.progress.stack.concat(stack) : null\n );\n };\n\n /* ----- PROMISE MAPPING ----- */\n\n Worker.prototype.then = function then(onFulfilled, onRejected) {\n // Wrap `this` for encapsulation.\n var self = this;\n\n return this.thenCore(onFulfilled, onRejected, function then_main(\n onFulfilled,\n onRejected\n ) {\n // Update progress while queuing, calling, and resolving `then`.\n self.updateProgress(null, null, 1, [onFulfilled]);\n return Promise.prototype.then\n .call(this, function then_pre(val) {\n self.updateProgress(null, onFulfilled);\n return val;\n })\n .then(onFulfilled, onRejected)\n .then(function then_post(val) {\n self.updateProgress(1);\n return val;\n });\n });\n };\n\n Worker.prototype.thenCore = function thenCore(\n onFulfilled,\n onRejected,\n thenBase\n ) {\n // Handle optional thenBase parameter.\n thenBase = thenBase || Promise.prototype.then;\n\n // Wrap `this` for encapsulation and bind it to the promise handlers.\n var self = this;\n if (onFulfilled) {\n onFulfilled = onFulfilled.bind(self);\n }\n if (onRejected) {\n onRejected = onRejected.bind(self);\n }\n\n // Cast self into a Promise to avoid polyfills recursively defining `then`.\n var isNative =\n Promise.toString().indexOf(\"[native code]\") !== -1 &&\n Promise.name === \"Promise\";\n var selfPromise = isNative\n ? self\n : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n // Return the promise, after casting it into a Worker and preserving props.\n var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n return Worker.convert(returnVal, self.__proto__);\n };\n\n Worker.prototype.thenExternal = function thenExternal(\n onFulfilled,\n onRejected\n ) {\n // Call `then` and return a standard promise (exits the Worker chain).\n return Promise.prototype.then.call(this, onFulfilled, onRejected);\n };\n\n Worker.prototype.thenList = function thenList(fns) {\n // Queue a series of promise 'factories' into the promise chain.\n var self = this;\n fns.forEach(function thenList_forEach(fn) {\n self = self.thenCore(fn);\n });\n return self;\n };\n\n Worker.prototype[\"catch\"] = function(onRejected) {\n // Bind `this` to the promise handler, call `catch`, and return a Worker.\n if (onRejected) {\n onRejected = onRejected.bind(this);\n }\n var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n return Worker.convert(returnVal, this);\n };\n\n Worker.prototype.catchExternal = function catchExternal(onRejected) {\n // Call `catch` and return a standard promise (exits the Worker chain).\n return Promise.prototype[\"catch\"].call(this, onRejected);\n };\n\n Worker.prototype.error = function error(msg) {\n // Throw the error in the Promise chain.\n return this.then(function error_main() {\n throw new Error(msg);\n });\n };\n\n /* ----- ALIASES ----- */\n\n Worker.prototype.using = Worker.prototype.set;\n Worker.prototype.saveAs = Worker.prototype.save;\n Worker.prototype.export = Worker.prototype.output;\n Worker.prototype.run = Worker.prototype.then;\n\n // Get dimensions of a PDF page, as determined by jsPDF.\n jsPDF.getPageSize = function(orientation, unit, format) {\n // Decode options object\n if (typeof orientation === \"object\") {\n var options = orientation;\n orientation = options.orientation;\n unit = options.unit || unit;\n format = options.format || format;\n }\n\n // Default options\n unit = unit || \"mm\";\n format = format || \"a4\";\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n var format_as_string = (\"\" + format).toLowerCase();\n\n // Size in pt of various paper formats\n var pageFormats = {\n a0: [2383.94, 3370.39],\n a1: [1683.78, 2383.94],\n a2: [1190.55, 1683.78],\n a3: [841.89, 1190.55],\n a4: [595.28, 841.89],\n a5: [419.53, 595.28],\n a6: [297.64, 419.53],\n a7: [209.76, 297.64],\n a8: [147.4, 209.76],\n a9: [104.88, 147.4],\n a10: [73.7, 104.88],\n b0: [2834.65, 4008.19],\n b1: [2004.09, 2834.65],\n b2: [1417.32, 2004.09],\n b3: [1000.63, 1417.32],\n b4: [708.66, 1000.63],\n b5: [498.9, 708.66],\n b6: [354.33, 498.9],\n b7: [249.45, 354.33],\n b8: [175.75, 249.45],\n b9: [124.72, 175.75],\n b10: [87.87, 124.72],\n c0: [2599.37, 3676.54],\n c1: [1836.85, 2599.37],\n c2: [1298.27, 1836.85],\n c3: [918.43, 1298.27],\n c4: [649.13, 918.43],\n c5: [459.21, 649.13],\n c6: [323.15, 459.21],\n c7: [229.61, 323.15],\n c8: [161.57, 229.61],\n c9: [113.39, 161.57],\n c10: [79.37, 113.39],\n dl: [311.81, 623.62],\n letter: [612, 792],\n \"government-letter\": [576, 756],\n legal: [612, 1008],\n \"junior-legal\": [576, 360],\n ledger: [1224, 792],\n tabloid: [792, 1224],\n \"credit-card\": [153, 243]\n };\n\n var k;\n // Unit conversion\n switch (unit) {\n case \"pt\":\n k = 1;\n break;\n case \"mm\":\n k = 72 / 25.4;\n break;\n case \"cm\":\n k = 72 / 2.54;\n break;\n case \"in\":\n k = 72;\n break;\n case \"px\":\n k = 72 / 96;\n break;\n case \"pc\":\n k = 12;\n break;\n case \"em\":\n k = 12;\n break;\n case \"ex\":\n k = 6;\n break;\n default:\n throw \"Invalid unit: \" + unit;\n }\n var pageHeight = 0;\n var pageWidth = 0;\n\n // Dimensions are stored as user units and converted to points on output\n if (pageFormats.hasOwnProperty(format_as_string)) {\n pageHeight = pageFormats[format_as_string][1] / k;\n pageWidth = pageFormats[format_as_string][0] / k;\n } else {\n try {\n pageHeight = format[1];\n pageWidth = format[0];\n } catch (err) {\n throw new Error(\"Invalid format: \" + format);\n }\n }\n\n var tmp;\n // Handle page orientation\n if (orientation === \"p\" || orientation === \"portrait\") {\n orientation = \"p\";\n if (pageWidth > pageHeight) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else if (orientation === \"l\" || orientation === \"landscape\") {\n orientation = \"l\";\n if (pageHeight > pageWidth) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else {\n throw \"Invalid orientation: \" + orientation;\n }\n\n // Return information (k is the unit conversion ratio from pts)\n var info = {\n width: pageWidth,\n height: pageHeight,\n unit: unit,\n k: k,\n orientation: orientation\n };\n return info;\n };\n\n /**\n * @typedef FontFace\n *\n * The font-face type implements an interface similar to that of the font-face CSS rule,\n * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n * is updated.\n *\n * All properties expect values similar to those in the font-face CSS rule. A difference\n * is the font-family, which do not need to be enclosed in double-quotes when containing\n * spaces like in CSS.\n *\n * @property {string} family The name of the font-family.\n * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n * @property {string} [src] url A URL to a font of a specific format.\n * @property {string} [src] format Format of the font referenced by the URL.\n */\n\n /**\n * Generate a PDF from an HTML element or string using.\n *\n * @name html\n * @function\n * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n * @param {Object} [options] Collection of settings\n * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n *
      \n *
    • \n * false: Auto paging is disabled.\n *
    • \n *
    • \n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\n * slice text in half, making it difficult to read.\n *
    • \n *
    • \n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\n * mostly of a single column of text.\n *
    • \n *
    \n * Default is true.\n * @param {string} [options.filename] name of the file\n * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n * @param {jsPDF} [options.jsPDF] jsPDF instance\n * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is\n * specified or the windowWidth option is NOT specified.\n * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n * html2canvas.windowWidth option, this option affects the actual container size while rendering and\n * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified.\n *\n * @example\n * var doc = new jsPDF();\n *\n * doc.html(document.body, {\n * callback: function (doc) {\n * doc.save();\n * },\n * x: 10,\n * y: 10\n * });\n */\n jsPDFAPI.html = function(src, options) {\n \"use strict\";\n\n options = options || {};\n options.callback = options.callback || function() {};\n options.html2canvas = options.html2canvas || {};\n options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n options.jsPDF = options.jsPDF || this;\n options.fontFaces = options.fontFaces\n ? options.fontFaces.map(normalizeFontFace)\n : null;\n\n // Create a new worker with the given options.\n var worker = new Worker(options);\n\n if (!options.worker) {\n // If worker is not set to true, perform the traditional 'simple' operation.\n return worker.from(src).doCallback();\n } else {\n // Otherwise, return the worker for new Promise-based operation.\n return worker;\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n var jsNamesObj, jsJsObj, text;\n /**\n * @name addJS\n * @function\n * @param {string} javascript The javascript to be embedded into the PDF-file.\n * @returns {jsPDF}\n */\n jsPDFAPI.addJS = function(javascript) {\n text = javascript;\n this.internal.events.subscribe(\"postPutResources\", function() {\n jsNamesObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n\n jsJsObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /JavaScript\");\n this.internal.out(\"/JS (\" + text + \")\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n this.internal.events.subscribe(\"putCatalog\", function() {\n if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n this.internal.out(\"/Names <>\");\n }\n });\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namesOid;\n //var destsGoto = [];\n\n jsPDFAPI.events.push([\n \"postPutResources\",\n function() {\n var pdf = this;\n var rx = /^(\\d+) 0 obj$/;\n\n // Write action goto objects for each page\n // this.outline.destsGoto = [];\n // for (var i = 0; i < totalPages; i++) {\n // var id = pdf.internal.newObject();\n // this.outline.destsGoto.push(id);\n // pdf.internal.write(\"<> endobj\");\n // }\n //\n // for (var i = 0; i < dests.length; i++) {\n // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n // R\");\n // }\n //\n if (this.outline.root.children.length > 0) {\n var lines = pdf.outline.render().split(/\\r\\n/);\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var m = rx.exec(line);\n if (m != null) {\n var oid = m[1];\n pdf.internal.newObjectDeferredBegin(oid, false);\n }\n pdf.internal.write(line);\n }\n }\n\n // This code will write named destination for each page reference\n // (page_1, etc)\n if (this.outline.createNamedDestinations) {\n var totalPages = this.internal.pages.length;\n // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n // follow 5, 7, 9, etc\n // Write destination objects for each page\n var dests = [];\n for (var i = 0; i < totalPages; i++) {\n var id = pdf.internal.newObject();\n dests.push(id);\n var info = pdf.internal.getPageInfo(i + 1);\n pdf.internal.write(\n \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n );\n }\n\n // assign a name for each destination\n var names2Oid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Names [ \");\n for (var i = 0; i < dests.length; i++) {\n pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n }\n pdf.internal.write(\" ] >>\", \"endobj\");\n\n // var kids = pdf.internal.newObject();\n // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n // pdf.internal.write(' ] >>', 'endobj');\n\n namesOid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n pdf.internal.write(\">>\", \"endobj\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putCatalog\",\n function() {\n var pdf = this;\n if (pdf.outline.root.children.length > 0) {\n pdf.internal.write(\n \"/Outlines\",\n this.outline.makeRef(this.outline.root)\n );\n if (this.outline.createNamedDestinations) {\n pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n }\n // Open with Bookmarks showing\n // pdf.internal.write(\"/PageMode /UseOutlines\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n var pdf = this;\n\n pdf.outline = {\n createNamedDestinations: false,\n root: {\n children: []\n }\n };\n\n /**\n * Options: pageNumber\n */\n pdf.outline.add = function(parent, title, options) {\n var item = {\n title: title,\n options: options,\n children: []\n };\n if (parent == null) {\n parent = this.root;\n }\n parent.children.push(item);\n return item;\n };\n\n pdf.outline.render = function() {\n this.ctx = {};\n this.ctx.val = \"\";\n this.ctx.pdf = pdf;\n\n this.genIds_r(this.root);\n this.renderRoot(this.root);\n this.renderItems(this.root);\n\n return this.ctx.val;\n };\n\n pdf.outline.genIds_r = function(node) {\n node.id = pdf.internal.newObjectDeferred();\n for (var i = 0; i < node.children.length; i++) {\n this.genIds_r(node.children[i]);\n }\n };\n\n pdf.outline.renderRoot = function(node) {\n this.objStart(node);\n this.line(\"/Type /Outlines\");\n if (node.children.length > 0) {\n this.line(\"/First \" + this.makeRef(node.children[0]));\n this.line(\n \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n );\n }\n this.line(\n \"/Count \" +\n this.count_r(\n {\n count: 0\n },\n node\n )\n );\n this.objEnd();\n };\n\n pdf.outline.renderItems = function(node) {\n var getVerticalCoordinateString = this.ctx.pdf.internal\n .getVerticalCoordinateString;\n for (var i = 0; i < node.children.length; i++) {\n var item = node.children[i];\n this.objStart(item);\n\n this.line(\"/Title \" + this.makeString(item.title));\n\n this.line(\"/Parent \" + this.makeRef(node));\n if (i > 0) {\n this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n }\n if (i < node.children.length - 1) {\n this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n }\n if (item.children.length > 0) {\n this.line(\"/First \" + this.makeRef(item.children[0]));\n this.line(\n \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n );\n }\n\n var count = (this.count = this.count_r(\n {\n count: 0\n },\n item\n ));\n if (count > 0) {\n this.line(\"/Count \" + count);\n }\n\n if (item.options) {\n if (item.options.pageNumber) {\n // Explicit Destination\n //WARNING this assumes page ids are 3,5,7, etc.\n var info = pdf.internal.getPageInfo(item.options.pageNumber);\n this.line(\n \"/Dest \" +\n \"[\" +\n info.objId +\n \" 0 R /XYZ 0 \" +\n getVerticalCoordinateString(0) +\n \" 0]\"\n );\n // this line does not work on all clients (pageNumber instead of page ref)\n //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n // Named Destination\n // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n // Action Destination\n // var id = pdf.internal.newObject();\n // pdf.internal.write('<> endobj');\n // this.line('/A ' + id + ' 0 R' );\n }\n }\n this.objEnd();\n }\n for (var z = 0; z < node.children.length; z++) {\n this.renderItems(node.children[z]);\n }\n };\n\n pdf.outline.line = function(text) {\n this.ctx.val += text + \"\\r\\n\";\n };\n\n pdf.outline.makeRef = function(node) {\n return node.id + \" 0 R\";\n };\n\n pdf.outline.makeString = function(val) {\n return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n };\n\n pdf.outline.objStart = function(node) {\n this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n };\n\n pdf.outline.objEnd = function() {\n this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n };\n\n pdf.outline.count_r = function(ctx, node) {\n for (var i = 0; i < node.children.length; i++) {\n ctx.count++;\n this.count_r(ctx, node.children[i]);\n }\n return ctx.count;\n };\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * 0xc0 (SOF) Huffman - Baseline DCT\n * 0xc1 (SOF) Huffman - Extended sequential DCT\n * 0xc2 Progressive DCT (SOF2)\n * 0xc3 Spatial (sequential) lossless (SOF3)\n * 0xc4 Differential sequential DCT (SOF5)\n * 0xc5 Differential progressive DCT (SOF6)\n * 0xc6 Differential spatial (SOF7)\n * 0xc7\n */\n var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n //takes a string imgData containing the raw bytes of\n //a jpeg image and returns [width, height]\n //Algorithm from: http://www.64lines.com/jpeg-width-height\n var getJpegInfo = function(imgData) {\n var width, height, numcomponents;\n var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n var len = imgData.length;\n var result = { width: 0, height: 0, numcomponents: 1 };\n for (var i = 4; i < len; i += 2) {\n i += blockLength;\n if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n numcomponents = imgData.charCodeAt(i + 9);\n result = { width: width, height: height, numcomponents: numcomponents };\n break;\n } else {\n blockLength =\n imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n }\n }\n return result;\n };\n\n /**\n * @ignore\n */\n jsPDFAPI.processJPEG = function(\n data,\n index,\n alias,\n compression,\n dataAsBinaryString,\n colorSpace\n ) {\n var filter = this.decode.DCT_DECODE,\n bpc = 8,\n dims,\n result = null;\n\n if (\n typeof data === \"string\" ||\n this.__addimage__.isArrayBuffer(data) ||\n this.__addimage__.isArrayBufferView(data)\n ) {\n // if we already have a stored binary string rep use that\n data = dataAsBinaryString || data;\n data = this.__addimage__.isArrayBuffer(data)\n ? new Uint8Array(data)\n : data;\n data = this.__addimage__.isArrayBufferView(data)\n ? this.__addimage__.arrayBufferToBinaryString(data)\n : data;\n\n dims = getJpegInfo(data);\n switch (dims.numcomponents) {\n case 1:\n colorSpace = this.color_spaces.DEVICE_GRAY;\n break;\n case 4:\n colorSpace = this.color_spaces.DEVICE_CMYK;\n break;\n case 3:\n colorSpace = this.color_spaces.DEVICE_RGB;\n break;\n }\n\n result = {\n data: data,\n width: dims.width,\n height: dims.height,\n colorSpace: colorSpace,\n bitsPerComponent: bpc,\n filter: filter,\n index: index,\n alias: alias\n };\n }\n return result;\n };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n var APNG_BLEND_OP_OVER,\n APNG_BLEND_OP_SOURCE,\n APNG_DISPOSE_OP_BACKGROUND,\n APNG_DISPOSE_OP_NONE,\n APNG_DISPOSE_OP_PREVIOUS,\n makeImage,\n scratchCanvas,\n scratchCtx;\n\n APNG_DISPOSE_OP_NONE = 0;\n\n APNG_DISPOSE_OP_BACKGROUND = 1;\n\n APNG_DISPOSE_OP_PREVIOUS = 2;\n\n APNG_BLEND_OP_SOURCE = 0;\n\n APNG_BLEND_OP_OVER = 1;\n\n function PNG(data) {\n var chunkSize,\n colors,\n palLen,\n delayDen,\n delayNum,\n frame,\n i,\n index,\n key,\n section,\n palShort,\n text,\n _i,\n _j,\n _ref;\n this.data = data;\n this.pos = 8;\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.animation = null;\n this.text = {};\n frame = null;\n while (true) {\n chunkSize = this.readUInt32();\n section = function() {\n var _i, _results;\n _results = [];\n for (i = _i = 0; _i < 4; i = ++_i) {\n _results.push(String.fromCharCode(this.data[this.pos++]));\n }\n return _results;\n }\n .call(this)\n .join(\"\");\n switch (section) {\n case \"IHDR\":\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n case \"acTL\":\n this.animation = {\n numFrames: this.readUInt32(),\n numPlays: this.readUInt32() || Infinity,\n frames: []\n };\n break;\n case \"PLTE\":\n this.palette = this.read(chunkSize);\n break;\n case \"fcTL\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.pos += 4;\n frame = {\n width: this.readUInt32(),\n height: this.readUInt32(),\n xOffset: this.readUInt32(),\n yOffset: this.readUInt32()\n };\n delayNum = this.readUInt16();\n delayDen = this.readUInt16() || 100;\n frame.delay = (1000 * delayNum) / delayDen;\n frame.disposeOp = this.data[this.pos++];\n frame.blendOp = this.data[this.pos++];\n frame.data = [];\n break;\n case \"IDAT\":\n case \"fdAT\":\n if (section === \"fdAT\") {\n this.pos += 4;\n chunkSize -= 4;\n }\n data = (frame != null ? frame.data : void 0) || this.imgData;\n for (\n i = _i = 0;\n 0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n i = 0 <= chunkSize ? ++_i : --_i\n ) {\n data.push(this.data[this.pos++]);\n }\n break;\n case \"tRNS\":\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n palLen = this.palette.length / 3;\n this.transparency.indexed = this.read(chunkSize);\n if (this.transparency.indexed.length > palLen)\n throw new Error(\"More transparent colors than palette size\");\n /*\n * According to the PNG spec trns should be increased to the same size as palette if shorter\n */\n //palShort = 255 - this.transparency.indexed.length;\n palShort = palLen - this.transparency.indexed.length;\n if (palShort > 0) {\n for (\n i = _j = 0;\n 0 <= palShort ? _j < palShort : _j > palShort;\n i = 0 <= palShort ? ++_j : --_j\n ) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n this.transparency.rgb = this.read(chunkSize);\n }\n break;\n case \"tEXt\":\n text = this.read(chunkSize);\n index = text.indexOf(0);\n key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n case \"IEND\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.colors = function() {\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n return 1;\n case 2:\n case 6:\n return 3;\n }\n }.call(this);\n this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n this.colorSpace = function() {\n switch (this.colors) {\n case 1:\n return \"DeviceGray\";\n case 3:\n return \"DeviceRGB\";\n }\n }.call(this);\n this.imgData = new Uint8Array(this.imgData);\n return;\n default:\n this.pos += chunkSize;\n }\n this.pos += 4;\n if (this.pos > this.data.length) {\n throw new Error(\"Incomplete or corrupt PNG file\");\n }\n }\n }\n\n PNG.prototype.read = function(bytes) {\n var i, _i, _results;\n _results = [];\n for (\n i = _i = 0;\n 0 <= bytes ? _i < bytes : _i > bytes;\n i = 0 <= bytes ? ++_i : --_i\n ) {\n _results.push(this.data[this.pos++]);\n }\n return _results;\n };\n\n PNG.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.data[this.pos++] << 24;\n b2 = this.data[this.pos++] << 16;\n b3 = this.data[this.pos++] << 8;\n b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n PNG.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.data[this.pos++] << 8;\n b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n PNG.prototype.decodePixels = function(data) {\n var pixelBytes = this.pixelBitlength / 8;\n var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n var pos = 0;\n var _this = this;\n\n if (data == null) {\n data = this.imgData;\n }\n if (data.length === 0) {\n return new Uint8Array(0);\n }\n\n data = unzlibSync(data);\n function pass(x0, y0, dx, dy) {\n var abyte,\n c,\n col,\n i,\n left,\n length,\n p,\n pa,\n paeth,\n pb,\n pc,\n pixels,\n row,\n scanlineLength,\n upper,\n upperLeft,\n _i,\n _j,\n _k,\n _l,\n _m;\n var w = Math.ceil((_this.width - x0) / dx),\n h = Math.ceil((_this.height - y0) / dy);\n var isFull = _this.width == w && _this.height == h;\n scanlineLength = pixelBytes * w;\n pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n length = data.length;\n row = 0;\n c = 0;\n while (row < h && pos < length) {\n switch (data[pos++]) {\n case 0:\n for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n pixels[c++] = data[pos++];\n }\n break;\n case 1:\n for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n abyte = data[pos++];\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n pixels[c++] = (abyte + left) % 256;\n }\n break;\n case 2:\n for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (upper + abyte) % 256;\n }\n break;\n case 3:\n for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n case 4:\n for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n pixels[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n p = left + upper - upperLeft;\n pa = Math.abs(p - left);\n pb = Math.abs(p - upper);\n pc = Math.abs(p - upperLeft);\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n pixels[c++] = (abyte + paeth) % 256;\n }\n break;\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n if (!isFull) {\n var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n var partPos = row * scanlineLength;\n for (i = 0; i < w; i += 1) {\n for (var j = 0; j < pixelBytes; j += 1)\n fullPixels[fullPos++] = pixels[partPos++];\n fullPos += (dx - 1) * pixelBytes;\n }\n }\n row++;\n }\n }\n if (_this.interlaceMethod == 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n /* NOTE these seem to follow the pattern:\n * pass(x, 0, 2*x, 2*x);\n * pass(0, x, x, 2*x);\n * with x being 4, 2, 1.\n */\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1);\n }\n return fullPixels;\n };\n\n PNG.prototype.decodePalette = function() {\n var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n palette = this.palette;\n transparency = this.transparency.indexed || [];\n ret = new Uint8Array((transparency.length || 0) + palette.length);\n pos = 0;\n length = palette.length;\n c = 0;\n for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n }\n return ret;\n };\n\n PNG.prototype.copyToImageData = function(imageData, pixels) {\n var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n colors = this.colors;\n palette = null;\n alpha = this.hasAlphaChannel;\n if (this.palette.length) {\n palette =\n (_ref = this._decodedPalette) != null\n ? _ref\n : (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n data = imageData.data || imageData;\n length = data.length;\n input = palette || pixels;\n i = j = 0;\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n PNG.prototype.decode = function() {\n var ret;\n ret = new Uint8Array(this.width * this.height * 4);\n this.copyToImageData(ret, this.decodePixels());\n return ret;\n };\n\n var hasBrowserCanvas = function() {\n if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n try {\n scratchCanvas = globalObject.document.createElement(\"canvas\");\n scratchCtx = scratchCanvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n };\n\n hasBrowserCanvas();\n\n makeImage = function(imageData) {\n if (hasBrowserCanvas() === true) {\n var img;\n scratchCtx.width = imageData.width;\n scratchCtx.height = imageData.height;\n scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n scratchCtx.putImageData(imageData, 0, 0);\n img = new Image();\n img.src = scratchCanvas.toDataURL();\n return img;\n }\n throw new Error(\"This method requires a Browser with Canvas-capability.\");\n };\n\n PNG.prototype.decodeFrames = function(ctx) {\n var frame, i, imageData, pixels, _i, _len, _ref, _results;\n if (!this.animation) {\n return;\n }\n _ref = this.animation.frames;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n frame = _ref[i];\n imageData = ctx.createImageData(frame.width, frame.height);\n pixels = this.decodePixels(new Uint8Array(frame.data));\n this.copyToImageData(imageData, pixels);\n frame.imageData = imageData;\n _results.push((frame.image = makeImage(imageData)));\n }\n return _results;\n };\n\n PNG.prototype.renderFrame = function(ctx, number) {\n var frame, frames, prev;\n frames = this.animation.frames;\n frame = frames[number];\n prev = frames[number - 1];\n if (number === 0) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n ) {\n ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n } else if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n ) {\n ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n }\n if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n }\n return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n };\n\n PNG.prototype.animate = function(ctx) {\n var doFrame,\n frameNumber,\n frames,\n numFrames,\n numPlays,\n _ref,\n _this = this;\n frameNumber = 0;\n (_ref = this.animation),\n (numFrames = _ref.numFrames),\n (frames = _ref.frames),\n (numPlays = _ref.numPlays);\n return (doFrame = function() {\n var f, frame;\n f = frameNumber++ % numFrames;\n frame = frames[f];\n _this.renderFrame(ctx, f);\n if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n }\n })();\n };\n\n PNG.prototype.stopAnimation = function() {\n var _ref;\n return clearTimeout(\n (_ref = this.animation) != null ? _ref._timeout : void 0\n );\n };\n\n PNG.prototype.render = function(canvas) {\n var ctx, data;\n if (canvas._png) {\n canvas._png.stopAnimation();\n }\n canvas._png = this;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx = canvas.getContext(\"2d\");\n if (this.animation) {\n this.decodeFrames(ctx);\n return this.animate(ctx);\n } else {\n data = ctx.createImageData(this.width, this.height);\n this.copyToImageData(data, this.decodePixels());\n return ctx.putImageData(data, 0, 0);\n }\n };\n\n return PNG;\n})();\n\nexport { PNG };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /*\n * @see http://www.w3.org/TR/PNG-Chunks.html\n *\n Color Allowed Interpretation\n Type Bit Depths\n\n 0 1,2,4,8,16 Each pixel is a grayscale sample.\n\n 2 8,16 Each pixel is an R,G,B triple.\n\n 3 1,2,4,8 Each pixel is a palette index;\n a PLTE chunk must appear.\n\n 4 8,16 Each pixel is a grayscale sample,\n followed by an alpha sample.\n\n 6 8,16 Each pixel is an R,G,B triple,\n followed by an alpha sample.\n */\n\n /*\n * PNG filter method types\n *\n * @see http://www.w3.org/TR/PNG-Filters.html\n * @see http://www.libpng.org/pub/png/book/chapter09.html\n *\n * This is what the value 'Predictor' in decode params relates to\n *\n * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n *\n 0 None\n 1 Sub\n 2 Up\n 3 Average\n 4 Paeth\n */\n\n var canCompress = function(value) {\n return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n };\n\n var hasCompressionJS = function() {\n return typeof zlibSync === \"function\";\n };\n var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n var level = 4;\n var filter_method = filterUp;\n\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n level = 1;\n filter_method = filterSub;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n level = 6;\n filter_method = filterAverage;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n level = 9;\n filter_method = filterPaeth;\n break;\n }\n\n bytes = applyPngFilterMethod(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n );\n var dat = zlibSync(bytes, { level: level });\n return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n };\n\n var applyPngFilterMethod = function(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n ) {\n var lines = bytes.length / lineLength,\n result = new Uint8Array(bytes.length + lines),\n filter_methods = getFilterMethods(),\n line,\n prevLine,\n offset;\n\n for (var i = 0; i < lines; i += 1) {\n offset = i * lineLength;\n line = bytes.subarray(offset, offset + lineLength);\n\n if (filter_method) {\n result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n } else {\n var len = filter_methods.length,\n results = [];\n\n for (var j; j < len; j += 1) {\n results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n }\n\n var ind = getIndexOfSmallestSum(results.concat());\n\n result.set(results[ind], offset + i);\n }\n\n prevLine = line;\n }\n\n return result;\n };\n\n var filterNone = function(line) {\n /*var result = new Uint8Array(line.length + 1);\n result[0] = 0;\n result.set(line, 1);*/\n\n var result = Array.apply([], line);\n result.unshift(0);\n\n return result;\n };\n\n var filterSub = function(line, colorsPerPixel) {\n var result = [],\n len = line.length,\n left;\n\n result[0] = 1;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterUp = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n up;\n\n result[0] = 2;\n\n for (var i = 0; i < len; i += 1) {\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterAverage = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up;\n\n result[0] = 3;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n }\n\n return result;\n };\n\n var filterPaeth = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up,\n upLeft,\n paeth;\n\n result[0] = 4;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n paeth = paethPredictor(left, up, upLeft);\n result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var paethPredictor = function(left, up, upLeft) {\n if (left === up && up === upLeft) {\n return left;\n }\n var pLeft = Math.abs(up - upLeft),\n pUp = Math.abs(left - upLeft),\n pUpLeft = Math.abs(left + up - upLeft - upLeft);\n return pLeft <= pUp && pLeft <= pUpLeft\n ? left\n : pUp <= pUpLeft\n ? up\n : upLeft;\n };\n\n var getFilterMethods = function() {\n return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n };\n\n var getIndexOfSmallestSum = function(arrays) {\n var sum = arrays.map(function(value) {\n return value.reduce(function(pv, cv) {\n return pv + Math.abs(cv);\n }, 0);\n });\n return sum.indexOf(Math.min.apply(null, sum));\n };\n\n var getPredictorFromCompression = function(compression) {\n var predictor;\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n predictor = 11;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n predictor = 13;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n predictor = 14;\n break;\n\n default:\n predictor = 12;\n break;\n }\n return predictor;\n };\n\n /**\n * @name processPNG\n * @function\n * @ignore\n */\n jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n \"use strict\";\n\n var colorSpace,\n filter = this.decode.FLATE_DECODE,\n bitsPerComponent,\n image,\n decodeParameters = \"\",\n trns,\n colors,\n pal,\n smask,\n pixels,\n len,\n alphaData,\n imgData,\n hasColors,\n pixel,\n i,\n n;\n\n if (this.__addimage__.isArrayBuffer(imageData))\n imageData = new Uint8Array(imageData);\n\n if (this.__addimage__.isArrayBufferView(imageData)) {\n image = new PNG(imageData);\n imageData = image.imgData;\n bitsPerComponent = image.bits;\n colorSpace = image.colorSpace;\n colors = image.colors;\n\n /*\n * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n *\n * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n *\n * Extract alpha to create two separate images, using the alpha as a sMask\n */\n if ([4, 6].indexOf(image.colorType) !== -1) {\n /*\n * processes 8 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 8) {\n pixels =\n image.pixelBitlength == 32\n ? new Uint32Array(image.decodePixels().buffer)\n : image.pixelBitlength == 16\n ? new Uint16Array(image.decodePixels().buffer)\n : new Uint8Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(len * image.colors);\n alphaData = new Uint8Array(len);\n var pDiff = image.pixelBitlength - image.bits;\n i = 0;\n n = 0;\n var pbl;\n\n for (; i < len; i++) {\n pixel = pixels[i];\n pbl = 0;\n\n while (pbl < pDiff) {\n imgData[n++] = (pixel >>> pbl) & 0xff;\n pbl = pbl + image.bits;\n }\n\n alphaData[i] = (pixel >>> pbl) & 0xff;\n }\n }\n\n /*\n * processes 16 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 16) {\n pixels = new Uint32Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(\n len * (32 / image.pixelBitlength) * image.colors\n );\n alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n hasColors = image.colors > 1;\n i = 0;\n n = 0;\n var a = 0;\n\n while (i < len) {\n pixel = pixels[i++];\n\n imgData[n++] = (pixel >>> 0) & 0xff;\n\n if (hasColors) {\n imgData[n++] = (pixel >>> 16) & 0xff;\n\n pixel = pixels[i++];\n imgData[n++] = (pixel >>> 0) & 0xff;\n }\n\n alphaData[a++] = (pixel >>> 16) & 0xff;\n }\n bitsPerComponent = 8;\n }\n\n if (canCompress(compression)) {\n imageData = compressBytes(\n imgData,\n image.width * image.colors,\n image.colors,\n compression\n );\n smask = compressBytes(alphaData, image.width, 1, compression);\n } else {\n imageData = imgData;\n smask = alphaData;\n filter = undefined;\n }\n }\n\n /*\n * Indexed png. Each pixel is a palette index.\n */\n if (image.colorType === 3) {\n colorSpace = this.color_spaces.INDEXED;\n pal = image.palette;\n\n if (image.transparency.indexed) {\n var trans = image.transparency.indexed;\n var total = 0;\n i = 0;\n len = trans.length;\n\n for (; i < len; ++i) {\n total += trans[i];\n }\n\n total = total / 255;\n\n /*\n * a single color is specified as 100% transparent (0),\n * so we set trns to use a /Mask with that index\n */\n if (total === len - 1 && trans.indexOf(0) !== -1) {\n trns = [trans.indexOf(0)];\n\n /*\n * there's more than one colour within the palette that specifies\n * a transparency value less than 255, so we unroll the pixels to create an image sMask\n */\n } else if (total !== len) {\n pixels = image.decodePixels();\n alphaData = new Uint8Array(pixels.length);\n i = 0;\n len = pixels.length;\n\n for (; i < len; i++) {\n alphaData[i] = trans[pixels[i]];\n }\n\n smask = compressBytes(alphaData, image.width, 1);\n }\n }\n }\n\n var predictor = getPredictorFromCompression(compression);\n\n if (filter === this.decode.FLATE_DECODE) {\n decodeParameters = \"/Predictor \" + predictor + \" \";\n }\n decodeParameters +=\n \"/Colors \" +\n colors +\n \" /BitsPerComponent \" +\n bitsPerComponent +\n \" /Columns \" +\n image.width;\n\n if (\n this.__addimage__.isArrayBuffer(imageData) ||\n this.__addimage__.isArrayBufferView(imageData)\n ) {\n imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n }\n\n if (\n (smask && this.__addimage__.isArrayBuffer(smask)) ||\n this.__addimage__.isArrayBufferView(smask)\n ) {\n smask = this.__addimage__.arrayBufferToBinaryString(smask);\n }\n\n return {\n alias: alias,\n data: imageData,\n index: index,\n filter: filter,\n decodeParameters: decodeParameters,\n transparency: trns,\n palette: pal,\n sMask: smask,\n predictor: predictor,\n width: image.width,\n height: image.height,\n bitsPerComponent: bitsPerComponent,\n colorSpace: colorSpace\n };\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee , 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n var p = 0;\n\n var gopts = gopts === undefined ? {} : gopts;\n var loop_count = gopts.loop === undefined ? null : gopts.loop;\n var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n function check_palette_and_num_colors(palette) {\n var num_colors = palette.length;\n if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n throw new Error(\n \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n );\n }\n return num_colors;\n }\n\n // - Header.\n buf[p++] = 0x47;\n buf[p++] = 0x49;\n buf[p++] = 0x46; // GIF\n buf[p++] = 0x38;\n buf[p++] = 0x39;\n buf[p++] = 0x61; // 89a\n\n // Handling of Global Color Table (palette) and background index.\n var gp_num_colors_pow2 = 0;\n var background = 0;\n if (global_palette !== null) {\n var gp_num_colors = check_palette_and_num_colors(global_palette);\n while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n gp_num_colors = 1 << gp_num_colors_pow2;\n --gp_num_colors_pow2;\n if (gopts.background !== undefined) {\n background = gopts.background;\n if (background >= gp_num_colors)\n throw new Error(\"Background index out of range.\");\n // The GIF spec states that a background index of 0 should be ignored, so\n // this is probably a mistake and you really want to set it to another\n // slot in the palette. But actually in the end most browsers, etc end\n // up ignoring this almost completely (including for dispose background).\n if (background === 0)\n throw new Error(\"Background index explicitly passed as 0.\");\n }\n }\n\n // - Logical Screen Descriptor.\n // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n buf[p++] = width & 0xff;\n buf[p++] = (width >> 8) & 0xff;\n buf[p++] = height & 0xff;\n buf[p++] = (height >> 8) & 0xff;\n // NOTE: Indicates 0-bpp original color resolution (unused?).\n buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n buf[p++] = background; // Background Color Index.\n buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n // - Global Color Table\n if (global_palette !== null) {\n for (var i = 0, il = global_palette.length; i < il; ++i) {\n var rgb = global_palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n if (loop_count !== null) {\n // Netscape block for looping.\n if (loop_count < 0 || loop_count > 65535)\n throw new Error(\"Loop count invalid.\");\n // Extension code, label, and length.\n buf[p++] = 0x21;\n buf[p++] = 0xff;\n buf[p++] = 0x0b;\n // NETSCAPE2.0\n buf[p++] = 0x4e;\n buf[p++] = 0x45;\n buf[p++] = 0x54;\n buf[p++] = 0x53;\n buf[p++] = 0x43;\n buf[p++] = 0x41;\n buf[p++] = 0x50;\n buf[p++] = 0x45;\n buf[p++] = 0x32;\n buf[p++] = 0x2e;\n buf[p++] = 0x30;\n // Sub-block\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loop_count & 0xff;\n buf[p++] = (loop_count >> 8) & 0xff;\n buf[p++] = 0x00; // Terminator.\n }\n\n var ended = false;\n\n this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n if (ended === true) {\n --p;\n ended = false;\n } // Un-end.\n\n opts = opts === undefined ? {} : opts;\n\n // TODO(deanm): Bounds check x, y. Do they need to be within the virtual\n // canvas width/height, I imagine?\n if (x < 0 || y < 0 || x > 65535 || y > 65535)\n throw new Error(\"x/y invalid.\");\n\n if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n if (indexed_pixels.length < w * h)\n throw new Error(\"Not enough pixels for the frame size.\");\n\n var using_local_palette = true;\n var palette = opts.palette;\n if (palette === undefined || palette === null) {\n using_local_palette = false;\n palette = global_palette;\n }\n\n if (palette === undefined || palette === null)\n throw new Error(\"Must supply either a local or global palette.\");\n\n var num_colors = check_palette_and_num_colors(palette);\n\n // Compute the min_code_size (power of 2), destroying num_colors.\n var min_code_size = 0;\n while ((num_colors >>= 1)) ++min_code_size;\n num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n var delay = opts.delay === undefined ? 0 : opts.delay;\n\n // From the spec:\n // 0 - No disposal specified. The decoder is\n // not required to take any action.\n // 1 - Do not dispose. The graphic is to be left\n // in place.\n // 2 - Restore to background color. The area used by the\n // graphic must be restored to the background color.\n // 3 - Restore to previous. The decoder is required to\n // restore the area overwritten by the graphic with\n // what was there prior to rendering the graphic.\n // 4-7 - To be defined.\n // NOTE(deanm): Dispose background doesn't really work, apparently most\n // browsers ignore the background palette index and clear to transparency.\n var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n if (disposal < 0 || disposal > 3)\n // 4-7 is reserved.\n throw new Error(\"Disposal out of range.\");\n\n var use_transparency = false;\n var transparent_index = 0;\n if (opts.transparent !== undefined && opts.transparent !== null) {\n use_transparency = true;\n transparent_index = opts.transparent;\n if (transparent_index < 0 || transparent_index >= num_colors)\n throw new Error(\"Transparent color index.\");\n }\n\n if (disposal !== 0 || use_transparency || delay !== 0) {\n // - Graphics Control Extension\n buf[p++] = 0x21;\n buf[p++] = 0xf9; // Extension / Label.\n buf[p++] = 4; // Byte size.\n\n buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n buf[p++] = delay & 0xff;\n buf[p++] = (delay >> 8) & 0xff;\n buf[p++] = transparent_index; // Transparent color index.\n buf[p++] = 0; // Block Terminator.\n }\n\n // - Image Descriptor\n buf[p++] = 0x2c; // Image Seperator.\n buf[p++] = x & 0xff;\n buf[p++] = (x >> 8) & 0xff; // Left.\n buf[p++] = y & 0xff;\n buf[p++] = (y >> 8) & 0xff; // Top.\n buf[p++] = w & 0xff;\n buf[p++] = (w >> 8) & 0xff;\n buf[p++] = h & 0xff;\n buf[p++] = (h >> 8) & 0xff;\n // NOTE: No sort flag (unused?).\n // TODO(deanm): Support interlace.\n buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n // - Local Color Table\n if (using_local_palette === true) {\n for (var i = 0, il = palette.length; i < il; ++i) {\n var rgb = palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n p = GifWriterOutputLZWCodeStream(\n buf,\n p,\n min_code_size < 2 ? 2 : min_code_size,\n indexed_pixels\n );\n\n return p;\n };\n\n this.end = function() {\n if (ended === false) {\n buf[p++] = 0x3b; // Trailer.\n ended = true;\n }\n return p;\n };\n\n this.getOutputBuffer = function() {\n return buf;\n };\n this.setOutputBuffer = function(v) {\n buf = v;\n };\n this.getOutputBufferPosition = function() {\n return p;\n };\n this.setOutputBufferPosition = function(v) {\n p = v;\n };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n buf[p++] = min_code_size;\n var cur_subblock = p++; // Pointing at the length field.\n\n var clear_code = 1 << min_code_size;\n var code_mask = clear_code - 1;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n var cur_shift = 0;\n // We have at most 12-bit codes, so we should have to hold a max of 19\n // bits here (and then we would write out).\n var cur = 0;\n\n function emit_bytes_to_buffer(bit_block_size) {\n while (cur_shift >= bit_block_size) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n }\n\n function emit_code(c) {\n cur |= c << cur_shift;\n cur_shift += cur_code_size;\n emit_bytes_to_buffer(8);\n }\n\n // I am not an expert on the topic, and I don't want to write a thesis.\n // However, it is good to outline here the basic algorithm and the few data\n // structures and optimizations here that make this implementation fast.\n // The basic idea behind LZW is to build a table of previously seen runs\n // addressed by a short id (herein called output code). All data is\n // referenced by a code, which represents one or more values from the\n // original input stream. All input bytes can be referenced as the same\n // value as an output code. So if you didn't want any compression, you\n // could more or less just output the original bytes as codes (there are\n // some details to this, but it is the idea). In order to achieve\n // compression, values greater then the input range (codes can be up to\n // 12-bit while input only 8-bit) represent a sequence of previously seen\n // inputs. The decompressor is able to build the same mapping while\n // decoding, so there is always a shared common knowledge between the\n // encoding and decoder, which is also important for \"timing\" aspects like\n // how to handle variable bit width code encoding.\n //\n // One obvious but very important consequence of the table system is there\n // is always a unique id (at most 12-bits) to map the runs. 'A' might be\n // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship\n // can be used for an effecient lookup strategy for the code mapping. We\n // need to know if a run has been seen before, and be able to map that run\n // to the output code. Since we start with known unique ids (input bytes),\n // and then from those build more unique ids (table entries), we can\n // continue this chain (almost like a linked list) to always have small\n // integer values that represent the current byte chains in the encoder.\n // This means instead of tracking the input bytes (AAAABCD) to know our\n // current state, we can track the table entry for AAAABC (it is guaranteed\n // to exist by the nature of the algorithm) and the next character D.\n // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n // unique. This allows us to create a simple lookup key for mapping input\n // sequences to codes (table indices) without having to store or search\n // any of the code sequences. So if 'AAAA' has a table entry of 12, the\n // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n // key. This leads to a integer value at most 20-bits, which can always\n // fit in an SMI value and be used as a fast sparse array / object key.\n\n // Output code for the current contents of the index buffer.\n var ib_code = index_stream[0] & code_mask; // Load first input index.\n var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n emit_code(clear_code); // Spec says first code should be a clear code.\n\n // First index already loaded, process the rest of the stream.\n for (var i = 1, il = index_stream.length; i < il; ++i) {\n var k = index_stream[i] & code_mask;\n var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n var cur_code = code_table[cur_key]; // buffer + k.\n\n // Check if we have to create a new code table entry.\n if (cur_code === undefined) {\n // We don't have buffer + k.\n // Emit index buffer (without k).\n // This is an inline version of emit_code, because this is the core\n // writing routine of the compressor (and V8 cannot inline emit_code\n // because it is a closure here in a different context). Additionally\n // we can call emit_byte_to_buffer less often, because we can have\n // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n // be 12-bits, so can safely have 18-bits there without overflow.\n // emit_code(ib_code);\n cur |= ib_code << cur_shift;\n cur_shift += cur_code_size;\n while (cur_shift >= 8) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n\n if (next_code === 4096) {\n // Table full, need a clear.\n emit_code(clear_code);\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_table = {};\n } else {\n // Table not full, insert a new entry.\n // Increase our variable bit code sizes if necessary. This is a bit\n // tricky as it is based on \"timing\" between the encoding and\n // decoder. From the encoders perspective this should happen after\n // we've already emitted the index buffer and are about to create the\n // first table entry that would overflow our current code bit size.\n if (next_code >= 1 << cur_code_size) ++cur_code_size;\n code_table[cur_key] = next_code++; // Insert into code table.\n }\n\n ib_code = k; // Index buffer to single input k.\n } else {\n ib_code = cur_code; // Index buffer to sequence in code table.\n }\n }\n\n emit_code(ib_code); // There will still be something in the index buffer.\n emit_code(eoi_code); // End Of Information.\n\n // Flush / finalize the sub-blocks stream to the buffer.\n emit_bytes_to_buffer(1);\n\n // Finish the sub-blocks, writing out any unfinished lengths and\n // terminating with a sub-block of length 0. If we have already started\n // but not yet used a sub-block it can just become the terminator.\n if (cur_subblock + 1 === p) {\n // Started but unused.\n buf[cur_subblock] = 0;\n } else {\n // Started and used, write length and additional terminator block.\n buf[cur_subblock] = p - cur_subblock - 1;\n buf[p++] = 0;\n }\n return p;\n}\n\nfunction GifReader(buf) {\n var p = 0;\n\n // - Header (GIF87a or GIF89a).\n if (\n buf[p++] !== 0x47 ||\n buf[p++] !== 0x49 ||\n buf[p++] !== 0x46 ||\n buf[p++] !== 0x38 ||\n ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n buf[p++] !== 0x61\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n // - Logical Screen Descriptor.\n var width = buf[p++] | (buf[p++] << 8);\n var height = buf[p++] | (buf[p++] << 8);\n var pf0 = buf[p++]; // .\n var global_palette_flag = pf0 >> 7;\n var num_global_colors_pow2 = pf0 & 0x7;\n var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n var background = buf[p++];\n buf[p++]; // Pixel aspect ratio (unused?).\n\n var global_palette_offset = null;\n var global_palette_size = null;\n\n if (global_palette_flag) {\n global_palette_offset = p;\n global_palette_size = num_global_colors;\n p += num_global_colors * 3; // Seek past palette.\n }\n\n var no_eof = true;\n\n var frames = [];\n\n var delay = 0;\n var transparent_index = null;\n var disposal = 0; // 0 - No disposal specified.\n var loop_count = null;\n\n this.width = width;\n this.height = height;\n\n while (no_eof && p < buf.length) {\n switch (buf[p++]) {\n case 0x21: // Graphics Control Extension Block\n switch (buf[p++]) {\n case 0xff: // Application specific block\n // Try if it's a Netscape block (with animation loop counter).\n if (\n buf[p] !== 0x0b || // 21 FF already read, check block size.\n // NETSCAPE2.0\n (buf[p + 1] == 0x4e &&\n buf[p + 2] == 0x45 &&\n buf[p + 3] == 0x54 &&\n buf[p + 4] == 0x53 &&\n buf[p + 5] == 0x43 &&\n buf[p + 6] == 0x41 &&\n buf[p + 7] == 0x50 &&\n buf[p + 8] == 0x45 &&\n buf[p + 9] == 0x32 &&\n buf[p + 10] == 0x2e &&\n buf[p + 11] == 0x30 &&\n // Sub-block\n buf[p + 12] == 0x03 &&\n buf[p + 13] == 0x01 &&\n buf[p + 16] == 0)\n ) {\n p += 14;\n loop_count = buf[p++] | (buf[p++] << 8);\n p++; // Skip terminator.\n } else {\n // We don't know what it is, just try to get past it.\n p += 12;\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n }\n break;\n\n case 0xf9: // Graphics Control Extension\n if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n var pf1 = buf[p++];\n delay = buf[p++] | (buf[p++] << 8);\n transparent_index = buf[p++];\n if ((pf1 & 1) === 0) transparent_index = null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // Skip terminator.\n break;\n\n case 0xfe: // Comment Extension.\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n // console.log(buf.slice(p, p+block_size).toString('ascii'));\n p += block_size;\n }\n break;\n\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n );\n }\n break;\n\n case 0x2c: // Image Descriptor.\n var x = buf[p++] | (buf[p++] << 8);\n var y = buf[p++] | (buf[p++] << 8);\n var w = buf[p++] | (buf[p++] << 8);\n var h = buf[p++] | (buf[p++] << 8);\n var pf2 = buf[p++];\n var local_palette_flag = pf2 >> 7;\n var interlace_flag = (pf2 >> 6) & 1;\n var num_local_colors_pow2 = pf2 & 0x7;\n var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n var palette_offset = global_palette_offset;\n var palette_size = global_palette_size;\n var has_local_palette = false;\n if (local_palette_flag) {\n var has_local_palette = true;\n palette_offset = p; // Override with local palette.\n palette_size = num_local_colors;\n p += num_local_colors * 3; // Seek past palette.\n }\n\n var data_offset = p;\n\n p++; // codesize\n while (true) {\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n\n frames.push({\n x: x,\n y: y,\n width: w,\n height: h,\n has_local_palette: has_local_palette,\n palette_offset: palette_offset,\n palette_size: palette_size,\n data_offset: data_offset,\n data_length: p - data_offset,\n transparent_index: transparent_index,\n interlaced: !!interlace_flag,\n delay: delay,\n disposal: disposal\n });\n break;\n\n case 0x3b: // Trailer Marker (end of file).\n no_eof = false;\n break;\n\n default:\n throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n break;\n }\n }\n\n this.numFrames = function() {\n return frames.length;\n };\n\n this.loopCount = function() {\n return loop_count;\n };\n\n this.frameInfo = function(frame_num) {\n if (frame_num < 0 || frame_num >= frames.length)\n throw new Error(\"Frame index out of range.\");\n return frames[frame_num];\n };\n\n this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = b;\n pixels[op++] = g;\n pixels[op++] = r;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n\n // I will go to copy and paste hell one day...\n this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = r;\n pixels[op++] = g;\n pixels[op++] = b;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n var min_code_size = code_stream[p++];\n\n var clear_code = 1 << min_code_size;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n // NOTE: This shares the same name as the encoder, but has a different\n // meaning here. Here this masks each code coming from the code stream.\n var code_mask = (1 << cur_code_size) - 1;\n var cur_shift = 0;\n var cur = 0;\n\n var op = 0; // Output pointer.\n\n var subblock_size = code_stream[p++];\n\n // TODO(deanm): Would using a TypedArray be any faster? At least it would\n // solve the fast mode / backing store uncertainty.\n // var code_table = Array(4096);\n var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n var prev_code = null; // Track code-1.\n\n while (true) {\n // Read up to two bytes, making sure we always 12-bits for max sized code.\n while (cur_shift < 16) {\n if (subblock_size === 0) break; // No more data to be read.\n\n cur |= code_stream[p++] << cur_shift;\n cur_shift += 8;\n\n if (subblock_size === 1) {\n // Never let it get to 0 to hold logic above.\n subblock_size = code_stream[p++]; // Next subblock.\n } else {\n --subblock_size;\n }\n }\n\n // TODO(deanm): We should never really get here, we should have received\n // and EOI.\n if (cur_shift < cur_code_size) break;\n\n var code = cur & code_mask;\n cur >>= cur_code_size;\n cur_shift -= cur_code_size;\n\n // TODO(deanm): Maybe should check that the first code was a clear code,\n // at least this is what you're supposed to do. But actually our encoder\n // now doesn't emit a clear code first anyway.\n if (code === clear_code) {\n // We don't actually have to clear the table. This could be a good idea\n // for greater error checking, but we don't really do any anyway. We\n // will just track it with next_code and overwrite old entries.\n\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_mask = (1 << cur_code_size) - 1;\n\n // Don't update prev_code ?\n prev_code = null;\n continue;\n } else if (code === eoi_code) {\n break;\n }\n\n // We have a similar situation as the decoder, where we want to store\n // variable length entries (code table entries), but we want to do in a\n // faster manner than an array of arrays. The code below stores sort of a\n // linked list within the code table, and then \"chases\" through it to\n // construct the dictionary entries. When a new entry is created, just the\n // last byte is stored, and the rest (prefix) of the entry is only\n // referenced by its table entry. Then the code chases through the\n // prefixes until it reaches a single byte code. We have to chase twice,\n // first to compute the length, and then to actually copy the data to the\n // output (backwards, since we know the length). The alternative would be\n // storing something in an intermediate stack, but that doesn't make any\n // more sense. I implemented an approach where it also stored the length\n // in the code table, although it's a bit tricky because you run out of\n // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n // entries are generally not the long). Even when I created benchmarks for\n // very long table entries the complexity did not seem worth it.\n // The code table stores the prefix entry in 12 bits and then the suffix\n // byte in 8 bits, so each entry is 20 bits.\n\n var chase_code = code < next_code ? code : prev_code;\n\n // Chase what we will output, either {CODE} or {CODE-1}.\n var chase_length = 0;\n var chase = chase_code;\n while (chase > clear_code) {\n chase = code_table[chase] >> 8;\n ++chase_length;\n }\n\n var k = chase;\n\n var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n if (op_end > output_length) {\n console.log(\"Warning, gif stream longer than expected.\");\n return;\n }\n\n // Already have the first byte from the chase, might as well write it fast.\n output[op++] = k;\n\n op += chase_length;\n var b = op; // Track pointer, writing backwards.\n\n if (chase_code !== code)\n // The case of emitting {CODE-1} + k.\n output[op++] = k;\n\n chase = chase_code;\n while (chase_length--) {\n chase = code_table[chase];\n output[--b] = chase & 0xff; // Write backwards.\n chase >>= 8; // Pull down to the prefix code.\n }\n\n if (prev_code !== null && next_code < 4096) {\n code_table[next_code++] = (prev_code << 8) | k;\n // TODO(deanm): Figure out this clearing vs code growth logic better. I\n // have an feeling that it should just happen somewhere else, for now it\n // is awkward between when we grow past the max and then hit a clear code.\n // For now just check if we hit the max 12-bits (then a clear code should\n // follow, also of course encoded in 12-bits).\n if (next_code >= code_mask + 1 && cur_code_size < 12) {\n ++cur_code_size;\n code_mask = (code_mask << 1) | 1;\n }\n }\n\n prev_code = code;\n }\n\n if (op !== output_length) {\n console.log(\"Warning, gif stream shorter than expected.\");\n }\n\n return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n var ffloor = Math.floor;\n var YTable = new Array(64);\n var UVTable = new Array(64);\n var fdtbl_Y = new Array(64);\n var fdtbl_UV = new Array(64);\n var YDC_HT;\n var UVDC_HT;\n var YAC_HT;\n var UVAC_HT;\n\n var bitcode = new Array(65535);\n var category = new Array(65535);\n var outputfDCTQuant = new Array(64);\n var DU = new Array(64);\n var byteout = [];\n var bytenew = 0;\n var bytepos = 7;\n\n var YDU = new Array(64);\n var UDU = new Array(64);\n var VDU = new Array(64);\n var clt = new Array(256);\n var RGB_YUV_TABLE = new Array(2048);\n var currentQuality;\n\n var ZigZag = [\n 0,\n 1,\n 5,\n 6,\n 14,\n 15,\n 27,\n 28,\n 2,\n 4,\n 7,\n 13,\n 16,\n 26,\n 29,\n 42,\n 3,\n 8,\n 12,\n 17,\n 25,\n 30,\n 41,\n 43,\n 9,\n 11,\n 18,\n 24,\n 31,\n 40,\n 44,\n 53,\n 10,\n 19,\n 23,\n 32,\n 39,\n 45,\n 52,\n 54,\n 20,\n 22,\n 33,\n 38,\n 46,\n 51,\n 55,\n 60,\n 21,\n 34,\n 37,\n 47,\n 50,\n 56,\n 59,\n 61,\n 35,\n 36,\n 48,\n 49,\n 57,\n 58,\n 62,\n 63\n ];\n\n var std_dc_luminance_nrcodes = [\n 0,\n 0,\n 1,\n 5,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_luminance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 3,\n 3,\n 2,\n 4,\n 3,\n 5,\n 5,\n 4,\n 4,\n 0,\n 0,\n 1,\n 0x7d\n ];\n var std_ac_luminance_values = [\n 0x01,\n 0x02,\n 0x03,\n 0x00,\n 0x04,\n 0x11,\n 0x05,\n 0x12,\n 0x21,\n 0x31,\n 0x41,\n 0x06,\n 0x13,\n 0x51,\n 0x61,\n 0x07,\n 0x22,\n 0x71,\n 0x14,\n 0x32,\n 0x81,\n 0x91,\n 0xa1,\n 0x08,\n 0x23,\n 0x42,\n 0xb1,\n 0xc1,\n 0x15,\n 0x52,\n 0xd1,\n 0xf0,\n 0x24,\n 0x33,\n 0x62,\n 0x72,\n 0x82,\n 0x09,\n 0x0a,\n 0x16,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x25,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x34,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe1,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf1,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n var std_dc_chrominance_nrcodes = [\n 0,\n 0,\n 3,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_chrominance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 2,\n 4,\n 4,\n 3,\n 4,\n 7,\n 5,\n 4,\n 4,\n 0,\n 1,\n 2,\n 0x77\n ];\n var std_ac_chrominance_values = [\n 0x00,\n 0x01,\n 0x02,\n 0x03,\n 0x11,\n 0x04,\n 0x05,\n 0x21,\n 0x31,\n 0x06,\n 0x12,\n 0x41,\n 0x51,\n 0x07,\n 0x61,\n 0x71,\n 0x13,\n 0x22,\n 0x32,\n 0x81,\n 0x08,\n 0x14,\n 0x42,\n 0x91,\n 0xa1,\n 0xb1,\n 0xc1,\n 0x09,\n 0x23,\n 0x33,\n 0x52,\n 0xf0,\n 0x15,\n 0x62,\n 0x72,\n 0xd1,\n 0x0a,\n 0x16,\n 0x24,\n 0x34,\n 0xe1,\n 0x25,\n 0xf1,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x82,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n function initQuantTables(sf) {\n var YQT = [\n 16,\n 11,\n 10,\n 16,\n 24,\n 40,\n 51,\n 61,\n 12,\n 12,\n 14,\n 19,\n 26,\n 58,\n 60,\n 55,\n 14,\n 13,\n 16,\n 24,\n 40,\n 57,\n 69,\n 56,\n 14,\n 17,\n 22,\n 29,\n 51,\n 87,\n 80,\n 62,\n 18,\n 22,\n 37,\n 56,\n 68,\n 109,\n 103,\n 77,\n 24,\n 35,\n 55,\n 64,\n 81,\n 104,\n 113,\n 92,\n 49,\n 64,\n 78,\n 87,\n 103,\n 121,\n 120,\n 101,\n 72,\n 92,\n 95,\n 98,\n 112,\n 100,\n 103,\n 99\n ];\n\n for (var i = 0; i < 64; i++) {\n var t = ffloor((YQT[i] * sf + 50) / 100);\n t = Math.min(Math.max(t, 1), 255);\n YTable[ZigZag[i]] = t;\n }\n var UVQT = [\n 17,\n 18,\n 24,\n 47,\n 99,\n 99,\n 99,\n 99,\n 18,\n 21,\n 26,\n 66,\n 99,\n 99,\n 99,\n 99,\n 24,\n 26,\n 56,\n 99,\n 99,\n 99,\n 99,\n 99,\n 47,\n 66,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99\n ];\n for (var j = 0; j < 64; j++) {\n var u = ffloor((UVQT[j] * sf + 50) / 100);\n u = Math.min(Math.max(u, 1), 255);\n UVTable[ZigZag[j]] = u;\n }\n var aasf = [\n 1.0,\n 1.387039845,\n 1.306562965,\n 1.175875602,\n 1.0,\n 0.785694958,\n 0.5411961,\n 0.275899379\n ];\n var k = 0;\n for (var row = 0; row < 8; row++) {\n for (var col = 0; col < 8; col++) {\n fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n k++;\n }\n }\n }\n\n function computeHuffmanTbl(nrcodes, std_table) {\n var codevalue = 0;\n var pos_in_table = 0;\n var HT = new Array();\n for (var k = 1; k <= 16; k++) {\n for (var j = 1; j <= nrcodes[k]; j++) {\n HT[std_table[pos_in_table]] = [];\n HT[std_table[pos_in_table]][0] = codevalue;\n HT[std_table[pos_in_table]][1] = k;\n pos_in_table++;\n codevalue++;\n }\n codevalue *= 2;\n }\n return HT;\n }\n\n function initHuffmanTbl() {\n YDC_HT = computeHuffmanTbl(\n std_dc_luminance_nrcodes,\n std_dc_luminance_values\n );\n UVDC_HT = computeHuffmanTbl(\n std_dc_chrominance_nrcodes,\n std_dc_chrominance_values\n );\n YAC_HT = computeHuffmanTbl(\n std_ac_luminance_nrcodes,\n std_ac_luminance_values\n );\n UVAC_HT = computeHuffmanTbl(\n std_ac_chrominance_nrcodes,\n std_ac_chrominance_values\n );\n }\n\n function initCategoryNumber() {\n var nrlower = 1;\n var nrupper = 2;\n for (var cat = 1; cat <= 15; cat++) {\n //Positive numbers\n for (var nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitcode[32767 + nr] = [];\n bitcode[32767 + nr][1] = cat;\n bitcode[32767 + nr][0] = nr;\n }\n //Negative numbers\n for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitcode[32767 + nrneg] = [];\n bitcode[32767 + nrneg][1] = cat;\n bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n function initRGBYUVTable() {\n for (var i = 0; i < 256; i++) {\n RGB_YUV_TABLE[i] = 19595 * i;\n RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n }\n }\n\n // IO functions\n function writeBits(bs) {\n var value = bs[0];\n var posval = bs[1] - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) {\n bytenew |= 1 << bytepos;\n }\n posval--;\n bytepos--;\n if (bytepos < 0) {\n if (bytenew == 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(bytenew);\n }\n bytepos = 7;\n bytenew = 0;\n }\n }\n }\n\n function writeByte(value) {\n //byteout.push(clt[value]); // write char directly instead of converting later\n byteout.push(value);\n }\n\n function writeWord(value) {\n writeByte((value >> 8) & 0xff);\n writeByte(value & 0xff);\n }\n\n // DCT & quantization core\n function fDCTQuant(data, fdtbl) {\n var d0, d1, d2, d3, d4, d5, d6, d7;\n /* Pass 1: process rows. */\n var dataOff = 0;\n var i;\n var I8 = 8;\n var I64 = 64;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 1];\n d2 = data[dataOff + 2];\n d3 = data[dataOff + 3];\n d4 = data[dataOff + 4];\n d5 = data[dataOff + 5];\n d6 = data[dataOff + 6];\n d7 = data[dataOff + 7];\n\n var tmp0 = d0 + d7;\n var tmp7 = d0 - d7;\n var tmp1 = d1 + d6;\n var tmp6 = d1 - d6;\n var tmp2 = d2 + d5;\n var tmp5 = d2 - d5;\n var tmp3 = d3 + d4;\n var tmp4 = d3 - d4;\n\n /* Even part */\n var tmp10 = tmp0 + tmp3; /* phase 2 */\n var tmp13 = tmp0 - tmp3;\n var tmp11 = tmp1 + tmp2;\n var tmp12 = tmp1 - tmp2;\n\n data[dataOff] = tmp10 + tmp11; /* phase 3 */\n data[dataOff + 4] = tmp10 - tmp11;\n\n var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n data[dataOff + 6] = tmp13 - z1;\n\n /* Odd part */\n tmp10 = tmp4 + tmp5; /* phase 2 */\n tmp11 = tmp5 + tmp6;\n tmp12 = tmp6 + tmp7;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n var z3 = tmp11 * 0.707106781; /* c4 */\n\n var z11 = tmp7 + z3; /* phase 5 */\n var z13 = tmp7 - z3;\n\n data[dataOff + 5] = z13 + z2; /* phase 6 */\n data[dataOff + 3] = z13 - z2;\n data[dataOff + 1] = z11 + z4;\n data[dataOff + 7] = z11 - z4;\n\n dataOff += 8; /* advance pointer to next row */\n }\n\n /* Pass 2: process columns. */\n dataOff = 0;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 8];\n d2 = data[dataOff + 16];\n d3 = data[dataOff + 24];\n d4 = data[dataOff + 32];\n d5 = data[dataOff + 40];\n d6 = data[dataOff + 48];\n d7 = data[dataOff + 56];\n\n var tmp0p2 = d0 + d7;\n var tmp7p2 = d0 - d7;\n var tmp1p2 = d1 + d6;\n var tmp6p2 = d1 - d6;\n var tmp2p2 = d2 + d5;\n var tmp5p2 = d2 - d5;\n var tmp3p2 = d3 + d4;\n var tmp4p2 = d3 - d4;\n\n /* Even part */\n var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n var tmp13p2 = tmp0p2 - tmp3p2;\n var tmp11p2 = tmp1p2 + tmp2p2;\n var tmp12p2 = tmp1p2 - tmp2p2;\n\n data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n data[dataOff + 48] = tmp13p2 - z1p2;\n\n /* Odd part */\n tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n tmp11p2 = tmp5p2 + tmp6p2;\n tmp12p2 = tmp6p2 + tmp7p2;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n var z13p2 = tmp7p2 - z3p2;\n\n data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n data[dataOff + 24] = z13p2 - z2p2;\n data[dataOff + 8] = z11p2 + z4p2;\n data[dataOff + 56] = z11p2 - z4p2;\n\n dataOff++; /* advance pointer to next column */\n }\n\n // Quantize/descale the coefficients\n var fDCTQuant;\n for (i = 0; i < I64; ++i) {\n // Apply the quantization and scaling factor & Round to nearest integer\n fDCTQuant = data[i] * fdtbl[i];\n outputfDCTQuant[i] =\n fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n //outputfDCTQuant[i] = fround(fDCTQuant);\n }\n return outputfDCTQuant;\n }\n\n function writeAPP0() {\n writeWord(0xffe0); // marker\n writeWord(16); // length\n writeByte(0x4a); // J\n writeByte(0x46); // F\n writeByte(0x49); // I\n writeByte(0x46); // F\n writeByte(0); // = \"JFIF\",'\\0'\n writeByte(1); // versionhi\n writeByte(1); // versionlo\n writeByte(0); // xyunits\n writeWord(1); // xdensity\n writeWord(1); // ydensity\n writeByte(0); // thumbnwidth\n writeByte(0); // thumbnheight\n }\n\n function writeSOF0(width, height) {\n writeWord(0xffc0); // marker\n writeWord(17); // length, truecolor YUV JPG\n writeByte(8); // precision\n writeWord(height);\n writeWord(width);\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0x11); // HVY\n writeByte(0); // QTY\n writeByte(2); // IdU\n writeByte(0x11); // HVU\n writeByte(1); // QTU\n writeByte(3); // IdV\n writeByte(0x11); // HVV\n writeByte(1); // QTV\n }\n\n function writeDQT() {\n writeWord(0xffdb); // marker\n writeWord(132); // length\n writeByte(0);\n for (var i = 0; i < 64; i++) {\n writeByte(YTable[i]);\n }\n writeByte(1);\n for (var j = 0; j < 64; j++) {\n writeByte(UVTable[j]);\n }\n }\n\n function writeDHT() {\n writeWord(0xffc4); // marker\n writeWord(0x01a2); // length\n\n writeByte(0); // HTYDCinfo\n for (var i = 0; i < 16; i++) {\n writeByte(std_dc_luminance_nrcodes[i + 1]);\n }\n for (var j = 0; j <= 11; j++) {\n writeByte(std_dc_luminance_values[j]);\n }\n\n writeByte(0x10); // HTYACinfo\n for (var k = 0; k < 16; k++) {\n writeByte(std_ac_luminance_nrcodes[k + 1]);\n }\n for (var l = 0; l <= 161; l++) {\n writeByte(std_ac_luminance_values[l]);\n }\n\n writeByte(1); // HTUDCinfo\n for (var m = 0; m < 16; m++) {\n writeByte(std_dc_chrominance_nrcodes[m + 1]);\n }\n for (var n = 0; n <= 11; n++) {\n writeByte(std_dc_chrominance_values[n]);\n }\n\n writeByte(0x11); // HTUACinfo\n for (var o = 0; o < 16; o++) {\n writeByte(std_ac_chrominance_nrcodes[o + 1]);\n }\n for (var p = 0; p <= 161; p++) {\n writeByte(std_ac_chrominance_values[p]);\n }\n }\n\n function writeSOS() {\n writeWord(0xffda); // marker\n writeWord(12); // length\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0); // HTY\n writeByte(2); // IdU\n writeByte(0x11); // HTU\n writeByte(3); // IdV\n writeByte(0x11); // HTV\n writeByte(0); // Ss\n writeByte(0x3f); // Se\n writeByte(0); // Bf\n }\n\n function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n var EOB = HTAC[0x00];\n var M16zeroes = HTAC[0xf0];\n var pos;\n var I16 = 16;\n var I63 = 63;\n var I64 = 64;\n var DU_DCT = fDCTQuant(CDU, fdtbl);\n //ZigZag reorder\n for (var j = 0; j < I64; ++j) {\n DU[ZigZag[j]] = DU_DCT[j];\n }\n var Diff = DU[0] - DC;\n DC = DU[0];\n //Encode DC\n if (Diff == 0) {\n writeBits(HTDC[0]); // Diff might be 0\n } else {\n pos = 32767 + Diff;\n writeBits(HTDC[category[pos]]);\n writeBits(bitcode[pos]);\n }\n //Encode ACs\n var end0pos = 63; // was const... which is crazy\n while (end0pos > 0 && DU[end0pos] == 0) {\n end0pos--;\n }\n //end0pos = first element in reverse order !=0\n if (end0pos == 0) {\n writeBits(EOB);\n return DC;\n }\n var i = 1;\n var lng;\n while (i <= end0pos) {\n var startpos = i;\n while (DU[i] == 0 && i <= end0pos) {\n ++i;\n }\n var nrzeroes = i - startpos;\n if (nrzeroes >= I16) {\n lng = nrzeroes >> 4;\n for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n writeBits(M16zeroes);\n nrzeroes = nrzeroes & 0xf;\n }\n pos = 32767 + DU[i];\n writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n writeBits(bitcode[pos]);\n i++;\n }\n if (end0pos != I63) {\n writeBits(EOB);\n }\n return DC;\n }\n\n function initCharLookupTable() {\n var sfcc = String.fromCharCode;\n for (var i = 0; i < 256; i++) {\n ///// ACHTUNG // 255\n clt[i] = sfcc(i);\n }\n }\n\n this.encode = function(\n image,\n quality // image data object\n ) {\n if (quality) setQuality(quality);\n\n // Initialize bit writer\n byteout = new Array();\n bytenew = 0;\n bytepos = 7;\n\n // Add JPEG headers\n writeWord(0xffd8); // SOI\n writeAPP0();\n writeDQT();\n writeSOF0(image.width, image.height);\n writeDHT();\n writeSOS();\n\n // Encode 8x8 macroblocks\n var DCY = 0;\n var DCU = 0;\n var DCV = 0;\n\n bytenew = 0;\n bytepos = 7;\n\n this.encode.displayName = \"_encode_\";\n\n var imageData = image.data;\n var width = image.width;\n var height = image.height;\n\n var quadWidth = width * 4;\n\n var x,\n y = 0;\n var r, g, b;\n var start, p, col, row, pos;\n while (y < height) {\n x = 0;\n while (x < quadWidth) {\n start = quadWidth * y + x;\n col = -1;\n row = 0;\n\n for (pos = 0; pos < 64; pos++) {\n row = pos >> 3; // /8\n col = (pos & 7) * 4; // %8\n p = start + row * quadWidth + col;\n\n if (y + row >= height) {\n // padding bottom\n p -= quadWidth * (y + 1 + row - height);\n }\n\n if (x + col >= quadWidth) {\n // padding right\n p -= x + col - quadWidth + 4;\n }\n\n r = imageData[p++];\n g = imageData[p++];\n b = imageData[p++];\n\n /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n // use lookup table (slightly faster)\n YDU[pos] =\n ((RGB_YUV_TABLE[r] +\n RGB_YUV_TABLE[(g + 256) >> 0] +\n RGB_YUV_TABLE[(b + 512) >> 0]) >>\n 16) -\n 128;\n UDU[pos] =\n ((RGB_YUV_TABLE[(r + 768) >> 0] +\n RGB_YUV_TABLE[(g + 1024) >> 0] +\n RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n 16) -\n 128;\n VDU[pos] =\n ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n RGB_YUV_TABLE[(g + 1536) >> 0] +\n RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n 16) -\n 128;\n }\n\n DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n x += 32;\n }\n y += 8;\n }\n\n ////////////////////////////////////////////////////////////////\n\n // Do the bit alignment of the EOI marker\n if (bytepos >= 0) {\n var fillbits = [];\n fillbits[1] = bytepos + 1;\n fillbits[0] = (1 << (bytepos + 1)) - 1;\n writeBits(fillbits);\n }\n\n writeWord(0xffd9); //EOI\n\n return new Uint8Array(byteout);\n };\n\n function setQuality(quality) {\n quality = Math.min(Math.max(quality, 1), 100);\n\n if (currentQuality == quality) return; // don't recalc if unchanged\n\n var sf =\n quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n initQuantTables(sf);\n currentQuality = quality;\n //console.log('Quality set to: '+quality +'%');\n }\n\n function init() {\n quality = quality || 50;\n // Create tables\n initCharLookupTable();\n initHuffmanTbl();\n initCategoryNumber();\n initRGBYUVTable();\n\n setQuality(quality);\n }\n init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n var reader = new GifReader(imageData);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = [];\n\n reader.decodeAndBlitFrameRGBA(0, pixels);\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n\n jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n this.pos = 0;\n this.buffer = buffer;\n this.datav = new DataView(buffer.buffer);\n this.is_with_alpha = !!is_with_alpha;\n this.bottom_up = true;\n this.flag =\n String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n this.pos += 2;\n if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n throw new Error(\"Invalid BMP File\");\n this.parseHeader();\n this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n this.fileSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.reserved = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.offset = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.headerSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.width = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.height = this.datav.getInt32(this.pos, true);\n this.pos += 4;\n this.planes = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.bitPP = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.compress = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.rawSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.hr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.vr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.colors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.importantColors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n\n if (this.bitPP === 16 && this.is_with_alpha) {\n this.bitPP = 15;\n }\n if (this.bitPP < 15) {\n var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n this.palette = new Array(len);\n for (var i = 0; i < len; i++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var quad = this.datav.getUint8(this.pos++, true);\n this.palette[i] = {\n red: red,\n green: green,\n blue: blue,\n quad: quad\n };\n }\n }\n if (this.height < 0) {\n this.height *= -1;\n this.bottom_up = false;\n }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n this.pos = this.offset;\n try {\n var bitn = \"bit\" + this.bitPP;\n var len = this.width * this.height * 4;\n this.data = new Uint8Array(len);\n\n this[bitn]();\n } catch (e) {\n console.log(\"bit decode error:\" + e);\n }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n var xlen = Math.ceil(this.width / 8);\n var mode = xlen % 4;\n var y;\n for (y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 8 * 4;\n for (var i = 0; i < 8; i++) {\n if (x * 8 + i < this.width) {\n var rgb = this.palette[(b >> (7 - i)) & 0x1];\n this.data[location + i * 4] = rgb.blue;\n this.data[location + i * 4 + 1] = rgb.green;\n this.data[location + i * 4 + 2] = rgb.red;\n this.data[location + i * 4 + 3] = 0xff;\n } else {\n break;\n }\n }\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n var xlen = Math.ceil(this.width / 2);\n var mode = xlen % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 2 * 4;\n\n var before = b >> 4;\n var after = b & 0x0f;\n\n var rgb = this.palette[before];\n this.data[location] = rgb.blue;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.red;\n this.data[location + 3] = 0xff;\n\n if (x * 2 + 1 >= this.width) break;\n\n rgb = this.palette[after];\n this.data[location + 4] = rgb.blue;\n this.data[location + 4 + 1] = rgb.green;\n this.data[location + 4 + 2] = rgb.red;\n this.data[location + 4 + 3] = 0xff;\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n var mode = this.width % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n if (b < this.palette.length) {\n var rgb = this.palette[b];\n this.data[location] = rgb.red;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.blue;\n this.data[location + 3] = 0xff;\n } else {\n this.data[location] = 0xff;\n this.data[location + 1] = 0xff;\n this.data[location + 2] = 0xff;\n this.data[location + 3] = 0xff;\n }\n }\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n var alpha = B >> 15 ? 0xff : 0x00;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n var _111111 = parseInt(\"111111\", 2),\n _1_6 = _111111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var alpha = 0xff;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n var red = (((B >> 11) / _1_5) * 255) | 0;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = 0xff;\n }\n //skip extra bytes\n this.pos += this.width % 4;\n }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var alpha = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n //this.pos += (this.width % 4);\n }\n};\n\nBmpDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { BmpDecoder };\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n var reader = new BmpDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","function WebPDecoder(imageData) {\n /** @license\n * Copyright 2011 Google Inc.\n *\n * This code is licensed under the same terms as WebM:\n * Software License Agreement: http://www.webmproject.org/license/software/\n * Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n * -----------------------------------------------------------------------------\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -----------------------------------------------------------------------------\n *\n * Copyright 2011-2017 Dominik Homberger\n * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n *\n * Author: Dominik Homberger (dominik.homberger@gmail.com)\n */\n\n var self = this;\n var UpsampleRgbLinePair,\n UpsampleBgrLinePair,\n UpsampleRgbaLinePair,\n UpsampleBgraLinePair,\n UpsampleArgbLinePair,\n UpsampleArgbLinePair,\n UpsampleRgba4444LinePair,\n UpsampleRgb565LinePair;\n\n function x(F) {\n if (!F) throw Error(\"assert :P\");\n }\n function fa(F, L, J) {\n for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n return !1;\n }\n function I(F, L, J, H, Z) {\n for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n }\n function M(F, L, J, H) {\n for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n }\n function V(F) {\n return new Int32Array(F);\n }\n function wa(F, L) {\n for (var J = [], H = 0; H < F; H++) J.push(new L());\n return J;\n }\n function wb() {\n function F(J, H, Z) {\n for (var O = Z[H], L = 0; L < O; L++) {\n J.push(Z.length > H + 1 ? [] : 0);\n if (Z.length < H + 1) break;\n F(J[L], H + 1, Z);\n }\n }\n var L = [];\n F(L, 0, [3, 11]);\n return L;\n }\n function Ed(F, L) {\n function J(H, O, F) {\n for (var Z = F[O], ma = 0; ma < Z; ma++) {\n H.push(F.length > O + 1 ? [] : new L());\n if (F.length < O + 1) break;\n J(H[ma], O + 1, F);\n }\n }\n var H = [];\n J(H, 0, F);\n return H;\n }\n var _WebPDecoder = function() {\n var self = this;\n function F() {\n V(55);\n }\n function L(a, b) {\n for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n return c ? (a & (c - 1)) + c : a;\n }\n function J(a, b, c, d, e) {\n x(!(d % c));\n do (d -= c), (a[b + d] = e);\n while (0 < d);\n }\n function H(a, b, c, d, e, f) {\n var g = b,\n h = 1 << c,\n k,\n l,\n m = V(16),\n n = V(16);\n x(0 != e);\n x(null != d);\n x(null != a);\n x(0 < c);\n for (l = 0; l < e; ++l) {\n if (15 < d[l]) return 0;\n ++m[d[l]];\n }\n if (m[0] == e) return 0;\n n[1] = 0;\n for (k = 1; 15 > k; ++k) {\n if (m[k] > 1 << k) return 0;\n n[k + 1] = n[k] + m[k];\n }\n for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n if (1 == n[15])\n return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n var r = -1,\n q = h - 1,\n t = 0,\n v = 1,\n p = 1,\n u,\n w = 1 << c;\n l = 0;\n k = 1;\n for (e = 2; k <= c; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k])\n (d = new O()),\n (d.g = k),\n (d.value = f[l++]),\n J(a, g + t, e, w, d),\n (t = L(t, k));\n }\n k = c + 1;\n for (e = 2; 15 >= k; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k]) {\n d = new O();\n if ((t & q) != r) {\n g += w;\n r = k;\n for (u = 1 << (r - c); 15 > r; ) {\n u -= m[r];\n if (0 >= u) break;\n ++r;\n u <<= 1;\n }\n u = r - c;\n w = 1 << u;\n h += w;\n r = t & q;\n a[b + r].g = u + c;\n a[b + r].value = g - b - r;\n }\n d.g = k - c;\n d.value = f[l++];\n J(a, g + (t >> c), e, w, d);\n t = L(t, k);\n }\n }\n return v != 2 * n[15] - 1 ? 0 : h;\n }\n function Z(a, b, c, d, e) {\n x(2328 >= e);\n if (512 >= e) var f = V(512);\n else if (((f = V(e)), null == f)) return 0;\n return H(a, b, c, d, e, f);\n }\n function O() {\n this.value = this.g = 0;\n }\n function Fd() {\n this.value = this.g = 0;\n }\n function Ub() {\n this.G = wa(5, O);\n this.H = V(5);\n this.jc = this.Qb = this.qb = this.nd = 0;\n this.pd = wa(xb, Fd);\n }\n function ma(a, b, c, d) {\n x(null != a);\n x(null != b);\n x(2147483648 > d);\n a.Ca = 254;\n a.I = 0;\n a.b = -8;\n a.Ka = 0;\n a.oa = b;\n a.pa = c;\n a.Jd = b;\n a.Yc = c + d;\n a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n Qa(a);\n }\n function na(a, b) {\n for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n return c;\n }\n function ca(a, b) {\n var c = na(a, b);\n return G(a) ? -c : c;\n }\n function cb(a, b, c, d) {\n var e,\n f = 0;\n x(null != a);\n x(null != b);\n x(4294967288 > d);\n a.Sb = d;\n a.Ra = 0;\n a.u = 0;\n a.h = 0;\n 4 < d && (d = 4);\n for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n a.Ra = f;\n a.bb = d;\n a.oa = b;\n a.pa = c;\n }\n function Vb(a) {\n for (; 8 <= a.u && a.bb < a.Sb; )\n (a.Ra >>>= 8),\n (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n ++a.bb,\n (a.u -= 8);\n db(a) && ((a.h = 1), (a.u = 0));\n }\n function D(a, b) {\n x(0 <= b);\n if (!a.h && b <= Gd) {\n var c = pb(a) & Hd[b];\n a.u += b;\n Vb(a);\n return c;\n }\n a.h = 1;\n return (a.u = 0);\n }\n function Wb() {\n this.b = this.Ca = this.I = 0;\n this.oa = [];\n this.pa = 0;\n this.Jd = [];\n this.Yc = 0;\n this.Zc = [];\n this.Ka = 0;\n }\n function Ra() {\n this.Ra = 0;\n this.oa = [];\n this.h = this.u = this.bb = this.Sb = this.pa = 0;\n }\n function pb(a) {\n return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n }\n function db(a) {\n x(a.bb <= a.Sb);\n return a.h || (a.bb == a.Sb && a.u > ob);\n }\n function qb(a, b) {\n a.u = b;\n a.h = db(a);\n }\n function Sa(a) {\n a.u >= Xb && (x(a.u >= Xb), Vb(a));\n }\n function Qa(a) {\n x(null != a && null != a.oa);\n a.pa < a.Zc\n ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n : (x(null != a && null != a.oa),\n a.pa < a.Yc\n ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n : a.Ka\n ? (a.b = 0)\n : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n }\n function G(a) {\n return na(a, 1);\n }\n function K(a, b) {\n var c = a.Ca;\n 0 > a.b && Qa(a);\n var d = a.b,\n e = (c * b) >>> 8,\n f = (a.I >>> d > e) + 0;\n f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n d = c;\n for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n d = 7 ^ (e + Id[d]);\n a.b -= d;\n a.Ca = (c << d) - 1;\n return f;\n }\n function ra(a, b, c) {\n a[b + 0] = (c >> 24) & 255;\n a[b + 1] = (c >> 16) & 255;\n a[b + 2] = (c >> 8) & 255;\n a[b + 3] = (c >> 0) & 255;\n }\n function Ta(a, b) {\n return (a[b + 0] << 0) | (a[b + 1] << 8);\n }\n function Yb(a, b) {\n return Ta(a, b) | (a[b + 2] << 16);\n }\n function Ha(a, b) {\n return Ta(a, b) | (Ta(a, b + 2) << 16);\n }\n function Zb(a, b) {\n var c = 1 << b;\n x(null != a);\n x(0 < b);\n a.X = V(c);\n if (null == a.X) return 0;\n a.Mb = 32 - b;\n a.Xa = b;\n return 1;\n }\n function $b(a, b) {\n x(null != a);\n x(null != b);\n x(a.Xa == b.Xa);\n I(b.X, 0, a.X, 0, 1 << b.Xa);\n }\n function ac() {\n this.X = [];\n this.Xa = this.Mb = 0;\n }\n function bc(a, b, c, d) {\n x(null != c);\n x(null != d);\n var e = c[0],\n f = d[0];\n 0 == e && (e = (a * f + b / 2) / b);\n 0 == f && (f = (b * e + a / 2) / a);\n if (0 >= e || 0 >= f) return 0;\n c[0] = e;\n d[0] = f;\n return 1;\n }\n function xa(a, b) {\n return (a + (1 << b) - 1) >>> b;\n }\n function yb(a, b) {\n return (\n (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n 0\n );\n }\n function X(a, b) {\n self[b] = function(b, d, e, f, g, h, k) {\n var c;\n for (c = 0; c < g; ++c) {\n var m = self[a](h[k + c - 1], e, f + c);\n h[k + c] = yb(b[d + c], m);\n }\n };\n }\n function Jd() {\n this.ud = this.hd = this.jd = 0;\n }\n function aa(a, b) {\n return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n }\n function sa(a) {\n if (0 <= a && 256 > a) return a;\n if (0 > a) return 0;\n if (255 < a) return 255;\n }\n function eb(a, b) {\n return sa(a + ((a - b + 0.5) >> 1));\n }\n function Ia(a, b, c) {\n return Math.abs(b - c) - Math.abs(a - c);\n }\n function cc(a, b, c, d, e, f, g) {\n d = f[g - 1];\n for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n }\n function Kd(a, b, c, d, e) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + f],\n h = (g >> 8) & 255,\n k = g & 16711935,\n k = k + ((h << 16) + h),\n k = k & 16711935;\n d[e + f] = ((g & 4278255360) + k) >>> 0;\n }\n }\n function dc(a, b) {\n b.jd = (a >> 0) & 255;\n b.hd = (a >> 8) & 255;\n b.ud = (a >> 16) & 255;\n }\n function Ld(a, b, c, d, e, f) {\n var g;\n for (g = 0; g < d; ++g) {\n var h = b[c + g],\n k = h >>> 8,\n l = h >>> 16,\n m = h,\n l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n l = l & 255,\n m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n m = m & 255;\n e[f + g] = (h & 4278255360) + (l << 16) + m;\n }\n }\n function ec(a, b, c, d, e) {\n self[b] = function(a, b, c, k, l, m, n, r, q) {\n for (k = n; k < r; ++k)\n for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n };\n self[a] = function(a, b, h, k, l, m, n) {\n var f = 8 >> a.b,\n g = a.Ea,\n t = a.K[0],\n v = a.w;\n if (8 > f)\n for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n var p = 0,\n u;\n for (u = 0; u < g; ++u)\n u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n }\n else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n };\n }\n function Md(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n }\n }\n function Nd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 24) & 255;\n }\n }\n function Od(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 240) | ((f >> 12) & 15),\n f = ((f >> 0) & 240) | ((f >> 28) & 15);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Pd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 248) | ((f >> 13) & 7),\n f = ((f >> 5) & 224) | ((f >> 3) & 31);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Qd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 16) & 255;\n }\n }\n function fb(a, b, c, d, e, f) {\n if (0 == f)\n for (c = b + c; b < c; )\n (f = a[b++]),\n ra(\n d,\n ((f[0] >> 24) |\n ((f[1] >> 8) & 65280) |\n ((f[2] << 8) & 16711680) |\n (f[3] << 24)) >>>\n 0\n ),\n (e += 32);\n else I(d, e, a, b, c);\n }\n function gb(a, b) {\n self[b][0] = self[a + \"0\"];\n self[b][1] = self[a + \"1\"];\n self[b][2] = self[a + \"2\"];\n self[b][3] = self[a + \"3\"];\n self[b][4] = self[a + \"4\"];\n self[b][5] = self[a + \"5\"];\n self[b][6] = self[a + \"6\"];\n self[b][7] = self[a + \"7\"];\n self[b][8] = self[a + \"8\"];\n self[b][9] = self[a + \"9\"];\n self[b][10] = self[a + \"10\"];\n self[b][11] = self[a + \"11\"];\n self[b][12] = self[a + \"12\"];\n self[b][13] = self[a + \"13\"];\n self[b][14] = self[a + \"0\"];\n self[b][15] = self[a + \"0\"];\n }\n function hb(a) {\n return a == zb || a == Ab || a == Ja || a == Bb;\n }\n function Rd() {\n this.eb = [];\n this.size = this.A = this.fb = 0;\n }\n function Sd() {\n this.y = [];\n this.f = [];\n this.ea = [];\n this.F = [];\n this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n }\n function Cb() {\n this.Rd = this.height = this.width = this.S = 0;\n this.f = {};\n this.f.RGBA = new Rd();\n this.f.kb = new Sd();\n this.sd = null;\n }\n function Td() {\n this.width = [0];\n this.height = [0];\n this.Pd = [0];\n this.Qd = [0];\n this.format = [0];\n }\n function Ud() {\n this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n }\n function Vd(a) {\n alert(\"todo:WebPSamplerProcessPlane\");\n return a.T;\n }\n function Wd(a, b) {\n var c = a.T,\n d = b.ba.f.RGBA,\n e = d.eb,\n f = d.fb + a.ka * d.A,\n g = P[b.ba.S],\n h = a.y,\n k = a.O,\n l = a.f,\n m = a.N,\n n = a.ea,\n r = a.W,\n q = b.cc,\n t = b.dc,\n v = b.Mc,\n p = b.Nc,\n u = a.ka,\n w = a.ka + a.T,\n y = a.U,\n A = (y + 1) >> 1;\n 0 == u\n ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n ++c);\n for (; u + 2 < w; u += 2)\n (q = l),\n (t = m),\n (v = n),\n (p = r),\n (m += a.Rc),\n (r += a.Rc),\n (f += 2 * d.A),\n (k += 2 * a.fa),\n g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n k += a.fa;\n a.j + w < a.o\n ? (I(b.ec, b.fc, h, k, y),\n I(b.cc, b.dc, l, m, A),\n I(b.Mc, b.Nc, n, r, A),\n c--)\n : w & 1 ||\n g(\n h,\n k,\n null,\n null,\n l,\n m,\n n,\n r,\n l,\n m,\n n,\n r,\n e,\n f + d.A,\n null,\n null,\n y\n );\n return c;\n }\n function Xd(a, b, c) {\n var d = a.F,\n e = [a.J];\n if (null != d) {\n var f = a.U,\n g = b.ba.S,\n h = g == ya || g == Ja;\n b = b.ba.f.RGBA;\n var k = [0],\n l = a.ka;\n k[0] = a.T;\n a.Kb &&\n (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n var m = b.eb,\n l = b.fb + l * b.A;\n a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n x(c == k);\n a && hb(g) && za(m, l, h, f, k, b.A);\n }\n return 0;\n }\n function gc(a) {\n var b = a.ma,\n c = b.ba.S,\n d = 11 > c,\n e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n b.memory = null;\n b.Ib = null;\n b.Jb = null;\n b.Nd = null;\n if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n e && hb(c) && ic();\n if (a.da) alert(\"todo:use_scaling\");\n else {\n if (d) {\n if (((b.Ib = Vd), a.Kb)) {\n c = (a.U + 1) >> 1;\n b.memory = V(a.U + 2 * c);\n if (null == b.memory) return 0;\n b.ec = b.memory;\n b.fc = 0;\n b.cc = b.ec;\n b.dc = b.fc + a.U;\n b.Mc = b.cc;\n b.Nc = b.dc + c;\n b.Ib = Wd;\n ic();\n }\n } else alert(\"todo:EmitYUV\");\n e && ((b.Jb = Xd), d && Aa());\n }\n if (d && !jc) {\n for (a = 0; 256 > a; ++a)\n (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n (Zd[a] = -22014 * (a - 128) + Ba),\n ($d[a] = -45773 * (a - 128)),\n (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n for (a = ta; a < Eb; ++a)\n (b = (76283 * (a - 16) + Ba) >> Wa),\n (be[a - ta] = ga(b, 255)),\n (ce[a - ta] = ga((b + 8) >> 4, 15));\n jc = 1;\n }\n return 1;\n }\n function kc(a) {\n var b = a.ma,\n c = a.U,\n d = a.T;\n x(!(a.ka & 1));\n if (0 >= c || 0 >= d) return 0;\n c = b.Ib(a, b);\n null != b.Jb && b.Jb(a, b, c);\n b.Dc += c;\n return 1;\n }\n function lc(a) {\n a.ma.memory = null;\n }\n function mc(a, b, c, d) {\n if (47 != D(a, 8)) return 0;\n b[0] = D(a, 14) + 1;\n c[0] = D(a, 14) + 1;\n d[0] = D(a, 1);\n return 0 != D(a, 3) ? 0 : !a.h;\n }\n function ib(a, b) {\n if (4 > a) return a + 1;\n var c = (a - 2) >> 1;\n return ((2 + (a & 1)) << c) + D(b, c) + 1;\n }\n function nc(a, b) {\n if (120 < b) return b - 120;\n var c = de[b - 1],\n c = (c >> 4) * a + (8 - (c & 15));\n return 1 <= c ? c : 1;\n }\n function ua(a, b, c) {\n var d = pb(c);\n b += d & 255;\n var e = a[b].g - 8;\n 0 < e &&\n (qb(c, c.u + 8),\n (d = pb(c)),\n (b += a[b].value),\n (b += d & ((1 << e) - 1)));\n qb(c, c.u + a[b].g);\n return a[b].value;\n }\n function ub(a, b, c) {\n c.g += a.g;\n c.value += (a.value << b) >>> 0;\n x(8 >= c.g);\n return a.g;\n }\n function ha(a, b, c) {\n var d = a.xc;\n b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n x(b < a.Wb);\n return a.Ya[b];\n }\n function oc(a, b, c, d) {\n var e = a.ab,\n f = a.c * b,\n g = a.C;\n b = g + b;\n var h = c,\n k = d;\n d = a.Ta;\n for (c = a.Ua; 0 < e--; ) {\n var l = a.gc[e],\n m = g,\n n = b,\n r = h,\n q = k,\n k = d,\n h = c,\n t = l.Ea;\n x(m < n);\n x(n <= l.nc);\n switch (l.hc) {\n case 2:\n pc(r, q, (n - m) * t, k, h);\n break;\n case 0:\n var v = l,\n p = m,\n u = n,\n w = k,\n y = h,\n A = v.Ea;\n 0 == p &&\n (ee(r, q, null, null, 1, w, y),\n cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n (q += A),\n (y += A),\n ++p);\n for (\n var E = 1 << v.b,\n B = E - 1,\n C = xa(A, v.b),\n N = v.K,\n v = v.w + (p >> v.b) * C;\n p < u;\n\n ) {\n var z = N,\n Q = v,\n S = 1;\n for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n var K = qc[(z[Q++] >> 8) & 15],\n D = (S & ~B) + E;\n D > A && (D = A);\n K(r, q + +S, w, y + S - A, D - S, w, y + S);\n S = D;\n }\n q += A;\n y += A;\n ++p;\n p & B || (v += C);\n }\n n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n break;\n case 1:\n t = r;\n u = q;\n r = l.Ea;\n q = 1 << l.b;\n w = q - 1;\n y = r & ~w;\n A = r - y;\n p = xa(r, l.b);\n E = l.K;\n for (l = l.w + (m >> l.b) * p; m < n; ) {\n B = E;\n C = l;\n N = new Jd();\n v = u + y;\n for (z = u + r; u < v; )\n dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n u < z &&\n (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n ++m;\n m & w || (l += p);\n }\n break;\n case 3:\n if (r == k && q == h && 0 < l.b) {\n y = (n - m) * xa(l.Ea, l.b);\n t = h + (n - m) * t - y;\n u = k;\n r = t;\n q = k;\n w = h;\n A = y;\n p = [];\n for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n rc(l, m, n, k, t, k, h);\n } else rc(l, m, n, r, q, k, h);\n }\n h = d;\n k = c;\n }\n k != c && I(d, c, h, k, f);\n }\n function ge(a, b) {\n var c = a.V,\n d = a.Ba + a.c * a.C,\n e = b - a.C;\n x(b <= a.l.o);\n x(16 >= e);\n if (0 < e) {\n var f = a.l,\n g = a.Ta,\n h = a.Ua,\n k = f.width;\n oc(a, e, c, d);\n h = [h];\n c = a.C;\n d = b;\n e = h;\n x(c < d);\n x(f.v < f.va);\n d > f.o && (d = f.o);\n if (c < f.j) {\n var l = f.j - c,\n c = f.j;\n e[0] += l * k;\n }\n c >= d\n ? (c = 0)\n : ((e[0] += 4 * f.v),\n (f.ka = c - f.j),\n (f.U = f.va - f.v),\n (f.T = d - c),\n (c = 1));\n if (c) {\n h = h[0];\n c = a.ca;\n if (11 > c.S) {\n for (\n var m = c.f.RGBA,\n d = c.S,\n e = f.U,\n f = f.T,\n l = m.eb,\n n = m.A,\n r = f,\n m = m.fb + a.Ma * m.A;\n 0 < r--;\n\n ) {\n var q = g,\n t = h,\n v = e,\n p = l,\n u = m;\n switch (d) {\n case Ca:\n sc(q, t, v, p, u);\n break;\n case Ua:\n Gb(q, t, v, p, u);\n break;\n case zb:\n Gb(q, t, v, p, u);\n za(p, u, 0, v, 1, 0);\n break;\n case tc:\n uc(q, t, v, p, u);\n break;\n case Va:\n fb(q, t, v, p, u, 1);\n break;\n case Ab:\n fb(q, t, v, p, u, 1);\n za(p, u, 0, v, 1, 0);\n break;\n case ya:\n fb(q, t, v, p, u, 0);\n break;\n case Ja:\n fb(q, t, v, p, u, 0);\n za(p, u, 1, v, 1, 0);\n break;\n case Db:\n Hb(q, t, v, p, u);\n break;\n case Bb:\n Hb(q, t, v, p, u);\n vc(p, u, v, 1, 0);\n break;\n case wc:\n xc(q, t, v, p, u);\n break;\n default:\n x(0);\n }\n h += k;\n m += n;\n }\n a.Ma += f;\n } else alert(\"todo:EmitRescaledRowsYUVA\");\n x(a.Ma <= c.height);\n }\n }\n a.C = b;\n x(a.C <= a.i);\n }\n function yc(a) {\n var b;\n if (0 < a.ua) return 0;\n for (b = 0; b < a.Wb; ++b) {\n var c = a.Ya[b].G,\n d = a.Ya[b].H;\n if (\n 0 < c[1][d[1] + 0].g ||\n 0 < c[2][d[2] + 0].g ||\n 0 < c[3][d[3] + 0].g\n )\n return 0;\n }\n return 1;\n }\n function zc(a, b, c, d, e, f) {\n if (0 != a.Z) {\n var g = a.qd,\n h = a.rd;\n for (x(null != ia[a.Z]); b < c; ++b)\n ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n a.qd = g;\n a.rd = h;\n }\n }\n function Ib(a, b) {\n var c = a.l.ma,\n d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n d = a.C < d ? d : a.C;\n x(b <= a.l.o);\n if (b > d) {\n var e = a.l.width,\n f = c.ca,\n g = c.tb + e * d,\n h = a.V,\n k = a.Ba + a.c * d,\n l = a.gc;\n x(1 == a.ab);\n x(3 == l[0].hc);\n he(l[0], d, b, h, k, f, g);\n zc(c, d, b, f, g, e);\n }\n a.C = a.Ma = b;\n }\n function Jb(a, b, c, d, e, f, g) {\n var h = a.$ / d,\n k = a.$ % d,\n l = a.m,\n m = a.s,\n n = c + a.$,\n r = n;\n e = c + d * e;\n var q = c + d * f,\n t = 280 + m.ua,\n v = a.Pb ? h : 16777216,\n p = 0 < m.ua ? m.Wa : null,\n u = m.wc,\n w = n < q ? ha(m, k, h) : null;\n x(a.C < f);\n x(q <= e);\n var y = !1;\n a: for (;;) {\n for (; y || n < q; ) {\n var A = 0;\n if (h >= v) {\n var v = a,\n E = n - c;\n x(v.Pb);\n v.wd = v.m;\n v.xd = E;\n 0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n v = h + ie;\n }\n k & u || (w = ha(m, k, h));\n x(null != w);\n w.Qb && ((b[n] = w.qb), (y = !0));\n if (!y)\n if ((Sa(l), w.jc)) {\n var A = l,\n E = b,\n B = n,\n C = w.pd[pb(A) & (xb - 1)];\n x(w.jc);\n 256 > C.g\n ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n 0 == A && (y = !0);\n } else A = ua(w.G[0], w.H[0], l);\n if (l.h) break;\n if (y || 256 > A) {\n if (!y)\n if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n else {\n Sa(l);\n y = ua(w.G[1], w.H[1], l);\n Sa(l);\n E = ua(w.G[2], w.H[2], l);\n B = ua(w.G[3], w.H[3], l);\n if (l.h) break;\n b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n }\n y = !1;\n ++n;\n ++k;\n if (\n k >= d &&\n ((k = 0),\n ++h,\n null != g && h <= f && !(h % 16) && g(a, h),\n null != p)\n )\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (280 > A) {\n A = ib(A - 256, l);\n E = ua(w.G[4], w.H[4], l);\n Sa(l);\n E = ib(E, l);\n E = nc(d, E);\n if (l.h) break;\n if (n - c < E || e - n < A) break a;\n else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n n += A;\n for (k += A; k >= d; )\n (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n x(n <= e);\n k & u && (w = ha(m, k, h));\n if (null != p)\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (A < t) {\n y = A - 280;\n for (x(null != p); r < n; )\n (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n A = n;\n E = p;\n x(!(y >>> E.Xa));\n b[A] = E.X[y];\n y = !0;\n } else break a;\n y || x(l.h == db(l));\n }\n if (a.Pb && l.h && n < e)\n x(a.m.h),\n (a.a = 5),\n (a.m = a.wd),\n (a.$ = a.xd),\n 0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n else if (l.h) break a;\n else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n return 1;\n }\n a.a = 3;\n return 0;\n }\n function Ac(a) {\n x(null != a);\n a.vc = null;\n a.yc = null;\n a.Ya = null;\n var b = a.Wa;\n null != b && (b.X = null);\n a.vb = null;\n x(null != a);\n }\n function Bc() {\n var a = new je();\n if (null == a) return null;\n a.a = 0;\n a.xb = Cc;\n gb(\"Predictor\", \"VP8LPredictors\");\n gb(\"Predictor\", \"VP8LPredictors_C\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n pc = Kd;\n Fb = Ld;\n sc = Md;\n Gb = Nd;\n Hb = Od;\n xc = Pd;\n uc = Qd;\n self.VP8LMapColor32b = ke;\n self.VP8LMapColor8b = le;\n return a;\n }\n function rb(a, b, c, d, e) {\n var f = 1,\n g = [a],\n h = [b],\n k = d.m,\n l = d.s,\n m = null,\n n = 0;\n a: for (;;) {\n if (c)\n for (; f && D(k, 1); ) {\n var r = g,\n q = h,\n t = d,\n v = 1,\n p = t.m,\n u = t.gc[t.ab],\n w = D(p, 2);\n if (t.Oc & (1 << w)) f = 0;\n else {\n t.Oc |= 1 << w;\n u.hc = w;\n u.Ea = r[0];\n u.nc = q[0];\n u.K = [null];\n ++t.ab;\n x(4 >= t.ab);\n switch (w) {\n case 0:\n case 1:\n u.b = D(p, 3) + 2;\n v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n u.K = u.K[0];\n break;\n case 3:\n var y = D(p, 8) + 1,\n A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n r[0] = xa(u.Ea, A);\n u.b = A;\n var v = rb(y, 1, 0, t, u.K),\n E;\n if ((E = v)) {\n var B,\n C = y,\n N = u,\n z = 1 << (8 >> N.b),\n Q = V(z);\n if (null == Q) E = 0;\n else {\n var S = N.K[0],\n K = N.w;\n Q[0] = N.K[0][0];\n for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n for (; B < 4 * z; ++B) Q[B] = 0;\n N.K[0] = null;\n N.K[0] = Q;\n E = 1;\n }\n }\n v = E;\n break;\n case 2:\n break;\n default:\n x(0);\n }\n f = v;\n }\n }\n g = g[0];\n h = h[0];\n if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n d.a = 3;\n break a;\n }\n var H;\n if ((H = f))\n b: {\n var F = d,\n G = g,\n L = h,\n J = n,\n T = c,\n Da,\n ba,\n X = F.m,\n R = F.s,\n P = [null],\n U,\n W = 1,\n aa = 0,\n na = me[J];\n c: for (;;) {\n if (T && D(X, 1)) {\n var ca = D(X, 3) + 2,\n ga = xa(G, ca),\n ka = xa(L, ca),\n qa = ga * ka;\n if (!rb(ga, ka, 0, F, P)) break c;\n P = P[0];\n R.xc = ca;\n for (Da = 0; Da < qa; ++Da) {\n var ia = (P[Da] >> 8) & 65535;\n P[Da] = ia;\n ia >= W && (W = ia + 1);\n }\n }\n if (X.h) break c;\n for (ba = 0; 5 > ba; ++ba) {\n var Y = Dc[ba];\n !ba && 0 < J && (Y += 1 << J);\n aa < Y && (aa = Y);\n }\n var ma = wa(W * na, O);\n var ua = W,\n va = wa(ua, Ub);\n if (null == va) var la = null;\n else x(65536 >= ua), (la = va);\n var ha = V(aa);\n if (null == la || null == ha || null == ma) {\n F.a = 1;\n break c;\n }\n var pa = ma;\n for (Da = U = 0; Da < W; ++Da) {\n var ja = la[Da],\n da = ja.G,\n ea = ja.H,\n Fa = 0,\n ra = 1,\n Ha = 0;\n for (ba = 0; 5 > ba; ++ba) {\n Y = Dc[ba];\n da[ba] = pa;\n ea[ba] = U;\n !ba && 0 < J && (Y += 1 << J);\n d: {\n var sa,\n za = Y,\n ta = F,\n oa = ha,\n db = pa,\n eb = U,\n Ia = 0,\n Ka = ta.m,\n fb = D(Ka, 1);\n M(oa, 0, 0, za);\n if (fb) {\n var gb = D(Ka, 1) + 1,\n hb = D(Ka, 1),\n Ja = D(Ka, 0 == hb ? 1 : 8);\n oa[Ja] = 1;\n 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n var ya = 1;\n } else {\n var Ua = V(19),\n Va = D(Ka, 4) + 4;\n if (19 < Va) {\n ta.a = 3;\n var Aa = 0;\n break d;\n }\n for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n var Ba = void 0,\n sb = void 0,\n Wa = ta,\n ib = Ua,\n Ca = za,\n Xa = oa,\n Oa = 0,\n La = Wa.m,\n Ya = 8,\n Za = wa(128, O);\n e: for (;;) {\n if (!Z(Za, 0, 7, ib, 19)) break e;\n if (D(La, 1)) {\n var kb = 2 + 2 * D(La, 3),\n Ba = 2 + D(La, kb);\n if (Ba > Ca) break e;\n } else Ba = Ca;\n for (sb = 0; sb < Ca && Ba--; ) {\n Sa(La);\n var $a = Za[0 + (pb(La) & 127)];\n qb(La, La.u + $a.g);\n var jb = $a.value;\n if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n else {\n var lb = 16 == jb,\n ab = jb - 16,\n mb = oe[ab],\n bb = D(La, pe[ab]) + mb;\n if (sb + bb > Ca) break e;\n else\n for (var nb = lb ? Ya : 0; 0 < bb--; )\n Xa[sb++] = nb;\n }\n }\n Oa = 1;\n break e;\n }\n Oa || (Wa.a = 3);\n ya = Oa;\n }\n (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n }\n if (0 == Aa) break c;\n ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n Fa += pa[U].g;\n U += Aa;\n if (3 >= ba) {\n var Pa = ha[0],\n tb;\n for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n Ha += Pa;\n }\n }\n ja.nd = ra;\n ja.Qb = 0;\n ra &&\n ((ja.qb =\n ((da[3][ea[3] + 0].value << 24) |\n (da[1][ea[1] + 0].value << 16) |\n da[2][ea[2] + 0].value) >>>\n 0),\n 0 == Fa &&\n 256 > da[0][ea[0] + 0].value &&\n ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n ja.jc = !ja.Qb && 6 > Ha;\n if (ja.jc) {\n var Ga,\n Ea = ja;\n for (Ga = 0; Ga < xb; ++Ga) {\n var Ma = Ga,\n Na = Ea.pd[Ma],\n vb = Ea.G[0][Ea.H[0] + Ma];\n 256 <= vb.value\n ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n : ((Na.g = 0),\n (Na.value = 0),\n (Ma >>= ub(vb, 8, Na)),\n (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n }\n }\n }\n R.vc = P;\n R.Wb = W;\n R.Ya = la;\n R.yc = ma;\n H = 1;\n break b;\n }\n H = 0;\n }\n f = H;\n if (!f) {\n d.a = 3;\n break a;\n }\n if (0 < n) {\n if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n d.a = 1;\n f = 0;\n break a;\n }\n } else l.ua = 0;\n var Qa = d,\n cb = g,\n ob = h,\n Ra = Qa.s,\n Ta = Ra.xc;\n Qa.c = cb;\n Qa.i = ob;\n Ra.md = xa(cb, Ta);\n Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n if (c) {\n d.xb = re;\n break a;\n }\n m = V(g * h);\n if (null == m) {\n d.a = 1;\n f = 0;\n break a;\n }\n f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n break a;\n }\n f\n ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n : Ac(l);\n return f;\n }\n function Ec(a, b) {\n var c = a.c * a.i,\n d = c + b + 16 * b;\n x(a.c <= b);\n a.V = V(d);\n if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n a.Ta = a.V;\n a.Ua = a.Ba + c + b;\n return 1;\n }\n function se(a, b) {\n var c = a.C,\n d = b - c,\n e = a.V,\n f = a.Ba + a.c * c;\n for (x(b <= a.l.o); 0 < d; ) {\n var g = 16 < d ? 16 : d,\n h = a.l.ma,\n k = a.l.width,\n l = k * g,\n m = h.ca,\n n = h.tb + k * c,\n r = a.Ta,\n q = a.Ua;\n oc(a, g, e, f);\n Fc(r, q, m, n, l);\n zc(h, c, c + g, m, n, k);\n d -= g;\n e += g * a.c;\n c += g;\n }\n x(c == b);\n a.C = a.Ma = b;\n }\n function te(a, b) {\n var c = [0],\n d = [0],\n e = [0];\n a: for (;;) {\n if (null == a) return 0;\n if (null == b) return (a.a = 2), 0;\n a.l = b;\n a.a = 0;\n cb(a.m, b.data, b.w, b.ha);\n if (!mc(a.m, c, d, e)) {\n a.a = 3;\n break a;\n }\n a.xb = Cc;\n b.width = c[0];\n b.height = d[0];\n if (!rb(c[0], d[0], 1, a, null)) break a;\n return 1;\n }\n x(0 != a.a);\n return 0;\n }\n function ue() {\n this.ub = this.yd = this.td = this.Rb = 0;\n }\n function ve() {\n this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n }\n function we() {\n this.Fb = this.Bb = this.Cb = 0;\n this.Zb = V(4);\n this.Lb = V(4);\n }\n function Gc() {\n this.Yb = wb();\n }\n function xe() {\n this.jb = V(3);\n this.Wc = Ed([4, 8], Gc);\n this.Xc = Ed([4, 17], Gc);\n }\n function ye() {\n this.Pc = this.wb = this.Tb = this.zd = 0;\n this.vd = new V(4);\n this.od = new V(4);\n }\n function Xa() {\n this.ld = this.La = this.dd = this.tc = 0;\n }\n function Hc() {\n this.Na = this.la = 0;\n }\n function ze() {\n this.Sc = [0, 0];\n this.Eb = [0, 0];\n this.Qc = [0, 0];\n this.ia = this.lc = 0;\n }\n function Kb() {\n this.ad = V(384);\n this.Za = 0;\n this.Ob = V(16);\n this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n }\n function Ae() {\n this.uc = this.M = this.Nb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.ya = Array(new Kb());\n this.aa = 0;\n this.l = new Oa();\n }\n function Ic() {\n this.y = V(16);\n this.f = V(8);\n this.ea = V(8);\n }\n function Be() {\n this.cb = this.a = 0;\n this.sc = \"\";\n this.m = new Wb();\n this.Od = new ue();\n this.Kc = new ve();\n this.ed = new ye();\n this.Qa = new we();\n this.Ic = this.$c = this.Aa = 0;\n this.D = new Ae();\n this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n this.Jc = wa(8, Wb);\n this.ia = 0;\n new F();\n this.pb = wa(4, ze);\n this.Pa = new xe();\n this.Bd = this.kc = 0;\n this.Ac = [];\n this.Bc = 0;\n this.zc = [0, 0, 0, 0];\n this.Gd = Array(new Ic());\n this.Hd = 0;\n this.rb = Array(new Hc());\n this.sb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.oc = [];\n this.pc = 0;\n this.sa = [];\n this.ta = 0;\n this.qa = [];\n this.ra = 0;\n this.Ha = [];\n this.B = this.R = this.Ia = 0;\n this.Ec = [];\n this.M = this.ja = this.Vb = this.Fc = 0;\n this.ya = Array(new Kb());\n this.L = this.aa = 0;\n this.gd = Ed([4, 2], Xa);\n this.ga = null;\n this.Fa = [];\n this.Cc = this.qc = this.P = 0;\n this.Gb = [];\n this.Uc = 0;\n this.mb = [];\n this.nb = 0;\n this.rc = [];\n this.Ga = this.Vc = 0;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function Oa() {\n this.T = this.U = this.ka = this.height = this.width = 0;\n this.y = [];\n this.f = [];\n this.ea = [];\n this.Rc = this.fa = this.W = this.N = this.O = 0;\n this.ma = \"void\";\n this.put = \"VP8IoPutHook\";\n this.ac = \"VP8IoSetupHook\";\n this.bc = \"VP8IoTeardownHook\";\n this.ha = this.Kb = 0;\n this.data = [];\n this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n this.F = [];\n this.J = 0;\n }\n function Ce() {\n var a = new Be();\n null != a &&\n ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n return a;\n }\n function T(a, b, c) {\n 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n return 0;\n }\n function Jc(a, b, c) {\n return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n }\n function Kc(a, b) {\n if (null == a) return 0;\n a.a = 0;\n a.sc = \"OK\";\n if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n var c = b.data;\n var d = b.w;\n var e = b.ha;\n if (4 > e) return T(a, 7, \"Truncated header.\");\n var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n var g = a.Od;\n g.Rb = !(f & 1);\n g.td = (f >> 1) & 7;\n g.yd = (f >> 4) & 1;\n g.ub = f >> 5;\n if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n d += 3;\n e -= 3;\n var h = a.Kc;\n if (g.Rb) {\n if (7 > e) return T(a, 7, \"cannot parse picture header\");\n if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n h.Td = c[d + 4] >> 6;\n h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n h.Ud = c[d + 6] >> 6;\n d += 7;\n e -= 7;\n a.za = (h.c + 15) >> 4;\n a.Ub = (h.i + 15) >> 4;\n b.width = h.c;\n b.height = h.i;\n b.Da = 0;\n b.j = 0;\n b.v = 0;\n b.va = b.width;\n b.o = b.height;\n b.da = 0;\n b.ib = b.width;\n b.hb = b.height;\n b.U = b.width;\n b.T = b.height;\n f = a.Pa;\n M(f.jb, 0, 255, f.jb.length);\n f = a.Qa;\n x(null != f);\n f.Cb = 0;\n f.Bb = 0;\n f.Fb = 1;\n M(f.Zb, 0, 0, f.Zb.length);\n M(f.Lb, 0, 0, f.Lb);\n }\n if (g.ub > e) return T(a, 7, \"bad partition length\");\n f = a.m;\n ma(f, c, d, g.ub);\n d += g.ub;\n e -= g.ub;\n g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n h = a.Qa;\n var k = a.Pa,\n l;\n x(null != f);\n x(null != h);\n h.Cb = G(f);\n if (h.Cb) {\n h.Bb = G(f);\n if (G(f)) {\n h.Fb = G(f);\n for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n }\n if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n } else h.Bb = 0;\n if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n h = a.ed;\n h.zd = G(f);\n h.Tb = na(f, 6);\n h.wb = na(f, 3);\n h.Pc = G(f);\n if (h.Pc && G(f)) {\n for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n }\n a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n l = d;\n var m = e;\n e = l;\n d = l + m;\n h = m;\n a.Xb = (1 << na(a.m, 2)) - 1;\n k = a.Xb;\n if (m < 3 * k) c = 7;\n else {\n l += 3 * k;\n h -= 3 * k;\n for (m = 0; m < k; ++m) {\n var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n n > h && (n = h);\n ma(a.Jc[+m], c, l, n);\n l += n;\n h -= n;\n e += 3;\n }\n ma(a.Jc[+k], c, l, h);\n c = l < d ? 0 : 5;\n }\n if (0 != c) return T(a, c, \"cannot parse partitions\");\n l = a.m;\n c = na(l, 7);\n e = G(l) ? ca(l, 4) : 0;\n d = G(l) ? ca(l, 4) : 0;\n h = G(l) ? ca(l, 4) : 0;\n k = G(l) ? ca(l, 4) : 0;\n l = G(l) ? ca(l, 4) : 0;\n m = a.Qa;\n for (n = 0; 4 > n; ++n) {\n if (m.Cb) {\n var r = m.Zb[n];\n m.Fb || (r += c);\n } else if (0 < n) {\n a.pb[n] = a.pb[0];\n continue;\n } else r = c;\n var q = a.pb[n];\n q.Sc[0] = Lb[ga(r + e, 127)];\n q.Sc[1] = Mb[ga(r + 0, 127)];\n q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n 8 > q.Eb[1] && (q.Eb[1] = 8);\n q.Qc[0] = Lb[ga(r + k, 117)];\n q.Qc[1] = Mb[ga(r + l, 127)];\n q.lc = r + l;\n }\n if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n G(f);\n g = a.Pa;\n for (c = 0; 4 > c; ++c) {\n for (e = 0; 8 > e; ++e)\n for (d = 0; 3 > d; ++d)\n for (h = 0; 11 > h; ++h)\n (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n (g.Wc[c][e].Yb[d][h] = k);\n for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n }\n a.kc = G(f);\n a.kc && (a.Bd = na(f, 8));\n return (a.cb = 1);\n }\n function De(a, b, c, d, e, f, g) {\n var h = b[e].Yb[c];\n for (c = 0; 16 > e; ++e) {\n if (!K(a, h[c + 0])) return e;\n for (; !K(a, h[c + 1]); )\n if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n var k = b[e + 1].Yb;\n if (K(a, h[c + 2])) {\n var l = a,\n m = h,\n n = c;\n var r = 0;\n if (K(l, m[n + 3]))\n if (K(l, m[n + 6])) {\n h = 0;\n r = K(l, m[n + 8]);\n m = K(l, m[n + 9 + r]);\n n = 2 * r + m;\n r = 0;\n for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n r += 3 + (8 << n);\n } else\n K(l, m[n + 7])\n ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n : (r = 5 + K(l, 159));\n else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n h = k[2];\n } else (r = 1), (h = k[1]);\n k = g + Ie[e];\n l = a;\n 0 > l.b && Qa(l);\n var m = l.b,\n n = l.Ca >> 1,\n q = (n - (l.I >> m)) >> 31;\n --l.b;\n l.Ca += q;\n l.Ca |= 1;\n l.I -= ((n + 1) & q) << m;\n f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n }\n return 16;\n }\n function Lc(a) {\n var b = a.rb[a.sb - 1];\n b.la = 0;\n b.Na = 0;\n M(a.zc, 0, 0, a.zc.length);\n a.ja = 0;\n }\n function Je(a, b) {\n for (a.M = 0; a.M < a.Va; ++a.M) {\n var c = a.Jc[a.M & a.Xb],\n d = a.m,\n e = a,\n f;\n for (f = 0; f < e.za; ++f) {\n var g = d;\n var h = e;\n var k = h.Ac,\n l = h.Bc + 4 * f,\n m = h.zc,\n n = h.ya[h.aa + f];\n h.Qa.Bb\n ? (n.$b = K(g, h.Pa.jb[0])\n ? 2 + K(g, h.Pa.jb[2])\n : K(g, h.Pa.jb[1]))\n : (n.$b = 0);\n h.kc && (n.Ad = K(g, h.Bd));\n n.Za = !K(g, 145) + 0;\n if (n.Za) {\n var r = n.Ob,\n q = 0;\n for (h = 0; 4 > h; ++h) {\n var t = m[0 + h];\n var v;\n for (v = 0; 4 > v; ++v) {\n t = Ke[k[l + v]][t];\n for (var p = Mc[K(g, t[0])]; 0 < p; )\n p = Mc[2 * p + K(g, t[p])];\n t = -p;\n k[l + v] = t;\n }\n I(r, q, k, l, 4);\n q += 4;\n m[0 + h] = t;\n }\n } else\n (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n (n.Ob[0] = t),\n M(k, l, t, 4),\n M(m, 0, t, 4);\n n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n }\n if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n for (; a.ja < a.za; ++a.ja) {\n d = a;\n e = c;\n g = d.rb[d.sb - 1];\n k = d.rb[d.sb + d.ja];\n f = d.ya[d.aa + d.ja];\n if ((l = d.kc ? f.Ad : 0))\n (g.la = k.la = 0),\n f.Za || (g.Na = k.Na = 0),\n (f.Hc = 0),\n (f.Gc = 0),\n (f.ia = 0);\n else {\n var u,\n w,\n g = k,\n k = e,\n l = d.Pa.Xc,\n m = d.ya[d.aa + d.ja],\n n = d.pb[m.$b];\n h = m.ad;\n r = 0;\n q = d.rb[d.sb - 1];\n t = v = 0;\n M(h, r, 0, 384);\n if (m.Za) {\n var y = 0;\n var A = l[3];\n } else {\n p = V(16);\n var E = g.Na + q.Na;\n E = oa(k, l[1], E, n.Eb, 0, p, 0);\n g.Na = q.Na = (0 < E) + 0;\n if (1 < E) Nc(p, 0, h, r);\n else {\n var B = (p[0] + 3) >> 3;\n for (p = 0; 256 > p; p += 16) h[r + p] = B;\n }\n y = 1;\n A = l[0];\n }\n var C = g.la & 15;\n var N = q.la & 15;\n for (p = 0; 4 > p; ++p) {\n var z = N & 1;\n for (B = w = 0; 4 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, A, E, n.Sc, y, h, r)),\n (z = E > y),\n (C = (C >> 1) | (z << 7)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 4;\n N = (N >> 1) | (z << 7);\n v = ((v << 8) | w) >>> 0;\n }\n A = C;\n y = N >> 4;\n for (u = 0; 4 > u; u += 2) {\n w = 0;\n C = g.la >> (4 + u);\n N = q.la >> (4 + u);\n for (p = 0; 2 > p; ++p) {\n z = N & 1;\n for (B = 0; 2 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n (z = 0 < E),\n (C = (C >> 1) | (z << 3)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 2;\n N = (N >> 1) | (z << 5);\n }\n t |= w << (4 * u);\n A |= (C << 4) << u;\n y |= (N & 240) << u;\n }\n g.la = A;\n q.la = y;\n m.Hc = v;\n m.Gc = t;\n m.ia = t & 43690 ? 0 : n.ia;\n l = !(v | t);\n }\n 0 < d.L &&\n ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n (d.wa[d.Y + d.ja].La |= !l));\n if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n }\n Lc(a);\n c = a;\n d = b;\n e = 1;\n f = c.D;\n g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n if (0 == c.Aa)\n a: {\n (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n w = c.D;\n f = w.Nb;\n t = Ya[c.L];\n g = t * c.R;\n k = (t / 2) * c.B;\n p = 16 * f * c.R;\n B = 8 * f * c.B;\n l = c.sa;\n m = c.ta - g + p;\n n = c.qa;\n h = c.ra - k + B;\n r = c.Ha;\n q = c.Ia - k + B;\n C = w.M;\n N = 0 == C;\n v = C >= c.Va - 1;\n 2 == c.Aa && Oc(c, w);\n if (w.uc)\n for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n var Q = E;\n y = w;\n A = z;\n var S = Q.D,\n D = S.Nb;\n u = Q.R;\n var S = S.wa[S.Y + y],\n F = Q.sa,\n H = Q.ta + 16 * D * u + 16 * y,\n J = S.dd,\n G = S.tc;\n if (0 != G)\n if ((x(3 <= G), 1 == Q.L))\n 0 < y && Pc(F, H, u, G + 4),\n S.La && Qc(F, H, u, G),\n 0 < A && Rc(F, H, u, G + 4),\n S.La && Sc(F, H, u, G);\n else {\n var L = Q.B,\n O = Q.qa,\n P = Q.ra + 8 * D * L + 8 * y,\n R = Q.Ha,\n Q = Q.Ia + 8 * D * L + 8 * y,\n D = S.ld;\n 0 < y &&\n (Tc(F, H, u, G + 4, J, D),\n Uc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n 0 < A &&\n (Xc(F, H, u, G + 4, J, D),\n Yc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n }\n }\n c.ia && alert(\"todo:DitherRow\");\n if (null != d.put) {\n w = 16 * C;\n C = 16 * (C + 1);\n N\n ? ((d.y = c.sa),\n (d.O = c.ta + p),\n (d.f = c.qa),\n (d.N = c.ra + B),\n (d.ea = c.Ha),\n (d.W = c.Ia + B))\n : ((w -= t),\n (d.y = l),\n (d.O = m),\n (d.f = n),\n (d.N = h),\n (d.ea = r),\n (d.W = q));\n v || (C -= t);\n C > d.o && (C = d.o);\n d.F = null;\n d.J = null;\n if (\n null != c.Fa &&\n 0 < c.Fa.length &&\n w < C &&\n ((d.J = Le(c, d, w, C - w)),\n (d.F = c.mb),\n null == d.F && 0 == d.F.length)\n ) {\n e = T(c, 3, \"Could not decode alpha data.\");\n break a;\n }\n w < d.j &&\n ((t = d.j - w),\n (w = d.j),\n x(!(t & 1)),\n (d.O += c.R * t),\n (d.N += c.B * (t >> 1)),\n (d.W += c.B * (t >> 1)),\n null != d.F && (d.J += d.width * t));\n w < C &&\n ((d.O += d.v),\n (d.N += d.v >> 1),\n (d.W += d.v >> 1),\n null != d.F && (d.J += d.v),\n (d.ka = w - d.j),\n (d.U = d.va - d.v),\n (d.T = C - w),\n (e = d.put(d)));\n }\n f + 1 != c.Ic ||\n v ||\n (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n }\n if (!e) return T(a, 6, \"Output aborted.\");\n }\n return 1;\n }\n function Me(a, b) {\n if (null == a) return 0;\n if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n if (!a.cb && !Kc(a, b)) return 0;\n x(a.cb);\n if (null == b.ac || b.ac(b)) {\n b.ob && (a.L = 0);\n var c = Ya[a.L];\n 2 == a.L\n ? ((a.yb = 0), (a.zb = 0))\n : ((a.yb = (b.v - c) >> 4),\n (a.zb = (b.j - c) >> 4),\n 0 > a.yb && (a.yb = 0),\n 0 > a.zb && (a.zb = 0));\n a.Va = (b.o + 15 + c) >> 4;\n a.Hb = (b.va + 15 + c) >> 4;\n a.Hb > a.za && (a.Hb = a.za);\n a.Va > a.Ub && (a.Va = a.Ub);\n if (0 < a.L) {\n var d = a.ed;\n for (c = 0; 4 > c; ++c) {\n var e;\n if (a.Qa.Cb) {\n var f = a.Qa.Lb[c];\n a.Qa.Fb || (f += d.Tb);\n } else f = d.Tb;\n for (e = 0; 1 >= e; ++e) {\n var g = a.gd[c][e],\n h = f;\n d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n h = 0 > h ? 0 : 63 < h ? 63 : h;\n if (0 < h) {\n var k = h;\n 0 < d.wb &&\n ((k = 4 < d.wb ? k >> 2 : k >> 1),\n k > 9 - d.wb && (k = 9 - d.wb));\n 1 > k && (k = 1);\n g.dd = k;\n g.tc = 2 * h + k;\n g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n } else g.tc = 0;\n g.La = e;\n }\n }\n }\n c = 0;\n } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n if ((c = 0 == c)) {\n if (c) {\n a.$c = 0;\n 0 < a.Aa || (a.Ic = Ne);\n b: {\n c = a.Ic;\n var k = a.za,\n d = 4 * k,\n l = 32 * k,\n m = k + 1,\n n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n r = (2 == a.Aa ? 2 : 1) * k;\n e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n g = d + 832 + e + f;\n if (g != g) c = 0;\n else {\n if (g > a.Vb) {\n a.Vb = 0;\n a.Ec = V(g);\n a.Fc = 0;\n if (null == a.Ec) {\n c = T(a, 1, \"no memory during frame initialization.\");\n break b;\n }\n a.Vb = g;\n }\n g = a.Ec;\n h = a.Fc;\n a.Ac = g;\n a.Bc = h;\n h += d;\n a.Gd = wa(l, Ic);\n a.Hd = 0;\n a.rb = wa(m + 1, Hc);\n a.sb = 1;\n a.wa = n ? wa(n, Xa) : null;\n a.Y = 0;\n a.D.Nb = 0;\n a.D.wa = a.wa;\n a.D.Y = a.Y;\n 0 < a.Aa && (a.D.Y += k);\n x(!0);\n a.oc = g;\n a.pc = h;\n h += 832;\n a.ya = wa(r, Kb);\n a.aa = 0;\n a.D.ya = a.ya;\n a.D.aa = a.aa;\n 2 == a.Aa && (a.D.aa += k);\n a.R = 16 * k;\n a.B = 8 * k;\n l = Ya[a.L];\n k = l * a.R;\n l = (l / 2) * a.B;\n a.sa = g;\n a.ta = h + k;\n a.qa = a.sa;\n a.ra = a.ta + 16 * c * a.R + l;\n a.Ha = a.qa;\n a.Ia = a.ra + 8 * c * a.B + l;\n a.$c = 0;\n h += e;\n a.mb = f ? g : null;\n a.nb = f ? h : null;\n x(h + f <= a.Fc + a.Vb);\n Lc(a);\n M(a.Ac, a.Bc, 0, d);\n c = 1;\n }\n }\n if (c) {\n b.ka = 0;\n b.y = a.sa;\n b.O = a.ta;\n b.f = a.qa;\n b.N = a.ra;\n b.ea = a.Ha;\n b.Vd = a.Ia;\n b.fa = a.R;\n b.Rc = a.B;\n b.F = null;\n b.J = 0;\n if (!ad) {\n for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n for (c = -1020; 1020 >= c; ++c)\n cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n for (c = -112; 112 >= c; ++c)\n dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n for (c = -255; 510 >= c; ++c)\n ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n ad = 1;\n }\n Nc = Oe;\n Za = Pe;\n Nb = Qe;\n pa = Re;\n Ob = Se;\n fd = Te;\n Xc = Ue;\n Tc = Ve;\n Yc = We;\n Uc = Xe;\n Zc = Ye;\n Vc = Ze;\n $c = $e;\n Wc = af;\n Rc = gd;\n Pc = hd;\n Sc = bf;\n Qc = cf;\n W[0] = df;\n W[1] = ef;\n W[2] = ff;\n W[3] = gf;\n W[4] = hf;\n W[5] = jf;\n W[6] = kf;\n W[7] = lf;\n W[8] = mf;\n W[9] = nf;\n Y[0] = of;\n Y[1] = pf;\n Y[2] = qf;\n Y[3] = rf;\n Y[4] = sf;\n Y[5] = tf;\n Y[6] = uf;\n ka[0] = vf;\n ka[1] = wf;\n ka[2] = xf;\n ka[3] = yf;\n ka[4] = zf;\n ka[5] = Af;\n ka[6] = Bf;\n c = 1;\n } else c = 0;\n }\n c && (c = Je(a, b));\n null != b.bc && b.bc(b);\n c &= 1;\n }\n if (!c) return 0;\n a.cb = 0;\n return c;\n }\n function qa(a, b, c, d, e) {\n e = a[b + c + 32 * d] + (e >> 3);\n a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n }\n function kb(a, b, c, d, e, f) {\n qa(a, b, 0, c, d + e);\n qa(a, b, 1, c, d + f);\n qa(a, b, 2, c, d - f);\n qa(a, b, 3, c, d - e);\n }\n function da(a) {\n return ((20091 * a) >> 16) + a;\n }\n function id(a, b, c, d) {\n var e = 0,\n f;\n var g = V(16);\n for (f = 0; 4 > f; ++f) {\n var h = a[b + 0] + a[b + 8];\n var k = a[b + 0] - a[b + 8];\n var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n g[e + 0] = h + m;\n g[e + 1] = k + l;\n g[e + 2] = k - l;\n g[e + 3] = h - m;\n e += 4;\n b++;\n }\n for (f = e = 0; 4 > f; ++f)\n (a = g[e + 0] + 4),\n (h = a + g[e + 8]),\n (k = a - g[e + 8]),\n (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n qa(c, d, 0, 0, h + m),\n qa(c, d, 1, 0, k + l),\n qa(c, d, 2, 0, k - l),\n qa(c, d, 3, 0, h - m),\n e++,\n (d += 32);\n }\n function Te(a, b, c, d) {\n var e = a[b + 0] + 4,\n f = (35468 * a[b + 4]) >> 16,\n g = da(a[b + 4]),\n h = (35468 * a[b + 1]) >> 16;\n a = da(a[b + 1]);\n kb(c, d, 0, e + g, a, h);\n kb(c, d, 1, e + f, a, h);\n kb(c, d, 2, e - f, a, h);\n kb(c, d, 3, e - g, a, h);\n }\n function Pe(a, b, c, d, e) {\n id(a, b, c, d);\n e && id(a, b + 16, c, d + 4);\n }\n function Qe(a, b, c, d) {\n Za(a, b + 0, c, d, 1);\n Za(a, b + 32, c, d + 128, 1);\n }\n function Re(a, b, c, d) {\n a = a[b + 0] + 4;\n var e;\n for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n }\n function Se(a, b, c, d) {\n a[b + 0] && pa(a, b + 0, c, d);\n a[b + 16] && pa(a, b + 16, c, d + 4);\n a[b + 32] && pa(a, b + 32, c, d + 128);\n a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n }\n function Oe(a, b, c, d) {\n var e = V(16),\n f;\n for (f = 0; 4 > f; ++f) {\n var g = a[b + 0 + f] + a[b + 12 + f];\n var h = a[b + 4 + f] + a[b + 8 + f];\n var k = a[b + 4 + f] - a[b + 8 + f];\n var l = a[b + 0 + f] - a[b + 12 + f];\n e[0 + f] = g + h;\n e[8 + f] = g - h;\n e[4 + f] = l + k;\n e[12 + f] = l - k;\n }\n for (f = 0; 4 > f; ++f)\n (a = e[0 + 4 * f] + 3),\n (g = a + e[3 + 4 * f]),\n (h = e[1 + 4 * f] + e[2 + 4 * f]),\n (k = e[1 + 4 * f] - e[2 + 4 * f]),\n (l = a - e[3 + 4 * f]),\n (c[d + 0] = (g + h) >> 3),\n (c[d + 16] = (l + k) >> 3),\n (c[d + 32] = (g - h) >> 3),\n (c[d + 48] = (l - k) >> 3),\n (d += 64);\n }\n function Pb(a, b, c) {\n var d = b - 32,\n e = R,\n f = 255 - a[d - 1],\n g;\n for (g = 0; g < c; ++g) {\n var h = e,\n k = f + a[b - 1],\n l;\n for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n b += 32;\n }\n }\n function ef(a, b) {\n Pb(a, b, 4);\n }\n function wf(a, b) {\n Pb(a, b, 8);\n }\n function pf(a, b) {\n Pb(a, b, 16);\n }\n function qf(a, b) {\n var c;\n for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n }\n function rf(a, b) {\n var c;\n for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n }\n function $a(a, b, c) {\n var d;\n for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n }\n function of(a, b) {\n var c = 16,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n $a(c >> 5, a, b);\n }\n function sf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n $a(c >> 4, a, b);\n }\n function tf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n $a(c >> 4, a, b);\n }\n function uf(a, b) {\n $a(128, a, b);\n }\n function z(a, b, c) {\n return (a + 2 * b + c + 2) >> 2;\n }\n function ff(a, b) {\n var c = b - 32,\n c = new Uint8Array([\n z(a[c - 1], a[c + 0], a[c + 1]),\n z(a[c + 0], a[c + 1], a[c + 2]),\n z(a[c + 1], a[c + 2], a[c + 3]),\n z(a[c + 2], a[c + 3], a[c + 4])\n ]),\n d;\n for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n }\n function gf(a, b) {\n var c = a[b - 1],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n ra(a, b + 32, 16843009 * z(c, d, e));\n ra(a, b + 64, 16843009 * z(d, e, f));\n ra(a, b + 96, 16843009 * z(e, f, f));\n }\n function df(a, b) {\n var c = 4,\n d;\n for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n c >>= 3;\n for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n }\n function hf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n a[b + 3 + 0] = z(l, k, h);\n }\n function kf(a, b) {\n var c = a[b + 1 - 32],\n d = a[b + 2 - 32],\n e = a[b + 3 - 32],\n f = a[b + 4 - 32],\n g = a[b + 5 - 32],\n h = a[b + 6 - 32],\n k = a[b + 7 - 32];\n a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, k);\n }\n function jf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n a[b + 3 + 0] = (k + l + 1) >> 1;\n a[b + 0 + 96] = z(e, d, c);\n a[b + 0 + 64] = z(d, c, f);\n a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n a[b + 3 + 32] = z(h, k, l);\n }\n function lf(a, b) {\n var c = a[b + 0 - 32],\n d = a[b + 1 - 32],\n e = a[b + 2 - 32],\n f = a[b + 3 - 32],\n g = a[b + 4 - 32],\n h = a[b + 5 - 32],\n k = a[b + 6 - 32],\n l = a[b + 7 - 32];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n a[b + 0 + 32] = z(c, d, e);\n a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 3 + 64] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, l);\n }\n function nf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n a[b + 1 + 0] = z(c, d, e);\n a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n b + 2 + 96\n ] = a[b + 3 + 96] = f;\n }\n function mf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96],\n g = a[b - 1 - 32],\n h = a[b + 0 - 32],\n k = a[b + 1 - 32],\n l = a[b + 2 - 32];\n a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n a[b + 0 + 96] = (f + e + 1) >> 1;\n a[b + 3 + 0] = z(h, k, l);\n a[b + 2 + 0] = z(g, h, k);\n a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n a[b + 1 + 96] = z(f, e, d);\n }\n function xf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n }\n function yf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n }\n function lb(a, b, c) {\n var d;\n for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n }\n function vf(a, b) {\n var c = 8,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n lb(c >> 4, a, b);\n }\n function Af(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n lb(c >> 3, a, b);\n }\n function zf(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n lb(c >> 3, a, b);\n }\n function Bf(a, b) {\n lb(128, a, b);\n }\n function ab(a, b, c) {\n var d = a[b - c],\n e = a[b + 0],\n f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n g = mb[112 + ((f + 4) >> 3)];\n a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n a[b + 0] = R[255 + e - g];\n }\n function jd(a, b, c, d) {\n var e = a[b + 0],\n f = a[b + c];\n return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n }\n function kd(a, b, c, d) {\n return (\n 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n );\n }\n function ld(a, b, c, d, e) {\n var f = a[b - 3 * c],\n g = a[b - 2 * c],\n h = a[b - c],\n k = a[b + 0],\n l = a[b + c],\n m = a[b + 2 * c],\n n = a[b + 3 * c];\n return 4 * U[255 + h - k] + U[255 + g - l] > d\n ? 0\n : U[255 + a[b - 4 * c] - f] <= e &&\n U[255 + f - g] <= e &&\n U[255 + g - h] <= e &&\n U[255 + n - m] <= e &&\n U[255 + m - l] <= e &&\n U[255 + l - k] <= e;\n }\n function gd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n }\n function hd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n }\n function bf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n }\n function cf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n }\n function ea(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - 2 * m],\n r = k[l - m],\n q = k[l + 0],\n t = k[l + m],\n v = k[l + 2 * m],\n p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n u = (27 * p + 63) >> 7,\n w = (18 * p + 63) >> 7,\n p = (9 * p + 63) >> 7;\n k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n k[l - 2 * m] = R[255 + n + w];\n k[l - m] = R[255 + r + u];\n k[l + 0] = R[255 + q - u];\n k[l + m] = R[255 + t - w];\n k[l + 2 * m] = R[255 + v - p];\n }\n b += d;\n }\n }\n function Fa(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - m],\n r = k[l + 0],\n q = k[l + m],\n t = 3 * (r - n),\n v = mb[112 + ((t + 4) >> 3)],\n t = mb[112 + ((t + 3) >> 3)],\n p = (v + 1) >> 1;\n k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n k[l - m] = R[255 + n + t];\n k[l + 0] = R[255 + r - v];\n k[l + m] = R[255 + q - p];\n }\n b += d;\n }\n }\n function Ue(a, b, c, d, e, f) {\n ea(a, b, c, 1, 16, d, e, f);\n }\n function Ve(a, b, c, d, e, f) {\n ea(a, b, 1, c, 16, d, e, f);\n }\n function Ye(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n }\n function Ze(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n }\n function We(a, b, c, d, e, f, g, h) {\n ea(a, b, e, 1, 8, f, g, h);\n ea(c, d, e, 1, 8, f, g, h);\n }\n function Xe(a, b, c, d, e, f, g, h) {\n ea(a, b, 1, e, 8, f, g, h);\n ea(c, d, 1, e, 8, f, g, h);\n }\n function $e(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n }\n function af(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4, 1, e, 8, f, g, h);\n Fa(c, d + 4, 1, e, 8, f, g, h);\n }\n function Cf() {\n this.ba = new Cb();\n this.ec = [];\n this.cc = [];\n this.Mc = [];\n this.Dc = this.Nc = this.dc = this.fc = 0;\n this.Oa = new Ud();\n this.memory = 0;\n this.Ib = \"OutputFunc\";\n this.Jb = \"OutputAlphaFunc\";\n this.Nd = \"OutputRowFunc\";\n }\n function md() {\n this.data = [];\n this.offset = this.kd = this.ha = this.w = 0;\n this.na = [];\n this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n }\n function Df() {\n this.nc = this.Ea = this.b = this.hc = 0;\n this.K = [];\n this.w = 0;\n }\n function Ef() {\n this.ua = 0;\n this.Wa = new ac();\n this.vb = new ac();\n this.md = this.xc = this.wc = 0;\n this.vc = [];\n this.Wb = 0;\n this.Ya = new Ub();\n this.yc = new O();\n }\n function je() {\n this.xb = this.a = 0;\n this.l = new Oa();\n this.ca = new Cb();\n this.V = [];\n this.Ba = 0;\n this.Ta = [];\n this.Ua = 0;\n this.m = new Ra();\n this.Pb = 0;\n this.wd = new Ra();\n this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n this.s = new Ef();\n this.ab = 0;\n this.gc = wa(4, Df);\n this.Oc = 0;\n }\n function Ff() {\n this.Lc = this.Z = this.$a = this.i = this.c = 0;\n this.l = new Oa();\n this.ic = 0;\n this.ca = [];\n this.tb = 0;\n this.qd = null;\n this.rd = 0;\n }\n function Rb(a, b, c, d, e, f, g) {\n a = null == a ? 0 : a[b + 0];\n for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n }\n function Gf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h;\n for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n }\n }\n function Hf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h = a[b + 0],\n k = h,\n l = h,\n m;\n for (m = 0; m < g; ++m)\n (h = a[b + m]),\n (k = l + h - k),\n (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n (k = h),\n (e[f + m] = l);\n }\n }\n function Le(a, b, c, d) {\n var e = b.width,\n f = b.o;\n x(null != a && null != b);\n if (0 > c || 0 >= d || c + d > f) return null;\n if (!a.Cc) {\n if (null == a.ga) {\n a.ga = new Ff();\n var g;\n (g = null == a.ga) ||\n ((g = b.width * b.o),\n x(0 == a.Gb.length),\n (a.Gb = V(g)),\n (a.Uc = 0),\n null == a.Gb\n ? (g = 0)\n : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n (g = !g));\n if (!g) {\n g = a.ga;\n var h = a.Fa,\n k = a.P,\n l = a.qc,\n m = a.mb,\n n = a.nb,\n r = k + 1,\n q = l - 1,\n t = g.l;\n x(null != h && null != m && null != b);\n ia[0] = null;\n ia[1] = Rb;\n ia[2] = Gf;\n ia[3] = Hf;\n g.ca = m;\n g.tb = n;\n g.c = b.width;\n g.i = b.height;\n x(0 < g.c && 0 < g.i);\n if (1 >= l) b = 0;\n else if (\n ((g.$a = (h[k + 0] >> 0) & 3),\n (g.Z = (h[k + 0] >> 2) & 3),\n (g.Lc = (h[k + 0] >> 4) & 3),\n (k = (h[k + 0] >> 6) & 3),\n 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n )\n b = 0;\n else if (\n ((t.put = kc),\n (t.ac = gc),\n (t.bc = lc),\n (t.ma = g),\n (t.width = b.width),\n (t.height = b.height),\n (t.Da = b.Da),\n (t.v = b.v),\n (t.va = b.va),\n (t.j = b.j),\n (t.o = b.o),\n g.$a)\n )\n b: {\n x(1 == g.$a), (b = Bc());\n c: for (;;) {\n if (null == b) {\n b = 0;\n break b;\n }\n x(null != g);\n g.mc = b;\n b.c = g.c;\n b.i = g.i;\n b.l = g.l;\n b.l.ma = g;\n b.l.width = g.c;\n b.l.height = g.i;\n b.a = 0;\n cb(b.m, h, r, q);\n if (!rb(g.c, g.i, 1, b, null)) break c;\n 1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n ? ((g.ic = 1),\n (h = b.c * b.i),\n (b.Ta = null),\n (b.Ua = 0),\n (b.V = V(h)),\n (b.Ba = 0),\n null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n : ((g.ic = 0), (b = Ec(b, g.c)));\n if (!b) break c;\n b = 1;\n break b;\n }\n g.mc = null;\n b = 0;\n }\n else b = q >= g.c * g.i;\n g = !b;\n }\n if (g) return null;\n 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n }\n x(null != a.ga);\n x(c + d <= f);\n a: {\n h = a.ga;\n b = h.c;\n f = h.l.o;\n if (0 == h.$a) {\n r = a.rc;\n q = a.Vc;\n t = a.Fa;\n k = a.P + 1 + c * b;\n l = a.mb;\n m = a.nb + c * b;\n x(k <= a.P + a.qc);\n if (0 != h.Z)\n for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n ia[h.Z](r, q, t, k, l, m, b),\n (r = l),\n (q = m),\n (m += b),\n (k += b);\n else\n for (g = 0; g < d; ++g)\n I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n a.rc = r;\n a.Vc = q;\n } else {\n x(null != h.mc);\n b = c + d;\n g = h.mc;\n x(null != g);\n x(b <= g.i);\n if (g.C >= b) b = 1;\n else if ((h.ic || Aa(), h.ic)) {\n var h = g.V,\n r = g.Ba,\n q = g.c,\n v = g.i,\n t = 1,\n k = g.$ / q,\n l = g.$ % q,\n m = g.m,\n n = g.s,\n p = g.$,\n u = q * v,\n w = q * b,\n y = n.wc,\n A = p < w ? ha(n, l, k) : null;\n x(p <= u);\n x(b <= v);\n x(yc(n));\n c: for (;;) {\n for (; !m.h && p < w; ) {\n l & y || (A = ha(n, l, k));\n x(null != A);\n Sa(m);\n v = ua(A.G[0], A.H[0], m);\n if (256 > v)\n (h[r + p] = v),\n ++p,\n ++l,\n l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n else if (280 > v) {\n var v = ib(v - 256, m);\n var E = ua(A.G[4], A.H[4], m);\n Sa(m);\n E = ib(E, m);\n E = nc(q, E);\n if (p >= E && u - p >= v) {\n var B;\n for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n } else {\n t = 0;\n break c;\n }\n p += v;\n for (l += v; l >= q; )\n (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n p < w && l & y && (A = ha(n, l, k));\n } else {\n t = 0;\n break c;\n }\n x(m.h == db(m));\n }\n Ib(g, k > b ? b : k);\n break c;\n }\n !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n b = t;\n } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n if (!b) {\n d = 0;\n break a;\n }\n }\n c + d >= f && (a.Cc = 1);\n d = 1;\n }\n if (!d) return null;\n if (\n a.Cc &&\n ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n )\n return alert(\"todo:WebPDequantizeLevels\"), null;\n }\n return a.nb + c * e;\n }\n function If(a, b, c, d, e, f) {\n for (; 0 < e--; ) {\n var g = a,\n h = b + (c ? 1 : 0),\n k = a,\n l = b + (c ? 0 : 3),\n m;\n for (m = 0; m < d; ++m) {\n var n = k[l + 4 * m];\n 255 != n &&\n ((n *= 32897),\n (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n }\n b += f;\n }\n }\n function Jf(a, b, c, d, e) {\n for (; 0 < d--; ) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + 2 * f + 0],\n h = a[b + 2 * f + 1],\n k = h & 15,\n l = 4369 * k,\n h = (((h & 240) | (h >> 4)) * l) >> 16;\n a[b + 2 * f + 0] =\n (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n a[b + 2 * f + 1] = (h & 240) | k;\n }\n b += e;\n }\n }\n function Kf(a, b, c, d, e, f, g, h) {\n var k = 255,\n l,\n m;\n for (m = 0; m < e; ++m) {\n for (l = 0; l < d; ++l) {\n var n = a[b + l];\n f[g + 4 * l] = n;\n k &= n;\n }\n b += c;\n g += h;\n }\n return 255 != k;\n }\n function Lf(a, b, c, d, e) {\n var f;\n for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n }\n function Aa() {\n za = If;\n vc = Jf;\n fc = Kf;\n Fc = Lf;\n }\n function va(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n var d,\n E = (y - 1) >> 1;\n var B = h[k + 0] | (l[m + 0] << 16);\n var C = n[r + 0] | (q[t + 0] << 16);\n x(null != a);\n var z = (3 * B + C + 131074) >> 2;\n b(a[e + 0], z & 255, z >> 16, v, p);\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + 0], z & 255, z >> 16, u, w));\n for (d = 1; d <= E; ++d) {\n var D = h[k + d] | (l[m + d] << 16);\n var G = n[r + d] | (q[t + d] << 16);\n var F = B + D + C + G + 524296;\n var H = (F + 2 * (D + C)) >> 3;\n F = (F + 2 * (B + G)) >> 3;\n z = (H + B) >> 1;\n B = (F + D) >> 1;\n b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n null != f &&\n ((z = (F + C) >> 1),\n (B = (H + G) >> 1),\n b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n B = D;\n C = G;\n }\n y & 1 ||\n ((z = (3 * B + C + 131074) >> 2),\n b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n };\n }\n function ic() {\n P[Ca] = Mf;\n P[Ua] = nd;\n P[tc] = Nf;\n P[Va] = od;\n P[ya] = pd;\n P[Db] = qd;\n P[wc] = Of;\n P[zb] = nd;\n P[Ab] = od;\n P[Ja] = pd;\n P[Bb] = qd;\n }\n function Sb(a) {\n return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n }\n function bb(a, b) {\n return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n }\n function nb(a, b, c) {\n return Sb(\n ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n );\n }\n function Pa(a, b) {\n return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n }\n function Ga(a, b, c, d, e) {\n d[e + 0] = bb(a, c);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = Pa(a, b);\n }\n function Tb(a, b, c, d, e) {\n d[e + 0] = Pa(a, b);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = bb(a, c);\n }\n function sd(a, b, c, d, e) {\n var f = nb(a, b, c);\n b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n d[e + 1] = b;\n }\n function td(a, b, c, d, e) {\n var f = (Pa(a, b) & 240) | 15;\n d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n d[e + 1] = f;\n }\n function ud(a, b, c, d, e) {\n d[e + 0] = 255;\n Ga(a, b, c, d, e + 1);\n }\n function vd(a, b, c, d, e) {\n Tb(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function wd(a, b, c, d, e) {\n Ga(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function la(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n) {\n for (var d = m + (n & -2) * c; m != d; )\n b(a[e + 0], f[g + 0], h[k + 0], l, m),\n b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n (e += 2),\n ++g,\n ++k,\n (m += 2 * c);\n n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n };\n }\n function xd(a, b, c) {\n return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n }\n function yd(a, b, c, d, e) {\n switch (a >>> 30) {\n case 3:\n Za(b, c, d, e, 0);\n break;\n case 2:\n fd(b, c, d, e);\n break;\n case 1:\n pa(b, c, d, e);\n }\n }\n function Oc(a, b) {\n var c,\n d,\n e = b.M,\n f = b.Nb,\n g = a.oc,\n h = a.pc + 40,\n k = a.oc,\n l = a.pc + 584,\n m = a.oc,\n n = a.pc + 600;\n for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n for (c = 0; 8 > c; ++c)\n (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n 0 < e\n ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n : (M(g, h - 32 - 1, 127, 21),\n M(k, l - 32 - 1, 127, 9),\n M(m, n - 32 - 1, 127, 9));\n for (d = 0; d < a.za; ++d) {\n var r = b.ya[b.aa + d];\n if (0 < d) {\n for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n for (c = -1; 8 > c; ++c)\n I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n }\n var q = a.Gd,\n t = a.Hd + d,\n v = r.ad,\n p = r.Hc;\n 0 < e &&\n (I(g, h - 32, q[t].y, 0, 16),\n I(k, l - 32, q[t].f, 0, 8),\n I(m, n - 32, q[t].ea, 0, 8));\n if (r.Za) {\n var u = g;\n var w = h - 32 + 16;\n 0 < e &&\n (d >= a.za - 1\n ? M(u, w, q[t].y[15], 4)\n : I(u, w, q[t + 1].y, 0, 4));\n for (c = 0; 4 > c; c++)\n u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n for (c = 0; 16 > c; ++c, p <<= 2)\n (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n c = r.Gc;\n u = xd(d, e, r.Dd);\n ka[u](k, l);\n ka[u](m, n);\n r = c >> 0;\n p = v;\n u = k;\n w = l;\n r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n c >>= 8;\n r = m;\n p = n;\n c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n e < a.Ub - 1 &&\n (I(q[t].y, 0, g, h + 480, 16),\n I(q[t].f, 0, k, l + 224, 8),\n I(q[t].ea, 0, m, n + 224, 8));\n c = 8 * f * a.B;\n q = a.sa;\n t = a.ta + 16 * d + 16 * f * a.R;\n v = a.qa;\n r = a.ra + 8 * d + c;\n p = a.Ha;\n u = a.Ia + 8 * d + c;\n for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n for (c = 0; 8 > c; ++c)\n I(v, r + c * a.B, k, l + 32 * c, 8),\n I(p, u + c * a.B, m, n + 32 * c, 8);\n }\n }\n function Ad(a, b, c, d, e, f, g, h, k) {\n var l = [0],\n m = [0],\n n = 0,\n r = null != k ? k.kd : 0,\n q = null != k ? k : new md();\n if (null == a || 12 > c) return 7;\n q.data = a;\n q.w = b;\n q.ha = c;\n b = [b];\n c = [c];\n q.gb = [q.gb];\n a: {\n var t = b;\n var v = c;\n var p = q.gb;\n x(null != a);\n x(null != v);\n x(null != p);\n p[0] = 0;\n if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n if (fa(a, t[0] + 8, \"WEBP\")) {\n p = 3;\n break a;\n }\n var u = Ha(a, t[0] + 4);\n if (12 > u || 4294967286 < u) {\n p = 3;\n break a;\n }\n if (r && u > v[0] - 8) {\n p = 7;\n break a;\n }\n p[0] = u;\n t[0] += 12;\n v[0] -= 12;\n }\n p = 0;\n }\n if (0 != p) return p;\n u = 0 < q.gb[0];\n for (c = c[0]; ; ) {\n t = [0];\n n = [n];\n a: {\n var w = a;\n v = b;\n p = c;\n var y = n,\n A = l,\n z = m,\n B = t;\n y[0] = 0;\n if (8 > p[0]) p = 7;\n else {\n if (!fa(w, v[0], \"VP8X\")) {\n if (10 != Ha(w, v[0] + 4)) {\n p = 3;\n break a;\n }\n if (18 > p[0]) {\n p = 7;\n break a;\n }\n var C = Ha(w, v[0] + 8);\n var D = 1 + Yb(w, v[0] + 12);\n w = 1 + Yb(w, v[0] + 15);\n if (2147483648 <= D * w) {\n p = 3;\n break a;\n }\n null != B && (B[0] = C);\n null != A && (A[0] = D);\n null != z && (z[0] = w);\n v[0] += 18;\n p[0] -= 18;\n y[0] = 1;\n }\n p = 0;\n }\n }\n n = n[0];\n t = t[0];\n if (0 != p) return p;\n v = !!(t & 2);\n if (!u && n) return 3;\n null != f && (f[0] = !!(t & 16));\n null != g && (g[0] = v);\n null != h && (h[0] = 0);\n g = l[0];\n t = m[0];\n if (n && v && null == k) {\n p = 0;\n break;\n }\n if (4 > c) {\n p = 7;\n break;\n }\n if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n c = [c];\n q.na = [q.na];\n q.P = [q.P];\n q.Sa = [q.Sa];\n a: {\n C = a;\n p = b;\n u = c;\n var y = q.gb,\n A = q.na,\n z = q.P,\n B = q.Sa;\n D = 22;\n x(null != C);\n x(null != u);\n w = p[0];\n var F = u[0];\n x(null != A);\n x(null != B);\n A[0] = null;\n z[0] = null;\n for (B[0] = 0; ; ) {\n p[0] = w;\n u[0] = F;\n if (8 > F) {\n p = 7;\n break a;\n }\n var G = Ha(C, w + 4);\n if (4294967286 < G) {\n p = 3;\n break a;\n }\n var H = (8 + G + 1) & -2;\n D += H;\n if (0 < y && D > y) {\n p = 3;\n break a;\n }\n if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n p = 0;\n break a;\n }\n if (F[0] < H) {\n p = 7;\n break a;\n }\n fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n w += H;\n F -= H;\n }\n }\n c = c[0];\n q.na = q.na[0];\n q.P = q.P[0];\n q.Sa = q.Sa[0];\n if (0 != p) break;\n }\n c = [c];\n q.Ja = [q.Ja];\n q.xa = [q.xa];\n a: if (\n ((y = a),\n (p = b),\n (u = c),\n (A = q.gb[0]),\n (z = q.Ja),\n (B = q.xa),\n (C = p[0]),\n (w = !fa(y, C, \"VP8 \")),\n (D = !fa(y, C, \"VP8L\")),\n x(null != y),\n x(null != u),\n x(null != z),\n x(null != B),\n 8 > u[0])\n )\n p = 7;\n else {\n if (w || D) {\n y = Ha(y, C + 4);\n if (12 <= A && y > A - 12) {\n p = 3;\n break a;\n }\n if (r && y > u[0] - 8) {\n p = 7;\n break a;\n }\n z[0] = y;\n p[0] += 8;\n u[0] -= 8;\n B[0] = D;\n } else\n (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n (z[0] = u[0]);\n p = 0;\n }\n c = c[0];\n q.Ja = q.Ja[0];\n q.xa = q.xa[0];\n b = b[0];\n if (0 != p) break;\n if (4294967286 < q.Ja) return 3;\n null == h || v || (h[0] = q.xa ? 2 : 1);\n g = [g];\n t = [t];\n if (q.xa) {\n if (5 > c) {\n p = 7;\n break;\n }\n h = g;\n r = t;\n v = f;\n null == a || 5 > c\n ? (a = 0)\n : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n ? ((u = [0]),\n (y = [0]),\n (A = [0]),\n (z = new Ra()),\n cb(z, a, b, c),\n mc(z, u, y, A)\n ? (null != h && (h[0] = u[0]),\n null != r && (r[0] = y[0]),\n null != v && (v[0] = A[0]),\n (a = 1))\n : (a = 0))\n : (a = 0);\n } else {\n if (10 > c) {\n p = 7;\n break;\n }\n h = t;\n null == a || 10 > c || !Jc(a, b + 3, c - 3)\n ? (a = 0)\n : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n r & 1 ||\n 3 < ((r >> 1) & 7) ||\n !((r >> 4) & 1) ||\n r >> 5 >= q.Ja ||\n !v ||\n !a\n ? (a = 0)\n : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n }\n if (!a) return 3;\n g = g[0];\n t = t[0];\n if (n && (l[0] != g || m[0] != t)) return 3;\n null != k &&\n ((k[0] = q),\n (k.offset = b - k.w),\n x(4294967286 > b - k.w),\n x(k.offset == k.ha - c));\n break;\n }\n return 0 == p || (7 == p && n && null == k)\n ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n null != d && (d[0] = g),\n null != e && (e[0] = t),\n 0)\n : p;\n }\n function hc(a, b, c) {\n var d = b.width,\n e = b.height,\n f = 0,\n g = 0,\n h = d,\n k = e;\n b.Da = null != a && 0 < a.Da;\n if (\n b.Da &&\n ((h = a.cd),\n (k = a.bd),\n (f = a.v),\n (g = a.j),\n 11 > c || ((f &= -2), (g &= -2)),\n 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n )\n return 0;\n b.v = f;\n b.j = g;\n b.va = f + h;\n b.o = g + k;\n b.U = h;\n b.T = k;\n b.da = null != a && 0 < a.da;\n if (b.da) {\n c = [a.ib];\n f = [a.hb];\n if (!bc(h, k, c, f)) return 0;\n b.ib = c[0];\n b.hb = f[0];\n }\n b.ob = null != a && a.ob;\n b.Kb = null == a || !a.Sd;\n b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n return 1;\n }\n function Bd(a) {\n if (null == a) return 2;\n if (11 > a.S) {\n var b = a.f.RGBA;\n b.fb += (a.height - 1) * b.A;\n b.A = -b.A;\n } else\n (b = a.f.kb),\n (a = a.height),\n (b.O += (a - 1) * b.fa),\n (b.fa = -b.fa),\n (b.N += ((a - 1) >> 1) * b.Ab),\n (b.Ab = -b.Ab),\n (b.W += ((a - 1) >> 1) * b.Db),\n (b.Db = -b.Db),\n null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n return 0;\n }\n function Cd(a, b, c, d) {\n if (null == d || 0 >= a || 0 >= b) return 2;\n if (null != c) {\n if (c.Da) {\n var e = c.cd,\n f = c.bd,\n g = c.v & -2,\n h = c.j & -2;\n if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n return 2;\n a = e;\n b = f;\n }\n if (c.da) {\n e = [c.ib];\n f = [c.hb];\n if (!bc(a, b, e, f)) return 2;\n a = e[0];\n b = f[0];\n }\n }\n d.width = a;\n d.height = b;\n a: {\n var k = d.width;\n var l = d.height;\n a = d.S;\n if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n else {\n if (0 >= d.Rd && null == d.sd) {\n var g = (f = e = b = 0),\n h = k * Dd[a],\n m = h * l;\n 11 > a ||\n ((b = (k + 1) / 2),\n (f = ((l + 1) / 2) * b),\n 12 == a && ((e = k), (g = e * l)));\n l = V(m + 2 * f + g);\n if (null == l) {\n a = 1;\n break a;\n }\n d.sd = l;\n 11 > a\n ? ((k = d.f.RGBA),\n (k.eb = l),\n (k.fb = 0),\n (k.A = h),\n (k.size = m))\n : ((k = d.f.kb),\n (k.y = l),\n (k.O = 0),\n (k.fa = h),\n (k.Fd = m),\n (k.f = l),\n (k.N = 0 + m),\n (k.Ab = b),\n (k.Cd = f),\n (k.ea = l),\n (k.W = 0 + m + f),\n (k.Db = b),\n (k.Ed = f),\n 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n (k.Tc = g),\n (k.lb = e));\n }\n b = 1;\n e = d.S;\n f = d.width;\n g = d.height;\n if (e >= Ca && 13 > e)\n if (11 > e)\n (a = d.f.RGBA),\n (h = Math.abs(a.A)),\n (b &= h * (g - 1) + f <= a.size),\n (b &= h >= f * Dd[e]),\n (b &= null != a.eb);\n else {\n a = d.f.kb;\n h = (f + 1) / 2;\n m = (g + 1) / 2;\n k = Math.abs(a.fa);\n var l = Math.abs(a.Ab),\n n = Math.abs(a.Db),\n r = Math.abs(a.lb),\n q = r * (g - 1) + f;\n b &= k * (g - 1) + f <= a.Fd;\n b &= l * (m - 1) + h <= a.Cd;\n b &= n * (m - 1) + h <= a.Ed;\n b = b & (k >= f) & (l >= h) & (n >= h);\n b &= null != a.y;\n b &= null != a.f;\n b &= null != a.ea;\n 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n }\n else b = 0;\n a = b ? 0 : 2;\n }\n }\n if (0 != a) return a;\n null != c && c.fd && (a = Bd(d));\n return a;\n }\n var xb = 64,\n Hd = [\n 0,\n 1,\n 3,\n 7,\n 15,\n 31,\n 63,\n 127,\n 255,\n 511,\n 1023,\n 2047,\n 4095,\n 8191,\n 16383,\n 32767,\n 65535,\n 131071,\n 262143,\n 524287,\n 1048575,\n 2097151,\n 4194303,\n 8388607,\n 16777215\n ],\n Gd = 24,\n ob = 32,\n Xb = 8,\n Id = [\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7\n ];\n X(\"Predictor0\", \"PredictorAdd0\");\n self.Predictor0 = function() {\n return 4278190080;\n };\n self.Predictor1 = function(a) {\n return a;\n };\n self.Predictor2 = function(a, b, c) {\n return b[c + 0];\n };\n self.Predictor3 = function(a, b, c) {\n return b[c + 1];\n };\n self.Predictor4 = function(a, b, c) {\n return b[c - 1];\n };\n self.Predictor5 = function(a, b, c) {\n return aa(aa(a, b[c + 1]), b[c + 0]);\n };\n self.Predictor6 = function(a, b, c) {\n return aa(a, b[c - 1]);\n };\n self.Predictor7 = function(a, b, c) {\n return aa(a, b[c + 0]);\n };\n self.Predictor8 = function(a, b, c) {\n return aa(b[c - 1], b[c + 0]);\n };\n self.Predictor9 = function(a, b, c) {\n return aa(b[c + 0], b[c + 1]);\n };\n self.Predictor10 = function(a, b, c) {\n return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n };\n self.Predictor11 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return 0 >=\n Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n Ia(d & 255, a & 255, b & 255)\n ? d\n : a;\n };\n self.Predictor12 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return (\n ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n 16) |\n (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n sa((a & 255) + (d & 255) - (b & 255))) >>>\n 0\n );\n };\n self.Predictor13 = function(a, b, c) {\n var d = b[c - 1];\n a = aa(a, b[c + 0]);\n return (\n ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n 0\n );\n };\n var ee = self.PredictorAdd0;\n self.PredictorAdd1 = cc;\n X(\"Predictor2\", \"PredictorAdd2\");\n X(\"Predictor3\", \"PredictorAdd3\");\n X(\"Predictor4\", \"PredictorAdd4\");\n X(\"Predictor5\", \"PredictorAdd5\");\n X(\"Predictor6\", \"PredictorAdd6\");\n X(\"Predictor7\", \"PredictorAdd7\");\n X(\"Predictor8\", \"PredictorAdd8\");\n X(\"Predictor9\", \"PredictorAdd9\");\n X(\"Predictor10\", \"PredictorAdd10\");\n X(\"Predictor11\", \"PredictorAdd11\");\n X(\"Predictor12\", \"PredictorAdd12\");\n X(\"Predictor13\", \"PredictorAdd13\");\n var fe = self.PredictorAdd2;\n ec(\n \"ColorIndexInverseTransform\",\n \"MapARGB\",\n \"32b\",\n function(a) {\n return (a >> 8) & 255;\n },\n function(a) {\n return a;\n }\n );\n ec(\n \"VP8LColorIndexInverseTransformAlpha\",\n \"MapAlpha\",\n \"8b\",\n function(a) {\n return a;\n },\n function(a) {\n return (a >> 8) & 255;\n }\n );\n var rc = self.ColorIndexInverseTransform,\n ke = self.MapARGB,\n he = self.VP8LColorIndexInverseTransformAlpha,\n le = self.MapAlpha,\n pc,\n qc = (self.VP8LPredictorsAdd = []);\n qc.length = 16;\n (self.VP8LPredictors = []).length = 16;\n (self.VP8LPredictorsAdd_C = []).length = 16;\n (self.VP8LPredictors_C = []).length = 16;\n var Fb,\n sc,\n Gb,\n Hb,\n xc,\n uc,\n bd = V(511),\n cd = V(2041),\n dd = V(225),\n ed = V(767),\n ad = 0,\n Qb = cd,\n mb = dd,\n R = ed,\n U = bd,\n Ca = 0,\n Ua = 1,\n tc = 2,\n Va = 3,\n ya = 4,\n Db = 5,\n wc = 6,\n zb = 7,\n Ab = 8,\n Ja = 9,\n Bb = 10,\n pe = [2, 3, 7],\n oe = [3, 3, 11],\n Dc = [280, 256, 256, 256, 40],\n qe = [0, 1, 1, 1, 0],\n ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n de = [\n 24,\n 7,\n 23,\n 25,\n 40,\n 6,\n 39,\n 41,\n 22,\n 26,\n 38,\n 42,\n 56,\n 5,\n 55,\n 57,\n 21,\n 27,\n 54,\n 58,\n 37,\n 43,\n 72,\n 4,\n 71,\n 73,\n 20,\n 28,\n 53,\n 59,\n 70,\n 74,\n 36,\n 44,\n 88,\n 69,\n 75,\n 52,\n 60,\n 3,\n 87,\n 89,\n 19,\n 29,\n 86,\n 90,\n 35,\n 45,\n 68,\n 76,\n 85,\n 91,\n 51,\n 61,\n 104,\n 2,\n 103,\n 105,\n 18,\n 30,\n 102,\n 106,\n 34,\n 46,\n 84,\n 92,\n 67,\n 77,\n 101,\n 107,\n 50,\n 62,\n 120,\n 1,\n 119,\n 121,\n 83,\n 93,\n 17,\n 31,\n 100,\n 108,\n 66,\n 78,\n 118,\n 122,\n 33,\n 47,\n 117,\n 123,\n 49,\n 63,\n 99,\n 109,\n 82,\n 94,\n 0,\n 116,\n 124,\n 65,\n 79,\n 16,\n 32,\n 98,\n 110,\n 48,\n 115,\n 125,\n 81,\n 95,\n 64,\n 114,\n 126,\n 97,\n 111,\n 80,\n 113,\n 127,\n 96,\n 112\n ],\n me = [\n 2954,\n 2956,\n 2958,\n 2962,\n 2970,\n 2986,\n 3018,\n 3082,\n 3212,\n 3468,\n 3980,\n 5004\n ],\n ie = 8,\n Lb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 17,\n 18,\n 19,\n 20,\n 20,\n 21,\n 21,\n 22,\n 22,\n 23,\n 23,\n 24,\n 25,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70,\n 71,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 79,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 91,\n 93,\n 95,\n 96,\n 98,\n 100,\n 101,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 118,\n 122,\n 124,\n 126,\n 128,\n 130,\n 132,\n 134,\n 136,\n 138,\n 140,\n 143,\n 145,\n 148,\n 151,\n 154,\n 157\n ],\n Mb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 60,\n 62,\n 64,\n 66,\n 68,\n 70,\n 72,\n 74,\n 76,\n 78,\n 80,\n 82,\n 84,\n 86,\n 88,\n 90,\n 92,\n 94,\n 96,\n 98,\n 100,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 119,\n 122,\n 125,\n 128,\n 131,\n 134,\n 137,\n 140,\n 143,\n 146,\n 149,\n 152,\n 155,\n 158,\n 161,\n 164,\n 167,\n 170,\n 173,\n 177,\n 181,\n 185,\n 189,\n 193,\n 197,\n 201,\n 205,\n 209,\n 213,\n 217,\n 221,\n 225,\n 229,\n 234,\n 239,\n 245,\n 249,\n 254,\n 259,\n 264,\n 269,\n 274,\n 279,\n 284\n ],\n oa = null,\n He = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n ],\n Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n Fe = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ]\n ],\n Ke = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36]\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111, 32, 75, 80],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22]\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22, 64, 171, 36, 225, 114],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51]\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82]\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73, 154],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47]\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98]\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26]\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160, 1],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40]\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128]\n ],\n [\n [190, 80, 35, 99, 180, 80, 126, 54, 45],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24]\n ]\n ],\n Ee = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ]\n ],\n Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n Nc,\n Y = [],\n W = [],\n ka = [],\n Za,\n fd,\n Nb,\n pa,\n Ob,\n Xc,\n Tc,\n Yc,\n Uc,\n Zc,\n Vc,\n $c,\n Wc,\n Rc,\n Pc,\n Sc,\n Qc,\n re = 1,\n Cc = 2,\n ia = [],\n za,\n vc,\n fc,\n Fc,\n P = [];\n va(\"UpsampleRgbLinePair\", Ga, 3);\n va(\"UpsampleBgrLinePair\", Tb, 3);\n va(\"UpsampleRgbaLinePair\", wd, 4);\n va(\"UpsampleBgraLinePair\", vd, 4);\n va(\"UpsampleArgbLinePair\", ud, 4);\n va(\"UpsampleRgba4444LinePair\", td, 2);\n va(\"UpsampleRgb565LinePair\", sd, 2);\n var Mf = self.UpsampleRgbLinePair,\n Nf = self.UpsampleBgrLinePair,\n nd = self.UpsampleRgbaLinePair,\n od = self.UpsampleBgraLinePair,\n pd = self.UpsampleArgbLinePair,\n qd = self.UpsampleRgba4444LinePair,\n Of = self.UpsampleRgb565LinePair,\n Wa = 16,\n Ba = 1 << (Wa - 1),\n ta = -227,\n Eb = 482,\n rd = 6,\n Pf = (256 << rd) - 1,\n jc = 0,\n Yd = V(256),\n ae = V(256),\n $d = V(256),\n Zd = V(256),\n be = V(Eb - ta),\n ce = V(Eb - ta);\n la(\"YuvToRgbRow\", Ga, 3);\n la(\"YuvToBgrRow\", Tb, 3);\n la(\"YuvToRgbaRow\", wd, 4);\n la(\"YuvToBgraRow\", vd, 4);\n la(\"YuvToArgbRow\", ud, 4);\n la(\"YuvToRgba4444Row\", td, 2);\n la(\"YuvToRgb565Row\", sd, 2);\n var zd = [\n 0,\n 4,\n 8,\n 12,\n 128,\n 132,\n 136,\n 140,\n 256,\n 260,\n 264,\n 268,\n 384,\n 388,\n 392,\n 396\n ],\n Ya = [0, 2, 8],\n Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n Ne = 1;\n this.WebPDecodeRGBA = function(a, b, c, d, e) {\n var f = Ua;\n var g = new Cf(),\n h = new Cb();\n g.ba = h;\n h.S = f;\n h.width = [h.width];\n h.height = [h.height];\n var k = h.width;\n var l = h.height,\n m = new Td();\n if (null == m || null == a) var n = 2;\n else\n x(null != m),\n (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n 0 != n\n ? (k = 0)\n : (null != k && (k[0] = m.width[0]),\n null != l && (l[0] = m.height[0]),\n (k = 1));\n if (k) {\n h.width = h.width[0];\n h.height = h.height[0];\n null != d && (d[0] = h.width);\n null != e && (e[0] = h.height);\n b: {\n d = new Oa();\n e = new md();\n e.data = a;\n e.w = b;\n e.ha = c;\n e.kd = 1;\n b = [0];\n x(null != e);\n a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n (0 == a || 7 == a) && b[0] && (a = 4);\n b = a;\n if (0 == b) {\n x(null != g);\n d.data = e.data;\n d.w = e.w + e.offset;\n d.ha = e.ha - e.offset;\n d.put = kc;\n d.ac = gc;\n d.bc = lc;\n d.ma = g;\n if (e.xa) {\n a = Bc();\n if (null == a) {\n g = 1;\n break b;\n }\n if (te(a, d)) {\n b = Cd(d.width, d.height, g.Oa, g.ba);\n if ((d = 0 == b)) {\n c: {\n d = a;\n d: for (;;) {\n if (null == d) {\n d = 0;\n break c;\n }\n x(null != d.s.yc);\n x(null != d.s.Ya);\n x(0 < d.s.Wb);\n c = d.l;\n x(null != c);\n e = c.ma;\n x(null != e);\n if (0 != d.xb) {\n d.ca = e.ba;\n d.tb = e.tb;\n x(null != d.ca);\n if (!hc(e.Oa, c, Va)) {\n d.a = 2;\n break d;\n }\n if (!Ec(d, c.width)) break d;\n if (c.da) break d;\n (c.da || hb(d.ca.S)) && Aa();\n 11 > d.ca.S ||\n (alert(\"todo:WebPInitConvertARGBToYUV\"),\n null != d.ca.f.kb.F && Aa());\n if (\n d.Pb &&\n 0 < d.s.ua &&\n null == d.s.vb.X &&\n !Zb(d.s.vb, d.s.Wa.Xa)\n ) {\n d.a = 1;\n break d;\n }\n d.xb = 0;\n }\n if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n e.Dc = d.Ma;\n d = 1;\n break c;\n }\n x(0 != d.a);\n d = 0;\n }\n d = !d;\n }\n d && (b = a.a);\n } else b = a.a;\n } else {\n a = new Ce();\n if (null == a) {\n g = 1;\n break b;\n }\n a.Fa = e.na;\n a.P = e.P;\n a.qc = e.Sa;\n if (Kc(a, d)) {\n if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n a.Aa = 0;\n c = g.Oa;\n e = a;\n x(null != e);\n if (null != c) {\n k = c.Md;\n k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n if (0 < k) {\n for (l = m = 0; 4 > l; ++l)\n (n = e.pb[l]),\n 12 > n.lc &&\n (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n (m |= n.ia);\n m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n }\n e.Ga = c.Id;\n 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n }\n Me(a, d) || (b = a.a);\n }\n } else b = a.a;\n }\n 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n }\n g = b;\n }\n f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n } else f = null;\n return f;\n };\n var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n };\n new _WebPDecoder();\n\n /** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n function memcmp(data, data_off, str, size) {\n for (var i = 0; i < size; i++)\n if (data[data_off + i] != str.charCodeAt(i)) return true;\n return false;\n }\n\n function GetTag(data, data_off) {\n var str = \"\";\n for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n return str;\n }\n\n function GetLE16(data, data_off) {\n return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n }\n\n function GetLE24(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16)) >>>\n 0\n );\n }\n\n function GetLE32(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16) |\n (data[data_off + 3] << 24)) >>>\n 0\n );\n }\n\n function WebPRiffParser(src, src_off) {\n var imagearray = {};\n var i = 0;\n var alpha_chunk = false;\n var alpha_size = 0;\n var alpha_offset = 0;\n imagearray[\"frames\"] = [];\n if (memcmp(src, src_off, \"RIFF\", 4)) return;\n src_off += 4;\n var riff_size = GetLE32(src, src_off) + 8;\n src_off += 8;\n\n while (src_off < src.length) {\n var fourcc = GetTag(src, src_off);\n src_off += 4;\n\n var payload_size = GetLE32(src, src_off);\n src_off += 4;\n var payload_size_padded = payload_size + (payload_size & 1);\n\n switch (fourcc) {\n case \"VP8 \":\n case \"VP8L\":\n if (typeof imagearray[\"frames\"][i] === \"undefined\")\n imagearray[\"frames\"][i] = {};\n var obj = imagearray[\"frames\"][i];\n var height = [0];\n var width = [0];\n obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n obj[\"src_size\"] = alpha_size + payload_size + 8;\n //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n i++;\n if (alpha_chunk) {\n alpha_chunk = false;\n alpha_size = 0;\n alpha_offset = 0;\n }\n break;\n case \"VP8X\":\n var obj = (imagearray[\"header\"] = {});\n var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n var src_off_ = src_off + 4;\n var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n var canvas_height = (obj[\"canvas_height\"] =\n 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n break;\n case \"ALPH\":\n alpha_chunk = true;\n alpha_size = payload_size_padded + 8;\n alpha_offset = src_off - 8;\n break;\n\n case \"ANIM\":\n var obj = imagearray[\"header\"];\n var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n src_off_ = src_off + 4;\n\n var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n src_off_ += 2;\n break;\n case \"ANMF\":\n var offset_x = 0,\n offset_y = 0,\n width = 0,\n height = 0,\n duration = 0,\n blend = 0,\n dispose = 0,\n temp = 0;\n var obj = (imagearray[\"frames\"][i] = {});\n obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"duration\"] = duration = GetLE24(src, src_off);\n src_off += 3;\n temp = src[src_off++];\n obj[\"dispose\"] = dispose = temp & 1;\n obj[\"blend\"] = blend = (temp >> 1) & 1;\n break;\n default:\n }\n if (fourcc != \"ANMF\") src_off += payload_size_padded;\n }\n return imagearray;\n }\n\n var height = [0];\n var width = [0];\n var pixels = [];\n var webpdecoder = new _WebPDecoder();\n\n var response = imageData;\n var imagearray = WebPRiffParser(response, 0);\n imagearray[\"response\"] = response;\n imagearray[\"rgbaoutput\"] = true;\n imagearray[\"dataurl\"] = false;\n\n var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n if (header) {\n header[\"loop_counter\"] = header[\"loop_count\"];\n height = [header[\"canvas_height\"]];\n width = [header[\"canvas_width\"]];\n\n var blend = false;\n for (var f = 0; f < frames.length; f++)\n if (frames[f][\"blend\"] == 0) {\n blend = true;\n break;\n }\n }\n\n var frame = frames[0];\n var rgba = webpdecoder.WebPDecodeRGBA(\n response,\n frame[\"src_off\"],\n frame[\"src_size\"],\n width,\n height\n );\n frame[\"rgba\"] = rgba;\n frame[\"imgwidth\"] = width[0];\n frame[\"imgheight\"] = height[0];\n\n for (var i = 0; i < width[0] * height[0] * 4; i++) {\n pixels[i] = rgba[i];\n }\n\n this.width = width;\n this.height = height;\n this.data = pixels;\n return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n var reader = new WebPDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name processRGBA\n * @function\n *\n * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n * RGBA array data can be obtained from DOM canvas getImageData.\n * @ignore\n */\n jsPDFAPI.processRGBA = function(imageData, index, alias) {\n \"use strict\";\n\n var imagePixels = imageData.data;\n var length = imagePixels.length;\n // jsPDF takes alpha data separately so extract that.\n var rgbOut = new Uint8Array((length / 4) * 3);\n var alphaOut = new Uint8Array(length / 4);\n var outIndex = 0;\n var alphaIndex = 0;\n\n for (var i = 0; i < length; i += 4) {\n var r = imagePixels[i];\n var g = imagePixels[i + 1];\n var b = imagePixels[i + 2];\n var alpha = imagePixels[i + 3];\n rgbOut[outIndex++] = r;\n rgbOut[outIndex++] = g;\n rgbOut[outIndex++] = b;\n alphaOut[alphaIndex++] = alpha;\n }\n\n var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n return {\n alpha: alphaData,\n data: rgbData,\n index: index,\n alias: alias,\n colorSpace: \"DeviceRGB\",\n bitsPerComponent: 8,\n width: imageData.width,\n height: imageData.height\n };\n };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Add Language Tag to the generated PDF\n *\n * @name setLanguage\n * @function\n * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF()\n * doc.text(10, 10, 'This is a test')\n * doc.setLanguage(\"en-US\")\n * doc.save('english.pdf')\n */\n jsPDFAPI.setLanguage = function(langCode) {\n \"use strict\";\n\n var langCodes = {\n af: \"Afrikaans\",\n sq: \"Albanian\",\n ar: \"Arabic (Standard)\",\n \"ar-DZ\": \"Arabic (Algeria)\",\n \"ar-BH\": \"Arabic (Bahrain)\",\n \"ar-EG\": \"Arabic (Egypt)\",\n \"ar-IQ\": \"Arabic (Iraq)\",\n \"ar-JO\": \"Arabic (Jordan)\",\n \"ar-KW\": \"Arabic (Kuwait)\",\n \"ar-LB\": \"Arabic (Lebanon)\",\n \"ar-LY\": \"Arabic (Libya)\",\n \"ar-MA\": \"Arabic (Morocco)\",\n \"ar-OM\": \"Arabic (Oman)\",\n \"ar-QA\": \"Arabic (Qatar)\",\n \"ar-SA\": \"Arabic (Saudi Arabia)\",\n \"ar-SY\": \"Arabic (Syria)\",\n \"ar-TN\": \"Arabic (Tunisia)\",\n \"ar-AE\": \"Arabic (U.A.E.)\",\n \"ar-YE\": \"Arabic (Yemen)\",\n an: \"Aragonese\",\n hy: \"Armenian\",\n as: \"Assamese\",\n ast: \"Asturian\",\n az: \"Azerbaijani\",\n eu: \"Basque\",\n be: \"Belarusian\",\n bn: \"Bengali\",\n bs: \"Bosnian\",\n br: \"Breton\",\n bg: \"Bulgarian\",\n my: \"Burmese\",\n ca: \"Catalan\",\n ch: \"Chamorro\",\n ce: \"Chechen\",\n zh: \"Chinese\",\n \"zh-HK\": \"Chinese (Hong Kong)\",\n \"zh-CN\": \"Chinese (PRC)\",\n \"zh-SG\": \"Chinese (Singapore)\",\n \"zh-TW\": \"Chinese (Taiwan)\",\n cv: \"Chuvash\",\n co: \"Corsican\",\n cr: \"Cree\",\n hr: \"Croatian\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch (Standard)\",\n \"nl-BE\": \"Dutch (Belgian)\",\n en: \"English\",\n \"en-AU\": \"English (Australia)\",\n \"en-BZ\": \"English (Belize)\",\n \"en-CA\": \"English (Canada)\",\n \"en-IE\": \"English (Ireland)\",\n \"en-JM\": \"English (Jamaica)\",\n \"en-NZ\": \"English (New Zealand)\",\n \"en-PH\": \"English (Philippines)\",\n \"en-ZA\": \"English (South Africa)\",\n \"en-TT\": \"English (Trinidad & Tobago)\",\n \"en-GB\": \"English (United Kingdom)\",\n \"en-US\": \"English (United States)\",\n \"en-ZW\": \"English (Zimbabwe)\",\n eo: \"Esperanto\",\n et: \"Estonian\",\n fo: \"Faeroese\",\n fj: \"Fijian\",\n fi: \"Finnish\",\n fr: \"French (Standard)\",\n \"fr-BE\": \"French (Belgium)\",\n \"fr-CA\": \"French (Canada)\",\n \"fr-FR\": \"French (France)\",\n \"fr-LU\": \"French (Luxembourg)\",\n \"fr-MC\": \"French (Monaco)\",\n \"fr-CH\": \"French (Switzerland)\",\n fy: \"Frisian\",\n fur: \"Friulian\",\n gd: \"Gaelic (Scots)\",\n \"gd-IE\": \"Gaelic (Irish)\",\n gl: \"Galacian\",\n ka: \"Georgian\",\n de: \"German (Standard)\",\n \"de-AT\": \"German (Austria)\",\n \"de-DE\": \"German (Germany)\",\n \"de-LI\": \"German (Liechtenstein)\",\n \"de-LU\": \"German (Luxembourg)\",\n \"de-CH\": \"German (Switzerland)\",\n el: \"Greek\",\n gu: \"Gujurati\",\n ht: \"Haitian\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n is: \"Icelandic\",\n id: \"Indonesian\",\n iu: \"Inuktitut\",\n ga: \"Irish\",\n it: \"Italian (Standard)\",\n \"it-CH\": \"Italian (Switzerland)\",\n ja: \"Japanese\",\n kn: \"Kannada\",\n ks: \"Kashmiri\",\n kk: \"Kazakh\",\n km: \"Khmer\",\n ky: \"Kirghiz\",\n tlh: \"Klingon\",\n ko: \"Korean\",\n \"ko-KP\": \"Korean (North Korea)\",\n \"ko-KR\": \"Korean (South Korea)\",\n la: \"Latin\",\n lv: \"Latvian\",\n lt: \"Lithuanian\",\n lb: \"Luxembourgish\",\n mk: \"North Macedonia\",\n ms: \"Malay\",\n ml: \"Malayalam\",\n mt: \"Maltese\",\n mi: \"Maori\",\n mr: \"Marathi\",\n mo: \"Moldavian\",\n nv: \"Navajo\",\n ng: \"Ndonga\",\n ne: \"Nepali\",\n no: \"Norwegian\",\n nb: \"Norwegian (Bokmal)\",\n nn: \"Norwegian (Nynorsk)\",\n oc: \"Occitan\",\n or: \"Oriya\",\n om: \"Oromo\",\n fa: \"Persian\",\n \"fa-IR\": \"Persian/Iran\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n \"pt-BR\": \"Portuguese (Brazil)\",\n pa: \"Punjabi\",\n \"pa-IN\": \"Punjabi (India)\",\n \"pa-PK\": \"Punjabi (Pakistan)\",\n qu: \"Quechua\",\n rm: \"Rhaeto-Romanic\",\n ro: \"Romanian\",\n \"ro-MO\": \"Romanian (Moldavia)\",\n ru: \"Russian\",\n \"ru-MO\": \"Russian (Moldavia)\",\n sz: \"Sami (Lappish)\",\n sg: \"Sango\",\n sa: \"Sanskrit\",\n sc: \"Sardinian\",\n sd: \"Sindhi\",\n si: \"Singhalese\",\n sr: \"Serbian\",\n sk: \"Slovak\",\n sl: \"Slovenian\",\n so: \"Somani\",\n sb: \"Sorbian\",\n es: \"Spanish\",\n \"es-AR\": \"Spanish (Argentina)\",\n \"es-BO\": \"Spanish (Bolivia)\",\n \"es-CL\": \"Spanish (Chile)\",\n \"es-CO\": \"Spanish (Colombia)\",\n \"es-CR\": \"Spanish (Costa Rica)\",\n \"es-DO\": \"Spanish (Dominican Republic)\",\n \"es-EC\": \"Spanish (Ecuador)\",\n \"es-SV\": \"Spanish (El Salvador)\",\n \"es-GT\": \"Spanish (Guatemala)\",\n \"es-HN\": \"Spanish (Honduras)\",\n \"es-MX\": \"Spanish (Mexico)\",\n \"es-NI\": \"Spanish (Nicaragua)\",\n \"es-PA\": \"Spanish (Panama)\",\n \"es-PY\": \"Spanish (Paraguay)\",\n \"es-PE\": \"Spanish (Peru)\",\n \"es-PR\": \"Spanish (Puerto Rico)\",\n \"es-ES\": \"Spanish (Spain)\",\n \"es-UY\": \"Spanish (Uruguay)\",\n \"es-VE\": \"Spanish (Venezuela)\",\n sx: \"Sutu\",\n sw: \"Swahili\",\n sv: \"Swedish\",\n \"sv-FI\": \"Swedish (Finland)\",\n \"sv-SV\": \"Swedish (Sweden)\",\n ta: \"Tamil\",\n tt: \"Tatar\",\n te: \"Teluga\",\n th: \"Thai\",\n tig: \"Tigre\",\n ts: \"Tsonga\",\n tn: \"Tswana\",\n tr: \"Turkish\",\n tk: \"Turkmen\",\n uk: \"Ukrainian\",\n hsb: \"Upper Sorbian\",\n ur: \"Urdu\",\n ve: \"Venda\",\n vi: \"Vietnamese\",\n vo: \"Volapuk\",\n wa: \"Walloon\",\n cy: \"Welsh\",\n xh: \"Xhosa\",\n ji: \"Yiddish\",\n zu: \"Zulu\"\n };\n\n if (this.internal.languageSettings === undefined) {\n this.internal.languageSettings = {};\n this.internal.languageSettings.isSubscribed = false;\n }\n\n if (langCodes[langCode] !== undefined) {\n this.internal.languageSettings.languageCode = langCode;\n if (this.internal.languageSettings.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.write(\n \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n );\n });\n this.internal.languageSettings.isSubscribed = true;\n }\n }\n return this;\n };\n})(jsPDF.API);\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n \"use strict\";\n /**\n * Returns an array of length matching length of the 'word' string, with each\n * cell occupied by the width of the char in that position.\n *\n * @name getCharWidthsArray\n * @function\n * @param {string} text\n * @param {Object} options\n * @returns {Array}\n */\n var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n options = options || {};\n\n var activeFont = options.font || this.internal.getFont();\n var fontSize = options.fontSize || this.internal.getFontSize();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n\n var widths = options.widths\n ? options.widths\n : activeFont.metadata.Unicode.widths;\n var widthsFractionOf = widths.fof ? widths.fof : 1;\n var kerning = options.kerning\n ? options.kerning\n : activeFont.metadata.Unicode.kerning;\n var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n var doKerning = options.doKerning === false ? false : true;\n var kerningValue = 0;\n\n var i;\n var length = text.length;\n var char_code;\n var prior_char_code = 0; //for kerning\n var default_char_width = widths[0] || widthsFractionOf;\n var output = [];\n\n for (i = 0; i < length; i++) {\n char_code = text.charCodeAt(i);\n\n if (typeof activeFont.metadata.widthOfString === \"function\") {\n output.push(\n (activeFont.metadata.widthOfGlyph(\n activeFont.metadata.characterToGlyph(char_code)\n ) +\n charSpace * (1000 / fontSize) || 0) / 1000\n );\n } else {\n if (\n doKerning &&\n typeof kerning[char_code] === \"object\" &&\n !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n ) {\n kerningValue =\n kerning[char_code][prior_char_code] / kerningFractionOf;\n } else {\n kerningValue = 0;\n }\n output.push(\n (widths[char_code] || default_char_width) / widthsFractionOf +\n kerningValue\n );\n }\n prior_char_code = char_code;\n }\n\n return output;\n });\n\n /**\n * Returns a widths of string in a given font, if the font size is set as 1 point.\n *\n * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n * of the string will be that much.\n *\n * Multiply by font size to get actual width in *points*\n * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n *\n * @name getStringUnitWidth\n * @public\n * @function\n * @param {string} text\n * @param {string} options\n * @returns {number} result\n */\n var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n options = options || {};\n\n var fontSize = options.fontSize || this.internal.getFontSize();\n var font = options.font || this.internal.getFont();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n var result = 0;\n\n if (API.processArabic) {\n text = API.processArabic(text);\n }\n\n if (typeof font.metadata.widthOfString === \"function\") {\n result =\n font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n } else {\n result = getCharWidthsArray\n .apply(this, arguments)\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n }\n return result;\n });\n\n /**\n returns array of lines\n */\n var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n var answer = [];\n\n // 1st, chop off the piece that can fit on the hanging line.\n var i = 0,\n l = word.length,\n workingLen = 0;\n while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n workingLen += widths_array[i];\n i++;\n }\n // this is first line.\n answer.push(word.slice(0, i));\n\n // 2nd. Split the rest into maxLen pieces.\n var startOfLine = i;\n workingLen = 0;\n while (i !== l) {\n if (workingLen + widths_array[i] > maxLen) {\n answer.push(word.slice(startOfLine, i));\n workingLen = 0;\n startOfLine = i;\n }\n workingLen += widths_array[i];\n i++;\n }\n if (startOfLine !== i) {\n answer.push(word.slice(startOfLine, i));\n }\n\n return answer;\n };\n\n // Note, all sizing inputs for this function must be in \"font measurement units\"\n // By default, for PDF, it's \"point\".\n var splitParagraphIntoLines = function(text, maxlen, options) {\n // at this time works only on Western scripts, ones with space char\n // separating the words. Feel free to expand.\n\n if (!options) {\n options = {};\n }\n\n var line = [],\n lines = [line],\n line_length = options.textIndent || 0,\n separator_length = 0,\n current_word_length = 0,\n word,\n widths_array,\n words = text.split(\" \"),\n spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n i,\n l,\n tmp,\n lineIndent;\n\n if (options.lineIndent === -1) {\n lineIndent = words[0].length + 2;\n } else {\n lineIndent = options.lineIndent || 0;\n }\n if (lineIndent) {\n var pad = Array(lineIndent).join(\" \"),\n wrds = [];\n words.map(function(wrd) {\n wrd = wrd.split(/\\s*\\n/);\n if (wrd.length > 1) {\n wrds = wrds.concat(\n wrd.map(function(wrd, idx) {\n return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n })\n );\n } else {\n wrds.push(wrd[0]);\n }\n });\n words = wrds;\n lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n }\n\n for (i = 0, l = words.length; i < l; i++) {\n var force = 0;\n\n word = words[i];\n if (lineIndent && word[0] == \"\\n\") {\n word = word.substr(1);\n force = 1;\n }\n widths_array = getCharWidthsArray.apply(this, [word, options]);\n current_word_length = widths_array.reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n\n if (\n line_length + separator_length + current_word_length > maxlen ||\n force\n ) {\n if (current_word_length > maxlen) {\n // this happens when you have space-less long URLs for example.\n // we just chop these to size. We do NOT insert hiphens\n tmp = splitLongWord.apply(this, [\n word,\n widths_array,\n maxlen - (line_length + separator_length),\n maxlen\n ]);\n // first line we add to existing line object\n line.push(tmp.shift()); // it's ok to have extra space indicator there\n // last line we make into new line object\n line = [tmp.pop()];\n // lines in the middle we apped to lines object as whole lines\n while (tmp.length) {\n lines.push([tmp.shift()]); // single fragment occupies whole line\n }\n current_word_length = widths_array\n .slice(word.length - (line[0] ? line[0].length : 0))\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n } else {\n // just put it on a new line\n line = [word];\n }\n\n // now we attach new line to lines\n lines.push(line);\n line_length = current_word_length + lineIndent;\n separator_length = spaceCharWidth;\n } else {\n line.push(word);\n\n line_length += separator_length + current_word_length;\n separator_length = spaceCharWidth;\n }\n }\n\n var postProcess;\n if (lineIndent) {\n postProcess = function(ln, idx) {\n return (idx ? pad : \"\") + ln.join(\" \");\n };\n } else {\n postProcess = function(ln) {\n return ln.join(\" \");\n };\n }\n\n return lines.map(postProcess);\n };\n\n /**\n * Splits a given string into an array of strings. Uses 'size' value\n * (in measurement units declared as default for the jsPDF instance)\n * and the font's \"widths\" and \"Kerning\" tables, where available, to\n * determine display length of a given string for a given font.\n *\n * We use character's 100% of unit size (height) as width when Width\n * table or other default width is not available.\n *\n * @name splitTextToSize\n * @public\n * @function\n * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n * @param {Object} options Optional flags needed for chopper to do the right thing.\n * @returns {Array} array Array with strings chopped to size.\n */\n API.splitTextToSize = function(text, maxlen, options) {\n \"use strict\";\n\n options = options || {};\n\n var fsize = options.fontSize || this.internal.getFontSize(),\n newOptions = function(options) {\n var widths = {\n 0: 1\n },\n kerning = {};\n\n if (!options.widths || !options.kerning) {\n var f = this.internal.getFont(options.fontName, options.fontStyle),\n encoding = \"Unicode\";\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n // Actual JavaScript-native String's 16bit char codes used.\n // no multi-byte logic here\n\n if (f.metadata[encoding]) {\n return {\n widths: f.metadata[encoding].widths || widths,\n kerning: f.metadata[encoding].kerning || kerning\n };\n } else {\n return {\n font: f.metadata,\n fontSize: this.internal.getFontSize(),\n charSpace: this.internal.getCharSpace()\n };\n }\n } else {\n return {\n widths: options.widths,\n kerning: options.kerning\n };\n }\n }.call(this, options);\n\n // first we split on end-of-line chars\n var paragraphs;\n if (Array.isArray(text)) {\n paragraphs = text;\n } else {\n paragraphs = String(text).split(/\\r?\\n/);\n }\n\n // now we convert size (max length of line) into \"font size units\"\n // at present time, the \"font size unit\" is always 'point'\n // 'proportional' means, \"in proportion to font size\"\n var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n // this may change in the future?\n // until then, proportional_maxlen is likely to be in 'points'\n\n // If first line is to be indented (shorter or longer) than maxLen\n // we indicate that by using CSS-style \"text-indent\" option.\n // here it's in font units too (which is likely 'points')\n // it can be negative (which makes the first line longer than maxLen)\n newOptions.textIndent = options.textIndent\n ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n : 0;\n newOptions.lineIndent = options.lineIndent;\n\n var i,\n l,\n output = [];\n for (i = 0, l = paragraphs.length; i < l; i++) {\n output = output.concat(\n splitParagraphIntoLines.apply(this, [\n paragraphs[i],\n fontUnit_maxLen,\n newOptions\n ])\n );\n }\n\n return output;\n };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n \"use strict\";\n API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n var decoded = \"0123456789abcdef\",\n encoded = \"klmnopqrstuvwxyz\",\n mappingUncompress = {},\n mappingCompress = {};\n\n for (var i = 0; i < encoded.length; i++) {\n mappingUncompress[encoded[i]] = decoded[i];\n mappingCompress[decoded[i]] = encoded[i];\n }\n\n var hex = function(value) {\n return \"0x\" + parseInt(value, 10).toString(16);\n };\n\n var compress = (API.__fontmetrics__.compress = function(data) {\n var vals = [\"{\"];\n var value, keystring, valuestring, numberprefix;\n\n for (var key in data) {\n value = data[key];\n\n if (!isNaN(parseInt(key, 10))) {\n key = parseInt(key, 10);\n keystring = hex(key).slice(2);\n keystring =\n keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n } else {\n keystring = \"'\" + key + \"'\";\n }\n\n if (typeof value == \"number\") {\n if (value < 0) {\n valuestring = hex(value).slice(3);\n numberprefix = \"-\";\n } else {\n valuestring = hex(value).slice(2);\n numberprefix = \"\";\n }\n valuestring =\n numberprefix +\n valuestring.slice(0, -1) +\n mappingCompress[valuestring.slice(-1)];\n } else {\n if (typeof value === \"object\") {\n valuestring = compress(value);\n } else {\n throw new Error(\n \"Don't know what to do with value type \" + typeof value + \".\"\n );\n }\n }\n vals.push(keystring + valuestring);\n }\n vals.push(\"}\");\n return vals.join(\"\");\n });\n\n /**\n * Uncompresses data compressed into custom, base16-like format.\n *\n * @public\n * @function\n * @param\n * @returns {Type}\n */\n var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n if (typeof data !== \"string\") {\n throw new Error(\"Invalid argument passed to uncompress.\");\n }\n\n var output = {},\n sign = 1,\n stringparts, // undef. will be [] in string mode\n activeobject = output,\n parentchain = [],\n parent_key_pair,\n keyparts = \"\",\n valueparts = \"\",\n key, // undef. will be Truthy when Key is resolved.\n datalen = data.length - 1, // stripping ending }\n ch;\n\n for (var i = 1; i < datalen; i += 1) {\n // - { } ' are special.\n\n ch = data[i];\n\n if (ch == \"'\") {\n if (stringparts) {\n // end of string mode\n key = stringparts.join(\"\");\n stringparts = undefined;\n } else {\n // start of string mode\n stringparts = [];\n }\n } else if (stringparts) {\n stringparts.push(ch);\n } else if (ch == \"{\") {\n // start of object\n parentchain.push([activeobject, key]);\n activeobject = {};\n key = undefined;\n } else if (ch == \"}\") {\n // end of object\n parent_key_pair = parentchain.pop();\n parent_key_pair[0][parent_key_pair[1]] = activeobject;\n key = undefined;\n activeobject = parent_key_pair[0];\n } else if (ch == \"-\") {\n sign = -1;\n } else {\n // must be number\n if (key === undefined) {\n if (mappingUncompress.hasOwnProperty(ch)) {\n keyparts += mappingUncompress[ch];\n key = parseInt(keyparts, 16) * sign;\n sign = +1;\n keyparts = \"\";\n } else {\n keyparts += ch;\n }\n } else {\n if (mappingUncompress.hasOwnProperty(ch)) {\n valueparts += mappingUncompress[ch];\n activeobject[key] = parseInt(valueparts, 16) * sign;\n sign = +1;\n key = undefined;\n valueparts = \"\";\n } else {\n valueparts += ch;\n }\n }\n }\n }\n return output;\n });\n\n // encoding = 'Unicode'\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n // Actual 16bit char codes used.\n // no multi-byte logic here\n\n // Unicode characters to WinAnsiEncoding:\n // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n // as well as give strings with some (supported by these fonts) Unicode characters and\n // these will be mapped to win cp1252\n // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n var encodingBlock = {\n codePages: [\"WinAnsiEncoding\"],\n WinAnsiEncoding: uncompress(\n \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n )\n };\n var encodings = {\n Unicode: {\n Courier: encodingBlock,\n \"Courier-Bold\": encodingBlock,\n \"Courier-BoldOblique\": encodingBlock,\n \"Courier-Oblique\": encodingBlock,\n Helvetica: encodingBlock,\n \"Helvetica-Bold\": encodingBlock,\n \"Helvetica-BoldOblique\": encodingBlock,\n \"Helvetica-Oblique\": encodingBlock,\n \"Times-Roman\": encodingBlock,\n \"Times-Bold\": encodingBlock,\n \"Times-BoldItalic\": encodingBlock,\n \"Times-Italic\": encodingBlock\n //\t, 'Symbol'\n //\t, 'ZapfDingbats'\n }\n };\n\n var fontMetrics = {\n Unicode: {\n // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n // width is 476/1000 or 47.6% of its height (regardless of font size)\n // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n \"Courier-Oblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-BoldItalic\": uncompress(\n \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n \"Helvetica-Bold\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-BoldOblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-Bold\": uncompress(\n \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n Symbol: uncompress(\n \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n ),\n Helvetica: uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n ),\n \"Helvetica-BoldOblique\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Times-Italic\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n ),\n \"Times-Roman\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n ),\n \"Helvetica-Oblique\": uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n )\n }\n };\n\n /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n API.events.push([\n \"addFont\",\n function(data) {\n var font = data.font;\n\n var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n if (metrics) {\n font.metadata[\"Unicode\"] = {};\n font.metadata[\"Unicode\"].widths = metrics.widths;\n font.metadata[\"Unicode\"].kerning = metrics.kerning;\n }\n\n var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n if (encodingBlock) {\n font.metadata[\"Unicode\"].encoding = encodingBlock;\n font.encoding = encodingBlock.codePages[0];\n }\n }\n ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n\n var binaryStringToUint8Array = function(binary_string) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n };\n\n var addFont = function(font, file) {\n // eslint-disable-next-line no-control-regex\n if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n file = binaryStringToUint8Array(file);\n } else {\n file = binaryStringToUint8Array(atob(file));\n }\n font.metadata = jsPDF.API.TTFFont.open(file);\n font.metadata.Unicode = font.metadata.Unicode || {\n encoding: {},\n kerning: {},\n widths: []\n };\n font.metadata.glyIdsUsed = [0];\n };\n\n jsPDF.API.events.push([\n \"addFont\",\n function(data) {\n var file = undefined;\n var font = data.font;\n var instance = data.instance;\n if (font.isStandardFont) {\n return;\n }\n if (typeof instance !== \"undefined\") {\n if (instance.existsFileInVFS(font.postScriptName) === false) {\n file = instance.loadFile(font.postScriptName);\n } else {\n file = instance.getFileFromVFS(font.postScriptName);\n }\n if (typeof file !== \"string\") {\n throw new Error(\n \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n addFont(font, file);\n } else {\n throw new Error(\n \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n }\n ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadCanvg() {\n return (function() {\n if (globalObject[\"canvg\"]) {\n return Promise.resolve(globalObject[\"canvg\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"canvg\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"canvg\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load canvg\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load canvg: \" + e));\n })\n .then(function(canvg) {\n return canvg.default ? canvg.default : canvg;\n });\n }\n\n /**\n * Parses SVG XML and saves it as image into the PDF.\n *\n * Depends on canvas-element and canvg\n *\n * @name addSvgAsImage\n * @public\n * @function\n * @param {string} SVG-Data as Text\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n * @param {string} alias of SVG-Image (if used multiple times)\n * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation of the image in degrees (0-359)\n *\n * @returns jsPDF jsPDF-instance\n */\n jsPDFAPI.addSvgAsImage = function(\n svg,\n x,\n y,\n w,\n h,\n alias,\n compression,\n rotation\n ) {\n if (isNaN(x) || isNaN(y)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n }\n\n if (isNaN(w) || isNaN(h)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n throw new Error(\n \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n );\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"#fff\"; /// set white fill style\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var options = {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true\n };\n var doc = this;\n return loadCanvg()\n .then(\n function(canvg) {\n return canvg.fromString(ctx, svg, options);\n },\n function() {\n return Promise.reject(new Error(\"Could not load canvg.\"));\n }\n )\n .then(function(instance) {\n return instance.render(options);\n })\n .then(function() {\n doc.addImage(\n canvas.toDataURL(\"image/jpeg\", 1.0),\n x,\n y,\n w,\n h,\n compression,\n rotation\n );\n });\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * @name putTotalPages\n * @function\n * @param {string} pageExpression Regular Expression\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.putTotalPages = function(pageExpression) {\n \"use strict\";\n\n var replaceExpression;\n var totalNumberOfPages = 0;\n if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n replaceExpression = new RegExp(pageExpression, \"g\");\n totalNumberOfPages = this.internal.getNumberOfPages();\n } else {\n replaceExpression = new RegExp(\n this.pdfEscape16(pageExpression, this.internal.getFont()),\n \"g\"\n );\n totalNumberOfPages = this.pdfEscape16(\n this.internal.getNumberOfPages() + \"\",\n this.internal.getFont()\n );\n }\n\n for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n for (var i = 0; i < this.internal.pages[n].length; i++) {\n this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n replaceExpression,\n totalNumberOfPages\n );\n }\n }\n\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * Set the ViewerPreferences of the generated PDF\n *\n * @name viewerPreferences\n * @function\n * @public\n * @param {Object} options Array with the ViewerPreferences
    \n * Example: doc.viewerPreferences({\"FitWindow\":true});
    \n *
    \n * You can set following preferences:
    \n *
    \n * HideToolbar (boolean)
    \n * Default value: false
    \n *
    \n * HideMenubar (boolean)
    \n * Default value: false.
    \n *
    \n * HideWindowUI (boolean)
    \n * Default value: false.
    \n *
    \n * FitWindow (boolean)
    \n * Default value: false.
    \n *
    \n * CenterWindow (boolean)
    \n * Default value: false
    \n *
    \n * DisplayDocTitle (boolean)
    \n * Default value: false.
    \n *
    \n * NonFullScreenPageMode (string)
    \n * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    \n * Default value: UseNone
    \n *
    \n * Direction (string)
    \n * Possible values: L2R, R2L
    \n * Default value: L2R.
    \n *
    \n * ViewArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * ViewClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * PrintScaling (string)
    \n * Possible values: AppDefault, None
    \n * Default value: AppDefault.
    \n *
    \n * Duplex (string)
    \n * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n * Default value: none
    \n *
    \n * PickTrayByPDFSize (boolean)
    \n * Default value: false
    \n *
    \n * PrintPageRange (Array)
    \n * Example: [[1,5], [7,9]]
    \n * Default value: as defined by PDF viewer application
    \n *
    \n * NumCopies (Number)
    \n * Possible values: 1, 2, 3, 4, 5
    \n * Default value: 1
    \n *
    \n * For more information see the PDF Reference, sixth edition on Page 577\n * @param {boolean} doReset True to reset the settings\n * @function\n * @returns jsPDF jsPDF-instance\n * @example\n * var doc = new jsPDF()\n * doc.text('This is a test', 10, 10)\n * doc.viewerPreferences({'FitWindow': true}, true)\n * doc.save(\"viewerPreferences.pdf\")\n *\n * // Example printing 10 copies, using cropbox, and hiding UI.\n * doc.viewerPreferences({\n * 'HideWindowUI': true,\n * 'PrintArea': 'CropBox',\n * 'NumCopies': 10\n * })\n */\n jsPDFAPI.viewerPreferences = function(options, doReset) {\n options = options || {};\n doReset = doReset || false;\n\n var configuration;\n var configurationTemplate = {\n HideToolbar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideMenubar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideWindowUI: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n FitWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n CenterWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n DisplayDocTitle: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.4\n },\n NonFullScreenPageMode: {\n defaultValue: \"UseNone\",\n value: \"UseNone\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n pdfVersion: 1.3\n },\n Direction: {\n defaultValue: \"L2R\",\n value: \"L2R\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"L2R\", \"R2L\"],\n pdfVersion: 1.3\n },\n ViewArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n ViewClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintScaling: {\n defaultValue: \"AppDefault\",\n value: \"AppDefault\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"AppDefault\", \"None\"],\n pdfVersion: 1.6\n },\n Duplex: {\n defaultValue: \"\",\n value: \"none\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\n \"Simplex\",\n \"DuplexFlipShortEdge\",\n \"DuplexFlipLongEdge\",\n \"none\"\n ],\n pdfVersion: 1.7\n },\n PickTrayByPDFSize: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.7\n },\n PrintPageRange: {\n defaultValue: \"\",\n value: \"\",\n type: \"array\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n },\n NumCopies: {\n defaultValue: 1,\n value: 1,\n type: \"integer\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n }\n };\n\n var configurationKeys = Object.keys(configurationTemplate);\n\n var rangeArray = [];\n var i = 0;\n var j = 0;\n var k = 0;\n var isValid;\n\n var method;\n var value;\n\n function arrayContainsElement(array, element) {\n var iterator;\n var result = false;\n\n for (iterator = 0; iterator < array.length; iterator += 1) {\n if (array[iterator] === element) {\n result = true;\n }\n }\n return result;\n }\n\n if (this.internal.viewerpreferences === undefined) {\n this.internal.viewerpreferences = {};\n this.internal.viewerpreferences.configuration = JSON.parse(\n JSON.stringify(configurationTemplate)\n );\n this.internal.viewerpreferences.isSubscribed = false;\n }\n configuration = this.internal.viewerpreferences.configuration;\n\n if (options === \"reset\" || doReset === true) {\n var len = configurationKeys.length;\n\n for (k = 0; k < len; k += 1) {\n configuration[configurationKeys[k]].value =\n configuration[configurationKeys[k]].defaultValue;\n configuration[configurationKeys[k]].explicitSet = false;\n }\n }\n\n if (typeof options === \"object\") {\n for (method in options) {\n value = options[method];\n if (\n arrayContainsElement(configurationKeys, method) &&\n value !== undefined\n ) {\n if (\n configuration[method].type === \"boolean\" &&\n typeof value === \"boolean\"\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"name\" &&\n arrayContainsElement(configuration[method].valueSet, value)\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"integer\" &&\n Number.isInteger(value)\n ) {\n configuration[method].value = value;\n } else if (configuration[method].type === \"array\") {\n for (i = 0; i < value.length; i += 1) {\n isValid = true;\n if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n rangeArray.push(String(value[i] - 1));\n } else if (value[i].length > 1) {\n for (j = 0; j < value[i].length; j += 1) {\n if (typeof value[i][j] !== \"number\") {\n isValid = false;\n }\n }\n if (isValid === true) {\n rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n }\n }\n }\n configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n } else {\n configuration[method].value = configuration[method].defaultValue;\n }\n\n configuration[method].explicitSet = true;\n }\n }\n }\n\n if (this.internal.viewerpreferences.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n var pdfDict = [];\n var vPref;\n for (vPref in configuration) {\n if (configuration[vPref].explicitSet === true) {\n if (configuration[vPref].type === \"name\") {\n pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n } else {\n pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n }\n }\n }\n if (pdfDict.length !== 0) {\n this.internal.write(\n \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n );\n }\n });\n this.internal.viewerpreferences.isSubscribed = true;\n }\n\n this.internal.viewerpreferences.configuration = configuration;\n return this;\n };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var postPutResources = function() {\n var xmpmeta_beginning = '';\n var rdf_beginning =\n '';\n var rdf_ending = \"\";\n var xmpmeta_ending = \"\";\n var utf8_xmpmeta_beginning = unescape(\n encodeURIComponent(xmpmeta_beginning)\n );\n var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n var utf8_metadata = unescape(\n encodeURIComponent(this.internal.__metadata__.metadata)\n );\n var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n var total_len =\n utf8_rdf_beginning.length +\n utf8_metadata.length +\n utf8_rdf_ending.length +\n utf8_xmpmeta_beginning.length +\n utf8_xmpmeta_ending.length;\n\n this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n this.internal.write(\n \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n );\n this.internal.write(\"stream\");\n this.internal.write(\n utf8_xmpmeta_beginning +\n utf8_rdf_beginning +\n utf8_metadata +\n utf8_rdf_ending +\n utf8_xmpmeta_ending\n );\n this.internal.write(\"endstream\");\n this.internal.write(\"endobj\");\n };\n\n var putCatalog = function() {\n if (this.internal.__metadata__.metadata_object_number) {\n this.internal.write(\n \"/Metadata \" +\n this.internal.__metadata__.metadata_object_number +\n \" 0 R\"\n );\n }\n };\n\n /**\n * Adds XMP formatted metadata to PDF\n *\n * @name addMetadata\n * @function\n * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n * @returns {jsPDF} jsPDF-instance\n */\n jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n if (typeof this.internal.__metadata__ === \"undefined\") {\n this.internal.__metadata__ = {\n metadata: metadata,\n namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n };\n this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n this.internal.events.subscribe(\"postPutResources\", postPutResources);\n }\n return this;\n };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n var jsPDFAPI = jsPDF.API;\n\n /***************************************************************************************************/\n /* function : pdfEscape16 */\n /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n /* the corresponding glyph id and width, and then adding padding to the string. */\n /***************************************************************************************************/\n var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n var widths = font.metadata.Unicode.widths;\n var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n var ar = [\"\"];\n for (var i = 0, l = text.length, t; i < l; ++i) {\n t = font.metadata.characterToGlyph(text.charCodeAt(i));\n font.metadata.glyIdsUsed.push(t);\n font.metadata.toUnicode[t] = text.charCodeAt(i);\n if (widths.indexOf(t) == -1) {\n widths.push(t);\n widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n }\n if (t == \"0\") {\n //Spaces are not allowed in cmap.\n return ar.join(\"\");\n } else {\n t = t.toString(16);\n ar.push(padz[4 - t.length], t);\n }\n }\n return ar.join(\"\");\n });\n\n var toUnicodeCmap = function(map) {\n var code, codes, range, unicode, unicodeMap, _i, _len;\n unicodeMap =\n \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\";\n codes = Object.keys(map).sort(function(a, b) {\n return a - b;\n });\n\n range = [];\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (range.length >= 100) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\";\n range = [];\n }\n\n if (\n map[code] !== undefined &&\n map[code] !== null &&\n typeof map[code].toString === \"function\"\n ) {\n unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n code = (\"0000\" + (+code).toString(16)).slice(-4);\n range.push(\"<\" + code + \"><\" + unicode + \">\");\n }\n }\n\n if (range.length) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\\n\";\n }\n unicodeMap +=\n \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n return unicodeMap;\n };\n\n var identityHFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"Identity-H\"\n ) {\n //Tag with Identity-H\n var widths = font.metadata.Unicode.widths;\n var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Type /FontDescriptor\");\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/Flags \" + font.metadata.flags);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\">>\");\n out(\"endobj\");\n\n var DescendantFont = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n out(\"/CIDToGIDMap /Identity\");\n out(\"/DW 1000\");\n out(\"/Subtype /CIDFontType2\");\n out(\"/CIDSystemInfo\");\n out(\"<<\");\n out(\"/Supplement 0\");\n out(\"/Registry (Adobe)\");\n out(\"/Ordering (\" + font.encoding + \")\");\n out(\">>\");\n out(\">>\");\n out(\"endobj\");\n\n font.objectNumber = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/Subtype /Type0\");\n out(\"/ToUnicode \" + cmap + \" 0 R\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/Encoding /\" + font.encoding);\n out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n out(\">>\");\n out(\"endobj\");\n\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n identityHFunction(args);\n }\n ]);\n\n var winAnsiEncodingFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"WinAnsiEncoding\"\n ) {\n //Tag with WinAnsi encoding\n var data = font.metadata.rawData;\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/Type /FontDescriptor\");\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/Flags 96\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\">>\");\n out(\"endobj\");\n font.objectNumber = newObject();\n for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n font.metadata.hmtx.widths[j] = parseInt(\n font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n ); //Change the width of Em units to Point units.\n }\n out(\n \"<>\"\n );\n out(\"endobj\");\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n winAnsiEncodingFunction(args);\n }\n ]);\n\n var utf8TextFunction = function(args) {\n var text = args.text || \"\";\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n\n var pdfEscape = mutex.pdfEscape;\n var activeFontKey = mutex.activeFontKey;\n var fonts = mutex.fonts;\n var key = activeFontKey;\n\n var str = \"\",\n s = 0,\n cmapConfirm;\n var strText = \"\";\n var encoding = fonts[key].encoding;\n\n if (fonts[key].encoding !== \"Identity-H\") {\n return {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n }\n strText = text;\n\n key = activeFontKey;\n if (Array.isArray(text)) {\n strText = text[0];\n }\n for (s = 0; s < strText.length; s += 1) {\n if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n cmapConfirm =\n fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n /*\n if (Object.prototype.toString.call(text) === '[object Array]') {\n var i = 0;\n // for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n } else {\n\n }\n //}\n\n } else {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n }*/\n }\n if (!cmapConfirm) {\n if (\n strText[s].charCodeAt(0) < 256 &&\n fonts[key].metadata.hasOwnProperty(\"Unicode\")\n ) {\n str += strText[s];\n } else {\n str += \"\";\n }\n } else {\n str += strText[s];\n }\n }\n var result = \"\";\n if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n //For the default 13 font\n result = pdfEscape(str, key)\n .split(\"\")\n .map(function(cv) {\n return cv.charCodeAt(0).toString(16);\n })\n .join(\"\");\n } else if (encoding === \"Identity-H\") {\n result = pdfEscape16(str, fonts[key]);\n }\n mutex.isHex = true;\n\n return {\n text: result,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n };\n\n var utf8EscapeFunction = function(parms) {\n var text = parms.text || \"\",\n x = parms.x,\n y = parms.y,\n options = parms.options,\n mutex = parms.mutex;\n var tmpText = [];\n var args = {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n\n if (Array.isArray(text)) {\n var i = 0;\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n if (text[i].length === 3) {\n tmpText.push([\n utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n .text,\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n }\n parms.text = tmpText;\n } else {\n parms.text = utf8TextFunction(\n Object.assign({}, args, { text: text })\n ).text;\n }\n };\n\n jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var _initializeVFS = function() {\n if (typeof this.internal.vFS === \"undefined\") {\n this.internal.vFS = {};\n }\n return true;\n };\n\n /**\n * Check if the file exists in the vFS\n *\n * @name existsFileInVFS\n * @function\n * @param {string} Possible filename in the vFS.\n * @returns {boolean}\n * @example\n * doc.existsFileInVFS(\"someFile.txt\");\n */\n jsPDFAPI.existsFileInVFS = function(filename) {\n _initializeVFS.call(this);\n return typeof this.internal.vFS[filename] !== \"undefined\";\n };\n\n /**\n * Add a file to the vFS\n *\n * @name addFileToVFS\n * @function\n * @param {string} filename The name of the file which should be added.\n * @param {string} filecontent The content of the file.\n * @returns {jsPDF}\n * @example\n * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n */\n jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n _initializeVFS.call(this);\n this.internal.vFS[filename] = filecontent;\n return this;\n };\n\n /**\n * Get the file from the vFS\n *\n * @name getFileFromVFS\n * @function\n * @param {string} The name of the file which gets requested.\n * @returns {string}\n * @example\n * doc.getFileFromVFS(\"someFile.txt\");\n */\n jsPDFAPI.getFileFromVFS = function(filename) {\n _initializeVFS.call(this);\n\n if (typeof this.internal.vFS[filename] !== \"undefined\") {\n return this.internal.vFS[filename];\n }\n return null;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n \"use strict\";\n /**\n * Table of Unicode types.\n *\n * Generated by:\n *\n * var bidi = require(\"./bidi/index\");\n * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n *\n * for( var i = 0; i < bidi_accumulate.length; i++) {\n * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n * }\n * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n *\n * Based on:\n * https://github.com/mathiasbynens/unicode-8.0.0\n */\n var bidiUnicodeTypes = [\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"S\",\n \"B\",\n \"S\",\n \"WS\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"B\",\n \"B\",\n \"S\",\n \"WS\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"CS\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"EN\",\n \"EN\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"N\",\n \"N\",\n \"AL\",\n \"ET\",\n \"ET\",\n \"AL\",\n \"CS\",\n \"AL\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"ET\",\n \"AN\",\n \"AN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"L\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"B\",\n \"LRE\",\n \"RLE\",\n \"PDF\",\n \"LRO\",\n \"RLO\",\n \"CS\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"N\",\n \"LRI\",\n \"RLI\",\n \"FSI\",\n \"PDI\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"NSM\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"ES\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"N\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\"\n ];\n\n /**\n * Unicode Bidi algorithm compliant Bidi engine.\n * For reference see http://unicode.org/reports/tr9/\n */\n\n /**\n * constructor ( options )\n *\n * Initializes Bidi engine\n *\n * @param {Object} See 'setOptions' below for detailed description.\n * options are cashed between invocation of 'doBidiReorder' method\n *\n * sample usage pattern of BidiEngine:\n * var opt = {\n * \tisInputVisual: true,\n * \tisInputRtl: false,\n * \tisOutputVisual: false,\n * \tisOutputRtl: false,\n * \tisSymmetricSwapping: true\n * }\n * var sourceToTarget = [], levels = [];\n * var bidiEng = Globalize.bidiEngine(opt);\n * var src = \"text string to be reordered\";\n * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n */\n\n jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n var _STATE_TABLE_LTR = [\n [0, 3, 0, 1, 0, 0, 0],\n [0, 3, 0, 1, 2, 2, 0],\n [0, 3, 0, 0x11, 2, 0, 1],\n [0, 3, 5, 5, 4, 1, 0],\n [0, 3, 0x15, 0x15, 4, 0, 1],\n [0, 3, 5, 5, 4, 2, 0]\n ];\n\n var _STATE_TABLE_RTL = [\n [2, 0, 1, 1, 0, 1, 0],\n [2, 0, 1, 1, 0, 2, 0],\n [2, 0, 2, 1, 3, 2, 0],\n [2, 0, 2, 0x21, 3, 1, 1]\n ];\n\n var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n var _UNICODE_RANGES_MAP = {\n 0: 0,\n 5: 1,\n 6: 2,\n 7: 3,\n 0x20: 4,\n 0xfb: 5,\n 0xfe: 6,\n 0xff: 7\n };\n\n var _SWAP_TABLE = [\n \"\\u0028\",\n \"\\u0029\",\n \"\\u0028\",\n \"\\u003C\",\n \"\\u003E\",\n \"\\u003C\",\n \"\\u005B\",\n \"\\u005D\",\n \"\\u005B\",\n \"\\u007B\",\n \"\\u007D\",\n \"\\u007B\",\n \"\\u00AB\",\n \"\\u00BB\",\n \"\\u00AB\",\n \"\\u2039\",\n \"\\u203A\",\n \"\\u2039\",\n \"\\u2045\",\n \"\\u2046\",\n \"\\u2045\",\n \"\\u207D\",\n \"\\u207E\",\n \"\\u207D\",\n \"\\u208D\",\n \"\\u208E\",\n \"\\u208D\",\n \"\\u2264\",\n \"\\u2265\",\n \"\\u2264\",\n \"\\u2329\",\n \"\\u232A\",\n \"\\u2329\",\n \"\\uFE59\",\n \"\\uFE5A\",\n \"\\uFE59\",\n \"\\uFE5B\",\n \"\\uFE5C\",\n \"\\uFE5B\",\n \"\\uFE5D\",\n \"\\uFE5E\",\n \"\\uFE5D\",\n \"\\uFE64\",\n \"\\uFE65\",\n \"\\uFE64\"\n ];\n\n var _LTR_RANGES_REG_EXPR = new RegExp(\n /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n );\n\n var _lastArabic = false,\n _hasUbatAl,\n _hasUbatB,\n _hasUbatS,\n DIR_LTR = 0,\n DIR_RTL = 1,\n _isInVisual,\n _isInRtl,\n _isOutVisual,\n _isOutRtl,\n _isSymmetricSwapping,\n _dir = DIR_LTR;\n\n this.__bidiEngine__ = {};\n\n var _init = function(text, sourceToTargetMap) {\n if (sourceToTargetMap) {\n for (var i = 0; i < text.length; i++) {\n sourceToTargetMap[i] = i;\n }\n }\n if (_isInRtl === undefined) {\n _isInRtl = _isContextualDirRtl(text);\n }\n if (_isOutRtl === undefined) {\n _isOutRtl = _isContextualDirRtl(text);\n }\n };\n\n // for reference see 3.2 in http://unicode.org/reports/tr9/\n //\n var _getCharType = function(ch) {\n var charCode = ch.charCodeAt(),\n range = charCode >> 8,\n rangeIdx = _UNICODE_RANGES_MAP[range];\n\n if (rangeIdx !== undefined) {\n return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n } else if (range === 0xfc || range === 0xfd) {\n return \"AL\";\n } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n //unlikely case\n return \"L\";\n } else if (range === 8) {\n // even less likely\n return \"R\";\n }\n return \"N\"; //undefined type, mark as neutral\n };\n\n var _isContextualDirRtl = function(text) {\n for (var i = 0, charType; i < text.length; i++) {\n charType = _getCharType(text.charAt(i));\n if (charType === \"L\") {\n return false;\n } else if (charType === \"R\") {\n return true;\n }\n }\n return false;\n };\n\n // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n //\n var _resolveCharType = function(chars, types, resolvedTypes, index) {\n var cType = types[index],\n wType,\n nType,\n i,\n len;\n switch (cType) {\n case \"L\":\n case \"R\":\n _lastArabic = false;\n break;\n case \"N\":\n case \"AN\":\n break;\n\n case \"EN\":\n if (_lastArabic) {\n cType = \"AN\";\n }\n break;\n\n case \"AL\":\n _lastArabic = true;\n _hasUbatAl = true;\n cType = \"R\";\n break;\n\n case \"WS\":\n cType = \"N\";\n break;\n\n case \"CS\":\n if (\n index < 1 ||\n index + 1 >= types.length ||\n ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n ) {\n cType = \"N\";\n } else if (_lastArabic) {\n nType = \"AN\";\n }\n cType = nType === wType ? nType : \"N\";\n break;\n\n case \"ES\":\n wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n cType =\n wType === \"EN\" &&\n index + 1 < types.length &&\n types[index + 1] === \"EN\"\n ? \"EN\"\n : \"N\";\n break;\n\n case \"ET\":\n if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n cType = \"EN\";\n break;\n } else if (_lastArabic) {\n cType = \"N\";\n break;\n }\n i = index + 1;\n len = types.length;\n while (i < len && types[i] === \"ET\") {\n i++;\n }\n if (i < len && types[i] === \"EN\") {\n cType = \"EN\";\n } else {\n cType = \"N\";\n }\n break;\n\n case \"NSM\":\n if (_isInVisual && !_isInRtl) {\n //V->L\n len = types.length;\n i = index + 1;\n while (i < len && types[i] === \"NSM\") {\n i++;\n }\n if (i < len) {\n var c = chars[index];\n var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n wType = types[i];\n if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n cType = \"R\";\n break;\n }\n }\n }\n if (index < 1 || (wType = types[index - 1]) === \"B\") {\n cType = \"N\";\n } else {\n cType = resolvedTypes[index - 1];\n }\n break;\n\n case \"B\":\n _lastArabic = false;\n _hasUbatB = true;\n cType = _dir;\n break;\n\n case \"S\":\n _hasUbatS = true;\n cType = \"N\";\n break;\n\n case \"LRE\":\n case \"RLE\":\n case \"LRO\":\n case \"RLO\":\n case \"PDF\":\n _lastArabic = false;\n break;\n case \"BN\":\n cType = \"N\";\n break;\n }\n return cType;\n };\n\n var _handleUbatS = function(types, levels, length) {\n for (var i = 0; i < length; i++) {\n if (types[i] === \"S\") {\n levels[i] = _dir;\n for (var j = i - 1; j >= 0; j--) {\n if (types[j] === \"WS\") {\n levels[j] = _dir;\n } else {\n break;\n }\n }\n }\n }\n };\n\n var _invertString = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\");\n if (levels) {\n _computeLevels(charArray, levels, { hiLevel: _dir });\n }\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return charArray.join(\"\");\n };\n\n // For reference see 3.3 in http://unicode.org/reports/tr9/\n //\n var _computeLevels = function(chars, levels, params) {\n var action,\n condition,\n i,\n index,\n newLevel,\n prevState,\n condPos = -1,\n len = chars.length,\n newState = 0,\n resolvedTypes = [],\n stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n types = [];\n\n _lastArabic = false;\n _hasUbatAl = false;\n _hasUbatB = false;\n _hasUbatS = false;\n for (i = 0; i < len; i++) {\n types[i] = _getCharType(chars[i]);\n }\n for (index = 0; index < len; index++) {\n prevState = newState;\n resolvedTypes[index] = _resolveCharType(\n chars,\n types,\n resolvedTypes,\n index\n );\n newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n action = newState & 0xf0;\n newState &= 0x0f;\n levels[index] = newLevel = stateTable[newState][5];\n if (action > 0) {\n if (action === 0x10) {\n for (i = condPos; i < index; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n condition = stateTable[newState][6];\n if (condition) {\n if (condPos === -1) {\n condPos = index;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < index; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (types[index] === \"B\") {\n levels[index] = 0;\n }\n params.hiLevel |= newLevel;\n }\n if (_hasUbatS) {\n _handleUbatS(types, levels, len);\n }\n };\n\n // for reference see 3.4 in http://unicode.org/reports/tr9/\n //\n var _invertByLevel = function(\n level,\n charArray,\n sourceToTargetMap,\n levels,\n params\n ) {\n if (params.hiLevel < level) {\n return;\n }\n if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return;\n }\n var ch,\n high,\n end,\n low,\n len = charArray.length,\n start = 0;\n\n while (start < len) {\n if (levels[start] >= level) {\n end = start + 1;\n while (end < len && levels[end] >= level) {\n end++;\n }\n for (low = start, high = end - 1; low < high; low++, high--) {\n ch = charArray[low];\n charArray[low] = charArray[high];\n charArray[high] = ch;\n if (sourceToTargetMap) {\n ch = sourceToTargetMap[low];\n sourceToTargetMap[low] = sourceToTargetMap[high];\n sourceToTargetMap[high] = ch;\n }\n }\n start = end;\n }\n start++;\n }\n };\n\n // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n //\n var _symmetricSwap = function(charArray, levels, params) {\n if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n for (var i = 0, index; i < charArray.length; i++) {\n if (levels[i] === 1) {\n index = _SWAP_TABLE.indexOf(charArray[i]);\n if (index >= 0) {\n charArray[i] = _SWAP_TABLE[index + 1];\n }\n }\n }\n }\n };\n\n var _reorder = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\"),\n params = { hiLevel: _dir };\n\n if (!levels) {\n levels = [];\n }\n _computeLevels(charArray, levels, params);\n _symmetricSwap(charArray, levels, params);\n _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n return charArray.join(\"\");\n };\n\n // doBidiReorder( text, sourceToTargetMap, levels )\n // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n // Returns reordered string\n // @text [String]:\n // - input string to be reordered, this is input parameter\n // $sourceToTargetMap [Array] (optional)\n // - resultant mapping between input and output strings, this is output parameter\n // $levels [Array] (optional)\n // - array of calculated Bidi levels, , this is output parameter\n this.__bidiEngine__.doBidiReorder = function(\n text,\n sourceToTargetMap,\n levels\n ) {\n _init(text, sourceToTargetMap);\n if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n // LLTR->VLTR, LRTL->VLTR\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n // VRTL->VLTR, VLTR->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _invertString(text, sourceToTargetMap, levels);\n } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n // LLTR->VRTL, LRTL->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n // VLTR->LLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // VLTR->LRTL, VRTL->LLTR\n text = _invertString(text, sourceToTargetMap);\n if (_isInRtl) {\n //LLTR -> VLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else {\n //LRTL -> VRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n }\n } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n // VRTL->LRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // LRTL->LLTR, LLTR->LRTL\n var isSymmetricSwappingOrig = _isSymmetricSwapping;\n if (_isInRtl) {\n //LRTL->LLTR\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n _dir = DIR_LTR;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n } else {\n //LLTR->LRTL\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n _dir = DIR_RTL;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n text = _invertString(text, sourceToTargetMap);\n }\n }\n return text;\n };\n\n /**\n * @name setOptions( options )\n * @function\n * Sets options for Bidi conversion\n * @param {Object}:\n * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n */\n this.__bidiEngine__.setOptions = function(options) {\n if (options) {\n _isInVisual = options.isInputVisual;\n _isOutVisual = options.isOutputVisual;\n _isInRtl = options.isInputRtl;\n _isOutRtl = options.isOutputRtl;\n _isSymmetricSwapping = options.isSymmetricSwapping;\n }\n };\n\n this.__bidiEngine__.setOptions(options);\n return this.__bidiEngine__;\n };\n\n var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n var bidiEngineFunction = function(args) {\n var text = args.text;\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n var lang = options.lang;\n var tmpText = [];\n\n options.isInputVisual =\n typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n bidiEngine.setOptions(options);\n\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n tmpText.push([\n bidiEngine.doBidiReorder(text[i][0]),\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n }\n }\n args.text = tmpText;\n } else {\n args.text = bidiEngine.doBidiReorder(text);\n }\n bidiEngine.setOptions({ isInputVisual: true });\n };\n\n jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font *\n * Start Data : 2017. 01. 22. *\n * Comment : TEXT API *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n /************************************************************************/\n /* function : open */\n /* comment : Decode the encoded ttf content and create a TTFFont object. */\n /************************************************************************/\n TTFFont.open = function(file) {\n return new TTFFont(file);\n };\n /***************************************************************/\n /* function : TTFFont gernerator */\n /* comment : Decode TTF contents are parsed, Data, */\n /* Subset object is created, and registerTTF function is called.*/\n /***************************************************************/\n function TTFFont(rawData) {\n var data;\n this.rawData = rawData;\n data = this.contents = new Data(rawData);\n this.contents.pos = 4;\n if (data.readString(4) === \"ttcf\") {\n throw new Error(\"TTCF not supported.\");\n } else {\n data.pos = 0;\n this.parse();\n this.subset = new Subset(this);\n this.registerTTF();\n }\n }\n /********************************************************/\n /* function : parse */\n /* comment : TTF Parses the file contents by each table.*/\n /********************************************************/\n TTFFont.prototype.parse = function() {\n this.directory = new Directory(this.contents);\n this.head = new HeadTable(this);\n this.name = new NameTable(this);\n this.cmap = new CmapTable(this);\n this.toUnicode = {};\n this.hhea = new HheaTable(this);\n this.maxp = new MaxpTable(this);\n this.hmtx = new HmtxTable(this);\n this.post = new PostTable(this);\n this.os2 = new OS2Table(this);\n this.loca = new LocaTable(this);\n this.glyf = new GlyfTable(this);\n this.ascender =\n (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n this.decender =\n (this.os2.exists && this.os2.decender) || this.hhea.decender;\n this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n return (this.bbox = [\n this.head.xMin,\n this.head.yMin,\n this.head.xMax,\n this.head.yMax\n ]);\n };\n /***************************************************************/\n /* function : registerTTF */\n /* comment : Get the value to assign pdf font descriptors. */\n /***************************************************************/\n TTFFont.prototype.registerTTF = function() {\n var e, hi, low, raw, _ref;\n this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n this.bbox = function() {\n var _i, _len, _ref, _results;\n _ref = this.bbox;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n e = _ref[_i];\n _results.push(Math.round(e * this.scaleFactor));\n }\n return _results;\n }.call(this);\n this.stemV = 0;\n if (this.post.exists) {\n raw = this.post.italic_angle;\n hi = raw >> 16;\n low = raw & 0xff;\n if ((hi & 0x8000) !== 0) {\n hi = -((hi ^ 0xffff) + 1);\n }\n this.italicAngle = +(\"\" + hi + \".\" + low);\n } else {\n this.italicAngle = 0;\n }\n this.ascender = Math.round(this.ascender * this.scaleFactor);\n this.decender = Math.round(this.decender * this.scaleFactor);\n this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n this.isSerif =\n (_ref = this.familyClass) === 1 ||\n _ref === 2 ||\n _ref === 3 ||\n _ref === 4 ||\n _ref === 5 ||\n _ref === 7;\n this.isScript = this.familyClass === 10;\n this.flags = 0;\n if (this.post.isFixedPitch) {\n this.flags |= 1 << 0;\n }\n if (this.isSerif) {\n this.flags |= 1 << 1;\n }\n if (this.isScript) {\n this.flags |= 1 << 3;\n }\n if (this.italicAngle !== 0) {\n this.flags |= 1 << 6;\n }\n this.flags |= 1 << 5;\n if (!this.cmap.unicode) {\n throw new Error(\"No unicode cmap for font\");\n }\n };\n TTFFont.prototype.characterToGlyph = function(character) {\n var _ref;\n return (\n ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n 0\n );\n };\n TTFFont.prototype.widthOfGlyph = function(glyph) {\n var scale;\n scale = 1000.0 / this.head.unitsPerEm;\n return this.hmtx.forGlyph(glyph).advance * scale;\n };\n TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n var charCode, i, scale, width, _ref;\n string = \"\" + string;\n width = 0;\n for (\n i = 0, _ref = string.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n charCode = string.charCodeAt(i);\n width +=\n this.widthOfGlyph(this.characterToGlyph(charCode)) +\n charSpace * (1000 / size) || 0;\n }\n scale = size / 1000;\n return width * scale;\n };\n TTFFont.prototype.lineHeight = function(size, includeGap) {\n var gap;\n if (includeGap == null) {\n includeGap = false;\n }\n gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.decender) / 1000) * size;\n };\n return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n function Data(data) {\n this.data = data != null ? data : [];\n this.pos = 0;\n this.length = this.data.length;\n }\n Data.prototype.readByte = function() {\n return this.data[this.pos++];\n };\n Data.prototype.writeByte = function(byte) {\n return (this.data[this.pos++] = byte);\n };\n Data.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.readByte() * 0x1000000;\n b2 = this.readByte() << 16;\n b3 = this.readByte() << 8;\n b4 = this.readByte();\n return b1 + b2 + b3 + b4;\n };\n Data.prototype.writeUInt32 = function(val) {\n this.writeByte((val >>> 24) & 0xff);\n this.writeByte((val >> 16) & 0xff);\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt32 = function() {\n var int;\n int = this.readUInt32();\n if (int >= 0x80000000) {\n return int - 0x100000000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt32 = function(val) {\n if (val < 0) {\n val += 0x100000000;\n }\n return this.writeUInt32(val);\n };\n Data.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.readByte() << 8;\n b2 = this.readByte();\n return b1 | b2;\n };\n Data.prototype.writeUInt16 = function(val) {\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt16 = function() {\n var int;\n int = this.readUInt16();\n if (int >= 0x8000) {\n return int - 0x10000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt16 = function(val) {\n if (val < 0) {\n val += 0x10000;\n }\n return this.writeUInt16(val);\n };\n Data.prototype.readString = function(length) {\n var i, ret;\n ret = [];\n for (\n i = 0;\n 0 <= length ? i < length : i > length;\n i = 0 <= length ? ++i : --i\n ) {\n ret[i] = String.fromCharCode(this.readByte());\n }\n return ret.join(\"\");\n };\n Data.prototype.writeString = function(val) {\n var i, _ref, _results;\n _results = [];\n for (\n i = 0, _ref = val.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n _results.push(this.writeByte(val.charCodeAt(i)));\n }\n return _results;\n };\n /*Data.prototype.stringAt = function (pos, length) {\n this.pos = pos;\n return this.readString(length);\n };*/\n Data.prototype.readShort = function() {\n return this.readInt16();\n };\n Data.prototype.writeShort = function(val) {\n return this.writeInt16(val);\n };\n Data.prototype.readLongLong = function() {\n var b1, b2, b3, b4, b5, b6, b7, b8;\n b1 = this.readByte();\n b2 = this.readByte();\n b3 = this.readByte();\n b4 = this.readByte();\n b5 = this.readByte();\n b6 = this.readByte();\n b7 = this.readByte();\n b8 = this.readByte();\n if (b1 & 0x80) {\n return (\n ((b1 ^ 0xff) * 0x100000000000000 +\n (b2 ^ 0xff) * 0x1000000000000 +\n (b3 ^ 0xff) * 0x10000000000 +\n (b4 ^ 0xff) * 0x100000000 +\n (b5 ^ 0xff) * 0x1000000 +\n (b6 ^ 0xff) * 0x10000 +\n (b7 ^ 0xff) * 0x100 +\n (b8 ^ 0xff) +\n 1) *\n -1\n );\n }\n return (\n b1 * 0x100000000000000 +\n b2 * 0x1000000000000 +\n b3 * 0x10000000000 +\n b4 * 0x100000000 +\n b5 * 0x1000000 +\n b6 * 0x10000 +\n b7 * 0x100 +\n b8\n );\n };\n Data.prototype.writeLongLong = function(val) {\n var high, low;\n high = Math.floor(val / 0x100000000);\n low = val & 0xffffffff;\n this.writeByte((high >> 24) & 0xff);\n this.writeByte((high >> 16) & 0xff);\n this.writeByte((high >> 8) & 0xff);\n this.writeByte(high & 0xff);\n this.writeByte((low >> 24) & 0xff);\n this.writeByte((low >> 16) & 0xff);\n this.writeByte((low >> 8) & 0xff);\n return this.writeByte(low & 0xff);\n };\n Data.prototype.readInt = function() {\n return this.readInt32();\n };\n Data.prototype.writeInt = function(val) {\n return this.writeInt32(val);\n };\n /*Data.prototype.slice = function (start, end) {\n return this.data.slice(start, end);\n };*/\n Data.prototype.read = function(bytes) {\n var buf, i;\n buf = [];\n for (\n i = 0;\n 0 <= bytes ? i < bytes : i > bytes;\n i = 0 <= bytes ? ++i : --i\n ) {\n buf.push(this.readByte());\n }\n return buf;\n };\n Data.prototype.write = function(bytes) {\n var byte, i, _len, _results;\n _results = [];\n for (i = 0, _len = bytes.length; i < _len; i++) {\n byte = bytes[i];\n _results.push(this.writeByte(byte));\n }\n return _results;\n };\n return Data;\n})();\n\nvar Directory = (function() {\n var checksum;\n\n /*****************************************************************************************************/\n /* function : Directory generator */\n /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n /*****************************************************************************************************/\n function Directory(data) {\n var entry, i, _ref;\n this.scalarType = data.readInt();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n this.tables = {};\n for (\n i = 0, _ref = this.tableCount;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n entry = {\n tag: data.readString(4),\n checksum: data.readInt(),\n offset: data.readInt(),\n length: data.readInt()\n };\n this.tables[entry.tag] = entry;\n }\n }\n /********************************************************************************************************/\n /* function : encode */\n /* comment : It encodes and stores the font table object and information used for the directory object. */\n /********************************************************************************************************/\n Directory.prototype.encode = function(tables) {\n var adjustment,\n directory,\n directoryLength,\n entrySelector,\n headOffset,\n log2,\n offset,\n rangeShift,\n searchRange,\n sum,\n table,\n tableCount,\n tableData,\n tag;\n tableCount = Object.keys(tables).length;\n log2 = Math.log(2);\n searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n entrySelector = Math.floor(searchRange / log2);\n rangeShift = tableCount * 16 - searchRange;\n directory = new Data();\n directory.writeInt(this.scalarType);\n directory.writeShort(tableCount);\n directory.writeShort(searchRange);\n directory.writeShort(entrySelector);\n directory.writeShort(rangeShift);\n directoryLength = tableCount * 16;\n offset = directory.pos + directoryLength;\n headOffset = null;\n tableData = [];\n for (tag in tables) {\n table = tables[tag];\n directory.writeString(tag);\n directory.writeInt(checksum(table));\n directory.writeInt(offset);\n directory.writeInt(table.length);\n tableData = tableData.concat(table);\n if (tag === \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.push(0);\n offset++;\n }\n }\n directory.write(tableData);\n sum = checksum(directory.data);\n adjustment = 0xb1b0afba - sum;\n directory.pos = headOffset + 8;\n directory.writeUInt32(adjustment);\n return directory.data;\n };\n /***************************************************************/\n /* function : checksum */\n /* comment : Duplicate the table for the tag. */\n /***************************************************************/\n checksum = function(data) {\n var i, sum, tmp, _ref;\n data = __slice.call(data);\n while (data.length % 4) {\n data.push(0);\n }\n tmp = new Data(data);\n sum = 0;\n for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n sum += tmp.readUInt32();\n }\n return sum & 0xffffffff;\n };\n return Directory;\n})();\n\nvar Table,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) {\n for (var key in parent) {\n if (__hasProp.call(parent, key)) child[key] = parent[key];\n }\n\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n\n/***************************************************************/\n/* function : Table */\n/* comment : Save info for each table, and parse the table. */\n/***************************************************************/\nTable = (function() {\n function Table(file) {\n var info;\n this.file = file;\n info = this.file.directory.tables[this.tag];\n this.exists = !!info;\n if (info) {\n (this.offset = info.offset), (this.length = info.length);\n this.parse(this.file.contents);\n }\n }\n Table.prototype.parse = function() {};\n Table.prototype.encode = function() {};\n Table.prototype.raw = function() {\n if (!this.exists) {\n return null;\n }\n this.file.contents.pos = this.offset;\n return this.file.contents.read(this.length);\n };\n return Table;\n})();\n\nvar HeadTable = (function(_super) {\n __extends(HeadTable, _super);\n\n function HeadTable() {\n return HeadTable.__super__.constructor.apply(this, arguments);\n }\n HeadTable.prototype.tag = \"head\";\n HeadTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.revision = data.readInt();\n this.checkSumAdjustment = data.readInt();\n this.magicNumber = data.readInt();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.readLongLong();\n this.modified = data.readLongLong();\n this.xMin = data.readShort();\n this.yMin = data.readShort();\n this.xMax = data.readShort();\n this.yMax = data.readShort();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort();\n this.indexToLocFormat = data.readShort();\n return (this.glyphDataFormat = data.readShort());\n };\n HeadTable.prototype.encode = function(indexToLocFormat) {\n var table;\n table = new Data();\n table.writeInt(this.version);\n table.writeInt(this.revision);\n table.writeInt(this.checkSumAdjustment);\n table.writeInt(this.magicNumber);\n table.writeShort(this.flags);\n table.writeShort(this.unitsPerEm);\n table.writeLongLong(this.created);\n table.writeLongLong(this.modified);\n table.writeShort(this.xMin);\n table.writeShort(this.yMin);\n table.writeShort(this.xMax);\n table.writeShort(this.yMax);\n table.writeShort(this.macStyle);\n table.writeShort(this.lowestRecPPEM);\n table.writeShort(this.fontDirectionHint);\n table.writeShort(indexToLocFormat);\n table.writeShort(this.glyphDataFormat);\n return table.data;\n };\n return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n function CmapEntry(data, offset) {\n var code,\n count,\n endCode,\n glyphId,\n glyphIds,\n i,\n idDelta,\n idRangeOffset,\n index,\n saveOffset,\n segCount,\n segCountX2,\n start,\n startCode,\n tail,\n _j,\n _k,\n _len;\n this.platformID = data.readUInt16();\n this.encodingID = data.readShort();\n this.offset = offset + data.readInt();\n saveOffset = data.pos;\n data.pos = this.offset;\n this.format = data.readUInt16();\n this.length = data.readUInt16();\n this.language = data.readUInt16();\n this.isUnicode =\n (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n (this.platformID === 0 && this.format === 4);\n this.codeMap = {};\n switch (this.format) {\n case 0:\n for (i = 0; i < 256; ++i) {\n this.codeMap[i] = data.readByte();\n }\n break;\n case 4:\n segCountX2 = data.readUInt16();\n segCount = segCountX2 / 2;\n data.pos += 6;\n endCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n data.pos += 2;\n startCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idDelta = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idRangeOffset = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n count = (this.length - data.pos + this.offset) / 2;\n glyphIds = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= count ? _j < count : _j > count;\n i = 0 <= count ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n tail = endCode[i];\n start = startCode[i];\n for (\n code = _k = start;\n start <= tail ? _k <= tail : _k >= tail;\n code = start <= tail ? ++_k : --_k\n ) {\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n this.codeMap[code] = glyphId & 0xffff;\n }\n }\n }\n data.pos = saveOffset;\n }\n CmapEntry.encode = function(charmap, encoding) {\n var charMap,\n code,\n codeMap,\n codes,\n delta,\n deltas,\n diff,\n endCode,\n endCodes,\n entrySelector,\n glyphIDs,\n i,\n id,\n indexes,\n last,\n map,\n nextID,\n offset,\n old,\n rangeOffsets,\n rangeShift,\n searchRange,\n segCount,\n segCountX2,\n startCode,\n startCodes,\n startGlyph,\n subtable,\n _i,\n _j,\n _k,\n _l,\n _len,\n _len1,\n _len2,\n _len3,\n _len4,\n _len5,\n _len6,\n _len7,\n _m,\n _n,\n _name,\n _o,\n _p,\n _q;\n subtable = new Data();\n codes = Object.keys(charmap).sort(function(a, b) {\n return a - b;\n });\n switch (encoding) {\n case \"macroman\":\n id = 0;\n indexes = (function() {\n var _results = [];\n for (i = 0; i < 256; ++i) {\n _results.push(0);\n }\n return _results;\n })();\n map = {\n 0: 0\n };\n codeMap = {};\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (map[(_name = charmap[code])] == null) {\n map[_name] = ++id;\n }\n codeMap[code] = {\n old: charmap[code],\n new: map[charmap[code]]\n };\n indexes[code] = map[charmap[code]];\n }\n subtable.writeUInt16(1);\n subtable.writeUInt16(0);\n subtable.writeUInt32(12);\n subtable.writeUInt16(0);\n subtable.writeUInt16(262);\n subtable.writeUInt16(0);\n subtable.write(indexes);\n return {\n charMap: codeMap,\n subtable: subtable.data,\n maxGlyphID: id + 1\n };\n case \"unicode\":\n startCodes = [];\n endCodes = [];\n nextID = 0;\n map = {};\n charMap = {};\n last = diff = null;\n for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n code = codes[_j];\n old = charmap[code];\n if (map[old] == null) {\n map[old] = ++nextID;\n }\n charMap[code] = {\n old: old,\n new: map[old]\n };\n delta = map[old] - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xffff);\n startCodes.push(0xffff);\n segCount = startCodes.length;\n segCountX2 = segCount * 2;\n searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n entrySelector = Math.log(searchRange / 2) / Math.LN2;\n rangeShift = 2 * segCount - searchRange;\n deltas = [];\n rangeOffsets = [];\n glyphIDs = [];\n for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n startCode = startCodes[i];\n endCode = endCodes[i];\n if (startCode === 0xffff) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n startGlyph = charMap[startCode][\"new\"];\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n for (\n code = _l = startCode;\n startCode <= endCode ? _l <= endCode : _l >= endCode;\n code = startCode <= endCode ? ++_l : --_l\n ) {\n glyphIDs.push(charMap[code][\"new\"]);\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n subtable.writeUInt16(3);\n subtable.writeUInt16(1);\n subtable.writeUInt32(12);\n subtable.writeUInt16(4);\n subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n subtable.writeUInt16(0);\n subtable.writeUInt16(segCountX2);\n subtable.writeUInt16(searchRange);\n subtable.writeUInt16(entrySelector);\n subtable.writeUInt16(rangeShift);\n for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n code = endCodes[_m];\n subtable.writeUInt16(code);\n }\n subtable.writeUInt16(0);\n for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n code = startCodes[_n];\n subtable.writeUInt16(code);\n }\n for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n delta = deltas[_o];\n subtable.writeUInt16(delta);\n }\n for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n offset = rangeOffsets[_p];\n subtable.writeUInt16(offset);\n }\n for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n id = glyphIDs[_q];\n subtable.writeUInt16(id);\n }\n return {\n charMap: charMap,\n subtable: subtable.data,\n maxGlyphID: nextID + 1\n };\n }\n };\n return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n __extends(CmapTable, _super);\n\n function CmapTable() {\n return CmapTable.__super__.constructor.apply(this, arguments);\n }\n CmapTable.prototype.tag = \"cmap\";\n CmapTable.prototype.parse = function(data) {\n var entry, i, tableCount;\n data.pos = this.offset;\n this.version = data.readUInt16();\n tableCount = data.readUInt16();\n this.tables = [];\n this.unicode = null;\n for (\n i = 0;\n 0 <= tableCount ? i < tableCount : i > tableCount;\n i = 0 <= tableCount ? ++i : --i\n ) {\n entry = new CmapEntry(data, this.offset);\n this.tables.push(entry);\n if (entry.isUnicode) {\n if (this.unicode == null) {\n this.unicode = entry;\n }\n }\n }\n return true;\n };\n /*************************************************************************/\n /* function : encode */\n /* comment : Encode the cmap table corresponding to the input character. */\n /*************************************************************************/\n CmapTable.encode = function(charmap, encoding) {\n var result, table;\n if (encoding == null) {\n encoding = \"macroman\";\n }\n result = CmapEntry.encode(charmap, encoding);\n table = new Data();\n table.writeUInt16(0);\n table.writeUInt16(1);\n result.table = table.data.concat(result.subtable);\n return result;\n };\n return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n __extends(HheaTable, _super);\n\n function HheaTable() {\n return HheaTable.__super__.constructor.apply(this, arguments);\n }\n HheaTable.prototype.tag = \"hhea\";\n HheaTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.ascender = data.readShort();\n this.decender = data.readShort();\n this.lineGap = data.readShort();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort();\n this.minRightSideBearing = data.readShort();\n this.xMaxExtent = data.readShort();\n this.caretSlopeRise = data.readShort();\n this.caretSlopeRun = data.readShort();\n this.caretOffset = data.readShort();\n data.pos += 4 * 2;\n this.metricDataFormat = data.readShort();\n return (this.numberOfMetrics = data.readUInt16());\n };\n /*HheaTable.prototype.encode = function (ids) {\n var i, table, _i, _ref;\n table = new Data;\n table.writeInt(this.version);\n table.writeShort(this.ascender);\n table.writeShort(this.decender);\n table.writeShort(this.lineGap);\n table.writeShort(this.advanceWidthMax);\n table.writeShort(this.minLeftSideBearing);\n table.writeShort(this.minRightSideBearing);\n table.writeShort(this.xMaxExtent);\n table.writeShort(this.caretSlopeRise);\n table.writeShort(this.caretSlopeRun);\n table.writeShort(this.caretOffset);\n for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n table.writeByte(0);\n }\n table.writeShort(this.metricDataFormat);\n table.writeUInt16(ids.length);\n return table.data;\n };*/\n return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n __extends(OS2Table, _super);\n\n function OS2Table() {\n return OS2Table.__super__.constructor.apply(this, arguments);\n }\n OS2Table.prototype.tag = \"OS/2\";\n OS2Table.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readUInt16();\n this.averageCharWidth = data.readShort();\n this.weightClass = data.readUInt16();\n this.widthClass = data.readUInt16();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort();\n this.ySubscriptYSize = data.readShort();\n this.ySubscriptXOffset = data.readShort();\n this.ySubscriptYOffset = data.readShort();\n this.ySuperscriptXSize = data.readShort();\n this.ySuperscriptYSize = data.readShort();\n this.ySuperscriptXOffset = data.readShort();\n this.ySuperscriptYOffset = data.readShort();\n this.yStrikeoutSize = data.readShort();\n this.yStrikeoutPosition = data.readShort();\n this.familyClass = data.readShort();\n this.panose = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 10; ++i) {\n _results.push(data.readByte());\n }\n return _results;\n })();\n this.charRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 4; ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort();\n this.descent = data.readShort();\n this.lineGap = data.readShort();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 2; i = ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n return (this.maxContext = data.readShort());\n }\n }\n };\n /*OS2Table.prototype.encode = function () {\n return this.raw();\n };*/\n return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n var POSTSCRIPT_GLYPHS;\n __extends(PostTable, _super);\n\n function PostTable() {\n return PostTable.__super__.constructor.apply(this, arguments);\n }\n PostTable.prototype.tag = \"post\";\n PostTable.prototype.parse = function(data) {\n var length, numberOfGlyphs, _results;\n data.pos = this.offset;\n this.format = data.readInt();\n this.italicAngle = data.readInt();\n this.underlinePosition = data.readShort();\n this.underlineThickness = data.readShort();\n this.isFixedPitch = data.readInt();\n this.minMemType42 = data.readInt();\n this.maxMemType42 = data.readInt();\n this.minMemType1 = data.readInt();\n this.maxMemType1 = data.readInt();\n switch (this.format) {\n case 0x00010000:\n break;\n case 0x00020000:\n numberOfGlyphs = data.readUInt16();\n this.glyphNameIndex = [];\n var i;\n for (\n i = 0;\n 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n i = 0 <= numberOfGlyphs ? ++i : --i\n ) {\n this.glyphNameIndex.push(data.readUInt16());\n }\n this.names = [];\n _results = [];\n while (data.pos < this.offset + this.length) {\n length = data.readByte();\n _results.push(this.names.push(data.readString(length)));\n }\n return _results;\n case 0x00025000:\n numberOfGlyphs = data.readUInt16();\n return (this.offsets = data.read(numberOfGlyphs));\n case 0x00030000:\n break;\n case 0x00040000:\n return (this.map = function() {\n var _j, _ref, _results1;\n _results1 = [];\n for (\n i = _j = 0, _ref = this.file.maxp.numGlyphs;\n 0 <= _ref ? _j < _ref : _j > _ref;\n i = 0 <= _ref ? ++_j : --_j\n ) {\n _results1.push(data.readUInt32());\n }\n return _results1;\n }.call(this));\n }\n };\n /*PostTable.prototype.glyphFor = function (code) {\n var index;\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 0x00020000:\n index = this.glyphNameIndex[code];\n if (index <= 257) {\n return POSTSCRIPT_GLYPHS[index];\n }\n else {\n return this.names[index - 258] || '.notdef';\n }\n break;\n case 0x00025000:\n return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n case 0x00030000:\n return '.notdef';\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };*/\n /*PostTable.prototype.encode = function (mapping) {\n var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n if (!this.exists) {\n return null;\n }\n raw = this.raw();\n if (this.format === 0x00030000) {\n return raw;\n }\n table = new Data(raw.slice(0, 32));\n table.writeUInt32(0x00020000);\n table.pos = 32;\n indexes = [];\n strings = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n post = this.glyphFor(id);\n position = POSTSCRIPT_GLYPHS.indexOf(post);\n if (position !== -1) {\n indexes.push(position);\n }\n else {\n indexes.push(257 + strings.length);\n strings.push(post);\n }\n }\n table.writeUInt16(Object.keys(mapping).length);\n for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n index = indexes[_j];\n table.writeUInt16(index);\n }\n for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n string = strings[_k];\n table.writeByte(string.length);\n table.writeString(string);\n }\n return table.data;\n };*/\n POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\\nbracketleft backslash bracketright asciicircum underscore grave\\na b c d e f g h i j k l m n o p q r s t u v w x y z\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n /\\s+/g\n );\n return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n function NameEntry(raw, entry) {\n this.raw = raw;\n this.length = raw.length;\n this.platformID = entry.platformID;\n this.encodingID = entry.encodingID;\n this.languageID = entry.languageID;\n }\n return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n var subsetTag;\n __extends(NameTable, _super);\n\n function NameTable() {\n return NameTable.__super__.constructor.apply(this, arguments);\n }\n NameTable.prototype.tag = \"name\";\n NameTable.prototype.parse = function(data) {\n var count,\n entries,\n entry,\n i,\n name,\n stringOffset,\n strings,\n text,\n _j,\n _len,\n _name;\n data.pos = this.offset;\n data.readShort(); //format\n count = data.readShort();\n stringOffset = data.readShort();\n entries = [];\n for (\n i = 0;\n 0 <= count ? i < count : i > count;\n i = 0 <= count ? ++i : --i\n ) {\n entries.push({\n platformID: data.readShort(),\n encodingID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: this.offset + stringOffset + data.readShort()\n });\n }\n strings = {};\n for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n entry = entries[i];\n data.pos = entry.offset;\n text = data.readString(entry.length);\n name = new NameEntry(text, entry);\n if (strings[(_name = entry.nameID)] == null) {\n strings[_name] = [];\n }\n strings[entry.nameID].push(name);\n }\n this.strings = strings;\n this.copyright = strings[0];\n this.fontFamily = strings[1];\n this.fontSubfamily = strings[2];\n this.uniqueSubfamily = strings[3];\n this.fontName = strings[4];\n this.version = strings[5];\n try {\n this.postscriptName = strings[6][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n } catch (e) {\n this.postscriptName = strings[4][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n }\n this.trademark = strings[7];\n this.manufacturer = strings[8];\n this.designer = strings[9];\n this.description = strings[10];\n this.vendorUrl = strings[11];\n this.designerUrl = strings[12];\n this.license = strings[13];\n this.licenseUrl = strings[14];\n this.preferredFamily = strings[15];\n this.preferredSubfamily = strings[17];\n this.compatibleFull = strings[18];\n return (this.sampleText = strings[19]);\n };\n subsetTag = \"AAAAAA\";\n /*NameTable.prototype.encode = function () {\n var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n strings = {};\n _ref = this.strings;\n for (id in _ref) {\n val = _ref[id];\n strings[id] = val;\n }\n postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n platformID: 1\n , encodingID: 0\n , languageID: 0\n });\n strings[6] = [postscriptName];\n subsetTag = successorOf(subsetTag);\n strCount = 0;\n for (id in strings) {\n list = strings[id];\n if (list != null) {\n strCount += list.length;\n }\n }\n table = new Data;\n strTable = new Data;\n table.writeShort(0);\n table.writeShort(strCount);\n table.writeShort(6 + 12 * strCount);\n for (nameID in strings) {\n list = strings[nameID];\n if (list != null) {\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n string = list[_i];\n table.writeShort(string.platformID);\n table.writeShort(string.encodingID);\n table.writeShort(string.languageID);\n table.writeShort(nameID);\n table.writeShort(string.length);\n table.writeShort(strTable.pos);\n strTable.writeString(string.raw);\n }\n }\n }\n return nameTable = {\n postscriptName: postscriptName.raw\n , table: table.data.concat(strTable.data)\n };\n };*/\n return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n __extends(MaxpTable, _super);\n\n function MaxpTable() {\n return MaxpTable.__super__.constructor.apply(this, arguments);\n }\n MaxpTable.prototype.tag = \"maxp\";\n MaxpTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.numGlyphs = data.readUInt16();\n this.maxPoints = data.readUInt16();\n this.maxContours = data.readUInt16();\n this.maxCompositePoints = data.readUInt16();\n this.maxComponentContours = data.readUInt16();\n this.maxZones = data.readUInt16();\n this.maxTwilightPoints = data.readUInt16();\n this.maxStorage = data.readUInt16();\n this.maxFunctionDefs = data.readUInt16();\n this.maxInstructionDefs = data.readUInt16();\n this.maxStackElements = data.readUInt16();\n this.maxSizeOfInstructions = data.readUInt16();\n this.maxComponentElements = data.readUInt16();\n return (this.maxComponentDepth = data.readUInt16());\n };\n /*MaxpTable.prototype.encode = function (ids) {\n var table;\n table = new Data;\n table.writeInt(this.version);\n table.writeUInt16(ids.length);\n table.writeUInt16(this.maxPoints);\n table.writeUInt16(this.maxContours);\n table.writeUInt16(this.maxCompositePoints);\n table.writeUInt16(this.maxComponentContours);\n table.writeUInt16(this.maxZones);\n table.writeUInt16(this.maxTwilightPoints);\n table.writeUInt16(this.maxStorage);\n table.writeUInt16(this.maxFunctionDefs);\n table.writeUInt16(this.maxInstructionDefs);\n table.writeUInt16(this.maxStackElements);\n table.writeUInt16(this.maxSizeOfInstructions);\n table.writeUInt16(this.maxComponentElements);\n table.writeUInt16(this.maxComponentDepth);\n return table.data;\n };*/\n return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n __extends(HmtxTable, _super);\n\n function HmtxTable() {\n return HmtxTable.__super__.constructor.apply(this, arguments);\n }\n HmtxTable.prototype.tag = \"hmtx\";\n HmtxTable.prototype.parse = function(data) {\n var i, last, lsbCount, m, _j, _ref, _results;\n data.pos = this.offset;\n this.metrics = [];\n for (\n i = 0, _ref = this.file.hhea.numberOfMetrics;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n this.metrics.push({\n advance: data.readUInt16(),\n lsb: data.readInt16()\n });\n }\n lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n this.leftSideBearings = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(data.readInt16());\n }\n return _results;\n })();\n this.widths = function() {\n var _j, _len, _ref1, _results;\n _ref1 = this.metrics;\n _results = [];\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n m = _ref1[_j];\n _results.push(m.advance);\n }\n return _results;\n }.call(this);\n last = this.widths[this.widths.length - 1];\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(this.widths.push(last));\n }\n return _results;\n };\n /***************************************************************/\n /* function : forGlyph */\n /* comment : Returns the advance width and lsb for this glyph. */\n /***************************************************************/\n HmtxTable.prototype.forGlyph = function(id) {\n if (id in this.metrics) {\n return this.metrics[id];\n }\n return {\n advance: this.metrics[this.metrics.length - 1].advance,\n lsb: this.leftSideBearings[id - this.metrics.length]\n };\n };\n /*HmtxTable.prototype.encode = function (mapping) {\n var id, metric, table, _i, _len;\n table = new Data;\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n metric = this.forGlyph(id);\n table.writeUInt16(metric.advance);\n table.writeUInt16(metric.lsb);\n }\n return table.data;\n };*/\n return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n __extends(GlyfTable, _super);\n\n function GlyfTable() {\n return GlyfTable.__super__.constructor.apply(this, arguments);\n }\n GlyfTable.prototype.tag = \"glyf\";\n GlyfTable.prototype.parse = function() {\n return (this.cache = {});\n };\n GlyfTable.prototype.glyphFor = function(id) {\n var data,\n index,\n length,\n loca,\n numberOfContours,\n raw,\n xMax,\n xMin,\n yMax,\n yMin;\n if (id in this.cache) {\n return this.cache[id];\n }\n loca = this.file.loca;\n data = this.file.contents;\n index = loca.indexOf(id);\n length = loca.lengthOf(id);\n if (length === 0) {\n return (this.cache[id] = null);\n }\n data.pos = this.offset + index;\n raw = new Data(data.read(length));\n numberOfContours = raw.readShort();\n xMin = raw.readShort();\n yMin = raw.readShort();\n xMax = raw.readShort();\n yMax = raw.readShort();\n if (numberOfContours === -1) {\n this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n } else {\n this.cache[id] = new SimpleGlyph(\n raw,\n numberOfContours,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n return this.cache[id];\n };\n GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n var glyph, id, offsets, table, _i, _len;\n table = [];\n offsets = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n glyph = glyphs[id];\n offsets.push(table.length);\n if (glyph) {\n table = table.concat(glyph.encode(old2new));\n }\n }\n offsets.push(table.length);\n return {\n table: table,\n offsets: offsets\n };\n };\n return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n /**************************************************************************/\n /* function : SimpleGlyph */\n /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n /**************************************************************************/\n function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n this.raw = raw;\n this.numberOfContours = numberOfContours;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = false;\n }\n SimpleGlyph.prototype.encode = function() {\n return this.raw.data;\n };\n return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n var ARG_1_AND_2_ARE_WORDS,\n MORE_COMPONENTS,\n WE_HAVE_AN_X_AND_Y_SCALE,\n WE_HAVE_A_SCALE,\n WE_HAVE_A_TWO_BY_TWO,\n WE_HAVE_INSTRUCTIONS;\n ARG_1_AND_2_ARE_WORDS = 0x0001;\n WE_HAVE_A_SCALE = 0x0008;\n MORE_COMPONENTS = 0x0020;\n WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n WE_HAVE_A_TWO_BY_TWO = 0x0080;\n WE_HAVE_INSTRUCTIONS = 0x0100;\n\n /********************************************************************************************************************/\n /* function : CompoundGlypg generator */\n /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n /********************************************************************************************************************/\n function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n var data, flags;\n this.raw = raw;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = true;\n this.glyphIDs = [];\n this.glyphOffsets = [];\n data = this.raw;\n while (true) {\n flags = data.readShort();\n this.glyphOffsets.push(data.pos);\n this.glyphIDs.push(data.readUInt16());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n data.pos += 4;\n } else {\n data.pos += 2;\n }\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.pos += 8;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.pos += 4;\n } else if (flags & WE_HAVE_A_SCALE) {\n data.pos += 2;\n }\n }\n }\n /****************************************************************************************************************/\n /* function : CompoundGlypg encode */\n /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n /****************************************************************************************************************/\n CompoundGlyph.prototype.encode = function() {\n var i, result, _len, _ref;\n result = new Data(__slice.call(this.raw.data));\n _ref = this.glyphIDs;\n for (i = 0, _len = _ref.length; i < _len; ++i) {\n result.pos = this.glyphOffsets[i];\n }\n return result.data;\n };\n return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n __extends(LocaTable, _super);\n\n function LocaTable() {\n return LocaTable.__super__.constructor.apply(this, arguments);\n }\n LocaTable.prototype.tag = \"loca\";\n LocaTable.prototype.parse = function(data) {\n var format, i;\n data.pos = this.offset;\n format = this.file.head.indexToLocFormat;\n if (format === 0) {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 2) {\n _results.push(data.readUInt16() * 2);\n }\n return _results;\n }.call(this));\n } else {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 4) {\n _results.push(data.readUInt32());\n }\n return _results;\n }.call(this));\n }\n };\n LocaTable.prototype.indexOf = function(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n var LocaTable = new Uint32Array(this.offsets.length);\n var glyfPtr = 0;\n var listGlyf = 0;\n for (var k = 0; k < LocaTable.length; ++k) {\n LocaTable[k] = glyfPtr;\n if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n ++listGlyf;\n LocaTable[k] = glyfPtr;\n var start = this.offsets[k];\n var len = this.offsets[k + 1] - start;\n if (len > 0) {\n glyfPtr += len;\n }\n }\n }\n var newLocaTable = new Array(LocaTable.length * 4);\n for (var j = 0; j < LocaTable.length; ++j) {\n newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n }\n return newLocaTable;\n };\n return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n var key, ret, val;\n ret = {};\n for (key in object) {\n val = object[key];\n ret[val] = key;\n }\n return ret;\n};\n\n/*var successorOf = function (input) {\n var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n alphabet = 'abcdefghijklmnopqrstuvwxyz';\n length = alphabet.length;\n result = input;\n i = input.length;\n while (i >= 0) {\n last = input.charAt(--i);\n if (isNaN(last)) {\n index = alphabet.indexOf(last.toLowerCase());\n if (index === -1) {\n next = last;\n carry = true;\n }\n else {\n next = alphabet.charAt((index + 1) % length);\n isUpperCase = last === last.toUpperCase();\n if (isUpperCase) {\n next = next.toUpperCase();\n }\n carry = index + 1 >= length;\n if (carry && i === 0) {\n added = isUpperCase ? 'A' : 'a';\n result = added + next + result.slice(1);\n break;\n }\n }\n }\n else {\n next = +last + 1;\n carry = next > 9;\n if (carry) {\n next = 0;\n }\n if (carry && i === 0) {\n result = '1' + next + result.slice(1);\n break;\n }\n }\n result = result.slice(0, i) + next + result.slice(i + 1);\n if (!carry) {\n break;\n }\n }\n return result;\n };*/\n\nvar Subset = (function() {\n function Subset(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.next = 33;\n }\n /*Subset.prototype.use = function (character) {\n var i, _i, _ref;\n if (typeof character === 'string') {\n for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.use(character.charCodeAt(i));\n }\n return;\n }\n if (!this.unicodes[character]) {\n this.subset[this.next] = character;\n return this.unicodes[character] = this.next++;\n }\n };*/\n /*Subset.prototype.encodeText = function (text) {\n var char, i, string, _i, _ref;\n string = '';\n for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n char = this.unicodes[text.charCodeAt(i)];\n string += String.fromCharCode(char);\n }\n return string;\n };*/\n /***************************************************************/\n /* function : generateCmap */\n /* comment : Returns the unicode cmap for this font. */\n /***************************************************************/\n Subset.prototype.generateCmap = function() {\n var mapping, roman, unicode, unicodeCmap, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n mapping = {};\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n mapping[roman] = unicodeCmap[unicode];\n }\n return mapping;\n };\n /*Subset.prototype.glyphIDs = function () {\n var ret, roman, unicode, unicodeCmap, val, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n ret = [0];\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n val = unicodeCmap[unicode];\n if ((val != null) && __indexOf.call(ret, val) < 0) {\n ret.push(val);\n }\n }\n return ret.sort();\n };*/\n /******************************************************************/\n /* function : glyphsFor */\n /* comment : Returns simple glyph objects for the input character.*/\n /******************************************************************/\n Subset.prototype.glyphsFor = function(glyphIDs) {\n var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n glyphs = {};\n for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n id = glyphIDs[_i];\n glyphs[id] = this.font.glyf.glyphFor(id);\n }\n additionalIDs = [];\n for (id in glyphs) {\n glyph = glyphs[id];\n if (glyph != null ? glyph.compound : void 0) {\n additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n }\n }\n if (additionalIDs.length > 0) {\n _ref = this.glyphsFor(additionalIDs);\n for (id in _ref) {\n glyph = _ref[id];\n glyphs[id] = glyph;\n }\n }\n return glyphs;\n };\n /***************************************************************/\n /* function : encode */\n /* comment : Encode various tables for the characters you use. */\n /***************************************************************/\n Subset.prototype.encode = function(glyID, indexToLocFormat) {\n var cmap,\n code,\n glyf,\n glyphs,\n id,\n ids,\n loca,\n new2old,\n newIDs,\n nextGlyphID,\n old2new,\n oldID,\n oldIDs,\n tables,\n _ref;\n cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n glyphs = this.glyphsFor(glyID);\n old2new = {\n 0: 0\n };\n _ref = cmap.charMap;\n for (code in _ref) {\n ids = _ref[code];\n old2new[ids.old] = ids[\"new\"];\n }\n nextGlyphID = cmap.maxGlyphID;\n for (oldID in glyphs) {\n if (!(oldID in old2new)) {\n old2new[oldID] = nextGlyphID++;\n }\n }\n new2old = invert(old2new);\n newIDs = Object.keys(new2old).sort(function(a, b) {\n return a - b;\n });\n oldIDs = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n id = newIDs[_i];\n _results.push(new2old[id]);\n }\n return _results;\n })();\n glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n loca = this.font.loca.encode(glyf.offsets, oldIDs);\n tables = {\n cmap: this.font.cmap.raw(),\n glyf: glyf.table,\n loca: loca,\n hmtx: this.font.hmtx.raw(),\n hhea: this.font.hhea.raw(),\n maxp: this.font.maxp.raw(),\n post: this.font.post.raw(),\n name: this.font.name.raw(),\n head: this.font.head.encode(indexToLocFormat)\n };\n if (this.font.os2.exists) {\n tables[\"OS/2\"] = this.font.os2.raw();\n }\n return this.font.directory.encode(tables);\n };\n return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n var pad;\n\n function PDFObject() {}\n pad = function(str, length) {\n return (Array(length + 1).join(\"0\") + str).slice(-length);\n };\n /*****************************************************************************/\n /* function : convert */\n /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n /*****************************************************************************/\n PDFObject.convert = function(object) {\n var e, items, key, out, val;\n if (Array.isArray(object)) {\n items = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = object.length; _i < _len; _i++) {\n e = object[_i];\n _results.push(PDFObject.convert(e));\n }\n return _results;\n })().join(\" \");\n return \"[\" + items + \"]\";\n } else if (typeof object === \"string\") {\n return \"/\" + object;\n } else if (object != null ? object.isString : void 0) {\n return \"(\" + object + \")\";\n } else if (object instanceof Date) {\n return (\n \"(D:\" +\n pad(object.getUTCFullYear(), 4) +\n pad(object.getUTCMonth(), 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n \"Z)\"\n );\n } else if ({}.toString.call(object) === \"[object Object]\") {\n out = [\"<<\"];\n for (key in object) {\n val = object[key];\n out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n }\n out.push(\">>\");\n return out.join(\"\\n\");\n } else {\n return \"\" + object;\n }\n };\n return PDFObject;\n})();\n"],"names":["zlibSync","unzlibSync"],"mappings":"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,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;AAC1C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC;AACpB,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5C,IAAI,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,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AAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,I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,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR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ACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,EAAE,GAAG,EAAE,CAAC;AACpB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;A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,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT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AAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7E,MAAM,EAAE,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,CAAC;AACT,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,CAAC;AACT,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,CAAC;AACT,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,OAAO;AACP,MAAM,EAAE,GAAG;AACX,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,QAAQ,IAAI;AACZ,OAAO;AACP,MAAM,EAAE,GAAG,CAAC;AACZ,MAAM,EAAE,GAAG;AACX,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,OAAO;AACP,MAAM,EAAE,GAAG;AACX,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,CAAC;AACT,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,EAAE;AACV,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,GAAG;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,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,WAAW;AACX,UAAU;AACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG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AAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,G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"} \ No newline at end of file diff --git a/lib/jspdf/jspdf.node.min.js b/lib/jspdf/jspdf.node.min.js new file mode 100644 index 0000000..08c422c --- /dev/null +++ b/lib/jspdf/jspdf.node.min.js @@ -0,0 +1,456 @@ +/** @license + * + * jsPDF - PDF Document creation from JavaScript + * Version 2.5.1 Built on 2022-01-28T15:37:57.791Z + * CommitID 00000000 + * + * Copyright (c) 2010-2021 James Hall , https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e,r=require("fflate"),n=function(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this}(); +/** + * A class to parse color values + * @author Stoyan Stefanov + * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} + * @license Use it if you like it + */ +function i(t){var e;t=t||"",this.ok=!1,"#"==t.charAt(0)&&(t=t.substr(1,6));t={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"}[t=(t=t.replace(/ /g,"")).toLowerCase()]||t;for(var r=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],n=0;n255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),r=this.b.toString(16);return 1==t.length&&(t="0"+t),1==e.length&&(e="0"+e),1==r.length&&(r="0"+r),"#"+t+e+r}}function a(){n.console&&"function"==typeof n.console.log&&n.console.log.apply(n.console,arguments)}t=require("atob"),e=require("btoa");var o={log:a,warn:function(t){n.console&&("function"==typeof n.console.warn?n.console.warn.apply(n.console,arguments):a.call(null,arguments))},error:function(t){n.console&&("function"==typeof n.console.error?n.console.error.apply(n.console,arguments):a(t))}}; +/** + * @license + * Joseph Myers does not specify a particular license for his work. + * + * Author: Joseph Myers + * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js + * + * Modified by: Owen Leong + */function s(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r=u(r,n,i,a,e[0],7,-680876936),a=u(a,r,n,i,e[1],12,-389564586),i=u(i,a,r,n,e[2],17,606105819),n=u(n,i,a,r,e[3],22,-1044525330),r=u(r,n,i,a,e[4],7,-176418897),a=u(a,r,n,i,e[5],12,1200080426),i=u(i,a,r,n,e[6],17,-1473231341),n=u(n,i,a,r,e[7],22,-45705983),r=u(r,n,i,a,e[8],7,1770035416),a=u(a,r,n,i,e[9],12,-1958414417),i=u(i,a,r,n,e[10],17,-42063),n=u(n,i,a,r,e[11],22,-1990404162),r=u(r,n,i,a,e[12],7,1804603682),a=u(a,r,n,i,e[13],12,-40341101),i=u(i,a,r,n,e[14],17,-1502002290),r=h(r,n=u(n,i,a,r,e[15],22,1236535329),i,a,e[1],5,-165796510),a=h(a,r,n,i,e[6],9,-1069501632),i=h(i,a,r,n,e[11],14,643717713),n=h(n,i,a,r,e[0],20,-373897302),r=h(r,n,i,a,e[5],5,-701558691),a=h(a,r,n,i,e[10],9,38016083),i=h(i,a,r,n,e[15],14,-660478335),n=h(n,i,a,r,e[4],20,-405537848),r=h(r,n,i,a,e[9],5,568446438),a=h(a,r,n,i,e[14],9,-1019803690),i=h(i,a,r,n,e[3],14,-187363961),n=h(n,i,a,r,e[8],20,1163531501),r=h(r,n,i,a,e[13],5,-1444681467),a=h(a,r,n,i,e[2],9,-51403784),i=h(i,a,r,n,e[7],14,1735328473),r=l(r,n=h(n,i,a,r,e[12],20,-1926607734),i,a,e[5],4,-378558),a=l(a,r,n,i,e[8],11,-2022574463),i=l(i,a,r,n,e[11],16,1839030562),n=l(n,i,a,r,e[14],23,-35309556),r=l(r,n,i,a,e[1],4,-1530992060),a=l(a,r,n,i,e[4],11,1272893353),i=l(i,a,r,n,e[7],16,-155497632),n=l(n,i,a,r,e[10],23,-1094730640),r=l(r,n,i,a,e[13],4,681279174),a=l(a,r,n,i,e[0],11,-358537222),i=l(i,a,r,n,e[3],16,-722521979),n=l(n,i,a,r,e[6],23,76029189),r=l(r,n,i,a,e[9],4,-640364487),a=l(a,r,n,i,e[12],11,-421815835),i=l(i,a,r,n,e[15],16,530742520),r=f(r,n=l(n,i,a,r,e[2],23,-995338651),i,a,e[0],6,-198630844),a=f(a,r,n,i,e[7],10,1126891415),i=f(i,a,r,n,e[14],15,-1416354905),n=f(n,i,a,r,e[5],21,-57434055),r=f(r,n,i,a,e[12],6,1700485571),a=f(a,r,n,i,e[3],10,-1894986606),i=f(i,a,r,n,e[10],15,-1051523),n=f(n,i,a,r,e[1],21,-2054922799),r=f(r,n,i,a,e[8],6,1873313359),a=f(a,r,n,i,e[15],10,-30611744),i=f(i,a,r,n,e[6],15,-1560198380),n=f(n,i,a,r,e[13],21,1309151649),r=f(r,n,i,a,e[4],6,-145523070),a=f(a,r,n,i,e[11],10,-1120210379),i=f(i,a,r,n,e[2],15,718787259),n=f(n,i,a,r,e[9],21,-343485551),t[0]=w(r,t[0]),t[1]=w(n,t[1]),t[2]=w(i,t[2]),t[3]=w(a,t[3])}function c(t,e,r,n,i,a){return e=w(w(e,t),w(n,a)),w(e<>>32-i,r)}function u(t,e,r,n,i,a,o){return c(e&r|~e&n,t,e,i,a,o)}function h(t,e,r,n,i,a,o){return c(e&n|r&~n,t,e,i,a,o)}function l(t,e,r,n,i,a,o){return c(e^r^n,t,e,i,a,o)}function f(t,e,r,n,i,a,o){return c(r^(e|~n),t,e,i,a,o)}function d(t){var e,r=t.length,n=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=t.length;e+=64)s(n,p(t.substring(e-64,e)));t=t.substring(e-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e>2]|=t.charCodeAt(e)<<(e%4<<3);if(i[e>>2]|=128<<(e%4<<3),e>55)for(s(n,i),e=0;e<16;e++)i[e]=0;return i[14]=8*r,s(n,i),n}function p(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}var g="0123456789abcdef".split("");function m(t){for(var e="",r=0;r<4;r++)e+=g[t>>8*r+4&15]+g[t>>8*r&15];return e}function v(t){return String.fromCharCode((255&t)>>0,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function b(t){return d(t).map(v).join("")}var y="5d41402abc4b2a76b9719d911017c592"!=function(t){for(var e=0;e>16)+(e>>16)+(r>>16)<<16|65535&r}return t+e&4294967295} +/** + * @license + * FPDF is released under a permissive license: there is no usage restriction. + * You may embed it freely in your application (commercial or not), with or + * without modifications. + * + * Reference: http://www.fpdf.org/en/script/script37.php + */function N(t,e){var r,n,i,a;if(t!==r){for(var o=(i=t,a=1+(256/t.length>>0),new Array(a+1).join(i)),s=[],c=0;c<256;c++)s[c]=c;var u=0;for(c=0;c<256;c++){var h=s[c];u=(u+h+o.charCodeAt(c))%256,s[c]=s[u],s[u]=h}r=t,n=s}else s=n;var l=e.length,f=0,d=0,p="";for(c=0;c€/\f©þdSiz";let a=(e+this.padding).substr(0,32),o=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=b(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=N(this.encryptionKey,this.padding)}function x(t){if(/[^\u0000-\u00ff]/.test(t))throw new Error("Invalid PDF Name Object: "+t+", Only accept ASCII characters.");for(var e="",r=t.length,n=0;n126)e+="#"+("0"+i.toString(16)).slice(-2);else e+=t[n]}return e}function S(t){if("object"!=typeof t)throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)");var e={};this.subscribe=function(t,r,n){if(n=n||!1,"string"!=typeof t||"function"!=typeof r||"boolean"!=typeof n)throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)");e.hasOwnProperty(t)||(e[t]={});var i=Math.random().toString(35);return e[t][i]=[r,!!n],i},this.unsubscribe=function(t){for(var r in e)if(e[r][t])return delete e[r][t],0===Object.keys(e[r]).length&&delete e[r],!0;return!1},this.publish=function(r){if(e.hasOwnProperty(r)){var i=Array.prototype.slice.call(arguments,1),a=[];for(var s in e[r]){var c=e[r][s];try{c[0].apply(t,i)}catch(t){n.console&&o.error("jsPDF PubSub Error",t.message,t)}c[1]&&a.push(s)}a.length&&a.forEach(this.unsubscribe)}},this.getTopics=function(){return e}}function _(t){if(!(this instanceof _))return new _(t);var e="opacity,stroke-opacity".split(",");for(var r in t)t.hasOwnProperty(r)&&e.indexOf(r)>=0&&(this[r]=t[r]);this.id="",this.objectNumber=-1}function P(t,e){this.gState=t,this.matrix=e,this.id="",this.objectNumber=-1}function k(t,e,r,n,i){if(!(this instanceof k))return new k(t,e,r,n,i);this.type="axial"===t?2:3,this.coords=e,this.colors=r,P.call(this,n,i)}function F(t,e,r,n,i){if(!(this instanceof F))return new F(t,e,r,n,i);this.boundingBox=t,this.xStep=e,this.yStep=r,this.stream="",this.cloneIndex=0,P.call(this,n,i)}function I(t){var r,a="string"==typeof arguments[0]?arguments[0]:"p",s=arguments[1],c=arguments[2],u=arguments[3],h=[],l=1,f=16,d="S",p=null;"object"==typeof(t=t||{})&&(a=t.orientation,s=t.unit||s,c=t.format||c,u=t.compress||t.compressPdf||u,null!==(p=t.encryption||null)&&(p.userPassword=p.userPassword||"",p.ownerPassword=p.ownerPassword||"",p.userPermissions=p.userPermissions||[]),l="number"==typeof t.userUnit?Math.abs(t.userUnit):1,void 0!==t.precision&&(r=t.precision),void 0!==t.floatPrecision&&(f=t.floatPrecision),d=t.defaultPathOperation||"S"),h=t.filters||(!0===u?["FlateEncode"]:h),s=s||"mm",a=(""+(a||"P")).toLowerCase();var g=t.putOnlyUsedFonts||!1,m={},v={internal:{},__private__:{}};v.__private__.PubSub=S;var b="1.3",y=v.__private__.getPdfVersion=function(){return b};v.__private__.setPdfVersion=function(t){b=t};var w={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};v.__private__.getPageFormats=function(){return w};var N=v.__private__.getPageFormat=function(t){return w[t]};c=c||"a4";var L={COMPAT:"compat",ADVANCED:"advanced"},P=L.COMPAT;function C(){this.saveGraphicsState(),ut(new Ht(xt,0,0,-xt,0,Er()*xt).toString()+" cm"),this.setFontSize(this.getFontSize()/xt),d="n",P=L.ADVANCED}function j(){this.restoreGraphicsState(),d="S",P=L.COMPAT}var O=v.__private__.combineFontStyleAndFontWeight=function(t,e){if("bold"==t&&"normal"==e||"bold"==t&&400==e||"normal"==t&&"italic"==e||"bold"==t&&"italic"==e)throw new Error("Invalid Combination of fontweight and fontstyle");return e&&(t=400==e||"normal"===e?"italic"===t?"italic":"normal":700!=e&&"bold"!==e||"normal"!==t?(700==e?"bold":e)+""+t:"bold"),t};v.advancedAPI=function(t){var e=P===L.COMPAT;return e&&C.call(this),"function"!=typeof t||(t(this),e&&j.call(this)),this},v.compatAPI=function(t){var e=P===L.ADVANCED;return e&&j.call(this),"function"!=typeof t||(t(this),e&&C.call(this)),this},v.isAdvancedAPI=function(){return P===L.ADVANCED};var B,q=function(t){if(P!==L.ADVANCED)throw new Error(t+" is only available in 'advanced' API mode. You need to call advancedAPI() first.")},M=v.roundToPrecision=v.__private__.roundToPrecision=function(t,e){var n=r||e;if(isNaN(t)||isNaN(n))throw new Error("Invalid argument passed to jsPDF.roundToPrecision");return t.toFixed(n).replace(/0+$/,"")};B=v.hpf=v.__private__.hpf="number"==typeof f?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return M(t,f)}:"smart"===f?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return M(t,t>-1&&t<1?16:5)}:function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return M(t,16)};var E=v.f2=v.__private__.f2=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f2");return M(t,2)},D=v.__private__.f3=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f3");return M(t,3)},R=v.scale=v.__private__.scale=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.scale");return P===L.COMPAT?t*xt:P===L.ADVANCED?t:void 0},T=function(t){return P===L.COMPAT?Er()-t:P===L.ADVANCED?t:void 0},z=function(t){return R(T(t))};v.__private__.setPrecision=v.setPrecision=function(t){"number"==typeof parseInt(t,10)&&(r=parseInt(t,10))};var U,H="00000000000000000000000000000000",W=v.__private__.getFileId=function(){return H},V=v.__private__.setFileId=function(t){return H=void 0!==t&&/^[a-fA-F0-9]{32}$/.test(t)?t.toUpperCase():H.split("").map((function(){return"ABCDEF0123456789".charAt(Math.floor(16*Math.random()))})).join(""),null!==p&&(Ve=new A(p.userPermissions,p.userPassword,p.ownerPassword,H)),H};v.setFileId=function(t){return V(t),this},v.getFileId=function(){return W()};var G=v.__private__.convertDateToPDFDate=function(t){var e=t.getTimezoneOffset(),r=e<0?"+":"-",n=Math.floor(Math.abs(e/60)),i=Math.abs(e%60),a=[r,Z(n),"'",Z(i),"'"].join("");return["D:",t.getFullYear(),Z(t.getMonth()+1),Z(t.getDate()),Z(t.getHours()),Z(t.getMinutes()),Z(t.getSeconds()),a].join("")},Y=v.__private__.convertPDFDateToDate=function(t){var e=parseInt(t.substr(2,4),10),r=parseInt(t.substr(6,2),10)-1,n=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),a=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return new Date(e,r,n,i,a,o,0)},J=v.__private__.setCreationDate=function(t){var e;if(void 0===t&&(t=new Date),t instanceof Date)e=G(t);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t))throw new Error("Invalid argument passed to jsPDF.setCreationDate");e=t}return U=e},X=v.__private__.getCreationDate=function(t){var e=U;return"jsDate"===t&&(e=Y(U)),e};v.setCreationDate=function(t){return J(t),this},v.getCreationDate=function(t){return X(t)};var K,Z=v.__private__.padd2=function(t){return("0"+parseInt(t)).slice(-2)},$=v.__private__.padd2Hex=function(t){return("00"+(t=t.toString())).substr(t.length)},Q=0,tt=[],et=[],rt=0,nt=[],it=[],at=!1,ot=et,st=function(){Q=0,rt=0,et=[],tt=[],nt=[],Zt=Jt(),$t=Jt()};v.__private__.setCustomOutputDestination=function(t){at=!0,ot=t};var ct=function(t){at||(ot=t)};v.__private__.resetCustomOutputDestination=function(){at=!1,ot=et};var ut=v.__private__.out=function(t){return t=t.toString(),rt+=t.length+1,ot.push(t),ot},ht=v.__private__.write=function(t){return ut(1===arguments.length?t.toString():Array.prototype.join.call(arguments," "))},lt=v.__private__.getArrayBuffer=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r);e--;)n[e]=t.charCodeAt(e);return r},ft=[["Helvetica","helvetica","normal","WinAnsiEncoding"],["Helvetica-Bold","helvetica","bold","WinAnsiEncoding"],["Helvetica-Oblique","helvetica","italic","WinAnsiEncoding"],["Helvetica-BoldOblique","helvetica","bolditalic","WinAnsiEncoding"],["Courier","courier","normal","WinAnsiEncoding"],["Courier-Bold","courier","bold","WinAnsiEncoding"],["Courier-Oblique","courier","italic","WinAnsiEncoding"],["Courier-BoldOblique","courier","bolditalic","WinAnsiEncoding"],["Times-Roman","times","normal","WinAnsiEncoding"],["Times-Bold","times","bold","WinAnsiEncoding"],["Times-Italic","times","italic","WinAnsiEncoding"],["Times-BoldItalic","times","bolditalic","WinAnsiEncoding"],["ZapfDingbats","zapfdingbats","normal",null],["Symbol","symbol","normal",null]];v.__private__.getStandardFonts=function(){return ft};var dt=t.fontSize||16;v.__private__.setFontSize=v.setFontSize=function(t){return dt=P===L.ADVANCED?t/xt:t,this};var pt,gt=v.__private__.getFontSize=v.getFontSize=function(){return P===L.COMPAT?dt:dt*xt},mt=t.R2L||!1;v.__private__.setR2L=v.setR2L=function(t){return mt=t,this},v.__private__.getR2L=v.getR2L=function(){return mt};var vt,bt=v.__private__.setZoomMode=function(t){var e=[void 0,null,"fullwidth","fullheight","fullpage","original"];if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(t))pt=t;else if(isNaN(t)){if(-1===e.indexOf(t))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "'+t+'" is not recognized.');pt=t}else pt=parseInt(t,10)};v.__private__.getZoomMode=function(){return pt};var yt,wt=v.__private__.setPageMode=function(t){if(-1==[void 0,null,"UseNone","UseOutlines","UseThumbs","FullScreen"].indexOf(t))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "'+t+'" is not recognized.');vt=t};v.__private__.getPageMode=function(){return vt};var Nt=v.__private__.setLayoutMode=function(t){if(-1==[void 0,null,"continuous","single","twoleft","tworight","two"].indexOf(t))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "'+t+'" is not recognized.');yt=t};v.__private__.getLayoutMode=function(){return yt},v.__private__.setDisplayMode=v.setDisplayMode=function(t,e,r){return bt(t),Nt(e),wt(r),this};var Lt={title:"",subject:"",author:"",keywords:"",creator:""};v.__private__.getDocumentProperty=function(t){if(-1===Object.keys(Lt).indexOf(t))throw new Error("Invalid argument passed to jsPDF.getDocumentProperty");return Lt[t]},v.__private__.getDocumentProperties=function(){return Lt},v.__private__.setDocumentProperties=v.setProperties=v.setDocumentProperties=function(t){for(var e in Lt)Lt.hasOwnProperty(e)&&t[e]&&(Lt[e]=t[e]);return this},v.__private__.setDocumentProperty=function(t,e){if(-1===Object.keys(Lt).indexOf(t))throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty");return Lt[t]=e};var At,xt,St,_t,Pt,kt={},Ft={},It=[],Ct={},jt={},Ot={},Bt={},qt=null,Mt=0,Et=[],Dt=new S(v),Rt=t.hotfixes||[],Tt={},zt={},Ut=[],Ht=function(t,e,r,n,i,a){if(!(this instanceof Ht))return new Ht(t,e,r,n,i,a);isNaN(t)&&(t=1),isNaN(e)&&(e=0),isNaN(r)&&(r=0),isNaN(n)&&(n=1),isNaN(i)&&(i=0),isNaN(a)&&(a=0),this._matrix=[t,e,r,n,i,a]};Object.defineProperty(Ht.prototype,"sx",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Ht.prototype,"shy",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Ht.prototype,"shx",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Ht.prototype,"sy",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Ht.prototype,"tx",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Ht.prototype,"ty",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Ht.prototype,"a",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Ht.prototype,"b",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Ht.prototype,"c",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Ht.prototype,"d",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Ht.prototype,"e",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Ht.prototype,"f",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Ht.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Ht.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Ht.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Ht.prototype,"isIdentity",{get:function(){return 1===this.sx&&(0===this.shy&&(0===this.shx&&(1===this.sy&&(0===this.tx&&0===this.ty))))}}),Ht.prototype.join=function(t){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(B).join(t)},Ht.prototype.multiply=function(t){var e=t.sx*this.sx+t.shy*this.shx,r=t.sx*this.shy+t.shy*this.sy,n=t.shx*this.sx+t.sy*this.shx,i=t.shx*this.shy+t.sy*this.sy,a=t.tx*this.sx+t.ty*this.shx+this.tx,o=t.tx*this.shy+t.ty*this.sy+this.ty;return new Ht(e,r,n,i,a,o)},Ht.prototype.decompose=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(t*t+e*e),s=(t/=o)*r+(e/=o)*n;r-=t*s,n-=e*s;var c=Math.sqrt(r*r+n*n);return s/=c,t*(n/=c)>16&255,n=u>>8&255,a=255&u}if(void 0===n||void 0===o&&r===n&&n===a)if("string"==typeof r)e=r+" "+s[0];else switch(t.precision){case 2:e=E(r/255)+" "+s[0];break;case 3:default:e=D(r/255)+" "+s[0]}else if(void 0===o||"object"==typeof o){if(o&&!isNaN(o.a)&&0===o.a)return e=["1.","1.","1.",s[1]].join(" ");if("string"==typeof r)e=[r,n,a,s[1]].join(" ");else switch(t.precision){case 2:e=[E(r/255),E(n/255),E(a/255),s[1]].join(" ");break;default:case 3:e=[D(r/255),D(n/255),D(a/255),s[1]].join(" ")}}else if("string"==typeof r)e=[r,n,a,o,s[2]].join(" ");else switch(t.precision){case 2:e=[E(r),E(n),E(a),E(o),s[2]].join(" ");break;case 3:default:e=[D(r),D(n),D(a),D(o),s[2]].join(" ")}return e},ee=v.__private__.getFilters=function(){return h},re=v.__private__.putStream=function(t){var e=(t=t||{}).data||"",r=t.filters||ee(),n=t.alreadyAppliedFilters||[],i=t.addLength1||!1,a=e.length,o=t.objectId,s=function(t){return t};if(null!==p&&void 0===o)throw new Error("ObjectId must be passed to putStream for file encryption");null!==p&&(s=Ve.encryptor(o,0));var c={};!0===r&&(r=["FlateEncode"]);var u=t.additionalKeyValues||[],h=(c=void 0!==I.API.processDataByFilters?I.API.processDataByFilters(e,r):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(" "):n.toString());if(0!==c.data.length&&(u.push({key:"Length",value:c.data.length}),!0===i&&u.push({key:"Length1",value:a})),0!=h.length)if(h.split("/").length-1==1)u.push({key:"Filter",value:h});else{u.push({key:"Filter",value:"["+h+"]"});for(var l=0;l>"),0!==c.data.length&&(ut("stream"),ut(s(c.data)),ut("endstream"))},ne=v.__private__.putPage=function(t){var e=t.number,r=t.data,n=t.objId,i=t.contentsObjId;Xt(n,!0),ut("<>"),ut("endobj");var a=r.join("\n");return P===L.ADVANCED&&(a+="\nQ"),Xt(i,!0),re({data:a,filters:ee(),objectId:i}),ut("endobj"),n},ie=v.__private__.putPages=function(){var t,e,r=[];for(t=1;t<=Mt;t++)Et[t].objId=Jt(),Et[t].contentsObjId=Jt();for(t=1;t<=Mt;t++)r.push(ne({number:t,data:it[t],objId:Et[t].objId,contentsObjId:Et[t].contentsObjId,mediaBox:Et[t].mediaBox,cropBox:Et[t].cropBox,bleedBox:Et[t].bleedBox,trimBox:Et[t].trimBox,artBox:Et[t].artBox,userUnit:Et[t].userUnit,rootDictionaryObjId:Zt,resourceDictionaryObjId:$t}));Xt(Zt,!0),ut("<>"),ut("endobj"),Dt.publish("postPutPages")},ae=function(t){Dt.publish("putFont",{font:t,out:ut,newObject:Yt,putStream:re}),!0!==t.isAlreadyPutted&&(t.objectNumber=Yt(),ut("<<"),ut("/Type /Font"),ut("/BaseFont /"+x(t.postScriptName)),ut("/Subtype /Type1"),"string"==typeof t.encoding&&ut("/Encoding /"+t.encoding),ut("/FirstChar 32"),ut("/LastChar 255"),ut(">>"),ut("endobj"))},oe=function(){for(var t in kt)kt.hasOwnProperty(t)&&(!1===g||!0===g&&m.hasOwnProperty(t))&&ae(kt[t])},se=function(t){t.objectNumber=Yt();var e=[];e.push({key:"Type",value:"/XObject"}),e.push({key:"Subtype",value:"/Form"}),e.push({key:"BBox",value:"["+[B(t.x),B(t.y),B(t.x+t.width),B(t.y+t.height)].join(" ")+"]"}),e.push({key:"Matrix",value:"["+t.matrix.toString()+"]"});var r=t.pages[1].join("\n");re({data:r,additionalKeyValues:e,objectId:t.objectNumber}),ut("endobj")},ce=function(){for(var t in Tt)Tt.hasOwnProperty(t)&&se(Tt[t])},ue=function(t,e){var r,n=[],i=1/(e-1);for(r=0;r<1;r+=i)n.push(r);if(n.push(1),0!=t[0].offset){var a={offset:0,color:t[0].color};t.unshift(a)}if(1!=t[t.length-1].offset){var o={offset:1,color:t[t.length-1].color};t.push(o)}for(var s="",c=0,u=0;ut[c+1].offset;)c++;var h=t[c].offset,l=(r-h)/(t[c+1].offset-h),f=t[c].color,d=t[c+1].color;s+=$(Math.round((1-l)*f[0]+l*d[0]).toString(16))+$(Math.round((1-l)*f[1]+l*d[1]).toString(16))+$(Math.round((1-l)*f[2]+l*d[2]).toString(16))}return s.trim()},he=function(t,e){e||(e=21);var r=Yt(),n=ue(t.colors,e),i=[];i.push({key:"FunctionType",value:"0"}),i.push({key:"Domain",value:"[0.0 1.0]"}),i.push({key:"Size",value:"["+e+"]"}),i.push({key:"BitsPerSample",value:"8"}),i.push({key:"Range",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),i.push({key:"Decode",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),re({data:n,additionalKeyValues:i,alreadyAppliedFilters:["/ASCIIHexDecode"],objectId:r}),ut("endobj"),t.objectNumber=Yt(),ut("<< /ShadingType "+t.type),ut("/ColorSpace /DeviceRGB");var a="/Coords ["+B(parseFloat(t.coords[0]))+" "+B(parseFloat(t.coords[1]))+" ";2===t.type?a+=B(parseFloat(t.coords[2]))+" "+B(parseFloat(t.coords[3])):a+=B(parseFloat(t.coords[2]))+" "+B(parseFloat(t.coords[3]))+" "+B(parseFloat(t.coords[4]))+" "+B(parseFloat(t.coords[5])),ut(a+="]"),t.matrix&&ut("/Matrix ["+t.matrix.toString()+"]"),ut("/Function "+r+" 0 R"),ut("/Extend [true true]"),ut(">>"),ut("endobj")},le=function(t,e){var r=Jt(),n=Yt();e.push({resourcesOid:r,objectOid:n}),t.objectNumber=n;var i=[];i.push({key:"Type",value:"/Pattern"}),i.push({key:"PatternType",value:"1"}),i.push({key:"PaintType",value:"1"}),i.push({key:"TilingType",value:"1"}),i.push({key:"BBox",value:"["+t.boundingBox.map(B).join(" ")+"]"}),i.push({key:"XStep",value:B(t.xStep)}),i.push({key:"YStep",value:B(t.yStep)}),i.push({key:"Resources",value:r+" 0 R"}),t.matrix&&i.push({key:"Matrix",value:"["+t.matrix.toString()+"]"}),re({data:t.stream,additionalKeyValues:i,objectId:t.objectNumber}),ut("endobj")},fe=function(t){var e;for(e in Ct)Ct.hasOwnProperty(e)&&(Ct[e]instanceof k?he(Ct[e]):Ct[e]instanceof F&&le(Ct[e],t))},de=function(t){for(var e in t.objectNumber=Yt(),ut("<<"),t)switch(e){case"opacity":ut("/ca "+E(t[e]));break;case"stroke-opacity":ut("/CA "+E(t[e]))}ut(">>"),ut("endobj")},pe=function(){var t;for(t in Ot)Ot.hasOwnProperty(t)&&de(Ot[t])},ge=function(){for(var t in ut("/XObject <<"),Tt)Tt.hasOwnProperty(t)&&Tt[t].objectNumber>=0&&ut("/"+t+" "+Tt[t].objectNumber+" 0 R");Dt.publish("putXobjectDict"),ut(">>")},me=function(){Ve.oid=Yt(),ut("<<"),ut("/Filter /Standard"),ut("/V "+Ve.v),ut("/R "+Ve.r),ut("/U <"+Ve.toHexString(Ve.U)+">"),ut("/O <"+Ve.toHexString(Ve.O)+">"),ut("/P "+Ve.P),ut(">>"),ut("endobj")},ve=function(){for(var t in ut("/Font <<"),kt)kt.hasOwnProperty(t)&&(!1===g||!0===g&&m.hasOwnProperty(t))&&ut("/"+t+" "+kt[t].objectNumber+" 0 R");ut(">>")},be=function(){if(Object.keys(Ct).length>0){for(var t in ut("/Shading <<"),Ct)Ct.hasOwnProperty(t)&&Ct[t]instanceof k&&Ct[t].objectNumber>=0&&ut("/"+t+" "+Ct[t].objectNumber+" 0 R");Dt.publish("putShadingPatternDict"),ut(">>")}},ye=function(t){if(Object.keys(Ct).length>0){for(var e in ut("/Pattern <<"),Ct)Ct.hasOwnProperty(e)&&Ct[e]instanceof v.TilingPattern&&Ct[e].objectNumber>=0&&Ct[e].objectNumber>")}},we=function(){if(Object.keys(Ot).length>0){var t;for(t in ut("/ExtGState <<"),Ot)Ot.hasOwnProperty(t)&&Ot[t].objectNumber>=0&&ut("/"+t+" "+Ot[t].objectNumber+" 0 R");Dt.publish("putGStateDict"),ut(">>")}},Ne=function(t){Xt(t.resourcesOid,!0),ut("<<"),ut("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"),ve(),be(),ye(t.objectOid),we(),ge(),ut(">>"),ut("endobj")},Le=function(){var t=[];oe(),pe(),ce(),fe(t),Dt.publish("putResources"),t.forEach(Ne),Ne({resourcesOid:$t,objectOid:Number.MAX_SAFE_INTEGER}),Dt.publish("postPutResources")},Ae=function(){Dt.publish("putAdditionalObjects");for(var t=0;t>8&&(c=!0);t=s.join("")}for(r=t.length;void 0===c&&0!==r;)t.charCodeAt(r-1)>>8&&(c=!0),r--;if(!c)return t;for(s=e.noBOM?[]:[254,255],r=0,n=t.length;r>8)>>8)throw new Error("Character at position "+r+" of string '"+t+"' exceeds 16bits. Cannot be encoded into UCS-2 BE");s.push(h),s.push(u-(h<<8))}return String.fromCharCode.apply(void 0,s)},Fe=v.__private__.pdfEscape=v.pdfEscape=function(t,e){return ke(t,e).replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},Ie=v.__private__.beginPage=function(t){it[++Mt]=[],Et[Mt]={objId:0,contentsObjId:0,userUnit:Number(l),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(t[0]),topRightY:Number(t[1])}},Oe(Mt),ct(it[K])},Ce=function(t,e){var r,n,i;switch(a=e||a,"string"==typeof t&&(r=N(t.toLowerCase()),Array.isArray(r)&&(n=r[0],i=r[1])),Array.isArray(t)&&(n=t[0]*xt,i=t[1]*xt),isNaN(n)&&(n=c[0],i=c[1]),(n>14400||i>14400)&&(o.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"),n=Math.min(14400,n),i=Math.min(14400,i)),c=[n,i],a.substr(0,1)){case"l":i>n&&(c=[i,n]);break;case"p":n>i&&(c=[i,n])}Ie(c),fr(hr),ut(wr),0!==_r&&ut(_r+" J"),0!==Pr&&ut(Pr+" j"),Dt.publish("addPage",{pageNumber:Mt})},je=function(t){t>0&&t<=Mt&&(it.splice(t,1),Et.splice(t,1),Mt--,K>Mt&&(K=Mt),this.setPage(K))},Oe=function(t){t>0&&t<=Mt&&(K=t)},Be=v.__private__.getNumberOfPages=v.getNumberOfPages=function(){return it.length-1},qe=function(t,e,r){var n,i=void 0;return r=r||{},t=void 0!==t?t:kt[At].fontName,e=void 0!==e?e:kt[At].fontStyle,n=t.toLowerCase(),void 0!==Ft[n]&&void 0!==Ft[n][e]?i=Ft[n][e]:void 0!==Ft[t]&&void 0!==Ft[t][e]?i=Ft[t][e]:!1===r.disableWarning&&o.warn("Unable to look up font label for font '"+t+"', '"+e+"'. Refer to getFontList() for available fonts."),i||r.noFallback||null==(i=Ft.times[e])&&(i=Ft.times.normal),i},Me=v.__private__.putInfo=function(){var t=Yt(),e=function(t){return t};for(var r in null!==p&&(e=Ve.encryptor(t,0)),ut("<<"),ut("/Producer ("+Fe(e("jsPDF "+I.version))+")"),Lt)Lt.hasOwnProperty(r)&&Lt[r]&&ut("/"+r.substr(0,1).toUpperCase()+r.substr(1)+" ("+Fe(e(Lt[r]))+")");ut("/CreationDate ("+Fe(e(U))+")"),ut(">>"),ut("endobj")},Ee=v.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||Zt;switch(Yt(),ut("<<"),ut("/Type /Catalog"),ut("/Pages "+e+" 0 R"),pt||(pt="fullwidth"),pt){case"fullwidth":ut("/OpenAction [3 0 R /FitH null]");break;case"fullheight":ut("/OpenAction [3 0 R /FitV null]");break;case"fullpage":ut("/OpenAction [3 0 R /Fit]");break;case"original":ut("/OpenAction [3 0 R /XYZ null null 1]");break;default:var r=""+pt;"%"===r.substr(r.length-1)&&(pt=parseInt(pt)/100),"number"==typeof pt&&ut("/OpenAction [3 0 R /XYZ null null "+E(pt)+"]")}switch(yt||(yt="continuous"),yt){case"continuous":ut("/PageLayout /OneColumn");break;case"single":ut("/PageLayout /SinglePage");break;case"two":case"twoleft":ut("/PageLayout /TwoColumnLeft");break;case"tworight":ut("/PageLayout /TwoColumnRight")}vt&&ut("/PageMode /"+vt),Dt.publish("putCatalog"),ut(">>"),ut("endobj")},De=v.__private__.putTrailer=function(){ut("trailer"),ut("<<"),ut("/Size "+(Q+1)),ut("/Root "+Q+" 0 R"),ut("/Info "+(Q-1)+" 0 R"),null!==p&&ut("/Encrypt "+Ve.oid+" 0 R"),ut("/ID [ <"+H+"> <"+H+"> ]"),ut(">>")},Re=v.__private__.putHeader=function(){ut("%PDF-"+b),ut("%ºß¬à")},Te=v.__private__.putXRef=function(){var t="0000000000";ut("xref"),ut("0 "+(Q+1)),ut("0000000000 65535 f ");for(var e=1;e<=Q;e++){"function"==typeof tt[e]?ut((t+tt[e]()).slice(-10)+" 00000 n "):void 0!==tt[e]?ut((t+tt[e]).slice(-10)+" 00000 n "):ut("0000000000 00000 n ")}},ze=v.__private__.buildDocument=function(){st(),ct(et),Dt.publish("buildDocument"),Re(),ie(),Ae(),Le(),null!==p&&me(),Me(),Ee();var t=rt;return Te(),De(),ut("startxref"),ut(""+t),ut("%%EOF"),ct(it[K]),et.join("\n")},Ue=v.__private__.getBlob=function(t){return new Blob([lt(t)],{type:"application/pdf"})},He=v.output=v.__private__.output=Pe((function(t,r){switch("string"==typeof(r=r||{})?r={filename:r}:r.filename=r.filename||"generated.pdf",t){case void 0:return ze();case"save":v.save(r.filename);break;case"arraybuffer":return lt(ze());case"blob":return Ue(ze());case"bloburi":case"bloburl":if(void 0!==n.URL&&"function"==typeof n.URL.createObjectURL)return n.URL&&n.URL.createObjectURL(Ue(ze()))||void 0;o.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.");break;case"datauristring":case"dataurlstring":var i="",a=ze();try{i=e(a)}catch(t){i=e(unescape(encodeURIComponent(a)))}return"data:application/pdf;filename="+r.filename+";base64,"+i;case"pdfobjectnewwindow":if("[object Window]"===Object.prototype.toString.call(n)){var s="https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js",c=' integrity="sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==" crossorigin="anonymous"';r.pdfObjectUrl&&(s=r.pdfObjectUrl,c="");var u='\";\r\n var nW = globalObject.open();\r\n\r\n if (nW !== null) {\r\n nW.document.write(htmlForNewWindow);\r\n }\r\n return nW;\r\n } else {\r\n throw new Error(\r\n \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n case \"pdfjsnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n var htmlForPDFjsNewWindow =\r\n \"\" +\r\n \"\" +\r\n '' +\r\n \"\";\r\n var dataURLNewWindow = globalObject.open();\r\n if (dataURLNewWindow !== null) {\r\n dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n dataURLNewWindow.document.title = options.filename;\r\n }\r\n if (dataURLNewWindow || typeof safari === \"undefined\")\r\n return dataURLNewWindow;\r\n } else {\r\n throw new Error(\r\n \"The option dataurlnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n break;\r\n case \"datauri\":\r\n case \"dataurl\":\r\n return (globalObject.document.location.href = this.output(\r\n \"datauristring\",\r\n options\r\n ));\r\n default:\r\n return null;\r\n }\r\n }));\r\n\r\n /**\r\n * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n * @param {string} hotfixName - The name of the hotfix to check.\r\n * @returns {boolean}\r\n */\r\n var hasHotfix = function(hotfixName) {\r\n return (\r\n Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n );\r\n };\r\n\r\n switch (unit) {\r\n case \"pt\":\r\n scaleFactor = 1;\r\n break;\r\n case \"mm\":\r\n scaleFactor = 72 / 25.4;\r\n break;\r\n case \"cm\":\r\n scaleFactor = 72 / 2.54;\r\n break;\r\n case \"in\":\r\n scaleFactor = 72;\r\n break;\r\n case \"px\":\r\n if (hasHotfix(\"px_scaling\") == true) {\r\n scaleFactor = 72 / 96;\r\n } else {\r\n scaleFactor = 96 / 72;\r\n }\r\n break;\r\n case \"pc\":\r\n scaleFactor = 12;\r\n break;\r\n case \"em\":\r\n scaleFactor = 12;\r\n break;\r\n case \"ex\":\r\n scaleFactor = 6;\r\n break;\r\n default:\r\n if (typeof unit === \"number\") {\r\n scaleFactor = unit;\r\n } else {\r\n throw new Error(\"Invalid unit: \" + unit);\r\n }\r\n }\r\n\r\n var encryption = null;\r\n setCreationDate();\r\n setFileId();\r\n\r\n var getEncryptor = function(objectId) {\r\n if (encryptionOptions !== null) {\r\n return encryption.encryptor(objectId, 0);\r\n }\r\n return function(data) {\r\n return data;\r\n };\r\n };\r\n\r\n //---------------------------------------\r\n // Public API\r\n\r\n var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n pageNumberOneBased\r\n ) {\r\n if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n }\r\n var objId = pagesContext[pageNumberOneBased].objId;\r\n return {\r\n objId: objId,\r\n pageNumber: pageNumberOneBased,\r\n pageContext: pagesContext[pageNumberOneBased]\r\n };\r\n });\r\n\r\n var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n objId\r\n ) {\r\n if (isNaN(objId) || objId % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n }\r\n for (var pageNumber in pagesContext) {\r\n if (pagesContext[pageNumber].objId === objId) {\r\n break;\r\n }\r\n }\r\n return getPageInfo(pageNumber);\r\n });\r\n\r\n var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n return {\r\n objId: pagesContext[currentPage].objId,\r\n pageNumber: currentPage,\r\n pageContext: pagesContext[currentPage]\r\n };\r\n });\r\n\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addPage\r\n */\r\n API.addPage = function() {\r\n _addPage.apply(this, arguments);\r\n return this;\r\n };\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name setPage\r\n * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n * @example\r\n * doc = jsPDF()\r\n * doc.addPage()\r\n * doc.addPage()\r\n * doc.text('I am on page 3', 10, 10)\r\n * doc.setPage(1)\r\n * doc.text('I am on page 1', 10, 10)\r\n */\r\n API.setPage = function() {\r\n _setPage.apply(this, arguments);\r\n setOutputDestination.call(this, pages[currentPage]);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name insertPage\r\n * @memberof jsPDF#\r\n *\r\n * @function\r\n * @instance\r\n * @param {Object} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.insertPage = function(beforePage) {\r\n this.addPage();\r\n this.movePage(currentPage, beforePage);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name movePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {number} targetPage\r\n * @param {number} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.movePage = function(targetPage, beforePage) {\r\n var tmpPages, tmpPagesContext;\r\n if (targetPage > beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var i = targetPage; i > beforePage; i--) {\r\n pages[i] = pages[i - 1];\r\n pagesContext[i] = pagesContext[i - 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n } else if (targetPage < beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var j = targetPage; j < beforePage; j++) {\r\n pages[j] = pages[j + 1];\r\n pagesContext[j] = pagesContext[j + 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Deletes a page from the PDF.\r\n * @name deletePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @param {number} targetPage\r\n * @instance\r\n * @returns {jsPDF}\r\n */\r\n API.deletePage = function() {\r\n _deletePage.apply(this, arguments);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n *\r\n * @function\r\n * @instance\r\n * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n * @param {number} [options.charSpace=0] - The space between each letter.\r\n * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n * @param {Object} [options.flags] - Flags for to8bitStream.\r\n * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n *\r\n * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name text\r\n */\r\n API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n /*\r\n * Inserts something like this into PDF\r\n * BT\r\n * /F1 16 Tf % Font name + size\r\n * 16 TL % How many units down for next line in multiline text\r\n * 0 g % color\r\n * 28.35 813.54 Td % position\r\n * (line one) Tj\r\n * T* (line two) Tj\r\n * T* (line three) Tj\r\n * ET\r\n */\r\n options = options || {};\r\n var scope = options.scope || this;\r\n var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n // in effort to make all calls have similar signature like\r\n // function(data, coordinates... , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (\r\n typeof text === \"number\" &&\r\n typeof x === \"number\" &&\r\n (typeof y === \"string\" || Array.isArray(y))\r\n ) {\r\n var tmp = y;\r\n y = x;\r\n x = text;\r\n text = tmp;\r\n }\r\n\r\n var transformationMatrix;\r\n\r\n if (arguments[3] instanceof Matrix === false) {\r\n flags = arguments[3];\r\n angle = arguments[4];\r\n align = arguments[5];\r\n\r\n if (typeof flags !== \"object\" || flags === null) {\r\n if (typeof angle === \"string\") {\r\n align = angle;\r\n angle = null;\r\n }\r\n if (typeof flags === \"string\") {\r\n align = flags;\r\n flags = null;\r\n }\r\n if (typeof flags === \"number\") {\r\n angle = flags;\r\n flags = null;\r\n }\r\n options = {\r\n flags: flags,\r\n angle: angle,\r\n align: align\r\n };\r\n }\r\n } else {\r\n advancedApiModeTrap(\r\n \"The transform parameter of text() with a Matrix value\"\r\n );\r\n transformationMatrix = transform;\r\n }\r\n\r\n if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n }\r\n\r\n if (text.length === 0) {\r\n return scope;\r\n }\r\n\r\n var xtra = \"\";\r\n var isHex = false;\r\n var lineHeight =\r\n typeof options.lineHeightFactor === \"number\"\r\n ? options.lineHeightFactor\r\n : lineHeightFactor;\r\n var scaleFactor = scope.internal.scaleFactor;\r\n\r\n function ESC(s) {\r\n s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n return pdfEscape(s, flags);\r\n }\r\n\r\n function transformTextToSpecialArray(text) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(curDa);\r\n } else {\r\n if (\r\n Array.isArray(text) &&\r\n (curDa.length === 1 ||\r\n (curDa[1] === undefined && curDa[2] === undefined))\r\n ) {\r\n da.push(curDa[0]);\r\n } else {\r\n da.push([curDa[0], curDa[1], curDa[2]]);\r\n }\r\n }\r\n }\r\n return da;\r\n }\r\n\r\n function processTextByFunction(text, processingFunction) {\r\n var result;\r\n if (typeof text === \"string\") {\r\n result = processingFunction(text)[0];\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n var tmpResult;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(processingFunction(curDa)[0]);\r\n } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n }\r\n }\r\n result = da;\r\n }\r\n return result;\r\n }\r\n\r\n //Check if text is of type String\r\n var textIsOfTypeString = false;\r\n var tmpTextIsOfTypeString = true;\r\n\r\n if (typeof text === \"string\") {\r\n textIsOfTypeString = true;\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (\r\n typeof curDa !== \"string\" ||\r\n (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n ) {\r\n tmpTextIsOfTypeString = false;\r\n }\r\n }\r\n textIsOfTypeString = tmpTextIsOfTypeString;\r\n }\r\n if (textIsOfTypeString === false) {\r\n throw new Error(\r\n 'Type of text must be string or Array. \"' +\r\n text +\r\n '\" is not recognized.'\r\n );\r\n }\r\n\r\n //If there are any newlines in text, we assume\r\n //the user wanted to print multiple lines, so break the\r\n //text up into an array. If the text is already an array,\r\n //we assume the user knows what they are doing.\r\n //Convert text into an array anyway to simplify\r\n //later code.\r\n\r\n if (typeof text === \"string\") {\r\n if (text.match(/[\\r?\\n]/)) {\r\n text = text.split(/\\r\\n|\\r|\\n/g);\r\n } else {\r\n text = [text];\r\n }\r\n }\r\n\r\n //baseline\r\n var height = activeFontSize / scope.internal.scaleFactor;\r\n var descent = height * (lineHeight - 1);\r\n\r\n switch (options.baseline) {\r\n case \"bottom\":\r\n y -= descent;\r\n break;\r\n case \"top\":\r\n y += height - descent;\r\n break;\r\n case \"hanging\":\r\n y += height - 2 * descent;\r\n break;\r\n case \"middle\":\r\n y += height / 2 - descent;\r\n break;\r\n case \"ideographic\":\r\n case \"alphabetic\":\r\n default:\r\n // do nothing, everything is fine\r\n break;\r\n }\r\n\r\n //multiline\r\n maxWidth = options.maxWidth || 0;\r\n\r\n if (maxWidth > 0) {\r\n if (typeof text === \"string\") {\r\n text = scope.splitTextToSize(text, maxWidth);\r\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n text = text.reduce(function(acc, textLine) {\r\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n }, []);\r\n }\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"preProcessText\", payload);\r\n\r\n text = payload.text;\r\n options = payload.options;\r\n\r\n //angle\r\n angle = options.angle;\r\n\r\n if (\r\n transformationMatrix instanceof Matrix === false &&\r\n angle &&\r\n typeof angle === \"number\"\r\n ) {\r\n angle *= Math.PI / 180;\r\n\r\n if (options.rotationDirection === 0) {\r\n angle = -angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n angle = -angle;\r\n }\r\n\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n } else if (angle && angle instanceof Matrix) {\r\n transformationMatrix = angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n transformationMatrix = identityMatrix;\r\n }\r\n\r\n //charSpace\r\n\r\n charSpace = options.charSpace || activeCharSpace;\r\n\r\n if (typeof charSpace !== \"undefined\") {\r\n xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n this.setCharSpace(this.getCharSpace() || 0);\r\n }\r\n\r\n horizontalScale = options.horizontalScale;\r\n if (typeof horizontalScale !== \"undefined\") {\r\n xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n }\r\n\r\n //lang\r\n\r\n var lang = options.lang;\r\n\r\n if (lang) {\r\n // xtra += \"/Lang (\" + lang +\")\\n\";\r\n }\r\n\r\n //renderingMode\r\n var renderingMode = -1;\r\n var parmRenderingMode =\r\n typeof options.renderingMode !== \"undefined\"\r\n ? options.renderingMode\r\n : options.stroke;\r\n var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n switch (parmRenderingMode) {\r\n case 0:\r\n case false:\r\n case \"fill\":\r\n renderingMode = 0;\r\n break;\r\n case 1:\r\n case true:\r\n case \"stroke\":\r\n renderingMode = 1;\r\n break;\r\n case 2:\r\n case \"fillThenStroke\":\r\n renderingMode = 2;\r\n break;\r\n case 3:\r\n case \"invisible\":\r\n renderingMode = 3;\r\n break;\r\n case 4:\r\n case \"fillAndAddForClipping\":\r\n renderingMode = 4;\r\n break;\r\n case 5:\r\n case \"strokeAndAddPathForClipping\":\r\n renderingMode = 5;\r\n break;\r\n case 6:\r\n case \"fillThenStrokeAndAddToPathForClipping\":\r\n renderingMode = 6;\r\n break;\r\n case 7:\r\n case \"addToPathForClipping\":\r\n renderingMode = 7;\r\n break;\r\n }\r\n\r\n var usedRenderingMode =\r\n typeof pageContext.usedRenderingMode !== \"undefined\"\r\n ? pageContext.usedRenderingMode\r\n : -1;\r\n\r\n //if the coder wrote it explicitly to use a specific\r\n //renderingMode, then use it\r\n if (renderingMode !== -1) {\r\n xtra += renderingMode + \" Tr\\n\";\r\n //otherwise check if we used the rendering Mode already\r\n //if so then set the rendering Mode...\r\n } else if (usedRenderingMode !== -1) {\r\n xtra += \"0 Tr\\n\";\r\n }\r\n\r\n if (renderingMode !== -1) {\r\n pageContext.usedRenderingMode = renderingMode;\r\n }\r\n\r\n //align\r\n align = options.align || \"left\";\r\n var leading = activeFontSize * lineHeight;\r\n var pageWidth = scope.internal.pageSize.getWidth();\r\n var activeFont = fonts[activeFontKey];\r\n charSpace = options.charSpace || activeCharSpace;\r\n maxWidth = options.maxWidth || 0;\r\n\r\n var lineWidths;\r\n flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n var wordSpacingPerLine = [];\r\n\r\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n da = transformTextToSpecialArray(text);\r\n var newY;\r\n if (align !== \"left\") {\r\n lineWidths = da.map(function(v) {\r\n return (\r\n (scope.getStringUnitWidth(v, {\r\n font: activeFont,\r\n charSpace: charSpace,\r\n fontSize: activeFontSize,\r\n doKerning: false\r\n }) *\r\n activeFontSize) /\r\n scaleFactor\r\n );\r\n });\r\n }\r\n //The first line uses the \"main\" Td setting,\r\n //and the subsequent lines are offset by the\r\n //previous line's x coordinate.\r\n var prevWidth = 0;\r\n var newX;\r\n if (align === \"right\") {\r\n //The passed in x coordinate defines the\r\n //rightmost point of the text.\r\n x -= lineWidths[0];\r\n text = [];\r\n len = da.length;\r\n for (var i = 0; i < len; i++) {\r\n if (i === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale(prevWidth - lineWidths[i]);\r\n newY = -leading;\r\n }\r\n text.push([da[i], newX, newY]);\r\n prevWidth = lineWidths[i];\r\n }\r\n } else if (align === \"center\") {\r\n //The passed in x coordinate defines\r\n //the center point.\r\n x -= lineWidths[0] / 2;\r\n text = [];\r\n len = da.length;\r\n for (var j = 0; j < len; j++) {\r\n if (j === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale((prevWidth - lineWidths[j]) / 2);\r\n newY = -leading;\r\n }\r\n text.push([da[j], newX, newY]);\r\n prevWidth = lineWidths[j];\r\n }\r\n } else if (align === \"left\") {\r\n text = [];\r\n len = da.length;\r\n for (var h = 0; h < len; h++) {\r\n text.push(da[h]);\r\n }\r\n } else if (align === \"justify\") {\r\n text = [];\r\n len = da.length;\r\n maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n for (var l = 0; l < len; l++) {\r\n newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n if (l < len - 1) {\r\n wordSpacingPerLine.push(\r\n hpf(\r\n scale(\r\n (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n )\r\n )\r\n );\r\n } else {\r\n wordSpacingPerLine.push(0);\r\n }\r\n text.push([da[l], newX, newY]);\r\n }\r\n } else {\r\n throw new Error(\r\n 'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n );\r\n }\r\n }\r\n\r\n //R2L\r\n var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n if (doReversing === true) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [\r\n text\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\"),\r\n posX,\r\n posY\r\n ];\r\n });\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"postProcessText\", payload);\r\n\r\n text = payload.text;\r\n isHex = payload.mutex.isHex || false;\r\n\r\n //Escaping\r\n var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n if (\r\n activeFontEncoding === \"WinAnsiEncoding\" ||\r\n activeFontEncoding === \"StandardEncoding\"\r\n ) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [ESC(text), posX, posY];\r\n });\r\n }\r\n\r\n da = transformTextToSpecialArray(text);\r\n\r\n text = [];\r\n var STRING = 0;\r\n var ARRAY = 1;\r\n var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n var posX;\r\n var posY;\r\n var content;\r\n var wordSpacing = \"\";\r\n\r\n var generatePosition = function(\r\n parmPosX,\r\n parmPosY,\r\n parmTransformationMatrix\r\n ) {\r\n var position = \"\";\r\n if (parmTransformationMatrix instanceof Matrix) {\r\n // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n // in the coordinate system established by this matrix\r\n if (typeof options.angle === \"number\") {\r\n parmTransformationMatrix = matrixMult(\r\n parmTransformationMatrix,\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n );\r\n } else {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, -1, 0, 0),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n } else {\r\n position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n }\r\n return position;\r\n };\r\n\r\n for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n wordSpacing = \"\";\r\n\r\n switch (variant) {\r\n case ARRAY:\r\n content =\r\n (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n posX = parseFloat(da[lineIndex][1]);\r\n posY = parseFloat(da[lineIndex][2]);\r\n break;\r\n case STRING:\r\n content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n posX = getHorizontalCoordinate(x);\r\n posY = getVerticalCoordinate(y);\r\n break;\r\n }\r\n\r\n if (\r\n typeof wordSpacingPerLine !== \"undefined\" &&\r\n typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n ) {\r\n wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n }\r\n\r\n if (lineIndex === 0) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n } else if (variant === STRING) {\r\n text.push(wordSpacing + content);\r\n } else if (variant === ARRAY) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n }\r\n }\r\n\r\n text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n text += \" Tj\\n\";\r\n\r\n var result = \"BT\\n/\";\r\n result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n result += textColor + \"\\n\";\r\n result += xtra;\r\n result += text;\r\n result += \"ET\";\r\n\r\n out(result);\r\n usedFonts[activeFontKey] = true;\r\n return scope;\r\n };\r\n\r\n // PDF supports these path painting and clip path operators:\r\n //\r\n // S - stroke\r\n // s - close/stroke\r\n // f (F) - fill non-zero\r\n // f* - fill evenodd\r\n // B - fill stroke nonzero\r\n // B* - fill stroke evenodd\r\n // b - close fill stroke nonzero\r\n // b* - close fill stroke evenodd\r\n // n - nothing (consume path)\r\n // W - clip nonzero\r\n // W* - clip evenodd\r\n //\r\n // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n // method.\r\n /**\r\n *\r\n * @name clip\r\n * @function\r\n * @instance\r\n * @param {string} rule Only possible value is 'evenodd'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description All .clip() after calling drawing ops with a style argument of null.\r\n */\r\n var clip = (API.__private__.clip = API.clip = function(rule) {\r\n // Call .clip() after calling drawing ops with a style argument of null\r\n // W is the PDF clipping op\r\n if (\"evenodd\" === rule) {\r\n out(\"W*\");\r\n } else {\r\n out(\"W\");\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * @name clipEvenOdd\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n * that this will NOT consume the current path. In order to only use this path for clipping call\r\n * {@link API.discardPath} afterwards.\r\n */\r\n API.clipEvenOdd = function() {\r\n return clip(\"evenodd\");\r\n };\r\n\r\n /**\r\n * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n * @name discardPath\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.discardPath = API.discardPath = function() {\r\n out(\"n\");\r\n return this;\r\n };\r\n\r\n var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n var validStyleVariants = [\r\n undefined,\r\n null,\r\n \"S\",\r\n \"D\",\r\n \"F\",\r\n \"DF\",\r\n \"FD\",\r\n \"f\",\r\n \"f*\",\r\n \"B\",\r\n \"B*\",\r\n \"n\"\r\n ];\r\n var result = false;\r\n if (validStyleVariants.indexOf(style) !== -1) {\r\n result = true;\r\n }\r\n return result;\r\n });\r\n\r\n API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n operator\r\n ) {\r\n if (isValidStyle(operator)) {\r\n defaultPathOperation = operator;\r\n }\r\n return this;\r\n };\r\n\r\n var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n // see path-painting operators in PDF spec\r\n var op = defaultPathOperation; // stroke\r\n\r\n switch (style) {\r\n case \"D\":\r\n case \"S\":\r\n op = \"S\"; // stroke\r\n break;\r\n case \"F\":\r\n op = \"f\"; // fill\r\n break;\r\n case \"FD\":\r\n case \"DF\":\r\n op = \"B\";\r\n break;\r\n case \"f\":\r\n case \"f*\":\r\n case \"B\":\r\n case \"B*\":\r\n /*\r\n Allow direct use of these PDF path-painting operators:\r\n - f fill using nonzero winding number rule\r\n - f* fill using even-odd rule\r\n - B fill then stroke with fill using non-zero winding number rule\r\n - B* fill then stroke with fill using even-odd rule\r\n */\r\n op = style;\r\n break;\r\n }\r\n return op;\r\n });\r\n\r\n /**\r\n * Close the current path. The PDF \"h\" operator.\r\n * @name close\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n var close = (API.close = function() {\r\n out(\"h\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Stroke the path. The PDF \"S\" operator.\r\n * @name stroke\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.stroke = function() {\r\n out(\"S\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n * @name fill\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fill = function(pattern) {\r\n fillWithOptionalPattern(\"f\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the even-odd rule. The PDF f* operator.\r\n * @see API.fill\r\n * @name fillEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"f*\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStroke\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStroke = function(pattern) {\r\n fillWithOptionalPattern(\"B\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStrokeEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStrokeEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"B*\", pattern);\r\n return this;\r\n };\r\n\r\n var fillWithOptionalPattern = function(style, pattern) {\r\n if (typeof pattern === \"object\") {\r\n fillWithPattern(pattern, style);\r\n } else {\r\n out(style);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n if (\r\n style === null ||\r\n (apiMode === ApiMode.ADVANCED && style === undefined)\r\n ) {\r\n return;\r\n }\r\n\r\n style = getStyle(style);\r\n\r\n // stroking / filling / both the path\r\n out(style);\r\n };\r\n\r\n function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n var clone = new TilingPattern(\r\n boundingBox || this.boundingBox,\r\n xStep || this.xStep,\r\n yStep || this.yStep,\r\n this.gState,\r\n matrix || this.matrix\r\n );\r\n clone.stream = this.stream;\r\n var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n addPattern(key, clone);\r\n return clone;\r\n }\r\n\r\n var fillWithPattern = function(patternData, style) {\r\n var patternId = patternMap[patternData.key];\r\n var pattern = patterns[patternId];\r\n\r\n if (pattern instanceof ShadingPattern) {\r\n out(\"q\");\r\n\r\n out(clipRuleFromStyle(style));\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n out(patternData.matrix.toString() + \" cm\");\r\n out(\"/\" + patternId + \" sh\");\r\n out(\"Q\");\r\n } else if (pattern instanceof TilingPattern) {\r\n // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n // so we must flip them\r\n var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n if (patternData.matrix) {\r\n matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n // for each use\r\n patternId = cloneTilingPattern.call(\r\n pattern,\r\n patternData.key,\r\n patternData.boundingBox,\r\n patternData.xStep,\r\n patternData.yStep,\r\n matrix\r\n ).id;\r\n }\r\n\r\n out(\"q\");\r\n out(\"/Pattern cs\");\r\n out(\"/\" + patternId + \" scn\");\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n\r\n out(style);\r\n out(\"Q\");\r\n }\r\n };\r\n\r\n var clipRuleFromStyle = function(style) {\r\n switch (style) {\r\n case \"f\":\r\n case \"F\":\r\n return \"W n\";\r\n case \"f*\":\r\n return \"W* n\";\r\n case \"B\":\r\n return \"W S\";\r\n case \"B*\":\r\n return \"W* S\";\r\n\r\n // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n case \"S\":\r\n return \"W S\";\r\n case \"n\":\r\n return \"W n\";\r\n }\r\n };\r\n\r\n /**\r\n * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @name moveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var moveTo = (API.moveTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @memberof jsPDF#\r\n * @name lineTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var lineTo = (API.lineTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x3\r\n * @param {number} y3\r\n * @memberof jsPDF#\r\n * @name curveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n out(\r\n [\r\n hpf(scale(x1)),\r\n hpf(transformScaleY(y1)),\r\n hpf(scale(x2)),\r\n hpf(transformScaleY(y2)),\r\n hpf(scale(x3)),\r\n hpf(transformScaleY(y3)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n return this;\r\n });\r\n\r\n /**\r\n * Draw a line on the current page.\r\n *\r\n * @name line\r\n * @function\r\n * @instance\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n } else {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n }\r\n };\r\n\r\n /**\r\n * @typedef {Object} PatternData\r\n * {Matrix|undefined} matrix\r\n * {Number|undefined} xStep\r\n * {Number|undefined} yStep\r\n * {Array.|undefined} boundingBox\r\n */\r\n\r\n /**\r\n * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n * All data points in `lines` are relative to last line origin.\r\n * `x`, `y` become x1,y1 for first line / curve in the set.\r\n * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n *\r\n * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name lines\r\n */\r\n API.__private__.lines = API.lines = function(\r\n lines,\r\n x,\r\n y,\r\n scale,\r\n style,\r\n closed\r\n ) {\r\n var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n // in effort to make all calls have similar signature like\r\n // function(content, coordinateX, coordinateY , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (typeof lines === \"number\") {\r\n tmp = y;\r\n y = x;\r\n x = lines;\r\n lines = tmp;\r\n }\r\n\r\n scale = scale || [1, 1];\r\n closed = closed || false;\r\n\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n !Array.isArray(lines) ||\r\n !Array.isArray(scale) ||\r\n !isValidStyle(style) ||\r\n typeof closed !== \"boolean\"\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n }\r\n\r\n // starting point\r\n moveTo(x, y);\r\n\r\n scalex = scale[0];\r\n scaley = scale[1];\r\n l = lines.length;\r\n //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n x4 = x; // last / ending point = starting point for first item.\r\n y4 = y; // last / ending point = starting point for first item.\r\n\r\n for (i = 0; i < l; i++) {\r\n leg = lines[i];\r\n if (leg.length === 2) {\r\n // simple line\r\n x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n lineTo(x4, y4);\r\n } else {\r\n // bezier curve\r\n x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n curveTo(x2, y2, x3, y3, x4, y4);\r\n }\r\n }\r\n\r\n if (closed) {\r\n close();\r\n }\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n * six and \"h\" an empty array (or undefined).\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name path\r\n */\r\n API.path = function(lines) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var leg = lines[i];\r\n var coords = leg.c;\r\n switch (leg.op) {\r\n case \"m\":\r\n moveTo(coords[0], coords[1]);\r\n break;\r\n case \"l\":\r\n lineTo(coords[0], coords[1]);\r\n break;\r\n case \"c\":\r\n curveTo.apply(this, coords);\r\n break;\r\n case \"h\":\r\n close();\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name rect\r\n */\r\n API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n h = -h;\r\n }\r\n\r\n out(\r\n [\r\n hpf(scale(x)),\r\n hpf(transformScaleY(y)),\r\n hpf(scale(w)),\r\n hpf(scale(h)),\r\n \"re\"\r\n ].join(\" \")\r\n );\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a triangle to PDF.\r\n *\r\n * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name triangle\r\n */\r\n API.__private__.triangle = API.triangle = function(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n style\r\n ) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n isNaN(x3) ||\r\n isNaN(y3) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n }\r\n this.lines(\r\n [\r\n [x2 - x1, y2 - y1], // vector to point 2\r\n [x3 - x2, y3 - y2], // vector to point 3\r\n [x1 - x3, y1 - y3] // closing vector back to point 1\r\n ],\r\n x1,\r\n y1, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle with rounded corners to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name roundedRect\r\n */\r\n API.__private__.roundedRect = API.roundedRect = function(\r\n x,\r\n y,\r\n w,\r\n h,\r\n rx,\r\n ry,\r\n style\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(w) ||\r\n isNaN(h) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n }\r\n var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n rx = Math.min(rx, w * 0.5);\r\n ry = Math.min(ry, h * 0.5);\r\n\r\n this.lines(\r\n [\r\n [w - 2 * rx, 0],\r\n [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n [0, h - 2 * ry],\r\n [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n [-w + 2 * rx, 0],\r\n [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n [0, -h + 2 * ry],\r\n [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n ],\r\n x + rx,\r\n y, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an ellipse to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name ellipse\r\n */\r\n API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n }\r\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n moveTo(x + rx, y);\r\n curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an circle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} r Radius (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name circle\r\n */\r\n API.__private__.circle = API.circle = function(x, y, r, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n }\r\n return this.ellipse(x, y, r, r, style);\r\n };\r\n\r\n /**\r\n * Sets text font face, variant for upcoming text elements.\r\n * See output of jsPDF.getFontList() for possible font names, styles.\r\n *\r\n * @param {string} fontName Font name or family. Example: \"times\".\r\n * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFont\r\n */\r\n API.setFont = function(fontName, fontStyle, fontWeight) {\r\n if (fontWeight) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n activeFontKey = getFont(fontName, fontStyle, {\r\n disableWarning: false\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets text font face, variant for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {Object}\r\n * @memberof jsPDF#\r\n * @name getFont\r\n */\r\n var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n return fonts[getFont.apply(API, arguments)];\r\n });\r\n\r\n /**\r\n * Returns an object - a tree of fontName to fontStyle relationships available to\r\n * active PDF document.\r\n *\r\n * @public\r\n * @function\r\n * @instance\r\n * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n * @memberof jsPDF#\r\n * @name getFontList\r\n */\r\n API.__private__.getFontList = API.getFontList = function() {\r\n var list = {},\r\n fontName,\r\n fontStyle;\r\n\r\n for (fontName in fontmap) {\r\n if (fontmap.hasOwnProperty(fontName)) {\r\n list[fontName] = [];\r\n for (fontStyle in fontmap[fontName]) {\r\n if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n list[fontName].push(fontStyle);\r\n }\r\n }\r\n }\r\n }\r\n return list;\r\n };\r\n\r\n /**\r\n * Add a custom font to the current instance.\r\n *\r\n * @param {string} postScriptName PDF specification full name for the font.\r\n * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n * @param {string} fontStyle Style of the Font.\r\n * @param {number | string} fontWeight Weight of the Font.\r\n * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @name addFont\r\n * @returns {string} fontId\r\n */\r\n API.addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n fontWeight,\r\n encoding\r\n ) {\r\n var encodingOptions = [\r\n \"StandardEncoding\",\r\n \"MacRomanEncoding\",\r\n \"Identity-H\",\r\n \"WinAnsiEncoding\"\r\n ];\r\n if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n //IE 11 fix\r\n encoding = arguments[3];\r\n } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n encoding = encoding || \"Identity-H\";\r\n return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n };\r\n\r\n var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n /**\r\n * Gets the line width, default: 0.200025.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineWidth\r\n * @memberof jsPDF#\r\n * @name getLineWidth\r\n */\r\n var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n return lineWidth;\r\n });\r\n\r\n /**\r\n * Sets line width for upcoming lines.\r\n *\r\n * @param {number} width Line width (in units declared at inception of PDF document).\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineWidth\r\n */\r\n var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n width\r\n ) {\r\n lineWidth = width;\r\n out(hpf(scale(width)) + \" w\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Sets the dash pattern for upcoming lines.\r\n *\r\n * To reset the settings simply call the method without any parameters.\r\n * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n * @param {number} dashPhase The phase lines start with.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineDashPattern\r\n */\r\n API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n dashArray,\r\n dashPhase\r\n ) {\r\n dashArray = dashArray || [];\r\n dashPhase = dashPhase || 0;\r\n\r\n if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n }\r\n\r\n dashArray = dashArray\r\n .map(function(x) {\r\n return hpf(scale(x));\r\n })\r\n .join(\" \");\r\n dashPhase = hpf(scale(dashPhase));\r\n\r\n out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n return this;\r\n };\r\n\r\n var lineHeightFactor;\r\n\r\n var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n });\r\n\r\n API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n };\r\n\r\n /**\r\n * Sets the LineHeightFactor of proportion.\r\n *\r\n * @param {number} value LineHeightFactor value. Default: 1.15.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineHeightFactor\r\n */\r\n var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n value\r\n ) {\r\n value = value || 1.15;\r\n if (typeof value === \"number\") {\r\n lineHeightFactor = value;\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * Gets the LineHeightFactor, default: 1.15.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineHeightFactor\r\n * @memberof jsPDF#\r\n * @name getLineHeightFactor\r\n */\r\n var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n return lineHeightFactor;\r\n });\r\n\r\n setLineHeightFactor(options.lineHeight);\r\n\r\n var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n value\r\n ) {\r\n return scale(value);\r\n });\r\n\r\n var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n value\r\n ) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n return value;\r\n } else {\r\n var pageHeight =\r\n pagesContext[currentPage].mediaBox.topRightY -\r\n pagesContext[currentPage].mediaBox.bottomLeftY;\r\n return pageHeight - scale(value);\r\n }\r\n });\r\n\r\n var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getHorizontalCoordinate(value));\r\n });\r\n\r\n var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getVerticalCoordinate(value));\r\n });\r\n\r\n var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n /**\r\n * Gets the stroke color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getDrawColor\r\n */\r\n API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n return decodeColorString(strokeColor);\r\n };\r\n\r\n /**\r\n * Sets the stroke color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDrawColor\r\n */\r\n API.__private__.setStrokeColor = API.setDrawColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"draw\",\r\n precision: 2\r\n };\r\n\r\n strokeColor = encodeColorString(options);\r\n out(strokeColor);\r\n return this;\r\n };\r\n\r\n var fillColor = options.fillColor || \"0 g\";\r\n\r\n /**\r\n * Gets the fill color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getFillColor\r\n */\r\n API.__private__.getFillColor = API.getFillColor = function() {\r\n return decodeColorString(fillColor);\r\n };\r\n\r\n /**\r\n * Sets the fill color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFillColor\r\n */\r\n API.__private__.setFillColor = API.setFillColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"fill\",\r\n precision: 2\r\n };\r\n\r\n fillColor = encodeColorString(options);\r\n out(fillColor);\r\n return this;\r\n };\r\n\r\n var textColor = options.textColor || \"0 g\";\r\n /**\r\n * Gets the text color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getTextColor\r\n */\r\n var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n return decodeColorString(textColor);\r\n });\r\n /**\r\n * Sets the text color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setTextColor\r\n */\r\n API.__private__.setTextColor = API.setTextColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"text\",\r\n precision: 3\r\n };\r\n textColor = encodeColorString(options);\r\n\r\n return this;\r\n };\r\n\r\n var activeCharSpace = options.charSpace;\r\n\r\n /**\r\n * Get global value of CharSpace.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} charSpace\r\n * @memberof jsPDF#\r\n * @name getCharSpace\r\n */\r\n var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n return parseFloat(activeCharSpace || 0);\r\n });\r\n\r\n /**\r\n * Set global value of CharSpace.\r\n *\r\n * @param {number} charSpace\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setCharSpace\r\n */\r\n API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n if (isNaN(charSpace)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n }\r\n activeCharSpace = charSpace;\r\n return this;\r\n };\r\n\r\n var lineCapID = 0;\r\n /**\r\n * Is an Object providing a mapping from human-readable to\r\n * integer flag values designating the varieties of line cap\r\n * and join styles.\r\n *\r\n * @memberof jsPDF#\r\n * @name CapJoinStyles\r\n */\r\n API.CapJoinStyles = {\r\n 0: 0,\r\n butt: 0,\r\n but: 0,\r\n miter: 0,\r\n 1: 1,\r\n round: 1,\r\n rounded: 1,\r\n circle: 1,\r\n 2: 2,\r\n projecting: 2,\r\n project: 2,\r\n square: 2,\r\n bevel: 2\r\n };\r\n\r\n /**\r\n * Sets the line cap styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line cap.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineCap\r\n */\r\n API.__private__.setLineCap = API.setLineCap = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line cap style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineCapID = id;\r\n out(id + \" J\");\r\n\r\n return this;\r\n };\r\n\r\n var lineJoinID = 0;\r\n /**\r\n * Sets the line join styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line join.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineJoin\r\n */\r\n API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line join style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineJoinID = id;\r\n out(id + \" j\");\r\n\r\n return this;\r\n };\r\n\r\n var miterLimit;\r\n /**\r\n * Sets the miterLimit property, which effects the maximum miter length.\r\n *\r\n * @param {number} length The length of the miter\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineMiterLimit\r\n */\r\n API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n length\r\n ) {\r\n length = length || 0;\r\n if (isNaN(length)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n }\r\n out(hpf(scale(length)) + \" M\");\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * An object representing a pdf graphics state.\r\n * @class GState\r\n */\r\n\r\n /**\r\n *\r\n * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n * Supported are: opacity, stroke-opacity\r\n * @constructor\r\n */\r\n API.GState = GState;\r\n\r\n /**\r\n * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n * it will be added before use.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setGState\r\n */\r\n API.setGState = function(gState) {\r\n if (typeof gState === \"string\") {\r\n gState = gStates[gStatesMap[gState]];\r\n } else {\r\n gState = addGState(null, gState);\r\n }\r\n\r\n if (!gState.equals(activeGState)) {\r\n out(\"/\" + gState.id + \" gs\");\r\n activeGState = gState;\r\n }\r\n };\r\n\r\n /**\r\n * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n * @param {String} key Might also be null, if no later reference to this gState is needed\r\n * @param {Object} gState The gState object\r\n */\r\n var addGState = function(key, gState) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (key && gStatesMap[key]) return;\r\n var duplicate = false;\r\n for (var s in gStates) {\r\n if (gStates.hasOwnProperty(s)) {\r\n if (gStates[s].equals(gState)) {\r\n duplicate = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (duplicate) {\r\n gState = gStates[s];\r\n } else {\r\n var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n gStates[gStateKey] = gState;\r\n gState.id = gStateKey;\r\n }\r\n\r\n // several user keys may point to the same GState object\r\n key && (gStatesMap[key] = gState.id);\r\n\r\n events.publish(\"addGState\", gState);\r\n\r\n return gState;\r\n };\r\n\r\n /**\r\n * Adds a new {@link GState} for later use. See {@link setGState}.\r\n * @param {String} key\r\n * @param {GState} gState\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addGState\r\n */\r\n API.addGState = function(key, gState) {\r\n addGState(key, gState);\r\n return this;\r\n };\r\n\r\n /**\r\n * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n * fill and stroke colors etc.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name saveGraphicsState\r\n */\r\n API.saveGraphicsState = function() {\r\n out(\"q\");\r\n // as we cannot set font key and size independently we must keep track of both\r\n fontStateStack.push({\r\n key: activeFontKey,\r\n size: activeFontSize,\r\n color: textColor\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name restoreGraphicsState\r\n */\r\n API.restoreGraphicsState = function() {\r\n out(\"Q\");\r\n\r\n // restore previous font state\r\n var fontState = fontStateStack.pop();\r\n activeFontKey = fontState.key;\r\n activeFontSize = fontState.size;\r\n textColor = fontState.color;\r\n\r\n activeGState = null;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Appends this matrix to the left of all previously applied matrices.\r\n *\r\n * @param {Matrix} matrix\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setCurrentTransformationMatrix\r\n */\r\n API.setCurrentTransformationMatrix = function(matrix) {\r\n out(matrix.toString() + \" cm\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Inserts a debug comment into the generated pdf.\r\n * @function\r\n * @instance\r\n * @param {String} text\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name comment\r\n */\r\n API.comment = function(text) {\r\n out(\"#\" + text);\r\n return this;\r\n };\r\n\r\n /**\r\n * Point\r\n */\r\n var Point = function(x, y) {\r\n var _x = x || 0;\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n get: function() {\r\n return _x;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _x = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _y = y || 0;\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n get: function() {\r\n return _y;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _y = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _type = \"pt\";\r\n Object.defineProperty(this, \"type\", {\r\n enumerable: true,\r\n get: function() {\r\n return _type;\r\n },\r\n set: function(value) {\r\n _type = value.toString();\r\n }\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Rectangle\r\n */\r\n var Rectangle = function(x, y, w, h) {\r\n Point.call(this, x, y);\r\n this.type = \"rect\";\r\n\r\n var _w = w || 0;\r\n Object.defineProperty(this, \"w\", {\r\n enumerable: true,\r\n get: function() {\r\n return _w;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _w = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _h = h || 0;\r\n Object.defineProperty(this, \"h\", {\r\n enumerable: true,\r\n get: function() {\r\n return _h;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _h = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * FormObject/RenderTarget\r\n */\r\n\r\n var RenderTarget = function() {\r\n this.page = page;\r\n this.currentPage = currentPage;\r\n this.pages = pages.slice(0);\r\n this.pagesContext = pagesContext.slice(0);\r\n this.x = pageX;\r\n this.y = pageY;\r\n this.matrix = pageMatrix;\r\n this.width = getPageWidth(currentPage);\r\n this.height = getPageHeight(currentPage);\r\n this.outputDestination = outputDestination;\r\n\r\n this.id = \"\"; // set by endFormObject()\r\n this.objectNumber = -1; // will be set by putXObject()\r\n };\r\n\r\n RenderTarget.prototype.restore = function() {\r\n page = this.page;\r\n currentPage = this.currentPage;\r\n pagesContext = this.pagesContext;\r\n pages = this.pages;\r\n pageX = this.x;\r\n pageY = this.y;\r\n pageMatrix = this.matrix;\r\n setPageWidth(currentPage, this.width);\r\n setPageHeight(currentPage, this.height);\r\n outputDestination = this.outputDestination;\r\n };\r\n\r\n var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n // save current state\r\n renderTargetStack.push(new RenderTarget());\r\n\r\n // clear pages\r\n page = currentPage = 0;\r\n pages = [];\r\n pageX = x;\r\n pageY = y;\r\n\r\n pageMatrix = matrix;\r\n\r\n beginPage([width, height]);\r\n };\r\n\r\n var endFormObject = function(key) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (renderTargetMap[key]) {\r\n renderTargetStack.pop().restore();\r\n return;\r\n }\r\n\r\n // save the created xObject\r\n var newXObject = new RenderTarget();\r\n\r\n var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n newXObject.id = xObjectId;\r\n\r\n renderTargetMap[key] = xObjectId;\r\n renderTargets[xObjectId] = newXObject;\r\n\r\n events.publish(\"addFormObject\", newXObject);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n /**\r\n * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n * {@link doFormObject}. Nested form objects are possible.\r\n * x, y, width, height set the bounding box that is used to clip the content.\r\n *\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n * the parent's.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name beginFormObject\r\n */\r\n API.beginFormObject = function(x, y, width, height, matrix) {\r\n // The user can set the output target to a new form object. Nested form objects are possible.\r\n // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n // the PDF-Spec states:\r\n // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n // recommended although not required\"\r\n beginNewRenderTarget(x, y, width, height, matrix);\r\n return this;\r\n };\r\n\r\n /**\r\n * Completes and saves the form object.\r\n * @param {String} key The key by which this form object can be referenced.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name endFormObject\r\n */\r\n API.endFormObject = function(key) {\r\n endFormObject(key);\r\n return this;\r\n };\r\n\r\n /**\r\n * Draws the specified form object by referencing to the respective pdf XObject created with\r\n * {@link API.beginFormObject} and {@link endFormObject}.\r\n * The location is determined by matrix.\r\n *\r\n * @param {String} key The key to the form object.\r\n * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name doFormObject\r\n */\r\n API.doFormObject = function(key, matrix) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n out(\"q\");\r\n out(matrix.toString() + \" cm\");\r\n out(\"/\" + xObject.id + \" Do\");\r\n out(\"Q\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Returns the form object specified by key.\r\n * @param key {String}\r\n * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name getFormObject\r\n */\r\n API.getFormObject = function(key) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n return {\r\n x: xObject.x,\r\n y: xObject.y,\r\n width: xObject.width,\r\n height: xObject.height,\r\n matrix: xObject.matrix\r\n };\r\n };\r\n\r\n /**\r\n * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n * Uses FileSaver.js-method saveAs.\r\n *\r\n * @memberof jsPDF#\r\n * @name save\r\n * @function\r\n * @instance\r\n * @param {string} filename The filename including extension.\r\n * @param {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n * @returns {jsPDF|Promise} jsPDF-instance */\r\n API.save = function(filename, options) {\r\n filename = filename || \"generated.pdf\";\r\n\r\n options = options || {};\r\n options.returnPromise = options.returnPromise || false;\r\n\r\n\r\n // eslint-disable-next-line no-unreachable\r\n var fs = require(\"fs\");\r\n var buffer = Buffer.from(getArrayBuffer(buildDocument()));\r\n if (options.returnPromise === false) {\r\n fs.writeFileSync(filename, buffer);\r\n } else {\r\n return new Promise(function(resolve, reject) {\r\n fs.writeFile(filename, buffer, function(err) {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n // applying plugins (more methods) ON TOP of built-in API.\r\n // this is intentional as we allow plugins to override\r\n // built-ins\r\n for (var plugin in jsPDF.API) {\r\n if (jsPDF.API.hasOwnProperty(plugin)) {\r\n if (plugin === \"events\" && jsPDF.API.events.length) {\r\n (function(events, newEvents) {\r\n // jsPDF.API.events is a JS Array of Arrays\r\n // where each Array is a pair of event name, handler\r\n // Events were added by plugins to the jsPDF instantiator.\r\n // These are always added to the new instance and some ran\r\n // during instantiation.\r\n var eventname, handler_and_args, i;\r\n\r\n for (i = newEvents.length - 1; i !== -1; i--) {\r\n // subscribe takes 3 args: 'topic', function, runonce_flag\r\n // if undefined, runonce is false.\r\n // users can attach callback directly,\r\n // or they can attach an array with [callback, runonce_flag]\r\n // that's what the \"apply\" magic is for below.\r\n eventname = newEvents[i][0];\r\n handler_and_args = newEvents[i][1];\r\n events.subscribe.apply(\r\n events,\r\n [eventname].concat(\r\n typeof handler_and_args === \"function\"\r\n ? [handler_and_args]\r\n : handler_and_args\r\n )\r\n );\r\n }\r\n })(events, jsPDF.API.events);\r\n } else {\r\n API[plugin] = jsPDF.API[plugin];\r\n }\r\n }\r\n }\r\n\r\n var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightX -\r\n pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightX =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n });\r\n\r\n var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightY -\r\n pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightY =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n });\r\n\r\n /**\r\n * Object exposing internal API to plugins\r\n * @public\r\n * @ignore\r\n */\r\n API.internal = {\r\n pdfEscape: pdfEscape,\r\n getStyle: getStyle,\r\n getFont: getFontEntry,\r\n getFontSize: getFontSize,\r\n getCharSpace: getCharSpace,\r\n getTextColor: getTextColor,\r\n getLineHeight: getLineHeight,\r\n getLineHeightFactor: getLineHeightFactor,\r\n getLineWidth: getLineWidth,\r\n write: write,\r\n getHorizontalCoordinate: getHorizontalCoordinate,\r\n getVerticalCoordinate: getVerticalCoordinate,\r\n getCoordinateString: getHorizontalCoordinateString,\r\n getVerticalCoordinateString: getVerticalCoordinateString,\r\n collections: {},\r\n newObject: newObject,\r\n newAdditionalObject: newAdditionalObject,\r\n newObjectDeferred: newObjectDeferred,\r\n newObjectDeferredBegin: newObjectDeferredBegin,\r\n getFilters: getFilters,\r\n putStream: putStream,\r\n events: events,\r\n scaleFactor: scaleFactor,\r\n pageSize: {\r\n getWidth: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n setWidth: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n getHeight: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n setHeight: function(value) {\r\n setPageHeight(currentPage, value);\r\n }\r\n },\r\n encryptionOptions: encryptionOptions,\r\n encryption: encryption,\r\n getEncryptor: getEncryptor,\r\n output: output,\r\n getNumberOfPages: getNumberOfPages,\r\n pages: pages,\r\n out: out,\r\n f2: f2,\r\n f3: f3,\r\n getPageInfo: getPageInfo,\r\n getPageInfoByObjId: getPageInfoByObjId,\r\n getCurrentPageInfo: getCurrentPageInfo,\r\n getPDFVersion: getPdfVersion,\r\n Point: Point,\r\n Rectangle: Rectangle,\r\n Matrix: Matrix,\r\n hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n };\r\n\r\n Object.defineProperty(API.internal.pageSize, \"width\", {\r\n get: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n set: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(API.internal.pageSize, \"height\", {\r\n get: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n set: function(value) {\r\n setPageHeight(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // continuing initialization of jsPDF Document object\r\n //////////////////////////////////////////////////////\r\n // Add the first page automatically\r\n addFonts.call(API, standardFonts);\r\n activeFontKey = \"F1\";\r\n _addPage(format, orientation);\r\n\r\n events.publish(\"initialized\");\r\n return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n * // 'this' will be ref to internal API object. see jsPDF source\r\n * // , so you can refer to built-in methods like so:\r\n * // this.line(....)\r\n * // this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\(/g, \"\\\\(\")\n .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n return value\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\\(/g, \"(\")\n .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n var xobj = new AcroFormXObject();\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number |= bitMask;\n\n return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number &= ~bitMask;\n\n return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n );\n }\n return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n );\n }\n return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n );\n }\n return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n );\n }\n return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n args,\n scope\n) {\n var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n var x = args[0];\n var y = args[1];\n var w = args[2];\n var h = args[3];\n\n var coordinates = {};\n\n coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n return [\n Number(f2(coordinates.lowerLeft_X)),\n Number(f2(coordinates.lowerLeft_Y)),\n Number(f2(coordinates.upperRight_X)),\n Number(f2(coordinates.upperRight_Y))\n ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n if (formObject.appearanceStreamContent) {\n return formObject.appearanceStreamContent;\n }\n\n if (!formObject.V && !formObject.DV) {\n return;\n }\n\n // else calculate it\n\n var stream = [];\n var text = formObject._V || formObject.DV;\n var calcRes = calculateX(formObject, text);\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n\n //PDF 32000-1:2008, page 444\n stream.push(\"/Tx BMC\");\n stream.push(\"q\");\n stream.push(\"BT\"); // Begin Text\n stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n stream.push(calcRes.text);\n stream.push(\"ET\"); // End Text\n stream.push(\"Q\");\n stream.push(\"EMC\");\n\n var appearanceStreamContent = createFormXObject(formObject);\n appearanceStreamContent.scope = formObject.scope;\n appearanceStreamContent.stream = stream.join(\"\\n\");\n return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n var maxFontSize =\n formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n var returnValue = {\n text: \"\",\n fontSize: \"\"\n };\n // Remove Brackets\n text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n text =\n text.substr(text.length - 1) == \")\"\n ? text.substr(0, text.length - 1)\n : text;\n // split into array of words\n var textSplit = text.split(\" \");\n if (formObject.multiline) {\n textSplit = textSplit.map(word => word.split(\"\\n\"));\n } else {\n textSplit = textSplit.map(word => [word]);\n }\n\n var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n var lineSpacing = 2;\n var borderPadding = 2;\n\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n height = height < 0 ? -height : height;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n width = width < 0 ? -width : width;\n\n var isSmallerThanWidth = function(i, lastLine, fontSize) {\n if (i + 1 < textSplit.length) {\n var tmp = lastLine + \" \" + textSplit[i + 1][0];\n var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n var FieldWidth = width - 2 * borderPadding;\n return TextWidth <= FieldWidth;\n } else {\n return false;\n }\n };\n\n fontSize++;\n FontSize: while (fontSize > 0) {\n text = \"\";\n fontSize--;\n var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n var startY = formObject.multiline\n ? height - fontSize\n : (height - textHeight) / 2;\n startY += lineSpacing;\n var startX;\n\n var lastY = startY;\n var firstWordInLine = 0,\n lastWordInLine = 0;\n var lastLength;\n var currWord = 0;\n\n if (fontSize <= 0) {\n // In case, the Text doesn't fit at all\n fontSize = 12;\n text = \"(...) Tj\\n\";\n text +=\n \"% Width of Text: \" +\n calculateFontSpace(text, formObject, fontSize).width +\n \", FieldWidth:\" +\n width +\n \"\\n\";\n break;\n }\n\n var lastLine = \"\";\n var lineCount = 0;\n Line: for (var i = 0; i < textSplit.length; i++) {\n if (textSplit.hasOwnProperty(i)) {\n let isWithNewLine = false;\n if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n continue FontSize;\n }\n\n lastLine += textSplit[i][currWord];\n isWithNewLine = true;\n lastWordInLine = i;\n i--;\n } else {\n lastLine += textSplit[i][currWord] + \" \";\n lastLine =\n lastLine.substr(lastLine.length - 1) == \" \"\n ? lastLine.substr(0, lastLine.length - 1)\n : lastLine;\n var key = parseInt(i);\n var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n var isLastWord = i >= textSplit.length - 1;\n\n if (nextLineIsSmaller && !isLastWord) {\n lastLine += \" \";\n currWord = 0;\n continue; // Line\n } else if (!nextLineIsSmaller && !isLastWord) {\n if (!formObject.multiline) {\n continue FontSize;\n } else {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the\n // FieldObject\n continue FontSize;\n }\n lastWordInLine = key;\n // go on\n }\n } else if (isLastWord) {\n lastWordInLine = key;\n } else {\n if (\n formObject.multiline &&\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the FieldObject\n continue FontSize;\n }\n }\n }\n // Remove last blank\n\n var line = \"\";\n\n for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n var currLine = textSplit[x];\n if (formObject.multiline) {\n if (x === lastWordInLine) {\n line += currLine[currWord] + \" \";\n currWord = (currWord + 1) % currLine.length;\n continue;\n }\n if (x === firstWordInLine) {\n line += currLine[currLine.length - 1] + \" \";\n continue;\n }\n }\n line += currLine[0] + \" \";\n }\n\n // Remove last blank\n line =\n line.substr(line.length - 1) == \" \"\n ? line.substr(0, line.length - 1)\n : line;\n // lastLength -= blankSpace.width;\n lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n // Calculate startX\n switch (formObject.textAlign) {\n case \"right\":\n startX = width - lastLength - borderPadding;\n break;\n case \"center\":\n startX = (width - lastLength) / 2;\n break;\n case \"left\":\n default:\n startX = borderPadding;\n break;\n }\n text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n // reset X in PDF\n text += -f2(startX) + \" 0 Td\\n\";\n\n // After a Line, adjust y position\n lastY = -(fontSize + lineSpacing);\n\n // Reset for next iteration step\n lastLength = 0;\n firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n lineCount++;\n\n lastLine = \"\";\n continue Line;\n }\n }\n break;\n }\n\n returnValue.text = text;\n returnValue.fontSize = fontSize;\n\n return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n var font = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n );\n var width =\n formObject.scope.getStringUnitWidth(text, {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) * parseFloat(fontSize);\n var height =\n formObject.scope.getStringUnitWidth(\"3\", {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) *\n parseFloat(fontSize) *\n 1.5;\n return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n fields: [],\n xForms: [],\n /**\n * acroFormDictionaryRoot contains information about the AcroForm\n * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n * 1: The Object ID of the Root\n */\n acroFormDictionaryRoot: null,\n /**\n * After the PDF gets evaluated, the reference to the root has to be\n * reset, this indicates, whether the root has already been printed\n * out\n */\n printedOut: false,\n internal: null,\n isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n //set objId to undefined and force it to get a new objId on buildDocument\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n for (var i in fields) {\n if (fields.hasOwnProperty(i)) {\n var formObject = fields[i];\n //set objId to undefined and force it to get a new objId on buildDocument\n formObject.objId = undefined;\n // add Annot Reference!\n if (formObject.hasAnnotation) {\n // If theres an Annotation Widget in the Form Object, put the\n // Reference in the /Annot array\n createAnnotationReference(formObject, scope);\n }\n }\n }\n};\n\nvar putForm = function(formObject) {\n if (formObject.scope.internal.acroformPlugin.printedOut) {\n formObject.scope.internal.acroformPlugin.printedOut = false;\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n }\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n formObject\n );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n var options = {\n type: \"reference\",\n object: object\n };\n var findEntry = function(entry) {\n return entry.type === options.type && entry.object === options.object;\n };\n if (\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.find(findEntry) === undefined\n ) {\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.push(options);\n }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n // Put reference to AcroForm to DocumentCatalog\n if (\n typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n ) {\n // for safety, shouldn't normally be the case\n scope.internal.write(\n \"/AcroForm \" +\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n \" \" +\n 0 +\n \" R\"\n );\n } else {\n throw new Error(\"putCatalogCallback: Root missing.\");\n }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n // Remove event\n scope.internal.events.unsubscribe(\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n );\n delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n var standardFields = !fieldArray;\n\n if (!fieldArray) {\n // in case there is no fieldArray specified, we want to print out\n // the Fields of the AcroForm\n // Print out Root\n scope.internal.newObjectDeferredBegin(\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n true\n );\n scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n }\n\n fieldArray =\n fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var fieldObject = fieldArray[i];\n var keyValueList = [];\n var oldRect = fieldObject.Rect;\n\n if (fieldObject.Rect) {\n fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n }\n\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n fieldObject\n );\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.getKeyValueListForStream === \"function\"\n ) {\n keyValueList = fieldObject.getKeyValueListForStream();\n }\n\n fieldObject.Rect = oldRect;\n\n if (\n fieldObject.hasAppearanceStream &&\n !fieldObject.appearanceStreamContent\n ) {\n // Calculate Appearance\n var appearance = calculateAppearanceStream(fieldObject);\n keyValueList.push({ key: \"AP\", value: \"<>\" });\n\n scope.internal.acroformPlugin.xForms.push(appearance);\n }\n\n // Assume AppearanceStreamContent is a Array with N,R,D (at least\n // one of them!)\n if (fieldObject.appearanceStreamContent) {\n var appearanceStreamString = \"\";\n // Iterate over N,R and D\n for (var k in fieldObject.appearanceStreamContent) {\n if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n var value = fieldObject.appearanceStreamContent[k];\n appearanceStreamString += \"/\" + k + \" \";\n appearanceStreamString += \"<<\";\n if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n // appearanceStream is an Array or Object!\n for (var i in value) {\n if (value.hasOwnProperty(i)) {\n var obj = value[i];\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order\n // to get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n // In case the XForm is already used, e.g. OffState\n // of CheckBoxes, don't add it\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n }\n } else {\n obj = value;\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order to\n // get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj;\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n appearanceStreamString += \">>\";\n }\n }\n\n // appearance stream is a normal Object..\n keyValueList.push({\n key: \"AP\",\n value: \"<<\\n\" + appearanceStreamString + \">>\"\n });\n }\n\n scope.internal.putStream({\n additionalKeyValues: keyValueList,\n objectId: fieldObject.objId\n });\n\n scope.internal.out(\"endobj\");\n }\n }\n if (standardFields) {\n createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var key = i;\n var fieldObject = fieldArray[i];\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.putStream === \"function\"\n ) {\n fieldObject.putStream();\n }\n delete fieldArray[key];\n }\n }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n formObject.scope = scope;\n if (\n scope.internal !== undefined &&\n (scope.internal.acroformPlugin === undefined ||\n scope.internal.acroformPlugin.isInitialized === false)\n ) {\n AcroFormField.FieldNum = 0;\n scope.internal.acroformPlugin = JSON.parse(\n JSON.stringify(acroformPluginTemplate)\n );\n if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n throw new Error(\"Exception while creating AcroformDictionary\");\n }\n scaleFactor = scope.internal.scaleFactor;\n // The Object Number of the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n // add Callback for creating the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n \"postPutResources\",\n function() {\n AcroFormDictionaryCallback(scope);\n }\n );\n\n scope.internal.events.subscribe(\"buildDocument\", function() {\n annotReferenceCallback(scope);\n }); // buildDocument\n\n // Register event, that is triggered when the DocumentCatalog is\n // written, in order to add /AcroForm\n\n scope.internal.events.subscribe(\"putCatalog\", function() {\n putCatalogCallback(scope);\n });\n\n // Register event, that creates all Fields\n scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n createFieldCallback(fieldArray, scope);\n });\n\n scope.internal.acroformPlugin.isInitialized = true;\n }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n array,\n objId,\n scope\n) {\n var encryptor = function(data) {\n return data;\n };\n if (Array.isArray(array)) {\n var content = \"[\";\n for (var i = 0; i < array.length; i++) {\n if (i !== 0) {\n content += \" \";\n }\n switch (typeof array[i]) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n content += array[i].toString();\n break;\n case \"string\":\n if (array[i].substr(0, 1) !== \"/\") {\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n } else {\n content += array[i].toString();\n }\n break;\n }\n }\n content += \"]\";\n return content;\n }\n throw new Error(\n \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n );\n});\nfunction getMatches(string, regex, index) {\n index || (index = 1); // default to the first capturing group\n var matches = [];\n var match;\n while ((match = regex.exec(string))) {\n matches.push(match[index]);\n }\n return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n var result = [];\n if (typeof array === \"string\") {\n result = getMatches(array, /\\((.*?)\\)/g);\n }\n return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n var encryptor = function(data) {\n return data;\n };\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n string = string || \"\";\n string.toString();\n string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n this._objId = undefined;\n this._scope = undefined;\n\n /**\n * @name AcroFormPDFObject#objId\n * @type {any}\n */\n Object.defineProperty(this, \"objId\", {\n get: function() {\n if (typeof this._objId === \"undefined\") {\n if (typeof this.scope === \"undefined\") {\n return undefined;\n }\n this._objId = this.scope.internal.newObjectDeferred();\n }\n return this._objId;\n },\n set: function(value) {\n this._objId = value;\n }\n });\n Object.defineProperty(this, \"scope\", {\n value: this._scope,\n writable: true\n });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n var keyValueList = this.getKeyValueListForStream();\n this.scope.internal.putStream({\n data: this.stream,\n additionalKeyValues: keyValueList,\n objectId: this.objId\n });\n this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n var keyValueList = [];\n var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n return (\n key != \"content\" &&\n key != \"appearanceStreamContent\" &&\n key != \"scope\" &&\n key != \"objId\" &&\n key.substring(0, 1) != \"_\"\n );\n });\n\n for (var i in keys) {\n if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n var key = keys[i];\n var value = this[key];\n\n if (value) {\n if (Array.isArray(value)) {\n keyValueList.push({\n key: key,\n value: arrayToPdfArray(value, this.objId, this.scope)\n });\n } else if (value instanceof AcroFormPDFObject) {\n // In case it is a reference to another PDFObject,\n // take the reference number\n value.scope = this.scope;\n keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n } else if (typeof value !== \"function\") {\n keyValueList.push({ key: key, value: value });\n }\n }\n }\n }\n return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n AcroFormPDFObject.call(this);\n\n Object.defineProperty(this, \"Type\", {\n value: \"/XObject\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"Subtype\", {\n value: \"/Form\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"FormType\", {\n value: 1,\n configurable: false,\n writable: true\n });\n\n var _BBox = [];\n Object.defineProperty(this, \"BBox\", {\n configurable: false,\n get: function() {\n return _BBox;\n },\n set: function(value) {\n _BBox = value;\n }\n });\n\n Object.defineProperty(this, \"Resources\", {\n value: \"2 0 R\",\n configurable: false,\n writable: true\n });\n\n var _stream;\n Object.defineProperty(this, \"stream\", {\n enumerable: false,\n configurable: true,\n set: function(value) {\n _stream = value.trim();\n },\n get: function() {\n if (_stream) {\n return _stream;\n } else {\n return null;\n }\n }\n });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n AcroFormPDFObject.call(this);\n\n var _Kids = [];\n\n Object.defineProperty(this, \"Kids\", {\n enumerable: false,\n configurable: true,\n get: function() {\n if (_Kids.length > 0) {\n return _Kids;\n } else {\n return undefined;\n }\n }\n });\n Object.defineProperty(this, \"Fields\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Kids;\n }\n });\n\n // Default Appearance\n var _DA;\n Object.defineProperty(this, \"DA\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DA) {\n return undefined;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n },\n set: function(value) {\n _DA = value;\n }\n });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n AcroFormPDFObject.call(this);\n\n //Annotation-Flag See Table 165\n var _F = 4;\n Object.defineProperty(this, \"F\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _F;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _F = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute F supplied.'\n );\n }\n }\n });\n\n /**\n * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n *\n * @name AcroFormField#showWhenPrinted\n * @default true\n * @type {boolean}\n */\n Object.defineProperty(this, \"showWhenPrinted\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(_F, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.F = setBitForPdf(_F, 3);\n } else {\n this.F = clearBitForPdf(_F, 3);\n }\n }\n });\n\n var _Ff = 0;\n Object.defineProperty(this, \"Ff\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Ff;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _Ff = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Ff supplied.'\n );\n }\n }\n });\n\n var _Rect = [];\n Object.defineProperty(this, \"Rect\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (_Rect.length === 0) {\n return undefined;\n }\n return _Rect;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Rect = value;\n } else {\n _Rect = [];\n }\n }\n });\n\n /**\n * The x-position of the field.\n *\n * @name AcroFormField#x\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[0])) {\n return 0;\n }\n return _Rect[0];\n },\n set: function(value) {\n _Rect[0] = value;\n }\n });\n\n /**\n * The y-position of the field.\n *\n * @name AcroFormField#y\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[1])) {\n return 0;\n }\n return _Rect[1];\n },\n set: function(value) {\n _Rect[1] = value;\n }\n });\n\n /**\n * The width of the field.\n *\n * @name AcroFormField#width\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[2])) {\n return 0;\n }\n return _Rect[2];\n },\n set: function(value) {\n _Rect[2] = value;\n }\n });\n\n /**\n * The height of the field.\n *\n * @name AcroFormField#height\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[3])) {\n return 0;\n }\n return _Rect[3];\n },\n set: function(value) {\n _Rect[3] = value;\n }\n });\n\n var _FT = \"\";\n Object.defineProperty(this, \"FT\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _FT;\n },\n set: function(value) {\n switch (value) {\n case \"/Btn\":\n case \"/Tx\":\n case \"/Ch\":\n case \"/Sig\":\n _FT = value;\n break;\n default:\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute FT supplied.'\n );\n }\n }\n });\n\n var _T = null;\n\n Object.defineProperty(this, \"T\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (!_T || _T.length < 1) {\n // In case of a Child from a Radio´Group, you don't need a FieldName\n if (this instanceof AcroFormChildClass) {\n return undefined;\n }\n _T = \"FieldObject\" + AcroFormField.FieldNum++;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n },\n set: function(value) {\n _T = value.toString();\n }\n });\n\n /**\n * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n *\n * @name AcroFormField#fieldName\n * @default null\n * @type {string}\n */\n Object.defineProperty(this, \"fieldName\", {\n configurable: true,\n enumerable: true,\n get: function() {\n return _T;\n },\n set: function(value) {\n _T = value;\n }\n });\n\n var _fontName = \"helvetica\";\n /**\n * The fontName of the font to be used.\n *\n * @name AcroFormField#fontName\n * @default 'helvetica'\n * @type {string}\n */\n Object.defineProperty(this, \"fontName\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontName;\n },\n set: function(value) {\n _fontName = value;\n }\n });\n\n var _fontStyle = \"normal\";\n /**\n * The fontStyle of the font to be used.\n *\n * @name AcroFormField#fontStyle\n * @default 'normal'\n * @type {string}\n */\n Object.defineProperty(this, \"fontStyle\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontStyle;\n },\n set: function(value) {\n _fontStyle = value;\n }\n });\n\n var _fontSize = 0;\n /**\n * The fontSize of the font to be used.\n *\n * @name AcroFormField#fontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"fontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontSize;\n },\n set: function(value) {\n _fontSize = value;\n }\n });\n\n var _maxFontSize = undefined;\n /**\n * The maximum fontSize of the font to be used.\n *\n * @name AcroFormField#maxFontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"maxFontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (_maxFontSize === undefined) {\n // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n return 50 / scaleFactor;\n } else {\n return _maxFontSize;\n }\n },\n set: function(value) {\n _maxFontSize = value;\n }\n });\n\n var _color = \"black\";\n /**\n * The color of the text\n *\n * @name AcroFormField#color\n * @default 'black'\n * @type {string|rgba}\n */\n Object.defineProperty(this, \"color\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _color;\n },\n set: function(value) {\n _color = value;\n }\n });\n\n var _DA = \"/F1 0 Tf 0 g\";\n // Defines the default appearance (Needed for variable Text)\n Object.defineProperty(this, \"DA\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (\n !_DA ||\n this instanceof AcroFormChildClass ||\n this instanceof AcroFormTextField\n ) {\n return undefined;\n }\n return toPdfString(_DA, this.objId, this.scope);\n },\n set: function(value) {\n value = value.toString();\n _DA = value;\n }\n });\n\n var _DV = null;\n Object.defineProperty(this, \"DV\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DV) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_DV, this.objId, this.scope);\n }\n return _DV;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _DV = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _DV = pdfUnescape(value);\n }\n } else {\n _DV = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n *\n * @name AcroFormField#defaultValue\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"defaultValue\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_DV.substr(1, _DV.length - 1));\n } else {\n return _DV;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _DV = \"/\" + value;\n } else {\n _DV = value;\n }\n }\n });\n\n var _V = null;\n Object.defineProperty(this, \"_V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n return _V;\n },\n set: function(value) {\n this.V = value;\n }\n });\n Object.defineProperty(this, \"V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_V, this.objId, this.scope);\n }\n return _V;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _V = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _V = pdfUnescape(value);\n }\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n *\n * @name AcroFormField#value\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"value\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_V.substr(1, _V.length - 1));\n } else {\n return _V;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _V = \"/\" + value;\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * Check if field has annotations\n *\n * @name AcroFormField#hasAnnotation\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAnnotation\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.Rect;\n }\n });\n\n Object.defineProperty(this, \"Type\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Annot\" : null;\n }\n });\n\n Object.defineProperty(this, \"Subtype\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Widget\" : null;\n }\n });\n\n var _hasAppearanceStream = false;\n /**\n * true if field has an appearanceStream\n *\n * @name AcroFormField#hasAppearanceStream\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _hasAppearanceStream;\n },\n set: function(value) {\n value = Boolean(value);\n _hasAppearanceStream = value;\n }\n });\n\n /**\n * The page on which the AcroFormField is placed\n *\n * @name AcroFormField#page\n * @type {number}\n */\n var _page;\n Object.defineProperty(this, \"page\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_page) {\n return undefined;\n }\n return _page;\n },\n set: function(value) {\n _page = value;\n }\n });\n\n /**\n * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n *\n * @name AcroFormField#readOnly\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"readOnly\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 1));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 1);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 1);\n }\n }\n });\n\n /**\n * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n *\n * @name AcroFormField#required\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 2));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 2);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 2);\n }\n }\n });\n\n /**\n * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n *\n * @name AcroFormField#noExport\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"noExport\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 3);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 3);\n }\n }\n });\n\n var _Q = null;\n Object.defineProperty(this, \"Q\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (_Q === null) {\n return undefined;\n }\n return _Q;\n },\n set: function(value) {\n if ([0, 1, 2].indexOf(value) !== -1) {\n _Q = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Q supplied.'\n );\n }\n }\n });\n\n /**\n * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n * 'left', 'center', 'right'\n *\n * @name AcroFormField#textAlign\n * @default 'left'\n * @type {string}\n */\n Object.defineProperty(this, \"textAlign\", {\n get: function() {\n var result;\n switch (_Q) {\n case 0:\n default:\n result = \"left\";\n break;\n case 1:\n result = \"center\";\n break;\n case 2:\n result = \"right\";\n break;\n }\n return result;\n },\n configurable: true,\n enumerable: true,\n set: function(value) {\n switch (value) {\n case \"right\":\n case 2:\n _Q = 2;\n break;\n case \"center\":\n case 1:\n _Q = 1;\n break;\n case \"left\":\n case 0:\n default:\n _Q = 0;\n }\n }\n });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n AcroFormField.call(this);\n // Field Type = Choice Field\n this.FT = \"/Ch\";\n // options\n this.V = \"()\";\n\n this.fontName = \"zapfdingbats\";\n // Top Index\n var _TI = 0;\n\n Object.defineProperty(this, \"TI\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n /**\n * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n *\n * @name AcroFormChoiceField#topIndex\n * @default 0\n * @type {number}\n */\n Object.defineProperty(this, \"topIndex\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n var _Opt = [];\n Object.defineProperty(this, \"Opt\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return arrayToPdfArray(_Opt, this.objId, this.scope);\n },\n set: function(value) {\n _Opt = pdfArrayToStringArray(value);\n }\n });\n\n /**\n * @memberof AcroFormChoiceField\n * @name getOptions\n * @function\n * @instance\n * @returns {array} array of Options\n */\n this.getOptions = function() {\n return _Opt;\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name setOptions\n * @function\n * @instance\n * @param {array} value\n */\n this.setOptions = function(value) {\n _Opt = value;\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name addOption\n * @function\n * @instance\n * @param {string} value\n */\n this.addOption = function(value) {\n value = value || \"\";\n value = value.toString();\n _Opt.push(value);\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name removeOption\n * @function\n * @instance\n * @param {string} value\n * @param {boolean} allEntries (default: false)\n */\n this.removeOption = function(value, allEntries) {\n allEntries = allEntries || false;\n value = value || \"\";\n value = value.toString();\n\n while (_Opt.indexOf(value) !== -1) {\n _Opt.splice(_Opt.indexOf(value), 1);\n if (allEntries === false) {\n break;\n }\n }\n };\n\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n *\n * @name AcroFormChoiceField#combo\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"combo\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 18));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 18);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 18);\n }\n }\n });\n\n /**\n * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n *\n * @name AcroFormChoiceField#edit\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"edit\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 19));\n },\n set: function(value) {\n //PDF 32000-1:2008, page 444\n if (this.combo === true) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 19);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 19);\n }\n }\n }\n });\n\n /**\n * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n *\n * @name AcroFormChoiceField#sort\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"sort\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 20));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 20);\n _Opt.sort();\n } else {\n this.Ff = clearBitForPdf(this.Ff, 20);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n *\n * @name AcroFormChoiceField#multiSelect\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 22));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 22);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 22);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n *\n * @name AcroFormChoiceField#doNotSpellCheck\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n *\n * @name AcroFormChoiceField#commitOnSelChange\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"commitOnSelChange\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 27));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 27);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 27);\n }\n }\n });\n\n this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n AcroFormChoiceField.call(this);\n this.fontName = \"helvetica\";\n\n //PDF 32000-1:2008, page 444\n this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n AcroFormListBox.call(this);\n this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n AcroFormComboBox.call(this);\n this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n AcroFormField.call(this);\n this.FT = \"/Btn\";\n\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n *\n * @name AcroFormButton#noToggleToOff\n * @type {boolean}\n */\n Object.defineProperty(this, \"noToggleToOff\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 15));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 15);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 15);\n }\n }\n });\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n *\n * @name AcroFormButton#radio\n * @type {boolean}\n */\n Object.defineProperty(this, \"radio\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 16));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 16);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 16);\n }\n }\n });\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n *\n * @name AcroFormButton#pushButton\n * @type {boolean}\n */\n Object.defineProperty(this, \"pushButton\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 17));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 17);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 17);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n *\n * @name AcroFormButton#radioIsUnison\n * @type {boolean}\n */\n Object.defineProperty(this, \"radioIsUnison\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n if (Object.keys(_MK).length !== 0) {\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n }\n return undefined;\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n AcroFormButton.call(this);\n this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n AcroFormButton.call(this);\n this.radio = true;\n this.pushButton = false;\n\n var _Kids = [];\n Object.defineProperty(this, \"Kids\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _Kids;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Kids = value;\n } else {\n _Kids = [];\n }\n }\n });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n AcroFormField.call(this);\n\n var _parent;\n Object.defineProperty(this, \"Parent\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _parent;\n },\n set: function(value) {\n _parent = value;\n }\n });\n\n var _optionName;\n Object.defineProperty(this, \"optionName\", {\n enumerable: false,\n configurable: true,\n get: function() {\n return _optionName;\n },\n set: function(value) {\n _optionName = value;\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n this.caption = \"l\";\n this.appearanceState = \"Off\";\n // todo: set AppearanceType as variable that can be set from the\n // outside...\n this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n // The Default appearanceType is the Circle\n this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n this.optionName\n );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n throw new Error(\n \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n );\n }\n for (var objId in this.Kids) {\n if (this.Kids.hasOwnProperty(objId)) {\n var child = this.Kids[objId];\n child.appearanceStreamContent = appearance.createAppearanceStream(\n child.optionName\n );\n child.caption = appearance.getCA();\n }\n }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n // Create new Child for RadioGroup\n var child = new AcroFormChildClass();\n child.Parent = this;\n child.optionName = name;\n // Add to Parent\n this.Kids.push(child);\n\n addField.call(this.scope, child);\n\n return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n AcroFormButton.call(this);\n\n this.fontName = \"zapfdingbats\";\n this.caption = \"3\";\n this.appearanceState = \"On\";\n this.value = \"On\";\n this.textAlign = \"center\";\n this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n AcroFormField.call(this);\n this.FT = \"/Tx\";\n\n /**\n * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n *\n * @name AcroFormTextField#multiline\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiline\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 13));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 13);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 13);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n *\n * @name AcroFormTextField#fileSelect\n * @type {boolean}\n */\n Object.defineProperty(this, \"fileSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 21));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 21);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 21);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n *\n * @name AcroFormTextField#doNotSpellCheck\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n *\n * @name AcroFormTextField#doNotScroll\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotScroll\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 24));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 24);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 24);\n }\n }\n });\n\n /**\n * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n *\n * @name AcroFormTextField#comb\n * @type {boolean}\n */\n Object.defineProperty(this, \"comb\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 25));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 25);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 25);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n *\n * @name AcroFormTextField#richText\n * @type {boolean}\n */\n Object.defineProperty(this, \"richText\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MaxLen = null;\n Object.defineProperty(this, \"MaxLen\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n _MaxLen = value;\n }\n });\n\n /**\n * (Optional; inheritable) The maximum length of the field’s text, in characters.\n *\n * @name AcroFormTextField#maxLength\n * @type {number}\n */\n Object.defineProperty(this, \"maxLength\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n if (Number.isInteger(value)) {\n _MaxLen = value;\n }\n }\n });\n\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.V || this.DV;\n }\n });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n AcroFormTextField.call(this);\n\n /**\n * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n *\n * @name AcroFormTextField#password\n * @type {boolean}\n */\n Object.defineProperty(this, \"password\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 14));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 14);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 14);\n }\n }\n });\n this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n CheckBox: {\n createAppearanceStream: function() {\n var appearance = {\n N: {\n On: AcroFormAppearance.CheckBox.YesNormal\n },\n D: {\n On: AcroFormAppearance.CheckBox.YesPushDown,\n Off: AcroFormAppearance.CheckBox.OffPushDown\n }\n };\n\n return appearance;\n },\n /**\n * Returns the standard On Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"BMC\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(\"BT\");\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n stream.push(\"EMC\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var stream = [];\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"1 g\");\n stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(\"0 g\");\n stream.push(\"BT\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n /**\n * Returns the standard Off Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n RadioButton: {\n Circle: {\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Circle.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Circle.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"l\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n // Make the Radius of the Circle relative to min(height, width) of formObject\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n var c = AcroFormAppearance.internal.Bezier_C;\n var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n /*\n * The Following is a Circle created with Bezier-Curves.\n */\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n var dc = Number(\n (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n );\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n stream.push(\"0 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n \"\" +\n DotRadius +\n \" \" +\n dc +\n \" \" +\n dc +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n dc +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n dc +\n \" -\" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n dc +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n dc +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n Cross: {\n /**\n * Creates the Actual AppearanceDictionary-References\n *\n * @param {string} name\n * @returns {Object}\n * @ignore\n */\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Cross.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Cross.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"8\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n }\n },\n\n /**\n * Returns the standard Appearance\n *\n * @returns {AcroFormXObject}\n */\n createDefaultAppearanceStream: function(formObject) {\n // Set Helvetica to Standard Font (size: auto)\n // Color: Black\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var fontSize = formObject.fontSize;\n var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n return result;\n }\n};\n\nAcroFormAppearance.internal = {\n Bezier_C: 0.551915024494,\n\n calculateCross: function(formObject) {\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var a = Math.min(width, height);\n\n var cross = {\n x1: {\n // upperLeft\n x: (width - a) / 2,\n y: (height - a) / 2 + a // height - borderPadding\n },\n x2: {\n // lowerRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 // borderPadding\n },\n x3: {\n // lowerLeft\n x: (width - a) / 2,\n y: (height - a) / 2 // borderPadding\n },\n x4: {\n // upperRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 + a // height - borderPadding\n }\n };\n\n return cross;\n }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[2]);\n }\n return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[3]);\n }\n return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n initializeAcroForm(this, fieldObject);\n\n if (fieldObject instanceof AcroFormField) {\n putForm(fieldObject);\n } else {\n throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n }\n fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n AcroForm,\n AcroFormChoiceField,\n AcroFormListBox,\n AcroFormComboBox,\n AcroFormEditBox,\n AcroFormButton,\n AcroFormPushButton,\n AcroFormRadioButton,\n AcroFormCheckBox,\n AcroFormTextField,\n AcroFormPasswordField,\n AcroFormAppearance\n};\n","function toLookup(arr) {\n return arr.reduce(function(lookup, name, index) {\n lookup[name] = index;\n\n return lookup;\n }, {});\n}\n\nvar fontStyleOrder = {\n italic: [\"italic\", \"oblique\", \"normal\"],\n oblique: [\"oblique\", \"italic\", \"normal\"],\n normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n \"ultra-condensed\",\n \"extra-condensed\",\n \"condensed\",\n \"semi-condensed\",\n \"normal\",\n \"semi-expanded\",\n \"expanded\",\n \"extra-expanded\",\n \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n stretch = stretch || \"normal\";\n\n return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n style = style || \"normal\";\n\n return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n if (!weight) {\n return 400;\n }\n\n if (typeof weight === \"number\") {\n // Ignore values which aren't valid font-weights.\n return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n }\n\n if (/^\\d00$/.test(weight)) {\n return parseInt(weight);\n }\n\n switch (weight) {\n case \"bold\":\n return 700;\n\n case \"normal\":\n default:\n return 400;\n }\n}\n\nexport function normalizeFontFace(fontFace) {\n var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n var style = normalizeFontStyle(fontFace.style);\n var weight = normalizeFontWeight(fontFace.weight);\n var stretch = normalizeFontStretch(fontFace.stretch);\n\n return {\n family: family,\n style: style,\n weight: weight,\n stretch: stretch,\n src: fontFace.src || [],\n\n // The ref property maps this font-face to the font\n // added by the .addFont() method.\n ref: fontFace.ref || {\n name: family,\n style: [stretch, style, weight].join(\" \")\n }\n };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n var map = {};\n\n for (var i = 0; i < fontFaces.length; ++i) {\n var normalized = normalizeFontFace(fontFaces[i]);\n\n var name = normalized.family;\n var stretch = normalized.stretch;\n var style = normalized.style;\n var weight = normalized.weight;\n\n map[name] = map[name] || {};\n\n map[name][stretch] = map[name][stretch] || {};\n map[name][stretch][style] = map[name][stretch][style] || {};\n map[name][stretch][style][weight] = normalized;\n }\n\n return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n var i;\n\n for (i = pivot; i >= 0 && i < order.length; i += dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n\n for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n if (matchingSet[stretch]) {\n return matchingSet[stretch];\n }\n\n var pivot = fontStretchLookup[stretch];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-stretch value for \" + stretch\n );\n }\n\n return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n if (matchingSet[fontStyle]) {\n return matchingSet[fontStyle];\n }\n\n var ordering = fontStyleOrder[fontStyle];\n\n for (var i = 0; i < ordering.length; ++i) {\n if (matchingSet[ordering[i]]) {\n return matchingSet[ordering[i]];\n }\n }\n\n // Since a font-family cannot exist without having at least one style value\n // we should never reach this point.\n throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n if (matchingSet[weight]) {\n return matchingSet[weight];\n }\n\n if (weight === 400 && matchingSet[500]) {\n return matchingSet[500];\n }\n\n if (weight === 500 && matchingSet[400]) {\n return matchingSet[400];\n }\n\n var pivot = fontWeightsLookup[weight];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = weight < 400 ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-weight for value \" + weight\n );\n }\n\n return match;\n}\n\nvar defaultGenericFontFamilies = {\n \"sans-serif\": \"helvetica\",\n fixed: \"courier\",\n monospace: \"courier\",\n terminal: \"courier\",\n cursive: \"times\",\n fantasy: \"times\",\n serif: \"times\"\n};\n\nvar systemFonts = {\n caption: \"times\",\n icon: \"times\",\n menu: \"times\",\n \"message-box\": \"times\",\n \"small-caption\": \"times\",\n \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n opts = opts || {};\n\n var defaultFontFamily = opts.defaultFontFamily || \"times\";\n var genericFontFamilies = Object.assign(\n {},\n defaultGenericFontFamilies,\n opts.genericFontFamilies || {}\n );\n\n var rule = null;\n var matches = null;\n\n for (var i = 0; i < rules.length; ++i) {\n rule = normalizeFontFace(rules[i]);\n\n if (genericFontFamilies[rule.family]) {\n rule.family = genericFontFamilies[rule.family];\n }\n\n if (fontFaceMap.hasOwnProperty(rule.family)) {\n matches = fontFaceMap[rule.family];\n\n break;\n }\n }\n\n // Always fallback to a known font family.\n matches = matches || fontFaceMap[defaultFontFamily];\n\n if (!matches) {\n // At this point we should definitiely have a font family, but if we\n // don't there is something wrong with our configuration\n throw new Error(\n \"Could not find a font-family for the rule '\" +\n ruleToString(rule) +\n \"' and default family '\" +\n defaultFontFamily +\n \"'.\"\n );\n }\n\n matches = resolveFontStretch(rule.stretch, matches);\n matches = resolveFontStyle(rule.style, matches);\n matches = resolveFontWeight(rule.weight, matches);\n\n if (!matches) {\n // We should've fount\n throw new Error(\n \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n );\n }\n\n return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n var index = 0;\n\n while (index < input.length) {\n var current = input.charAt(index);\n\n if (current === quote) {\n return [input.substring(0, index), input.substring(index + 1)];\n }\n\n index += 1;\n }\n\n // Unexpected end of input\n return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n //\n // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n //\n // Breakdown of regexp:\n // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n // [a-z_] - allow a-z and underscore at beginning of input\n // [a-z0-9_-]* - after that, anything goes\n var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n // non quoted value contains illegal characters\n if (match === null) {\n return null;\n }\n\n return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n var result = [];\n var ch, parsed;\n var remaining = input.trim();\n\n if (remaining === \"\") {\n return defaultFont;\n }\n\n if (remaining in systemFonts) {\n return [systemFonts[remaining]];\n }\n\n while (remaining !== \"\") {\n parsed = null;\n remaining = eatWhiteSpace(remaining);\n ch = remaining.charAt(0);\n\n switch (ch) {\n case '\"':\n case \"'\":\n parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n break;\n\n default:\n parsed = parseNonQuotedFontFamily(remaining);\n break;\n }\n\n if (parsed === null) {\n return defaultFont;\n }\n\n result.push(parsed[0]);\n\n remaining = eatWhiteSpace(parsed[1]);\n\n // We expect end of input or a comma separator here\n if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n return defaultFont;\n }\n\n remaining = remaining.replace(/^,/, \"\");\n }\n\n return result;\n}\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namespace = \"addImage_\";\n jsPDFAPI.__addimage__ = {};\n\n var UNKNOWN = \"UNKNOWN\";\n\n // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n // With too small batch iteration will be slow as more calls are made,\n // higher values cause larger and slower garbage collection.\n var ARRAY_APPLY_BATCH = 8192;\n\n var imageFileTypeHeaders = {\n PNG: [[0x89, 0x50, 0x4e, 0x47]],\n TIFF: [\n [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n [0x49, 0x49, 0x2a, 0x00] //Intel\n ],\n JPEG: [\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe0,\n undefined,\n undefined,\n 0x4a,\n 0x46,\n 0x49,\n 0x46,\n 0x00\n ], //JFIF\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe1,\n undefined,\n undefined,\n 0x45,\n 0x78,\n 0x69,\n 0x66,\n 0x00,\n 0x00\n ], //Exif\n [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n ],\n JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n WEBP: [\n [\n 0x52,\n 0x49,\n 0x46,\n 0x46,\n undefined,\n undefined,\n undefined,\n undefined,\n 0x57,\n 0x45,\n 0x42,\n 0x50\n ]\n ],\n BMP: [\n [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n [0x42, 0x41], //BA - OS/2 struct bitmap array\n [0x43, 0x49], //CI - OS/2 struct color icon\n [0x43, 0x50], //CP - OS/2 const color pointer\n [0x49, 0x43], //IC - OS/2 struct icon\n [0x50, 0x54] //PT - OS/2 pointer\n ]\n };\n\n /**\n * Recognize filetype of Image by magic-bytes\n *\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n *\n * @name getImageFileTypeByImageData\n * @public\n * @function\n * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n *\n * @returns {string} filetype of Image\n */\n var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n imageData,\n fallbackFormat\n ) {\n fallbackFormat = fallbackFormat || UNKNOWN;\n var i;\n var j;\n var result = UNKNOWN;\n var headerSchemata;\n var compareResult;\n var fileType;\n\n if (\n fallbackFormat === \"RGBA\" ||\n (imageData.data !== undefined &&\n imageData.data instanceof Uint8ClampedArray &&\n \"height\" in imageData &&\n \"width\" in imageData)\n ) {\n return \"RGBA\";\n }\n\n if (isArrayBufferView(imageData)) {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData[j]) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n } else {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n }\n\n if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n result = fallbackFormat;\n }\n return result;\n });\n\n // Image functionality ported from pdf.js\n var putImage = function(image) {\n var out = this.internal.write;\n var putStream = this.internal.putStream;\n var getFilters = this.internal.getFilters;\n\n var filter = getFilters();\n while (filter.indexOf(\"FlateEncode\") !== -1) {\n filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n }\n\n image.objectId = this.internal.newObject();\n\n var additionalKeyValues = [];\n additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n additionalKeyValues.push({ key: \"Width\", value: image.width });\n additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n if (image.colorSpace === color_spaces.INDEXED) {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value:\n \"[/Indexed /DeviceRGB \" +\n // if an indexed png defines more than one colour with transparency, we've created a sMask\n (image.palette.length / 3 - 1) +\n \" \" +\n (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n ? image.objectId + 2\n : image.objectId + 1) +\n \" 0 R]\"\n });\n } else {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value: \"/\" + image.colorSpace\n });\n if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n }\n }\n additionalKeyValues.push({\n key: \"BitsPerComponent\",\n value: image.bitsPerComponent\n });\n if (\n \"decodeParameters\" in image &&\n typeof image.decodeParameters !== \"undefined\"\n ) {\n additionalKeyValues.push({\n key: \"DecodeParms\",\n value: \"<<\" + image.decodeParameters + \">>\"\n });\n }\n if (\"transparency\" in image && Array.isArray(image.transparency)) {\n var transparency = \"\",\n i = 0,\n len = image.transparency.length;\n for (; i < len; i++)\n transparency +=\n image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n additionalKeyValues.push({\n key: \"Mask\",\n value: \"[\" + transparency + \"]\"\n });\n }\n if (typeof image.sMask !== \"undefined\") {\n additionalKeyValues.push({\n key: \"SMask\",\n value: image.objectId + 1 + \" 0 R\"\n });\n }\n\n var alreadyAppliedFilters =\n typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n putStream({\n data: image.data,\n additionalKeyValues: additionalKeyValues,\n alreadyAppliedFilters: alreadyAppliedFilters,\n objectId: image.objectId\n });\n\n out(\"endobj\");\n\n // Soft mask\n if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n var decodeParameters =\n \"/Predictor \" +\n image.predictor +\n \" /Colors 1 /BitsPerComponent \" +\n image.bitsPerComponent +\n \" /Columns \" +\n image.width;\n var sMask = {\n width: image.width,\n height: image.height,\n colorSpace: \"DeviceGray\",\n bitsPerComponent: image.bitsPerComponent,\n decodeParameters: decodeParameters,\n data: image.sMask\n };\n if (\"filter\" in image) {\n sMask.filter = image.filter;\n }\n putImage.call(this, sMask);\n }\n\n //Palette\n if (image.colorSpace === color_spaces.INDEXED) {\n var objId = this.internal.newObject();\n //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n //putStream(zlib.compress(img['pal']));\n putStream({\n data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n objectId: objId\n });\n out(\"endobj\");\n }\n };\n var putResourcesCallback = function() {\n var images = this.internal.collections[namespace + \"images\"];\n for (var i in images) {\n putImage.call(this, images[i]);\n }\n };\n var putXObjectsDictCallback = function() {\n var images = this.internal.collections[namespace + \"images\"],\n out = this.internal.write,\n image;\n for (var i in images) {\n image = images[i];\n out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n }\n };\n\n var checkCompressValue = function(value) {\n if (value && typeof value === \"string\") value = value.toUpperCase();\n return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n };\n\n var initialize = function() {\n if (!this.internal.collections[namespace + \"images\"]) {\n this.internal.collections[namespace + \"images\"] = {};\n this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n }\n };\n\n var getImages = function() {\n var images = this.internal.collections[namespace + \"images\"];\n initialize.call(this);\n return images;\n };\n var getImageIndex = function() {\n return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n };\n var notDefined = function(value) {\n return typeof value === \"undefined\" || value === null || value.length === 0;\n };\n var generateAliasFromImageData = function(imageData) {\n if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n return sHashCode(imageData);\n } else if (isArrayBufferView(imageData.data)) {\n return sHashCode(imageData.data);\n }\n\n return null;\n };\n\n var isImageTypeSupported = function(type) {\n return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n };\n\n var isDOMElement = function(object) {\n return typeof object === \"object\" && object.nodeType === 1;\n };\n\n var getImageDataFromElement = function(element, format) {\n //if element is an image which uses data url definition, just return the dataurl\n if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n var src = \"\" + element.getAttribute(\"src\");\n\n //is base64 encoded dataUrl, directly process it\n if (src.indexOf(\"data:image/\") === 0) {\n return atob(\n unescape(src)\n .split(\"base64,\")\n .pop()\n );\n }\n\n //it is probably an url, try to load it\n var tmpImageData = jsPDFAPI.loadFile(src, true);\n if (tmpImageData !== undefined) {\n return tmpImageData;\n }\n }\n\n if (element.nodeName === \"CANVAS\") {\n if (element.width === 0 || element.height === 0) {\n throw new Error(\n \"Given canvas must have data. Canvas width: \" +\n element.width +\n \", height: \" +\n element.height\n );\n }\n var mimeType;\n switch (format) {\n case \"PNG\":\n mimeType = \"image/png\";\n break;\n case \"WEBP\":\n mimeType = \"image/webp\";\n break;\n case \"JPEG\":\n case \"JPG\":\n default:\n mimeType = \"image/jpeg\";\n break;\n }\n return atob(\n element\n .toDataURL(mimeType, 1.0)\n .split(\"base64,\")\n .pop()\n );\n }\n };\n\n var checkImagesForAlias = function(alias) {\n var images = this.internal.collections[namespace + \"images\"];\n if (images) {\n for (var e in images) {\n if (alias === images[e].alias) {\n return images[e];\n }\n }\n }\n };\n\n var determineWidthAndHeight = function(width, height, image) {\n if (!width && !height) {\n width = -96;\n height = -96;\n }\n if (width < 0) {\n width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n }\n if (height < 0) {\n height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n }\n if (width === 0) {\n width = (height * image.width) / image.height;\n }\n if (height === 0) {\n height = (width * image.height) / image.width;\n }\n\n return [width, height];\n };\n\n var writeImageToPDF = function(x, y, width, height, image, rotation) {\n var dims = determineWidthAndHeight.call(this, width, height, image),\n coord = this.internal.getCoordinateString,\n vcoord = this.internal.getVerticalCoordinateString;\n\n var images = getImages.call(this);\n\n width = dims[0];\n height = dims[1];\n images[image.index] = image;\n\n if (rotation) {\n rotation *= Math.PI / 180;\n var c = Math.cos(rotation);\n var s = Math.sin(rotation);\n //like in pdf Reference do it 4 digits instead of 2\n var f4 = function(number) {\n return number.toFixed(4);\n };\n var rotationTransformationMatrix = [\n f4(c),\n f4(s),\n f4(s * -1),\n f4(c),\n 0,\n 0,\n \"cm\"\n ];\n }\n this.internal.write(\"q\"); //Save graphics state\n if (rotation) {\n this.internal.write(\n [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n ); //Translate\n this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n this.internal.write(\n [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n ); //Scale\n } else {\n this.internal.write(\n [\n coord(width),\n \"0\",\n \"0\",\n coord(height),\n coord(x),\n vcoord(y + height),\n \"cm\"\n ].join(\" \")\n ); //Translate and Scale\n }\n\n if (this.isAdvancedAPI()) {\n // draw image bottom up when in \"advanced\" API mode\n this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n }\n\n this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n this.internal.write(\"Q\"); //Restore graphics state\n };\n\n /**\n * COLOR SPACES\n */\n var color_spaces = (jsPDFAPI.color_spaces = {\n DEVICE_RGB: \"DeviceRGB\",\n DEVICE_GRAY: \"DeviceGray\",\n DEVICE_CMYK: \"DeviceCMYK\",\n CAL_GREY: \"CalGray\",\n CAL_RGB: \"CalRGB\",\n LAB: \"Lab\",\n ICC_BASED: \"ICCBased\",\n INDEXED: \"Indexed\",\n PATTERN: \"Pattern\",\n SEPARATION: \"Separation\",\n DEVICE_N: \"DeviceN\"\n });\n\n /**\n * DECODE METHODS\n */\n jsPDFAPI.decode = {\n DCT_DECODE: \"DCTDecode\",\n FLATE_DECODE: \"FlateDecode\",\n LZW_DECODE: \"LZWDecode\",\n JPX_DECODE: \"JPXDecode\",\n JBIG2_DECODE: \"JBIG2Decode\",\n ASCII85_DECODE: \"ASCII85Decode\",\n ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n RUN_LENGTH_DECODE: \"RunLengthDecode\",\n CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n };\n\n /**\n * IMAGE COMPRESSION TYPES\n */\n var image_compression = (jsPDFAPI.image_compression = {\n NONE: \"NONE\",\n FAST: \"FAST\",\n MEDIUM: \"MEDIUM\",\n SLOW: \"SLOW\"\n });\n\n /**\n * @name sHashCode\n * @function\n * @param {string} data\n * @returns {string}\n */\n var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n var hash = 0,\n i,\n len;\n\n if (typeof data === \"string\") {\n len = data.length;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n } else if (isArrayBufferView(data)) {\n len = data.byteLength / 2;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data[i];\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n });\n\n /**\n * Validates if given String is a valid Base64-String\n *\n * @name validateStringAsBase64\n * @public\n * @function\n * @param {String} possible Base64-String\n *\n * @returns {boolean}\n */\n var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n possibleBase64String\n ) {\n possibleBase64String = possibleBase64String || \"\";\n possibleBase64String.toString().trim();\n\n var result = true;\n\n if (possibleBase64String.length === 0) {\n result = false;\n }\n\n if (possibleBase64String.length % 4 !== 0) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9+/]+$/.test(\n possibleBase64String.substr(0, possibleBase64String.length - 2)\n ) === false\n ) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n possibleBase64String.substr(-2)\n ) === false\n ) {\n result = false;\n }\n return result;\n });\n\n /**\n * Strips out and returns info from a valid base64 data URI\n *\n * @name extractImageFromDataUrl\n * @function\n * @param {string} dataUrl a valid data URI of format 'data:[][;base64],'\n * @returns {Array}an Array containing the following\n * [0] the complete data URI\n * [1] \n * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n * [4] \n */\n var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n dataUrl\n ) {\n dataUrl = dataUrl || \"\";\n var dataUrlParts = dataUrl.split(\"base64,\");\n var result = null;\n\n if (dataUrlParts.length === 2) {\n var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n dataUrlParts[0]\n );\n if (Array.isArray(extractedInfo)) {\n result = {\n mimeType: extractedInfo[1],\n charset: extractedInfo[2],\n data: dataUrlParts[1]\n };\n }\n }\n return result;\n });\n\n /**\n * Check to see if ArrayBuffer is supported\n *\n * @name supportsArrayBuffer\n * @function\n * @returns {boolean}\n */\n var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n return (\n typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n );\n });\n\n /**\n * Tests supplied object to determine if ArrayBuffer\n *\n * @name isArrayBuffer\n * @function\n * @param {Object} object an Object\n *\n * @returns {boolean}\n */\n jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n return supportsArrayBuffer() && object instanceof ArrayBuffer;\n };\n\n /**\n * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n *\n * @name isArrayBufferView\n * @function\n * @param {Object} object an Object\n * @returns {boolean}\n */\n var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n object\n ) {\n return (\n supportsArrayBuffer() &&\n typeof Uint32Array !== \"undefined\" &&\n (object instanceof Int8Array ||\n object instanceof Uint8Array ||\n (typeof Uint8ClampedArray !== \"undefined\" &&\n object instanceof Uint8ClampedArray) ||\n object instanceof Int16Array ||\n object instanceof Uint16Array ||\n object instanceof Int32Array ||\n object instanceof Uint32Array ||\n object instanceof Float32Array ||\n object instanceof Float64Array)\n );\n });\n\n /**\n * Convert Binary String to ArrayBuffer\n *\n * @name binaryStringToUint8Array\n * @public\n * @function\n * @param {string} BinaryString with ImageData\n * @returns {Uint8Array}\n */\n var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n binary_string\n ) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n });\n\n /**\n * Convert the Buffer to a Binary String\n *\n * @name arrayBufferToBinaryString\n * @public\n * @function\n * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n *\n * @returns {String}\n */\n var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n buffer\n ) {\n var out = \"\";\n // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n // Do not copy the array if input is already an array.\n var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n // Limit the amount of characters being parsed to prevent overflow.\n // Note that while TextDecoder would be faster, it does not have the same\n // functionality as fromCharCode with any provided encodings as of 3/2021.\n out += String.fromCharCode.apply(\n null,\n buf.subarray(i, i + ARRAY_APPLY_BATCH)\n );\n }\n return out;\n });\n\n /**\n * Possible parameter for addImage, an RGBA buffer with size.\n *\n * @typedef {Object} RGBAData\n * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n * @property {number} width - Image width as the data does not carry this information in itself.\n * @property {number} height - Image height as the data does not carry this information in itself.\n */\n\n /**\n * Adds an Image to the PDF.\n *\n * @name addImage\n * @public\n * @function\n * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width width of the image (in units declared at inception of PDF document)\n * @param {number} height height of the Image (in units declared at inception of PDF document)\n * @param {string} alias alias of the image (if used multiple times)\n * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation rotation of the image in degrees (0-359)\n *\n * @returns jsPDF\n */\n jsPDFAPI.addImage = function() {\n var imageData, format, x, y, w, h, alias, compression, rotation;\n\n imageData = arguments[0];\n if (typeof arguments[1] === \"number\") {\n format = UNKNOWN;\n x = arguments[1];\n y = arguments[2];\n w = arguments[3];\n h = arguments[4];\n alias = arguments[5];\n compression = arguments[6];\n rotation = arguments[7];\n } else {\n format = arguments[1];\n x = arguments[2];\n y = arguments[3];\n w = arguments[4];\n h = arguments[5];\n alias = arguments[6];\n compression = arguments[7];\n rotation = arguments[8];\n }\n\n if (\n typeof imageData === \"object\" &&\n !isDOMElement(imageData) &&\n \"imageData\" in imageData\n ) {\n var options = imageData;\n\n imageData = options.imageData;\n format = options.format || format || UNKNOWN;\n x = options.x || x || 0;\n y = options.y || y || 0;\n w = options.w || options.width || w;\n h = options.h || options.height || h;\n alias = options.alias || alias;\n compression = options.compression || compression;\n rotation = options.rotation || options.angle || rotation;\n }\n\n //If compression is not explicitly set, determine if we should use compression\n var filter = this.internal.getFilters();\n if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n compression = \"SLOW\";\n }\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n }\n\n initialize.call(this);\n\n var image = processImageData.call(\n this,\n imageData,\n format,\n alias,\n compression\n );\n\n writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n return this;\n };\n\n var processImageData = function(imageData, format, alias, compression) {\n var result, dataAsBinaryString;\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n imageData = unescape(imageData);\n var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData !== \"\") {\n imageData = tmpImageData;\n } else {\n tmpImageData = jsPDFAPI.loadFile(imageData, true);\n if (tmpImageData !== undefined) {\n imageData = tmpImageData;\n }\n }\n }\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData, format);\n }\n\n format = getImageFileTypeByImageData(imageData, format);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n // now do the heavy lifting\n\n if (notDefined(alias)) {\n alias = generateAliasFromImageData(imageData);\n }\n result = checkImagesForAlias.call(this, alias);\n\n if (!result) {\n if (supportsArrayBuffer()) {\n // no need to convert if imageData is already uint8array\n if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n dataAsBinaryString = imageData;\n imageData = binaryStringToUint8Array(imageData);\n }\n }\n\n result = this[\"process\" + format.toUpperCase()](\n imageData,\n getImageIndex.call(this),\n alias,\n checkCompressValue(compression),\n dataAsBinaryString\n );\n }\n\n if (!result) {\n throw new Error(\"An unknown error occurred whilst processing the image.\");\n }\n return result;\n };\n\n /**\n * @name convertBase64ToBinaryString\n * @function\n * @param {string} stringData\n * @returns {string} binary string\n */\n var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n stringData,\n throwError\n ) {\n throwError = typeof throwError === \"boolean\" ? throwError : true;\n var base64Info;\n var imageData = \"\";\n var rawData;\n\n if (typeof stringData === \"string\") {\n base64Info = extractImageFromDataUrl(stringData);\n rawData = base64Info !== null ? base64Info.data : stringData;\n\n try {\n imageData = atob(rawData);\n } catch (e) {\n if (throwError) {\n if (!validateStringAsBase64(rawData)) {\n throw new Error(\n \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n );\n } else {\n throw new Error(\n \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n );\n }\n }\n }\n }\n return imageData;\n });\n\n /**\n * @name getImageProperties\n * @function\n * @param {Object} imageData\n * @returns {Object}\n */\n jsPDFAPI.getImageProperties = function(imageData) {\n var image;\n var tmpImageData = \"\";\n var format;\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData);\n }\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData === \"\") {\n tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n }\n imageData = tmpImageData;\n }\n\n format = getImageFileTypeByImageData(imageData);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n imageData = binaryStringToUint8Array(imageData);\n }\n\n image = this[\"process\" + format.toUpperCase()](imageData);\n\n if (!image) {\n throw new Error(\"An unknown error occurred whilst processing the image\");\n }\n\n image.fileType = format;\n\n return image;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n *
    \n * This plugin current supports
    \n *
  31. Goto Page (set pageNumber and top in options)\n *
  32. Goto Name (set name and top in options)\n *
  33. Goto URL (set url in options)\n *

    \n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n * (set magFactor in options). XYZ is the default.\n *

    \n *

    \n * Links, Text, Popup, and FreeText are supported.\n *

    \n *

    \n * Options In PDF spec Not Implemented Yet\n *

  34. link border\n *
  35. named target\n *
  36. page coordinates\n *
  37. destination page scaling and layout\n *
  38. actions other than URL and GotoPage\n *
  39. background / hover actions\n *

    \n * @name annotations\n * @module\n */\n\n/*\n Destination Magnification Factors\n See PDF 1.3 Page 386 for meanings and options\n\n [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var notEmpty = function(obj) {\n if (typeof obj != \"undefined\") {\n if (obj != \"\") {\n return true;\n }\n }\n };\n\n jsPDF.API.events.push([\n \"addPage\",\n function(addPageData) {\n var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n pageInfo.pageContext.annotations = [];\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putPage\",\n function(putPageData) {\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal\n .getVerticalCoordinateString;\n var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n var pageAnnos = putPageData.pageContext.annotations;\n\n var anno, rect, line;\n var found = false;\n for (var a = 0; a < pageAnnos.length && !found; a++) {\n anno = pageAnnos[a];\n switch (anno.type) {\n case \"link\":\n if (\n notEmpty(anno.options.url) ||\n notEmpty(anno.options.pageNumber)\n ) {\n found = true;\n }\n break;\n case \"reference\":\n case \"text\":\n case \"freetext\":\n found = true;\n break;\n }\n }\n if (found == false) {\n return;\n }\n\n this.internal.write(\"/Annots [\");\n for (var i = 0; i < pageAnnos.length; i++) {\n anno = pageAnnos[i];\n var escape = this.internal.pdfEscape;\n var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n switch (anno.type) {\n case \"reference\":\n // References to Widget Annotations (for AcroForm Fields)\n this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n break;\n case \"text\":\n // Create a an object for both the text and the popup\n var objText = this.internal.newAdditionalObject();\n var objPopup = this.internal.newAdditionalObject();\n var encryptorText = this.internal.getEncryptor(objText.objId);\n\n var title = anno.title || \"Note\";\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n\n line =\n \"<>\";\n objText.content = line;\n\n var parent = objText.objId + \" 0 R\";\n var popoff = 30;\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x + popoff) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(\n anno.bounds.x + anno.bounds.w + popoff\n ) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n line =\n \"<>\";\n objPopup.content = line;\n\n this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n break;\n case \"freetext\":\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \"] \";\n var color = anno.color || \"#000000\";\n line =\n \"<>\";\n this.internal.write(line);\n break;\n case \"link\":\n if (anno.options.name) {\n var loc = this.annotations._nameMap[anno.options.name];\n anno.options.pageNumber = loc.page;\n anno.options.top = loc.y;\n } else {\n if (!anno.options.top) {\n anno.options.top = 0;\n }\n }\n\n rect =\n \"/Rect [\" +\n anno.finalBounds.x +\n \" \" +\n anno.finalBounds.y +\n \" \" +\n anno.finalBounds.w +\n \" \" +\n anno.finalBounds.h +\n \"] \";\n\n line = \"\";\n if (anno.options.url) {\n line =\n \"<>\";\n } else if (anno.options.pageNumber) {\n // first page is 0\n var info = this.internal.getPageInfo(anno.options.pageNumber);\n line =\n \"<>\";\n this.internal.write(line);\n }\n break;\n }\n }\n this.internal.write(\"]\");\n }\n ]);\n\n /**\n * @name createAnnotation\n * @function\n * @param {Object} options\n */\n jsPDFAPI.createAnnotation = function(options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n switch (options.type) {\n case \"link\":\n this.link(\n options.bounds.x,\n options.bounds.y,\n options.bounds.w,\n options.bounds.h,\n options\n );\n break;\n case \"text\":\n case \"freetext\":\n pageInfo.pageContext.annotations.push(options);\n break;\n }\n };\n\n /**\n * Create a link\n *\n * valid options\n *
  40. pageNumber or url [required]\n *

    If pageNumber is specified, top and zoom may also be specified

    \n * @name link\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {Object} options\n */\n jsPDFAPI.link = function(x, y, w, h, options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n pageInfo.pageContext.annotations.push({\n finalBounds: {\n x: getHorizontalCoordinateString(x),\n y: getVerticalCoordinateString(y),\n w: getHorizontalCoordinateString(x + w),\n h: getVerticalCoordinateString(y + h)\n },\n options: options,\n type: \"link\"\n });\n };\n\n /**\n * Currently only supports single line text.\n * Returns the width of the text/link\n *\n * @name textWithLink\n * @function\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {Object} options\n * @returns {number} width the width of the text/link\n */\n jsPDFAPI.textWithLink = function(text, x, y, options) {\n var totalLineWidth = this.getTextWidth(text);\n var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n var linkHeight, linkWidth;\n\n // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n if (options.maxWidth !== undefined) {\n var { maxWidth } = options;\n linkWidth = maxWidth;\n var numOfLines = this.splitTextToSize(text, linkWidth).length;\n linkHeight = Math.ceil(lineHeight * numOfLines);\n } else {\n linkWidth = totalLineWidth;\n linkHeight = lineHeight;\n }\n\n this.text(text, x, y, options);\n\n //TODO We really need the text baseline height to do this correctly.\n // Or ability to draw text on top, bottom, center, or baseline.\n y += lineHeight * 0.2;\n //handle x position based on the align option\n if (options.align === \"center\") {\n x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n }\n if (options.align === \"right\") {\n x = x - totalLineWidth;\n }\n this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n return totalLineWidth;\n };\n\n //TODO move into external library\n /**\n * @name getTextWidth\n * @function\n * @param {string} text\n * @returns {number} txtWidth\n */\n jsPDFAPI.getTextWidth = function(text) {\n var fontSize = this.internal.getFontSize();\n var txtWidth =\n (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n return txtWidth;\n };\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n * Arabic Substition A\n */\n var arabicSubstitionA = {\n 0x0621: [0xfe80], // ARABIC LETTER HAMZA\n 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n };\n\n /*\n var ligaturesSubstitutionA = {\n 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n };\n */\n\n var ligatures = {\n 0xfedf: {\n 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n },\n 0xfee0: {\n 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n },\n 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n 0x0651: {\n 0x064c: 0xfc5e, // Shadda + Dammatan\n 0x064d: 0xfc5f, // Shadda + Kasratan\n 0x064e: 0xfc60, // Shadda + Fatha\n 0x064f: 0xfc61, // Shadda + Damma\n 0x0650: 0xfc62 // Shadda + Kasra\n }\n };\n\n var arabic_diacritics = {\n 1612: 64606, // Shadda + Dammatan\n 1613: 64607, // Shadda + Kasratan\n 1614: 64608, // Shadda + Fatha\n 1615: 64609, // Shadda + Damma\n 1616: 64610 // Shadda + Kasra\n };\n\n var alfletter = [1570, 1571, 1573, 1575];\n\n var noChangeInForm = -1;\n var isolatedForm = 0;\n var finalForm = 1;\n var initialForm = 2;\n var medialForm = 3;\n\n jsPDFAPI.__arabicParser__ = {};\n\n //private\n var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n letter\n ) {\n return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n });\n\n var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n letter\n ) {\n return (\n typeof letter === \"string\" &&\n /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n letter\n )\n );\n });\n\n var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n );\n });\n\n var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n );\n };\n\n var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n );\n };\n\n var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length == 4\n );\n });\n\n var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n letters\n ) {\n var i = 0;\n var tmpLigatures = ligatures;\n var result = \"\";\n var effectedLetters = 0;\n\n for (i = 0; i < letters.length; i += 1) {\n if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n effectedLetters++;\n tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n if (typeof tmpLigatures === \"number\") {\n result += String.fromCharCode(tmpLigatures);\n tmpLigatures = ligatures;\n effectedLetters = 0;\n }\n if (i === letters.length - 1) {\n tmpLigatures = ligatures;\n result += letters.charAt(i - (effectedLetters - 1));\n i = i - (effectedLetters - 1);\n effectedLetters = 0;\n }\n } else {\n tmpLigatures = ligatures;\n result += letters.charAt(i - effectedLetters);\n i = i - effectedLetters;\n effectedLetters = 0;\n }\n }\n\n return result;\n });\n\n jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n return (\n letter !== undefined &&\n arabic_diacritics[letter.charCodeAt(0)] !== undefined\n );\n };\n\n var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n currentChar,\n beforeChar,\n nextChar\n ) {\n if (!isArabicLetter(currentChar)) {\n return -1;\n }\n\n if (isInArabicSubstitutionA(currentChar) === false) {\n return noChangeInForm;\n }\n if (\n !arabicLetterHasFinalForm(currentChar) ||\n (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n ) {\n return isolatedForm;\n }\n\n if (\n arabicLetterHasMedialForm(currentChar) &&\n isArabicLetter(beforeChar) &&\n !isArabicEndLetter(beforeChar) &&\n isArabicLetter(nextChar) &&\n arabicLetterHasFinalForm(nextChar)\n ) {\n return medialForm;\n }\n\n if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n return finalForm;\n }\n return initialForm;\n });\n\n /**\n * @name processArabic\n * @function\n * @param {string} text\n * @returns {string}\n */\n var parseArabic = function(text) {\n text = text || \"\";\n\n var result = \"\";\n var i = 0;\n var j = 0;\n var position = 0;\n var currentLetter = \"\";\n var prevLetter = \"\";\n var nextLetter = \"\";\n\n var words = text.split(\"\\\\s+\");\n var newWords = [];\n for (i = 0; i < words.length; i += 1) {\n newWords.push(\"\");\n for (j = 0; j < words[i].length; j += 1) {\n currentLetter = words[i][j];\n prevLetter = words[i][j - 1];\n nextLetter = words[i][j + 1];\n if (isArabicLetter(currentLetter)) {\n position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n if (position !== -1) {\n newWords[i] += String.fromCharCode(\n arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n );\n } else {\n newWords[i] += currentLetter;\n }\n } else {\n newWords[i] += currentLetter;\n }\n }\n\n newWords[i] = resolveLigatures(newWords[i]);\n }\n result = newWords.join(\" \");\n\n return result;\n };\n\n var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n var text =\n typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n var tmpText = [];\n var result;\n\n if (Array.isArray(text)) {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n } else {\n tmpText.push([parseArabic(text[i])]);\n }\n }\n result = tmpText;\n } else {\n result = parseArabic(text);\n }\n if (typeof arguments[0] === \"string\") {\n return result;\n } else {\n arguments[0].text = result;\n return arguments[0];\n }\n });\n\n jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n *\n * @name autoPrint\n * @function\n * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF();\n * doc.text(10, 10, 'This is a test');\n * doc.autoPrint({variant: 'non-conform'});\n * doc.save('autoprint.pdf');\n */\n jsPDFAPI.autoPrint = function(options) {\n \"use strict\";\n var refAutoPrintTag;\n options = options || {};\n options.variant = options.variant || \"non-conform\";\n\n switch (options.variant) {\n case \"javascript\":\n //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n this.addJS(\"print({});\");\n break;\n case \"non-conform\":\n default:\n this.internal.events.subscribe(\"postPutResources\", function() {\n refAutoPrintTag = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /Named\");\n this.internal.out(\"/Type /Action\");\n this.internal.out(\"/N /Print\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n });\n break;\n }\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @class Canvas\n * @classdesc A Canvas Wrapper for jsPDF\n */\n var Canvas = function() {\n var jsPdfInstance = undefined;\n Object.defineProperty(this, \"pdf\", {\n get: function() {\n return jsPdfInstance;\n },\n set: function(value) {\n jsPdfInstance = value;\n }\n });\n\n var _width = 150;\n /**\n * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n * This is one of the two properties, the other being width, that controls the size of the canvas.\n *\n * @name width\n */\n Object.defineProperty(this, \"width\", {\n get: function() {\n return _width;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _width = 150;\n } else {\n _width = value;\n }\n if (this.getContext(\"2d\").pageWrapXEnabled) {\n this.getContext(\"2d\").pageWrapX = _width + 1;\n }\n }\n });\n\n var _height = 300;\n /**\n * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n * This is one of the two properties, the other being height, that controls the size of the canvas.\n *\n * @name height\n */\n Object.defineProperty(this, \"height\", {\n get: function() {\n return _height;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _height = 300;\n } else {\n _height = value;\n }\n if (this.getContext(\"2d\").pageWrapYEnabled) {\n this.getContext(\"2d\").pageWrapY = _height + 1;\n }\n }\n });\n\n var _childNodes = [];\n Object.defineProperty(this, \"childNodes\", {\n get: function() {\n return _childNodes;\n },\n set: function(value) {\n _childNodes = value;\n }\n });\n\n var _style = {};\n Object.defineProperty(this, \"style\", {\n get: function() {\n return _style;\n },\n set: function(value) {\n _style = value;\n }\n });\n\n Object.defineProperty(this, \"parentNode\", {});\n };\n\n /**\n * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n *\n * @name getContext\n * @function\n * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n * @param {object} contextAttributes\n */\n Canvas.prototype.getContext = function(contextType, contextAttributes) {\n contextType = contextType || \"2d\";\n var key;\n\n if (contextType !== \"2d\") {\n return null;\n }\n for (key in contextAttributes) {\n if (this.pdf.context2d.hasOwnProperty(key)) {\n this.pdf.context2d[key] = contextAttributes[key];\n }\n }\n this.pdf.context2d._canvas = this;\n return this.pdf.context2d;\n };\n\n /**\n * The toDataURL() method is just a stub to throw an error if accidently called.\n *\n * @name toDataURL\n * @function\n */\n Canvas.prototype.toDataURL = function() {\n throw new Error(\"toDataURL is not implemented.\");\n };\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n this.canvas = new Canvas();\n this.canvas.pdf = this;\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n var px2pt = (0.264583 * 72) / 25.4;\n var printingHeaderRow = false;\n\n var _initialize = function() {\n if (typeof this.internal.__cell__ === \"undefined\") {\n this.internal.__cell__ = {};\n this.internal.__cell__.padding = 3;\n this.internal.__cell__.headerFunction = undefined;\n this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n this.internal.__cell__.margins.width = this.getPageWidth();\n _reset.call(this);\n }\n };\n\n var _reset = function() {\n this.internal.__cell__.lastCell = new Cell();\n this.internal.__cell__.pages = 1;\n };\n\n var Cell = function() {\n var _x = arguments[0];\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n get: function() {\n return _x;\n },\n set: function(value) {\n _x = value;\n }\n });\n var _y = arguments[1];\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n get: function() {\n return _y;\n },\n set: function(value) {\n _y = value;\n }\n });\n var _width = arguments[2];\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n _width = value;\n }\n });\n var _height = arguments[3];\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n get: function() {\n return _height;\n },\n set: function(value) {\n _height = value;\n }\n });\n var _text = arguments[4];\n Object.defineProperty(this, \"text\", {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = value;\n }\n });\n var _lineNumber = arguments[5];\n Object.defineProperty(this, \"lineNumber\", {\n enumerable: true,\n get: function() {\n return _lineNumber;\n },\n set: function(value) {\n _lineNumber = value;\n }\n });\n var _align = arguments[6];\n Object.defineProperty(this, \"align\", {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n _align = value;\n }\n });\n\n return this;\n };\n\n Cell.prototype.clone = function() {\n return new Cell(\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n );\n };\n\n Cell.prototype.toArray = function() {\n return [\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n ];\n };\n\n /**\n * @name setHeaderFunction\n * @function\n * @param {function} func\n */\n jsPDFAPI.setHeaderFunction = function(func) {\n _initialize.call(this);\n this.internal.__cell__.headerFunction =\n typeof func === \"function\" ? func : undefined;\n return this;\n };\n\n /**\n * @name getTextDimensions\n * @function\n * @param {string} txt\n * @returns {Object} dimensions\n */\n jsPDFAPI.getTextDimensions = function(text, options) {\n _initialize.call(this);\n options = options || {};\n var fontSize = options.fontSize || this.getFontSize();\n var font = options.font || this.getFont();\n var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n var width = 0;\n var amountOfLines = 0;\n var height = 0;\n var tempWidth = 0;\n var scope = this;\n\n if (!Array.isArray(text) && typeof text !== \"string\") {\n if (typeof text === \"number\") {\n text = String(text);\n } else {\n throw new Error(\n \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n );\n }\n }\n\n const maxWidth = options.maxWidth;\n if (maxWidth > 0) {\n if (typeof text === \"string\") {\n text = this.splitTextToSize(text, maxWidth);\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n text = text.reduce(function(acc, textLine) {\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n }, []);\n }\n } else {\n // Without the else clause, it will not work if you do not pass along maxWidth\n text = Array.isArray(text) ? text : [text];\n }\n\n for (var i = 0; i < text.length; i++) {\n tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n if (width < tempWidth) {\n width = tempWidth;\n }\n }\n\n if (width !== 0) {\n amountOfLines = text.length;\n }\n\n width = width / scaleFactor;\n height = Math.max(\n (amountOfLines * fontSize * this.getLineHeightFactor() -\n fontSize * (this.getLineHeightFactor() - 1)) /\n scaleFactor,\n 0\n );\n return { w: width, h: height };\n };\n\n /**\n * @name cellAddPage\n * @function\n */\n jsPDFAPI.cellAddPage = function() {\n _initialize.call(this);\n\n this.addPage();\n\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n this.internal.__cell__.lastCell = new Cell(\n margins.left,\n margins.top,\n undefined,\n undefined\n );\n this.internal.__cell__.pages += 1;\n\n return this;\n };\n\n /**\n * @name cell\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} text\n * @param {number} lineNumber lineNumber\n * @param {string} align\n * @return {jsPDF} jsPDF-instance\n */\n var cell = (jsPDFAPI.cell = function() {\n var currentCell;\n\n if (arguments[0] instanceof Cell) {\n currentCell = arguments[0];\n } else {\n currentCell = new Cell(\n arguments[0],\n arguments[1],\n arguments[2],\n arguments[3],\n arguments[4],\n arguments[5]\n );\n }\n _initialize.call(this);\n var lastCell = this.internal.__cell__.lastCell;\n var padding = this.internal.__cell__.padding;\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n var printHeaders = this.internal.__cell__.printHeaders;\n // If this is not the first cell, we must change its position\n if (typeof lastCell.lineNumber !== \"undefined\") {\n if (lastCell.lineNumber === currentCell.lineNumber) {\n //Same line\n currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n currentCell.y = lastCell.y || 0;\n } else {\n //New line\n if (\n lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n this.getPageHeight()\n ) {\n this.cellAddPage();\n currentCell.y = margins.top;\n if (printHeaders && tableHeaderRow) {\n this.printHeaderRow(currentCell.lineNumber, true);\n currentCell.y += tableHeaderRow[0].height;\n }\n } else {\n currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n }\n }\n }\n\n if (typeof currentCell.text[0] !== \"undefined\") {\n this.rect(\n currentCell.x,\n currentCell.y,\n currentCell.width,\n currentCell.height,\n printingHeaderRow === true ? \"FD\" : undefined\n );\n if (currentCell.align === \"right\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width - padding,\n currentCell.y + padding,\n { align: \"right\", baseline: \"top\" }\n );\n } else if (currentCell.align === \"center\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width / 2,\n currentCell.y + padding,\n {\n align: \"center\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n } else {\n this.text(\n currentCell.text,\n currentCell.x + padding,\n currentCell.y + padding,\n {\n align: \"left\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n }\n }\n this.internal.__cell__.lastCell = currentCell;\n return this;\n });\n\n /**\n * Create a table from a set of data.\n * @name table\n * @function\n * @param {Integer} [x] : left-position for top-left corner of table\n * @param {Integer} [y] top-position for top-left corner of table\n * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n * @param {Object} [config.margins] margin values for left, top, bottom, and width\n * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n * @param {Object} [config.padding] cell-padding in pt to use (optional)\n * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n * @param {Object} [config.headerTextColor] default is #000 (optional)\n * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.table = function(x, y, data, headers, config) {\n _initialize.call(this);\n if (!data) {\n throw new Error(\"No data for PDF table.\");\n }\n\n config = config || {};\n\n var headerNames = [],\n headerLabels = [],\n headerAligns = [],\n i,\n columnMatrix = {},\n columnWidths = {},\n column,\n columnMinWidths = [],\n j,\n tableHeaderConfigs = [],\n //set up defaults. If a value is provided in config, defaults will be overwritten:\n autoSize = config.autoSize || false,\n printHeaders = config.printHeaders === false ? false : true,\n fontSize =\n config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n ? config.css[\"font-size\"] * 16\n : config.fontSize || 12,\n margins =\n config.margins ||\n Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n padding = typeof config.padding === \"number\" ? config.padding : 3,\n headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n headerTextColor = config.headerTextColor || \"#000\";\n\n _reset.call(this);\n\n this.internal.__cell__.printHeaders = printHeaders;\n this.internal.__cell__.margins = margins;\n this.internal.__cell__.table_font_size = fontSize;\n this.internal.__cell__.padding = padding;\n this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n this.internal.__cell__.headerTextColor = headerTextColor;\n this.setFontSize(fontSize);\n\n // Set header values\n if (headers === undefined || headers === null) {\n // No headers defined so we derive from data\n headerNames = Object.keys(data[0]);\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n headerNames = headers.map(function(header) {\n return header.name;\n });\n headerLabels = headers.map(function(header) {\n return header.prompt || header.name || \"\";\n });\n headerAligns = headers.map(function(header) {\n return header.align || \"left\";\n });\n // Split header configs into names and prompts\n for (i = 0; i < headers.length; i += 1) {\n columnWidths[headers[i].name] = headers[i].width * px2pt;\n }\n } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n headerNames = headers;\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n }\n\n if (\n autoSize ||\n (Array.isArray(headers) && typeof headers[0] === \"string\")\n ) {\n var headerName;\n for (i = 0; i < headerNames.length; i += 1) {\n headerName = headerNames[i];\n\n // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n columnMatrix[headerName] = data.map(function(rec) {\n return rec[headerName];\n });\n\n // get header width\n this.setFont(undefined, \"bold\");\n columnMinWidths.push(\n this.getTextDimensions(headerLabels[i], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n column = columnMatrix[headerName];\n\n // get cell widths\n this.setFont(undefined, \"normal\");\n for (j = 0; j < column.length; j += 1) {\n columnMinWidths.push(\n this.getTextDimensions(column[j], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n }\n\n // get final column width\n columnWidths[headerName] =\n Math.max.apply(null, columnMinWidths) + padding + padding;\n\n //have to reset\n columnMinWidths = [];\n }\n }\n\n // -- Construct the table\n\n if (printHeaders) {\n var row = {};\n for (i = 0; i < headerNames.length; i += 1) {\n row[headerNames[i]] = {};\n row[headerNames[i]].text = headerLabels[i];\n row[headerNames[i]].align = headerAligns[i];\n }\n\n var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n // Construct the header row\n tableHeaderConfigs = headerNames.map(function(value) {\n return new Cell(\n x,\n y,\n columnWidths[value],\n rowHeight,\n row[value].text,\n undefined,\n row[value].align\n );\n });\n\n // Store the table header config\n this.setTableHeaderRow(tableHeaderConfigs);\n\n // Print the header for the start of the table\n this.printHeaderRow(1, false);\n }\n\n // Construct the data rows\n\n var align = headers.reduce(function(pv, cv) {\n pv[cv.name] = cv.align;\n return pv;\n }, {});\n for (i = 0; i < data.length; i += 1) {\n if (\"rowStart\" in config && config.rowStart instanceof Function) {\n config.rowStart(\n {\n row: i,\n data: data[i]\n },\n this\n );\n }\n var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n for (j = 0; j < headerNames.length; j += 1) {\n var cellData = data[i][headerNames[j]];\n if (\"cellStart\" in config && config.cellStart instanceof Function) {\n config.cellStart(\n {\n row: i,\n col: j,\n data: cellData\n },\n this\n );\n }\n cell.call(\n this,\n new Cell(\n x,\n y,\n columnWidths[headerNames[j]],\n lineHeight,\n cellData,\n i + 2,\n align[headerNames[j]]\n )\n );\n }\n }\n this.internal.__cell__.table_x = x;\n this.internal.__cell__.table_y = y;\n return this;\n };\n\n /**\n * Calculate the height for containing the highest column\n *\n * @name calculateLineHeight\n * @function\n * @param {Object[]} model is the line of data we want to calculate the height of\n * @param {Integer[]} columnWidths is size of each column\n * @returns {number} lineHeight\n * @private\n */\n var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n var padding = this.internal.__cell__.padding;\n var fontSize = this.internal.__cell__.table_font_size;\n var scaleFactor = this.internal.scaleFactor;\n\n return Object.keys(model)\n .map(function(key) {\n var value = model[key];\n return this.splitTextToSize(\n value.hasOwnProperty(\"text\") ? value.text : value,\n columnWidths[key] - padding - padding\n );\n }, this)\n .map(function(value) {\n return (\n (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n padding +\n padding\n );\n }, this)\n .reduce(function(pv, cv) {\n return Math.max(pv, cv);\n }, 0);\n };\n\n /**\n * Store the config for outputting a table header\n *\n * @name setTableHeaderRow\n * @function\n * @param {Object[]} config\n * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n * except the lineNumber parameter is excluded\n */\n jsPDFAPI.setTableHeaderRow = function(config) {\n _initialize.call(this);\n this.internal.__cell__.tableHeaderRow = config;\n };\n\n /**\n * Output the store header row\n *\n * @name printHeaderRow\n * @function\n * @param {number} lineNumber The line number to output the header at\n * @param {boolean} new_page\n */\n jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n _initialize.call(this);\n if (!this.internal.__cell__.tableHeaderRow) {\n throw new Error(\"Property tableHeaderRow does not exist.\");\n }\n\n var tableHeaderCell;\n\n printingHeaderRow = true;\n if (typeof this.internal.__cell__.headerFunction === \"function\") {\n var position = this.internal.__cell__.headerFunction(\n this,\n this.internal.__cell__.pages\n );\n this.internal.__cell__.lastCell = new Cell(\n position[0],\n position[1],\n position[2],\n position[3],\n undefined,\n -1\n );\n }\n this.setFont(undefined, \"bold\");\n\n var tempHeaderConf = [];\n for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n if (new_page) {\n tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n tempHeaderConf.push(tableHeaderCell);\n }\n tableHeaderCell.lineNumber = lineNumber;\n var currentTextColor = this.getTextColor();\n this.setTextColor(this.internal.__cell__.headerTextColor);\n this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n cell.call(this, tableHeaderCell);\n this.setTextColor(currentTextColor);\n }\n if (tempHeaderConf.length > 0) {\n this.setTableHeaderRow(tempHeaderConf);\n }\n this.setFont(undefined, \"normal\");\n printingHeaderRow = false;\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n var jsNamesObj, jsJsObj, text;\n /**\n * @name addJS\n * @function\n * @param {string} javascript The javascript to be embedded into the PDF-file.\n * @returns {jsPDF}\n */\n jsPDFAPI.addJS = function(javascript) {\n text = javascript;\n this.internal.events.subscribe(\"postPutResources\", function() {\n jsNamesObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n\n jsJsObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /JavaScript\");\n this.internal.out(\"/JS (\" + text + \")\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n this.internal.events.subscribe(\"putCatalog\", function() {\n if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n this.internal.out(\"/Names <>\");\n }\n });\n return this;\n };\n})(jsPDF.API);\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n buildFontFaceMap,\r\n parseFontFamily,\r\n resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n \"use strict\";\r\n var ContextLayer = function(ctx) {\r\n ctx = ctx || {};\r\n this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n this.strokeOpacity = ctx.strokeOpacity || 1;\r\n this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n this.fillStyle = ctx.fillStyle || \"#000000\";\r\n this.isFillTransparent = ctx.isFillTransparent || false;\r\n this.fillOpacity = ctx.fillOpacity || 1;\r\n this.font = ctx.font || \"10px sans-serif\";\r\n this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n this.textAlign = ctx.textAlign || \"left\";\r\n this.lineWidth = ctx.lineWidth || 1;\r\n this.lineJoin = ctx.lineJoin || \"miter\";\r\n this.lineCap = ctx.lineCap || \"butt\";\r\n this.path = ctx.path || [];\r\n this.transform =\r\n typeof ctx.transform !== \"undefined\"\r\n ? ctx.transform.clone()\r\n : new Matrix();\r\n this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n this.globalAlpha = ctx.globalAlpha || 1.0;\r\n this.clip_path = ctx.clip_path || [];\r\n this.currentPoint = ctx.currentPoint || new Point();\r\n this.miterLimit = ctx.miterLimit || 10.0;\r\n this.lastPoint = ctx.lastPoint || new Point();\r\n this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n this.lineDash = ctx.lineDash || [];\r\n this.margin = ctx.margin || [0, 0, 0, 0];\r\n this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n this.ignoreClearRect =\r\n typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n return this;\r\n };\r\n\r\n //stub\r\n var f2,\r\n getHorizontalCoordinateString,\r\n getVerticalCoordinateString,\r\n getHorizontalCoordinate,\r\n getVerticalCoordinate,\r\n Point,\r\n Rectangle,\r\n Matrix,\r\n _ctx;\r\n jsPDFAPI.events.push([\r\n \"initialized\",\r\n function() {\r\n this.context2d = new Context2D(this);\r\n\r\n f2 = this.internal.f2;\r\n getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n Point = this.internal.Point;\r\n Rectangle = this.internal.Rectangle;\r\n Matrix = this.internal.Matrix;\r\n _ctx = new ContextLayer();\r\n }\r\n ]);\r\n\r\n var Context2D = function(pdf) {\r\n Object.defineProperty(this, \"canvas\", {\r\n get: function() {\r\n return { parentNode: false, style: false };\r\n }\r\n });\r\n\r\n var _pdf = pdf;\r\n Object.defineProperty(this, \"pdf\", {\r\n get: function() {\r\n return _pdf;\r\n }\r\n });\r\n\r\n var _pageWrapXEnabled = false;\r\n /**\r\n * @name pageWrapXEnabled\r\n * @type {boolean}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n get: function() {\r\n return _pageWrapXEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapXEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _pageWrapYEnabled = false;\r\n /**\r\n * @name pageWrapYEnabled\r\n * @type {boolean}\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n get: function() {\r\n return _pageWrapYEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapYEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _posX = 0;\r\n /**\r\n * @name posX\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posX\", {\r\n get: function() {\r\n return _posX;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posX = value;\r\n }\r\n }\r\n });\r\n\r\n var _posY = 0;\r\n /**\r\n * @name posY\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posY\", {\r\n get: function() {\r\n return _posY;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posY = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n * @name margin\r\n * @type {number|number[]}\r\n * @default [0, 0, 0, 0]\r\n */\r\n Object.defineProperty(this, \"margin\", {\r\n get: function() {\r\n return _ctx.margin;\r\n },\r\n set: function(value) {\r\n var margin;\r\n if (typeof value === \"number\") {\r\n margin = [value, value, value, value];\r\n } else {\r\n margin = new Array(4);\r\n margin[0] = value[0];\r\n margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n }\r\n _ctx.margin = margin;\r\n }\r\n });\r\n\r\n var _autoPaging = false;\r\n /**\r\n * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n * pages if required.\r\n *\r\n * Context2d supports different modes:\r\n *
      \r\n *
    • \r\n * false: Auto paging is disabled.\r\n *
    • \r\n *
    • \r\n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\r\n * slice text in half, making it difficult to read.\r\n *
    • \r\n *
    • \r\n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\r\n * mostly of a single column of text.\r\n *
    • \r\n *
    \r\n * @name Context2D#autoPaging\r\n * @type {boolean|\"slice\"|\"text\"}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"autoPaging\", {\r\n get: function() {\r\n return _autoPaging;\r\n },\r\n set: function(value) {\r\n _autoPaging = value;\r\n }\r\n });\r\n\r\n var lastBreak = 0;\r\n /**\r\n * @name lastBreak\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"lastBreak\", {\r\n get: function() {\r\n return lastBreak;\r\n },\r\n set: function(value) {\r\n lastBreak = value;\r\n }\r\n });\r\n\r\n var pageBreaks = [];\r\n /**\r\n * Y Position of page breaks.\r\n * @name pageBreaks\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"pageBreaks\", {\r\n get: function() {\r\n return pageBreaks;\r\n },\r\n set: function(value) {\r\n pageBreaks = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctx\r\n * @type {object}\r\n * @default {}\r\n */\r\n Object.defineProperty(this, \"ctx\", {\r\n get: function() {\r\n return _ctx;\r\n },\r\n set: function(value) {\r\n if (value instanceof ContextLayer) {\r\n _ctx = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * @name path\r\n * @type {array}\r\n * @default []\r\n */\r\n Object.defineProperty(this, \"path\", {\r\n get: function() {\r\n return _ctx.path;\r\n },\r\n set: function(value) {\r\n _ctx.path = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctxStack\r\n * @type {array}\r\n * @default []\r\n */\r\n var _ctxStack = [];\r\n Object.defineProperty(this, \"ctxStack\", {\r\n get: function() {\r\n return _ctxStack;\r\n },\r\n set: function(value) {\r\n _ctxStack = value;\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n *\r\n * @name fillStyle\r\n * @default #000000\r\n * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    \r\n * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    \r\n * A pattern object to use to fill the drawing (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"fillStyle\", {\r\n get: function() {\r\n return this.ctx.fillStyle;\r\n },\r\n set: function(value) {\r\n var rgba;\r\n rgba = getRGBA(value);\r\n\r\n this.ctx.fillStyle = rgba.style;\r\n this.ctx.isFillTransparent = rgba.a === 0;\r\n this.ctx.fillOpacity = rgba.a;\r\n\r\n this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used for strokes\r\n *\r\n * @name strokeStyle\r\n * @default #000000\r\n * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"strokeStyle\", {\r\n get: function() {\r\n return this.ctx.strokeStyle;\r\n },\r\n set: function(value) {\r\n var rgba = getRGBA(value);\r\n\r\n this.ctx.strokeStyle = rgba.style;\r\n this.ctx.isStrokeTransparent = rgba.a === 0;\r\n this.ctx.strokeOpacity = rgba.a;\r\n\r\n if (rgba.a === 0) {\r\n this.pdf.setDrawColor(255, 255, 255);\r\n } else if (rgba.a === 1) {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n } else {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the style of the end caps for a line\r\n *\r\n * @name lineCap\r\n * @default butt\r\n * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    \r\n * round A rounded end cap is added to each end of the line
    \r\n * square A square end cap is added to each end of the line
    \r\n */\r\n Object.defineProperty(this, \"lineCap\", {\r\n get: function() {\r\n return this.ctx.lineCap;\r\n },\r\n set: function(value) {\r\n if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n this.ctx.lineCap = value;\r\n this.pdf.setLineCap(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the current line width\r\n *\r\n * @name lineWidth\r\n * @default 1\r\n * @property {number} lineWidth The current line width, in pixels\r\n */\r\n Object.defineProperty(this, \"lineWidth\", {\r\n get: function() {\r\n return this.ctx.lineWidth;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.lineWidth = value;\r\n this.pdf.setLineWidth(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the type of corner created, when two lines meet\r\n */\r\n Object.defineProperty(this, \"lineJoin\", {\r\n get: function() {\r\n return this.ctx.lineJoin;\r\n },\r\n set: function(value) {\r\n if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n this.ctx.lineJoin = value;\r\n this.pdf.setLineJoin(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n *\r\n * @name miterLimit\r\n * @default 10\r\n */\r\n Object.defineProperty(this, \"miterLimit\", {\r\n get: function() {\r\n return this.ctx.miterLimit;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.miterLimit = value;\r\n this.pdf.setMiterLimit(value);\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textBaseline\", {\r\n get: function() {\r\n return this.ctx.textBaseline;\r\n },\r\n set: function(value) {\r\n this.ctx.textBaseline = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textAlign\", {\r\n get: function() {\r\n return this.ctx.textAlign;\r\n },\r\n set: function(value) {\r\n if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n this.ctx.textAlign = value;\r\n }\r\n }\r\n });\r\n\r\n var _fontFaceMap = null;\r\n\r\n function getFontFaceMap(pdf, fontFaces) {\r\n if (_fontFaceMap === null) {\r\n var fontMap = pdf.getFontList();\r\n\r\n var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n }\r\n\r\n return _fontFaceMap;\r\n }\r\n\r\n function convertToFontFaces(fontMap) {\r\n var fontFaces = [];\r\n\r\n Object.keys(fontMap).forEach(function(family) {\r\n var styles = fontMap[family];\r\n\r\n styles.forEach(function(style) {\r\n var fontFace = null;\r\n\r\n switch (style) {\r\n case \"bold\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\"\r\n };\r\n break;\r\n\r\n case \"italic\":\r\n fontFace = {\r\n family: family,\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"bolditalic\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\",\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"\":\r\n case \"normal\":\r\n fontFace = {\r\n family: family\r\n };\r\n break;\r\n }\r\n\r\n // If font-face is still null here, it is a font with some styling we don't recognize and\r\n // cannot map or it is a font added via the fontFaces option of .html().\r\n if (fontFace !== null) {\r\n fontFace.ref = {\r\n name: family,\r\n style: style\r\n };\r\n\r\n fontFaces.push(fontFace);\r\n }\r\n });\r\n });\r\n\r\n return fontFaces;\r\n }\r\n\r\n var _fontFaces = null;\r\n /**\r\n * A map of available font-faces, as passed in the options of\r\n * .html(). If set a limited implementation of the font style matching\r\n * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n * will be used. If not set it will fallback to previous behavior.\r\n */\r\n\r\n Object.defineProperty(this, \"fontFaces\", {\r\n get: function() {\r\n return _fontFaces;\r\n },\r\n set: function(value) {\r\n _fontFaceMap = null;\r\n _fontFaces = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"font\", {\r\n get: function() {\r\n return this.ctx.font;\r\n },\r\n set: function(value) {\r\n this.ctx.font = value;\r\n var rx, matches;\r\n\r\n //source: https://stackoverflow.com/a/10136041\r\n // eslint-disable-next-line no-useless-escape\r\n rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n matches = rx.exec(value);\r\n if (matches !== null) {\r\n var fontStyle = matches[1];\r\n var fontVariant = matches[2];\r\n var fontWeight = matches[3];\r\n var fontSize = matches[4];\r\n var lineHeight = matches[5];\r\n var fontFamily = matches[6];\r\n } else {\r\n return;\r\n }\r\n var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n if (\"px\" === fontSizeUnit) {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n } else if (\"em\" === fontSizeUnit) {\r\n fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n } else {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n }\r\n\r\n this.pdf.setFontSize(fontSize);\r\n var parts = parseFontFamily(fontFamily);\r\n\r\n if (this.fontFaces) {\r\n var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n var rules = parts.map(function(ff) {\r\n return {\r\n family: ff,\r\n stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n weight: fontWeight,\r\n style: fontStyle\r\n };\r\n });\r\n\r\n var font = resolveFontFace(fontFaceMap, rules);\r\n this.pdf.setFont(font.ref.name, font.ref.style);\r\n return;\r\n }\r\n\r\n var style = \"\";\r\n if (\r\n fontWeight === \"bold\" ||\r\n parseInt(fontWeight, 10) >= 700 ||\r\n fontStyle === \"bold\"\r\n ) {\r\n style = \"bold\";\r\n }\r\n\r\n if (fontStyle === \"italic\") {\r\n style += \"italic\";\r\n }\r\n\r\n if (style.length === 0) {\r\n style = \"normal\";\r\n }\r\n var jsPdfFontName = \"\";\r\n\r\n var fallbackFonts = {\r\n arial: \"Helvetica\",\r\n Arial: \"Helvetica\",\r\n verdana: \"Helvetica\",\r\n Verdana: \"Helvetica\",\r\n helvetica: \"Helvetica\",\r\n Helvetica: \"Helvetica\",\r\n \"sans-serif\": \"Helvetica\",\r\n fixed: \"Courier\",\r\n monospace: \"Courier\",\r\n terminal: \"Courier\",\r\n cursive: \"Times\",\r\n fantasy: \"Times\",\r\n serif: \"Times\"\r\n };\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n if (\r\n this.pdf.internal.getFont(parts[i], style, {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n break;\r\n } else if (\r\n style === \"bolditalic\" &&\r\n this.pdf.internal.getFont(parts[i], \"bold\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"bold\";\r\n } else if (\r\n this.pdf.internal.getFont(parts[i], \"normal\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"normal\";\r\n break;\r\n }\r\n }\r\n if (jsPdfFontName === \"\") {\r\n for (var j = 0; j < parts.length; j++) {\r\n if (fallbackFonts[parts[j]]) {\r\n jsPdfFontName = fallbackFonts[parts[j]];\r\n break;\r\n }\r\n }\r\n }\r\n jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n this.pdf.setFont(jsPdfFontName, style);\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalCompositeOperation\", {\r\n get: function() {\r\n return this.ctx.globalCompositeOperation;\r\n },\r\n set: function(value) {\r\n this.ctx.globalCompositeOperation = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalAlpha\", {\r\n get: function() {\r\n return this.ctx.globalAlpha;\r\n },\r\n set: function(value) {\r\n this.ctx.globalAlpha = value;\r\n }\r\n });\r\n\r\n /**\r\n * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n *\r\n * @name lineDashOffset\r\n * @default 0.0\r\n */\r\n Object.defineProperty(this, \"lineDashOffset\", {\r\n get: function() {\r\n return this.ctx.lineDashOffset;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDashOffset = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"lineDash\", {\r\n get: function() {\r\n return this.ctx.lineDash;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDash = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"ignoreClearRect\", {\r\n get: function() {\r\n return this.ctx.ignoreClearRect;\r\n },\r\n set: function(value) {\r\n this.ctx.ignoreClearRect = Boolean(value);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets the line dash pattern used when stroking lines.\r\n * @name setLineDash\r\n * @function\r\n * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n */\r\n Context2D.prototype.setLineDash = function(dashArray) {\r\n this.lineDash = dashArray;\r\n };\r\n\r\n /**\r\n * gets the current line dash pattern.\r\n * @name getLineDash\r\n * @function\r\n * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n */\r\n Context2D.prototype.getLineDash = function() {\r\n if (this.lineDash.length % 2) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n return this.lineDash.concat(this.lineDash);\r\n } else {\r\n // The copied value is returned to prevent contamination from outside.\r\n return this.lineDash.slice();\r\n }\r\n };\r\n\r\n Context2D.prototype.fill = function() {\r\n pathPreProcess.call(this, \"fill\", false);\r\n };\r\n\r\n /**\r\n * Actually draws the path you have defined\r\n *\r\n * @name stroke\r\n * @function\r\n * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n */\r\n Context2D.prototype.stroke = function() {\r\n pathPreProcess.call(this, \"stroke\", false);\r\n };\r\n\r\n /**\r\n * Begins a path, or resets the current\r\n *\r\n * @name beginPath\r\n * @function\r\n * @description The beginPath() method begins a path, or resets the current path.\r\n */\r\n Context2D.prototype.beginPath = function() {\r\n this.path = [\r\n {\r\n type: \"begin\"\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Moves the path to the specified point in the canvas, without creating a line\r\n *\r\n * @name moveTo\r\n * @function\r\n * @param x {Number} The x-coordinate of where to move the path to\r\n * @param y {Number} The y-coordinate of where to move the path to\r\n */\r\n Context2D.prototype.moveTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"mt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(x, y);\r\n };\r\n\r\n /**\r\n * Creates a path from the current point back to the starting point\r\n *\r\n * @name closePath\r\n * @function\r\n * @description The closePath() method creates a path from the current point back to the starting point.\r\n */\r\n Context2D.prototype.closePath = function() {\r\n var pathBegin = new Point(0, 0);\r\n var i = 0;\r\n for (i = this.path.length - 1; i !== -1; i--) {\r\n if (this.path[i].type === \"begin\") {\r\n if (\r\n typeof this.path[i + 1] === \"object\" &&\r\n typeof this.path[i + 1].x === \"number\"\r\n ) {\r\n pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n break;\r\n }\r\n }\r\n }\r\n this.path.push({\r\n type: \"close\"\r\n });\r\n this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n };\r\n\r\n /**\r\n * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n *\r\n * @name lineTo\r\n * @function\r\n * @param x The x-coordinate of where to create the line to\r\n * @param y The y-coordinate of where to create the line to\r\n * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n */\r\n Context2D.prototype.lineTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"lt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n };\r\n\r\n /**\r\n * Clips a region of any shape and size from the original canvas\r\n *\r\n * @name clip\r\n * @function\r\n * @description The clip() method clips a region of any shape and size from the original canvas.\r\n */\r\n Context2D.prototype.clip = function() {\r\n this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n pathPreProcess.call(this, null, true);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name quadraticCurveTo\r\n * @function\r\n * @param cpx {Number} The x-coordinate of the Bézier control point\r\n * @param cpy {Number} The y-coordinate of the Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n console.error(\r\n \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n );\r\n }\r\n\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n this.path.push({\r\n type: \"qct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name bezierCurveTo\r\n * @function\r\n * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(cp1x) ||\r\n isNaN(cp1y) ||\r\n isNaN(cp2x) ||\r\n isNaN(cp2y)\r\n ) {\r\n console.error(\r\n \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n );\r\n }\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n this.path.push({\r\n type: \"bct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x2: pt2.x,\r\n y2: pt2.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates an arc/curve (used to create circles, or parts of circles)\r\n *\r\n * @name arc\r\n * @function\r\n * @param x {Number} The x-coordinate of the center of the circle\r\n * @param y {Number} The y-coordinate of the center of the circle\r\n * @param radius {Number} The radius of the circle\r\n * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n * @param endAngle {Number} The ending angle, in radians\r\n * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n */\r\n Context2D.prototype.arc = function(\r\n x,\r\n y,\r\n radius,\r\n startAngle,\r\n endAngle,\r\n counterclockwise\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(radius) ||\r\n isNaN(startAngle) ||\r\n isNaN(endAngle)\r\n ) {\r\n console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n }\r\n counterclockwise = Boolean(counterclockwise);\r\n\r\n if (!this.ctx.transform.isIdentity) {\r\n var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n x = xpt.x;\r\n y = xpt.y;\r\n\r\n var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n radius = Math.sqrt(\r\n Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n );\r\n }\r\n if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n startAngle = 0;\r\n endAngle = 2 * Math.PI;\r\n }\r\n\r\n this.path.push({\r\n type: \"arc\",\r\n x: x,\r\n y: y,\r\n radius: radius,\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n counterclockwise: counterclockwise\r\n });\r\n // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n };\r\n\r\n /**\r\n * Creates an arc/curve between two tangents\r\n *\r\n * @name arcTo\r\n * @function\r\n * @param x1 {Number} The x-coordinate of the first tangent\r\n * @param y1 {Number} The y-coordinate of the first tangent\r\n * @param x2 {Number} The x-coordinate of the second tangent\r\n * @param y2 {Number} The y-coordinate of the second tangent\r\n * @param radius The radius of the arc\r\n * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n throw new Error(\"arcTo not implemented.\");\r\n };\r\n\r\n /**\r\n * Creates a rectangle\r\n *\r\n * @name rect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The rect() method creates a rectangle.\r\n */\r\n Context2D.prototype.rect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n }\r\n this.moveTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x + w, y + h);\r\n this.lineTo(x, y + h);\r\n this.lineTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x, y);\r\n };\r\n\r\n /**\r\n * Draws a \"filled\" rectangle\r\n *\r\n * @name fillRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n */\r\n Context2D.prototype.fillRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n }\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n var tmp = {};\r\n if (this.lineCap !== \"butt\") {\r\n tmp.lineCap = this.lineCap;\r\n this.lineCap = \"butt\";\r\n }\r\n if (this.lineJoin !== \"miter\") {\r\n tmp.lineJoin = this.lineJoin;\r\n this.lineJoin = \"miter\";\r\n }\r\n\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.fill();\r\n\r\n if (tmp.hasOwnProperty(\"lineCap\")) {\r\n this.lineCap = tmp.lineCap;\r\n }\r\n if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n this.lineJoin = tmp.lineJoin;\r\n }\r\n };\r\n\r\n /**\r\n * Draws a rectangle (no fill)\r\n *\r\n * @name strokeRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n */\r\n Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.stroke();\r\n };\r\n\r\n /**\r\n * Clears the specified pixels within a given rectangle\r\n *\r\n * @name clearRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle to clear, in pixels\r\n * @param h {Number} The height of the rectangle to clear, in pixels\r\n * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    \r\n * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n *\r\n */\r\n Context2D.prototype.clearRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n }\r\n if (this.ignoreClearRect) {\r\n return;\r\n }\r\n\r\n this.fillStyle = \"#ffffff\";\r\n this.fillRect(x, y, w, h);\r\n };\r\n\r\n /**\r\n * Saves the state of the current context\r\n *\r\n * @name save\r\n * @function\r\n */\r\n Context2D.prototype.save = function(doStackPush) {\r\n doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPush) {\r\n this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n var ctx = new ContextLayer(this.ctx);\r\n this.ctxStack.push(this.ctx);\r\n this.ctx = ctx;\r\n }\r\n };\r\n\r\n /**\r\n * Returns previously saved path state and attributes\r\n *\r\n * @name restore\r\n * @function\r\n */\r\n Context2D.prototype.restore = function(doStackPop) {\r\n doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"Q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPop && this.ctxStack.length !== 0) {\r\n this.ctx = this.ctxStack.pop();\r\n this.fillStyle = this.ctx.fillStyle;\r\n this.strokeStyle = this.ctx.strokeStyle;\r\n this.font = this.ctx.font;\r\n this.lineCap = this.ctx.lineCap;\r\n this.lineWidth = this.ctx.lineWidth;\r\n this.lineJoin = this.ctx.lineJoin;\r\n this.lineDash = this.ctx.lineDash;\r\n this.lineDashOffset = this.ctx.lineDashOffset;\r\n }\r\n };\r\n\r\n /**\r\n * @name toDataURL\r\n * @function\r\n */\r\n Context2D.prototype.toDataURL = function() {\r\n throw new Error(\"toDataUrl not implemented.\");\r\n };\r\n\r\n //helper functions\r\n\r\n /**\r\n * Get the decimal values of r, g, b and a\r\n *\r\n * @name getRGBA\r\n * @function\r\n * @private\r\n * @ignore\r\n */\r\n var getRGBA = function(style) {\r\n var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n var r, g, b, a;\r\n\r\n if (style.isCanvasGradient === true) {\r\n style = style.getColor();\r\n }\r\n\r\n if (!style) {\r\n return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n }\r\n\r\n if (rxTransparent.test(style)) {\r\n r = 0;\r\n g = 0;\r\n b = 0;\r\n a = 0;\r\n } else {\r\n var matches = rxRgb.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = 1;\r\n } else {\r\n matches = rxRgba.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = parseFloat(matches[4]);\r\n } else {\r\n a = 1;\r\n\r\n if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(style);\r\n if (rgbColor.ok) {\r\n style = rgbColor.toHex();\r\n } else {\r\n style = \"#000000\";\r\n }\r\n }\r\n\r\n if (style.length === 4) {\r\n r = style.substring(1, 2);\r\n r += r;\r\n g = style.substring(2, 3);\r\n g += g;\r\n b = style.substring(3, 4);\r\n b += b;\r\n } else {\r\n r = style.substring(1, 3);\r\n g = style.substring(3, 5);\r\n b = style.substring(5, 7);\r\n }\r\n r = parseInt(r, 16);\r\n g = parseInt(g, 16);\r\n b = parseInt(b, 16);\r\n }\r\n }\r\n }\r\n return { r: r, g: g, b: b, a: a, style: style };\r\n };\r\n\r\n /**\r\n * @name isFillTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isFillTransparent = function() {\r\n return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n };\r\n\r\n /**\r\n * @name isStrokeTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isStrokeTransparent = function() {\r\n return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n };\r\n\r\n /**\r\n * Draws \"filled\" text on the canvas\r\n *\r\n * @name fillText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n }\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n // We only use X axis as scale hint\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Draws text on the canvas (no fill)\r\n *\r\n * @name strokeText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n renderingMode: \"stroke\",\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Returns an object that contains the width of the specified text\r\n *\r\n * @name measureText\r\n * @function\r\n * @param text {String} The text to be measured\r\n * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n * @returns {Number}\r\n */\r\n Context2D.prototype.measureText = function(text) {\r\n if (typeof text !== \"string\") {\r\n console.error(\r\n \"jsPDF.context2d.measureText: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n );\r\n }\r\n var pdf = this.pdf;\r\n var k = this.pdf.internal.scaleFactor;\r\n\r\n var fontSize = pdf.internal.getFontSize();\r\n var txtWidth =\r\n (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n var TextMetrics = function(options) {\r\n options = options || {};\r\n var _width = options.width || 0;\r\n Object.defineProperty(this, \"width\", {\r\n get: function() {\r\n return _width;\r\n }\r\n });\r\n return this;\r\n };\r\n return new TextMetrics({ width: txtWidth });\r\n };\r\n\r\n //Transformations\r\n\r\n /**\r\n * Scales the current drawing bigger or smaller\r\n *\r\n * @name scale\r\n * @function\r\n * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @description The scale() method scales the current drawing, bigger or smaller.\r\n */\r\n Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n }\r\n var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Rotates the current drawing\r\n *\r\n * @name rotate\r\n * @function\r\n * @param angle {Number} The rotation angle, in radians.\r\n * @description To calculate from degrees to radians: degrees*Math.PI/180.
    \r\n * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n */\r\n Context2D.prototype.rotate = function(angle) {\r\n if (isNaN(angle)) {\r\n console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n }\r\n var matrix = new Matrix(\r\n Math.cos(angle),\r\n Math.sin(angle),\r\n -Math.sin(angle),\r\n Math.cos(angle),\r\n 0.0,\r\n 0.0\r\n );\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Remaps the (0,0) position on the canvas\r\n *\r\n * @name translate\r\n * @function\r\n * @param x {Number} The value to add to horizontal (x) coordinates\r\n * @param y {Number} The value to add to vertical (y) coordinates\r\n * @description The translate() method remaps the (0,0) position on the canvas.\r\n */\r\n Context2D.prototype.translate = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n }\r\n var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Replaces the current transformation matrix for the drawing\r\n *\r\n * @name transform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n }\r\n var matrix = new Matrix(a, b, c, d, e, f);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Resets the current transform to the identity matrix. Then runs transform()\r\n *\r\n * @name setTransform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n a = isNaN(a) ? 1 : a;\r\n b = isNaN(b) ? 0 : b;\r\n c = isNaN(c) ? 0 : c;\r\n d = isNaN(d) ? 1 : d;\r\n e = isNaN(e) ? 0 : e;\r\n f = isNaN(f) ? 0 : f;\r\n this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n };\r\n\r\n /**\r\n * Should only be used if pageWrapYEnabled is true\r\n *\r\n * @name setPageByYPosition\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns One-based Page Number\r\n */\r\n var setPageByYPosition = function(y) {\r\n if (this.pageWrapYEnabled) {\r\n this.lastBreak = 0;\r\n var manualBreaks = 0;\r\n var autoBreaks = 0;\r\n for (var i = 0; i < this.pageBreaks.length; i++) {\r\n if (y >= this.pageBreaks[i]) {\r\n manualBreaks++;\r\n if (this.lastBreak === 0) {\r\n autoBreaks++;\r\n }\r\n var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n this.lastBreak = this.pageBreaks[i];\r\n var pagesSinceLastBreak = Math.floor(\r\n spaceBetweenLastBreak / this.pageWrapY\r\n );\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n }\r\n if (this.lastBreak === 0) {\r\n var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n return autoBreaks + manualBreaks;\r\n } else {\r\n return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n }\r\n };\r\n\r\n var hasMargins = function() {\r\n return (\r\n this.margin[0] > 0 ||\r\n this.margin[1] > 0 ||\r\n this.margin[2] > 0 ||\r\n this.margin[3] > 0\r\n );\r\n };\r\n\r\n /**\r\n * Draws an image, canvas, or video onto the canvas\r\n *\r\n * @function\r\n * @param img {} Specifies the image, canvas, or video element to use\r\n * @param sx {Number} Optional. The x coordinate where to start clipping\r\n * @param sy {Number} Optional. The y coordinate where to start clipping\r\n * @param swidth {Number} Optional. The width of the clipped image\r\n * @param sheight {Number} Optional. The height of the clipped image\r\n * @param x {Number} The x coordinate where to place the image on the canvas\r\n * @param y {Number} The y coordinate where to place the image on the canvas\r\n * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n */\r\n Context2D.prototype.drawImage = function(\r\n img,\r\n sx,\r\n sy,\r\n swidth,\r\n sheight,\r\n x,\r\n y,\r\n width,\r\n height\r\n ) {\r\n var imageProperties = this.pdf.getImageProperties(img);\r\n var factorX = 1;\r\n var factorY = 1;\r\n var isClip;\r\n\r\n var clipFactorX = 1;\r\n var clipFactorY = 1;\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n isClip = true;\r\n clipFactorX = width / swidth;\r\n clipFactorY = height / sheight;\r\n factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n }\r\n\r\n //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n if (typeof x === \"undefined\") {\r\n x = sx;\r\n y = sy;\r\n sx = 0;\r\n sy = 0;\r\n }\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n width = swidth;\r\n height = sheight;\r\n }\r\n if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n width = imageProperties.width;\r\n height = imageProperties.height;\r\n }\r\n\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n var xRect = matrix.applyToRectangle(\r\n new Rectangle(\r\n x - sx * clipFactorX,\r\n y - sy * clipFactorY,\r\n swidth * factorX,\r\n sheight * factorY\r\n )\r\n );\r\n var pageArray = getPagesByPath.call(this, xRect);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n tmpRect = pathPositionRedo(\r\n [tmpRect],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n tmpRect.x,\r\n tmpRect.y,\r\n tmpRect.w,\r\n tmpRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n xRect.x,\r\n xRect.y,\r\n xRect.w,\r\n xRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n }\r\n };\r\n\r\n var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n var result = [];\r\n pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n pageWrapY =\r\n pageWrapY ||\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n switch (path.type) {\r\n default:\r\n case \"mt\":\r\n case \"lt\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n break;\r\n case \"arc\":\r\n result.push(\r\n Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n );\r\n break;\r\n case \"qct\":\r\n var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"bct\":\r\n var rectOfBezierCurve = getBezierCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x2,\r\n path.y2,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"rect\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n }\r\n\r\n for (var i = 0; i < result.length; i += 1) {\r\n while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n addPage.call(this);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var addPage = function() {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var font = this.font;\r\n var lineCap = this.lineCap;\r\n var lineWidth = this.lineWidth;\r\n var lineJoin = this.lineJoin;\r\n this.pdf.addPage();\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.font = font;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n };\r\n\r\n var pathPositionRedo = function(paths, x, y) {\r\n for (var i = 0; i < paths.length; i++) {\r\n switch (paths[i].type) {\r\n case \"bct\":\r\n paths[i].x2 += x;\r\n paths[i].y2 += y;\r\n case \"qct\":\r\n paths[i].x1 += x;\r\n paths[i].y1 += y;\r\n case \"mt\":\r\n case \"lt\":\r\n case \"arc\":\r\n default:\r\n paths[i].x += x;\r\n paths[i].y += y;\r\n }\r\n }\r\n return paths;\r\n };\r\n\r\n var sortPages = function(pages) {\r\n return pages.sort(function(a, b) {\r\n return a - b;\r\n });\r\n };\r\n\r\n var pathPreProcess = function(rule, isClip) {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var lineCap = this.lineCap;\r\n var oldLineWidth = this.lineWidth;\r\n var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n var lineJoin = this.lineJoin;\r\n\r\n var origPath = JSON.parse(JSON.stringify(this.path));\r\n var xPath = JSON.parse(JSON.stringify(this.path));\r\n var clipPath;\r\n var tmpPath;\r\n var pages = [];\r\n\r\n for (var i = 0; i < xPath.length; i++) {\r\n if (typeof xPath[i].x !== \"undefined\") {\r\n var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n for (var ii = 0; ii < page.length; ii += 1) {\r\n if (pages.indexOf(page[ii]) === -1) {\r\n pages.push(page[ii]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var j = 0; j < pages.length; j++) {\r\n while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n addPage.call(this);\r\n }\r\n }\r\n sortPages(pages);\r\n\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var k = min; k < max + 1; k++) {\r\n this.pdf.setPage(k);\r\n\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, rule, true);\r\n this.path = tmpPaths;\r\n }\r\n tmpPath = JSON.parse(JSON.stringify(origPath));\r\n this.path = pathPositionRedo(\r\n tmpPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n if (isClip === false || k === 0) {\r\n const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n drawPaths.call(this, rule, isClip);\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n this.lineWidth = oldLineWidth;\r\n }\r\n } else {\r\n this.lineWidth = lineWidth;\r\n drawPaths.call(this, rule, isClip);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n this.path = origPath;\r\n };\r\n\r\n /**\r\n * Processes the paths\r\n *\r\n * @function\r\n * @param rule {String}\r\n * @param isClip {Boolean}\r\n * @private\r\n * @ignore\r\n */\r\n var drawPaths = function(rule, isClip) {\r\n if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var moves = [];\r\n\r\n //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n var delta;\r\n var xPath = this.path;\r\n for (var i = 0; i < xPath.length; i++) {\r\n var pt = xPath[i];\r\n\r\n switch (pt.type) {\r\n case \"begin\":\r\n moves.push({\r\n begin: true\r\n });\r\n break;\r\n\r\n case \"close\":\r\n moves.push({\r\n close: true\r\n });\r\n break;\r\n\r\n case \"mt\":\r\n moves.push({\r\n start: pt,\r\n deltas: [],\r\n abs: []\r\n });\r\n break;\r\n\r\n case \"lt\":\r\n var iii = moves.length;\r\n if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n if (iii > 0) {\r\n for (iii; iii >= 0; iii--) {\r\n if (\r\n moves[iii - 1].close !== true &&\r\n moves[iii - 1].begin !== true\r\n ) {\r\n moves[iii - 1].deltas.push(delta);\r\n moves[iii - 1].abs.push(pt);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"bct\":\r\n delta = [\r\n pt.x1 - xPath[i - 1].x,\r\n pt.y1 - xPath[i - 1].y,\r\n pt.x2 - xPath[i - 1].x,\r\n pt.y2 - xPath[i - 1].y,\r\n pt.x - xPath[i - 1].x,\r\n pt.y - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"qct\":\r\n var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n var x3 = pt.x;\r\n var y3 = pt.y;\r\n delta = [\r\n x1 - xPath[i - 1].x,\r\n y1 - xPath[i - 1].y,\r\n x2 - xPath[i - 1].x,\r\n y2 - xPath[i - 1].y,\r\n x3 - xPath[i - 1].x,\r\n y3 - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"arc\":\r\n moves.push({\r\n deltas: [],\r\n abs: [],\r\n arc: true\r\n });\r\n\r\n if (Array.isArray(moves[moves.length - 1].abs)) {\r\n moves[moves.length - 1].abs.push(pt);\r\n }\r\n break;\r\n }\r\n }\r\n var style;\r\n if (!isClip) {\r\n if (rule === \"stroke\") {\r\n style = \"stroke\";\r\n } else {\r\n style = \"fill\";\r\n }\r\n } else {\r\n style = null;\r\n }\r\n\r\n var began = false;\r\n for (var k = 0; k < moves.length; k++) {\r\n if (moves[k].arc) {\r\n var arcs = moves[k].abs;\r\n\r\n for (var ii = 0; ii < arcs.length; ii++) {\r\n var arc = arcs[ii];\r\n\r\n if (arc.type === \"arc\") {\r\n drawArc.call(\r\n this,\r\n arc.x,\r\n arc.y,\r\n arc.radius,\r\n arc.startAngle,\r\n arc.endAngle,\r\n arc.counterclockwise,\r\n undefined,\r\n isClip,\r\n !began\r\n );\r\n } else {\r\n drawLine.call(this, arc.x, arc.y);\r\n }\r\n began = true;\r\n }\r\n } else if (moves[k].close === true) {\r\n this.pdf.internal.out(\"h\");\r\n began = false;\r\n } else if (moves[k].begin !== true) {\r\n var x = moves[k].start.x;\r\n var y = moves[k].start.y;\r\n drawLines.call(this, moves[k].deltas, x, y);\r\n began = true;\r\n }\r\n }\r\n\r\n if (style) {\r\n putStyle.call(this, style);\r\n }\r\n if (isClip) {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var getBaseline = function(y) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n switch (this.ctx.textBaseline) {\r\n case \"bottom\":\r\n return y - descent;\r\n case \"top\":\r\n return y + height - descent;\r\n case \"hanging\":\r\n return y + height - 2 * descent;\r\n case \"middle\":\r\n return y + height / 2 - descent;\r\n case \"ideographic\":\r\n // TODO not implemented\r\n return y;\r\n case \"alphabetic\":\r\n default:\r\n return y;\r\n }\r\n };\r\n\r\n var getTextBottom = function(yBaseLine) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n return yBaseLine + descent;\r\n };\r\n\r\n Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n var canvasGradient = function canvasGradient() {};\r\n\r\n canvasGradient.colorStops = [];\r\n canvasGradient.addColorStop = function(offset, color) {\r\n this.colorStops.push([offset, color]);\r\n };\r\n\r\n canvasGradient.getColor = function() {\r\n if (this.colorStops.length === 0) {\r\n return \"#000000\";\r\n }\r\n\r\n return this.colorStops[0][1];\r\n };\r\n\r\n canvasGradient.isCanvasGradient = true;\r\n return canvasGradient;\r\n };\r\n Context2D.prototype.createPattern = function createPattern() {\r\n return this.createLinearGradient();\r\n };\r\n Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n return this.createLinearGradient();\r\n };\r\n\r\n /**\r\n *\r\n * @param x Edge point X\r\n * @param y Edge point Y\r\n * @param r Radius\r\n * @param a1 start angle\r\n * @param a2 end angle\r\n * @param counterclockwise\r\n * @param style\r\n * @param isClip\r\n */\r\n var drawArc = function(\r\n x,\r\n y,\r\n r,\r\n a1,\r\n a2,\r\n counterclockwise,\r\n style,\r\n isClip,\r\n includeMove\r\n ) {\r\n // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n for (var i = 0; i < curves.length; i++) {\r\n var curve = curves[i];\r\n if (i === 0) {\r\n if (includeMove) {\r\n doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n } else {\r\n drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n }\r\n }\r\n drawCurve.call(\r\n this,\r\n x,\r\n y,\r\n curve.x2,\r\n curve.y2,\r\n curve.x3,\r\n curve.y3,\r\n curve.x4,\r\n curve.y4\r\n );\r\n }\r\n\r\n if (!isClip) {\r\n putStyle.call(this, style);\r\n } else {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n switch (style) {\r\n case \"stroke\":\r\n this.pdf.internal.out(\"S\");\r\n break;\r\n case \"fill\":\r\n this.pdf.internal.out(\"f\");\r\n break;\r\n }\r\n };\r\n\r\n var doClip = function() {\r\n this.pdf.clip();\r\n this.pdf.discardPath();\r\n };\r\n\r\n var doMove = function(x, y) {\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x) +\r\n \" \" +\r\n getVerticalCoordinateString(y) +\r\n \" m\"\r\n );\r\n };\r\n\r\n var putText = function(options) {\r\n var textAlign;\r\n switch (options.align) {\r\n case \"right\":\r\n case \"end\":\r\n textAlign = \"right\";\r\n break;\r\n case \"center\":\r\n textAlign = \"center\";\r\n break;\r\n case \"left\":\r\n case \"start\":\r\n default:\r\n textAlign = \"left\";\r\n break;\r\n }\r\n\r\n var textDimensions = this.pdf.getTextDimensions(options.text);\r\n var yBaseLine = getBaseline.call(this, options.y);\r\n var yBottom = getTextBottom.call(this, yBaseLine);\r\n var yTop = yBottom - textDimensions.h;\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n var baselineRect = this.ctx.transform.applyToRectangle(\r\n new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n );\r\n var textBounds = matrix.applyToRectangle(\r\n new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n );\r\n var pageArray = getPagesByPath.call(this, textBounds);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath, oldSize, oldLineWidth;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusBottomMargin =\r\n this.pdf.internal.pageSize.height - this.margin[2];\r\n var pageHeightMinusMargins =\r\n pageHeightMinusBottomMargin - this.margin[0];\r\n var pageWidthMinusRightMargin =\r\n this.pdf.internal.pageSize.width - this.margin[1];\r\n var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -1 * previousPageHeightSum + topMargin\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var textBoundsOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(textBounds))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n\r\n var doSlice = this.autoPaging !== \"text\";\r\n\r\n if (\r\n doSlice ||\r\n textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n ) {\r\n if (\r\n doSlice ||\r\n (textBoundsOnPage.y >= topMargin &&\r\n textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n ) {\r\n var croppedText = doSlice\r\n ? options.text\r\n : this.pdf.splitTextToSize(\r\n options.text,\r\n options.maxWidth ||\r\n pageWidthMinusRightMargin - textBoundsOnPage.x\r\n )[0];\r\n var baseLineRectOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(baselineRect))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum +\r\n topMargin +\r\n this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping =\r\n doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n\r\n this.pdf.text(\r\n croppedText,\r\n baseLineRectOnPage.x,\r\n baseLineRectOnPage.y,\r\n {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode\r\n }\r\n );\r\n\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n // This text is the last element of the page, but it got cut off due to the margin\r\n // so we render it in the next page\r\n\r\n if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n // As a result, all other elements have their y offset increased\r\n this.ctx.prevPageLastElemOffset +=\r\n pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n }\r\n }\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n } else {\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode,\r\n maxWidth: options.maxWidth\r\n });\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n };\r\n\r\n var drawLine = function(x, y, prevX, prevY) {\r\n prevX = prevX || 0;\r\n prevY = prevY || 0;\r\n\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x + prevX) +\r\n \" \" +\r\n getVerticalCoordinateString(y + prevY) +\r\n \" l\"\r\n );\r\n };\r\n\r\n var drawLines = function(lines, x, y) {\r\n return this.pdf.lines(lines, x, y, null, null);\r\n };\r\n\r\n var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n this.pdf.internal.out(\r\n [\r\n f2(getHorizontalCoordinate(x1 + x)),\r\n f2(getVerticalCoordinate(y1 + y)),\r\n f2(getHorizontalCoordinate(x2 + x)),\r\n f2(getVerticalCoordinate(y2 + y)),\r\n f2(getHorizontalCoordinate(x3 + x)),\r\n f2(getVerticalCoordinate(y3 + y)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n };\r\n\r\n /**\r\n * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n *\r\n * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n * @function createArc\r\n */\r\n var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n var twoPi = Math.PI * 2;\r\n var halfPi = Math.PI / 2.0;\r\n\r\n while (startAngle > endAngle) {\r\n startAngle = startAngle - twoPi;\r\n }\r\n var totalAngle = Math.abs(endAngle - startAngle);\r\n if (totalAngle < twoPi) {\r\n if (anticlockwise) {\r\n totalAngle = twoPi - totalAngle;\r\n }\r\n }\r\n\r\n // Compute the sequence of arc curves, up to PI/2 at a time.\r\n var curves = [];\r\n\r\n // clockwise or counterclockwise\r\n var sgn = anticlockwise ? -1 : +1;\r\n\r\n var a1 = startAngle;\r\n for (; totalAngle > EPSILON; ) {\r\n var remain = sgn * Math.min(totalAngle, halfPi);\r\n var a2 = a1 + remain;\r\n curves.push(createSmallArc.call(this, radius, a1, a2));\r\n totalAngle -= Math.abs(a2 - a1);\r\n a1 = a2;\r\n }\r\n\r\n return curves;\r\n };\r\n\r\n /**\r\n * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n *\r\n * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n *\r\n * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n */\r\n var createSmallArc = function(r, a1, a2) {\r\n var a = (a2 - a1) / 2.0;\r\n\r\n var x4 = r * Math.cos(a);\r\n var y4 = r * Math.sin(a);\r\n var x1 = x4;\r\n var y1 = -y4;\r\n\r\n var q1 = x1 * x1 + y1 * y1;\r\n var q2 = q1 + x1 * x4 + y1 * y4;\r\n var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n var x2 = x1 - k2 * y1;\r\n var y2 = y1 + k2 * x1;\r\n var x3 = x2;\r\n var y3 = -y2;\r\n\r\n var ar = a + a1;\r\n var cos_ar = Math.cos(ar);\r\n var sin_ar = Math.sin(ar);\r\n\r\n return {\r\n x1: r * Math.cos(a1),\r\n y1: r * Math.sin(a1),\r\n x2: x2 * cos_ar - y2 * sin_ar,\r\n y2: x2 * sin_ar + y2 * cos_ar,\r\n x3: x3 * cos_ar - y3 * sin_ar,\r\n y3: x3 * sin_ar + y3 * cos_ar,\r\n x4: r * Math.cos(a2),\r\n y4: r * Math.sin(a2)\r\n };\r\n };\r\n\r\n var rad2deg = function(value) {\r\n return (value * 180) / Math.PI;\r\n };\r\n\r\n var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n var midX1 = sx + (cpx - sx) * 0.5;\r\n var midY1 = sy + (cpy - sy) * 0.5;\r\n var midX2 = ex + (cpx - ex) * 0.5;\r\n var midY2 = ey + (cpy - ey) * 0.5;\r\n var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n return new Rectangle(\r\n resultX1,\r\n resultY1,\r\n resultX2 - resultX1,\r\n resultY2 - resultY1\r\n );\r\n };\r\n\r\n //De Casteljau algorithm\r\n var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n var tobx = bx - ax;\r\n var toby = by - ay;\r\n var tocx = cx - bx;\r\n var tocy = cy - by;\r\n var todx = dx - cx;\r\n var tody = dy - cy;\r\n var precision = 40;\r\n var d,\r\n i,\r\n px,\r\n py,\r\n qx,\r\n qy,\r\n rx,\r\n ry,\r\n tx,\r\n ty,\r\n sx,\r\n sy,\r\n x,\r\n y,\r\n minx,\r\n miny,\r\n maxx,\r\n maxy,\r\n toqx,\r\n toqy,\r\n torx,\r\n tory,\r\n totx,\r\n toty;\r\n for (i = 0; i < precision + 1; i++) {\r\n d = i / precision;\r\n px = ax + d * tobx;\r\n py = ay + d * toby;\r\n qx = bx + d * tocx;\r\n qy = by + d * tocy;\r\n rx = cx + d * todx;\r\n ry = cy + d * tody;\r\n toqx = qx - px;\r\n toqy = qy - py;\r\n torx = rx - qx;\r\n tory = ry - qy;\r\n\r\n sx = px + d * toqx;\r\n sy = py + d * toqy;\r\n tx = qx + d * torx;\r\n ty = qy + d * tory;\r\n totx = tx - sx;\r\n toty = ty - sy;\r\n\r\n x = sx + d * totx;\r\n y = sy + d * toty;\r\n if (i == 0) {\r\n minx = x;\r\n miny = y;\r\n maxx = x;\r\n maxy = y;\r\n } else {\r\n minx = Math.min(minx, x);\r\n miny = Math.min(miny, y);\r\n maxx = Math.max(maxx, x);\r\n maxy = Math.max(maxy, y);\r\n }\r\n }\r\n return new Rectangle(\r\n Math.round(minx),\r\n Math.round(miny),\r\n Math.round(maxx - minx),\r\n Math.round(maxy - miny)\r\n );\r\n };\r\n\r\n var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n return JSON.stringify({\r\n lineDash: lineDash,\r\n lineDashOffset: lineDashOffset\r\n });\r\n };\r\n\r\n var setLineDash = function() {\r\n // Avoid unnecessary line dash declarations.\r\n if (\r\n !this.prevLineDash &&\r\n !this.ctx.lineDash.length &&\r\n !this.ctx.lineDashOffset\r\n ) {\r\n return;\r\n }\r\n\r\n // Avoid unnecessary line dash declarations.\r\n const nextLineDash = getPrevLineDashValue(\r\n this.ctx.lineDash,\r\n this.ctx.lineDashOffset\r\n );\r\n if (this.prevLineDash !== nextLineDash) {\r\n this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n this.prevLineDash = nextLineDash;\r\n }\r\n };\r\n})(jsPDF.API);\r\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var ASCII85Encode = function(a) {\n var b, c, d, e, f, g, h, i, j, k;\n // eslint-disable-next-line no-control-regex\n for (\n !/[^\\x00-\\xFF]/.test(a),\n b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n a += b,\n c = [],\n d = 0,\n e = a.length;\n e > d;\n d += 4\n )\n (f =\n (a.charCodeAt(d) << 24) +\n (a.charCodeAt(d + 1) << 16) +\n (a.charCodeAt(d + 2) << 8) +\n a.charCodeAt(d + 3)),\n 0 !== f\n ? ((k = f % 85),\n (f = (f - k) / 85),\n (j = f % 85),\n (f = (f - j) / 85),\n (i = f % 85),\n (f = (f - i) / 85),\n (h = f % 85),\n (f = (f - h) / 85),\n (g = f % 85),\n c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n : c.push(122);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(c, b.length),\n String.fromCharCode.apply(String, c) + \"~>\"\n );\n };\n\n var ASCII85Decode = function(a) {\n var c,\n d,\n e,\n f,\n g,\n h = String,\n l = \"length\",\n w = 255,\n x = \"charCodeAt\",\n y = \"slice\",\n z = \"replace\";\n for (\n \"~>\" === a[y](-2),\n a = a[y](0, -2)\n [z](/\\s/g, \"\")\n [z](\"z\", \"!!!!!\"),\n c = \"uuuuu\"[y](a[l] % 5 || 5),\n a += c,\n e = [],\n f = 0,\n g = a[l];\n g > f;\n f += 5\n )\n (d =\n 52200625 * (a[x](f) - 33) +\n 614125 * (a[x](f + 1) - 33) +\n 7225 * (a[x](f + 2) - 33) +\n 85 * (a[x](f + 3) - 33) +\n (a[x](f + 4) - 33)),\n e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(e, c[l]),\n h.fromCharCode.apply(h, e)\n );\n };\n\n var ASCIIHexEncode = function(value) {\n return (\n value\n .split(\"\")\n .map(function(value) {\n return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n })\n .join(\"\") + \">\"\n );\n };\n\n var ASCIIHexDecode = function(value) {\n var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n value = value.replace(/\\s/g, \"\");\n if (value.indexOf(\">\") !== -1) {\n value = value.substr(0, value.indexOf(\">\"));\n }\n if (value.length % 2) {\n value += \"0\";\n }\n if (regexCheckIfHex.test(value) === false) {\n return \"\";\n }\n var result = \"\";\n for (var i = 0; i < value.length; i += 2) {\n result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n }\n return result;\n };\n /*\n var FlatePredictors = {\n None: 1,\n TIFF: 2,\n PNG_None: 10,\n PNG_Sub: 11,\n PNG_Up: 12,\n PNG_Average: 13,\n PNG_Paeth: 14,\n PNG_Optimum: 15\n };\n */\n\n var FlateEncode = function(data) {\n var arr = new Uint8Array(data.length);\n var i = data.length;\n while (i--) {\n arr[i] = data.charCodeAt(i);\n }\n arr = zlibSync(arr);\n data = arr.reduce(function(data, byte) {\n return data + String.fromCharCode(byte);\n }, \"\");\n return data;\n };\n\n jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n \"use strict\";\n var i = 0;\n var data = origData || \"\";\n var reverseChain = [];\n filterChain = filterChain || [];\n\n if (typeof filterChain === \"string\") {\n filterChain = [filterChain];\n }\n\n for (i = 0; i < filterChain.length; i += 1) {\n switch (filterChain[i]) {\n case \"ASCII85Decode\":\n case \"/ASCII85Decode\":\n data = ASCII85Decode(data);\n reverseChain.push(\"/ASCII85Encode\");\n break;\n case \"ASCII85Encode\":\n case \"/ASCII85Encode\":\n data = ASCII85Encode(data);\n reverseChain.push(\"/ASCII85Decode\");\n break;\n case \"ASCIIHexDecode\":\n case \"/ASCIIHexDecode\":\n data = ASCIIHexDecode(data);\n reverseChain.push(\"/ASCIIHexEncode\");\n break;\n case \"ASCIIHexEncode\":\n case \"/ASCIIHexEncode\":\n data = ASCIIHexEncode(data);\n reverseChain.push(\"/ASCIIHexDecode\");\n break;\n case \"FlateEncode\":\n case \"/FlateEncode\":\n data = FlateEncode(data);\n reverseChain.push(\"/FlateDecode\");\n break;\n default:\n throw new Error(\n 'The filter: \"' + filterChain[i] + '\" is not implemented'\n );\n }\n }\n\n return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name loadFile\n * @function\n * @param {string} url\n * @param {boolean} sync\n * @param {function} callback\n * @returns {string|undefined} result\n */\n jsPDFAPI.loadFile = function(url, sync, callback) {\n\n // eslint-disable-next-line no-unreachable\n return nodeReadFile(url, sync, callback);\n };\n\n /**\n * @name loadImageFile\n * @function\n * @param {string} path\n * @param {boolean} sync\n * @param {function} callback\n */\n jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n function browserRequest(url, sync, callback) {\n sync = sync === false ? false : true;\n callback = typeof callback === \"function\" ? callback : function() {};\n var result = undefined;\n\n var xhr = function(url, sync, callback) {\n var request = new XMLHttpRequest();\n var i = 0;\n\n var sanitizeUnicode = function(data) {\n var dataLength = data.length;\n var charArray = [];\n var StringFromCharCode = String.fromCharCode;\n\n //Transform Unicode to ASCII\n for (i = 0; i < dataLength; i += 1) {\n charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n }\n return charArray.join(\"\");\n };\n\n request.open(\"GET\", url, !sync);\n // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n if (sync === false) {\n request.onload = function() {\n if (request.status === 200) {\n callback(sanitizeUnicode(this.responseText));\n } else {\n callback(undefined);\n }\n };\n }\n request.send(null);\n\n if (sync && request.status === 200) {\n return sanitizeUnicode(request.responseText);\n }\n };\n try {\n result = xhr(url, sync, callback);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return result;\n }\n\n function nodeReadFile(url, sync, callback) {\n sync = sync === false ? false : true;\n var result = undefined;\n\n var fs = require(\"fs\");\n var path = require(\"path\");\n\n url = path.resolve(url);\n if (sync) {\n try {\n result = fs.readFileSync(url, { encoding: \"latin1\" });\n } catch (e) {\n return undefined;\n }\n } else {\n fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n if (!callback) {\n return;\n }\n if (err) {\n callback(undefined);\n }\n callback(data);\n });\n }\n\n return result;\n }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadHtml2Canvas() {\n return (function() {\n if (globalObject[\"html2canvas\"]) {\n return Promise.resolve(globalObject[\"html2canvas\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"html2canvas\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"html2canvas\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load html2canvas\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n })\n .then(function(html2canvas) {\n return html2canvas.default ? html2canvas.default : html2canvas;\n });\n }\n\n function loadDomPurify() {\n return (function() {\n if (globalObject[\"DOMPurify\"]) {\n return Promise.resolve(globalObject[\"DOMPurify\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"dompurify\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"dompurify\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load dompurify\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n })\n .then(function(dompurify) {\n return dompurify.default ? dompurify.default : dompurify;\n });\n }\n\n /**\n * Determine the type of a variable/object.\n *\n * @private\n * @ignore\n */\n var objType = function(obj) {\n var type = typeof obj;\n if (type === \"undefined\") return \"undefined\";\n else if (type === \"string\" || obj instanceof String) return \"string\";\n else if (type === \"number\" || obj instanceof Number) return \"number\";\n else if (type === \"function\" || obj instanceof Function) return \"function\";\n else if (!!obj && obj.constructor === Array) return \"array\";\n else if (obj && obj.nodeType === 1) return \"element\";\n else if (type === \"object\") return \"object\";\n else return \"unknown\";\n };\n\n /**\n * Create an HTML element with optional className, innerHTML, and style.\n *\n * @private\n * @ignore\n */\n var createElement = function(tagName, opt) {\n var el = document.createElement(tagName);\n if (opt.className) el.className = opt.className;\n if (opt.innerHTML && opt.dompurify) {\n el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n }\n for (var key in opt.style) {\n el.style[key] = opt.style[key];\n }\n return el;\n };\n\n /**\n * Deep-clone a node and preserve contents/properties.\n *\n * @private\n * @ignore\n */\n var cloneNode = function(node, javascriptEnabled) {\n // Recursively clone the node.\n var clone =\n node.nodeType === 3\n ? document.createTextNode(node.nodeValue)\n : node.cloneNode(false);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (\n javascriptEnabled === true ||\n child.nodeType !== 1 ||\n child.nodeName !== \"SCRIPT\"\n ) {\n clone.appendChild(cloneNode(child, javascriptEnabled));\n }\n }\n\n if (node.nodeType === 1) {\n // Preserve contents/properties of special nodes.\n if (node.nodeName === \"CANVAS\") {\n clone.width = node.width;\n clone.height = node.height;\n clone.getContext(\"2d\").drawImage(node, 0, 0);\n } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n clone.value = node.value;\n }\n\n // Preserve the node's scroll position when it loads.\n clone.addEventListener(\n \"load\",\n function() {\n clone.scrollTop = node.scrollTop;\n clone.scrollLeft = node.scrollLeft;\n },\n true\n );\n }\n\n // Return the cloned node.\n return clone;\n };\n\n /* ----- CONSTRUCTOR ----- */\n\n var Worker = function Worker(opt) {\n // Create the root parent for the proto chain, and the starting Worker.\n var root = Object.assign(\n Worker.convert(Promise.resolve()),\n JSON.parse(JSON.stringify(Worker.template))\n );\n var self = Worker.convert(Promise.resolve(), root);\n\n // Set progress, optional settings, and return.\n self = self.setProgress(1, Worker, 1, [Worker]);\n self = self.set(opt);\n return self;\n };\n\n // Boilerplate for subclassing Promise.\n Worker.prototype = Object.create(Promise.prototype);\n Worker.prototype.constructor = Worker;\n\n // Converts/casts promises into Workers.\n Worker.convert = function convert(promise, inherit) {\n // Uses prototypal inheritance to receive changes made to ancestors' properties.\n promise.__proto__ = inherit || Worker.prototype;\n return promise;\n };\n\n Worker.template = {\n prop: {\n src: null,\n container: null,\n overlay: null,\n canvas: null,\n img: null,\n pdf: null,\n pageSize: null,\n callback: function() {}\n },\n progress: {\n val: 0,\n state: null,\n n: 0,\n stack: []\n },\n opt: {\n filename: \"file.pdf\",\n margin: [0, 0, 0, 0],\n enableLinks: true,\n x: 0,\n y: 0,\n html2canvas: {},\n jsPDF: {},\n backgroundColor: \"transparent\"\n }\n };\n\n /* ----- FROM / TO ----- */\n\n Worker.prototype.from = function from(src, type) {\n function getType(src) {\n switch (objType(src)) {\n case \"string\":\n return \"string\";\n case \"element\":\n return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n default:\n return \"unknown\";\n }\n }\n\n return this.then(function from_main() {\n type = type || getType(src);\n switch (type) {\n case \"string\":\n return this.then(loadDomPurify).then(function(dompurify) {\n return this.set({\n src: createElement(\"div\", {\n innerHTML: src,\n dompurify: dompurify\n })\n });\n });\n case \"element\":\n return this.set({ src: src });\n case \"canvas\":\n return this.set({ canvas: src });\n case \"img\":\n return this.set({ img: src });\n default:\n return this.error(\"Unknown source type.\");\n }\n });\n };\n\n Worker.prototype.to = function to(target) {\n // Route the 'to' request to the appropriate method.\n switch (target) {\n case \"container\":\n return this.toContainer();\n case \"canvas\":\n return this.toCanvas();\n case \"img\":\n return this.toImg();\n case \"pdf\":\n return this.toPdf();\n default:\n return this.error(\"Invalid target.\");\n }\n };\n\n Worker.prototype.toContainer = function toContainer() {\n // Set up function prerequisites.\n var prereqs = [\n function checkSrc() {\n return (\n this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n );\n },\n function checkPageSize() {\n return this.prop.pageSize || this.setPageSize();\n }\n ];\n return this.thenList(prereqs).then(function toContainer_main() {\n // Define the CSS styles for the container and its overlay parent.\n var overlayCSS = {\n position: \"fixed\",\n overflow: \"hidden\",\n zIndex: 1000,\n left: \"-100000px\",\n right: 0,\n bottom: 0,\n top: 0\n };\n var containerCSS = {\n position: \"relative\",\n display: \"inline-block\",\n width:\n (typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.windowWidth\n : Math.max(\n this.prop.src.clientWidth,\n this.prop.src.scrollWidth,\n this.prop.src.offsetWidth\n )) + \"px\",\n left: 0,\n right: 0,\n top: 0,\n margin: \"auto\",\n backgroundColor: this.opt.backgroundColor\n }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n var source = cloneNode(\n this.prop.src,\n this.opt.html2canvas.javascriptEnabled\n );\n\n if (source.tagName === \"BODY\") {\n containerCSS.height =\n Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) + \"px\";\n }\n\n this.prop.overlay = createElement(\"div\", {\n className: \"html2pdf__overlay\",\n style: overlayCSS\n });\n this.prop.container = createElement(\"div\", {\n className: \"html2pdf__container\",\n style: containerCSS\n });\n this.prop.container.appendChild(source);\n this.prop.container.firstChild.appendChild(\n createElement(\"div\", {\n style: {\n clear: \"both\",\n border: \"0 none transparent\",\n margin: 0,\n padding: 0,\n height: 0\n }\n })\n );\n this.prop.container.style.float = \"none\";\n this.prop.overlay.appendChild(this.prop.container);\n document.body.appendChild(this.prop.overlay);\n this.prop.container.firstChild.style.position = \"relative\";\n this.prop.container.height =\n Math.max(\n this.prop.container.firstChild.clientHeight,\n this.prop.container.firstChild.scrollHeight,\n this.prop.container.firstChild.offsetHeight\n ) + \"px\";\n });\n };\n\n Worker.prototype.toCanvas = function toCanvas() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toCanvas_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var options = Object.assign({}, this.opt.html2canvas);\n delete options.onrendered;\n\n return html2canvas(this.prop.container, options);\n })\n .then(function toCanvas_post(canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toContext2d = function toContext2d() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toContext2d_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n\n var pdf = this.opt.jsPDF;\n var fontFaces = this.opt.fontFaces;\n\n var scale =\n typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.width / this.opt.windowWidth\n : 1;\n\n var options = Object.assign(\n {\n async: true,\n allowTaint: true,\n scale: scale,\n scrollX: this.opt.scrollX || 0,\n scrollY: this.opt.scrollY || 0,\n backgroundColor: \"#ffffff\",\n imageTimeout: 15000,\n logging: true,\n proxy: null,\n removeContainer: true,\n foreignObjectRendering: false,\n useCORS: false\n },\n this.opt.html2canvas\n );\n delete options.onrendered;\n\n pdf.context2d.autoPaging =\n typeof this.opt.autoPaging === \"undefined\"\n ? true\n : this.opt.autoPaging;\n pdf.context2d.posX = this.opt.x;\n pdf.context2d.posY = this.opt.y;\n pdf.context2d.margin = this.opt.margin;\n pdf.context2d.fontFaces = fontFaces;\n\n if (fontFaces) {\n for (var i = 0; i < fontFaces.length; ++i) {\n var font = fontFaces[i];\n var src = font.src.find(function(src) {\n return src.format === \"truetype\";\n });\n\n if (src) {\n pdf.addFont(src.url, font.ref.name, font.ref.style);\n }\n }\n }\n\n options.windowHeight = options.windowHeight || 0;\n options.windowHeight =\n options.windowHeight == 0\n ? Math.max(\n this.prop.container.clientHeight,\n this.prop.container.scrollHeight,\n this.prop.container.offsetHeight\n )\n : options.windowHeight;\n\n pdf.context2d.save(true);\n return html2canvas(this.prop.container, options);\n })\n .then(function toContext2d_post(canvas) {\n this.opt.jsPDF.context2d.restore(true);\n\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toImg = function toImg() {\n // Set up function prerequisites.\n var prereqs = [\n function checkCanvas() {\n return this.prop.canvas || this.toCanvas();\n }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toImg_main() {\n var imgData = this.prop.canvas.toDataURL(\n \"image/\" + this.opt.image.type,\n this.opt.image.quality\n );\n this.prop.img = document.createElement(\"img\");\n this.prop.img.src = imgData;\n });\n };\n\n Worker.prototype.toPdf = function toPdf() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContext2d() {\n return this.toContext2d();\n }\n //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toPdf_main() {\n // Create local copies of frequently used properties.\n this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n });\n };\n\n /* ----- OUTPUT / SAVE ----- */\n\n Worker.prototype.output = function output(type, options, src) {\n // Redirect requests to the correct function (outputPdf / outputImg).\n src = src || \"pdf\";\n if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n return this.outputImg(type, options);\n } else {\n return this.outputPdf(type, options);\n }\n };\n\n Worker.prototype.outputPdf = function outputPdf(type, options) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputPdf_main() {\n /* Currently implemented output types:\n * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n * save(options), arraybuffer, blob, bloburi/bloburl,\n * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n */\n return this.prop.pdf.output(type, options);\n });\n };\n\n Worker.prototype.outputImg = function outputImg(type) {\n // Set up function prerequisites.\n var prereqs = [\n function checkImg() {\n return this.prop.img || this.toImg();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputImg_main() {\n switch (type) {\n case undefined:\n case \"img\":\n return this.prop.img;\n case \"datauristring\":\n case \"dataurlstring\":\n return this.prop.img.src;\n case \"datauri\":\n case \"dataurl\":\n return (document.location.href = this.prop.img.src);\n default:\n throw 'Image output type \"' + type + '\" is not supported.';\n }\n });\n };\n\n Worker.prototype.save = function save(filename) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs)\n .set(filename ? { filename: filename } : null)\n .then(function save_main() {\n this.prop.pdf.save(this.opt.filename);\n });\n };\n\n Worker.prototype.doCallback = function doCallback() {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs).then(function doCallback_main() {\n this.prop.callback(this.prop.pdf);\n });\n };\n\n /* ----- SET / GET ----- */\n\n Worker.prototype.set = function set(opt) {\n // TODO: Implement ordered pairs?\n\n // Silently ignore invalid or empty input.\n if (objType(opt) !== \"object\") {\n return this;\n }\n\n // Build an array of setter functions to queue.\n var fns = Object.keys(opt || {}).map(function(key) {\n if (key in Worker.template.prop) {\n // Set pre-defined properties.\n return function set_prop() {\n this.prop[key] = opt[key];\n };\n } else {\n switch (key) {\n case \"margin\":\n return this.setMargin.bind(this, opt.margin);\n case \"jsPDF\":\n return function set_jsPDF() {\n this.opt.jsPDF = opt.jsPDF;\n return this.setPageSize();\n };\n case \"pageSize\":\n return this.setPageSize.bind(this, opt.pageSize);\n default:\n // Set any other properties in opt.\n return function set_opt() {\n this.opt[key] = opt[key];\n };\n }\n }\n }, this);\n\n // Set properties within the promise chain.\n return this.then(function set_main() {\n return this.thenList(fns);\n });\n };\n\n Worker.prototype.get = function get(key, cbk) {\n return this.then(function get_main() {\n // Fetch the requested property, either as a predefined prop or in opt.\n var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n return cbk ? cbk(val) : val;\n });\n };\n\n Worker.prototype.setMargin = function setMargin(margin) {\n return this.then(function setMargin_main() {\n // Parse the margin property.\n switch (objType(margin)) {\n case \"number\":\n margin = [margin, margin, margin, margin];\n // eslint-disable-next-line no-fallthrough\n case \"array\":\n if (margin.length === 2) {\n margin = [margin[0], margin[1], margin[0], margin[1]];\n }\n if (margin.length === 4) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return this.error(\"Invalid margin array.\");\n }\n\n // Set the margin property, then update pageSize.\n this.opt.margin = margin;\n }).then(this.setPageSize);\n };\n\n Worker.prototype.setPageSize = function setPageSize(pageSize) {\n function toPx(val, k) {\n return Math.floor(((val * k) / 72) * 96);\n }\n\n return this.then(function setPageSize_main() {\n // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n // Add 'inner' field if not present.\n if (!pageSize.hasOwnProperty(\"inner\")) {\n pageSize.inner = {\n width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n };\n pageSize.inner.px = {\n width: toPx(pageSize.inner.width, pageSize.k),\n height: toPx(pageSize.inner.height, pageSize.k)\n };\n pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n }\n\n // Attach pageSize to this.\n this.prop.pageSize = pageSize;\n });\n };\n\n Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n // Immediately update all progress values.\n if (val != null) this.progress.val = val;\n if (state != null) this.progress.state = state;\n if (n != null) this.progress.n = n;\n if (stack != null) this.progress.stack = stack;\n this.progress.ratio = this.progress.val / this.progress.state;\n\n // Return this for command chaining.\n return this;\n };\n\n Worker.prototype.updateProgress = function updateProgress(\n val,\n state,\n n,\n stack\n ) {\n // Immediately update all progress values, using setProgress.\n return this.setProgress(\n val ? this.progress.val + val : null,\n state ? state : null,\n n ? this.progress.n + n : null,\n stack ? this.progress.stack.concat(stack) : null\n );\n };\n\n /* ----- PROMISE MAPPING ----- */\n\n Worker.prototype.then = function then(onFulfilled, onRejected) {\n // Wrap `this` for encapsulation.\n var self = this;\n\n return this.thenCore(onFulfilled, onRejected, function then_main(\n onFulfilled,\n onRejected\n ) {\n // Update progress while queuing, calling, and resolving `then`.\n self.updateProgress(null, null, 1, [onFulfilled]);\n return Promise.prototype.then\n .call(this, function then_pre(val) {\n self.updateProgress(null, onFulfilled);\n return val;\n })\n .then(onFulfilled, onRejected)\n .then(function then_post(val) {\n self.updateProgress(1);\n return val;\n });\n });\n };\n\n Worker.prototype.thenCore = function thenCore(\n onFulfilled,\n onRejected,\n thenBase\n ) {\n // Handle optional thenBase parameter.\n thenBase = thenBase || Promise.prototype.then;\n\n // Wrap `this` for encapsulation and bind it to the promise handlers.\n var self = this;\n if (onFulfilled) {\n onFulfilled = onFulfilled.bind(self);\n }\n if (onRejected) {\n onRejected = onRejected.bind(self);\n }\n\n // Cast self into a Promise to avoid polyfills recursively defining `then`.\n var isNative =\n Promise.toString().indexOf(\"[native code]\") !== -1 &&\n Promise.name === \"Promise\";\n var selfPromise = isNative\n ? self\n : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n // Return the promise, after casting it into a Worker and preserving props.\n var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n return Worker.convert(returnVal, self.__proto__);\n };\n\n Worker.prototype.thenExternal = function thenExternal(\n onFulfilled,\n onRejected\n ) {\n // Call `then` and return a standard promise (exits the Worker chain).\n return Promise.prototype.then.call(this, onFulfilled, onRejected);\n };\n\n Worker.prototype.thenList = function thenList(fns) {\n // Queue a series of promise 'factories' into the promise chain.\n var self = this;\n fns.forEach(function thenList_forEach(fn) {\n self = self.thenCore(fn);\n });\n return self;\n };\n\n Worker.prototype[\"catch\"] = function(onRejected) {\n // Bind `this` to the promise handler, call `catch`, and return a Worker.\n if (onRejected) {\n onRejected = onRejected.bind(this);\n }\n var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n return Worker.convert(returnVal, this);\n };\n\n Worker.prototype.catchExternal = function catchExternal(onRejected) {\n // Call `catch` and return a standard promise (exits the Worker chain).\n return Promise.prototype[\"catch\"].call(this, onRejected);\n };\n\n Worker.prototype.error = function error(msg) {\n // Throw the error in the Promise chain.\n return this.then(function error_main() {\n throw new Error(msg);\n });\n };\n\n /* ----- ALIASES ----- */\n\n Worker.prototype.using = Worker.prototype.set;\n Worker.prototype.saveAs = Worker.prototype.save;\n Worker.prototype.export = Worker.prototype.output;\n Worker.prototype.run = Worker.prototype.then;\n\n // Get dimensions of a PDF page, as determined by jsPDF.\n jsPDF.getPageSize = function(orientation, unit, format) {\n // Decode options object\n if (typeof orientation === \"object\") {\n var options = orientation;\n orientation = options.orientation;\n unit = options.unit || unit;\n format = options.format || format;\n }\n\n // Default options\n unit = unit || \"mm\";\n format = format || \"a4\";\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n var format_as_string = (\"\" + format).toLowerCase();\n\n // Size in pt of various paper formats\n var pageFormats = {\n a0: [2383.94, 3370.39],\n a1: [1683.78, 2383.94],\n a2: [1190.55, 1683.78],\n a3: [841.89, 1190.55],\n a4: [595.28, 841.89],\n a5: [419.53, 595.28],\n a6: [297.64, 419.53],\n a7: [209.76, 297.64],\n a8: [147.4, 209.76],\n a9: [104.88, 147.4],\n a10: [73.7, 104.88],\n b0: [2834.65, 4008.19],\n b1: [2004.09, 2834.65],\n b2: [1417.32, 2004.09],\n b3: [1000.63, 1417.32],\n b4: [708.66, 1000.63],\n b5: [498.9, 708.66],\n b6: [354.33, 498.9],\n b7: [249.45, 354.33],\n b8: [175.75, 249.45],\n b9: [124.72, 175.75],\n b10: [87.87, 124.72],\n c0: [2599.37, 3676.54],\n c1: [1836.85, 2599.37],\n c2: [1298.27, 1836.85],\n c3: [918.43, 1298.27],\n c4: [649.13, 918.43],\n c5: [459.21, 649.13],\n c6: [323.15, 459.21],\n c7: [229.61, 323.15],\n c8: [161.57, 229.61],\n c9: [113.39, 161.57],\n c10: [79.37, 113.39],\n dl: [311.81, 623.62],\n letter: [612, 792],\n \"government-letter\": [576, 756],\n legal: [612, 1008],\n \"junior-legal\": [576, 360],\n ledger: [1224, 792],\n tabloid: [792, 1224],\n \"credit-card\": [153, 243]\n };\n\n var k;\n // Unit conversion\n switch (unit) {\n case \"pt\":\n k = 1;\n break;\n case \"mm\":\n k = 72 / 25.4;\n break;\n case \"cm\":\n k = 72 / 2.54;\n break;\n case \"in\":\n k = 72;\n break;\n case \"px\":\n k = 72 / 96;\n break;\n case \"pc\":\n k = 12;\n break;\n case \"em\":\n k = 12;\n break;\n case \"ex\":\n k = 6;\n break;\n default:\n throw \"Invalid unit: \" + unit;\n }\n var pageHeight = 0;\n var pageWidth = 0;\n\n // Dimensions are stored as user units and converted to points on output\n if (pageFormats.hasOwnProperty(format_as_string)) {\n pageHeight = pageFormats[format_as_string][1] / k;\n pageWidth = pageFormats[format_as_string][0] / k;\n } else {\n try {\n pageHeight = format[1];\n pageWidth = format[0];\n } catch (err) {\n throw new Error(\"Invalid format: \" + format);\n }\n }\n\n var tmp;\n // Handle page orientation\n if (orientation === \"p\" || orientation === \"portrait\") {\n orientation = \"p\";\n if (pageWidth > pageHeight) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else if (orientation === \"l\" || orientation === \"landscape\") {\n orientation = \"l\";\n if (pageHeight > pageWidth) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else {\n throw \"Invalid orientation: \" + orientation;\n }\n\n // Return information (k is the unit conversion ratio from pts)\n var info = {\n width: pageWidth,\n height: pageHeight,\n unit: unit,\n k: k,\n orientation: orientation\n };\n return info;\n };\n\n /**\n * @typedef FontFace\n *\n * The font-face type implements an interface similar to that of the font-face CSS rule,\n * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n * is updated.\n *\n * All properties expect values similar to those in the font-face CSS rule. A difference\n * is the font-family, which do not need to be enclosed in double-quotes when containing\n * spaces like in CSS.\n *\n * @property {string} family The name of the font-family.\n * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n * @property {string} [src] url A URL to a font of a specific format.\n * @property {string} [src] format Format of the font referenced by the URL.\n */\n\n /**\n * Generate a PDF from an HTML element or string using.\n *\n * @name html\n * @function\n * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n * @param {Object} [options] Collection of settings\n * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n *
      \n *
    • \n * false: Auto paging is disabled.\n *
    • \n *
    • \n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\n * slice text in half, making it difficult to read.\n *
    • \n *
    • \n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\n * mostly of a single column of text.\n *
    • \n *
    \n * Default is true.\n * @param {string} [options.filename] name of the file\n * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n * @param {jsPDF} [options.jsPDF] jsPDF instance\n * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is\n * specified or the windowWidth option is NOT specified.\n * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n * html2canvas.windowWidth option, this option affects the actual container size while rendering and\n * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified.\n *\n * @example\n * var doc = new jsPDF();\n *\n * doc.html(document.body, {\n * callback: function (doc) {\n * doc.save();\n * },\n * x: 10,\n * y: 10\n * });\n */\n jsPDFAPI.html = function(src, options) {\n \"use strict\";\n\n options = options || {};\n options.callback = options.callback || function() {};\n options.html2canvas = options.html2canvas || {};\n options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n options.jsPDF = options.jsPDF || this;\n options.fontFaces = options.fontFaces\n ? options.fontFaces.map(normalizeFontFace)\n : null;\n\n // Create a new worker with the given options.\n var worker = new Worker(options);\n\n if (!options.worker) {\n // If worker is not set to true, perform the traditional 'simple' operation.\n return worker.from(src).doCallback();\n } else {\n // Otherwise, return the worker for new Promise-based operation.\n return worker;\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namesOid;\n //var destsGoto = [];\n\n jsPDFAPI.events.push([\n \"postPutResources\",\n function() {\n var pdf = this;\n var rx = /^(\\d+) 0 obj$/;\n\n // Write action goto objects for each page\n // this.outline.destsGoto = [];\n // for (var i = 0; i < totalPages; i++) {\n // var id = pdf.internal.newObject();\n // this.outline.destsGoto.push(id);\n // pdf.internal.write(\"<> endobj\");\n // }\n //\n // for (var i = 0; i < dests.length; i++) {\n // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n // R\");\n // }\n //\n if (this.outline.root.children.length > 0) {\n var lines = pdf.outline.render().split(/\\r\\n/);\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var m = rx.exec(line);\n if (m != null) {\n var oid = m[1];\n pdf.internal.newObjectDeferredBegin(oid, false);\n }\n pdf.internal.write(line);\n }\n }\n\n // This code will write named destination for each page reference\n // (page_1, etc)\n if (this.outline.createNamedDestinations) {\n var totalPages = this.internal.pages.length;\n // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n // follow 5, 7, 9, etc\n // Write destination objects for each page\n var dests = [];\n for (var i = 0; i < totalPages; i++) {\n var id = pdf.internal.newObject();\n dests.push(id);\n var info = pdf.internal.getPageInfo(i + 1);\n pdf.internal.write(\n \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n );\n }\n\n // assign a name for each destination\n var names2Oid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Names [ \");\n for (var i = 0; i < dests.length; i++) {\n pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n }\n pdf.internal.write(\" ] >>\", \"endobj\");\n\n // var kids = pdf.internal.newObject();\n // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n // pdf.internal.write(' ] >>', 'endobj');\n\n namesOid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n pdf.internal.write(\">>\", \"endobj\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putCatalog\",\n function() {\n var pdf = this;\n if (pdf.outline.root.children.length > 0) {\n pdf.internal.write(\n \"/Outlines\",\n this.outline.makeRef(this.outline.root)\n );\n if (this.outline.createNamedDestinations) {\n pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n }\n // Open with Bookmarks showing\n // pdf.internal.write(\"/PageMode /UseOutlines\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n var pdf = this;\n\n pdf.outline = {\n createNamedDestinations: false,\n root: {\n children: []\n }\n };\n\n /**\n * Options: pageNumber\n */\n pdf.outline.add = function(parent, title, options) {\n var item = {\n title: title,\n options: options,\n children: []\n };\n if (parent == null) {\n parent = this.root;\n }\n parent.children.push(item);\n return item;\n };\n\n pdf.outline.render = function() {\n this.ctx = {};\n this.ctx.val = \"\";\n this.ctx.pdf = pdf;\n\n this.genIds_r(this.root);\n this.renderRoot(this.root);\n this.renderItems(this.root);\n\n return this.ctx.val;\n };\n\n pdf.outline.genIds_r = function(node) {\n node.id = pdf.internal.newObjectDeferred();\n for (var i = 0; i < node.children.length; i++) {\n this.genIds_r(node.children[i]);\n }\n };\n\n pdf.outline.renderRoot = function(node) {\n this.objStart(node);\n this.line(\"/Type /Outlines\");\n if (node.children.length > 0) {\n this.line(\"/First \" + this.makeRef(node.children[0]));\n this.line(\n \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n );\n }\n this.line(\n \"/Count \" +\n this.count_r(\n {\n count: 0\n },\n node\n )\n );\n this.objEnd();\n };\n\n pdf.outline.renderItems = function(node) {\n var getVerticalCoordinateString = this.ctx.pdf.internal\n .getVerticalCoordinateString;\n for (var i = 0; i < node.children.length; i++) {\n var item = node.children[i];\n this.objStart(item);\n\n this.line(\"/Title \" + this.makeString(item.title));\n\n this.line(\"/Parent \" + this.makeRef(node));\n if (i > 0) {\n this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n }\n if (i < node.children.length - 1) {\n this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n }\n if (item.children.length > 0) {\n this.line(\"/First \" + this.makeRef(item.children[0]));\n this.line(\n \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n );\n }\n\n var count = (this.count = this.count_r(\n {\n count: 0\n },\n item\n ));\n if (count > 0) {\n this.line(\"/Count \" + count);\n }\n\n if (item.options) {\n if (item.options.pageNumber) {\n // Explicit Destination\n //WARNING this assumes page ids are 3,5,7, etc.\n var info = pdf.internal.getPageInfo(item.options.pageNumber);\n this.line(\n \"/Dest \" +\n \"[\" +\n info.objId +\n \" 0 R /XYZ 0 \" +\n getVerticalCoordinateString(0) +\n \" 0]\"\n );\n // this line does not work on all clients (pageNumber instead of page ref)\n //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n // Named Destination\n // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n // Action Destination\n // var id = pdf.internal.newObject();\n // pdf.internal.write('<> endobj');\n // this.line('/A ' + id + ' 0 R' );\n }\n }\n this.objEnd();\n }\n for (var z = 0; z < node.children.length; z++) {\n this.renderItems(node.children[z]);\n }\n };\n\n pdf.outline.line = function(text) {\n this.ctx.val += text + \"\\r\\n\";\n };\n\n pdf.outline.makeRef = function(node) {\n return node.id + \" 0 R\";\n };\n\n pdf.outline.makeString = function(val) {\n return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n };\n\n pdf.outline.objStart = function(node) {\n this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n };\n\n pdf.outline.objEnd = function() {\n this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n };\n\n pdf.outline.count_r = function(ctx, node) {\n for (var i = 0; i < node.children.length; i++) {\n ctx.count++;\n this.count_r(ctx, node.children[i]);\n }\n return ctx.count;\n };\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * 0xc0 (SOF) Huffman - Baseline DCT\n * 0xc1 (SOF) Huffman - Extended sequential DCT\n * 0xc2 Progressive DCT (SOF2)\n * 0xc3 Spatial (sequential) lossless (SOF3)\n * 0xc4 Differential sequential DCT (SOF5)\n * 0xc5 Differential progressive DCT (SOF6)\n * 0xc6 Differential spatial (SOF7)\n * 0xc7\n */\n var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n //takes a string imgData containing the raw bytes of\n //a jpeg image and returns [width, height]\n //Algorithm from: http://www.64lines.com/jpeg-width-height\n var getJpegInfo = function(imgData) {\n var width, height, numcomponents;\n var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n var len = imgData.length;\n var result = { width: 0, height: 0, numcomponents: 1 };\n for (var i = 4; i < len; i += 2) {\n i += blockLength;\n if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n numcomponents = imgData.charCodeAt(i + 9);\n result = { width: width, height: height, numcomponents: numcomponents };\n break;\n } else {\n blockLength =\n imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n }\n }\n return result;\n };\n\n /**\n * @ignore\n */\n jsPDFAPI.processJPEG = function(\n data,\n index,\n alias,\n compression,\n dataAsBinaryString,\n colorSpace\n ) {\n var filter = this.decode.DCT_DECODE,\n bpc = 8,\n dims,\n result = null;\n\n if (\n typeof data === \"string\" ||\n this.__addimage__.isArrayBuffer(data) ||\n this.__addimage__.isArrayBufferView(data)\n ) {\n // if we already have a stored binary string rep use that\n data = dataAsBinaryString || data;\n data = this.__addimage__.isArrayBuffer(data)\n ? new Uint8Array(data)\n : data;\n data = this.__addimage__.isArrayBufferView(data)\n ? this.__addimage__.arrayBufferToBinaryString(data)\n : data;\n\n dims = getJpegInfo(data);\n switch (dims.numcomponents) {\n case 1:\n colorSpace = this.color_spaces.DEVICE_GRAY;\n break;\n case 4:\n colorSpace = this.color_spaces.DEVICE_CMYK;\n break;\n case 3:\n colorSpace = this.color_spaces.DEVICE_RGB;\n break;\n }\n\n result = {\n data: data,\n width: dims.width,\n height: dims.height,\n colorSpace: colorSpace,\n bitsPerComponent: bpc,\n filter: filter,\n index: index,\n alias: alias\n };\n }\n return result;\n };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n var APNG_BLEND_OP_OVER,\n APNG_BLEND_OP_SOURCE,\n APNG_DISPOSE_OP_BACKGROUND,\n APNG_DISPOSE_OP_NONE,\n APNG_DISPOSE_OP_PREVIOUS,\n makeImage,\n scratchCanvas,\n scratchCtx;\n\n APNG_DISPOSE_OP_NONE = 0;\n\n APNG_DISPOSE_OP_BACKGROUND = 1;\n\n APNG_DISPOSE_OP_PREVIOUS = 2;\n\n APNG_BLEND_OP_SOURCE = 0;\n\n APNG_BLEND_OP_OVER = 1;\n\n function PNG(data) {\n var chunkSize,\n colors,\n palLen,\n delayDen,\n delayNum,\n frame,\n i,\n index,\n key,\n section,\n palShort,\n text,\n _i,\n _j,\n _ref;\n this.data = data;\n this.pos = 8;\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.animation = null;\n this.text = {};\n frame = null;\n while (true) {\n chunkSize = this.readUInt32();\n section = function() {\n var _i, _results;\n _results = [];\n for (i = _i = 0; _i < 4; i = ++_i) {\n _results.push(String.fromCharCode(this.data[this.pos++]));\n }\n return _results;\n }\n .call(this)\n .join(\"\");\n switch (section) {\n case \"IHDR\":\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n case \"acTL\":\n this.animation = {\n numFrames: this.readUInt32(),\n numPlays: this.readUInt32() || Infinity,\n frames: []\n };\n break;\n case \"PLTE\":\n this.palette = this.read(chunkSize);\n break;\n case \"fcTL\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.pos += 4;\n frame = {\n width: this.readUInt32(),\n height: this.readUInt32(),\n xOffset: this.readUInt32(),\n yOffset: this.readUInt32()\n };\n delayNum = this.readUInt16();\n delayDen = this.readUInt16() || 100;\n frame.delay = (1000 * delayNum) / delayDen;\n frame.disposeOp = this.data[this.pos++];\n frame.blendOp = this.data[this.pos++];\n frame.data = [];\n break;\n case \"IDAT\":\n case \"fdAT\":\n if (section === \"fdAT\") {\n this.pos += 4;\n chunkSize -= 4;\n }\n data = (frame != null ? frame.data : void 0) || this.imgData;\n for (\n i = _i = 0;\n 0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n i = 0 <= chunkSize ? ++_i : --_i\n ) {\n data.push(this.data[this.pos++]);\n }\n break;\n case \"tRNS\":\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n palLen = this.palette.length / 3;\n this.transparency.indexed = this.read(chunkSize);\n if (this.transparency.indexed.length > palLen)\n throw new Error(\"More transparent colors than palette size\");\n /*\n * According to the PNG spec trns should be increased to the same size as palette if shorter\n */\n //palShort = 255 - this.transparency.indexed.length;\n palShort = palLen - this.transparency.indexed.length;\n if (palShort > 0) {\n for (\n i = _j = 0;\n 0 <= palShort ? _j < palShort : _j > palShort;\n i = 0 <= palShort ? ++_j : --_j\n ) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n this.transparency.rgb = this.read(chunkSize);\n }\n break;\n case \"tEXt\":\n text = this.read(chunkSize);\n index = text.indexOf(0);\n key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n case \"IEND\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.colors = function() {\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n return 1;\n case 2:\n case 6:\n return 3;\n }\n }.call(this);\n this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n this.colorSpace = function() {\n switch (this.colors) {\n case 1:\n return \"DeviceGray\";\n case 3:\n return \"DeviceRGB\";\n }\n }.call(this);\n this.imgData = new Uint8Array(this.imgData);\n return;\n default:\n this.pos += chunkSize;\n }\n this.pos += 4;\n if (this.pos > this.data.length) {\n throw new Error(\"Incomplete or corrupt PNG file\");\n }\n }\n }\n\n PNG.prototype.read = function(bytes) {\n var i, _i, _results;\n _results = [];\n for (\n i = _i = 0;\n 0 <= bytes ? _i < bytes : _i > bytes;\n i = 0 <= bytes ? ++_i : --_i\n ) {\n _results.push(this.data[this.pos++]);\n }\n return _results;\n };\n\n PNG.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.data[this.pos++] << 24;\n b2 = this.data[this.pos++] << 16;\n b3 = this.data[this.pos++] << 8;\n b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n PNG.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.data[this.pos++] << 8;\n b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n PNG.prototype.decodePixels = function(data) {\n var pixelBytes = this.pixelBitlength / 8;\n var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n var pos = 0;\n var _this = this;\n\n if (data == null) {\n data = this.imgData;\n }\n if (data.length === 0) {\n return new Uint8Array(0);\n }\n\n data = unzlibSync(data);\n function pass(x0, y0, dx, dy) {\n var abyte,\n c,\n col,\n i,\n left,\n length,\n p,\n pa,\n paeth,\n pb,\n pc,\n pixels,\n row,\n scanlineLength,\n upper,\n upperLeft,\n _i,\n _j,\n _k,\n _l,\n _m;\n var w = Math.ceil((_this.width - x0) / dx),\n h = Math.ceil((_this.height - y0) / dy);\n var isFull = _this.width == w && _this.height == h;\n scanlineLength = pixelBytes * w;\n pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n length = data.length;\n row = 0;\n c = 0;\n while (row < h && pos < length) {\n switch (data[pos++]) {\n case 0:\n for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n pixels[c++] = data[pos++];\n }\n break;\n case 1:\n for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n abyte = data[pos++];\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n pixels[c++] = (abyte + left) % 256;\n }\n break;\n case 2:\n for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (upper + abyte) % 256;\n }\n break;\n case 3:\n for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n case 4:\n for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n pixels[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n p = left + upper - upperLeft;\n pa = Math.abs(p - left);\n pb = Math.abs(p - upper);\n pc = Math.abs(p - upperLeft);\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n pixels[c++] = (abyte + paeth) % 256;\n }\n break;\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n if (!isFull) {\n var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n var partPos = row * scanlineLength;\n for (i = 0; i < w; i += 1) {\n for (var j = 0; j < pixelBytes; j += 1)\n fullPixels[fullPos++] = pixels[partPos++];\n fullPos += (dx - 1) * pixelBytes;\n }\n }\n row++;\n }\n }\n if (_this.interlaceMethod == 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n /* NOTE these seem to follow the pattern:\n * pass(x, 0, 2*x, 2*x);\n * pass(0, x, x, 2*x);\n * with x being 4, 2, 1.\n */\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1);\n }\n return fullPixels;\n };\n\n PNG.prototype.decodePalette = function() {\n var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n palette = this.palette;\n transparency = this.transparency.indexed || [];\n ret = new Uint8Array((transparency.length || 0) + palette.length);\n pos = 0;\n length = palette.length;\n c = 0;\n for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n }\n return ret;\n };\n\n PNG.prototype.copyToImageData = function(imageData, pixels) {\n var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n colors = this.colors;\n palette = null;\n alpha = this.hasAlphaChannel;\n if (this.palette.length) {\n palette =\n (_ref = this._decodedPalette) != null\n ? _ref\n : (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n data = imageData.data || imageData;\n length = data.length;\n input = palette || pixels;\n i = j = 0;\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n PNG.prototype.decode = function() {\n var ret;\n ret = new Uint8Array(this.width * this.height * 4);\n this.copyToImageData(ret, this.decodePixels());\n return ret;\n };\n\n var hasBrowserCanvas = function() {\n if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n try {\n scratchCanvas = globalObject.document.createElement(\"canvas\");\n scratchCtx = scratchCanvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n };\n\n hasBrowserCanvas();\n\n makeImage = function(imageData) {\n if (hasBrowserCanvas() === true) {\n var img;\n scratchCtx.width = imageData.width;\n scratchCtx.height = imageData.height;\n scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n scratchCtx.putImageData(imageData, 0, 0);\n img = new Image();\n img.src = scratchCanvas.toDataURL();\n return img;\n }\n throw new Error(\"This method requires a Browser with Canvas-capability.\");\n };\n\n PNG.prototype.decodeFrames = function(ctx) {\n var frame, i, imageData, pixels, _i, _len, _ref, _results;\n if (!this.animation) {\n return;\n }\n _ref = this.animation.frames;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n frame = _ref[i];\n imageData = ctx.createImageData(frame.width, frame.height);\n pixels = this.decodePixels(new Uint8Array(frame.data));\n this.copyToImageData(imageData, pixels);\n frame.imageData = imageData;\n _results.push((frame.image = makeImage(imageData)));\n }\n return _results;\n };\n\n PNG.prototype.renderFrame = function(ctx, number) {\n var frame, frames, prev;\n frames = this.animation.frames;\n frame = frames[number];\n prev = frames[number - 1];\n if (number === 0) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n ) {\n ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n } else if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n ) {\n ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n }\n if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n }\n return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n };\n\n PNG.prototype.animate = function(ctx) {\n var doFrame,\n frameNumber,\n frames,\n numFrames,\n numPlays,\n _ref,\n _this = this;\n frameNumber = 0;\n (_ref = this.animation),\n (numFrames = _ref.numFrames),\n (frames = _ref.frames),\n (numPlays = _ref.numPlays);\n return (doFrame = function() {\n var f, frame;\n f = frameNumber++ % numFrames;\n frame = frames[f];\n _this.renderFrame(ctx, f);\n if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n }\n })();\n };\n\n PNG.prototype.stopAnimation = function() {\n var _ref;\n return clearTimeout(\n (_ref = this.animation) != null ? _ref._timeout : void 0\n );\n };\n\n PNG.prototype.render = function(canvas) {\n var ctx, data;\n if (canvas._png) {\n canvas._png.stopAnimation();\n }\n canvas._png = this;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx = canvas.getContext(\"2d\");\n if (this.animation) {\n this.decodeFrames(ctx);\n return this.animate(ctx);\n } else {\n data = ctx.createImageData(this.width, this.height);\n this.copyToImageData(data, this.decodePixels());\n return ctx.putImageData(data, 0, 0);\n }\n };\n\n return PNG;\n})();\n\nexport { PNG };\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n \"use strict\";\n /**\n * Returns an array of length matching length of the 'word' string, with each\n * cell occupied by the width of the char in that position.\n *\n * @name getCharWidthsArray\n * @function\n * @param {string} text\n * @param {Object} options\n * @returns {Array}\n */\n var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n options = options || {};\n\n var activeFont = options.font || this.internal.getFont();\n var fontSize = options.fontSize || this.internal.getFontSize();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n\n var widths = options.widths\n ? options.widths\n : activeFont.metadata.Unicode.widths;\n var widthsFractionOf = widths.fof ? widths.fof : 1;\n var kerning = options.kerning\n ? options.kerning\n : activeFont.metadata.Unicode.kerning;\n var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n var doKerning = options.doKerning === false ? false : true;\n var kerningValue = 0;\n\n var i;\n var length = text.length;\n var char_code;\n var prior_char_code = 0; //for kerning\n var default_char_width = widths[0] || widthsFractionOf;\n var output = [];\n\n for (i = 0; i < length; i++) {\n char_code = text.charCodeAt(i);\n\n if (typeof activeFont.metadata.widthOfString === \"function\") {\n output.push(\n (activeFont.metadata.widthOfGlyph(\n activeFont.metadata.characterToGlyph(char_code)\n ) +\n charSpace * (1000 / fontSize) || 0) / 1000\n );\n } else {\n if (\n doKerning &&\n typeof kerning[char_code] === \"object\" &&\n !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n ) {\n kerningValue =\n kerning[char_code][prior_char_code] / kerningFractionOf;\n } else {\n kerningValue = 0;\n }\n output.push(\n (widths[char_code] || default_char_width) / widthsFractionOf +\n kerningValue\n );\n }\n prior_char_code = char_code;\n }\n\n return output;\n });\n\n /**\n * Returns a widths of string in a given font, if the font size is set as 1 point.\n *\n * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n * of the string will be that much.\n *\n * Multiply by font size to get actual width in *points*\n * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n *\n * @name getStringUnitWidth\n * @public\n * @function\n * @param {string} text\n * @param {string} options\n * @returns {number} result\n */\n var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n options = options || {};\n\n var fontSize = options.fontSize || this.internal.getFontSize();\n var font = options.font || this.internal.getFont();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n var result = 0;\n\n if (API.processArabic) {\n text = API.processArabic(text);\n }\n\n if (typeof font.metadata.widthOfString === \"function\") {\n result =\n font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n } else {\n result = getCharWidthsArray\n .apply(this, arguments)\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n }\n return result;\n });\n\n /**\n returns array of lines\n */\n var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n var answer = [];\n\n // 1st, chop off the piece that can fit on the hanging line.\n var i = 0,\n l = word.length,\n workingLen = 0;\n while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n workingLen += widths_array[i];\n i++;\n }\n // this is first line.\n answer.push(word.slice(0, i));\n\n // 2nd. Split the rest into maxLen pieces.\n var startOfLine = i;\n workingLen = 0;\n while (i !== l) {\n if (workingLen + widths_array[i] > maxLen) {\n answer.push(word.slice(startOfLine, i));\n workingLen = 0;\n startOfLine = i;\n }\n workingLen += widths_array[i];\n i++;\n }\n if (startOfLine !== i) {\n answer.push(word.slice(startOfLine, i));\n }\n\n return answer;\n };\n\n // Note, all sizing inputs for this function must be in \"font measurement units\"\n // By default, for PDF, it's \"point\".\n var splitParagraphIntoLines = function(text, maxlen, options) {\n // at this time works only on Western scripts, ones with space char\n // separating the words. Feel free to expand.\n\n if (!options) {\n options = {};\n }\n\n var line = [],\n lines = [line],\n line_length = options.textIndent || 0,\n separator_length = 0,\n current_word_length = 0,\n word,\n widths_array,\n words = text.split(\" \"),\n spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n i,\n l,\n tmp,\n lineIndent;\n\n if (options.lineIndent === -1) {\n lineIndent = words[0].length + 2;\n } else {\n lineIndent = options.lineIndent || 0;\n }\n if (lineIndent) {\n var pad = Array(lineIndent).join(\" \"),\n wrds = [];\n words.map(function(wrd) {\n wrd = wrd.split(/\\s*\\n/);\n if (wrd.length > 1) {\n wrds = wrds.concat(\n wrd.map(function(wrd, idx) {\n return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n })\n );\n } else {\n wrds.push(wrd[0]);\n }\n });\n words = wrds;\n lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n }\n\n for (i = 0, l = words.length; i < l; i++) {\n var force = 0;\n\n word = words[i];\n if (lineIndent && word[0] == \"\\n\") {\n word = word.substr(1);\n force = 1;\n }\n widths_array = getCharWidthsArray.apply(this, [word, options]);\n current_word_length = widths_array.reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n\n if (\n line_length + separator_length + current_word_length > maxlen ||\n force\n ) {\n if (current_word_length > maxlen) {\n // this happens when you have space-less long URLs for example.\n // we just chop these to size. We do NOT insert hiphens\n tmp = splitLongWord.apply(this, [\n word,\n widths_array,\n maxlen - (line_length + separator_length),\n maxlen\n ]);\n // first line we add to existing line object\n line.push(tmp.shift()); // it's ok to have extra space indicator there\n // last line we make into new line object\n line = [tmp.pop()];\n // lines in the middle we apped to lines object as whole lines\n while (tmp.length) {\n lines.push([tmp.shift()]); // single fragment occupies whole line\n }\n current_word_length = widths_array\n .slice(word.length - (line[0] ? line[0].length : 0))\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n } else {\n // just put it on a new line\n line = [word];\n }\n\n // now we attach new line to lines\n lines.push(line);\n line_length = current_word_length + lineIndent;\n separator_length = spaceCharWidth;\n } else {\n line.push(word);\n\n line_length += separator_length + current_word_length;\n separator_length = spaceCharWidth;\n }\n }\n\n var postProcess;\n if (lineIndent) {\n postProcess = function(ln, idx) {\n return (idx ? pad : \"\") + ln.join(\" \");\n };\n } else {\n postProcess = function(ln) {\n return ln.join(\" \");\n };\n }\n\n return lines.map(postProcess);\n };\n\n /**\n * Splits a given string into an array of strings. Uses 'size' value\n * (in measurement units declared as default for the jsPDF instance)\n * and the font's \"widths\" and \"Kerning\" tables, where available, to\n * determine display length of a given string for a given font.\n *\n * We use character's 100% of unit size (height) as width when Width\n * table or other default width is not available.\n *\n * @name splitTextToSize\n * @public\n * @function\n * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n * @param {Object} options Optional flags needed for chopper to do the right thing.\n * @returns {Array} array Array with strings chopped to size.\n */\n API.splitTextToSize = function(text, maxlen, options) {\n \"use strict\";\n\n options = options || {};\n\n var fsize = options.fontSize || this.internal.getFontSize(),\n newOptions = function(options) {\n var widths = {\n 0: 1\n },\n kerning = {};\n\n if (!options.widths || !options.kerning) {\n var f = this.internal.getFont(options.fontName, options.fontStyle),\n encoding = \"Unicode\";\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n // Actual JavaScript-native String's 16bit char codes used.\n // no multi-byte logic here\n\n if (f.metadata[encoding]) {\n return {\n widths: f.metadata[encoding].widths || widths,\n kerning: f.metadata[encoding].kerning || kerning\n };\n } else {\n return {\n font: f.metadata,\n fontSize: this.internal.getFontSize(),\n charSpace: this.internal.getCharSpace()\n };\n }\n } else {\n return {\n widths: options.widths,\n kerning: options.kerning\n };\n }\n }.call(this, options);\n\n // first we split on end-of-line chars\n var paragraphs;\n if (Array.isArray(text)) {\n paragraphs = text;\n } else {\n paragraphs = String(text).split(/\\r?\\n/);\n }\n\n // now we convert size (max length of line) into \"font size units\"\n // at present time, the \"font size unit\" is always 'point'\n // 'proportional' means, \"in proportion to font size\"\n var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n // this may change in the future?\n // until then, proportional_maxlen is likely to be in 'points'\n\n // If first line is to be indented (shorter or longer) than maxLen\n // we indicate that by using CSS-style \"text-indent\" option.\n // here it's in font units too (which is likely 'points')\n // it can be negative (which makes the first line longer than maxLen)\n newOptions.textIndent = options.textIndent\n ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n : 0;\n newOptions.lineIndent = options.lineIndent;\n\n var i,\n l,\n output = [];\n for (i = 0, l = paragraphs.length; i < l; i++) {\n output = output.concat(\n splitParagraphIntoLines.apply(this, [\n paragraphs[i],\n fontUnit_maxLen,\n newOptions\n ])\n );\n }\n\n return output;\n };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee , 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n var p = 0;\n\n var gopts = gopts === undefined ? {} : gopts;\n var loop_count = gopts.loop === undefined ? null : gopts.loop;\n var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n function check_palette_and_num_colors(palette) {\n var num_colors = palette.length;\n if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n throw new Error(\n \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n );\n }\n return num_colors;\n }\n\n // - Header.\n buf[p++] = 0x47;\n buf[p++] = 0x49;\n buf[p++] = 0x46; // GIF\n buf[p++] = 0x38;\n buf[p++] = 0x39;\n buf[p++] = 0x61; // 89a\n\n // Handling of Global Color Table (palette) and background index.\n var gp_num_colors_pow2 = 0;\n var background = 0;\n if (global_palette !== null) {\n var gp_num_colors = check_palette_and_num_colors(global_palette);\n while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n gp_num_colors = 1 << gp_num_colors_pow2;\n --gp_num_colors_pow2;\n if (gopts.background !== undefined) {\n background = gopts.background;\n if (background >= gp_num_colors)\n throw new Error(\"Background index out of range.\");\n // The GIF spec states that a background index of 0 should be ignored, so\n // this is probably a mistake and you really want to set it to another\n // slot in the palette. But actually in the end most browsers, etc end\n // up ignoring this almost completely (including for dispose background).\n if (background === 0)\n throw new Error(\"Background index explicitly passed as 0.\");\n }\n }\n\n // - Logical Screen Descriptor.\n // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n buf[p++] = width & 0xff;\n buf[p++] = (width >> 8) & 0xff;\n buf[p++] = height & 0xff;\n buf[p++] = (height >> 8) & 0xff;\n // NOTE: Indicates 0-bpp original color resolution (unused?).\n buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n buf[p++] = background; // Background Color Index.\n buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n // - Global Color Table\n if (global_palette !== null) {\n for (var i = 0, il = global_palette.length; i < il; ++i) {\n var rgb = global_palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n if (loop_count !== null) {\n // Netscape block for looping.\n if (loop_count < 0 || loop_count > 65535)\n throw new Error(\"Loop count invalid.\");\n // Extension code, label, and length.\n buf[p++] = 0x21;\n buf[p++] = 0xff;\n buf[p++] = 0x0b;\n // NETSCAPE2.0\n buf[p++] = 0x4e;\n buf[p++] = 0x45;\n buf[p++] = 0x54;\n buf[p++] = 0x53;\n buf[p++] = 0x43;\n buf[p++] = 0x41;\n buf[p++] = 0x50;\n buf[p++] = 0x45;\n buf[p++] = 0x32;\n buf[p++] = 0x2e;\n buf[p++] = 0x30;\n // Sub-block\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loop_count & 0xff;\n buf[p++] = (loop_count >> 8) & 0xff;\n buf[p++] = 0x00; // Terminator.\n }\n\n var ended = false;\n\n this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n if (ended === true) {\n --p;\n ended = false;\n } // Un-end.\n\n opts = opts === undefined ? {} : opts;\n\n // TODO(deanm): Bounds check x, y. Do they need to be within the virtual\n // canvas width/height, I imagine?\n if (x < 0 || y < 0 || x > 65535 || y > 65535)\n throw new Error(\"x/y invalid.\");\n\n if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n if (indexed_pixels.length < w * h)\n throw new Error(\"Not enough pixels for the frame size.\");\n\n var using_local_palette = true;\n var palette = opts.palette;\n if (palette === undefined || palette === null) {\n using_local_palette = false;\n palette = global_palette;\n }\n\n if (palette === undefined || palette === null)\n throw new Error(\"Must supply either a local or global palette.\");\n\n var num_colors = check_palette_and_num_colors(palette);\n\n // Compute the min_code_size (power of 2), destroying num_colors.\n var min_code_size = 0;\n while ((num_colors >>= 1)) ++min_code_size;\n num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n var delay = opts.delay === undefined ? 0 : opts.delay;\n\n // From the spec:\n // 0 - No disposal specified. The decoder is\n // not required to take any action.\n // 1 - Do not dispose. The graphic is to be left\n // in place.\n // 2 - Restore to background color. The area used by the\n // graphic must be restored to the background color.\n // 3 - Restore to previous. The decoder is required to\n // restore the area overwritten by the graphic with\n // what was there prior to rendering the graphic.\n // 4-7 - To be defined.\n // NOTE(deanm): Dispose background doesn't really work, apparently most\n // browsers ignore the background palette index and clear to transparency.\n var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n if (disposal < 0 || disposal > 3)\n // 4-7 is reserved.\n throw new Error(\"Disposal out of range.\");\n\n var use_transparency = false;\n var transparent_index = 0;\n if (opts.transparent !== undefined && opts.transparent !== null) {\n use_transparency = true;\n transparent_index = opts.transparent;\n if (transparent_index < 0 || transparent_index >= num_colors)\n throw new Error(\"Transparent color index.\");\n }\n\n if (disposal !== 0 || use_transparency || delay !== 0) {\n // - Graphics Control Extension\n buf[p++] = 0x21;\n buf[p++] = 0xf9; // Extension / Label.\n buf[p++] = 4; // Byte size.\n\n buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n buf[p++] = delay & 0xff;\n buf[p++] = (delay >> 8) & 0xff;\n buf[p++] = transparent_index; // Transparent color index.\n buf[p++] = 0; // Block Terminator.\n }\n\n // - Image Descriptor\n buf[p++] = 0x2c; // Image Seperator.\n buf[p++] = x & 0xff;\n buf[p++] = (x >> 8) & 0xff; // Left.\n buf[p++] = y & 0xff;\n buf[p++] = (y >> 8) & 0xff; // Top.\n buf[p++] = w & 0xff;\n buf[p++] = (w >> 8) & 0xff;\n buf[p++] = h & 0xff;\n buf[p++] = (h >> 8) & 0xff;\n // NOTE: No sort flag (unused?).\n // TODO(deanm): Support interlace.\n buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n // - Local Color Table\n if (using_local_palette === true) {\n for (var i = 0, il = palette.length; i < il; ++i) {\n var rgb = palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n p = GifWriterOutputLZWCodeStream(\n buf,\n p,\n min_code_size < 2 ? 2 : min_code_size,\n indexed_pixels\n );\n\n return p;\n };\n\n this.end = function() {\n if (ended === false) {\n buf[p++] = 0x3b; // Trailer.\n ended = true;\n }\n return p;\n };\n\n this.getOutputBuffer = function() {\n return buf;\n };\n this.setOutputBuffer = function(v) {\n buf = v;\n };\n this.getOutputBufferPosition = function() {\n return p;\n };\n this.setOutputBufferPosition = function(v) {\n p = v;\n };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n buf[p++] = min_code_size;\n var cur_subblock = p++; // Pointing at the length field.\n\n var clear_code = 1 << min_code_size;\n var code_mask = clear_code - 1;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n var cur_shift = 0;\n // We have at most 12-bit codes, so we should have to hold a max of 19\n // bits here (and then we would write out).\n var cur = 0;\n\n function emit_bytes_to_buffer(bit_block_size) {\n while (cur_shift >= bit_block_size) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n }\n\n function emit_code(c) {\n cur |= c << cur_shift;\n cur_shift += cur_code_size;\n emit_bytes_to_buffer(8);\n }\n\n // I am not an expert on the topic, and I don't want to write a thesis.\n // However, it is good to outline here the basic algorithm and the few data\n // structures and optimizations here that make this implementation fast.\n // The basic idea behind LZW is to build a table of previously seen runs\n // addressed by a short id (herein called output code). All data is\n // referenced by a code, which represents one or more values from the\n // original input stream. All input bytes can be referenced as the same\n // value as an output code. So if you didn't want any compression, you\n // could more or less just output the original bytes as codes (there are\n // some details to this, but it is the idea). In order to achieve\n // compression, values greater then the input range (codes can be up to\n // 12-bit while input only 8-bit) represent a sequence of previously seen\n // inputs. The decompressor is able to build the same mapping while\n // decoding, so there is always a shared common knowledge between the\n // encoding and decoder, which is also important for \"timing\" aspects like\n // how to handle variable bit width code encoding.\n //\n // One obvious but very important consequence of the table system is there\n // is always a unique id (at most 12-bits) to map the runs. 'A' might be\n // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship\n // can be used for an effecient lookup strategy for the code mapping. We\n // need to know if a run has been seen before, and be able to map that run\n // to the output code. Since we start with known unique ids (input bytes),\n // and then from those build more unique ids (table entries), we can\n // continue this chain (almost like a linked list) to always have small\n // integer values that represent the current byte chains in the encoder.\n // This means instead of tracking the input bytes (AAAABCD) to know our\n // current state, we can track the table entry for AAAABC (it is guaranteed\n // to exist by the nature of the algorithm) and the next character D.\n // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n // unique. This allows us to create a simple lookup key for mapping input\n // sequences to codes (table indices) without having to store or search\n // any of the code sequences. So if 'AAAA' has a table entry of 12, the\n // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n // key. This leads to a integer value at most 20-bits, which can always\n // fit in an SMI value and be used as a fast sparse array / object key.\n\n // Output code for the current contents of the index buffer.\n var ib_code = index_stream[0] & code_mask; // Load first input index.\n var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n emit_code(clear_code); // Spec says first code should be a clear code.\n\n // First index already loaded, process the rest of the stream.\n for (var i = 1, il = index_stream.length; i < il; ++i) {\n var k = index_stream[i] & code_mask;\n var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n var cur_code = code_table[cur_key]; // buffer + k.\n\n // Check if we have to create a new code table entry.\n if (cur_code === undefined) {\n // We don't have buffer + k.\n // Emit index buffer (without k).\n // This is an inline version of emit_code, because this is the core\n // writing routine of the compressor (and V8 cannot inline emit_code\n // because it is a closure here in a different context). Additionally\n // we can call emit_byte_to_buffer less often, because we can have\n // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n // be 12-bits, so can safely have 18-bits there without overflow.\n // emit_code(ib_code);\n cur |= ib_code << cur_shift;\n cur_shift += cur_code_size;\n while (cur_shift >= 8) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n\n if (next_code === 4096) {\n // Table full, need a clear.\n emit_code(clear_code);\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_table = {};\n } else {\n // Table not full, insert a new entry.\n // Increase our variable bit code sizes if necessary. This is a bit\n // tricky as it is based on \"timing\" between the encoding and\n // decoder. From the encoders perspective this should happen after\n // we've already emitted the index buffer and are about to create the\n // first table entry that would overflow our current code bit size.\n if (next_code >= 1 << cur_code_size) ++cur_code_size;\n code_table[cur_key] = next_code++; // Insert into code table.\n }\n\n ib_code = k; // Index buffer to single input k.\n } else {\n ib_code = cur_code; // Index buffer to sequence in code table.\n }\n }\n\n emit_code(ib_code); // There will still be something in the index buffer.\n emit_code(eoi_code); // End Of Information.\n\n // Flush / finalize the sub-blocks stream to the buffer.\n emit_bytes_to_buffer(1);\n\n // Finish the sub-blocks, writing out any unfinished lengths and\n // terminating with a sub-block of length 0. If we have already started\n // but not yet used a sub-block it can just become the terminator.\n if (cur_subblock + 1 === p) {\n // Started but unused.\n buf[cur_subblock] = 0;\n } else {\n // Started and used, write length and additional terminator block.\n buf[cur_subblock] = p - cur_subblock - 1;\n buf[p++] = 0;\n }\n return p;\n}\n\nfunction GifReader(buf) {\n var p = 0;\n\n // - Header (GIF87a or GIF89a).\n if (\n buf[p++] !== 0x47 ||\n buf[p++] !== 0x49 ||\n buf[p++] !== 0x46 ||\n buf[p++] !== 0x38 ||\n ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n buf[p++] !== 0x61\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n // - Logical Screen Descriptor.\n var width = buf[p++] | (buf[p++] << 8);\n var height = buf[p++] | (buf[p++] << 8);\n var pf0 = buf[p++]; // .\n var global_palette_flag = pf0 >> 7;\n var num_global_colors_pow2 = pf0 & 0x7;\n var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n var background = buf[p++];\n buf[p++]; // Pixel aspect ratio (unused?).\n\n var global_palette_offset = null;\n var global_palette_size = null;\n\n if (global_palette_flag) {\n global_palette_offset = p;\n global_palette_size = num_global_colors;\n p += num_global_colors * 3; // Seek past palette.\n }\n\n var no_eof = true;\n\n var frames = [];\n\n var delay = 0;\n var transparent_index = null;\n var disposal = 0; // 0 - No disposal specified.\n var loop_count = null;\n\n this.width = width;\n this.height = height;\n\n while (no_eof && p < buf.length) {\n switch (buf[p++]) {\n case 0x21: // Graphics Control Extension Block\n switch (buf[p++]) {\n case 0xff: // Application specific block\n // Try if it's a Netscape block (with animation loop counter).\n if (\n buf[p] !== 0x0b || // 21 FF already read, check block size.\n // NETSCAPE2.0\n (buf[p + 1] == 0x4e &&\n buf[p + 2] == 0x45 &&\n buf[p + 3] == 0x54 &&\n buf[p + 4] == 0x53 &&\n buf[p + 5] == 0x43 &&\n buf[p + 6] == 0x41 &&\n buf[p + 7] == 0x50 &&\n buf[p + 8] == 0x45 &&\n buf[p + 9] == 0x32 &&\n buf[p + 10] == 0x2e &&\n buf[p + 11] == 0x30 &&\n // Sub-block\n buf[p + 12] == 0x03 &&\n buf[p + 13] == 0x01 &&\n buf[p + 16] == 0)\n ) {\n p += 14;\n loop_count = buf[p++] | (buf[p++] << 8);\n p++; // Skip terminator.\n } else {\n // We don't know what it is, just try to get past it.\n p += 12;\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n }\n break;\n\n case 0xf9: // Graphics Control Extension\n if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n var pf1 = buf[p++];\n delay = buf[p++] | (buf[p++] << 8);\n transparent_index = buf[p++];\n if ((pf1 & 1) === 0) transparent_index = null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // Skip terminator.\n break;\n\n case 0xfe: // Comment Extension.\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n // console.log(buf.slice(p, p+block_size).toString('ascii'));\n p += block_size;\n }\n break;\n\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n );\n }\n break;\n\n case 0x2c: // Image Descriptor.\n var x = buf[p++] | (buf[p++] << 8);\n var y = buf[p++] | (buf[p++] << 8);\n var w = buf[p++] | (buf[p++] << 8);\n var h = buf[p++] | (buf[p++] << 8);\n var pf2 = buf[p++];\n var local_palette_flag = pf2 >> 7;\n var interlace_flag = (pf2 >> 6) & 1;\n var num_local_colors_pow2 = pf2 & 0x7;\n var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n var palette_offset = global_palette_offset;\n var palette_size = global_palette_size;\n var has_local_palette = false;\n if (local_palette_flag) {\n var has_local_palette = true;\n palette_offset = p; // Override with local palette.\n palette_size = num_local_colors;\n p += num_local_colors * 3; // Seek past palette.\n }\n\n var data_offset = p;\n\n p++; // codesize\n while (true) {\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n\n frames.push({\n x: x,\n y: y,\n width: w,\n height: h,\n has_local_palette: has_local_palette,\n palette_offset: palette_offset,\n palette_size: palette_size,\n data_offset: data_offset,\n data_length: p - data_offset,\n transparent_index: transparent_index,\n interlaced: !!interlace_flag,\n delay: delay,\n disposal: disposal\n });\n break;\n\n case 0x3b: // Trailer Marker (end of file).\n no_eof = false;\n break;\n\n default:\n throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n break;\n }\n }\n\n this.numFrames = function() {\n return frames.length;\n };\n\n this.loopCount = function() {\n return loop_count;\n };\n\n this.frameInfo = function(frame_num) {\n if (frame_num < 0 || frame_num >= frames.length)\n throw new Error(\"Frame index out of range.\");\n return frames[frame_num];\n };\n\n this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = b;\n pixels[op++] = g;\n pixels[op++] = r;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n\n // I will go to copy and paste hell one day...\n this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = r;\n pixels[op++] = g;\n pixels[op++] = b;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n var min_code_size = code_stream[p++];\n\n var clear_code = 1 << min_code_size;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n // NOTE: This shares the same name as the encoder, but has a different\n // meaning here. Here this masks each code coming from the code stream.\n var code_mask = (1 << cur_code_size) - 1;\n var cur_shift = 0;\n var cur = 0;\n\n var op = 0; // Output pointer.\n\n var subblock_size = code_stream[p++];\n\n // TODO(deanm): Would using a TypedArray be any faster? At least it would\n // solve the fast mode / backing store uncertainty.\n // var code_table = Array(4096);\n var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n var prev_code = null; // Track code-1.\n\n while (true) {\n // Read up to two bytes, making sure we always 12-bits for max sized code.\n while (cur_shift < 16) {\n if (subblock_size === 0) break; // No more data to be read.\n\n cur |= code_stream[p++] << cur_shift;\n cur_shift += 8;\n\n if (subblock_size === 1) {\n // Never let it get to 0 to hold logic above.\n subblock_size = code_stream[p++]; // Next subblock.\n } else {\n --subblock_size;\n }\n }\n\n // TODO(deanm): We should never really get here, we should have received\n // and EOI.\n if (cur_shift < cur_code_size) break;\n\n var code = cur & code_mask;\n cur >>= cur_code_size;\n cur_shift -= cur_code_size;\n\n // TODO(deanm): Maybe should check that the first code was a clear code,\n // at least this is what you're supposed to do. But actually our encoder\n // now doesn't emit a clear code first anyway.\n if (code === clear_code) {\n // We don't actually have to clear the table. This could be a good idea\n // for greater error checking, but we don't really do any anyway. We\n // will just track it with next_code and overwrite old entries.\n\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_mask = (1 << cur_code_size) - 1;\n\n // Don't update prev_code ?\n prev_code = null;\n continue;\n } else if (code === eoi_code) {\n break;\n }\n\n // We have a similar situation as the decoder, where we want to store\n // variable length entries (code table entries), but we want to do in a\n // faster manner than an array of arrays. The code below stores sort of a\n // linked list within the code table, and then \"chases\" through it to\n // construct the dictionary entries. When a new entry is created, just the\n // last byte is stored, and the rest (prefix) of the entry is only\n // referenced by its table entry. Then the code chases through the\n // prefixes until it reaches a single byte code. We have to chase twice,\n // first to compute the length, and then to actually copy the data to the\n // output (backwards, since we know the length). The alternative would be\n // storing something in an intermediate stack, but that doesn't make any\n // more sense. I implemented an approach where it also stored the length\n // in the code table, although it's a bit tricky because you run out of\n // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n // entries are generally not the long). Even when I created benchmarks for\n // very long table entries the complexity did not seem worth it.\n // The code table stores the prefix entry in 12 bits and then the suffix\n // byte in 8 bits, so each entry is 20 bits.\n\n var chase_code = code < next_code ? code : prev_code;\n\n // Chase what we will output, either {CODE} or {CODE-1}.\n var chase_length = 0;\n var chase = chase_code;\n while (chase > clear_code) {\n chase = code_table[chase] >> 8;\n ++chase_length;\n }\n\n var k = chase;\n\n var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n if (op_end > output_length) {\n console.log(\"Warning, gif stream longer than expected.\");\n return;\n }\n\n // Already have the first byte from the chase, might as well write it fast.\n output[op++] = k;\n\n op += chase_length;\n var b = op; // Track pointer, writing backwards.\n\n if (chase_code !== code)\n // The case of emitting {CODE-1} + k.\n output[op++] = k;\n\n chase = chase_code;\n while (chase_length--) {\n chase = code_table[chase];\n output[--b] = chase & 0xff; // Write backwards.\n chase >>= 8; // Pull down to the prefix code.\n }\n\n if (prev_code !== null && next_code < 4096) {\n code_table[next_code++] = (prev_code << 8) | k;\n // TODO(deanm): Figure out this clearing vs code growth logic better. I\n // have an feeling that it should just happen somewhere else, for now it\n // is awkward between when we grow past the max and then hit a clear code.\n // For now just check if we hit the max 12-bits (then a clear code should\n // follow, also of course encoded in 12-bits).\n if (next_code >= code_mask + 1 && cur_code_size < 12) {\n ++cur_code_size;\n code_mask = (code_mask << 1) | 1;\n }\n }\n\n prev_code = code;\n }\n\n if (op !== output_length) {\n console.log(\"Warning, gif stream shorter than expected.\");\n }\n\n return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n var ffloor = Math.floor;\n var YTable = new Array(64);\n var UVTable = new Array(64);\n var fdtbl_Y = new Array(64);\n var fdtbl_UV = new Array(64);\n var YDC_HT;\n var UVDC_HT;\n var YAC_HT;\n var UVAC_HT;\n\n var bitcode = new Array(65535);\n var category = new Array(65535);\n var outputfDCTQuant = new Array(64);\n var DU = new Array(64);\n var byteout = [];\n var bytenew = 0;\n var bytepos = 7;\n\n var YDU = new Array(64);\n var UDU = new Array(64);\n var VDU = new Array(64);\n var clt = new Array(256);\n var RGB_YUV_TABLE = new Array(2048);\n var currentQuality;\n\n var ZigZag = [\n 0,\n 1,\n 5,\n 6,\n 14,\n 15,\n 27,\n 28,\n 2,\n 4,\n 7,\n 13,\n 16,\n 26,\n 29,\n 42,\n 3,\n 8,\n 12,\n 17,\n 25,\n 30,\n 41,\n 43,\n 9,\n 11,\n 18,\n 24,\n 31,\n 40,\n 44,\n 53,\n 10,\n 19,\n 23,\n 32,\n 39,\n 45,\n 52,\n 54,\n 20,\n 22,\n 33,\n 38,\n 46,\n 51,\n 55,\n 60,\n 21,\n 34,\n 37,\n 47,\n 50,\n 56,\n 59,\n 61,\n 35,\n 36,\n 48,\n 49,\n 57,\n 58,\n 62,\n 63\n ];\n\n var std_dc_luminance_nrcodes = [\n 0,\n 0,\n 1,\n 5,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_luminance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 3,\n 3,\n 2,\n 4,\n 3,\n 5,\n 5,\n 4,\n 4,\n 0,\n 0,\n 1,\n 0x7d\n ];\n var std_ac_luminance_values = [\n 0x01,\n 0x02,\n 0x03,\n 0x00,\n 0x04,\n 0x11,\n 0x05,\n 0x12,\n 0x21,\n 0x31,\n 0x41,\n 0x06,\n 0x13,\n 0x51,\n 0x61,\n 0x07,\n 0x22,\n 0x71,\n 0x14,\n 0x32,\n 0x81,\n 0x91,\n 0xa1,\n 0x08,\n 0x23,\n 0x42,\n 0xb1,\n 0xc1,\n 0x15,\n 0x52,\n 0xd1,\n 0xf0,\n 0x24,\n 0x33,\n 0x62,\n 0x72,\n 0x82,\n 0x09,\n 0x0a,\n 0x16,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x25,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x34,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe1,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf1,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n var std_dc_chrominance_nrcodes = [\n 0,\n 0,\n 3,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_chrominance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 2,\n 4,\n 4,\n 3,\n 4,\n 7,\n 5,\n 4,\n 4,\n 0,\n 1,\n 2,\n 0x77\n ];\n var std_ac_chrominance_values = [\n 0x00,\n 0x01,\n 0x02,\n 0x03,\n 0x11,\n 0x04,\n 0x05,\n 0x21,\n 0x31,\n 0x06,\n 0x12,\n 0x41,\n 0x51,\n 0x07,\n 0x61,\n 0x71,\n 0x13,\n 0x22,\n 0x32,\n 0x81,\n 0x08,\n 0x14,\n 0x42,\n 0x91,\n 0xa1,\n 0xb1,\n 0xc1,\n 0x09,\n 0x23,\n 0x33,\n 0x52,\n 0xf0,\n 0x15,\n 0x62,\n 0x72,\n 0xd1,\n 0x0a,\n 0x16,\n 0x24,\n 0x34,\n 0xe1,\n 0x25,\n 0xf1,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x82,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n function initQuantTables(sf) {\n var YQT = [\n 16,\n 11,\n 10,\n 16,\n 24,\n 40,\n 51,\n 61,\n 12,\n 12,\n 14,\n 19,\n 26,\n 58,\n 60,\n 55,\n 14,\n 13,\n 16,\n 24,\n 40,\n 57,\n 69,\n 56,\n 14,\n 17,\n 22,\n 29,\n 51,\n 87,\n 80,\n 62,\n 18,\n 22,\n 37,\n 56,\n 68,\n 109,\n 103,\n 77,\n 24,\n 35,\n 55,\n 64,\n 81,\n 104,\n 113,\n 92,\n 49,\n 64,\n 78,\n 87,\n 103,\n 121,\n 120,\n 101,\n 72,\n 92,\n 95,\n 98,\n 112,\n 100,\n 103,\n 99\n ];\n\n for (var i = 0; i < 64; i++) {\n var t = ffloor((YQT[i] * sf + 50) / 100);\n t = Math.min(Math.max(t, 1), 255);\n YTable[ZigZag[i]] = t;\n }\n var UVQT = [\n 17,\n 18,\n 24,\n 47,\n 99,\n 99,\n 99,\n 99,\n 18,\n 21,\n 26,\n 66,\n 99,\n 99,\n 99,\n 99,\n 24,\n 26,\n 56,\n 99,\n 99,\n 99,\n 99,\n 99,\n 47,\n 66,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99\n ];\n for (var j = 0; j < 64; j++) {\n var u = ffloor((UVQT[j] * sf + 50) / 100);\n u = Math.min(Math.max(u, 1), 255);\n UVTable[ZigZag[j]] = u;\n }\n var aasf = [\n 1.0,\n 1.387039845,\n 1.306562965,\n 1.175875602,\n 1.0,\n 0.785694958,\n 0.5411961,\n 0.275899379\n ];\n var k = 0;\n for (var row = 0; row < 8; row++) {\n for (var col = 0; col < 8; col++) {\n fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n k++;\n }\n }\n }\n\n function computeHuffmanTbl(nrcodes, std_table) {\n var codevalue = 0;\n var pos_in_table = 0;\n var HT = new Array();\n for (var k = 1; k <= 16; k++) {\n for (var j = 1; j <= nrcodes[k]; j++) {\n HT[std_table[pos_in_table]] = [];\n HT[std_table[pos_in_table]][0] = codevalue;\n HT[std_table[pos_in_table]][1] = k;\n pos_in_table++;\n codevalue++;\n }\n codevalue *= 2;\n }\n return HT;\n }\n\n function initHuffmanTbl() {\n YDC_HT = computeHuffmanTbl(\n std_dc_luminance_nrcodes,\n std_dc_luminance_values\n );\n UVDC_HT = computeHuffmanTbl(\n std_dc_chrominance_nrcodes,\n std_dc_chrominance_values\n );\n YAC_HT = computeHuffmanTbl(\n std_ac_luminance_nrcodes,\n std_ac_luminance_values\n );\n UVAC_HT = computeHuffmanTbl(\n std_ac_chrominance_nrcodes,\n std_ac_chrominance_values\n );\n }\n\n function initCategoryNumber() {\n var nrlower = 1;\n var nrupper = 2;\n for (var cat = 1; cat <= 15; cat++) {\n //Positive numbers\n for (var nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitcode[32767 + nr] = [];\n bitcode[32767 + nr][1] = cat;\n bitcode[32767 + nr][0] = nr;\n }\n //Negative numbers\n for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitcode[32767 + nrneg] = [];\n bitcode[32767 + nrneg][1] = cat;\n bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n function initRGBYUVTable() {\n for (var i = 0; i < 256; i++) {\n RGB_YUV_TABLE[i] = 19595 * i;\n RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n }\n }\n\n // IO functions\n function writeBits(bs) {\n var value = bs[0];\n var posval = bs[1] - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) {\n bytenew |= 1 << bytepos;\n }\n posval--;\n bytepos--;\n if (bytepos < 0) {\n if (bytenew == 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(bytenew);\n }\n bytepos = 7;\n bytenew = 0;\n }\n }\n }\n\n function writeByte(value) {\n //byteout.push(clt[value]); // write char directly instead of converting later\n byteout.push(value);\n }\n\n function writeWord(value) {\n writeByte((value >> 8) & 0xff);\n writeByte(value & 0xff);\n }\n\n // DCT & quantization core\n function fDCTQuant(data, fdtbl) {\n var d0, d1, d2, d3, d4, d5, d6, d7;\n /* Pass 1: process rows. */\n var dataOff = 0;\n var i;\n var I8 = 8;\n var I64 = 64;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 1];\n d2 = data[dataOff + 2];\n d3 = data[dataOff + 3];\n d4 = data[dataOff + 4];\n d5 = data[dataOff + 5];\n d6 = data[dataOff + 6];\n d7 = data[dataOff + 7];\n\n var tmp0 = d0 + d7;\n var tmp7 = d0 - d7;\n var tmp1 = d1 + d6;\n var tmp6 = d1 - d6;\n var tmp2 = d2 + d5;\n var tmp5 = d2 - d5;\n var tmp3 = d3 + d4;\n var tmp4 = d3 - d4;\n\n /* Even part */\n var tmp10 = tmp0 + tmp3; /* phase 2 */\n var tmp13 = tmp0 - tmp3;\n var tmp11 = tmp1 + tmp2;\n var tmp12 = tmp1 - tmp2;\n\n data[dataOff] = tmp10 + tmp11; /* phase 3 */\n data[dataOff + 4] = tmp10 - tmp11;\n\n var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n data[dataOff + 6] = tmp13 - z1;\n\n /* Odd part */\n tmp10 = tmp4 + tmp5; /* phase 2 */\n tmp11 = tmp5 + tmp6;\n tmp12 = tmp6 + tmp7;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n var z3 = tmp11 * 0.707106781; /* c4 */\n\n var z11 = tmp7 + z3; /* phase 5 */\n var z13 = tmp7 - z3;\n\n data[dataOff + 5] = z13 + z2; /* phase 6 */\n data[dataOff + 3] = z13 - z2;\n data[dataOff + 1] = z11 + z4;\n data[dataOff + 7] = z11 - z4;\n\n dataOff += 8; /* advance pointer to next row */\n }\n\n /* Pass 2: process columns. */\n dataOff = 0;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 8];\n d2 = data[dataOff + 16];\n d3 = data[dataOff + 24];\n d4 = data[dataOff + 32];\n d5 = data[dataOff + 40];\n d6 = data[dataOff + 48];\n d7 = data[dataOff + 56];\n\n var tmp0p2 = d0 + d7;\n var tmp7p2 = d0 - d7;\n var tmp1p2 = d1 + d6;\n var tmp6p2 = d1 - d6;\n var tmp2p2 = d2 + d5;\n var tmp5p2 = d2 - d5;\n var tmp3p2 = d3 + d4;\n var tmp4p2 = d3 - d4;\n\n /* Even part */\n var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n var tmp13p2 = tmp0p2 - tmp3p2;\n var tmp11p2 = tmp1p2 + tmp2p2;\n var tmp12p2 = tmp1p2 - tmp2p2;\n\n data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n data[dataOff + 48] = tmp13p2 - z1p2;\n\n /* Odd part */\n tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n tmp11p2 = tmp5p2 + tmp6p2;\n tmp12p2 = tmp6p2 + tmp7p2;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n var z13p2 = tmp7p2 - z3p2;\n\n data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n data[dataOff + 24] = z13p2 - z2p2;\n data[dataOff + 8] = z11p2 + z4p2;\n data[dataOff + 56] = z11p2 - z4p2;\n\n dataOff++; /* advance pointer to next column */\n }\n\n // Quantize/descale the coefficients\n var fDCTQuant;\n for (i = 0; i < I64; ++i) {\n // Apply the quantization and scaling factor & Round to nearest integer\n fDCTQuant = data[i] * fdtbl[i];\n outputfDCTQuant[i] =\n fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n //outputfDCTQuant[i] = fround(fDCTQuant);\n }\n return outputfDCTQuant;\n }\n\n function writeAPP0() {\n writeWord(0xffe0); // marker\n writeWord(16); // length\n writeByte(0x4a); // J\n writeByte(0x46); // F\n writeByte(0x49); // I\n writeByte(0x46); // F\n writeByte(0); // = \"JFIF\",'\\0'\n writeByte(1); // versionhi\n writeByte(1); // versionlo\n writeByte(0); // xyunits\n writeWord(1); // xdensity\n writeWord(1); // ydensity\n writeByte(0); // thumbnwidth\n writeByte(0); // thumbnheight\n }\n\n function writeSOF0(width, height) {\n writeWord(0xffc0); // marker\n writeWord(17); // length, truecolor YUV JPG\n writeByte(8); // precision\n writeWord(height);\n writeWord(width);\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0x11); // HVY\n writeByte(0); // QTY\n writeByte(2); // IdU\n writeByte(0x11); // HVU\n writeByte(1); // QTU\n writeByte(3); // IdV\n writeByte(0x11); // HVV\n writeByte(1); // QTV\n }\n\n function writeDQT() {\n writeWord(0xffdb); // marker\n writeWord(132); // length\n writeByte(0);\n for (var i = 0; i < 64; i++) {\n writeByte(YTable[i]);\n }\n writeByte(1);\n for (var j = 0; j < 64; j++) {\n writeByte(UVTable[j]);\n }\n }\n\n function writeDHT() {\n writeWord(0xffc4); // marker\n writeWord(0x01a2); // length\n\n writeByte(0); // HTYDCinfo\n for (var i = 0; i < 16; i++) {\n writeByte(std_dc_luminance_nrcodes[i + 1]);\n }\n for (var j = 0; j <= 11; j++) {\n writeByte(std_dc_luminance_values[j]);\n }\n\n writeByte(0x10); // HTYACinfo\n for (var k = 0; k < 16; k++) {\n writeByte(std_ac_luminance_nrcodes[k + 1]);\n }\n for (var l = 0; l <= 161; l++) {\n writeByte(std_ac_luminance_values[l]);\n }\n\n writeByte(1); // HTUDCinfo\n for (var m = 0; m < 16; m++) {\n writeByte(std_dc_chrominance_nrcodes[m + 1]);\n }\n for (var n = 0; n <= 11; n++) {\n writeByte(std_dc_chrominance_values[n]);\n }\n\n writeByte(0x11); // HTUACinfo\n for (var o = 0; o < 16; o++) {\n writeByte(std_ac_chrominance_nrcodes[o + 1]);\n }\n for (var p = 0; p <= 161; p++) {\n writeByte(std_ac_chrominance_values[p]);\n }\n }\n\n function writeSOS() {\n writeWord(0xffda); // marker\n writeWord(12); // length\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0); // HTY\n writeByte(2); // IdU\n writeByte(0x11); // HTU\n writeByte(3); // IdV\n writeByte(0x11); // HTV\n writeByte(0); // Ss\n writeByte(0x3f); // Se\n writeByte(0); // Bf\n }\n\n function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n var EOB = HTAC[0x00];\n var M16zeroes = HTAC[0xf0];\n var pos;\n var I16 = 16;\n var I63 = 63;\n var I64 = 64;\n var DU_DCT = fDCTQuant(CDU, fdtbl);\n //ZigZag reorder\n for (var j = 0; j < I64; ++j) {\n DU[ZigZag[j]] = DU_DCT[j];\n }\n var Diff = DU[0] - DC;\n DC = DU[0];\n //Encode DC\n if (Diff == 0) {\n writeBits(HTDC[0]); // Diff might be 0\n } else {\n pos = 32767 + Diff;\n writeBits(HTDC[category[pos]]);\n writeBits(bitcode[pos]);\n }\n //Encode ACs\n var end0pos = 63; // was const... which is crazy\n while (end0pos > 0 && DU[end0pos] == 0) {\n end0pos--;\n }\n //end0pos = first element in reverse order !=0\n if (end0pos == 0) {\n writeBits(EOB);\n return DC;\n }\n var i = 1;\n var lng;\n while (i <= end0pos) {\n var startpos = i;\n while (DU[i] == 0 && i <= end0pos) {\n ++i;\n }\n var nrzeroes = i - startpos;\n if (nrzeroes >= I16) {\n lng = nrzeroes >> 4;\n for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n writeBits(M16zeroes);\n nrzeroes = nrzeroes & 0xf;\n }\n pos = 32767 + DU[i];\n writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n writeBits(bitcode[pos]);\n i++;\n }\n if (end0pos != I63) {\n writeBits(EOB);\n }\n return DC;\n }\n\n function initCharLookupTable() {\n var sfcc = String.fromCharCode;\n for (var i = 0; i < 256; i++) {\n ///// ACHTUNG // 255\n clt[i] = sfcc(i);\n }\n }\n\n this.encode = function(\n image,\n quality // image data object\n ) {\n if (quality) setQuality(quality);\n\n // Initialize bit writer\n byteout = new Array();\n bytenew = 0;\n bytepos = 7;\n\n // Add JPEG headers\n writeWord(0xffd8); // SOI\n writeAPP0();\n writeDQT();\n writeSOF0(image.width, image.height);\n writeDHT();\n writeSOS();\n\n // Encode 8x8 macroblocks\n var DCY = 0;\n var DCU = 0;\n var DCV = 0;\n\n bytenew = 0;\n bytepos = 7;\n\n this.encode.displayName = \"_encode_\";\n\n var imageData = image.data;\n var width = image.width;\n var height = image.height;\n\n var quadWidth = width * 4;\n\n var x,\n y = 0;\n var r, g, b;\n var start, p, col, row, pos;\n while (y < height) {\n x = 0;\n while (x < quadWidth) {\n start = quadWidth * y + x;\n col = -1;\n row = 0;\n\n for (pos = 0; pos < 64; pos++) {\n row = pos >> 3; // /8\n col = (pos & 7) * 4; // %8\n p = start + row * quadWidth + col;\n\n if (y + row >= height) {\n // padding bottom\n p -= quadWidth * (y + 1 + row - height);\n }\n\n if (x + col >= quadWidth) {\n // padding right\n p -= x + col - quadWidth + 4;\n }\n\n r = imageData[p++];\n g = imageData[p++];\n b = imageData[p++];\n\n /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n // use lookup table (slightly faster)\n YDU[pos] =\n ((RGB_YUV_TABLE[r] +\n RGB_YUV_TABLE[(g + 256) >> 0] +\n RGB_YUV_TABLE[(b + 512) >> 0]) >>\n 16) -\n 128;\n UDU[pos] =\n ((RGB_YUV_TABLE[(r + 768) >> 0] +\n RGB_YUV_TABLE[(g + 1024) >> 0] +\n RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n 16) -\n 128;\n VDU[pos] =\n ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n RGB_YUV_TABLE[(g + 1536) >> 0] +\n RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n 16) -\n 128;\n }\n\n DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n x += 32;\n }\n y += 8;\n }\n\n ////////////////////////////////////////////////////////////////\n\n // Do the bit alignment of the EOI marker\n if (bytepos >= 0) {\n var fillbits = [];\n fillbits[1] = bytepos + 1;\n fillbits[0] = (1 << (bytepos + 1)) - 1;\n writeBits(fillbits);\n }\n\n writeWord(0xffd9); //EOI\n\n return new Uint8Array(byteout);\n };\n\n function setQuality(quality) {\n quality = Math.min(Math.max(quality, 1), 100);\n\n if (currentQuality == quality) return; // don't recalc if unchanged\n\n var sf =\n quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n initQuantTables(sf);\n currentQuality = quality;\n //console.log('Quality set to: '+quality +'%');\n }\n\n function init() {\n quality = quality || 50;\n // Create tables\n initCharLookupTable();\n initHuffmanTbl();\n initCategoryNumber();\n initRGBYUVTable();\n\n setQuality(quality);\n }\n init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n this.pos = 0;\n this.buffer = buffer;\n this.datav = new DataView(buffer.buffer);\n this.is_with_alpha = !!is_with_alpha;\n this.bottom_up = true;\n this.flag =\n String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n this.pos += 2;\n if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n throw new Error(\"Invalid BMP File\");\n this.parseHeader();\n this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n this.fileSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.reserved = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.offset = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.headerSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.width = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.height = this.datav.getInt32(this.pos, true);\n this.pos += 4;\n this.planes = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.bitPP = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.compress = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.rawSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.hr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.vr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.colors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.importantColors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n\n if (this.bitPP === 16 && this.is_with_alpha) {\n this.bitPP = 15;\n }\n if (this.bitPP < 15) {\n var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n this.palette = new Array(len);\n for (var i = 0; i < len; i++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var quad = this.datav.getUint8(this.pos++, true);\n this.palette[i] = {\n red: red,\n green: green,\n blue: blue,\n quad: quad\n };\n }\n }\n if (this.height < 0) {\n this.height *= -1;\n this.bottom_up = false;\n }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n this.pos = this.offset;\n try {\n var bitn = \"bit\" + this.bitPP;\n var len = this.width * this.height * 4;\n this.data = new Uint8Array(len);\n\n this[bitn]();\n } catch (e) {\n console.log(\"bit decode error:\" + e);\n }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n var xlen = Math.ceil(this.width / 8);\n var mode = xlen % 4;\n var y;\n for (y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 8 * 4;\n for (var i = 0; i < 8; i++) {\n if (x * 8 + i < this.width) {\n var rgb = this.palette[(b >> (7 - i)) & 0x1];\n this.data[location + i * 4] = rgb.blue;\n this.data[location + i * 4 + 1] = rgb.green;\n this.data[location + i * 4 + 2] = rgb.red;\n this.data[location + i * 4 + 3] = 0xff;\n } else {\n break;\n }\n }\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n var xlen = Math.ceil(this.width / 2);\n var mode = xlen % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 2 * 4;\n\n var before = b >> 4;\n var after = b & 0x0f;\n\n var rgb = this.palette[before];\n this.data[location] = rgb.blue;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.red;\n this.data[location + 3] = 0xff;\n\n if (x * 2 + 1 >= this.width) break;\n\n rgb = this.palette[after];\n this.data[location + 4] = rgb.blue;\n this.data[location + 4 + 1] = rgb.green;\n this.data[location + 4 + 2] = rgb.red;\n this.data[location + 4 + 3] = 0xff;\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n var mode = this.width % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n if (b < this.palette.length) {\n var rgb = this.palette[b];\n this.data[location] = rgb.red;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.blue;\n this.data[location + 3] = 0xff;\n } else {\n this.data[location] = 0xff;\n this.data[location + 1] = 0xff;\n this.data[location + 2] = 0xff;\n this.data[location + 3] = 0xff;\n }\n }\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n var alpha = B >> 15 ? 0xff : 0x00;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n var _111111 = parseInt(\"111111\", 2),\n _1_6 = _111111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var alpha = 0xff;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n var red = (((B >> 11) / _1_5) * 255) | 0;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = 0xff;\n }\n //skip extra bytes\n this.pos += this.width % 4;\n }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var alpha = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n //this.pos += (this.width % 4);\n }\n};\n\nBmpDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { BmpDecoder };\n","function WebPDecoder(imageData) {\n /** @license\n * Copyright 2011 Google Inc.\n *\n * This code is licensed under the same terms as WebM:\n * Software License Agreement: http://www.webmproject.org/license/software/\n * Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n * -----------------------------------------------------------------------------\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -----------------------------------------------------------------------------\n *\n * Copyright 2011-2017 Dominik Homberger\n * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n *\n * Author: Dominik Homberger (dominik.homberger@gmail.com)\n */\n\n var self = this;\n var UpsampleRgbLinePair,\n UpsampleBgrLinePair,\n UpsampleRgbaLinePair,\n UpsampleBgraLinePair,\n UpsampleArgbLinePair,\n UpsampleArgbLinePair,\n UpsampleRgba4444LinePair,\n UpsampleRgb565LinePair;\n\n function x(F) {\n if (!F) throw Error(\"assert :P\");\n }\n function fa(F, L, J) {\n for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n return !1;\n }\n function I(F, L, J, H, Z) {\n for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n }\n function M(F, L, J, H) {\n for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n }\n function V(F) {\n return new Int32Array(F);\n }\n function wa(F, L) {\n for (var J = [], H = 0; H < F; H++) J.push(new L());\n return J;\n }\n function wb() {\n function F(J, H, Z) {\n for (var O = Z[H], L = 0; L < O; L++) {\n J.push(Z.length > H + 1 ? [] : 0);\n if (Z.length < H + 1) break;\n F(J[L], H + 1, Z);\n }\n }\n var L = [];\n F(L, 0, [3, 11]);\n return L;\n }\n function Ed(F, L) {\n function J(H, O, F) {\n for (var Z = F[O], ma = 0; ma < Z; ma++) {\n H.push(F.length > O + 1 ? [] : new L());\n if (F.length < O + 1) break;\n J(H[ma], O + 1, F);\n }\n }\n var H = [];\n J(H, 0, F);\n return H;\n }\n var _WebPDecoder = function() {\n var self = this;\n function F() {\n V(55);\n }\n function L(a, b) {\n for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n return c ? (a & (c - 1)) + c : a;\n }\n function J(a, b, c, d, e) {\n x(!(d % c));\n do (d -= c), (a[b + d] = e);\n while (0 < d);\n }\n function H(a, b, c, d, e, f) {\n var g = b,\n h = 1 << c,\n k,\n l,\n m = V(16),\n n = V(16);\n x(0 != e);\n x(null != d);\n x(null != a);\n x(0 < c);\n for (l = 0; l < e; ++l) {\n if (15 < d[l]) return 0;\n ++m[d[l]];\n }\n if (m[0] == e) return 0;\n n[1] = 0;\n for (k = 1; 15 > k; ++k) {\n if (m[k] > 1 << k) return 0;\n n[k + 1] = n[k] + m[k];\n }\n for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n if (1 == n[15])\n return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n var r = -1,\n q = h - 1,\n t = 0,\n v = 1,\n p = 1,\n u,\n w = 1 << c;\n l = 0;\n k = 1;\n for (e = 2; k <= c; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k])\n (d = new O()),\n (d.g = k),\n (d.value = f[l++]),\n J(a, g + t, e, w, d),\n (t = L(t, k));\n }\n k = c + 1;\n for (e = 2; 15 >= k; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k]) {\n d = new O();\n if ((t & q) != r) {\n g += w;\n r = k;\n for (u = 1 << (r - c); 15 > r; ) {\n u -= m[r];\n if (0 >= u) break;\n ++r;\n u <<= 1;\n }\n u = r - c;\n w = 1 << u;\n h += w;\n r = t & q;\n a[b + r].g = u + c;\n a[b + r].value = g - b - r;\n }\n d.g = k - c;\n d.value = f[l++];\n J(a, g + (t >> c), e, w, d);\n t = L(t, k);\n }\n }\n return v != 2 * n[15] - 1 ? 0 : h;\n }\n function Z(a, b, c, d, e) {\n x(2328 >= e);\n if (512 >= e) var f = V(512);\n else if (((f = V(e)), null == f)) return 0;\n return H(a, b, c, d, e, f);\n }\n function O() {\n this.value = this.g = 0;\n }\n function Fd() {\n this.value = this.g = 0;\n }\n function Ub() {\n this.G = wa(5, O);\n this.H = V(5);\n this.jc = this.Qb = this.qb = this.nd = 0;\n this.pd = wa(xb, Fd);\n }\n function ma(a, b, c, d) {\n x(null != a);\n x(null != b);\n x(2147483648 > d);\n a.Ca = 254;\n a.I = 0;\n a.b = -8;\n a.Ka = 0;\n a.oa = b;\n a.pa = c;\n a.Jd = b;\n a.Yc = c + d;\n a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n Qa(a);\n }\n function na(a, b) {\n for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n return c;\n }\n function ca(a, b) {\n var c = na(a, b);\n return G(a) ? -c : c;\n }\n function cb(a, b, c, d) {\n var e,\n f = 0;\n x(null != a);\n x(null != b);\n x(4294967288 > d);\n a.Sb = d;\n a.Ra = 0;\n a.u = 0;\n a.h = 0;\n 4 < d && (d = 4);\n for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n a.Ra = f;\n a.bb = d;\n a.oa = b;\n a.pa = c;\n }\n function Vb(a) {\n for (; 8 <= a.u && a.bb < a.Sb; )\n (a.Ra >>>= 8),\n (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n ++a.bb,\n (a.u -= 8);\n db(a) && ((a.h = 1), (a.u = 0));\n }\n function D(a, b) {\n x(0 <= b);\n if (!a.h && b <= Gd) {\n var c = pb(a) & Hd[b];\n a.u += b;\n Vb(a);\n return c;\n }\n a.h = 1;\n return (a.u = 0);\n }\n function Wb() {\n this.b = this.Ca = this.I = 0;\n this.oa = [];\n this.pa = 0;\n this.Jd = [];\n this.Yc = 0;\n this.Zc = [];\n this.Ka = 0;\n }\n function Ra() {\n this.Ra = 0;\n this.oa = [];\n this.h = this.u = this.bb = this.Sb = this.pa = 0;\n }\n function pb(a) {\n return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n }\n function db(a) {\n x(a.bb <= a.Sb);\n return a.h || (a.bb == a.Sb && a.u > ob);\n }\n function qb(a, b) {\n a.u = b;\n a.h = db(a);\n }\n function Sa(a) {\n a.u >= Xb && (x(a.u >= Xb), Vb(a));\n }\n function Qa(a) {\n x(null != a && null != a.oa);\n a.pa < a.Zc\n ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n : (x(null != a && null != a.oa),\n a.pa < a.Yc\n ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n : a.Ka\n ? (a.b = 0)\n : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n }\n function G(a) {\n return na(a, 1);\n }\n function K(a, b) {\n var c = a.Ca;\n 0 > a.b && Qa(a);\n var d = a.b,\n e = (c * b) >>> 8,\n f = (a.I >>> d > e) + 0;\n f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n d = c;\n for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n d = 7 ^ (e + Id[d]);\n a.b -= d;\n a.Ca = (c << d) - 1;\n return f;\n }\n function ra(a, b, c) {\n a[b + 0] = (c >> 24) & 255;\n a[b + 1] = (c >> 16) & 255;\n a[b + 2] = (c >> 8) & 255;\n a[b + 3] = (c >> 0) & 255;\n }\n function Ta(a, b) {\n return (a[b + 0] << 0) | (a[b + 1] << 8);\n }\n function Yb(a, b) {\n return Ta(a, b) | (a[b + 2] << 16);\n }\n function Ha(a, b) {\n return Ta(a, b) | (Ta(a, b + 2) << 16);\n }\n function Zb(a, b) {\n var c = 1 << b;\n x(null != a);\n x(0 < b);\n a.X = V(c);\n if (null == a.X) return 0;\n a.Mb = 32 - b;\n a.Xa = b;\n return 1;\n }\n function $b(a, b) {\n x(null != a);\n x(null != b);\n x(a.Xa == b.Xa);\n I(b.X, 0, a.X, 0, 1 << b.Xa);\n }\n function ac() {\n this.X = [];\n this.Xa = this.Mb = 0;\n }\n function bc(a, b, c, d) {\n x(null != c);\n x(null != d);\n var e = c[0],\n f = d[0];\n 0 == e && (e = (a * f + b / 2) / b);\n 0 == f && (f = (b * e + a / 2) / a);\n if (0 >= e || 0 >= f) return 0;\n c[0] = e;\n d[0] = f;\n return 1;\n }\n function xa(a, b) {\n return (a + (1 << b) - 1) >>> b;\n }\n function yb(a, b) {\n return (\n (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n 0\n );\n }\n function X(a, b) {\n self[b] = function(b, d, e, f, g, h, k) {\n var c;\n for (c = 0; c < g; ++c) {\n var m = self[a](h[k + c - 1], e, f + c);\n h[k + c] = yb(b[d + c], m);\n }\n };\n }\n function Jd() {\n this.ud = this.hd = this.jd = 0;\n }\n function aa(a, b) {\n return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n }\n function sa(a) {\n if (0 <= a && 256 > a) return a;\n if (0 > a) return 0;\n if (255 < a) return 255;\n }\n function eb(a, b) {\n return sa(a + ((a - b + 0.5) >> 1));\n }\n function Ia(a, b, c) {\n return Math.abs(b - c) - Math.abs(a - c);\n }\n function cc(a, b, c, d, e, f, g) {\n d = f[g - 1];\n for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n }\n function Kd(a, b, c, d, e) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + f],\n h = (g >> 8) & 255,\n k = g & 16711935,\n k = k + ((h << 16) + h),\n k = k & 16711935;\n d[e + f] = ((g & 4278255360) + k) >>> 0;\n }\n }\n function dc(a, b) {\n b.jd = (a >> 0) & 255;\n b.hd = (a >> 8) & 255;\n b.ud = (a >> 16) & 255;\n }\n function Ld(a, b, c, d, e, f) {\n var g;\n for (g = 0; g < d; ++g) {\n var h = b[c + g],\n k = h >>> 8,\n l = h >>> 16,\n m = h,\n l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n l = l & 255,\n m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n m = m & 255;\n e[f + g] = (h & 4278255360) + (l << 16) + m;\n }\n }\n function ec(a, b, c, d, e) {\n self[b] = function(a, b, c, k, l, m, n, r, q) {\n for (k = n; k < r; ++k)\n for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n };\n self[a] = function(a, b, h, k, l, m, n) {\n var f = 8 >> a.b,\n g = a.Ea,\n t = a.K[0],\n v = a.w;\n if (8 > f)\n for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n var p = 0,\n u;\n for (u = 0; u < g; ++u)\n u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n }\n else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n };\n }\n function Md(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n }\n }\n function Nd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 24) & 255;\n }\n }\n function Od(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 240) | ((f >> 12) & 15),\n f = ((f >> 0) & 240) | ((f >> 28) & 15);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Pd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 248) | ((f >> 13) & 7),\n f = ((f >> 5) & 224) | ((f >> 3) & 31);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Qd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 16) & 255;\n }\n }\n function fb(a, b, c, d, e, f) {\n if (0 == f)\n for (c = b + c; b < c; )\n (f = a[b++]),\n ra(\n d,\n ((f[0] >> 24) |\n ((f[1] >> 8) & 65280) |\n ((f[2] << 8) & 16711680) |\n (f[3] << 24)) >>>\n 0\n ),\n (e += 32);\n else I(d, e, a, b, c);\n }\n function gb(a, b) {\n self[b][0] = self[a + \"0\"];\n self[b][1] = self[a + \"1\"];\n self[b][2] = self[a + \"2\"];\n self[b][3] = self[a + \"3\"];\n self[b][4] = self[a + \"4\"];\n self[b][5] = self[a + \"5\"];\n self[b][6] = self[a + \"6\"];\n self[b][7] = self[a + \"7\"];\n self[b][8] = self[a + \"8\"];\n self[b][9] = self[a + \"9\"];\n self[b][10] = self[a + \"10\"];\n self[b][11] = self[a + \"11\"];\n self[b][12] = self[a + \"12\"];\n self[b][13] = self[a + \"13\"];\n self[b][14] = self[a + \"0\"];\n self[b][15] = self[a + \"0\"];\n }\n function hb(a) {\n return a == zb || a == Ab || a == Ja || a == Bb;\n }\n function Rd() {\n this.eb = [];\n this.size = this.A = this.fb = 0;\n }\n function Sd() {\n this.y = [];\n this.f = [];\n this.ea = [];\n this.F = [];\n this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n }\n function Cb() {\n this.Rd = this.height = this.width = this.S = 0;\n this.f = {};\n this.f.RGBA = new Rd();\n this.f.kb = new Sd();\n this.sd = null;\n }\n function Td() {\n this.width = [0];\n this.height = [0];\n this.Pd = [0];\n this.Qd = [0];\n this.format = [0];\n }\n function Ud() {\n this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n }\n function Vd(a) {\n alert(\"todo:WebPSamplerProcessPlane\");\n return a.T;\n }\n function Wd(a, b) {\n var c = a.T,\n d = b.ba.f.RGBA,\n e = d.eb,\n f = d.fb + a.ka * d.A,\n g = P[b.ba.S],\n h = a.y,\n k = a.O,\n l = a.f,\n m = a.N,\n n = a.ea,\n r = a.W,\n q = b.cc,\n t = b.dc,\n v = b.Mc,\n p = b.Nc,\n u = a.ka,\n w = a.ka + a.T,\n y = a.U,\n A = (y + 1) >> 1;\n 0 == u\n ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n ++c);\n for (; u + 2 < w; u += 2)\n (q = l),\n (t = m),\n (v = n),\n (p = r),\n (m += a.Rc),\n (r += a.Rc),\n (f += 2 * d.A),\n (k += 2 * a.fa),\n g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n k += a.fa;\n a.j + w < a.o\n ? (I(b.ec, b.fc, h, k, y),\n I(b.cc, b.dc, l, m, A),\n I(b.Mc, b.Nc, n, r, A),\n c--)\n : w & 1 ||\n g(\n h,\n k,\n null,\n null,\n l,\n m,\n n,\n r,\n l,\n m,\n n,\n r,\n e,\n f + d.A,\n null,\n null,\n y\n );\n return c;\n }\n function Xd(a, b, c) {\n var d = a.F,\n e = [a.J];\n if (null != d) {\n var f = a.U,\n g = b.ba.S,\n h = g == ya || g == Ja;\n b = b.ba.f.RGBA;\n var k = [0],\n l = a.ka;\n k[0] = a.T;\n a.Kb &&\n (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n var m = b.eb,\n l = b.fb + l * b.A;\n a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n x(c == k);\n a && hb(g) && za(m, l, h, f, k, b.A);\n }\n return 0;\n }\n function gc(a) {\n var b = a.ma,\n c = b.ba.S,\n d = 11 > c,\n e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n b.memory = null;\n b.Ib = null;\n b.Jb = null;\n b.Nd = null;\n if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n e && hb(c) && ic();\n if (a.da) alert(\"todo:use_scaling\");\n else {\n if (d) {\n if (((b.Ib = Vd), a.Kb)) {\n c = (a.U + 1) >> 1;\n b.memory = V(a.U + 2 * c);\n if (null == b.memory) return 0;\n b.ec = b.memory;\n b.fc = 0;\n b.cc = b.ec;\n b.dc = b.fc + a.U;\n b.Mc = b.cc;\n b.Nc = b.dc + c;\n b.Ib = Wd;\n ic();\n }\n } else alert(\"todo:EmitYUV\");\n e && ((b.Jb = Xd), d && Aa());\n }\n if (d && !jc) {\n for (a = 0; 256 > a; ++a)\n (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n (Zd[a] = -22014 * (a - 128) + Ba),\n ($d[a] = -45773 * (a - 128)),\n (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n for (a = ta; a < Eb; ++a)\n (b = (76283 * (a - 16) + Ba) >> Wa),\n (be[a - ta] = ga(b, 255)),\n (ce[a - ta] = ga((b + 8) >> 4, 15));\n jc = 1;\n }\n return 1;\n }\n function kc(a) {\n var b = a.ma,\n c = a.U,\n d = a.T;\n x(!(a.ka & 1));\n if (0 >= c || 0 >= d) return 0;\n c = b.Ib(a, b);\n null != b.Jb && b.Jb(a, b, c);\n b.Dc += c;\n return 1;\n }\n function lc(a) {\n a.ma.memory = null;\n }\n function mc(a, b, c, d) {\n if (47 != D(a, 8)) return 0;\n b[0] = D(a, 14) + 1;\n c[0] = D(a, 14) + 1;\n d[0] = D(a, 1);\n return 0 != D(a, 3) ? 0 : !a.h;\n }\n function ib(a, b) {\n if (4 > a) return a + 1;\n var c = (a - 2) >> 1;\n return ((2 + (a & 1)) << c) + D(b, c) + 1;\n }\n function nc(a, b) {\n if (120 < b) return b - 120;\n var c = de[b - 1],\n c = (c >> 4) * a + (8 - (c & 15));\n return 1 <= c ? c : 1;\n }\n function ua(a, b, c) {\n var d = pb(c);\n b += d & 255;\n var e = a[b].g - 8;\n 0 < e &&\n (qb(c, c.u + 8),\n (d = pb(c)),\n (b += a[b].value),\n (b += d & ((1 << e) - 1)));\n qb(c, c.u + a[b].g);\n return a[b].value;\n }\n function ub(a, b, c) {\n c.g += a.g;\n c.value += (a.value << b) >>> 0;\n x(8 >= c.g);\n return a.g;\n }\n function ha(a, b, c) {\n var d = a.xc;\n b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n x(b < a.Wb);\n return a.Ya[b];\n }\n function oc(a, b, c, d) {\n var e = a.ab,\n f = a.c * b,\n g = a.C;\n b = g + b;\n var h = c,\n k = d;\n d = a.Ta;\n for (c = a.Ua; 0 < e--; ) {\n var l = a.gc[e],\n m = g,\n n = b,\n r = h,\n q = k,\n k = d,\n h = c,\n t = l.Ea;\n x(m < n);\n x(n <= l.nc);\n switch (l.hc) {\n case 2:\n pc(r, q, (n - m) * t, k, h);\n break;\n case 0:\n var v = l,\n p = m,\n u = n,\n w = k,\n y = h,\n A = v.Ea;\n 0 == p &&\n (ee(r, q, null, null, 1, w, y),\n cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n (q += A),\n (y += A),\n ++p);\n for (\n var E = 1 << v.b,\n B = E - 1,\n C = xa(A, v.b),\n N = v.K,\n v = v.w + (p >> v.b) * C;\n p < u;\n\n ) {\n var z = N,\n Q = v,\n S = 1;\n for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n var K = qc[(z[Q++] >> 8) & 15],\n D = (S & ~B) + E;\n D > A && (D = A);\n K(r, q + +S, w, y + S - A, D - S, w, y + S);\n S = D;\n }\n q += A;\n y += A;\n ++p;\n p & B || (v += C);\n }\n n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n break;\n case 1:\n t = r;\n u = q;\n r = l.Ea;\n q = 1 << l.b;\n w = q - 1;\n y = r & ~w;\n A = r - y;\n p = xa(r, l.b);\n E = l.K;\n for (l = l.w + (m >> l.b) * p; m < n; ) {\n B = E;\n C = l;\n N = new Jd();\n v = u + y;\n for (z = u + r; u < v; )\n dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n u < z &&\n (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n ++m;\n m & w || (l += p);\n }\n break;\n case 3:\n if (r == k && q == h && 0 < l.b) {\n y = (n - m) * xa(l.Ea, l.b);\n t = h + (n - m) * t - y;\n u = k;\n r = t;\n q = k;\n w = h;\n A = y;\n p = [];\n for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n rc(l, m, n, k, t, k, h);\n } else rc(l, m, n, r, q, k, h);\n }\n h = d;\n k = c;\n }\n k != c && I(d, c, h, k, f);\n }\n function ge(a, b) {\n var c = a.V,\n d = a.Ba + a.c * a.C,\n e = b - a.C;\n x(b <= a.l.o);\n x(16 >= e);\n if (0 < e) {\n var f = a.l,\n g = a.Ta,\n h = a.Ua,\n k = f.width;\n oc(a, e, c, d);\n h = [h];\n c = a.C;\n d = b;\n e = h;\n x(c < d);\n x(f.v < f.va);\n d > f.o && (d = f.o);\n if (c < f.j) {\n var l = f.j - c,\n c = f.j;\n e[0] += l * k;\n }\n c >= d\n ? (c = 0)\n : ((e[0] += 4 * f.v),\n (f.ka = c - f.j),\n (f.U = f.va - f.v),\n (f.T = d - c),\n (c = 1));\n if (c) {\n h = h[0];\n c = a.ca;\n if (11 > c.S) {\n for (\n var m = c.f.RGBA,\n d = c.S,\n e = f.U,\n f = f.T,\n l = m.eb,\n n = m.A,\n r = f,\n m = m.fb + a.Ma * m.A;\n 0 < r--;\n\n ) {\n var q = g,\n t = h,\n v = e,\n p = l,\n u = m;\n switch (d) {\n case Ca:\n sc(q, t, v, p, u);\n break;\n case Ua:\n Gb(q, t, v, p, u);\n break;\n case zb:\n Gb(q, t, v, p, u);\n za(p, u, 0, v, 1, 0);\n break;\n case tc:\n uc(q, t, v, p, u);\n break;\n case Va:\n fb(q, t, v, p, u, 1);\n break;\n case Ab:\n fb(q, t, v, p, u, 1);\n za(p, u, 0, v, 1, 0);\n break;\n case ya:\n fb(q, t, v, p, u, 0);\n break;\n case Ja:\n fb(q, t, v, p, u, 0);\n za(p, u, 1, v, 1, 0);\n break;\n case Db:\n Hb(q, t, v, p, u);\n break;\n case Bb:\n Hb(q, t, v, p, u);\n vc(p, u, v, 1, 0);\n break;\n case wc:\n xc(q, t, v, p, u);\n break;\n default:\n x(0);\n }\n h += k;\n m += n;\n }\n a.Ma += f;\n } else alert(\"todo:EmitRescaledRowsYUVA\");\n x(a.Ma <= c.height);\n }\n }\n a.C = b;\n x(a.C <= a.i);\n }\n function yc(a) {\n var b;\n if (0 < a.ua) return 0;\n for (b = 0; b < a.Wb; ++b) {\n var c = a.Ya[b].G,\n d = a.Ya[b].H;\n if (\n 0 < c[1][d[1] + 0].g ||\n 0 < c[2][d[2] + 0].g ||\n 0 < c[3][d[3] + 0].g\n )\n return 0;\n }\n return 1;\n }\n function zc(a, b, c, d, e, f) {\n if (0 != a.Z) {\n var g = a.qd,\n h = a.rd;\n for (x(null != ia[a.Z]); b < c; ++b)\n ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n a.qd = g;\n a.rd = h;\n }\n }\n function Ib(a, b) {\n var c = a.l.ma,\n d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n d = a.C < d ? d : a.C;\n x(b <= a.l.o);\n if (b > d) {\n var e = a.l.width,\n f = c.ca,\n g = c.tb + e * d,\n h = a.V,\n k = a.Ba + a.c * d,\n l = a.gc;\n x(1 == a.ab);\n x(3 == l[0].hc);\n he(l[0], d, b, h, k, f, g);\n zc(c, d, b, f, g, e);\n }\n a.C = a.Ma = b;\n }\n function Jb(a, b, c, d, e, f, g) {\n var h = a.$ / d,\n k = a.$ % d,\n l = a.m,\n m = a.s,\n n = c + a.$,\n r = n;\n e = c + d * e;\n var q = c + d * f,\n t = 280 + m.ua,\n v = a.Pb ? h : 16777216,\n p = 0 < m.ua ? m.Wa : null,\n u = m.wc,\n w = n < q ? ha(m, k, h) : null;\n x(a.C < f);\n x(q <= e);\n var y = !1;\n a: for (;;) {\n for (; y || n < q; ) {\n var A = 0;\n if (h >= v) {\n var v = a,\n E = n - c;\n x(v.Pb);\n v.wd = v.m;\n v.xd = E;\n 0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n v = h + ie;\n }\n k & u || (w = ha(m, k, h));\n x(null != w);\n w.Qb && ((b[n] = w.qb), (y = !0));\n if (!y)\n if ((Sa(l), w.jc)) {\n var A = l,\n E = b,\n B = n,\n C = w.pd[pb(A) & (xb - 1)];\n x(w.jc);\n 256 > C.g\n ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n 0 == A && (y = !0);\n } else A = ua(w.G[0], w.H[0], l);\n if (l.h) break;\n if (y || 256 > A) {\n if (!y)\n if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n else {\n Sa(l);\n y = ua(w.G[1], w.H[1], l);\n Sa(l);\n E = ua(w.G[2], w.H[2], l);\n B = ua(w.G[3], w.H[3], l);\n if (l.h) break;\n b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n }\n y = !1;\n ++n;\n ++k;\n if (\n k >= d &&\n ((k = 0),\n ++h,\n null != g && h <= f && !(h % 16) && g(a, h),\n null != p)\n )\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (280 > A) {\n A = ib(A - 256, l);\n E = ua(w.G[4], w.H[4], l);\n Sa(l);\n E = ib(E, l);\n E = nc(d, E);\n if (l.h) break;\n if (n - c < E || e - n < A) break a;\n else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n n += A;\n for (k += A; k >= d; )\n (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n x(n <= e);\n k & u && (w = ha(m, k, h));\n if (null != p)\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (A < t) {\n y = A - 280;\n for (x(null != p); r < n; )\n (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n A = n;\n E = p;\n x(!(y >>> E.Xa));\n b[A] = E.X[y];\n y = !0;\n } else break a;\n y || x(l.h == db(l));\n }\n if (a.Pb && l.h && n < e)\n x(a.m.h),\n (a.a = 5),\n (a.m = a.wd),\n (a.$ = a.xd),\n 0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n else if (l.h) break a;\n else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n return 1;\n }\n a.a = 3;\n return 0;\n }\n function Ac(a) {\n x(null != a);\n a.vc = null;\n a.yc = null;\n a.Ya = null;\n var b = a.Wa;\n null != b && (b.X = null);\n a.vb = null;\n x(null != a);\n }\n function Bc() {\n var a = new je();\n if (null == a) return null;\n a.a = 0;\n a.xb = Cc;\n gb(\"Predictor\", \"VP8LPredictors\");\n gb(\"Predictor\", \"VP8LPredictors_C\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n pc = Kd;\n Fb = Ld;\n sc = Md;\n Gb = Nd;\n Hb = Od;\n xc = Pd;\n uc = Qd;\n self.VP8LMapColor32b = ke;\n self.VP8LMapColor8b = le;\n return a;\n }\n function rb(a, b, c, d, e) {\n var f = 1,\n g = [a],\n h = [b],\n k = d.m,\n l = d.s,\n m = null,\n n = 0;\n a: for (;;) {\n if (c)\n for (; f && D(k, 1); ) {\n var r = g,\n q = h,\n t = d,\n v = 1,\n p = t.m,\n u = t.gc[t.ab],\n w = D(p, 2);\n if (t.Oc & (1 << w)) f = 0;\n else {\n t.Oc |= 1 << w;\n u.hc = w;\n u.Ea = r[0];\n u.nc = q[0];\n u.K = [null];\n ++t.ab;\n x(4 >= t.ab);\n switch (w) {\n case 0:\n case 1:\n u.b = D(p, 3) + 2;\n v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n u.K = u.K[0];\n break;\n case 3:\n var y = D(p, 8) + 1,\n A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n r[0] = xa(u.Ea, A);\n u.b = A;\n var v = rb(y, 1, 0, t, u.K),\n E;\n if ((E = v)) {\n var B,\n C = y,\n N = u,\n z = 1 << (8 >> N.b),\n Q = V(z);\n if (null == Q) E = 0;\n else {\n var S = N.K[0],\n K = N.w;\n Q[0] = N.K[0][0];\n for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n for (; B < 4 * z; ++B) Q[B] = 0;\n N.K[0] = null;\n N.K[0] = Q;\n E = 1;\n }\n }\n v = E;\n break;\n case 2:\n break;\n default:\n x(0);\n }\n f = v;\n }\n }\n g = g[0];\n h = h[0];\n if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n d.a = 3;\n break a;\n }\n var H;\n if ((H = f))\n b: {\n var F = d,\n G = g,\n L = h,\n J = n,\n T = c,\n Da,\n ba,\n X = F.m,\n R = F.s,\n P = [null],\n U,\n W = 1,\n aa = 0,\n na = me[J];\n c: for (;;) {\n if (T && D(X, 1)) {\n var ca = D(X, 3) + 2,\n ga = xa(G, ca),\n ka = xa(L, ca),\n qa = ga * ka;\n if (!rb(ga, ka, 0, F, P)) break c;\n P = P[0];\n R.xc = ca;\n for (Da = 0; Da < qa; ++Da) {\n var ia = (P[Da] >> 8) & 65535;\n P[Da] = ia;\n ia >= W && (W = ia + 1);\n }\n }\n if (X.h) break c;\n for (ba = 0; 5 > ba; ++ba) {\n var Y = Dc[ba];\n !ba && 0 < J && (Y += 1 << J);\n aa < Y && (aa = Y);\n }\n var ma = wa(W * na, O);\n var ua = W,\n va = wa(ua, Ub);\n if (null == va) var la = null;\n else x(65536 >= ua), (la = va);\n var ha = V(aa);\n if (null == la || null == ha || null == ma) {\n F.a = 1;\n break c;\n }\n var pa = ma;\n for (Da = U = 0; Da < W; ++Da) {\n var ja = la[Da],\n da = ja.G,\n ea = ja.H,\n Fa = 0,\n ra = 1,\n Ha = 0;\n for (ba = 0; 5 > ba; ++ba) {\n Y = Dc[ba];\n da[ba] = pa;\n ea[ba] = U;\n !ba && 0 < J && (Y += 1 << J);\n d: {\n var sa,\n za = Y,\n ta = F,\n oa = ha,\n db = pa,\n eb = U,\n Ia = 0,\n Ka = ta.m,\n fb = D(Ka, 1);\n M(oa, 0, 0, za);\n if (fb) {\n var gb = D(Ka, 1) + 1,\n hb = D(Ka, 1),\n Ja = D(Ka, 0 == hb ? 1 : 8);\n oa[Ja] = 1;\n 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n var ya = 1;\n } else {\n var Ua = V(19),\n Va = D(Ka, 4) + 4;\n if (19 < Va) {\n ta.a = 3;\n var Aa = 0;\n break d;\n }\n for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n var Ba = void 0,\n sb = void 0,\n Wa = ta,\n ib = Ua,\n Ca = za,\n Xa = oa,\n Oa = 0,\n La = Wa.m,\n Ya = 8,\n Za = wa(128, O);\n e: for (;;) {\n if (!Z(Za, 0, 7, ib, 19)) break e;\n if (D(La, 1)) {\n var kb = 2 + 2 * D(La, 3),\n Ba = 2 + D(La, kb);\n if (Ba > Ca) break e;\n } else Ba = Ca;\n for (sb = 0; sb < Ca && Ba--; ) {\n Sa(La);\n var $a = Za[0 + (pb(La) & 127)];\n qb(La, La.u + $a.g);\n var jb = $a.value;\n if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n else {\n var lb = 16 == jb,\n ab = jb - 16,\n mb = oe[ab],\n bb = D(La, pe[ab]) + mb;\n if (sb + bb > Ca) break e;\n else\n for (var nb = lb ? Ya : 0; 0 < bb--; )\n Xa[sb++] = nb;\n }\n }\n Oa = 1;\n break e;\n }\n Oa || (Wa.a = 3);\n ya = Oa;\n }\n (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n }\n if (0 == Aa) break c;\n ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n Fa += pa[U].g;\n U += Aa;\n if (3 >= ba) {\n var Pa = ha[0],\n tb;\n for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n Ha += Pa;\n }\n }\n ja.nd = ra;\n ja.Qb = 0;\n ra &&\n ((ja.qb =\n ((da[3][ea[3] + 0].value << 24) |\n (da[1][ea[1] + 0].value << 16) |\n da[2][ea[2] + 0].value) >>>\n 0),\n 0 == Fa &&\n 256 > da[0][ea[0] + 0].value &&\n ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n ja.jc = !ja.Qb && 6 > Ha;\n if (ja.jc) {\n var Ga,\n Ea = ja;\n for (Ga = 0; Ga < xb; ++Ga) {\n var Ma = Ga,\n Na = Ea.pd[Ma],\n vb = Ea.G[0][Ea.H[0] + Ma];\n 256 <= vb.value\n ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n : ((Na.g = 0),\n (Na.value = 0),\n (Ma >>= ub(vb, 8, Na)),\n (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n }\n }\n }\n R.vc = P;\n R.Wb = W;\n R.Ya = la;\n R.yc = ma;\n H = 1;\n break b;\n }\n H = 0;\n }\n f = H;\n if (!f) {\n d.a = 3;\n break a;\n }\n if (0 < n) {\n if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n d.a = 1;\n f = 0;\n break a;\n }\n } else l.ua = 0;\n var Qa = d,\n cb = g,\n ob = h,\n Ra = Qa.s,\n Ta = Ra.xc;\n Qa.c = cb;\n Qa.i = ob;\n Ra.md = xa(cb, Ta);\n Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n if (c) {\n d.xb = re;\n break a;\n }\n m = V(g * h);\n if (null == m) {\n d.a = 1;\n f = 0;\n break a;\n }\n f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n break a;\n }\n f\n ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n : Ac(l);\n return f;\n }\n function Ec(a, b) {\n var c = a.c * a.i,\n d = c + b + 16 * b;\n x(a.c <= b);\n a.V = V(d);\n if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n a.Ta = a.V;\n a.Ua = a.Ba + c + b;\n return 1;\n }\n function se(a, b) {\n var c = a.C,\n d = b - c,\n e = a.V,\n f = a.Ba + a.c * c;\n for (x(b <= a.l.o); 0 < d; ) {\n var g = 16 < d ? 16 : d,\n h = a.l.ma,\n k = a.l.width,\n l = k * g,\n m = h.ca,\n n = h.tb + k * c,\n r = a.Ta,\n q = a.Ua;\n oc(a, g, e, f);\n Fc(r, q, m, n, l);\n zc(h, c, c + g, m, n, k);\n d -= g;\n e += g * a.c;\n c += g;\n }\n x(c == b);\n a.C = a.Ma = b;\n }\n function te(a, b) {\n var c = [0],\n d = [0],\n e = [0];\n a: for (;;) {\n if (null == a) return 0;\n if (null == b) return (a.a = 2), 0;\n a.l = b;\n a.a = 0;\n cb(a.m, b.data, b.w, b.ha);\n if (!mc(a.m, c, d, e)) {\n a.a = 3;\n break a;\n }\n a.xb = Cc;\n b.width = c[0];\n b.height = d[0];\n if (!rb(c[0], d[0], 1, a, null)) break a;\n return 1;\n }\n x(0 != a.a);\n return 0;\n }\n function ue() {\n this.ub = this.yd = this.td = this.Rb = 0;\n }\n function ve() {\n this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n }\n function we() {\n this.Fb = this.Bb = this.Cb = 0;\n this.Zb = V(4);\n this.Lb = V(4);\n }\n function Gc() {\n this.Yb = wb();\n }\n function xe() {\n this.jb = V(3);\n this.Wc = Ed([4, 8], Gc);\n this.Xc = Ed([4, 17], Gc);\n }\n function ye() {\n this.Pc = this.wb = this.Tb = this.zd = 0;\n this.vd = new V(4);\n this.od = new V(4);\n }\n function Xa() {\n this.ld = this.La = this.dd = this.tc = 0;\n }\n function Hc() {\n this.Na = this.la = 0;\n }\n function ze() {\n this.Sc = [0, 0];\n this.Eb = [0, 0];\n this.Qc = [0, 0];\n this.ia = this.lc = 0;\n }\n function Kb() {\n this.ad = V(384);\n this.Za = 0;\n this.Ob = V(16);\n this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n }\n function Ae() {\n this.uc = this.M = this.Nb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.ya = Array(new Kb());\n this.aa = 0;\n this.l = new Oa();\n }\n function Ic() {\n this.y = V(16);\n this.f = V(8);\n this.ea = V(8);\n }\n function Be() {\n this.cb = this.a = 0;\n this.sc = \"\";\n this.m = new Wb();\n this.Od = new ue();\n this.Kc = new ve();\n this.ed = new ye();\n this.Qa = new we();\n this.Ic = this.$c = this.Aa = 0;\n this.D = new Ae();\n this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n this.Jc = wa(8, Wb);\n this.ia = 0;\n new F();\n this.pb = wa(4, ze);\n this.Pa = new xe();\n this.Bd = this.kc = 0;\n this.Ac = [];\n this.Bc = 0;\n this.zc = [0, 0, 0, 0];\n this.Gd = Array(new Ic());\n this.Hd = 0;\n this.rb = Array(new Hc());\n this.sb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.oc = [];\n this.pc = 0;\n this.sa = [];\n this.ta = 0;\n this.qa = [];\n this.ra = 0;\n this.Ha = [];\n this.B = this.R = this.Ia = 0;\n this.Ec = [];\n this.M = this.ja = this.Vb = this.Fc = 0;\n this.ya = Array(new Kb());\n this.L = this.aa = 0;\n this.gd = Ed([4, 2], Xa);\n this.ga = null;\n this.Fa = [];\n this.Cc = this.qc = this.P = 0;\n this.Gb = [];\n this.Uc = 0;\n this.mb = [];\n this.nb = 0;\n this.rc = [];\n this.Ga = this.Vc = 0;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function Oa() {\n this.T = this.U = this.ka = this.height = this.width = 0;\n this.y = [];\n this.f = [];\n this.ea = [];\n this.Rc = this.fa = this.W = this.N = this.O = 0;\n this.ma = \"void\";\n this.put = \"VP8IoPutHook\";\n this.ac = \"VP8IoSetupHook\";\n this.bc = \"VP8IoTeardownHook\";\n this.ha = this.Kb = 0;\n this.data = [];\n this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n this.F = [];\n this.J = 0;\n }\n function Ce() {\n var a = new Be();\n null != a &&\n ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n return a;\n }\n function T(a, b, c) {\n 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n return 0;\n }\n function Jc(a, b, c) {\n return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n }\n function Kc(a, b) {\n if (null == a) return 0;\n a.a = 0;\n a.sc = \"OK\";\n if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n var c = b.data;\n var d = b.w;\n var e = b.ha;\n if (4 > e) return T(a, 7, \"Truncated header.\");\n var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n var g = a.Od;\n g.Rb = !(f & 1);\n g.td = (f >> 1) & 7;\n g.yd = (f >> 4) & 1;\n g.ub = f >> 5;\n if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n d += 3;\n e -= 3;\n var h = a.Kc;\n if (g.Rb) {\n if (7 > e) return T(a, 7, \"cannot parse picture header\");\n if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n h.Td = c[d + 4] >> 6;\n h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n h.Ud = c[d + 6] >> 6;\n d += 7;\n e -= 7;\n a.za = (h.c + 15) >> 4;\n a.Ub = (h.i + 15) >> 4;\n b.width = h.c;\n b.height = h.i;\n b.Da = 0;\n b.j = 0;\n b.v = 0;\n b.va = b.width;\n b.o = b.height;\n b.da = 0;\n b.ib = b.width;\n b.hb = b.height;\n b.U = b.width;\n b.T = b.height;\n f = a.Pa;\n M(f.jb, 0, 255, f.jb.length);\n f = a.Qa;\n x(null != f);\n f.Cb = 0;\n f.Bb = 0;\n f.Fb = 1;\n M(f.Zb, 0, 0, f.Zb.length);\n M(f.Lb, 0, 0, f.Lb);\n }\n if (g.ub > e) return T(a, 7, \"bad partition length\");\n f = a.m;\n ma(f, c, d, g.ub);\n d += g.ub;\n e -= g.ub;\n g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n h = a.Qa;\n var k = a.Pa,\n l;\n x(null != f);\n x(null != h);\n h.Cb = G(f);\n if (h.Cb) {\n h.Bb = G(f);\n if (G(f)) {\n h.Fb = G(f);\n for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n }\n if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n } else h.Bb = 0;\n if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n h = a.ed;\n h.zd = G(f);\n h.Tb = na(f, 6);\n h.wb = na(f, 3);\n h.Pc = G(f);\n if (h.Pc && G(f)) {\n for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n }\n a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n l = d;\n var m = e;\n e = l;\n d = l + m;\n h = m;\n a.Xb = (1 << na(a.m, 2)) - 1;\n k = a.Xb;\n if (m < 3 * k) c = 7;\n else {\n l += 3 * k;\n h -= 3 * k;\n for (m = 0; m < k; ++m) {\n var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n n > h && (n = h);\n ma(a.Jc[+m], c, l, n);\n l += n;\n h -= n;\n e += 3;\n }\n ma(a.Jc[+k], c, l, h);\n c = l < d ? 0 : 5;\n }\n if (0 != c) return T(a, c, \"cannot parse partitions\");\n l = a.m;\n c = na(l, 7);\n e = G(l) ? ca(l, 4) : 0;\n d = G(l) ? ca(l, 4) : 0;\n h = G(l) ? ca(l, 4) : 0;\n k = G(l) ? ca(l, 4) : 0;\n l = G(l) ? ca(l, 4) : 0;\n m = a.Qa;\n for (n = 0; 4 > n; ++n) {\n if (m.Cb) {\n var r = m.Zb[n];\n m.Fb || (r += c);\n } else if (0 < n) {\n a.pb[n] = a.pb[0];\n continue;\n } else r = c;\n var q = a.pb[n];\n q.Sc[0] = Lb[ga(r + e, 127)];\n q.Sc[1] = Mb[ga(r + 0, 127)];\n q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n 8 > q.Eb[1] && (q.Eb[1] = 8);\n q.Qc[0] = Lb[ga(r + k, 117)];\n q.Qc[1] = Mb[ga(r + l, 127)];\n q.lc = r + l;\n }\n if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n G(f);\n g = a.Pa;\n for (c = 0; 4 > c; ++c) {\n for (e = 0; 8 > e; ++e)\n for (d = 0; 3 > d; ++d)\n for (h = 0; 11 > h; ++h)\n (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n (g.Wc[c][e].Yb[d][h] = k);\n for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n }\n a.kc = G(f);\n a.kc && (a.Bd = na(f, 8));\n return (a.cb = 1);\n }\n function De(a, b, c, d, e, f, g) {\n var h = b[e].Yb[c];\n for (c = 0; 16 > e; ++e) {\n if (!K(a, h[c + 0])) return e;\n for (; !K(a, h[c + 1]); )\n if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n var k = b[e + 1].Yb;\n if (K(a, h[c + 2])) {\n var l = a,\n m = h,\n n = c;\n var r = 0;\n if (K(l, m[n + 3]))\n if (K(l, m[n + 6])) {\n h = 0;\n r = K(l, m[n + 8]);\n m = K(l, m[n + 9 + r]);\n n = 2 * r + m;\n r = 0;\n for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n r += 3 + (8 << n);\n } else\n K(l, m[n + 7])\n ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n : (r = 5 + K(l, 159));\n else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n h = k[2];\n } else (r = 1), (h = k[1]);\n k = g + Ie[e];\n l = a;\n 0 > l.b && Qa(l);\n var m = l.b,\n n = l.Ca >> 1,\n q = (n - (l.I >> m)) >> 31;\n --l.b;\n l.Ca += q;\n l.Ca |= 1;\n l.I -= ((n + 1) & q) << m;\n f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n }\n return 16;\n }\n function Lc(a) {\n var b = a.rb[a.sb - 1];\n b.la = 0;\n b.Na = 0;\n M(a.zc, 0, 0, a.zc.length);\n a.ja = 0;\n }\n function Je(a, b) {\n for (a.M = 0; a.M < a.Va; ++a.M) {\n var c = a.Jc[a.M & a.Xb],\n d = a.m,\n e = a,\n f;\n for (f = 0; f < e.za; ++f) {\n var g = d;\n var h = e;\n var k = h.Ac,\n l = h.Bc + 4 * f,\n m = h.zc,\n n = h.ya[h.aa + f];\n h.Qa.Bb\n ? (n.$b = K(g, h.Pa.jb[0])\n ? 2 + K(g, h.Pa.jb[2])\n : K(g, h.Pa.jb[1]))\n : (n.$b = 0);\n h.kc && (n.Ad = K(g, h.Bd));\n n.Za = !K(g, 145) + 0;\n if (n.Za) {\n var r = n.Ob,\n q = 0;\n for (h = 0; 4 > h; ++h) {\n var t = m[0 + h];\n var v;\n for (v = 0; 4 > v; ++v) {\n t = Ke[k[l + v]][t];\n for (var p = Mc[K(g, t[0])]; 0 < p; )\n p = Mc[2 * p + K(g, t[p])];\n t = -p;\n k[l + v] = t;\n }\n I(r, q, k, l, 4);\n q += 4;\n m[0 + h] = t;\n }\n } else\n (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n (n.Ob[0] = t),\n M(k, l, t, 4),\n M(m, 0, t, 4);\n n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n }\n if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n for (; a.ja < a.za; ++a.ja) {\n d = a;\n e = c;\n g = d.rb[d.sb - 1];\n k = d.rb[d.sb + d.ja];\n f = d.ya[d.aa + d.ja];\n if ((l = d.kc ? f.Ad : 0))\n (g.la = k.la = 0),\n f.Za || (g.Na = k.Na = 0),\n (f.Hc = 0),\n (f.Gc = 0),\n (f.ia = 0);\n else {\n var u,\n w,\n g = k,\n k = e,\n l = d.Pa.Xc,\n m = d.ya[d.aa + d.ja],\n n = d.pb[m.$b];\n h = m.ad;\n r = 0;\n q = d.rb[d.sb - 1];\n t = v = 0;\n M(h, r, 0, 384);\n if (m.Za) {\n var y = 0;\n var A = l[3];\n } else {\n p = V(16);\n var E = g.Na + q.Na;\n E = oa(k, l[1], E, n.Eb, 0, p, 0);\n g.Na = q.Na = (0 < E) + 0;\n if (1 < E) Nc(p, 0, h, r);\n else {\n var B = (p[0] + 3) >> 3;\n for (p = 0; 256 > p; p += 16) h[r + p] = B;\n }\n y = 1;\n A = l[0];\n }\n var C = g.la & 15;\n var N = q.la & 15;\n for (p = 0; 4 > p; ++p) {\n var z = N & 1;\n for (B = w = 0; 4 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, A, E, n.Sc, y, h, r)),\n (z = E > y),\n (C = (C >> 1) | (z << 7)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 4;\n N = (N >> 1) | (z << 7);\n v = ((v << 8) | w) >>> 0;\n }\n A = C;\n y = N >> 4;\n for (u = 0; 4 > u; u += 2) {\n w = 0;\n C = g.la >> (4 + u);\n N = q.la >> (4 + u);\n for (p = 0; 2 > p; ++p) {\n z = N & 1;\n for (B = 0; 2 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n (z = 0 < E),\n (C = (C >> 1) | (z << 3)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 2;\n N = (N >> 1) | (z << 5);\n }\n t |= w << (4 * u);\n A |= (C << 4) << u;\n y |= (N & 240) << u;\n }\n g.la = A;\n q.la = y;\n m.Hc = v;\n m.Gc = t;\n m.ia = t & 43690 ? 0 : n.ia;\n l = !(v | t);\n }\n 0 < d.L &&\n ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n (d.wa[d.Y + d.ja].La |= !l));\n if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n }\n Lc(a);\n c = a;\n d = b;\n e = 1;\n f = c.D;\n g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n if (0 == c.Aa)\n a: {\n (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n w = c.D;\n f = w.Nb;\n t = Ya[c.L];\n g = t * c.R;\n k = (t / 2) * c.B;\n p = 16 * f * c.R;\n B = 8 * f * c.B;\n l = c.sa;\n m = c.ta - g + p;\n n = c.qa;\n h = c.ra - k + B;\n r = c.Ha;\n q = c.Ia - k + B;\n C = w.M;\n N = 0 == C;\n v = C >= c.Va - 1;\n 2 == c.Aa && Oc(c, w);\n if (w.uc)\n for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n var Q = E;\n y = w;\n A = z;\n var S = Q.D,\n D = S.Nb;\n u = Q.R;\n var S = S.wa[S.Y + y],\n F = Q.sa,\n H = Q.ta + 16 * D * u + 16 * y,\n J = S.dd,\n G = S.tc;\n if (0 != G)\n if ((x(3 <= G), 1 == Q.L))\n 0 < y && Pc(F, H, u, G + 4),\n S.La && Qc(F, H, u, G),\n 0 < A && Rc(F, H, u, G + 4),\n S.La && Sc(F, H, u, G);\n else {\n var L = Q.B,\n O = Q.qa,\n P = Q.ra + 8 * D * L + 8 * y,\n R = Q.Ha,\n Q = Q.Ia + 8 * D * L + 8 * y,\n D = S.ld;\n 0 < y &&\n (Tc(F, H, u, G + 4, J, D),\n Uc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n 0 < A &&\n (Xc(F, H, u, G + 4, J, D),\n Yc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n }\n }\n c.ia && alert(\"todo:DitherRow\");\n if (null != d.put) {\n w = 16 * C;\n C = 16 * (C + 1);\n N\n ? ((d.y = c.sa),\n (d.O = c.ta + p),\n (d.f = c.qa),\n (d.N = c.ra + B),\n (d.ea = c.Ha),\n (d.W = c.Ia + B))\n : ((w -= t),\n (d.y = l),\n (d.O = m),\n (d.f = n),\n (d.N = h),\n (d.ea = r),\n (d.W = q));\n v || (C -= t);\n C > d.o && (C = d.o);\n d.F = null;\n d.J = null;\n if (\n null != c.Fa &&\n 0 < c.Fa.length &&\n w < C &&\n ((d.J = Le(c, d, w, C - w)),\n (d.F = c.mb),\n null == d.F && 0 == d.F.length)\n ) {\n e = T(c, 3, \"Could not decode alpha data.\");\n break a;\n }\n w < d.j &&\n ((t = d.j - w),\n (w = d.j),\n x(!(t & 1)),\n (d.O += c.R * t),\n (d.N += c.B * (t >> 1)),\n (d.W += c.B * (t >> 1)),\n null != d.F && (d.J += d.width * t));\n w < C &&\n ((d.O += d.v),\n (d.N += d.v >> 1),\n (d.W += d.v >> 1),\n null != d.F && (d.J += d.v),\n (d.ka = w - d.j),\n (d.U = d.va - d.v),\n (d.T = C - w),\n (e = d.put(d)));\n }\n f + 1 != c.Ic ||\n v ||\n (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n }\n if (!e) return T(a, 6, \"Output aborted.\");\n }\n return 1;\n }\n function Me(a, b) {\n if (null == a) return 0;\n if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n if (!a.cb && !Kc(a, b)) return 0;\n x(a.cb);\n if (null == b.ac || b.ac(b)) {\n b.ob && (a.L = 0);\n var c = Ya[a.L];\n 2 == a.L\n ? ((a.yb = 0), (a.zb = 0))\n : ((a.yb = (b.v - c) >> 4),\n (a.zb = (b.j - c) >> 4),\n 0 > a.yb && (a.yb = 0),\n 0 > a.zb && (a.zb = 0));\n a.Va = (b.o + 15 + c) >> 4;\n a.Hb = (b.va + 15 + c) >> 4;\n a.Hb > a.za && (a.Hb = a.za);\n a.Va > a.Ub && (a.Va = a.Ub);\n if (0 < a.L) {\n var d = a.ed;\n for (c = 0; 4 > c; ++c) {\n var e;\n if (a.Qa.Cb) {\n var f = a.Qa.Lb[c];\n a.Qa.Fb || (f += d.Tb);\n } else f = d.Tb;\n for (e = 0; 1 >= e; ++e) {\n var g = a.gd[c][e],\n h = f;\n d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n h = 0 > h ? 0 : 63 < h ? 63 : h;\n if (0 < h) {\n var k = h;\n 0 < d.wb &&\n ((k = 4 < d.wb ? k >> 2 : k >> 1),\n k > 9 - d.wb && (k = 9 - d.wb));\n 1 > k && (k = 1);\n g.dd = k;\n g.tc = 2 * h + k;\n g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n } else g.tc = 0;\n g.La = e;\n }\n }\n }\n c = 0;\n } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n if ((c = 0 == c)) {\n if (c) {\n a.$c = 0;\n 0 < a.Aa || (a.Ic = Ne);\n b: {\n c = a.Ic;\n var k = a.za,\n d = 4 * k,\n l = 32 * k,\n m = k + 1,\n n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n r = (2 == a.Aa ? 2 : 1) * k;\n e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n g = d + 832 + e + f;\n if (g != g) c = 0;\n else {\n if (g > a.Vb) {\n a.Vb = 0;\n a.Ec = V(g);\n a.Fc = 0;\n if (null == a.Ec) {\n c = T(a, 1, \"no memory during frame initialization.\");\n break b;\n }\n a.Vb = g;\n }\n g = a.Ec;\n h = a.Fc;\n a.Ac = g;\n a.Bc = h;\n h += d;\n a.Gd = wa(l, Ic);\n a.Hd = 0;\n a.rb = wa(m + 1, Hc);\n a.sb = 1;\n a.wa = n ? wa(n, Xa) : null;\n a.Y = 0;\n a.D.Nb = 0;\n a.D.wa = a.wa;\n a.D.Y = a.Y;\n 0 < a.Aa && (a.D.Y += k);\n x(!0);\n a.oc = g;\n a.pc = h;\n h += 832;\n a.ya = wa(r, Kb);\n a.aa = 0;\n a.D.ya = a.ya;\n a.D.aa = a.aa;\n 2 == a.Aa && (a.D.aa += k);\n a.R = 16 * k;\n a.B = 8 * k;\n l = Ya[a.L];\n k = l * a.R;\n l = (l / 2) * a.B;\n a.sa = g;\n a.ta = h + k;\n a.qa = a.sa;\n a.ra = a.ta + 16 * c * a.R + l;\n a.Ha = a.qa;\n a.Ia = a.ra + 8 * c * a.B + l;\n a.$c = 0;\n h += e;\n a.mb = f ? g : null;\n a.nb = f ? h : null;\n x(h + f <= a.Fc + a.Vb);\n Lc(a);\n M(a.Ac, a.Bc, 0, d);\n c = 1;\n }\n }\n if (c) {\n b.ka = 0;\n b.y = a.sa;\n b.O = a.ta;\n b.f = a.qa;\n b.N = a.ra;\n b.ea = a.Ha;\n b.Vd = a.Ia;\n b.fa = a.R;\n b.Rc = a.B;\n b.F = null;\n b.J = 0;\n if (!ad) {\n for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n for (c = -1020; 1020 >= c; ++c)\n cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n for (c = -112; 112 >= c; ++c)\n dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n for (c = -255; 510 >= c; ++c)\n ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n ad = 1;\n }\n Nc = Oe;\n Za = Pe;\n Nb = Qe;\n pa = Re;\n Ob = Se;\n fd = Te;\n Xc = Ue;\n Tc = Ve;\n Yc = We;\n Uc = Xe;\n Zc = Ye;\n Vc = Ze;\n $c = $e;\n Wc = af;\n Rc = gd;\n Pc = hd;\n Sc = bf;\n Qc = cf;\n W[0] = df;\n W[1] = ef;\n W[2] = ff;\n W[3] = gf;\n W[4] = hf;\n W[5] = jf;\n W[6] = kf;\n W[7] = lf;\n W[8] = mf;\n W[9] = nf;\n Y[0] = of;\n Y[1] = pf;\n Y[2] = qf;\n Y[3] = rf;\n Y[4] = sf;\n Y[5] = tf;\n Y[6] = uf;\n ka[0] = vf;\n ka[1] = wf;\n ka[2] = xf;\n ka[3] = yf;\n ka[4] = zf;\n ka[5] = Af;\n ka[6] = Bf;\n c = 1;\n } else c = 0;\n }\n c && (c = Je(a, b));\n null != b.bc && b.bc(b);\n c &= 1;\n }\n if (!c) return 0;\n a.cb = 0;\n return c;\n }\n function qa(a, b, c, d, e) {\n e = a[b + c + 32 * d] + (e >> 3);\n a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n }\n function kb(a, b, c, d, e, f) {\n qa(a, b, 0, c, d + e);\n qa(a, b, 1, c, d + f);\n qa(a, b, 2, c, d - f);\n qa(a, b, 3, c, d - e);\n }\n function da(a) {\n return ((20091 * a) >> 16) + a;\n }\n function id(a, b, c, d) {\n var e = 0,\n f;\n var g = V(16);\n for (f = 0; 4 > f; ++f) {\n var h = a[b + 0] + a[b + 8];\n var k = a[b + 0] - a[b + 8];\n var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n g[e + 0] = h + m;\n g[e + 1] = k + l;\n g[e + 2] = k - l;\n g[e + 3] = h - m;\n e += 4;\n b++;\n }\n for (f = e = 0; 4 > f; ++f)\n (a = g[e + 0] + 4),\n (h = a + g[e + 8]),\n (k = a - g[e + 8]),\n (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n qa(c, d, 0, 0, h + m),\n qa(c, d, 1, 0, k + l),\n qa(c, d, 2, 0, k - l),\n qa(c, d, 3, 0, h - m),\n e++,\n (d += 32);\n }\n function Te(a, b, c, d) {\n var e = a[b + 0] + 4,\n f = (35468 * a[b + 4]) >> 16,\n g = da(a[b + 4]),\n h = (35468 * a[b + 1]) >> 16;\n a = da(a[b + 1]);\n kb(c, d, 0, e + g, a, h);\n kb(c, d, 1, e + f, a, h);\n kb(c, d, 2, e - f, a, h);\n kb(c, d, 3, e - g, a, h);\n }\n function Pe(a, b, c, d, e) {\n id(a, b, c, d);\n e && id(a, b + 16, c, d + 4);\n }\n function Qe(a, b, c, d) {\n Za(a, b + 0, c, d, 1);\n Za(a, b + 32, c, d + 128, 1);\n }\n function Re(a, b, c, d) {\n a = a[b + 0] + 4;\n var e;\n for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n }\n function Se(a, b, c, d) {\n a[b + 0] && pa(a, b + 0, c, d);\n a[b + 16] && pa(a, b + 16, c, d + 4);\n a[b + 32] && pa(a, b + 32, c, d + 128);\n a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n }\n function Oe(a, b, c, d) {\n var e = V(16),\n f;\n for (f = 0; 4 > f; ++f) {\n var g = a[b + 0 + f] + a[b + 12 + f];\n var h = a[b + 4 + f] + a[b + 8 + f];\n var k = a[b + 4 + f] - a[b + 8 + f];\n var l = a[b + 0 + f] - a[b + 12 + f];\n e[0 + f] = g + h;\n e[8 + f] = g - h;\n e[4 + f] = l + k;\n e[12 + f] = l - k;\n }\n for (f = 0; 4 > f; ++f)\n (a = e[0 + 4 * f] + 3),\n (g = a + e[3 + 4 * f]),\n (h = e[1 + 4 * f] + e[2 + 4 * f]),\n (k = e[1 + 4 * f] - e[2 + 4 * f]),\n (l = a - e[3 + 4 * f]),\n (c[d + 0] = (g + h) >> 3),\n (c[d + 16] = (l + k) >> 3),\n (c[d + 32] = (g - h) >> 3),\n (c[d + 48] = (l - k) >> 3),\n (d += 64);\n }\n function Pb(a, b, c) {\n var d = b - 32,\n e = R,\n f = 255 - a[d - 1],\n g;\n for (g = 0; g < c; ++g) {\n var h = e,\n k = f + a[b - 1],\n l;\n for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n b += 32;\n }\n }\n function ef(a, b) {\n Pb(a, b, 4);\n }\n function wf(a, b) {\n Pb(a, b, 8);\n }\n function pf(a, b) {\n Pb(a, b, 16);\n }\n function qf(a, b) {\n var c;\n for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n }\n function rf(a, b) {\n var c;\n for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n }\n function $a(a, b, c) {\n var d;\n for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n }\n function of(a, b) {\n var c = 16,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n $a(c >> 5, a, b);\n }\n function sf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n $a(c >> 4, a, b);\n }\n function tf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n $a(c >> 4, a, b);\n }\n function uf(a, b) {\n $a(128, a, b);\n }\n function z(a, b, c) {\n return (a + 2 * b + c + 2) >> 2;\n }\n function ff(a, b) {\n var c = b - 32,\n c = new Uint8Array([\n z(a[c - 1], a[c + 0], a[c + 1]),\n z(a[c + 0], a[c + 1], a[c + 2]),\n z(a[c + 1], a[c + 2], a[c + 3]),\n z(a[c + 2], a[c + 3], a[c + 4])\n ]),\n d;\n for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n }\n function gf(a, b) {\n var c = a[b - 1],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n ra(a, b + 32, 16843009 * z(c, d, e));\n ra(a, b + 64, 16843009 * z(d, e, f));\n ra(a, b + 96, 16843009 * z(e, f, f));\n }\n function df(a, b) {\n var c = 4,\n d;\n for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n c >>= 3;\n for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n }\n function hf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n a[b + 3 + 0] = z(l, k, h);\n }\n function kf(a, b) {\n var c = a[b + 1 - 32],\n d = a[b + 2 - 32],\n e = a[b + 3 - 32],\n f = a[b + 4 - 32],\n g = a[b + 5 - 32],\n h = a[b + 6 - 32],\n k = a[b + 7 - 32];\n a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, k);\n }\n function jf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n a[b + 3 + 0] = (k + l + 1) >> 1;\n a[b + 0 + 96] = z(e, d, c);\n a[b + 0 + 64] = z(d, c, f);\n a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n a[b + 3 + 32] = z(h, k, l);\n }\n function lf(a, b) {\n var c = a[b + 0 - 32],\n d = a[b + 1 - 32],\n e = a[b + 2 - 32],\n f = a[b + 3 - 32],\n g = a[b + 4 - 32],\n h = a[b + 5 - 32],\n k = a[b + 6 - 32],\n l = a[b + 7 - 32];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n a[b + 0 + 32] = z(c, d, e);\n a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 3 + 64] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, l);\n }\n function nf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n a[b + 1 + 0] = z(c, d, e);\n a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n b + 2 + 96\n ] = a[b + 3 + 96] = f;\n }\n function mf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96],\n g = a[b - 1 - 32],\n h = a[b + 0 - 32],\n k = a[b + 1 - 32],\n l = a[b + 2 - 32];\n a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n a[b + 0 + 96] = (f + e + 1) >> 1;\n a[b + 3 + 0] = z(h, k, l);\n a[b + 2 + 0] = z(g, h, k);\n a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n a[b + 1 + 96] = z(f, e, d);\n }\n function xf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n }\n function yf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n }\n function lb(a, b, c) {\n var d;\n for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n }\n function vf(a, b) {\n var c = 8,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n lb(c >> 4, a, b);\n }\n function Af(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n lb(c >> 3, a, b);\n }\n function zf(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n lb(c >> 3, a, b);\n }\n function Bf(a, b) {\n lb(128, a, b);\n }\n function ab(a, b, c) {\n var d = a[b - c],\n e = a[b + 0],\n f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n g = mb[112 + ((f + 4) >> 3)];\n a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n a[b + 0] = R[255 + e - g];\n }\n function jd(a, b, c, d) {\n var e = a[b + 0],\n f = a[b + c];\n return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n }\n function kd(a, b, c, d) {\n return (\n 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n );\n }\n function ld(a, b, c, d, e) {\n var f = a[b - 3 * c],\n g = a[b - 2 * c],\n h = a[b - c],\n k = a[b + 0],\n l = a[b + c],\n m = a[b + 2 * c],\n n = a[b + 3 * c];\n return 4 * U[255 + h - k] + U[255 + g - l] > d\n ? 0\n : U[255 + a[b - 4 * c] - f] <= e &&\n U[255 + f - g] <= e &&\n U[255 + g - h] <= e &&\n U[255 + n - m] <= e &&\n U[255 + m - l] <= e &&\n U[255 + l - k] <= e;\n }\n function gd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n }\n function hd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n }\n function bf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n }\n function cf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n }\n function ea(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - 2 * m],\n r = k[l - m],\n q = k[l + 0],\n t = k[l + m],\n v = k[l + 2 * m],\n p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n u = (27 * p + 63) >> 7,\n w = (18 * p + 63) >> 7,\n p = (9 * p + 63) >> 7;\n k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n k[l - 2 * m] = R[255 + n + w];\n k[l - m] = R[255 + r + u];\n k[l + 0] = R[255 + q - u];\n k[l + m] = R[255 + t - w];\n k[l + 2 * m] = R[255 + v - p];\n }\n b += d;\n }\n }\n function Fa(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - m],\n r = k[l + 0],\n q = k[l + m],\n t = 3 * (r - n),\n v = mb[112 + ((t + 4) >> 3)],\n t = mb[112 + ((t + 3) >> 3)],\n p = (v + 1) >> 1;\n k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n k[l - m] = R[255 + n + t];\n k[l + 0] = R[255 + r - v];\n k[l + m] = R[255 + q - p];\n }\n b += d;\n }\n }\n function Ue(a, b, c, d, e, f) {\n ea(a, b, c, 1, 16, d, e, f);\n }\n function Ve(a, b, c, d, e, f) {\n ea(a, b, 1, c, 16, d, e, f);\n }\n function Ye(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n }\n function Ze(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n }\n function We(a, b, c, d, e, f, g, h) {\n ea(a, b, e, 1, 8, f, g, h);\n ea(c, d, e, 1, 8, f, g, h);\n }\n function Xe(a, b, c, d, e, f, g, h) {\n ea(a, b, 1, e, 8, f, g, h);\n ea(c, d, 1, e, 8, f, g, h);\n }\n function $e(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n }\n function af(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4, 1, e, 8, f, g, h);\n Fa(c, d + 4, 1, e, 8, f, g, h);\n }\n function Cf() {\n this.ba = new Cb();\n this.ec = [];\n this.cc = [];\n this.Mc = [];\n this.Dc = this.Nc = this.dc = this.fc = 0;\n this.Oa = new Ud();\n this.memory = 0;\n this.Ib = \"OutputFunc\";\n this.Jb = \"OutputAlphaFunc\";\n this.Nd = \"OutputRowFunc\";\n }\n function md() {\n this.data = [];\n this.offset = this.kd = this.ha = this.w = 0;\n this.na = [];\n this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n }\n function Df() {\n this.nc = this.Ea = this.b = this.hc = 0;\n this.K = [];\n this.w = 0;\n }\n function Ef() {\n this.ua = 0;\n this.Wa = new ac();\n this.vb = new ac();\n this.md = this.xc = this.wc = 0;\n this.vc = [];\n this.Wb = 0;\n this.Ya = new Ub();\n this.yc = new O();\n }\n function je() {\n this.xb = this.a = 0;\n this.l = new Oa();\n this.ca = new Cb();\n this.V = [];\n this.Ba = 0;\n this.Ta = [];\n this.Ua = 0;\n this.m = new Ra();\n this.Pb = 0;\n this.wd = new Ra();\n this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n this.s = new Ef();\n this.ab = 0;\n this.gc = wa(4, Df);\n this.Oc = 0;\n }\n function Ff() {\n this.Lc = this.Z = this.$a = this.i = this.c = 0;\n this.l = new Oa();\n this.ic = 0;\n this.ca = [];\n this.tb = 0;\n this.qd = null;\n this.rd = 0;\n }\n function Rb(a, b, c, d, e, f, g) {\n a = null == a ? 0 : a[b + 0];\n for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n }\n function Gf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h;\n for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n }\n }\n function Hf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h = a[b + 0],\n k = h,\n l = h,\n m;\n for (m = 0; m < g; ++m)\n (h = a[b + m]),\n (k = l + h - k),\n (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n (k = h),\n (e[f + m] = l);\n }\n }\n function Le(a, b, c, d) {\n var e = b.width,\n f = b.o;\n x(null != a && null != b);\n if (0 > c || 0 >= d || c + d > f) return null;\n if (!a.Cc) {\n if (null == a.ga) {\n a.ga = new Ff();\n var g;\n (g = null == a.ga) ||\n ((g = b.width * b.o),\n x(0 == a.Gb.length),\n (a.Gb = V(g)),\n (a.Uc = 0),\n null == a.Gb\n ? (g = 0)\n : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n (g = !g));\n if (!g) {\n g = a.ga;\n var h = a.Fa,\n k = a.P,\n l = a.qc,\n m = a.mb,\n n = a.nb,\n r = k + 1,\n q = l - 1,\n t = g.l;\n x(null != h && null != m && null != b);\n ia[0] = null;\n ia[1] = Rb;\n ia[2] = Gf;\n ia[3] = Hf;\n g.ca = m;\n g.tb = n;\n g.c = b.width;\n g.i = b.height;\n x(0 < g.c && 0 < g.i);\n if (1 >= l) b = 0;\n else if (\n ((g.$a = (h[k + 0] >> 0) & 3),\n (g.Z = (h[k + 0] >> 2) & 3),\n (g.Lc = (h[k + 0] >> 4) & 3),\n (k = (h[k + 0] >> 6) & 3),\n 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n )\n b = 0;\n else if (\n ((t.put = kc),\n (t.ac = gc),\n (t.bc = lc),\n (t.ma = g),\n (t.width = b.width),\n (t.height = b.height),\n (t.Da = b.Da),\n (t.v = b.v),\n (t.va = b.va),\n (t.j = b.j),\n (t.o = b.o),\n g.$a)\n )\n b: {\n x(1 == g.$a), (b = Bc());\n c: for (;;) {\n if (null == b) {\n b = 0;\n break b;\n }\n x(null != g);\n g.mc = b;\n b.c = g.c;\n b.i = g.i;\n b.l = g.l;\n b.l.ma = g;\n b.l.width = g.c;\n b.l.height = g.i;\n b.a = 0;\n cb(b.m, h, r, q);\n if (!rb(g.c, g.i, 1, b, null)) break c;\n 1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n ? ((g.ic = 1),\n (h = b.c * b.i),\n (b.Ta = null),\n (b.Ua = 0),\n (b.V = V(h)),\n (b.Ba = 0),\n null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n : ((g.ic = 0), (b = Ec(b, g.c)));\n if (!b) break c;\n b = 1;\n break b;\n }\n g.mc = null;\n b = 0;\n }\n else b = q >= g.c * g.i;\n g = !b;\n }\n if (g) return null;\n 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n }\n x(null != a.ga);\n x(c + d <= f);\n a: {\n h = a.ga;\n b = h.c;\n f = h.l.o;\n if (0 == h.$a) {\n r = a.rc;\n q = a.Vc;\n t = a.Fa;\n k = a.P + 1 + c * b;\n l = a.mb;\n m = a.nb + c * b;\n x(k <= a.P + a.qc);\n if (0 != h.Z)\n for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n ia[h.Z](r, q, t, k, l, m, b),\n (r = l),\n (q = m),\n (m += b),\n (k += b);\n else\n for (g = 0; g < d; ++g)\n I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n a.rc = r;\n a.Vc = q;\n } else {\n x(null != h.mc);\n b = c + d;\n g = h.mc;\n x(null != g);\n x(b <= g.i);\n if (g.C >= b) b = 1;\n else if ((h.ic || Aa(), h.ic)) {\n var h = g.V,\n r = g.Ba,\n q = g.c,\n v = g.i,\n t = 1,\n k = g.$ / q,\n l = g.$ % q,\n m = g.m,\n n = g.s,\n p = g.$,\n u = q * v,\n w = q * b,\n y = n.wc,\n A = p < w ? ha(n, l, k) : null;\n x(p <= u);\n x(b <= v);\n x(yc(n));\n c: for (;;) {\n for (; !m.h && p < w; ) {\n l & y || (A = ha(n, l, k));\n x(null != A);\n Sa(m);\n v = ua(A.G[0], A.H[0], m);\n if (256 > v)\n (h[r + p] = v),\n ++p,\n ++l,\n l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n else if (280 > v) {\n var v = ib(v - 256, m);\n var E = ua(A.G[4], A.H[4], m);\n Sa(m);\n E = ib(E, m);\n E = nc(q, E);\n if (p >= E && u - p >= v) {\n var B;\n for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n } else {\n t = 0;\n break c;\n }\n p += v;\n for (l += v; l >= q; )\n (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n p < w && l & y && (A = ha(n, l, k));\n } else {\n t = 0;\n break c;\n }\n x(m.h == db(m));\n }\n Ib(g, k > b ? b : k);\n break c;\n }\n !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n b = t;\n } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n if (!b) {\n d = 0;\n break a;\n }\n }\n c + d >= f && (a.Cc = 1);\n d = 1;\n }\n if (!d) return null;\n if (\n a.Cc &&\n ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n )\n return alert(\"todo:WebPDequantizeLevels\"), null;\n }\n return a.nb + c * e;\n }\n function If(a, b, c, d, e, f) {\n for (; 0 < e--; ) {\n var g = a,\n h = b + (c ? 1 : 0),\n k = a,\n l = b + (c ? 0 : 3),\n m;\n for (m = 0; m < d; ++m) {\n var n = k[l + 4 * m];\n 255 != n &&\n ((n *= 32897),\n (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n }\n b += f;\n }\n }\n function Jf(a, b, c, d, e) {\n for (; 0 < d--; ) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + 2 * f + 0],\n h = a[b + 2 * f + 1],\n k = h & 15,\n l = 4369 * k,\n h = (((h & 240) | (h >> 4)) * l) >> 16;\n a[b + 2 * f + 0] =\n (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n a[b + 2 * f + 1] = (h & 240) | k;\n }\n b += e;\n }\n }\n function Kf(a, b, c, d, e, f, g, h) {\n var k = 255,\n l,\n m;\n for (m = 0; m < e; ++m) {\n for (l = 0; l < d; ++l) {\n var n = a[b + l];\n f[g + 4 * l] = n;\n k &= n;\n }\n b += c;\n g += h;\n }\n return 255 != k;\n }\n function Lf(a, b, c, d, e) {\n var f;\n for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n }\n function Aa() {\n za = If;\n vc = Jf;\n fc = Kf;\n Fc = Lf;\n }\n function va(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n var d,\n E = (y - 1) >> 1;\n var B = h[k + 0] | (l[m + 0] << 16);\n var C = n[r + 0] | (q[t + 0] << 16);\n x(null != a);\n var z = (3 * B + C + 131074) >> 2;\n b(a[e + 0], z & 255, z >> 16, v, p);\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + 0], z & 255, z >> 16, u, w));\n for (d = 1; d <= E; ++d) {\n var D = h[k + d] | (l[m + d] << 16);\n var G = n[r + d] | (q[t + d] << 16);\n var F = B + D + C + G + 524296;\n var H = (F + 2 * (D + C)) >> 3;\n F = (F + 2 * (B + G)) >> 3;\n z = (H + B) >> 1;\n B = (F + D) >> 1;\n b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n null != f &&\n ((z = (F + C) >> 1),\n (B = (H + G) >> 1),\n b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n B = D;\n C = G;\n }\n y & 1 ||\n ((z = (3 * B + C + 131074) >> 2),\n b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n };\n }\n function ic() {\n P[Ca] = Mf;\n P[Ua] = nd;\n P[tc] = Nf;\n P[Va] = od;\n P[ya] = pd;\n P[Db] = qd;\n P[wc] = Of;\n P[zb] = nd;\n P[Ab] = od;\n P[Ja] = pd;\n P[Bb] = qd;\n }\n function Sb(a) {\n return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n }\n function bb(a, b) {\n return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n }\n function nb(a, b, c) {\n return Sb(\n ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n );\n }\n function Pa(a, b) {\n return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n }\n function Ga(a, b, c, d, e) {\n d[e + 0] = bb(a, c);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = Pa(a, b);\n }\n function Tb(a, b, c, d, e) {\n d[e + 0] = Pa(a, b);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = bb(a, c);\n }\n function sd(a, b, c, d, e) {\n var f = nb(a, b, c);\n b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n d[e + 1] = b;\n }\n function td(a, b, c, d, e) {\n var f = (Pa(a, b) & 240) | 15;\n d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n d[e + 1] = f;\n }\n function ud(a, b, c, d, e) {\n d[e + 0] = 255;\n Ga(a, b, c, d, e + 1);\n }\n function vd(a, b, c, d, e) {\n Tb(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function wd(a, b, c, d, e) {\n Ga(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function la(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n) {\n for (var d = m + (n & -2) * c; m != d; )\n b(a[e + 0], f[g + 0], h[k + 0], l, m),\n b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n (e += 2),\n ++g,\n ++k,\n (m += 2 * c);\n n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n };\n }\n function xd(a, b, c) {\n return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n }\n function yd(a, b, c, d, e) {\n switch (a >>> 30) {\n case 3:\n Za(b, c, d, e, 0);\n break;\n case 2:\n fd(b, c, d, e);\n break;\n case 1:\n pa(b, c, d, e);\n }\n }\n function Oc(a, b) {\n var c,\n d,\n e = b.M,\n f = b.Nb,\n g = a.oc,\n h = a.pc + 40,\n k = a.oc,\n l = a.pc + 584,\n m = a.oc,\n n = a.pc + 600;\n for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n for (c = 0; 8 > c; ++c)\n (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n 0 < e\n ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n : (M(g, h - 32 - 1, 127, 21),\n M(k, l - 32 - 1, 127, 9),\n M(m, n - 32 - 1, 127, 9));\n for (d = 0; d < a.za; ++d) {\n var r = b.ya[b.aa + d];\n if (0 < d) {\n for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n for (c = -1; 8 > c; ++c)\n I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n }\n var q = a.Gd,\n t = a.Hd + d,\n v = r.ad,\n p = r.Hc;\n 0 < e &&\n (I(g, h - 32, q[t].y, 0, 16),\n I(k, l - 32, q[t].f, 0, 8),\n I(m, n - 32, q[t].ea, 0, 8));\n if (r.Za) {\n var u = g;\n var w = h - 32 + 16;\n 0 < e &&\n (d >= a.za - 1\n ? M(u, w, q[t].y[15], 4)\n : I(u, w, q[t + 1].y, 0, 4));\n for (c = 0; 4 > c; c++)\n u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n for (c = 0; 16 > c; ++c, p <<= 2)\n (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n c = r.Gc;\n u = xd(d, e, r.Dd);\n ka[u](k, l);\n ka[u](m, n);\n r = c >> 0;\n p = v;\n u = k;\n w = l;\n r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n c >>= 8;\n r = m;\n p = n;\n c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n e < a.Ub - 1 &&\n (I(q[t].y, 0, g, h + 480, 16),\n I(q[t].f, 0, k, l + 224, 8),\n I(q[t].ea, 0, m, n + 224, 8));\n c = 8 * f * a.B;\n q = a.sa;\n t = a.ta + 16 * d + 16 * f * a.R;\n v = a.qa;\n r = a.ra + 8 * d + c;\n p = a.Ha;\n u = a.Ia + 8 * d + c;\n for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n for (c = 0; 8 > c; ++c)\n I(v, r + c * a.B, k, l + 32 * c, 8),\n I(p, u + c * a.B, m, n + 32 * c, 8);\n }\n }\n function Ad(a, b, c, d, e, f, g, h, k) {\n var l = [0],\n m = [0],\n n = 0,\n r = null != k ? k.kd : 0,\n q = null != k ? k : new md();\n if (null == a || 12 > c) return 7;\n q.data = a;\n q.w = b;\n q.ha = c;\n b = [b];\n c = [c];\n q.gb = [q.gb];\n a: {\n var t = b;\n var v = c;\n var p = q.gb;\n x(null != a);\n x(null != v);\n x(null != p);\n p[0] = 0;\n if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n if (fa(a, t[0] + 8, \"WEBP\")) {\n p = 3;\n break a;\n }\n var u = Ha(a, t[0] + 4);\n if (12 > u || 4294967286 < u) {\n p = 3;\n break a;\n }\n if (r && u > v[0] - 8) {\n p = 7;\n break a;\n }\n p[0] = u;\n t[0] += 12;\n v[0] -= 12;\n }\n p = 0;\n }\n if (0 != p) return p;\n u = 0 < q.gb[0];\n for (c = c[0]; ; ) {\n t = [0];\n n = [n];\n a: {\n var w = a;\n v = b;\n p = c;\n var y = n,\n A = l,\n z = m,\n B = t;\n y[0] = 0;\n if (8 > p[0]) p = 7;\n else {\n if (!fa(w, v[0], \"VP8X\")) {\n if (10 != Ha(w, v[0] + 4)) {\n p = 3;\n break a;\n }\n if (18 > p[0]) {\n p = 7;\n break a;\n }\n var C = Ha(w, v[0] + 8);\n var D = 1 + Yb(w, v[0] + 12);\n w = 1 + Yb(w, v[0] + 15);\n if (2147483648 <= D * w) {\n p = 3;\n break a;\n }\n null != B && (B[0] = C);\n null != A && (A[0] = D);\n null != z && (z[0] = w);\n v[0] += 18;\n p[0] -= 18;\n y[0] = 1;\n }\n p = 0;\n }\n }\n n = n[0];\n t = t[0];\n if (0 != p) return p;\n v = !!(t & 2);\n if (!u && n) return 3;\n null != f && (f[0] = !!(t & 16));\n null != g && (g[0] = v);\n null != h && (h[0] = 0);\n g = l[0];\n t = m[0];\n if (n && v && null == k) {\n p = 0;\n break;\n }\n if (4 > c) {\n p = 7;\n break;\n }\n if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n c = [c];\n q.na = [q.na];\n q.P = [q.P];\n q.Sa = [q.Sa];\n a: {\n C = a;\n p = b;\n u = c;\n var y = q.gb,\n A = q.na,\n z = q.P,\n B = q.Sa;\n D = 22;\n x(null != C);\n x(null != u);\n w = p[0];\n var F = u[0];\n x(null != A);\n x(null != B);\n A[0] = null;\n z[0] = null;\n for (B[0] = 0; ; ) {\n p[0] = w;\n u[0] = F;\n if (8 > F) {\n p = 7;\n break a;\n }\n var G = Ha(C, w + 4);\n if (4294967286 < G) {\n p = 3;\n break a;\n }\n var H = (8 + G + 1) & -2;\n D += H;\n if (0 < y && D > y) {\n p = 3;\n break a;\n }\n if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n p = 0;\n break a;\n }\n if (F[0] < H) {\n p = 7;\n break a;\n }\n fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n w += H;\n F -= H;\n }\n }\n c = c[0];\n q.na = q.na[0];\n q.P = q.P[0];\n q.Sa = q.Sa[0];\n if (0 != p) break;\n }\n c = [c];\n q.Ja = [q.Ja];\n q.xa = [q.xa];\n a: if (\n ((y = a),\n (p = b),\n (u = c),\n (A = q.gb[0]),\n (z = q.Ja),\n (B = q.xa),\n (C = p[0]),\n (w = !fa(y, C, \"VP8 \")),\n (D = !fa(y, C, \"VP8L\")),\n x(null != y),\n x(null != u),\n x(null != z),\n x(null != B),\n 8 > u[0])\n )\n p = 7;\n else {\n if (w || D) {\n y = Ha(y, C + 4);\n if (12 <= A && y > A - 12) {\n p = 3;\n break a;\n }\n if (r && y > u[0] - 8) {\n p = 7;\n break a;\n }\n z[0] = y;\n p[0] += 8;\n u[0] -= 8;\n B[0] = D;\n } else\n (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n (z[0] = u[0]);\n p = 0;\n }\n c = c[0];\n q.Ja = q.Ja[0];\n q.xa = q.xa[0];\n b = b[0];\n if (0 != p) break;\n if (4294967286 < q.Ja) return 3;\n null == h || v || (h[0] = q.xa ? 2 : 1);\n g = [g];\n t = [t];\n if (q.xa) {\n if (5 > c) {\n p = 7;\n break;\n }\n h = g;\n r = t;\n v = f;\n null == a || 5 > c\n ? (a = 0)\n : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n ? ((u = [0]),\n (y = [0]),\n (A = [0]),\n (z = new Ra()),\n cb(z, a, b, c),\n mc(z, u, y, A)\n ? (null != h && (h[0] = u[0]),\n null != r && (r[0] = y[0]),\n null != v && (v[0] = A[0]),\n (a = 1))\n : (a = 0))\n : (a = 0);\n } else {\n if (10 > c) {\n p = 7;\n break;\n }\n h = t;\n null == a || 10 > c || !Jc(a, b + 3, c - 3)\n ? (a = 0)\n : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n r & 1 ||\n 3 < ((r >> 1) & 7) ||\n !((r >> 4) & 1) ||\n r >> 5 >= q.Ja ||\n !v ||\n !a\n ? (a = 0)\n : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n }\n if (!a) return 3;\n g = g[0];\n t = t[0];\n if (n && (l[0] != g || m[0] != t)) return 3;\n null != k &&\n ((k[0] = q),\n (k.offset = b - k.w),\n x(4294967286 > b - k.w),\n x(k.offset == k.ha - c));\n break;\n }\n return 0 == p || (7 == p && n && null == k)\n ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n null != d && (d[0] = g),\n null != e && (e[0] = t),\n 0)\n : p;\n }\n function hc(a, b, c) {\n var d = b.width,\n e = b.height,\n f = 0,\n g = 0,\n h = d,\n k = e;\n b.Da = null != a && 0 < a.Da;\n if (\n b.Da &&\n ((h = a.cd),\n (k = a.bd),\n (f = a.v),\n (g = a.j),\n 11 > c || ((f &= -2), (g &= -2)),\n 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n )\n return 0;\n b.v = f;\n b.j = g;\n b.va = f + h;\n b.o = g + k;\n b.U = h;\n b.T = k;\n b.da = null != a && 0 < a.da;\n if (b.da) {\n c = [a.ib];\n f = [a.hb];\n if (!bc(h, k, c, f)) return 0;\n b.ib = c[0];\n b.hb = f[0];\n }\n b.ob = null != a && a.ob;\n b.Kb = null == a || !a.Sd;\n b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n return 1;\n }\n function Bd(a) {\n if (null == a) return 2;\n if (11 > a.S) {\n var b = a.f.RGBA;\n b.fb += (a.height - 1) * b.A;\n b.A = -b.A;\n } else\n (b = a.f.kb),\n (a = a.height),\n (b.O += (a - 1) * b.fa),\n (b.fa = -b.fa),\n (b.N += ((a - 1) >> 1) * b.Ab),\n (b.Ab = -b.Ab),\n (b.W += ((a - 1) >> 1) * b.Db),\n (b.Db = -b.Db),\n null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n return 0;\n }\n function Cd(a, b, c, d) {\n if (null == d || 0 >= a || 0 >= b) return 2;\n if (null != c) {\n if (c.Da) {\n var e = c.cd,\n f = c.bd,\n g = c.v & -2,\n h = c.j & -2;\n if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n return 2;\n a = e;\n b = f;\n }\n if (c.da) {\n e = [c.ib];\n f = [c.hb];\n if (!bc(a, b, e, f)) return 2;\n a = e[0];\n b = f[0];\n }\n }\n d.width = a;\n d.height = b;\n a: {\n var k = d.width;\n var l = d.height;\n a = d.S;\n if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n else {\n if (0 >= d.Rd && null == d.sd) {\n var g = (f = e = b = 0),\n h = k * Dd[a],\n m = h * l;\n 11 > a ||\n ((b = (k + 1) / 2),\n (f = ((l + 1) / 2) * b),\n 12 == a && ((e = k), (g = e * l)));\n l = V(m + 2 * f + g);\n if (null == l) {\n a = 1;\n break a;\n }\n d.sd = l;\n 11 > a\n ? ((k = d.f.RGBA),\n (k.eb = l),\n (k.fb = 0),\n (k.A = h),\n (k.size = m))\n : ((k = d.f.kb),\n (k.y = l),\n (k.O = 0),\n (k.fa = h),\n (k.Fd = m),\n (k.f = l),\n (k.N = 0 + m),\n (k.Ab = b),\n (k.Cd = f),\n (k.ea = l),\n (k.W = 0 + m + f),\n (k.Db = b),\n (k.Ed = f),\n 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n (k.Tc = g),\n (k.lb = e));\n }\n b = 1;\n e = d.S;\n f = d.width;\n g = d.height;\n if (e >= Ca && 13 > e)\n if (11 > e)\n (a = d.f.RGBA),\n (h = Math.abs(a.A)),\n (b &= h * (g - 1) + f <= a.size),\n (b &= h >= f * Dd[e]),\n (b &= null != a.eb);\n else {\n a = d.f.kb;\n h = (f + 1) / 2;\n m = (g + 1) / 2;\n k = Math.abs(a.fa);\n var l = Math.abs(a.Ab),\n n = Math.abs(a.Db),\n r = Math.abs(a.lb),\n q = r * (g - 1) + f;\n b &= k * (g - 1) + f <= a.Fd;\n b &= l * (m - 1) + h <= a.Cd;\n b &= n * (m - 1) + h <= a.Ed;\n b = b & (k >= f) & (l >= h) & (n >= h);\n b &= null != a.y;\n b &= null != a.f;\n b &= null != a.ea;\n 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n }\n else b = 0;\n a = b ? 0 : 2;\n }\n }\n if (0 != a) return a;\n null != c && c.fd && (a = Bd(d));\n return a;\n }\n var xb = 64,\n Hd = [\n 0,\n 1,\n 3,\n 7,\n 15,\n 31,\n 63,\n 127,\n 255,\n 511,\n 1023,\n 2047,\n 4095,\n 8191,\n 16383,\n 32767,\n 65535,\n 131071,\n 262143,\n 524287,\n 1048575,\n 2097151,\n 4194303,\n 8388607,\n 16777215\n ],\n Gd = 24,\n ob = 32,\n Xb = 8,\n Id = [\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7\n ];\n X(\"Predictor0\", \"PredictorAdd0\");\n self.Predictor0 = function() {\n return 4278190080;\n };\n self.Predictor1 = function(a) {\n return a;\n };\n self.Predictor2 = function(a, b, c) {\n return b[c + 0];\n };\n self.Predictor3 = function(a, b, c) {\n return b[c + 1];\n };\n self.Predictor4 = function(a, b, c) {\n return b[c - 1];\n };\n self.Predictor5 = function(a, b, c) {\n return aa(aa(a, b[c + 1]), b[c + 0]);\n };\n self.Predictor6 = function(a, b, c) {\n return aa(a, b[c - 1]);\n };\n self.Predictor7 = function(a, b, c) {\n return aa(a, b[c + 0]);\n };\n self.Predictor8 = function(a, b, c) {\n return aa(b[c - 1], b[c + 0]);\n };\n self.Predictor9 = function(a, b, c) {\n return aa(b[c + 0], b[c + 1]);\n };\n self.Predictor10 = function(a, b, c) {\n return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n };\n self.Predictor11 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return 0 >=\n Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n Ia(d & 255, a & 255, b & 255)\n ? d\n : a;\n };\n self.Predictor12 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return (\n ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n 16) |\n (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n sa((a & 255) + (d & 255) - (b & 255))) >>>\n 0\n );\n };\n self.Predictor13 = function(a, b, c) {\n var d = b[c - 1];\n a = aa(a, b[c + 0]);\n return (\n ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n 0\n );\n };\n var ee = self.PredictorAdd0;\n self.PredictorAdd1 = cc;\n X(\"Predictor2\", \"PredictorAdd2\");\n X(\"Predictor3\", \"PredictorAdd3\");\n X(\"Predictor4\", \"PredictorAdd4\");\n X(\"Predictor5\", \"PredictorAdd5\");\n X(\"Predictor6\", \"PredictorAdd6\");\n X(\"Predictor7\", \"PredictorAdd7\");\n X(\"Predictor8\", \"PredictorAdd8\");\n X(\"Predictor9\", \"PredictorAdd9\");\n X(\"Predictor10\", \"PredictorAdd10\");\n X(\"Predictor11\", \"PredictorAdd11\");\n X(\"Predictor12\", \"PredictorAdd12\");\n X(\"Predictor13\", \"PredictorAdd13\");\n var fe = self.PredictorAdd2;\n ec(\n \"ColorIndexInverseTransform\",\n \"MapARGB\",\n \"32b\",\n function(a) {\n return (a >> 8) & 255;\n },\n function(a) {\n return a;\n }\n );\n ec(\n \"VP8LColorIndexInverseTransformAlpha\",\n \"MapAlpha\",\n \"8b\",\n function(a) {\n return a;\n },\n function(a) {\n return (a >> 8) & 255;\n }\n );\n var rc = self.ColorIndexInverseTransform,\n ke = self.MapARGB,\n he = self.VP8LColorIndexInverseTransformAlpha,\n le = self.MapAlpha,\n pc,\n qc = (self.VP8LPredictorsAdd = []);\n qc.length = 16;\n (self.VP8LPredictors = []).length = 16;\n (self.VP8LPredictorsAdd_C = []).length = 16;\n (self.VP8LPredictors_C = []).length = 16;\n var Fb,\n sc,\n Gb,\n Hb,\n xc,\n uc,\n bd = V(511),\n cd = V(2041),\n dd = V(225),\n ed = V(767),\n ad = 0,\n Qb = cd,\n mb = dd,\n R = ed,\n U = bd,\n Ca = 0,\n Ua = 1,\n tc = 2,\n Va = 3,\n ya = 4,\n Db = 5,\n wc = 6,\n zb = 7,\n Ab = 8,\n Ja = 9,\n Bb = 10,\n pe = [2, 3, 7],\n oe = [3, 3, 11],\n Dc = [280, 256, 256, 256, 40],\n qe = [0, 1, 1, 1, 0],\n ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n de = [\n 24,\n 7,\n 23,\n 25,\n 40,\n 6,\n 39,\n 41,\n 22,\n 26,\n 38,\n 42,\n 56,\n 5,\n 55,\n 57,\n 21,\n 27,\n 54,\n 58,\n 37,\n 43,\n 72,\n 4,\n 71,\n 73,\n 20,\n 28,\n 53,\n 59,\n 70,\n 74,\n 36,\n 44,\n 88,\n 69,\n 75,\n 52,\n 60,\n 3,\n 87,\n 89,\n 19,\n 29,\n 86,\n 90,\n 35,\n 45,\n 68,\n 76,\n 85,\n 91,\n 51,\n 61,\n 104,\n 2,\n 103,\n 105,\n 18,\n 30,\n 102,\n 106,\n 34,\n 46,\n 84,\n 92,\n 67,\n 77,\n 101,\n 107,\n 50,\n 62,\n 120,\n 1,\n 119,\n 121,\n 83,\n 93,\n 17,\n 31,\n 100,\n 108,\n 66,\n 78,\n 118,\n 122,\n 33,\n 47,\n 117,\n 123,\n 49,\n 63,\n 99,\n 109,\n 82,\n 94,\n 0,\n 116,\n 124,\n 65,\n 79,\n 16,\n 32,\n 98,\n 110,\n 48,\n 115,\n 125,\n 81,\n 95,\n 64,\n 114,\n 126,\n 97,\n 111,\n 80,\n 113,\n 127,\n 96,\n 112\n ],\n me = [\n 2954,\n 2956,\n 2958,\n 2962,\n 2970,\n 2986,\n 3018,\n 3082,\n 3212,\n 3468,\n 3980,\n 5004\n ],\n ie = 8,\n Lb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 17,\n 18,\n 19,\n 20,\n 20,\n 21,\n 21,\n 22,\n 22,\n 23,\n 23,\n 24,\n 25,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70,\n 71,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 79,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 91,\n 93,\n 95,\n 96,\n 98,\n 100,\n 101,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 118,\n 122,\n 124,\n 126,\n 128,\n 130,\n 132,\n 134,\n 136,\n 138,\n 140,\n 143,\n 145,\n 148,\n 151,\n 154,\n 157\n ],\n Mb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 60,\n 62,\n 64,\n 66,\n 68,\n 70,\n 72,\n 74,\n 76,\n 78,\n 80,\n 82,\n 84,\n 86,\n 88,\n 90,\n 92,\n 94,\n 96,\n 98,\n 100,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 119,\n 122,\n 125,\n 128,\n 131,\n 134,\n 137,\n 140,\n 143,\n 146,\n 149,\n 152,\n 155,\n 158,\n 161,\n 164,\n 167,\n 170,\n 173,\n 177,\n 181,\n 185,\n 189,\n 193,\n 197,\n 201,\n 205,\n 209,\n 213,\n 217,\n 221,\n 225,\n 229,\n 234,\n 239,\n 245,\n 249,\n 254,\n 259,\n 264,\n 269,\n 274,\n 279,\n 284\n ],\n oa = null,\n He = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n ],\n Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n Fe = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ]\n ],\n Ke = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36]\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111, 32, 75, 80],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22]\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22, 64, 171, 36, 225, 114],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51]\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82]\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73, 154],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47]\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98]\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26]\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160, 1],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40]\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128]\n ],\n [\n [190, 80, 35, 99, 180, 80, 126, 54, 45],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24]\n ]\n ],\n Ee = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ]\n ],\n Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n Nc,\n Y = [],\n W = [],\n ka = [],\n Za,\n fd,\n Nb,\n pa,\n Ob,\n Xc,\n Tc,\n Yc,\n Uc,\n Zc,\n Vc,\n $c,\n Wc,\n Rc,\n Pc,\n Sc,\n Qc,\n re = 1,\n Cc = 2,\n ia = [],\n za,\n vc,\n fc,\n Fc,\n P = [];\n va(\"UpsampleRgbLinePair\", Ga, 3);\n va(\"UpsampleBgrLinePair\", Tb, 3);\n va(\"UpsampleRgbaLinePair\", wd, 4);\n va(\"UpsampleBgraLinePair\", vd, 4);\n va(\"UpsampleArgbLinePair\", ud, 4);\n va(\"UpsampleRgba4444LinePair\", td, 2);\n va(\"UpsampleRgb565LinePair\", sd, 2);\n var Mf = self.UpsampleRgbLinePair,\n Nf = self.UpsampleBgrLinePair,\n nd = self.UpsampleRgbaLinePair,\n od = self.UpsampleBgraLinePair,\n pd = self.UpsampleArgbLinePair,\n qd = self.UpsampleRgba4444LinePair,\n Of = self.UpsampleRgb565LinePair,\n Wa = 16,\n Ba = 1 << (Wa - 1),\n ta = -227,\n Eb = 482,\n rd = 6,\n Pf = (256 << rd) - 1,\n jc = 0,\n Yd = V(256),\n ae = V(256),\n $d = V(256),\n Zd = V(256),\n be = V(Eb - ta),\n ce = V(Eb - ta);\n la(\"YuvToRgbRow\", Ga, 3);\n la(\"YuvToBgrRow\", Tb, 3);\n la(\"YuvToRgbaRow\", wd, 4);\n la(\"YuvToBgraRow\", vd, 4);\n la(\"YuvToArgbRow\", ud, 4);\n la(\"YuvToRgba4444Row\", td, 2);\n la(\"YuvToRgb565Row\", sd, 2);\n var zd = [\n 0,\n 4,\n 8,\n 12,\n 128,\n 132,\n 136,\n 140,\n 256,\n 260,\n 264,\n 268,\n 384,\n 388,\n 392,\n 396\n ],\n Ya = [0, 2, 8],\n Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n Ne = 1;\n this.WebPDecodeRGBA = function(a, b, c, d, e) {\n var f = Ua;\n var g = new Cf(),\n h = new Cb();\n g.ba = h;\n h.S = f;\n h.width = [h.width];\n h.height = [h.height];\n var k = h.width;\n var l = h.height,\n m = new Td();\n if (null == m || null == a) var n = 2;\n else\n x(null != m),\n (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n 0 != n\n ? (k = 0)\n : (null != k && (k[0] = m.width[0]),\n null != l && (l[0] = m.height[0]),\n (k = 1));\n if (k) {\n h.width = h.width[0];\n h.height = h.height[0];\n null != d && (d[0] = h.width);\n null != e && (e[0] = h.height);\n b: {\n d = new Oa();\n e = new md();\n e.data = a;\n e.w = b;\n e.ha = c;\n e.kd = 1;\n b = [0];\n x(null != e);\n a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n (0 == a || 7 == a) && b[0] && (a = 4);\n b = a;\n if (0 == b) {\n x(null != g);\n d.data = e.data;\n d.w = e.w + e.offset;\n d.ha = e.ha - e.offset;\n d.put = kc;\n d.ac = gc;\n d.bc = lc;\n d.ma = g;\n if (e.xa) {\n a = Bc();\n if (null == a) {\n g = 1;\n break b;\n }\n if (te(a, d)) {\n b = Cd(d.width, d.height, g.Oa, g.ba);\n if ((d = 0 == b)) {\n c: {\n d = a;\n d: for (;;) {\n if (null == d) {\n d = 0;\n break c;\n }\n x(null != d.s.yc);\n x(null != d.s.Ya);\n x(0 < d.s.Wb);\n c = d.l;\n x(null != c);\n e = c.ma;\n x(null != e);\n if (0 != d.xb) {\n d.ca = e.ba;\n d.tb = e.tb;\n x(null != d.ca);\n if (!hc(e.Oa, c, Va)) {\n d.a = 2;\n break d;\n }\n if (!Ec(d, c.width)) break d;\n if (c.da) break d;\n (c.da || hb(d.ca.S)) && Aa();\n 11 > d.ca.S ||\n (alert(\"todo:WebPInitConvertARGBToYUV\"),\n null != d.ca.f.kb.F && Aa());\n if (\n d.Pb &&\n 0 < d.s.ua &&\n null == d.s.vb.X &&\n !Zb(d.s.vb, d.s.Wa.Xa)\n ) {\n d.a = 1;\n break d;\n }\n d.xb = 0;\n }\n if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n e.Dc = d.Ma;\n d = 1;\n break c;\n }\n x(0 != d.a);\n d = 0;\n }\n d = !d;\n }\n d && (b = a.a);\n } else b = a.a;\n } else {\n a = new Ce();\n if (null == a) {\n g = 1;\n break b;\n }\n a.Fa = e.na;\n a.P = e.P;\n a.qc = e.Sa;\n if (Kc(a, d)) {\n if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n a.Aa = 0;\n c = g.Oa;\n e = a;\n x(null != e);\n if (null != c) {\n k = c.Md;\n k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n if (0 < k) {\n for (l = m = 0; 4 > l; ++l)\n (n = e.pb[l]),\n 12 > n.lc &&\n (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n (m |= n.ia);\n m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n }\n e.Ga = c.Id;\n 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n }\n Me(a, d) || (b = a.a);\n }\n } else b = a.a;\n }\n 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n }\n g = b;\n }\n f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n } else f = null;\n return f;\n };\n var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n };\n new _WebPDecoder();\n\n /** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n function memcmp(data, data_off, str, size) {\n for (var i = 0; i < size; i++)\n if (data[data_off + i] != str.charCodeAt(i)) return true;\n return false;\n }\n\n function GetTag(data, data_off) {\n var str = \"\";\n for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n return str;\n }\n\n function GetLE16(data, data_off) {\n return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n }\n\n function GetLE24(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16)) >>>\n 0\n );\n }\n\n function GetLE32(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16) |\n (data[data_off + 3] << 24)) >>>\n 0\n );\n }\n\n function WebPRiffParser(src, src_off) {\n var imagearray = {};\n var i = 0;\n var alpha_chunk = false;\n var alpha_size = 0;\n var alpha_offset = 0;\n imagearray[\"frames\"] = [];\n if (memcmp(src, src_off, \"RIFF\", 4)) return;\n src_off += 4;\n var riff_size = GetLE32(src, src_off) + 8;\n src_off += 8;\n\n while (src_off < src.length) {\n var fourcc = GetTag(src, src_off);\n src_off += 4;\n\n var payload_size = GetLE32(src, src_off);\n src_off += 4;\n var payload_size_padded = payload_size + (payload_size & 1);\n\n switch (fourcc) {\n case \"VP8 \":\n case \"VP8L\":\n if (typeof imagearray[\"frames\"][i] === \"undefined\")\n imagearray[\"frames\"][i] = {};\n var obj = imagearray[\"frames\"][i];\n var height = [0];\n var width = [0];\n obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n obj[\"src_size\"] = alpha_size + payload_size + 8;\n //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n i++;\n if (alpha_chunk) {\n alpha_chunk = false;\n alpha_size = 0;\n alpha_offset = 0;\n }\n break;\n case \"VP8X\":\n var obj = (imagearray[\"header\"] = {});\n var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n var src_off_ = src_off + 4;\n var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n var canvas_height = (obj[\"canvas_height\"] =\n 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n break;\n case \"ALPH\":\n alpha_chunk = true;\n alpha_size = payload_size_padded + 8;\n alpha_offset = src_off - 8;\n break;\n\n case \"ANIM\":\n var obj = imagearray[\"header\"];\n var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n src_off_ = src_off + 4;\n\n var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n src_off_ += 2;\n break;\n case \"ANMF\":\n var offset_x = 0,\n offset_y = 0,\n width = 0,\n height = 0,\n duration = 0,\n blend = 0,\n dispose = 0,\n temp = 0;\n var obj = (imagearray[\"frames\"][i] = {});\n obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"duration\"] = duration = GetLE24(src, src_off);\n src_off += 3;\n temp = src[src_off++];\n obj[\"dispose\"] = dispose = temp & 1;\n obj[\"blend\"] = blend = (temp >> 1) & 1;\n break;\n default:\n }\n if (fourcc != \"ANMF\") src_off += payload_size_padded;\n }\n return imagearray;\n }\n\n var height = [0];\n var width = [0];\n var pixels = [];\n var webpdecoder = new _WebPDecoder();\n\n var response = imageData;\n var imagearray = WebPRiffParser(response, 0);\n imagearray[\"response\"] = response;\n imagearray[\"rgbaoutput\"] = true;\n imagearray[\"dataurl\"] = false;\n\n var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n if (header) {\n header[\"loop_counter\"] = header[\"loop_count\"];\n height = [header[\"canvas_height\"]];\n width = [header[\"canvas_width\"]];\n\n var blend = false;\n for (var f = 0; f < frames.length; f++)\n if (frames[f][\"blend\"] == 0) {\n blend = true;\n break;\n }\n }\n\n var frame = frames[0];\n var rgba = webpdecoder.WebPDecodeRGBA(\n response,\n frame[\"src_off\"],\n frame[\"src_size\"],\n width,\n height\n );\n frame[\"rgba\"] = rgba;\n frame[\"imgwidth\"] = width[0];\n frame[\"imgheight\"] = height[0];\n\n for (var i = 0; i < width[0] * height[0] * 4; i++) {\n pixels[i] = rgba[i];\n }\n\n this.width = width;\n this.height = height;\n this.data = pixels;\n return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /*\n * @see http://www.w3.org/TR/PNG-Chunks.html\n *\n Color Allowed Interpretation\n Type Bit Depths\n\n 0 1,2,4,8,16 Each pixel is a grayscale sample.\n\n 2 8,16 Each pixel is an R,G,B triple.\n\n 3 1,2,4,8 Each pixel is a palette index;\n a PLTE chunk must appear.\n\n 4 8,16 Each pixel is a grayscale sample,\n followed by an alpha sample.\n\n 6 8,16 Each pixel is an R,G,B triple,\n followed by an alpha sample.\n */\n\n /*\n * PNG filter method types\n *\n * @see http://www.w3.org/TR/PNG-Filters.html\n * @see http://www.libpng.org/pub/png/book/chapter09.html\n *\n * This is what the value 'Predictor' in decode params relates to\n *\n * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n *\n 0 None\n 1 Sub\n 2 Up\n 3 Average\n 4 Paeth\n */\n\n var canCompress = function(value) {\n return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n };\n\n var hasCompressionJS = function() {\n return typeof zlibSync === \"function\";\n };\n var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n var level = 4;\n var filter_method = filterUp;\n\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n level = 1;\n filter_method = filterSub;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n level = 6;\n filter_method = filterAverage;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n level = 9;\n filter_method = filterPaeth;\n break;\n }\n\n bytes = applyPngFilterMethod(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n );\n var dat = zlibSync(bytes, { level: level });\n return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n };\n\n var applyPngFilterMethod = function(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n ) {\n var lines = bytes.length / lineLength,\n result = new Uint8Array(bytes.length + lines),\n filter_methods = getFilterMethods(),\n line,\n prevLine,\n offset;\n\n for (var i = 0; i < lines; i += 1) {\n offset = i * lineLength;\n line = bytes.subarray(offset, offset + lineLength);\n\n if (filter_method) {\n result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n } else {\n var len = filter_methods.length,\n results = [];\n\n for (var j; j < len; j += 1) {\n results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n }\n\n var ind = getIndexOfSmallestSum(results.concat());\n\n result.set(results[ind], offset + i);\n }\n\n prevLine = line;\n }\n\n return result;\n };\n\n var filterNone = function(line) {\n /*var result = new Uint8Array(line.length + 1);\n result[0] = 0;\n result.set(line, 1);*/\n\n var result = Array.apply([], line);\n result.unshift(0);\n\n return result;\n };\n\n var filterSub = function(line, colorsPerPixel) {\n var result = [],\n len = line.length,\n left;\n\n result[0] = 1;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterUp = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n up;\n\n result[0] = 2;\n\n for (var i = 0; i < len; i += 1) {\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterAverage = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up;\n\n result[0] = 3;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n }\n\n return result;\n };\n\n var filterPaeth = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up,\n upLeft,\n paeth;\n\n result[0] = 4;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n paeth = paethPredictor(left, up, upLeft);\n result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var paethPredictor = function(left, up, upLeft) {\n if (left === up && up === upLeft) {\n return left;\n }\n var pLeft = Math.abs(up - upLeft),\n pUp = Math.abs(left - upLeft),\n pUpLeft = Math.abs(left + up - upLeft - upLeft);\n return pLeft <= pUp && pLeft <= pUpLeft\n ? left\n : pUp <= pUpLeft\n ? up\n : upLeft;\n };\n\n var getFilterMethods = function() {\n return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n };\n\n var getIndexOfSmallestSum = function(arrays) {\n var sum = arrays.map(function(value) {\n return value.reduce(function(pv, cv) {\n return pv + Math.abs(cv);\n }, 0);\n });\n return sum.indexOf(Math.min.apply(null, sum));\n };\n\n var getPredictorFromCompression = function(compression) {\n var predictor;\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n predictor = 11;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n predictor = 13;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n predictor = 14;\n break;\n\n default:\n predictor = 12;\n break;\n }\n return predictor;\n };\n\n /**\n * @name processPNG\n * @function\n * @ignore\n */\n jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n \"use strict\";\n\n var colorSpace,\n filter = this.decode.FLATE_DECODE,\n bitsPerComponent,\n image,\n decodeParameters = \"\",\n trns,\n colors,\n pal,\n smask,\n pixels,\n len,\n alphaData,\n imgData,\n hasColors,\n pixel,\n i,\n n;\n\n if (this.__addimage__.isArrayBuffer(imageData))\n imageData = new Uint8Array(imageData);\n\n if (this.__addimage__.isArrayBufferView(imageData)) {\n image = new PNG(imageData);\n imageData = image.imgData;\n bitsPerComponent = image.bits;\n colorSpace = image.colorSpace;\n colors = image.colors;\n\n /*\n * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n *\n * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n *\n * Extract alpha to create two separate images, using the alpha as a sMask\n */\n if ([4, 6].indexOf(image.colorType) !== -1) {\n /*\n * processes 8 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 8) {\n pixels =\n image.pixelBitlength == 32\n ? new Uint32Array(image.decodePixels().buffer)\n : image.pixelBitlength == 16\n ? new Uint16Array(image.decodePixels().buffer)\n : new Uint8Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(len * image.colors);\n alphaData = new Uint8Array(len);\n var pDiff = image.pixelBitlength - image.bits;\n i = 0;\n n = 0;\n var pbl;\n\n for (; i < len; i++) {\n pixel = pixels[i];\n pbl = 0;\n\n while (pbl < pDiff) {\n imgData[n++] = (pixel >>> pbl) & 0xff;\n pbl = pbl + image.bits;\n }\n\n alphaData[i] = (pixel >>> pbl) & 0xff;\n }\n }\n\n /*\n * processes 16 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 16) {\n pixels = new Uint32Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(\n len * (32 / image.pixelBitlength) * image.colors\n );\n alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n hasColors = image.colors > 1;\n i = 0;\n n = 0;\n var a = 0;\n\n while (i < len) {\n pixel = pixels[i++];\n\n imgData[n++] = (pixel >>> 0) & 0xff;\n\n if (hasColors) {\n imgData[n++] = (pixel >>> 16) & 0xff;\n\n pixel = pixels[i++];\n imgData[n++] = (pixel >>> 0) & 0xff;\n }\n\n alphaData[a++] = (pixel >>> 16) & 0xff;\n }\n bitsPerComponent = 8;\n }\n\n if (canCompress(compression)) {\n imageData = compressBytes(\n imgData,\n image.width * image.colors,\n image.colors,\n compression\n );\n smask = compressBytes(alphaData, image.width, 1, compression);\n } else {\n imageData = imgData;\n smask = alphaData;\n filter = undefined;\n }\n }\n\n /*\n * Indexed png. Each pixel is a palette index.\n */\n if (image.colorType === 3) {\n colorSpace = this.color_spaces.INDEXED;\n pal = image.palette;\n\n if (image.transparency.indexed) {\n var trans = image.transparency.indexed;\n var total = 0;\n i = 0;\n len = trans.length;\n\n for (; i < len; ++i) {\n total += trans[i];\n }\n\n total = total / 255;\n\n /*\n * a single color is specified as 100% transparent (0),\n * so we set trns to use a /Mask with that index\n */\n if (total === len - 1 && trans.indexOf(0) !== -1) {\n trns = [trans.indexOf(0)];\n\n /*\n * there's more than one colour within the palette that specifies\n * a transparency value less than 255, so we unroll the pixels to create an image sMask\n */\n } else if (total !== len) {\n pixels = image.decodePixels();\n alphaData = new Uint8Array(pixels.length);\n i = 0;\n len = pixels.length;\n\n for (; i < len; i++) {\n alphaData[i] = trans[pixels[i]];\n }\n\n smask = compressBytes(alphaData, image.width, 1);\n }\n }\n }\n\n var predictor = getPredictorFromCompression(compression);\n\n if (filter === this.decode.FLATE_DECODE) {\n decodeParameters = \"/Predictor \" + predictor + \" \";\n }\n decodeParameters +=\n \"/Colors \" +\n colors +\n \" /BitsPerComponent \" +\n bitsPerComponent +\n \" /Columns \" +\n image.width;\n\n if (\n this.__addimage__.isArrayBuffer(imageData) ||\n this.__addimage__.isArrayBufferView(imageData)\n ) {\n imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n }\n\n if (\n (smask && this.__addimage__.isArrayBuffer(smask)) ||\n this.__addimage__.isArrayBufferView(smask)\n ) {\n smask = this.__addimage__.arrayBufferToBinaryString(smask);\n }\n\n return {\n alias: alias,\n data: imageData,\n index: index,\n filter: filter,\n decodeParameters: decodeParameters,\n transparency: trns,\n palette: pal,\n sMask: smask,\n predictor: predictor,\n width: image.width,\n height: image.height,\n bitsPerComponent: bitsPerComponent,\n colorSpace: colorSpace\n };\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n var reader = new GifReader(imageData);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = [];\n\n reader.decodeAndBlitFrameRGBA(0, pixels);\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n\n jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n var reader = new BmpDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n var reader = new WebPDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name processRGBA\n * @function\n *\n * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n * RGBA array data can be obtained from DOM canvas getImageData.\n * @ignore\n */\n jsPDFAPI.processRGBA = function(imageData, index, alias) {\n \"use strict\";\n\n var imagePixels = imageData.data;\n var length = imagePixels.length;\n // jsPDF takes alpha data separately so extract that.\n var rgbOut = new Uint8Array((length / 4) * 3);\n var alphaOut = new Uint8Array(length / 4);\n var outIndex = 0;\n var alphaIndex = 0;\n\n for (var i = 0; i < length; i += 4) {\n var r = imagePixels[i];\n var g = imagePixels[i + 1];\n var b = imagePixels[i + 2];\n var alpha = imagePixels[i + 3];\n rgbOut[outIndex++] = r;\n rgbOut[outIndex++] = g;\n rgbOut[outIndex++] = b;\n alphaOut[alphaIndex++] = alpha;\n }\n\n var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n return {\n alpha: alphaData,\n data: rgbData,\n index: index,\n alias: alias,\n colorSpace: \"DeviceRGB\",\n bitsPerComponent: 8,\n width: imageData.width,\n height: imageData.height\n };\n };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Add Language Tag to the generated PDF\n *\n * @name setLanguage\n * @function\n * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF()\n * doc.text(10, 10, 'This is a test')\n * doc.setLanguage(\"en-US\")\n * doc.save('english.pdf')\n */\n jsPDFAPI.setLanguage = function(langCode) {\n \"use strict\";\n\n var langCodes = {\n af: \"Afrikaans\",\n sq: \"Albanian\",\n ar: \"Arabic (Standard)\",\n \"ar-DZ\": \"Arabic (Algeria)\",\n \"ar-BH\": \"Arabic (Bahrain)\",\n \"ar-EG\": \"Arabic (Egypt)\",\n \"ar-IQ\": \"Arabic (Iraq)\",\n \"ar-JO\": \"Arabic (Jordan)\",\n \"ar-KW\": \"Arabic (Kuwait)\",\n \"ar-LB\": \"Arabic (Lebanon)\",\n \"ar-LY\": \"Arabic (Libya)\",\n \"ar-MA\": \"Arabic (Morocco)\",\n \"ar-OM\": \"Arabic (Oman)\",\n \"ar-QA\": \"Arabic (Qatar)\",\n \"ar-SA\": \"Arabic (Saudi Arabia)\",\n \"ar-SY\": \"Arabic (Syria)\",\n \"ar-TN\": \"Arabic (Tunisia)\",\n \"ar-AE\": \"Arabic (U.A.E.)\",\n \"ar-YE\": \"Arabic (Yemen)\",\n an: \"Aragonese\",\n hy: \"Armenian\",\n as: \"Assamese\",\n ast: \"Asturian\",\n az: \"Azerbaijani\",\n eu: \"Basque\",\n be: \"Belarusian\",\n bn: \"Bengali\",\n bs: \"Bosnian\",\n br: \"Breton\",\n bg: \"Bulgarian\",\n my: \"Burmese\",\n ca: \"Catalan\",\n ch: \"Chamorro\",\n ce: \"Chechen\",\n zh: \"Chinese\",\n \"zh-HK\": \"Chinese (Hong Kong)\",\n \"zh-CN\": \"Chinese (PRC)\",\n \"zh-SG\": \"Chinese (Singapore)\",\n \"zh-TW\": \"Chinese (Taiwan)\",\n cv: \"Chuvash\",\n co: \"Corsican\",\n cr: \"Cree\",\n hr: \"Croatian\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch (Standard)\",\n \"nl-BE\": \"Dutch (Belgian)\",\n en: \"English\",\n \"en-AU\": \"English (Australia)\",\n \"en-BZ\": \"English (Belize)\",\n \"en-CA\": \"English (Canada)\",\n \"en-IE\": \"English (Ireland)\",\n \"en-JM\": \"English (Jamaica)\",\n \"en-NZ\": \"English (New Zealand)\",\n \"en-PH\": \"English (Philippines)\",\n \"en-ZA\": \"English (South Africa)\",\n \"en-TT\": \"English (Trinidad & Tobago)\",\n \"en-GB\": \"English (United Kingdom)\",\n \"en-US\": \"English (United States)\",\n \"en-ZW\": \"English (Zimbabwe)\",\n eo: \"Esperanto\",\n et: \"Estonian\",\n fo: \"Faeroese\",\n fj: \"Fijian\",\n fi: \"Finnish\",\n fr: \"French (Standard)\",\n \"fr-BE\": \"French (Belgium)\",\n \"fr-CA\": \"French (Canada)\",\n \"fr-FR\": \"French (France)\",\n \"fr-LU\": \"French (Luxembourg)\",\n \"fr-MC\": \"French (Monaco)\",\n \"fr-CH\": \"French (Switzerland)\",\n fy: \"Frisian\",\n fur: \"Friulian\",\n gd: \"Gaelic (Scots)\",\n \"gd-IE\": \"Gaelic (Irish)\",\n gl: \"Galacian\",\n ka: \"Georgian\",\n de: \"German (Standard)\",\n \"de-AT\": \"German (Austria)\",\n \"de-DE\": \"German (Germany)\",\n \"de-LI\": \"German (Liechtenstein)\",\n \"de-LU\": \"German (Luxembourg)\",\n \"de-CH\": \"German (Switzerland)\",\n el: \"Greek\",\n gu: \"Gujurati\",\n ht: \"Haitian\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n is: \"Icelandic\",\n id: \"Indonesian\",\n iu: \"Inuktitut\",\n ga: \"Irish\",\n it: \"Italian (Standard)\",\n \"it-CH\": \"Italian (Switzerland)\",\n ja: \"Japanese\",\n kn: \"Kannada\",\n ks: \"Kashmiri\",\n kk: \"Kazakh\",\n km: \"Khmer\",\n ky: \"Kirghiz\",\n tlh: \"Klingon\",\n ko: \"Korean\",\n \"ko-KP\": \"Korean (North Korea)\",\n \"ko-KR\": \"Korean (South Korea)\",\n la: \"Latin\",\n lv: \"Latvian\",\n lt: \"Lithuanian\",\n lb: \"Luxembourgish\",\n mk: \"North Macedonia\",\n ms: \"Malay\",\n ml: \"Malayalam\",\n mt: \"Maltese\",\n mi: \"Maori\",\n mr: \"Marathi\",\n mo: \"Moldavian\",\n nv: \"Navajo\",\n ng: \"Ndonga\",\n ne: \"Nepali\",\n no: \"Norwegian\",\n nb: \"Norwegian (Bokmal)\",\n nn: \"Norwegian (Nynorsk)\",\n oc: \"Occitan\",\n or: \"Oriya\",\n om: \"Oromo\",\n fa: \"Persian\",\n \"fa-IR\": \"Persian/Iran\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n \"pt-BR\": \"Portuguese (Brazil)\",\n pa: \"Punjabi\",\n \"pa-IN\": \"Punjabi (India)\",\n \"pa-PK\": \"Punjabi (Pakistan)\",\n qu: \"Quechua\",\n rm: \"Rhaeto-Romanic\",\n ro: \"Romanian\",\n \"ro-MO\": \"Romanian (Moldavia)\",\n ru: \"Russian\",\n \"ru-MO\": \"Russian (Moldavia)\",\n sz: \"Sami (Lappish)\",\n sg: \"Sango\",\n sa: \"Sanskrit\",\n sc: \"Sardinian\",\n sd: \"Sindhi\",\n si: \"Singhalese\",\n sr: \"Serbian\",\n sk: \"Slovak\",\n sl: \"Slovenian\",\n so: \"Somani\",\n sb: \"Sorbian\",\n es: \"Spanish\",\n \"es-AR\": \"Spanish (Argentina)\",\n \"es-BO\": \"Spanish (Bolivia)\",\n \"es-CL\": \"Spanish (Chile)\",\n \"es-CO\": \"Spanish (Colombia)\",\n \"es-CR\": \"Spanish (Costa Rica)\",\n \"es-DO\": \"Spanish (Dominican Republic)\",\n \"es-EC\": \"Spanish (Ecuador)\",\n \"es-SV\": \"Spanish (El Salvador)\",\n \"es-GT\": \"Spanish (Guatemala)\",\n \"es-HN\": \"Spanish (Honduras)\",\n \"es-MX\": \"Spanish (Mexico)\",\n \"es-NI\": \"Spanish (Nicaragua)\",\n \"es-PA\": \"Spanish (Panama)\",\n \"es-PY\": \"Spanish (Paraguay)\",\n \"es-PE\": \"Spanish (Peru)\",\n \"es-PR\": \"Spanish (Puerto Rico)\",\n \"es-ES\": \"Spanish (Spain)\",\n \"es-UY\": \"Spanish (Uruguay)\",\n \"es-VE\": \"Spanish (Venezuela)\",\n sx: \"Sutu\",\n sw: \"Swahili\",\n sv: \"Swedish\",\n \"sv-FI\": \"Swedish (Finland)\",\n \"sv-SV\": \"Swedish (Sweden)\",\n ta: \"Tamil\",\n tt: \"Tatar\",\n te: \"Teluga\",\n th: \"Thai\",\n tig: \"Tigre\",\n ts: \"Tsonga\",\n tn: \"Tswana\",\n tr: \"Turkish\",\n tk: \"Turkmen\",\n uk: \"Ukrainian\",\n hsb: \"Upper Sorbian\",\n ur: \"Urdu\",\n ve: \"Venda\",\n vi: \"Vietnamese\",\n vo: \"Volapuk\",\n wa: \"Walloon\",\n cy: \"Welsh\",\n xh: \"Xhosa\",\n ji: \"Yiddish\",\n zu: \"Zulu\"\n };\n\n if (this.internal.languageSettings === undefined) {\n this.internal.languageSettings = {};\n this.internal.languageSettings.isSubscribed = false;\n }\n\n if (langCodes[langCode] !== undefined) {\n this.internal.languageSettings.languageCode = langCode;\n if (this.internal.languageSettings.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.write(\n \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n );\n });\n this.internal.languageSettings.isSubscribed = true;\n }\n }\n return this;\n };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n \"use strict\";\n API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n var decoded = \"0123456789abcdef\",\n encoded = \"klmnopqrstuvwxyz\",\n mappingUncompress = {},\n mappingCompress = {};\n\n for (var i = 0; i < encoded.length; i++) {\n mappingUncompress[encoded[i]] = decoded[i];\n mappingCompress[decoded[i]] = encoded[i];\n }\n\n var hex = function(value) {\n return \"0x\" + parseInt(value, 10).toString(16);\n };\n\n var compress = (API.__fontmetrics__.compress = function(data) {\n var vals = [\"{\"];\n var value, keystring, valuestring, numberprefix;\n\n for (var key in data) {\n value = data[key];\n\n if (!isNaN(parseInt(key, 10))) {\n key = parseInt(key, 10);\n keystring = hex(key).slice(2);\n keystring =\n keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n } else {\n keystring = \"'\" + key + \"'\";\n }\n\n if (typeof value == \"number\") {\n if (value < 0) {\n valuestring = hex(value).slice(3);\n numberprefix = \"-\";\n } else {\n valuestring = hex(value).slice(2);\n numberprefix = \"\";\n }\n valuestring =\n numberprefix +\n valuestring.slice(0, -1) +\n mappingCompress[valuestring.slice(-1)];\n } else {\n if (typeof value === \"object\") {\n valuestring = compress(value);\n } else {\n throw new Error(\n \"Don't know what to do with value type \" + typeof value + \".\"\n );\n }\n }\n vals.push(keystring + valuestring);\n }\n vals.push(\"}\");\n return vals.join(\"\");\n });\n\n /**\n * Uncompresses data compressed into custom, base16-like format.\n *\n * @public\n * @function\n * @param\n * @returns {Type}\n */\n var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n if (typeof data !== \"string\") {\n throw new Error(\"Invalid argument passed to uncompress.\");\n }\n\n var output = {},\n sign = 1,\n stringparts, // undef. will be [] in string mode\n activeobject = output,\n parentchain = [],\n parent_key_pair,\n keyparts = \"\",\n valueparts = \"\",\n key, // undef. will be Truthy when Key is resolved.\n datalen = data.length - 1, // stripping ending }\n ch;\n\n for (var i = 1; i < datalen; i += 1) {\n // - { } ' are special.\n\n ch = data[i];\n\n if (ch == \"'\") {\n if (stringparts) {\n // end of string mode\n key = stringparts.join(\"\");\n stringparts = undefined;\n } else {\n // start of string mode\n stringparts = [];\n }\n } else if (stringparts) {\n stringparts.push(ch);\n } else if (ch == \"{\") {\n // start of object\n parentchain.push([activeobject, key]);\n activeobject = {};\n key = undefined;\n } else if (ch == \"}\") {\n // end of object\n parent_key_pair = parentchain.pop();\n parent_key_pair[0][parent_key_pair[1]] = activeobject;\n key = undefined;\n activeobject = parent_key_pair[0];\n } else if (ch == \"-\") {\n sign = -1;\n } else {\n // must be number\n if (key === undefined) {\n if (mappingUncompress.hasOwnProperty(ch)) {\n keyparts += mappingUncompress[ch];\n key = parseInt(keyparts, 16) * sign;\n sign = +1;\n keyparts = \"\";\n } else {\n keyparts += ch;\n }\n } else {\n if (mappingUncompress.hasOwnProperty(ch)) {\n valueparts += mappingUncompress[ch];\n activeobject[key] = parseInt(valueparts, 16) * sign;\n sign = +1;\n key = undefined;\n valueparts = \"\";\n } else {\n valueparts += ch;\n }\n }\n }\n }\n return output;\n });\n\n // encoding = 'Unicode'\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n // Actual 16bit char codes used.\n // no multi-byte logic here\n\n // Unicode characters to WinAnsiEncoding:\n // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n // as well as give strings with some (supported by these fonts) Unicode characters and\n // these will be mapped to win cp1252\n // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n var encodingBlock = {\n codePages: [\"WinAnsiEncoding\"],\n WinAnsiEncoding: uncompress(\n \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n )\n };\n var encodings = {\n Unicode: {\n Courier: encodingBlock,\n \"Courier-Bold\": encodingBlock,\n \"Courier-BoldOblique\": encodingBlock,\n \"Courier-Oblique\": encodingBlock,\n Helvetica: encodingBlock,\n \"Helvetica-Bold\": encodingBlock,\n \"Helvetica-BoldOblique\": encodingBlock,\n \"Helvetica-Oblique\": encodingBlock,\n \"Times-Roman\": encodingBlock,\n \"Times-Bold\": encodingBlock,\n \"Times-BoldItalic\": encodingBlock,\n \"Times-Italic\": encodingBlock\n //\t, 'Symbol'\n //\t, 'ZapfDingbats'\n }\n };\n\n var fontMetrics = {\n Unicode: {\n // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n // width is 476/1000 or 47.6% of its height (regardless of font size)\n // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n \"Courier-Oblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-BoldItalic\": uncompress(\n \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n \"Helvetica-Bold\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-BoldOblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-Bold\": uncompress(\n \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n Symbol: uncompress(\n \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n ),\n Helvetica: uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n ),\n \"Helvetica-BoldOblique\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Times-Italic\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n ),\n \"Times-Roman\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n ),\n \"Helvetica-Oblique\": uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n )\n }\n };\n\n /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n API.events.push([\n \"addFont\",\n function(data) {\n var font = data.font;\n\n var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n if (metrics) {\n font.metadata[\"Unicode\"] = {};\n font.metadata[\"Unicode\"].widths = metrics.widths;\n font.metadata[\"Unicode\"].kerning = metrics.kerning;\n }\n\n var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n if (encodingBlock) {\n font.metadata[\"Unicode\"].encoding = encodingBlock;\n font.encoding = encodingBlock.codePages[0];\n }\n }\n ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n\n var binaryStringToUint8Array = function(binary_string) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n };\n\n var addFont = function(font, file) {\n // eslint-disable-next-line no-control-regex\n if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n file = binaryStringToUint8Array(file);\n } else {\n file = binaryStringToUint8Array(atob(file));\n }\n font.metadata = jsPDF.API.TTFFont.open(file);\n font.metadata.Unicode = font.metadata.Unicode || {\n encoding: {},\n kerning: {},\n widths: []\n };\n font.metadata.glyIdsUsed = [0];\n };\n\n jsPDF.API.events.push([\n \"addFont\",\n function(data) {\n var file = undefined;\n var font = data.font;\n var instance = data.instance;\n if (font.isStandardFont) {\n return;\n }\n if (typeof instance !== \"undefined\") {\n if (instance.existsFileInVFS(font.postScriptName) === false) {\n file = instance.loadFile(font.postScriptName);\n } else {\n file = instance.getFileFromVFS(font.postScriptName);\n }\n if (typeof file !== \"string\") {\n throw new Error(\n \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n addFont(font, file);\n } else {\n throw new Error(\n \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n }\n ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadCanvg() {\n return (function() {\n if (globalObject[\"canvg\"]) {\n return Promise.resolve(globalObject[\"canvg\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"canvg\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"canvg\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load canvg\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load canvg: \" + e));\n })\n .then(function(canvg) {\n return canvg.default ? canvg.default : canvg;\n });\n }\n\n /**\n * Parses SVG XML and saves it as image into the PDF.\n *\n * Depends on canvas-element and canvg\n *\n * @name addSvgAsImage\n * @public\n * @function\n * @param {string} SVG-Data as Text\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n * @param {string} alias of SVG-Image (if used multiple times)\n * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation of the image in degrees (0-359)\n *\n * @returns jsPDF jsPDF-instance\n */\n jsPDFAPI.addSvgAsImage = function(\n svg,\n x,\n y,\n w,\n h,\n alias,\n compression,\n rotation\n ) {\n if (isNaN(x) || isNaN(y)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n }\n\n if (isNaN(w) || isNaN(h)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n throw new Error(\n \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n );\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"#fff\"; /// set white fill style\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var options = {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true\n };\n var doc = this;\n return loadCanvg()\n .then(\n function(canvg) {\n return canvg.fromString(ctx, svg, options);\n },\n function() {\n return Promise.reject(new Error(\"Could not load canvg.\"));\n }\n )\n .then(function(instance) {\n return instance.render(options);\n })\n .then(function() {\n doc.addImage(\n canvas.toDataURL(\"image/jpeg\", 1.0),\n x,\n y,\n w,\n h,\n compression,\n rotation\n );\n });\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * @name putTotalPages\n * @function\n * @param {string} pageExpression Regular Expression\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.putTotalPages = function(pageExpression) {\n \"use strict\";\n\n var replaceExpression;\n var totalNumberOfPages = 0;\n if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n replaceExpression = new RegExp(pageExpression, \"g\");\n totalNumberOfPages = this.internal.getNumberOfPages();\n } else {\n replaceExpression = new RegExp(\n this.pdfEscape16(pageExpression, this.internal.getFont()),\n \"g\"\n );\n totalNumberOfPages = this.pdfEscape16(\n this.internal.getNumberOfPages() + \"\",\n this.internal.getFont()\n );\n }\n\n for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n for (var i = 0; i < this.internal.pages[n].length; i++) {\n this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n replaceExpression,\n totalNumberOfPages\n );\n }\n }\n\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * Set the ViewerPreferences of the generated PDF\n *\n * @name viewerPreferences\n * @function\n * @public\n * @param {Object} options Array with the ViewerPreferences
    \n * Example: doc.viewerPreferences({\"FitWindow\":true});
    \n *
    \n * You can set following preferences:
    \n *
    \n * HideToolbar (boolean)
    \n * Default value: false
    \n *
    \n * HideMenubar (boolean)
    \n * Default value: false.
    \n *
    \n * HideWindowUI (boolean)
    \n * Default value: false.
    \n *
    \n * FitWindow (boolean)
    \n * Default value: false.
    \n *
    \n * CenterWindow (boolean)
    \n * Default value: false
    \n *
    \n * DisplayDocTitle (boolean)
    \n * Default value: false.
    \n *
    \n * NonFullScreenPageMode (string)
    \n * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    \n * Default value: UseNone
    \n *
    \n * Direction (string)
    \n * Possible values: L2R, R2L
    \n * Default value: L2R.
    \n *
    \n * ViewArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * ViewClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * PrintScaling (string)
    \n * Possible values: AppDefault, None
    \n * Default value: AppDefault.
    \n *
    \n * Duplex (string)
    \n * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n * Default value: none
    \n *
    \n * PickTrayByPDFSize (boolean)
    \n * Default value: false
    \n *
    \n * PrintPageRange (Array)
    \n * Example: [[1,5], [7,9]]
    \n * Default value: as defined by PDF viewer application
    \n *
    \n * NumCopies (Number)
    \n * Possible values: 1, 2, 3, 4, 5
    \n * Default value: 1
    \n *
    \n * For more information see the PDF Reference, sixth edition on Page 577\n * @param {boolean} doReset True to reset the settings\n * @function\n * @returns jsPDF jsPDF-instance\n * @example\n * var doc = new jsPDF()\n * doc.text('This is a test', 10, 10)\n * doc.viewerPreferences({'FitWindow': true}, true)\n * doc.save(\"viewerPreferences.pdf\")\n *\n * // Example printing 10 copies, using cropbox, and hiding UI.\n * doc.viewerPreferences({\n * 'HideWindowUI': true,\n * 'PrintArea': 'CropBox',\n * 'NumCopies': 10\n * })\n */\n jsPDFAPI.viewerPreferences = function(options, doReset) {\n options = options || {};\n doReset = doReset || false;\n\n var configuration;\n var configurationTemplate = {\n HideToolbar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideMenubar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideWindowUI: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n FitWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n CenterWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n DisplayDocTitle: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.4\n },\n NonFullScreenPageMode: {\n defaultValue: \"UseNone\",\n value: \"UseNone\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n pdfVersion: 1.3\n },\n Direction: {\n defaultValue: \"L2R\",\n value: \"L2R\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"L2R\", \"R2L\"],\n pdfVersion: 1.3\n },\n ViewArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n ViewClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintScaling: {\n defaultValue: \"AppDefault\",\n value: \"AppDefault\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"AppDefault\", \"None\"],\n pdfVersion: 1.6\n },\n Duplex: {\n defaultValue: \"\",\n value: \"none\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\n \"Simplex\",\n \"DuplexFlipShortEdge\",\n \"DuplexFlipLongEdge\",\n \"none\"\n ],\n pdfVersion: 1.7\n },\n PickTrayByPDFSize: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.7\n },\n PrintPageRange: {\n defaultValue: \"\",\n value: \"\",\n type: \"array\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n },\n NumCopies: {\n defaultValue: 1,\n value: 1,\n type: \"integer\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n }\n };\n\n var configurationKeys = Object.keys(configurationTemplate);\n\n var rangeArray = [];\n var i = 0;\n var j = 0;\n var k = 0;\n var isValid;\n\n var method;\n var value;\n\n function arrayContainsElement(array, element) {\n var iterator;\n var result = false;\n\n for (iterator = 0; iterator < array.length; iterator += 1) {\n if (array[iterator] === element) {\n result = true;\n }\n }\n return result;\n }\n\n if (this.internal.viewerpreferences === undefined) {\n this.internal.viewerpreferences = {};\n this.internal.viewerpreferences.configuration = JSON.parse(\n JSON.stringify(configurationTemplate)\n );\n this.internal.viewerpreferences.isSubscribed = false;\n }\n configuration = this.internal.viewerpreferences.configuration;\n\n if (options === \"reset\" || doReset === true) {\n var len = configurationKeys.length;\n\n for (k = 0; k < len; k += 1) {\n configuration[configurationKeys[k]].value =\n configuration[configurationKeys[k]].defaultValue;\n configuration[configurationKeys[k]].explicitSet = false;\n }\n }\n\n if (typeof options === \"object\") {\n for (method in options) {\n value = options[method];\n if (\n arrayContainsElement(configurationKeys, method) &&\n value !== undefined\n ) {\n if (\n configuration[method].type === \"boolean\" &&\n typeof value === \"boolean\"\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"name\" &&\n arrayContainsElement(configuration[method].valueSet, value)\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"integer\" &&\n Number.isInteger(value)\n ) {\n configuration[method].value = value;\n } else if (configuration[method].type === \"array\") {\n for (i = 0; i < value.length; i += 1) {\n isValid = true;\n if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n rangeArray.push(String(value[i] - 1));\n } else if (value[i].length > 1) {\n for (j = 0; j < value[i].length; j += 1) {\n if (typeof value[i][j] !== \"number\") {\n isValid = false;\n }\n }\n if (isValid === true) {\n rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n }\n }\n }\n configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n } else {\n configuration[method].value = configuration[method].defaultValue;\n }\n\n configuration[method].explicitSet = true;\n }\n }\n }\n\n if (this.internal.viewerpreferences.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n var pdfDict = [];\n var vPref;\n for (vPref in configuration) {\n if (configuration[vPref].explicitSet === true) {\n if (configuration[vPref].type === \"name\") {\n pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n } else {\n pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n }\n }\n }\n if (pdfDict.length !== 0) {\n this.internal.write(\n \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n );\n }\n });\n this.internal.viewerpreferences.isSubscribed = true;\n }\n\n this.internal.viewerpreferences.configuration = configuration;\n return this;\n };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var postPutResources = function() {\n var xmpmeta_beginning = '';\n var rdf_beginning =\n '';\n var rdf_ending = \"\";\n var xmpmeta_ending = \"\";\n var utf8_xmpmeta_beginning = unescape(\n encodeURIComponent(xmpmeta_beginning)\n );\n var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n var utf8_metadata = unescape(\n encodeURIComponent(this.internal.__metadata__.metadata)\n );\n var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n var total_len =\n utf8_rdf_beginning.length +\n utf8_metadata.length +\n utf8_rdf_ending.length +\n utf8_xmpmeta_beginning.length +\n utf8_xmpmeta_ending.length;\n\n this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n this.internal.write(\n \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n );\n this.internal.write(\"stream\");\n this.internal.write(\n utf8_xmpmeta_beginning +\n utf8_rdf_beginning +\n utf8_metadata +\n utf8_rdf_ending +\n utf8_xmpmeta_ending\n );\n this.internal.write(\"endstream\");\n this.internal.write(\"endobj\");\n };\n\n var putCatalog = function() {\n if (this.internal.__metadata__.metadata_object_number) {\n this.internal.write(\n \"/Metadata \" +\n this.internal.__metadata__.metadata_object_number +\n \" 0 R\"\n );\n }\n };\n\n /**\n * Adds XMP formatted metadata to PDF\n *\n * @name addMetadata\n * @function\n * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n * @returns {jsPDF} jsPDF-instance\n */\n jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n if (typeof this.internal.__metadata__ === \"undefined\") {\n this.internal.__metadata__ = {\n metadata: metadata,\n namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n };\n this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n this.internal.events.subscribe(\"postPutResources\", postPutResources);\n }\n return this;\n };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n var jsPDFAPI = jsPDF.API;\n\n /***************************************************************************************************/\n /* function : pdfEscape16 */\n /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n /* the corresponding glyph id and width, and then adding padding to the string. */\n /***************************************************************************************************/\n var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n var widths = font.metadata.Unicode.widths;\n var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n var ar = [\"\"];\n for (var i = 0, l = text.length, t; i < l; ++i) {\n t = font.metadata.characterToGlyph(text.charCodeAt(i));\n font.metadata.glyIdsUsed.push(t);\n font.metadata.toUnicode[t] = text.charCodeAt(i);\n if (widths.indexOf(t) == -1) {\n widths.push(t);\n widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n }\n if (t == \"0\") {\n //Spaces are not allowed in cmap.\n return ar.join(\"\");\n } else {\n t = t.toString(16);\n ar.push(padz[4 - t.length], t);\n }\n }\n return ar.join(\"\");\n });\n\n var toUnicodeCmap = function(map) {\n var code, codes, range, unicode, unicodeMap, _i, _len;\n unicodeMap =\n \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\";\n codes = Object.keys(map).sort(function(a, b) {\n return a - b;\n });\n\n range = [];\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (range.length >= 100) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\";\n range = [];\n }\n\n if (\n map[code] !== undefined &&\n map[code] !== null &&\n typeof map[code].toString === \"function\"\n ) {\n unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n code = (\"0000\" + (+code).toString(16)).slice(-4);\n range.push(\"<\" + code + \"><\" + unicode + \">\");\n }\n }\n\n if (range.length) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\\n\";\n }\n unicodeMap +=\n \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n return unicodeMap;\n };\n\n var identityHFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"Identity-H\"\n ) {\n //Tag with Identity-H\n var widths = font.metadata.Unicode.widths;\n var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Type /FontDescriptor\");\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/Flags \" + font.metadata.flags);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\">>\");\n out(\"endobj\");\n\n var DescendantFont = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n out(\"/CIDToGIDMap /Identity\");\n out(\"/DW 1000\");\n out(\"/Subtype /CIDFontType2\");\n out(\"/CIDSystemInfo\");\n out(\"<<\");\n out(\"/Supplement 0\");\n out(\"/Registry (Adobe)\");\n out(\"/Ordering (\" + font.encoding + \")\");\n out(\">>\");\n out(\">>\");\n out(\"endobj\");\n\n font.objectNumber = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/Subtype /Type0\");\n out(\"/ToUnicode \" + cmap + \" 0 R\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/Encoding /\" + font.encoding);\n out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n out(\">>\");\n out(\"endobj\");\n\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n identityHFunction(args);\n }\n ]);\n\n var winAnsiEncodingFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"WinAnsiEncoding\"\n ) {\n //Tag with WinAnsi encoding\n var data = font.metadata.rawData;\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/Type /FontDescriptor\");\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/Flags 96\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\">>\");\n out(\"endobj\");\n font.objectNumber = newObject();\n for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n font.metadata.hmtx.widths[j] = parseInt(\n font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n ); //Change the width of Em units to Point units.\n }\n out(\n \"<>\"\n );\n out(\"endobj\");\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n winAnsiEncodingFunction(args);\n }\n ]);\n\n var utf8TextFunction = function(args) {\n var text = args.text || \"\";\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n\n var pdfEscape = mutex.pdfEscape;\n var activeFontKey = mutex.activeFontKey;\n var fonts = mutex.fonts;\n var key = activeFontKey;\n\n var str = \"\",\n s = 0,\n cmapConfirm;\n var strText = \"\";\n var encoding = fonts[key].encoding;\n\n if (fonts[key].encoding !== \"Identity-H\") {\n return {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n }\n strText = text;\n\n key = activeFontKey;\n if (Array.isArray(text)) {\n strText = text[0];\n }\n for (s = 0; s < strText.length; s += 1) {\n if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n cmapConfirm =\n fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n /*\n if (Object.prototype.toString.call(text) === '[object Array]') {\n var i = 0;\n // for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n } else {\n\n }\n //}\n\n } else {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n }*/\n }\n if (!cmapConfirm) {\n if (\n strText[s].charCodeAt(0) < 256 &&\n fonts[key].metadata.hasOwnProperty(\"Unicode\")\n ) {\n str += strText[s];\n } else {\n str += \"\";\n }\n } else {\n str += strText[s];\n }\n }\n var result = \"\";\n if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n //For the default 13 font\n result = pdfEscape(str, key)\n .split(\"\")\n .map(function(cv) {\n return cv.charCodeAt(0).toString(16);\n })\n .join(\"\");\n } else if (encoding === \"Identity-H\") {\n result = pdfEscape16(str, fonts[key]);\n }\n mutex.isHex = true;\n\n return {\n text: result,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n };\n\n var utf8EscapeFunction = function(parms) {\n var text = parms.text || \"\",\n x = parms.x,\n y = parms.y,\n options = parms.options,\n mutex = parms.mutex;\n var tmpText = [];\n var args = {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n\n if (Array.isArray(text)) {\n var i = 0;\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n if (text[i].length === 3) {\n tmpText.push([\n utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n .text,\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n }\n parms.text = tmpText;\n } else {\n parms.text = utf8TextFunction(\n Object.assign({}, args, { text: text })\n ).text;\n }\n };\n\n jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var _initializeVFS = function() {\n if (typeof this.internal.vFS === \"undefined\") {\n this.internal.vFS = {};\n }\n return true;\n };\n\n /**\n * Check if the file exists in the vFS\n *\n * @name existsFileInVFS\n * @function\n * @param {string} Possible filename in the vFS.\n * @returns {boolean}\n * @example\n * doc.existsFileInVFS(\"someFile.txt\");\n */\n jsPDFAPI.existsFileInVFS = function(filename) {\n _initializeVFS.call(this);\n return typeof this.internal.vFS[filename] !== \"undefined\";\n };\n\n /**\n * Add a file to the vFS\n *\n * @name addFileToVFS\n * @function\n * @param {string} filename The name of the file which should be added.\n * @param {string} filecontent The content of the file.\n * @returns {jsPDF}\n * @example\n * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n */\n jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n _initializeVFS.call(this);\n this.internal.vFS[filename] = filecontent;\n return this;\n };\n\n /**\n * Get the file from the vFS\n *\n * @name getFileFromVFS\n * @function\n * @param {string} The name of the file which gets requested.\n * @returns {string}\n * @example\n * doc.getFileFromVFS(\"someFile.txt\");\n */\n jsPDFAPI.getFileFromVFS = function(filename) {\n _initializeVFS.call(this);\n\n if (typeof this.internal.vFS[filename] !== \"undefined\") {\n return this.internal.vFS[filename];\n }\n return null;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n \"use strict\";\n /**\n * Table of Unicode types.\n *\n * Generated by:\n *\n * var bidi = require(\"./bidi/index\");\n * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n *\n * for( var i = 0; i < bidi_accumulate.length; i++) {\n * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n * }\n * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n *\n * Based on:\n * https://github.com/mathiasbynens/unicode-8.0.0\n */\n var bidiUnicodeTypes = [\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"S\",\n \"B\",\n \"S\",\n \"WS\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"B\",\n \"B\",\n \"S\",\n \"WS\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"CS\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"EN\",\n \"EN\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"N\",\n \"N\",\n \"AL\",\n \"ET\",\n \"ET\",\n \"AL\",\n \"CS\",\n \"AL\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"ET\",\n \"AN\",\n \"AN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"L\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"B\",\n \"LRE\",\n \"RLE\",\n \"PDF\",\n \"LRO\",\n \"RLO\",\n \"CS\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"N\",\n \"LRI\",\n \"RLI\",\n \"FSI\",\n \"PDI\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"NSM\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"ES\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"N\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\"\n ];\n\n /**\n * Unicode Bidi algorithm compliant Bidi engine.\n * For reference see http://unicode.org/reports/tr9/\n */\n\n /**\n * constructor ( options )\n *\n * Initializes Bidi engine\n *\n * @param {Object} See 'setOptions' below for detailed description.\n * options are cashed between invocation of 'doBidiReorder' method\n *\n * sample usage pattern of BidiEngine:\n * var opt = {\n * \tisInputVisual: true,\n * \tisInputRtl: false,\n * \tisOutputVisual: false,\n * \tisOutputRtl: false,\n * \tisSymmetricSwapping: true\n * }\n * var sourceToTarget = [], levels = [];\n * var bidiEng = Globalize.bidiEngine(opt);\n * var src = \"text string to be reordered\";\n * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n */\n\n jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n var _STATE_TABLE_LTR = [\n [0, 3, 0, 1, 0, 0, 0],\n [0, 3, 0, 1, 2, 2, 0],\n [0, 3, 0, 0x11, 2, 0, 1],\n [0, 3, 5, 5, 4, 1, 0],\n [0, 3, 0x15, 0x15, 4, 0, 1],\n [0, 3, 5, 5, 4, 2, 0]\n ];\n\n var _STATE_TABLE_RTL = [\n [2, 0, 1, 1, 0, 1, 0],\n [2, 0, 1, 1, 0, 2, 0],\n [2, 0, 2, 1, 3, 2, 0],\n [2, 0, 2, 0x21, 3, 1, 1]\n ];\n\n var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n var _UNICODE_RANGES_MAP = {\n 0: 0,\n 5: 1,\n 6: 2,\n 7: 3,\n 0x20: 4,\n 0xfb: 5,\n 0xfe: 6,\n 0xff: 7\n };\n\n var _SWAP_TABLE = [\n \"\\u0028\",\n \"\\u0029\",\n \"\\u0028\",\n \"\\u003C\",\n \"\\u003E\",\n \"\\u003C\",\n \"\\u005B\",\n \"\\u005D\",\n \"\\u005B\",\n \"\\u007B\",\n \"\\u007D\",\n \"\\u007B\",\n \"\\u00AB\",\n \"\\u00BB\",\n \"\\u00AB\",\n \"\\u2039\",\n \"\\u203A\",\n \"\\u2039\",\n \"\\u2045\",\n \"\\u2046\",\n \"\\u2045\",\n \"\\u207D\",\n \"\\u207E\",\n \"\\u207D\",\n \"\\u208D\",\n \"\\u208E\",\n \"\\u208D\",\n \"\\u2264\",\n \"\\u2265\",\n \"\\u2264\",\n \"\\u2329\",\n \"\\u232A\",\n \"\\u2329\",\n \"\\uFE59\",\n \"\\uFE5A\",\n \"\\uFE59\",\n \"\\uFE5B\",\n \"\\uFE5C\",\n \"\\uFE5B\",\n \"\\uFE5D\",\n \"\\uFE5E\",\n \"\\uFE5D\",\n \"\\uFE64\",\n \"\\uFE65\",\n \"\\uFE64\"\n ];\n\n var _LTR_RANGES_REG_EXPR = new RegExp(\n /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n );\n\n var _lastArabic = false,\n _hasUbatAl,\n _hasUbatB,\n _hasUbatS,\n DIR_LTR = 0,\n DIR_RTL = 1,\n _isInVisual,\n _isInRtl,\n _isOutVisual,\n _isOutRtl,\n _isSymmetricSwapping,\n _dir = DIR_LTR;\n\n this.__bidiEngine__ = {};\n\n var _init = function(text, sourceToTargetMap) {\n if (sourceToTargetMap) {\n for (var i = 0; i < text.length; i++) {\n sourceToTargetMap[i] = i;\n }\n }\n if (_isInRtl === undefined) {\n _isInRtl = _isContextualDirRtl(text);\n }\n if (_isOutRtl === undefined) {\n _isOutRtl = _isContextualDirRtl(text);\n }\n };\n\n // for reference see 3.2 in http://unicode.org/reports/tr9/\n //\n var _getCharType = function(ch) {\n var charCode = ch.charCodeAt(),\n range = charCode >> 8,\n rangeIdx = _UNICODE_RANGES_MAP[range];\n\n if (rangeIdx !== undefined) {\n return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n } else if (range === 0xfc || range === 0xfd) {\n return \"AL\";\n } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n //unlikely case\n return \"L\";\n } else if (range === 8) {\n // even less likely\n return \"R\";\n }\n return \"N\"; //undefined type, mark as neutral\n };\n\n var _isContextualDirRtl = function(text) {\n for (var i = 0, charType; i < text.length; i++) {\n charType = _getCharType(text.charAt(i));\n if (charType === \"L\") {\n return false;\n } else if (charType === \"R\") {\n return true;\n }\n }\n return false;\n };\n\n // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n //\n var _resolveCharType = function(chars, types, resolvedTypes, index) {\n var cType = types[index],\n wType,\n nType,\n i,\n len;\n switch (cType) {\n case \"L\":\n case \"R\":\n _lastArabic = false;\n break;\n case \"N\":\n case \"AN\":\n break;\n\n case \"EN\":\n if (_lastArabic) {\n cType = \"AN\";\n }\n break;\n\n case \"AL\":\n _lastArabic = true;\n _hasUbatAl = true;\n cType = \"R\";\n break;\n\n case \"WS\":\n cType = \"N\";\n break;\n\n case \"CS\":\n if (\n index < 1 ||\n index + 1 >= types.length ||\n ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n ) {\n cType = \"N\";\n } else if (_lastArabic) {\n nType = \"AN\";\n }\n cType = nType === wType ? nType : \"N\";\n break;\n\n case \"ES\":\n wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n cType =\n wType === \"EN\" &&\n index + 1 < types.length &&\n types[index + 1] === \"EN\"\n ? \"EN\"\n : \"N\";\n break;\n\n case \"ET\":\n if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n cType = \"EN\";\n break;\n } else if (_lastArabic) {\n cType = \"N\";\n break;\n }\n i = index + 1;\n len = types.length;\n while (i < len && types[i] === \"ET\") {\n i++;\n }\n if (i < len && types[i] === \"EN\") {\n cType = \"EN\";\n } else {\n cType = \"N\";\n }\n break;\n\n case \"NSM\":\n if (_isInVisual && !_isInRtl) {\n //V->L\n len = types.length;\n i = index + 1;\n while (i < len && types[i] === \"NSM\") {\n i++;\n }\n if (i < len) {\n var c = chars[index];\n var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n wType = types[i];\n if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n cType = \"R\";\n break;\n }\n }\n }\n if (index < 1 || (wType = types[index - 1]) === \"B\") {\n cType = \"N\";\n } else {\n cType = resolvedTypes[index - 1];\n }\n break;\n\n case \"B\":\n _lastArabic = false;\n _hasUbatB = true;\n cType = _dir;\n break;\n\n case \"S\":\n _hasUbatS = true;\n cType = \"N\";\n break;\n\n case \"LRE\":\n case \"RLE\":\n case \"LRO\":\n case \"RLO\":\n case \"PDF\":\n _lastArabic = false;\n break;\n case \"BN\":\n cType = \"N\";\n break;\n }\n return cType;\n };\n\n var _handleUbatS = function(types, levels, length) {\n for (var i = 0; i < length; i++) {\n if (types[i] === \"S\") {\n levels[i] = _dir;\n for (var j = i - 1; j >= 0; j--) {\n if (types[j] === \"WS\") {\n levels[j] = _dir;\n } else {\n break;\n }\n }\n }\n }\n };\n\n var _invertString = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\");\n if (levels) {\n _computeLevels(charArray, levels, { hiLevel: _dir });\n }\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return charArray.join(\"\");\n };\n\n // For reference see 3.3 in http://unicode.org/reports/tr9/\n //\n var _computeLevels = function(chars, levels, params) {\n var action,\n condition,\n i,\n index,\n newLevel,\n prevState,\n condPos = -1,\n len = chars.length,\n newState = 0,\n resolvedTypes = [],\n stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n types = [];\n\n _lastArabic = false;\n _hasUbatAl = false;\n _hasUbatB = false;\n _hasUbatS = false;\n for (i = 0; i < len; i++) {\n types[i] = _getCharType(chars[i]);\n }\n for (index = 0; index < len; index++) {\n prevState = newState;\n resolvedTypes[index] = _resolveCharType(\n chars,\n types,\n resolvedTypes,\n index\n );\n newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n action = newState & 0xf0;\n newState &= 0x0f;\n levels[index] = newLevel = stateTable[newState][5];\n if (action > 0) {\n if (action === 0x10) {\n for (i = condPos; i < index; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n condition = stateTable[newState][6];\n if (condition) {\n if (condPos === -1) {\n condPos = index;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < index; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (types[index] === \"B\") {\n levels[index] = 0;\n }\n params.hiLevel |= newLevel;\n }\n if (_hasUbatS) {\n _handleUbatS(types, levels, len);\n }\n };\n\n // for reference see 3.4 in http://unicode.org/reports/tr9/\n //\n var _invertByLevel = function(\n level,\n charArray,\n sourceToTargetMap,\n levels,\n params\n ) {\n if (params.hiLevel < level) {\n return;\n }\n if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return;\n }\n var ch,\n high,\n end,\n low,\n len = charArray.length,\n start = 0;\n\n while (start < len) {\n if (levels[start] >= level) {\n end = start + 1;\n while (end < len && levels[end] >= level) {\n end++;\n }\n for (low = start, high = end - 1; low < high; low++, high--) {\n ch = charArray[low];\n charArray[low] = charArray[high];\n charArray[high] = ch;\n if (sourceToTargetMap) {\n ch = sourceToTargetMap[low];\n sourceToTargetMap[low] = sourceToTargetMap[high];\n sourceToTargetMap[high] = ch;\n }\n }\n start = end;\n }\n start++;\n }\n };\n\n // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n //\n var _symmetricSwap = function(charArray, levels, params) {\n if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n for (var i = 0, index; i < charArray.length; i++) {\n if (levels[i] === 1) {\n index = _SWAP_TABLE.indexOf(charArray[i]);\n if (index >= 0) {\n charArray[i] = _SWAP_TABLE[index + 1];\n }\n }\n }\n }\n };\n\n var _reorder = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\"),\n params = { hiLevel: _dir };\n\n if (!levels) {\n levels = [];\n }\n _computeLevels(charArray, levels, params);\n _symmetricSwap(charArray, levels, params);\n _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n return charArray.join(\"\");\n };\n\n // doBidiReorder( text, sourceToTargetMap, levels )\n // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n // Returns reordered string\n // @text [String]:\n // - input string to be reordered, this is input parameter\n // $sourceToTargetMap [Array] (optional)\n // - resultant mapping between input and output strings, this is output parameter\n // $levels [Array] (optional)\n // - array of calculated Bidi levels, , this is output parameter\n this.__bidiEngine__.doBidiReorder = function(\n text,\n sourceToTargetMap,\n levels\n ) {\n _init(text, sourceToTargetMap);\n if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n // LLTR->VLTR, LRTL->VLTR\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n // VRTL->VLTR, VLTR->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _invertString(text, sourceToTargetMap, levels);\n } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n // LLTR->VRTL, LRTL->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n // VLTR->LLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // VLTR->LRTL, VRTL->LLTR\n text = _invertString(text, sourceToTargetMap);\n if (_isInRtl) {\n //LLTR -> VLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else {\n //LRTL -> VRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n }\n } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n // VRTL->LRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // LRTL->LLTR, LLTR->LRTL\n var isSymmetricSwappingOrig = _isSymmetricSwapping;\n if (_isInRtl) {\n //LRTL->LLTR\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n _dir = DIR_LTR;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n } else {\n //LLTR->LRTL\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n _dir = DIR_RTL;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n text = _invertString(text, sourceToTargetMap);\n }\n }\n return text;\n };\n\n /**\n * @name setOptions( options )\n * @function\n * Sets options for Bidi conversion\n * @param {Object}:\n * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n */\n this.__bidiEngine__.setOptions = function(options) {\n if (options) {\n _isInVisual = options.isInputVisual;\n _isOutVisual = options.isOutputVisual;\n _isInRtl = options.isInputRtl;\n _isOutRtl = options.isOutputRtl;\n _isSymmetricSwapping = options.isSymmetricSwapping;\n }\n };\n\n this.__bidiEngine__.setOptions(options);\n return this.__bidiEngine__;\n };\n\n var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n var bidiEngineFunction = function(args) {\n var text = args.text;\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n var lang = options.lang;\n var tmpText = [];\n\n options.isInputVisual =\n typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n bidiEngine.setOptions(options);\n\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n tmpText.push([\n bidiEngine.doBidiReorder(text[i][0]),\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n }\n }\n args.text = tmpText;\n } else {\n args.text = bidiEngine.doBidiReorder(text);\n }\n bidiEngine.setOptions({ isInputVisual: true });\n };\n\n jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font *\n * Start Data : 2017. 01. 22. *\n * Comment : TEXT API *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n /************************************************************************/\n /* function : open */\n /* comment : Decode the encoded ttf content and create a TTFFont object. */\n /************************************************************************/\n TTFFont.open = function(file) {\n return new TTFFont(file);\n };\n /***************************************************************/\n /* function : TTFFont gernerator */\n /* comment : Decode TTF contents are parsed, Data, */\n /* Subset object is created, and registerTTF function is called.*/\n /***************************************************************/\n function TTFFont(rawData) {\n var data;\n this.rawData = rawData;\n data = this.contents = new Data(rawData);\n this.contents.pos = 4;\n if (data.readString(4) === \"ttcf\") {\n throw new Error(\"TTCF not supported.\");\n } else {\n data.pos = 0;\n this.parse();\n this.subset = new Subset(this);\n this.registerTTF();\n }\n }\n /********************************************************/\n /* function : parse */\n /* comment : TTF Parses the file contents by each table.*/\n /********************************************************/\n TTFFont.prototype.parse = function() {\n this.directory = new Directory(this.contents);\n this.head = new HeadTable(this);\n this.name = new NameTable(this);\n this.cmap = new CmapTable(this);\n this.toUnicode = {};\n this.hhea = new HheaTable(this);\n this.maxp = new MaxpTable(this);\n this.hmtx = new HmtxTable(this);\n this.post = new PostTable(this);\n this.os2 = new OS2Table(this);\n this.loca = new LocaTable(this);\n this.glyf = new GlyfTable(this);\n this.ascender =\n (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n this.decender =\n (this.os2.exists && this.os2.decender) || this.hhea.decender;\n this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n return (this.bbox = [\n this.head.xMin,\n this.head.yMin,\n this.head.xMax,\n this.head.yMax\n ]);\n };\n /***************************************************************/\n /* function : registerTTF */\n /* comment : Get the value to assign pdf font descriptors. */\n /***************************************************************/\n TTFFont.prototype.registerTTF = function() {\n var e, hi, low, raw, _ref;\n this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n this.bbox = function() {\n var _i, _len, _ref, _results;\n _ref = this.bbox;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n e = _ref[_i];\n _results.push(Math.round(e * this.scaleFactor));\n }\n return _results;\n }.call(this);\n this.stemV = 0;\n if (this.post.exists) {\n raw = this.post.italic_angle;\n hi = raw >> 16;\n low = raw & 0xff;\n if ((hi & 0x8000) !== 0) {\n hi = -((hi ^ 0xffff) + 1);\n }\n this.italicAngle = +(\"\" + hi + \".\" + low);\n } else {\n this.italicAngle = 0;\n }\n this.ascender = Math.round(this.ascender * this.scaleFactor);\n this.decender = Math.round(this.decender * this.scaleFactor);\n this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n this.isSerif =\n (_ref = this.familyClass) === 1 ||\n _ref === 2 ||\n _ref === 3 ||\n _ref === 4 ||\n _ref === 5 ||\n _ref === 7;\n this.isScript = this.familyClass === 10;\n this.flags = 0;\n if (this.post.isFixedPitch) {\n this.flags |= 1 << 0;\n }\n if (this.isSerif) {\n this.flags |= 1 << 1;\n }\n if (this.isScript) {\n this.flags |= 1 << 3;\n }\n if (this.italicAngle !== 0) {\n this.flags |= 1 << 6;\n }\n this.flags |= 1 << 5;\n if (!this.cmap.unicode) {\n throw new Error(\"No unicode cmap for font\");\n }\n };\n TTFFont.prototype.characterToGlyph = function(character) {\n var _ref;\n return (\n ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n 0\n );\n };\n TTFFont.prototype.widthOfGlyph = function(glyph) {\n var scale;\n scale = 1000.0 / this.head.unitsPerEm;\n return this.hmtx.forGlyph(glyph).advance * scale;\n };\n TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n var charCode, i, scale, width, _ref;\n string = \"\" + string;\n width = 0;\n for (\n i = 0, _ref = string.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n charCode = string.charCodeAt(i);\n width +=\n this.widthOfGlyph(this.characterToGlyph(charCode)) +\n charSpace * (1000 / size) || 0;\n }\n scale = size / 1000;\n return width * scale;\n };\n TTFFont.prototype.lineHeight = function(size, includeGap) {\n var gap;\n if (includeGap == null) {\n includeGap = false;\n }\n gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.decender) / 1000) * size;\n };\n return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n function Data(data) {\n this.data = data != null ? data : [];\n this.pos = 0;\n this.length = this.data.length;\n }\n Data.prototype.readByte = function() {\n return this.data[this.pos++];\n };\n Data.prototype.writeByte = function(byte) {\n return (this.data[this.pos++] = byte);\n };\n Data.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.readByte() * 0x1000000;\n b2 = this.readByte() << 16;\n b3 = this.readByte() << 8;\n b4 = this.readByte();\n return b1 + b2 + b3 + b4;\n };\n Data.prototype.writeUInt32 = function(val) {\n this.writeByte((val >>> 24) & 0xff);\n this.writeByte((val >> 16) & 0xff);\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt32 = function() {\n var int;\n int = this.readUInt32();\n if (int >= 0x80000000) {\n return int - 0x100000000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt32 = function(val) {\n if (val < 0) {\n val += 0x100000000;\n }\n return this.writeUInt32(val);\n };\n Data.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.readByte() << 8;\n b2 = this.readByte();\n return b1 | b2;\n };\n Data.prototype.writeUInt16 = function(val) {\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt16 = function() {\n var int;\n int = this.readUInt16();\n if (int >= 0x8000) {\n return int - 0x10000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt16 = function(val) {\n if (val < 0) {\n val += 0x10000;\n }\n return this.writeUInt16(val);\n };\n Data.prototype.readString = function(length) {\n var i, ret;\n ret = [];\n for (\n i = 0;\n 0 <= length ? i < length : i > length;\n i = 0 <= length ? ++i : --i\n ) {\n ret[i] = String.fromCharCode(this.readByte());\n }\n return ret.join(\"\");\n };\n Data.prototype.writeString = function(val) {\n var i, _ref, _results;\n _results = [];\n for (\n i = 0, _ref = val.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n _results.push(this.writeByte(val.charCodeAt(i)));\n }\n return _results;\n };\n /*Data.prototype.stringAt = function (pos, length) {\n this.pos = pos;\n return this.readString(length);\n };*/\n Data.prototype.readShort = function() {\n return this.readInt16();\n };\n Data.prototype.writeShort = function(val) {\n return this.writeInt16(val);\n };\n Data.prototype.readLongLong = function() {\n var b1, b2, b3, b4, b5, b6, b7, b8;\n b1 = this.readByte();\n b2 = this.readByte();\n b3 = this.readByte();\n b4 = this.readByte();\n b5 = this.readByte();\n b6 = this.readByte();\n b7 = this.readByte();\n b8 = this.readByte();\n if (b1 & 0x80) {\n return (\n ((b1 ^ 0xff) * 0x100000000000000 +\n (b2 ^ 0xff) * 0x1000000000000 +\n (b3 ^ 0xff) * 0x10000000000 +\n (b4 ^ 0xff) * 0x100000000 +\n (b5 ^ 0xff) * 0x1000000 +\n (b6 ^ 0xff) * 0x10000 +\n (b7 ^ 0xff) * 0x100 +\n (b8 ^ 0xff) +\n 1) *\n -1\n );\n }\n return (\n b1 * 0x100000000000000 +\n b2 * 0x1000000000000 +\n b3 * 0x10000000000 +\n b4 * 0x100000000 +\n b5 * 0x1000000 +\n b6 * 0x10000 +\n b7 * 0x100 +\n b8\n );\n };\n Data.prototype.writeLongLong = function(val) {\n var high, low;\n high = Math.floor(val / 0x100000000);\n low = val & 0xffffffff;\n this.writeByte((high >> 24) & 0xff);\n this.writeByte((high >> 16) & 0xff);\n this.writeByte((high >> 8) & 0xff);\n this.writeByte(high & 0xff);\n this.writeByte((low >> 24) & 0xff);\n this.writeByte((low >> 16) & 0xff);\n this.writeByte((low >> 8) & 0xff);\n return this.writeByte(low & 0xff);\n };\n Data.prototype.readInt = function() {\n return this.readInt32();\n };\n Data.prototype.writeInt = function(val) {\n return this.writeInt32(val);\n };\n /*Data.prototype.slice = function (start, end) {\n return this.data.slice(start, end);\n };*/\n Data.prototype.read = function(bytes) {\n var buf, i;\n buf = [];\n for (\n i = 0;\n 0 <= bytes ? i < bytes : i > bytes;\n i = 0 <= bytes ? ++i : --i\n ) {\n buf.push(this.readByte());\n }\n return buf;\n };\n Data.prototype.write = function(bytes) {\n var byte, i, _len, _results;\n _results = [];\n for (i = 0, _len = bytes.length; i < _len; i++) {\n byte = bytes[i];\n _results.push(this.writeByte(byte));\n }\n return _results;\n };\n return Data;\n})();\n\nvar Directory = (function() {\n var checksum;\n\n /*****************************************************************************************************/\n /* function : Directory generator */\n /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n /*****************************************************************************************************/\n function Directory(data) {\n var entry, i, _ref;\n this.scalarType = data.readInt();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n this.tables = {};\n for (\n i = 0, _ref = this.tableCount;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n entry = {\n tag: data.readString(4),\n checksum: data.readInt(),\n offset: data.readInt(),\n length: data.readInt()\n };\n this.tables[entry.tag] = entry;\n }\n }\n /********************************************************************************************************/\n /* function : encode */\n /* comment : It encodes and stores the font table object and information used for the directory object. */\n /********************************************************************************************************/\n Directory.prototype.encode = function(tables) {\n var adjustment,\n directory,\n directoryLength,\n entrySelector,\n headOffset,\n log2,\n offset,\n rangeShift,\n searchRange,\n sum,\n table,\n tableCount,\n tableData,\n tag;\n tableCount = Object.keys(tables).length;\n log2 = Math.log(2);\n searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n entrySelector = Math.floor(searchRange / log2);\n rangeShift = tableCount * 16 - searchRange;\n directory = new Data();\n directory.writeInt(this.scalarType);\n directory.writeShort(tableCount);\n directory.writeShort(searchRange);\n directory.writeShort(entrySelector);\n directory.writeShort(rangeShift);\n directoryLength = tableCount * 16;\n offset = directory.pos + directoryLength;\n headOffset = null;\n tableData = [];\n for (tag in tables) {\n table = tables[tag];\n directory.writeString(tag);\n directory.writeInt(checksum(table));\n directory.writeInt(offset);\n directory.writeInt(table.length);\n tableData = tableData.concat(table);\n if (tag === \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.push(0);\n offset++;\n }\n }\n directory.write(tableData);\n sum = checksum(directory.data);\n adjustment = 0xb1b0afba - sum;\n directory.pos = headOffset + 8;\n directory.writeUInt32(adjustment);\n return directory.data;\n };\n /***************************************************************/\n /* function : checksum */\n /* comment : Duplicate the table for the tag. */\n /***************************************************************/\n checksum = function(data) {\n var i, sum, tmp, _ref;\n data = __slice.call(data);\n while (data.length % 4) {\n data.push(0);\n }\n tmp = new Data(data);\n sum = 0;\n for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n sum += tmp.readUInt32();\n }\n return sum & 0xffffffff;\n };\n return Directory;\n})();\n\nvar Table,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) {\n for (var key in parent) {\n if (__hasProp.call(parent, key)) child[key] = parent[key];\n }\n\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n\n/***************************************************************/\n/* function : Table */\n/* comment : Save info for each table, and parse the table. */\n/***************************************************************/\nTable = (function() {\n function Table(file) {\n var info;\n this.file = file;\n info = this.file.directory.tables[this.tag];\n this.exists = !!info;\n if (info) {\n (this.offset = info.offset), (this.length = info.length);\n this.parse(this.file.contents);\n }\n }\n Table.prototype.parse = function() {};\n Table.prototype.encode = function() {};\n Table.prototype.raw = function() {\n if (!this.exists) {\n return null;\n }\n this.file.contents.pos = this.offset;\n return this.file.contents.read(this.length);\n };\n return Table;\n})();\n\nvar HeadTable = (function(_super) {\n __extends(HeadTable, _super);\n\n function HeadTable() {\n return HeadTable.__super__.constructor.apply(this, arguments);\n }\n HeadTable.prototype.tag = \"head\";\n HeadTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.revision = data.readInt();\n this.checkSumAdjustment = data.readInt();\n this.magicNumber = data.readInt();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.readLongLong();\n this.modified = data.readLongLong();\n this.xMin = data.readShort();\n this.yMin = data.readShort();\n this.xMax = data.readShort();\n this.yMax = data.readShort();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort();\n this.indexToLocFormat = data.readShort();\n return (this.glyphDataFormat = data.readShort());\n };\n HeadTable.prototype.encode = function(indexToLocFormat) {\n var table;\n table = new Data();\n table.writeInt(this.version);\n table.writeInt(this.revision);\n table.writeInt(this.checkSumAdjustment);\n table.writeInt(this.magicNumber);\n table.writeShort(this.flags);\n table.writeShort(this.unitsPerEm);\n table.writeLongLong(this.created);\n table.writeLongLong(this.modified);\n table.writeShort(this.xMin);\n table.writeShort(this.yMin);\n table.writeShort(this.xMax);\n table.writeShort(this.yMax);\n table.writeShort(this.macStyle);\n table.writeShort(this.lowestRecPPEM);\n table.writeShort(this.fontDirectionHint);\n table.writeShort(indexToLocFormat);\n table.writeShort(this.glyphDataFormat);\n return table.data;\n };\n return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n function CmapEntry(data, offset) {\n var code,\n count,\n endCode,\n glyphId,\n glyphIds,\n i,\n idDelta,\n idRangeOffset,\n index,\n saveOffset,\n segCount,\n segCountX2,\n start,\n startCode,\n tail,\n _j,\n _k,\n _len;\n this.platformID = data.readUInt16();\n this.encodingID = data.readShort();\n this.offset = offset + data.readInt();\n saveOffset = data.pos;\n data.pos = this.offset;\n this.format = data.readUInt16();\n this.length = data.readUInt16();\n this.language = data.readUInt16();\n this.isUnicode =\n (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n (this.platformID === 0 && this.format === 4);\n this.codeMap = {};\n switch (this.format) {\n case 0:\n for (i = 0; i < 256; ++i) {\n this.codeMap[i] = data.readByte();\n }\n break;\n case 4:\n segCountX2 = data.readUInt16();\n segCount = segCountX2 / 2;\n data.pos += 6;\n endCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n data.pos += 2;\n startCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idDelta = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idRangeOffset = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n count = (this.length - data.pos + this.offset) / 2;\n glyphIds = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= count ? _j < count : _j > count;\n i = 0 <= count ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n tail = endCode[i];\n start = startCode[i];\n for (\n code = _k = start;\n start <= tail ? _k <= tail : _k >= tail;\n code = start <= tail ? ++_k : --_k\n ) {\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n this.codeMap[code] = glyphId & 0xffff;\n }\n }\n }\n data.pos = saveOffset;\n }\n CmapEntry.encode = function(charmap, encoding) {\n var charMap,\n code,\n codeMap,\n codes,\n delta,\n deltas,\n diff,\n endCode,\n endCodes,\n entrySelector,\n glyphIDs,\n i,\n id,\n indexes,\n last,\n map,\n nextID,\n offset,\n old,\n rangeOffsets,\n rangeShift,\n searchRange,\n segCount,\n segCountX2,\n startCode,\n startCodes,\n startGlyph,\n subtable,\n _i,\n _j,\n _k,\n _l,\n _len,\n _len1,\n _len2,\n _len3,\n _len4,\n _len5,\n _len6,\n _len7,\n _m,\n _n,\n _name,\n _o,\n _p,\n _q;\n subtable = new Data();\n codes = Object.keys(charmap).sort(function(a, b) {\n return a - b;\n });\n switch (encoding) {\n case \"macroman\":\n id = 0;\n indexes = (function() {\n var _results = [];\n for (i = 0; i < 256; ++i) {\n _results.push(0);\n }\n return _results;\n })();\n map = {\n 0: 0\n };\n codeMap = {};\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (map[(_name = charmap[code])] == null) {\n map[_name] = ++id;\n }\n codeMap[code] = {\n old: charmap[code],\n new: map[charmap[code]]\n };\n indexes[code] = map[charmap[code]];\n }\n subtable.writeUInt16(1);\n subtable.writeUInt16(0);\n subtable.writeUInt32(12);\n subtable.writeUInt16(0);\n subtable.writeUInt16(262);\n subtable.writeUInt16(0);\n subtable.write(indexes);\n return {\n charMap: codeMap,\n subtable: subtable.data,\n maxGlyphID: id + 1\n };\n case \"unicode\":\n startCodes = [];\n endCodes = [];\n nextID = 0;\n map = {};\n charMap = {};\n last = diff = null;\n for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n code = codes[_j];\n old = charmap[code];\n if (map[old] == null) {\n map[old] = ++nextID;\n }\n charMap[code] = {\n old: old,\n new: map[old]\n };\n delta = map[old] - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xffff);\n startCodes.push(0xffff);\n segCount = startCodes.length;\n segCountX2 = segCount * 2;\n searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n entrySelector = Math.log(searchRange / 2) / Math.LN2;\n rangeShift = 2 * segCount - searchRange;\n deltas = [];\n rangeOffsets = [];\n glyphIDs = [];\n for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n startCode = startCodes[i];\n endCode = endCodes[i];\n if (startCode === 0xffff) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n startGlyph = charMap[startCode][\"new\"];\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n for (\n code = _l = startCode;\n startCode <= endCode ? _l <= endCode : _l >= endCode;\n code = startCode <= endCode ? ++_l : --_l\n ) {\n glyphIDs.push(charMap[code][\"new\"]);\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n subtable.writeUInt16(3);\n subtable.writeUInt16(1);\n subtable.writeUInt32(12);\n subtable.writeUInt16(4);\n subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n subtable.writeUInt16(0);\n subtable.writeUInt16(segCountX2);\n subtable.writeUInt16(searchRange);\n subtable.writeUInt16(entrySelector);\n subtable.writeUInt16(rangeShift);\n for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n code = endCodes[_m];\n subtable.writeUInt16(code);\n }\n subtable.writeUInt16(0);\n for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n code = startCodes[_n];\n subtable.writeUInt16(code);\n }\n for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n delta = deltas[_o];\n subtable.writeUInt16(delta);\n }\n for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n offset = rangeOffsets[_p];\n subtable.writeUInt16(offset);\n }\n for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n id = glyphIDs[_q];\n subtable.writeUInt16(id);\n }\n return {\n charMap: charMap,\n subtable: subtable.data,\n maxGlyphID: nextID + 1\n };\n }\n };\n return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n __extends(CmapTable, _super);\n\n function CmapTable() {\n return CmapTable.__super__.constructor.apply(this, arguments);\n }\n CmapTable.prototype.tag = \"cmap\";\n CmapTable.prototype.parse = function(data) {\n var entry, i, tableCount;\n data.pos = this.offset;\n this.version = data.readUInt16();\n tableCount = data.readUInt16();\n this.tables = [];\n this.unicode = null;\n for (\n i = 0;\n 0 <= tableCount ? i < tableCount : i > tableCount;\n i = 0 <= tableCount ? ++i : --i\n ) {\n entry = new CmapEntry(data, this.offset);\n this.tables.push(entry);\n if (entry.isUnicode) {\n if (this.unicode == null) {\n this.unicode = entry;\n }\n }\n }\n return true;\n };\n /*************************************************************************/\n /* function : encode */\n /* comment : Encode the cmap table corresponding to the input character. */\n /*************************************************************************/\n CmapTable.encode = function(charmap, encoding) {\n var result, table;\n if (encoding == null) {\n encoding = \"macroman\";\n }\n result = CmapEntry.encode(charmap, encoding);\n table = new Data();\n table.writeUInt16(0);\n table.writeUInt16(1);\n result.table = table.data.concat(result.subtable);\n return result;\n };\n return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n __extends(HheaTable, _super);\n\n function HheaTable() {\n return HheaTable.__super__.constructor.apply(this, arguments);\n }\n HheaTable.prototype.tag = \"hhea\";\n HheaTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.ascender = data.readShort();\n this.decender = data.readShort();\n this.lineGap = data.readShort();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort();\n this.minRightSideBearing = data.readShort();\n this.xMaxExtent = data.readShort();\n this.caretSlopeRise = data.readShort();\n this.caretSlopeRun = data.readShort();\n this.caretOffset = data.readShort();\n data.pos += 4 * 2;\n this.metricDataFormat = data.readShort();\n return (this.numberOfMetrics = data.readUInt16());\n };\n /*HheaTable.prototype.encode = function (ids) {\n var i, table, _i, _ref;\n table = new Data;\n table.writeInt(this.version);\n table.writeShort(this.ascender);\n table.writeShort(this.decender);\n table.writeShort(this.lineGap);\n table.writeShort(this.advanceWidthMax);\n table.writeShort(this.minLeftSideBearing);\n table.writeShort(this.minRightSideBearing);\n table.writeShort(this.xMaxExtent);\n table.writeShort(this.caretSlopeRise);\n table.writeShort(this.caretSlopeRun);\n table.writeShort(this.caretOffset);\n for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n table.writeByte(0);\n }\n table.writeShort(this.metricDataFormat);\n table.writeUInt16(ids.length);\n return table.data;\n };*/\n return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n __extends(OS2Table, _super);\n\n function OS2Table() {\n return OS2Table.__super__.constructor.apply(this, arguments);\n }\n OS2Table.prototype.tag = \"OS/2\";\n OS2Table.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readUInt16();\n this.averageCharWidth = data.readShort();\n this.weightClass = data.readUInt16();\n this.widthClass = data.readUInt16();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort();\n this.ySubscriptYSize = data.readShort();\n this.ySubscriptXOffset = data.readShort();\n this.ySubscriptYOffset = data.readShort();\n this.ySuperscriptXSize = data.readShort();\n this.ySuperscriptYSize = data.readShort();\n this.ySuperscriptXOffset = data.readShort();\n this.ySuperscriptYOffset = data.readShort();\n this.yStrikeoutSize = data.readShort();\n this.yStrikeoutPosition = data.readShort();\n this.familyClass = data.readShort();\n this.panose = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 10; ++i) {\n _results.push(data.readByte());\n }\n return _results;\n })();\n this.charRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 4; ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort();\n this.descent = data.readShort();\n this.lineGap = data.readShort();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 2; i = ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n return (this.maxContext = data.readShort());\n }\n }\n };\n /*OS2Table.prototype.encode = function () {\n return this.raw();\n };*/\n return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n var POSTSCRIPT_GLYPHS;\n __extends(PostTable, _super);\n\n function PostTable() {\n return PostTable.__super__.constructor.apply(this, arguments);\n }\n PostTable.prototype.tag = \"post\";\n PostTable.prototype.parse = function(data) {\n var length, numberOfGlyphs, _results;\n data.pos = this.offset;\n this.format = data.readInt();\n this.italicAngle = data.readInt();\n this.underlinePosition = data.readShort();\n this.underlineThickness = data.readShort();\n this.isFixedPitch = data.readInt();\n this.minMemType42 = data.readInt();\n this.maxMemType42 = data.readInt();\n this.minMemType1 = data.readInt();\n this.maxMemType1 = data.readInt();\n switch (this.format) {\n case 0x00010000:\n break;\n case 0x00020000:\n numberOfGlyphs = data.readUInt16();\n this.glyphNameIndex = [];\n var i;\n for (\n i = 0;\n 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n i = 0 <= numberOfGlyphs ? ++i : --i\n ) {\n this.glyphNameIndex.push(data.readUInt16());\n }\n this.names = [];\n _results = [];\n while (data.pos < this.offset + this.length) {\n length = data.readByte();\n _results.push(this.names.push(data.readString(length)));\n }\n return _results;\n case 0x00025000:\n numberOfGlyphs = data.readUInt16();\n return (this.offsets = data.read(numberOfGlyphs));\n case 0x00030000:\n break;\n case 0x00040000:\n return (this.map = function() {\n var _j, _ref, _results1;\n _results1 = [];\n for (\n i = _j = 0, _ref = this.file.maxp.numGlyphs;\n 0 <= _ref ? _j < _ref : _j > _ref;\n i = 0 <= _ref ? ++_j : --_j\n ) {\n _results1.push(data.readUInt32());\n }\n return _results1;\n }.call(this));\n }\n };\n /*PostTable.prototype.glyphFor = function (code) {\n var index;\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 0x00020000:\n index = this.glyphNameIndex[code];\n if (index <= 257) {\n return POSTSCRIPT_GLYPHS[index];\n }\n else {\n return this.names[index - 258] || '.notdef';\n }\n break;\n case 0x00025000:\n return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n case 0x00030000:\n return '.notdef';\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };*/\n /*PostTable.prototype.encode = function (mapping) {\n var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n if (!this.exists) {\n return null;\n }\n raw = this.raw();\n if (this.format === 0x00030000) {\n return raw;\n }\n table = new Data(raw.slice(0, 32));\n table.writeUInt32(0x00020000);\n table.pos = 32;\n indexes = [];\n strings = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n post = this.glyphFor(id);\n position = POSTSCRIPT_GLYPHS.indexOf(post);\n if (position !== -1) {\n indexes.push(position);\n }\n else {\n indexes.push(257 + strings.length);\n strings.push(post);\n }\n }\n table.writeUInt16(Object.keys(mapping).length);\n for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n index = indexes[_j];\n table.writeUInt16(index);\n }\n for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n string = strings[_k];\n table.writeByte(string.length);\n table.writeString(string);\n }\n return table.data;\n };*/\n POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\\nbracketleft backslash bracketright asciicircum underscore grave\\na b c d e f g h i j k l m n o p q r s t u v w x y z\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n /\\s+/g\n );\n return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n function NameEntry(raw, entry) {\n this.raw = raw;\n this.length = raw.length;\n this.platformID = entry.platformID;\n this.encodingID = entry.encodingID;\n this.languageID = entry.languageID;\n }\n return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n var subsetTag;\n __extends(NameTable, _super);\n\n function NameTable() {\n return NameTable.__super__.constructor.apply(this, arguments);\n }\n NameTable.prototype.tag = \"name\";\n NameTable.prototype.parse = function(data) {\n var count,\n entries,\n entry,\n i,\n name,\n stringOffset,\n strings,\n text,\n _j,\n _len,\n _name;\n data.pos = this.offset;\n data.readShort(); //format\n count = data.readShort();\n stringOffset = data.readShort();\n entries = [];\n for (\n i = 0;\n 0 <= count ? i < count : i > count;\n i = 0 <= count ? ++i : --i\n ) {\n entries.push({\n platformID: data.readShort(),\n encodingID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: this.offset + stringOffset + data.readShort()\n });\n }\n strings = {};\n for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n entry = entries[i];\n data.pos = entry.offset;\n text = data.readString(entry.length);\n name = new NameEntry(text, entry);\n if (strings[(_name = entry.nameID)] == null) {\n strings[_name] = [];\n }\n strings[entry.nameID].push(name);\n }\n this.strings = strings;\n this.copyright = strings[0];\n this.fontFamily = strings[1];\n this.fontSubfamily = strings[2];\n this.uniqueSubfamily = strings[3];\n this.fontName = strings[4];\n this.version = strings[5];\n try {\n this.postscriptName = strings[6][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n } catch (e) {\n this.postscriptName = strings[4][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n }\n this.trademark = strings[7];\n this.manufacturer = strings[8];\n this.designer = strings[9];\n this.description = strings[10];\n this.vendorUrl = strings[11];\n this.designerUrl = strings[12];\n this.license = strings[13];\n this.licenseUrl = strings[14];\n this.preferredFamily = strings[15];\n this.preferredSubfamily = strings[17];\n this.compatibleFull = strings[18];\n return (this.sampleText = strings[19]);\n };\n subsetTag = \"AAAAAA\";\n /*NameTable.prototype.encode = function () {\n var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n strings = {};\n _ref = this.strings;\n for (id in _ref) {\n val = _ref[id];\n strings[id] = val;\n }\n postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n platformID: 1\n , encodingID: 0\n , languageID: 0\n });\n strings[6] = [postscriptName];\n subsetTag = successorOf(subsetTag);\n strCount = 0;\n for (id in strings) {\n list = strings[id];\n if (list != null) {\n strCount += list.length;\n }\n }\n table = new Data;\n strTable = new Data;\n table.writeShort(0);\n table.writeShort(strCount);\n table.writeShort(6 + 12 * strCount);\n for (nameID in strings) {\n list = strings[nameID];\n if (list != null) {\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n string = list[_i];\n table.writeShort(string.platformID);\n table.writeShort(string.encodingID);\n table.writeShort(string.languageID);\n table.writeShort(nameID);\n table.writeShort(string.length);\n table.writeShort(strTable.pos);\n strTable.writeString(string.raw);\n }\n }\n }\n return nameTable = {\n postscriptName: postscriptName.raw\n , table: table.data.concat(strTable.data)\n };\n };*/\n return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n __extends(MaxpTable, _super);\n\n function MaxpTable() {\n return MaxpTable.__super__.constructor.apply(this, arguments);\n }\n MaxpTable.prototype.tag = \"maxp\";\n MaxpTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.numGlyphs = data.readUInt16();\n this.maxPoints = data.readUInt16();\n this.maxContours = data.readUInt16();\n this.maxCompositePoints = data.readUInt16();\n this.maxComponentContours = data.readUInt16();\n this.maxZones = data.readUInt16();\n this.maxTwilightPoints = data.readUInt16();\n this.maxStorage = data.readUInt16();\n this.maxFunctionDefs = data.readUInt16();\n this.maxInstructionDefs = data.readUInt16();\n this.maxStackElements = data.readUInt16();\n this.maxSizeOfInstructions = data.readUInt16();\n this.maxComponentElements = data.readUInt16();\n return (this.maxComponentDepth = data.readUInt16());\n };\n /*MaxpTable.prototype.encode = function (ids) {\n var table;\n table = new Data;\n table.writeInt(this.version);\n table.writeUInt16(ids.length);\n table.writeUInt16(this.maxPoints);\n table.writeUInt16(this.maxContours);\n table.writeUInt16(this.maxCompositePoints);\n table.writeUInt16(this.maxComponentContours);\n table.writeUInt16(this.maxZones);\n table.writeUInt16(this.maxTwilightPoints);\n table.writeUInt16(this.maxStorage);\n table.writeUInt16(this.maxFunctionDefs);\n table.writeUInt16(this.maxInstructionDefs);\n table.writeUInt16(this.maxStackElements);\n table.writeUInt16(this.maxSizeOfInstructions);\n table.writeUInt16(this.maxComponentElements);\n table.writeUInt16(this.maxComponentDepth);\n return table.data;\n };*/\n return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n __extends(HmtxTable, _super);\n\n function HmtxTable() {\n return HmtxTable.__super__.constructor.apply(this, arguments);\n }\n HmtxTable.prototype.tag = \"hmtx\";\n HmtxTable.prototype.parse = function(data) {\n var i, last, lsbCount, m, _j, _ref, _results;\n data.pos = this.offset;\n this.metrics = [];\n for (\n i = 0, _ref = this.file.hhea.numberOfMetrics;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n this.metrics.push({\n advance: data.readUInt16(),\n lsb: data.readInt16()\n });\n }\n lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n this.leftSideBearings = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(data.readInt16());\n }\n return _results;\n })();\n this.widths = function() {\n var _j, _len, _ref1, _results;\n _ref1 = this.metrics;\n _results = [];\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n m = _ref1[_j];\n _results.push(m.advance);\n }\n return _results;\n }.call(this);\n last = this.widths[this.widths.length - 1];\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(this.widths.push(last));\n }\n return _results;\n };\n /***************************************************************/\n /* function : forGlyph */\n /* comment : Returns the advance width and lsb for this glyph. */\n /***************************************************************/\n HmtxTable.prototype.forGlyph = function(id) {\n if (id in this.metrics) {\n return this.metrics[id];\n }\n return {\n advance: this.metrics[this.metrics.length - 1].advance,\n lsb: this.leftSideBearings[id - this.metrics.length]\n };\n };\n /*HmtxTable.prototype.encode = function (mapping) {\n var id, metric, table, _i, _len;\n table = new Data;\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n metric = this.forGlyph(id);\n table.writeUInt16(metric.advance);\n table.writeUInt16(metric.lsb);\n }\n return table.data;\n };*/\n return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n __extends(GlyfTable, _super);\n\n function GlyfTable() {\n return GlyfTable.__super__.constructor.apply(this, arguments);\n }\n GlyfTable.prototype.tag = \"glyf\";\n GlyfTable.prototype.parse = function() {\n return (this.cache = {});\n };\n GlyfTable.prototype.glyphFor = function(id) {\n var data,\n index,\n length,\n loca,\n numberOfContours,\n raw,\n xMax,\n xMin,\n yMax,\n yMin;\n if (id in this.cache) {\n return this.cache[id];\n }\n loca = this.file.loca;\n data = this.file.contents;\n index = loca.indexOf(id);\n length = loca.lengthOf(id);\n if (length === 0) {\n return (this.cache[id] = null);\n }\n data.pos = this.offset + index;\n raw = new Data(data.read(length));\n numberOfContours = raw.readShort();\n xMin = raw.readShort();\n yMin = raw.readShort();\n xMax = raw.readShort();\n yMax = raw.readShort();\n if (numberOfContours === -1) {\n this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n } else {\n this.cache[id] = new SimpleGlyph(\n raw,\n numberOfContours,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n return this.cache[id];\n };\n GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n var glyph, id, offsets, table, _i, _len;\n table = [];\n offsets = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n glyph = glyphs[id];\n offsets.push(table.length);\n if (glyph) {\n table = table.concat(glyph.encode(old2new));\n }\n }\n offsets.push(table.length);\n return {\n table: table,\n offsets: offsets\n };\n };\n return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n /**************************************************************************/\n /* function : SimpleGlyph */\n /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n /**************************************************************************/\n function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n this.raw = raw;\n this.numberOfContours = numberOfContours;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = false;\n }\n SimpleGlyph.prototype.encode = function() {\n return this.raw.data;\n };\n return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n var ARG_1_AND_2_ARE_WORDS,\n MORE_COMPONENTS,\n WE_HAVE_AN_X_AND_Y_SCALE,\n WE_HAVE_A_SCALE,\n WE_HAVE_A_TWO_BY_TWO,\n WE_HAVE_INSTRUCTIONS;\n ARG_1_AND_2_ARE_WORDS = 0x0001;\n WE_HAVE_A_SCALE = 0x0008;\n MORE_COMPONENTS = 0x0020;\n WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n WE_HAVE_A_TWO_BY_TWO = 0x0080;\n WE_HAVE_INSTRUCTIONS = 0x0100;\n\n /********************************************************************************************************************/\n /* function : CompoundGlypg generator */\n /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n /********************************************************************************************************************/\n function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n var data, flags;\n this.raw = raw;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = true;\n this.glyphIDs = [];\n this.glyphOffsets = [];\n data = this.raw;\n while (true) {\n flags = data.readShort();\n this.glyphOffsets.push(data.pos);\n this.glyphIDs.push(data.readUInt16());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n data.pos += 4;\n } else {\n data.pos += 2;\n }\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.pos += 8;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.pos += 4;\n } else if (flags & WE_HAVE_A_SCALE) {\n data.pos += 2;\n }\n }\n }\n /****************************************************************************************************************/\n /* function : CompoundGlypg encode */\n /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n /****************************************************************************************************************/\n CompoundGlyph.prototype.encode = function() {\n var i, result, _len, _ref;\n result = new Data(__slice.call(this.raw.data));\n _ref = this.glyphIDs;\n for (i = 0, _len = _ref.length; i < _len; ++i) {\n result.pos = this.glyphOffsets[i];\n }\n return result.data;\n };\n return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n __extends(LocaTable, _super);\n\n function LocaTable() {\n return LocaTable.__super__.constructor.apply(this, arguments);\n }\n LocaTable.prototype.tag = \"loca\";\n LocaTable.prototype.parse = function(data) {\n var format, i;\n data.pos = this.offset;\n format = this.file.head.indexToLocFormat;\n if (format === 0) {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 2) {\n _results.push(data.readUInt16() * 2);\n }\n return _results;\n }.call(this));\n } else {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 4) {\n _results.push(data.readUInt32());\n }\n return _results;\n }.call(this));\n }\n };\n LocaTable.prototype.indexOf = function(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n var LocaTable = new Uint32Array(this.offsets.length);\n var glyfPtr = 0;\n var listGlyf = 0;\n for (var k = 0; k < LocaTable.length; ++k) {\n LocaTable[k] = glyfPtr;\n if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n ++listGlyf;\n LocaTable[k] = glyfPtr;\n var start = this.offsets[k];\n var len = this.offsets[k + 1] - start;\n if (len > 0) {\n glyfPtr += len;\n }\n }\n }\n var newLocaTable = new Array(LocaTable.length * 4);\n for (var j = 0; j < LocaTable.length; ++j) {\n newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n }\n return newLocaTable;\n };\n return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n var key, ret, val;\n ret = {};\n for (key in object) {\n val = object[key];\n ret[val] = key;\n }\n return ret;\n};\n\n/*var successorOf = function (input) {\n var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n alphabet = 'abcdefghijklmnopqrstuvwxyz';\n length = alphabet.length;\n result = input;\n i = input.length;\n while (i >= 0) {\n last = input.charAt(--i);\n if (isNaN(last)) {\n index = alphabet.indexOf(last.toLowerCase());\n if (index === -1) {\n next = last;\n carry = true;\n }\n else {\n next = alphabet.charAt((index + 1) % length);\n isUpperCase = last === last.toUpperCase();\n if (isUpperCase) {\n next = next.toUpperCase();\n }\n carry = index + 1 >= length;\n if (carry && i === 0) {\n added = isUpperCase ? 'A' : 'a';\n result = added + next + result.slice(1);\n break;\n }\n }\n }\n else {\n next = +last + 1;\n carry = next > 9;\n if (carry) {\n next = 0;\n }\n if (carry && i === 0) {\n result = '1' + next + result.slice(1);\n break;\n }\n }\n result = result.slice(0, i) + next + result.slice(i + 1);\n if (!carry) {\n break;\n }\n }\n return result;\n };*/\n\nvar Subset = (function() {\n function Subset(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.next = 33;\n }\n /*Subset.prototype.use = function (character) {\n var i, _i, _ref;\n if (typeof character === 'string') {\n for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.use(character.charCodeAt(i));\n }\n return;\n }\n if (!this.unicodes[character]) {\n this.subset[this.next] = character;\n return this.unicodes[character] = this.next++;\n }\n };*/\n /*Subset.prototype.encodeText = function (text) {\n var char, i, string, _i, _ref;\n string = '';\n for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n char = this.unicodes[text.charCodeAt(i)];\n string += String.fromCharCode(char);\n }\n return string;\n };*/\n /***************************************************************/\n /* function : generateCmap */\n /* comment : Returns the unicode cmap for this font. */\n /***************************************************************/\n Subset.prototype.generateCmap = function() {\n var mapping, roman, unicode, unicodeCmap, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n mapping = {};\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n mapping[roman] = unicodeCmap[unicode];\n }\n return mapping;\n };\n /*Subset.prototype.glyphIDs = function () {\n var ret, roman, unicode, unicodeCmap, val, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n ret = [0];\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n val = unicodeCmap[unicode];\n if ((val != null) && __indexOf.call(ret, val) < 0) {\n ret.push(val);\n }\n }\n return ret.sort();\n };*/\n /******************************************************************/\n /* function : glyphsFor */\n /* comment : Returns simple glyph objects for the input character.*/\n /******************************************************************/\n Subset.prototype.glyphsFor = function(glyphIDs) {\n var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n glyphs = {};\n for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n id = glyphIDs[_i];\n glyphs[id] = this.font.glyf.glyphFor(id);\n }\n additionalIDs = [];\n for (id in glyphs) {\n glyph = glyphs[id];\n if (glyph != null ? glyph.compound : void 0) {\n additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n }\n }\n if (additionalIDs.length > 0) {\n _ref = this.glyphsFor(additionalIDs);\n for (id in _ref) {\n glyph = _ref[id];\n glyphs[id] = glyph;\n }\n }\n return glyphs;\n };\n /***************************************************************/\n /* function : encode */\n /* comment : Encode various tables for the characters you use. */\n /***************************************************************/\n Subset.prototype.encode = function(glyID, indexToLocFormat) {\n var cmap,\n code,\n glyf,\n glyphs,\n id,\n ids,\n loca,\n new2old,\n newIDs,\n nextGlyphID,\n old2new,\n oldID,\n oldIDs,\n tables,\n _ref;\n cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n glyphs = this.glyphsFor(glyID);\n old2new = {\n 0: 0\n };\n _ref = cmap.charMap;\n for (code in _ref) {\n ids = _ref[code];\n old2new[ids.old] = ids[\"new\"];\n }\n nextGlyphID = cmap.maxGlyphID;\n for (oldID in glyphs) {\n if (!(oldID in old2new)) {\n old2new[oldID] = nextGlyphID++;\n }\n }\n new2old = invert(old2new);\n newIDs = Object.keys(new2old).sort(function(a, b) {\n return a - b;\n });\n oldIDs = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n id = newIDs[_i];\n _results.push(new2old[id]);\n }\n return _results;\n })();\n glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n loca = this.font.loca.encode(glyf.offsets, oldIDs);\n tables = {\n cmap: this.font.cmap.raw(),\n glyf: glyf.table,\n loca: loca,\n hmtx: this.font.hmtx.raw(),\n hhea: this.font.hhea.raw(),\n maxp: this.font.maxp.raw(),\n post: this.font.post.raw(),\n name: this.font.name.raw(),\n head: this.font.head.encode(indexToLocFormat)\n };\n if (this.font.os2.exists) {\n tables[\"OS/2\"] = this.font.os2.raw();\n }\n return this.font.directory.encode(tables);\n };\n return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n var pad;\n\n function PDFObject() {}\n pad = function(str, length) {\n return (Array(length + 1).join(\"0\") + str).slice(-length);\n };\n /*****************************************************************************/\n /* function : convert */\n /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n /*****************************************************************************/\n PDFObject.convert = function(object) {\n var e, items, key, out, val;\n if (Array.isArray(object)) {\n items = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = object.length; _i < _len; _i++) {\n e = object[_i];\n _results.push(PDFObject.convert(e));\n }\n return _results;\n })().join(\" \");\n return \"[\" + items + \"]\";\n } else if (typeof object === \"string\") {\n return \"/\" + object;\n } else if (object != null ? object.isString : void 0) {\n return \"(\" + object + \")\";\n } else if (object instanceof Date) {\n return (\n \"(D:\" +\n pad(object.getUTCFullYear(), 4) +\n pad(object.getUTCMonth(), 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n \"Z)\"\n );\n } else if ({}.toString.call(object) === \"[object Object]\") {\n out = [\"<<\"];\n for (key in object) {\n val = object[key];\n out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n }\n out.push(\">>\");\n return out.join(\"\\n\");\n } else {\n return \"\" + object;\n }\n };\n return PDFObject;\n})();\n"],"names":["atob","btoa","globalObject","window","global","self","this","RGBColor","color_string","channels","ok","charAt","substr","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","replace","toLowerCase","color_defs","re","example","process","bits","parseInt","i","length","processor","exec","r","g","b","isNaN","toRGB","toHex","toString","consoleLog","console","log","apply","arguments","require","warn","str","call","error","md5cycle","x","k","a","c","d","ff","gg","hh","ii","add32","cmn","q","s","t","md51","n","state","md5blk","substring","tail","charCodeAt","md5blks","hex_chr","split","rhex","j","singleToByteString","String","fromCharCode","md5Bin","map","join","md5Check","hex","lsw","rc4","key","data","lastKey","lastState","num","Array","out","permissionOptions","print","modify","copy","annot-forms","PDFSecurity","permissions","userPassword","ownerPassword","fileId","v","protection","forEach","perm","Error","padding","paddedUserPassword","paddedOwnerPassword","O","processOwnerPassword","P","encryptionKey","lsbFirstWord","hexToBytes","U","toPDFName","test","result","strLength","charCode","slice","PubSub","context","topics","subscribe","topic","callback","once","hasOwnProperty","token","Math","random","unsubscribe","Object","keys","publish","args","prototype","tokens","sub","ex","message","push","getTopics","GState","parameters","supported","p","indexOf","id","objectNumber","Pattern","gState","matrix","ShadingPattern","type","coords","colors","TilingPattern","boundingBox","xStep","yStep","stream","cloneIndex","jsPDF","options","precision","orientation","unit","format","compressPdf","filters","userUnit","floatPrecision","defaultPathOperation","encryptionOptions","compress","encryption","userPermissions","abs","putOnlyUsedFonts","usedFonts","API","internal","__private__","pdfVersion","getPdfVersion","setPdfVersion","value","pageFormats","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","dl","letter","government-letter","legal","junior-legal","ledger","tabloid","credit-card","getPageFormats","getPageFormat","ApiMode","COMPAT","ADVANCED","apiMode","advancedAPI","saveGraphicsState","Matrix","scaleFactor","getPageHeight","setFontSize","getFontSize","compatAPI","restoreGraphicsState","combineFontStyleAndFontWeight","fontStyle","fontWeight","body","doSwitch","isAdvancedAPI","hpf","advancedApiModeTrap","methodName","roundToPrecision","number","parmPrecision","tmpPrecision","toFixed","f2","f3","scale","transformY","y","transformScaleY","setPrecision","creationDate","getFileId","setFileId","toUpperCase","floor","convertDateToPDFDate","parmDate","tzoffset","getTimezoneOffset","tzsign","tzhour","tzmin","timeZoneString","padd2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","parmPDFDate","year","month","date","hour","minutes","seconds","Date","setCreationDate","tmpCreationDateString","getCreationDate","currentPage","padd2Hex","hexString","offsets","content","contentLength","additionalObjects","pages","hasCustomDestination","outputDestination","resetDocument","rootDictionaryObjId","newObjectDeferred","resourceDictionaryObjId","setCustomOutputDestination","destination","setOutputDestination","resetCustomOutputDestination","string","write","getArrayBuffer","len","ab","ArrayBuffer","u8","Uint8Array","standardFonts","getStandardFonts","activeFontSize","fontSize","size","zoomMode","R2L","setR2L","getR2L","pageMode","setZoomMode","zoom","validZoomModes","undefined","getZoomMode","layoutMode","setPageMode","pmode","getPageMode","setLayoutMode","layout","getLayoutMode","setDisplayMode","documentProperties","title","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","properties","property","setDocumentProperty","activeFontKey","pageX","pageY","pageMatrix","fonts","fontmap","fontStateStack","patterns","patternMap","gStates","gStatesMap","activeGState","page","pagesContext","events","hotfixes","renderTargets","renderTargetMap","renderTargetStack","sx","shy","shx","sy","tx","ty","_matrix","defineProperty","get","set","atan2","decompose","separator","multiply","e","f","scaleX","sqrt","shear","scaleY","translate","rotate","skew","inversed","quot","aInv","bInv","cInv","dInv","applyToPoint","pt","Point","applyToRectangle","rect","pt1","pt2","w","h","Rectangle","clone","matrixMult","m1","m2","identityMatrix","unitMatrix","addPattern","pattern","patternKey","addShadingPattern","beginTilingPattern","beginNewRenderTarget","endTilingPattern","pop","restore","newObject","oid","newObjectDeferredBegin","doOutput","newAdditionalObject","obj","objId","decodeColorString","color","colorEncoded","floatVal","parseFloat","colorAsRGB","encodeColorString","ch1","ch2","ch3","ch4","letterArray","pdfColorType","rgbColor","getFilters","putStream","alreadyAppliedFilters","addLength1","valueOfLength1","objectId","encryptor","processedData","keyValues","additionalKeyValues","filterAsString","processDataByFilters","reverseChain","isArray","decodeParmsArray","putPage","pageNumber","pageObjectNumber","pageContentsObjId","contentsObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageContent","putPages","pageObjectNumbers","kids","putFont","font","isAlreadyPutted","postScriptName","encoding","putFonts","fontKey","putXObject","xObject","width","height","putXObjects","xObjectKey","interpolateAndEncodeRGBStream","numberSamples","tValues","dT","offset","unshift","index","aColor","bColor","round","trim","putShadingPattern","funcObjectNumber","putTilingPattern","deferredResourceDictionaryIds","resourcesObjectId","patternObjectId","resourcesOid","objectOid","putPatterns","putGState","putGStates","gStateKey","putXobjectDict","putEncryptionDict","toHexString","putFontDict","putShadingPatternDict","putTilingPatternDict","putGStatesDict","putResourceDictionary","objectIds","putResources","Number","MAX_SAFE_INTEGER","putAdditionalObjects","addFontToFontDictionary","fontName","addFont","isStandardFont","metadata","instance","addFonts","arrayOfFonts","l","parts","dictionary","SAFE","fn","foo","stack","m","alert","bar","to8bitStream","text","flags","sourceEncoding","encodingBlock","outputEncoding","newtext","isUnicode","ch","bch","autoencode","codePages","noBOM","pdfEscape","beginPage","_setPage","_addPage","parmFormat","parmOrientation","dimensions","min","setLineWidth","lineWidth","strokeColor","lineCapID","lineJoinID","_deletePage","splice","setPage","getNumberOfPages","getFont","fontNameLowerCase","disableWarning","noFallback","putInfo","version","putCatalog","tmpRootDictionaryObjId","pcn","putTrailer","putHeader","putXRef","buildDocument","offsetOfXRef","getBlob","Blob","output","filename","save","URL","createObjectURL","dataURI","pdfDocument","unescape","encodeURIComponent","pdfObjectUrl","integrity","htmlForNewWindow","JSON","stringify","nW","open","document","htmlForPDFjsNewWindow","pdfJsUrl","PDFjsNewWindow","scope","documentElement","querySelector","onload","contentWindow","PDFViewerApplication","htmlForDataURLNewWindow","dataURLNewWindow","safari","location","href","hasHotfix","hotfixName","getEncryptor","getPageInfo","pageNumberOneBased","getPageInfoByObjId","getCurrentPageInfo","addPage","insertPage","beforePage","movePage","targetPage","tmpPages","tmpPagesContext","deletePage","transform","payload","da","angle","align","charSpace","maxWidth","horizontalScale","transformationMatrix","tmp","xtra","isHex","lineHeight","lineHeightFactor","ESC","TabLen","transformTextToSpecialArray","curDa","sa","concat","shift","processTextByFunction","processingFunction","tmpResult","textIsOfTypeString","tmpTextIsOfTypeString","match","descent","baseline","splitTextToSize","reduce","acc","textLine","mutex","PI","rotationDirection","cos","sin","activeCharSpace","setCharSpace","getCharSpace","lang","renderingMode","parmRenderingMode","stroke","usedRenderingMode","lineWidths","leading","pageWidth","pageSize","getWidth","activeFont","assign","wordSpacingPerLine","newY","getStringUnitWidth","doKerning","newX","prevWidth","getHorizontalCoordinate","getVerticalCoordinate","doReversing","posX","posY","reverse","activeFontEncoding","STRING","ARRAY","variant","wordSpacing","generatePosition","parmPosX","parmPosY","parmTransformationMatrix","position","lineIndex","textColor","clip","rule","clipEvenOdd","discardPath","isValidStyle","style","setDefaultPathOperation","operator","getStyle","op","close","fill","fillWithOptionalPattern","fillEvenOdd","fillStroke","fillStrokeEvenOdd","fillWithPattern","putStyle","cloneTilingPattern","patternData","patternId","clipRuleFromStyle","setGState","moveTo","lineTo","curveTo","x1","y1","x2","y2","x3","y3","line","lines","closed","scalex","scaley","leg","x4","y4","path","triangle","roundedRect","rx","ry","MyArc","SQRT2","ellipse","lx","ly","circle","setFont","getFontEntry","getFontList","list","encodingOptions","getLineWidth","setLineDash","setLineDashPattern","dashArray","dashPhase","getLineHeight","setLineHeightFactor","getLineHeightFactor","getHorizontalCoordinateString","getVerticalCoordinateString","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","getTextColor","setTextColor","CapJoinStyles","0","butt","but","miter","1","rounded","2","projecting","project","square","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","addGState","equals","duplicate","fontState","setCurrentTransformationMatrix","comment","_x","enumerable","_y","_type","_w","_h","RenderTarget","getPageWidth","setPageWidth","setPageHeight","endFormObject","newXObject","xObjectId","plugin","beginFormObject","doFormObject","getFormObject","returnPromise","fs","buffer","Buffer","from","Promise","resolve","reject","writeFile","err","writeFileSync","newEvents","eventname","handler_and_args","getCoordinateString","collections","setWidth","getHeight","setHeight","getPDFVersion","configurable","byteString","byte","bytes","generation","other","ignore","count","jsPDFAPI","pdfUnescape","f5","__acroform__","inherit","child","parent","create","constructor","createFormXObject","formObject","xobj","AcroFormXObject","AcroFormAppearance","BBox","setBit","bitPosition","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","coordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","calculateAppearanceStream","appearanceStreamContent","V","DV","_V","calcRes","calculateX","maxFontSize","returnValue","textSplit","multiline","word","isSmallerThanWidth","lastLine","calculateFontSpace","FontSize","startX","lastLength","textHeight","startY","lastY","firstWordInLine","lastWordInLine","currWord","lineCount","isWithNewLine","nextLineIsSmaller","isLastWord","currLine","textAlign","acroformPluginTemplate","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","createAnnotationReference","object","annotations","find","entry","createXFormObjectCallback","fieldArray","fieldObject","initializeAcroForm","acroformPlugin","AcroFormField","FieldNum","parse","AcroFormDictionary","_eventID","AcroFormDictionaryCallback","Fields","hasAnnotation","annotReferenceCallback","putCatalogCallback","standardFields","Kids","keyValueList","oldRect","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","appearance","appearanceStreamString","createFieldCallback","arrayToPdfArray","array","toPdfString","AcroFormPDFObject","_objId","_scope","writable","getOwnPropertyNames","filter","getOwnPropertyDescriptor","_stream","_BBox","_DA","_Kids","_F","Boolean","F","_Ff","_Rect","_FT","_T","AcroFormChildClass","_fontName","_fontStyle","_fontSize","_maxFontSize","_color","AcroFormTextField","_DV","AcroFormButton","_page","_hasAppearanceStream","Ff","_Q","AcroFormChoiceField","FT","_TI","_Opt","regex","matches","getMatches","getOptions","setOptions","sort","addOption","removeOption","allEntries","combo","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","edit","_AS","_MK","CA","AcroFormPushButton","pushButton","AcroFormRadioButton","radio","_parent","_optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","name","Parent","addField","AcroFormCheckBox","CheckBox","_MaxLen","isInteger","AcroFormPasswordField","password","N","On","YesNormal","D","YesPushDown","Off","OffPushDown","encodedColor","DotRadius","Bezier_C","DotRadiusBezier","kc","dc","Cross","cross","calculateCross","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","toLookup","arr","lookup","__addimage__","UNKNOWN","imageFileTypeHeaders","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","imageData","fallbackFormat","headerSchemata","compareResult","fileType","Uint8ClampedArray","isArrayBufferView","putImage","image","colorSpace","color_spaces","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","arrayBufferToBinaryString","putResourcesCallback","images","putXObjectsDictCallback","initialize","getImages","getImageIndex","isImageTypeSupported","isDOMElement","nodeType","getImageDataFromElement","element","nodeName","hasAttribute","src","getAttribute","tmpImageData","loadFile","mimeType","toDataURL","checkImagesForAlias","alias","determineWidthAndHeight","writeImageToPDF","rotation","dims","coord","vcoord","f4","rotationTransformationMatrix","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","hash","byteLength","validateStringAsBase64","possibleBase64String","extractImageFromDataUrl","dataUrl","dataUrlParts","extractedInfo","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","binary_string","buf","subarray","addImage","compression","processImageData","dataAsBinaryString","convertBase64ToBinaryString","generateAliasFromImageData","checkCompressValue","stringData","throwError","base64Info","rawData","getImageProperties","notEmpty","addPageData","putPageData","anno","pageInfo","pageAnnos","found","url","escape","objText","objPopup","encryptorText","bounds","contents","loc","_nameMap","top","finalBounds","magFactor","left","createAnnotation","link","textWithLink","linkHeight","linkWidth","totalLineWidth","getTextWidth","numOfLines","ceil","arabicSubstitionA","1569","1570","1571","1572","1573","1574","1575","1576","1577","1578","1579","1580","1581","1582","1583","1584","1585","1586","1587","1588","1589","1590","1591","1592","1593","1594","1601","1602","1603","1604","1605","1606","1607","1608","1609","1610","1649","1655","1657","1658","1659","1662","1663","1664","1667","1668","1670","1671","1672","1676","1677","1678","1681","1688","1700","1702","1705","1709","1711","1713","1715","1722","1723","1726","1728","1729","1733","1734","1735","1736","1737","1739","1740","1744","1746","1747","ligatures","65247","65154","65156","65160","65166","65248","65165","65258","1617","1612","1613","1614","1615","1616","arabic_diacritics","alfletter","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","letters","tmpLigatures","effectedLetters","isArabicDiacritic","getCorrectForm","currentChar","beforeChar","nextChar","parseArabic","currentLetter","prevLetter","nextLetter","words","newWords","processArabic","tmpText","autoPrint","refAutoPrintTag","addJS","Canvas","jsPdfInstance","_width","getContext","pageWrapXEnabled","pageWrapX","_height","pageWrapYEnabled","pageWrapY","_childNodes","_style","contextType","contextAttributes","pdf","context2d","_canvas","canvas","NO_MARGINS","bottom","right","printingHeaderRow","_initialize","__cell__","headerFunction","margins","_reset","lastCell","Cell","_text","_lineNumber","_align","lineNumber","toArray","setHeaderFunction","func","getTextDimensions","amountOfLines","tempWidth","max","cellAddPage","cell","currentCell","tableHeaderRow","printHeaders","printHeaderRow","table","headers","config","column","headerName","headerNames","headerLabels","headerAligns","columnMatrix","columnWidths","columnMinWidths","tableHeaderConfigs","autoSize","css","headerBackgroundColor","headerTextColor","table_font_size","header","prompt","rec","row","rowHeight","calculateLineHeight","setTableHeaderRow","pv","cv","rowStart","Function","cellData","cellStart","col","table_x","table_y","model","new_page","tableHeaderCell","tempHeaderConf","currentTextColor","fontStyleOrder","italic","oblique","normal","fontStretchOrder","fontStretchLookup","fontWeights","fontWeightsLookup","normalizeFontFace","fontFace","family","normalizeFontStyle","weight","normalizeFontWeight","stretch","normalizeFontStretch","ref","searchFromPivot","matchingSet","order","pivot","dir","defaultGenericFontFamilies","sans-serif","fixed","monospace","terminal","cursive","fantasy","serif","systemFonts","icon","menu","message-box","small-caption","status-bar","ruleToString","resolveFontFace","fontFaceMap","rules","opts","defaultFontFamily","genericFontFamilies","resolveFontStretch","ordering","resolveFontStyle","resolveFontWeight","eatWhiteSpace","input","trimLeft","parseQuotedFontFamily","quote","parseNonQuotedFontFamily","jsNamesObj","jsJsObj","defaultFont","_ctx","ContextLayer","ctx","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","margin","prevPageLastElemOffset","ignoreClearRect","Context2D","parentNode","_pdf","_pageWrapXEnabled","_pageWrapYEnabled","_posX","_posY","_autoPaging","lastBreak","pageBreaks","_ctxStack","rgba","getRGBA","_fontFaceMap","getFontFaceMap","fontFaces","convertedFontFaces","fontMap","convertToFontFaces","normalized","buildFontFaceMap","_fontFaces","fontFamily","fontSizeUnit","parsed","remaining","parseFontFamily","jsPdfFontName","fallbackFonts","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","pathPreProcess","beginPath","closePath","pathBegin","quadraticCurveTo","cpx","cpy","pt0","bezierCurveTo","cp1x","cp1y","cp2x","cp2y","arc","radius","startAngle","endAngle","counterclockwise","isIdentity","xpt","x_radPt","x_radPt0","pow","arcTo","fillRect","strokeRect","clearRect","doStackPush","tmpPageNumber","ctxStack","doStackPop","isCanvasGradient","getColor","fillText","degs","rad2deg","putText","strokeText","measureText","txtWidth","TextMetrics","scalewidth","scaleheight","setTransform","hasMargins","drawImage","img","swidth","sheight","imageProperties","factorX","factorY","clipFactorX","clipFactorY","clipPath","decomposedTransformationMatrix","xRect","pageArray","getPagesByPath","sortPages","autoPaging","pageWidthMinusMargins","topMargin","firstPageHeight","pageHeightMinusMargins","previousPageHeightSum","tmpPaths","pathPositionRedo","drawPaths","tmpRect","needsClipping","yOffset","rectOfQuadraticCurve","getQuadraticCurveBoundary","rectOfBezierCurve","getBezierCurveBoundary","paths","isClip","tmpPath","oldLineWidth","origPath","xPath","delta","moves","begin","start","deltas","iii","began","arcs","drawArc","drawLine","drawLines","doClip","getBaseline","getTextBottom","yBaseLine","createLinearGradient","canvasGradient","colorStops","addColorStop","createPattern","createRadialGradient","includeMove","curves","createArc","curve","doMove","drawCurve","textDimensions","yTop","oldSize","baselineRect","textBounds","pageHeightMinusBottomMargin","pageWidthMinusRightMargin","textBoundsOnPage","doSlice","croppedText","baseLineRectOnPage","prevX","prevY","anticlockwise","twoPi","halfPi","totalAngle","sgn","createSmallArc","q1","q2","k2","ar","cos_ar","sin_ar","ey","midX1","midY1","midX2","midY2","resultX1","resultX2","resultY1","resultY2","ax","ay","bx","by","cx","cy","dx","dy","px","py","qx","qy","minx","miny","maxx","maxy","tobx","toby","tocx","tocy","todx","tody","prevLineDash","nextLineDash","ASCII85Encode","ASCII85Decode","z","ASCIIHexDecode","regexCheckIfHex","RegExp","FlateEncode","zlibSync","origData","filterChain","sync","readFileSync","readFile","nodeReadFile","loadImageFile","loadHtml2Canvas","exports","module","define","amd","catch","then","html2canvas","default","loadDomPurify","dompurify","objType","createElement","tagName","opt","el","className","innerHTML","sanitize","cloneNode","node","javascriptEnabled","createTextNode","nodeValue","firstChild","nextSibling","appendChild","addEventListener","scrollTop","scrollLeft","Worker","root","convert","template","setProgress","promise","__proto__","prop","container","overlay","progress","val","enableLinks","backgroundColor","getType","to","target","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","containerCSS","display","windowWidth","clientWidth","scrollWidth","offsetWidth","source","scrollHeight","offsetHeight","clientHeight","overflow","zIndex","clear","border","float","prereqs","contains","onrendered","removeChild","toContext2d","async","allowTaint","scrollX","scrollY","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","imgData","quality","outputImg","outputPdf","doCallback","fns","setMargin","bind","cbk","toPx","getPageSize","inner","ratio","updateProgress","onFulfilled","onRejected","thenCore","thenBase","selfPromise","returnVal","thenExternal","catchExternal","msg","using","saveAs","export","run","format_as_string","pageHeight","html","worker","javascript","namesOid","outline","children","render","createNamedDestinations","totalPages","dests","info","names2Oid","makeRef","add","item","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","markers","processJPEG","blockLength","numcomponents","getJpegInfo","getCharWidthsArray","splitLongWord","splitParagraphIntoLines","makeImage","scratchCanvas","scratchCtx","chunkSize","palLen","delayDen","delayNum","frame","section","palShort","_i","_j","_ref","pos","animation","readUInt32","_results","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","Infinity","frames","read","xOffset","readUInt16","delay","disposeOp","blendOp","indexed","grayscale","rgb","hasAlphaChannel","pixelBitlength","decodePixels","pixelBytes","fullPixels","_this","pass","x0","y0","abyte","pa","paeth","pb","pc","pixels","scanlineLength","upper","upperLeft","_k","_l","_m","isFull","fullPos","partPos","unzlibSync","decodePalette","ret","_ref1","copyToImageData","alpha","_decodedPalette","hasBrowserCanvas","putImageData","Image","decodeFrames","_len","createImageData","renderFrame","prev","animate","doFrame","frameNumber","_timeout","setTimeout","stopAnimation","clearTimeout","_png","GifReader","pf0","global_palette_flag","num_global_colors","global_palette_offset","global_palette_size","no_eof","transparent_index","disposal","loop_count","block_size","pf1","pf2","interlace_flag","num_local_colors","palette_offset","palette_size","has_local_palette","data_offset","data_length","interlaced","loopCount","frameInfo","frame_num","decodeAndBlitFrameBGRA","num_pixels","index_stream","GifReaderLZWOutputIndexStream","trans","framewidth","framestride","xleft","opbeg","opend","scanstride","interlaceskip","il","decodeAndBlitFrameRGBA","code_stream","output_length","min_code_size","clear_code","eoi_code","next_code","cur_code_size","code_mask","cur_shift","cur","subblock_size","code_table","prev_code","code","chase_code","chase_length","chase","JPEGEncoder","YDC_HT","UVDC_HT","YAC_HT","UVAC_HT","currentQuality","ffloor","YTable","UVTable","fdtbl_Y","fdtbl_UV","bitcode","category","outputfDCTQuant","DU","byteout","bytenew","bytepos","YDU","UDU","VDU","clt","RGB_YUV_TABLE","ZigZag","std_dc_luminance_nrcodes","std_dc_luminance_values","std_ac_luminance_nrcodes","std_ac_luminance_values","std_dc_chrominance_nrcodes","std_dc_chrominance_values","std_ac_chrominance_nrcodes","std_ac_chrominance_values","computeHuffmanTbl","nrcodes","std_table","codevalue","pos_in_table","HT","writeBits","bs","posval","writeByte","writeWord","processDU","CDU","fdtbl","DC","HTDC","HTAC","EOB","M16zeroes","DU_DCT","d0","d1","d2","d3","d4","d5","d6","d7","fDCTQuant","dataOff","tmp0","tmp7","tmp1","tmp6","tmp2","tmp5","tmp3","tmp4","tmp10","tmp13","tmp11","tmp12","z1","z5","z2","z4","z3","z11","z13","tmp0p2","tmp7p2","tmp1p2","tmp6p2","tmp2p2","tmp5p2","tmp3p2","tmp4p2","tmp10p2","tmp13p2","tmp11p2","tmp12p2","z1p2","z5p2","z2p2","z4p2","z3p2","z11p2","z13p2","Diff","end0pos","lng","startpos","nrzeroes","nrmarker","setQuality","sf","YQT","UVQT","u","aasf","initQuantTables","encode","writeDQT","writeSOF0","o","writeDHT","DCY","DCU","DCV","displayName","quadWidth","fillbits","sfcc","initCharLookupTable","nrlower","nrupper","cat","nr","nrneg","initCategoryNumber","initRGBYUVTable","BmpDecoder","is_with_alpha","datav","DataView","bottom_up","flag","parseHeader","parseBGR","WebPDecoder","fa","L","J","H","I","Z","M","wa","Ed","ma","_WebPDecoder","Fd","Ub","G","jc","Qb","qb","nd","pd","xb","Ca","Ka","oa","Jd","Yc","Zc","Qa","na","K","ca","cb","Sb","Ra","bb","Vb","ob","db","Gd","Hd","Wb","Sa","Xb","Id","ra","Ta","Yb","Ha","Zb","X","Mb","Xa","$b","ac","bc","xa","yb","ud","hd","jd","aa","eb","Ia","cc","Kd","Ld","ec","Ea","Md","Nd","Od","Pd","Qd","fb","gb","hb","zb","Ab","Ja","Bb","Rd","A","Sd","ea","Tc","Cd","lb","Db","W","Cb","S","RGBA","kb","sd","Td","Ud","fd","ib","bd","cd","Da","Vd","T","Wd","ba","ka","Mc","Nc","fc","Rc","Xd","ya","Kb","za","gc","Ua","Va","memory","Ib","Jb","hc","Oa","ic","Aa","Yd","Ba","Wa","Zd","$d","ae","ta","Eb","be","ga","ce","Dc","lc","mc","nc","de","ua","ub","ha","xc","vc","md","Ya","oc","C","ee","E","B","Q","fe","qc","Fb","rc","ge","va","Ma","sc","Gb","tc","uc","Hb","wc","yc","zc","qd","rd","ia","tb","he","$","Pb","wd","xd","vb","ie","Ac","Bc","je","Cc","VP8LMapColor32b","ke","VP8LMapColor8b","le","rb","Oc","R","me","qa","Y","la","ja","Fa","ne","sb","La","Za","$a","jb","mb","oe","pe","nb","qe","Pa","Ga","Na","Ec","se","Fc","ue","yd","td","Rb","ve","we","Lb","Gc","wb","xe","Wc","Xc","ye","Pc","Tb","zd","vd","od","ld","dd","Hc","ze","Sc","Qc","ad","Ob","Ad","Dd","Ae","Nb","Ic","Be","Kc","ed","$c","Jc","Bd","gd","Uc","Vc","put","Ce","De","Ee","Fe","Ge","He","Ie","Lc","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","Ke","Le","Je","kd","Cf","Df","Ef","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Qf","WebPDecodeRGBA","te","GetTag","data_off","GetLE24","GetLE32","webpdecoder","response","imagearray","src_off","alpha_chunk","alpha_size","alpha_offset","memcmp","fourcc","payload_size","payload_size_padded","src_off_","temp","WebPRiffParser","hasCompressionJS","compressBytes","lineLength","colorsPerPixel","level","filter_method","filterUp","filterSub","filterAverage","filterPaeth","applyPngFilterMethod","dat","prevLine","filter_methods","getFilterMethods","results","ind","getIndexOfSmallestSum","filterNone","up","upLeft","paethPredictor","pLeft","pUp","pUpLeft","arrays","sum","processPNG","trns","pal","smask","alphaData","hasColors","pixel","pbl","pDiff","total","getPredictorFromCompression","processGIF89A","reader","rawImageData","processGIF87A","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","hr","vr","importantColors","getUint8","quad","bitn","bit1","xlen","mode","bit4","before","after","bit8","bit15","dif_w","_1_5","bit16","_1_6","bit24","bit32","getData","processBMP","processWEBP","processRGBA","imagePixels","rgbOut","alphaOut","outIndex","alphaIndex","rgbData","setLanguage","langCode","languageSettings","isSubscribed","sq","ar-DZ","ar-BH","ar-EG","ar-IQ","ar-JO","ar-KW","ar-LB","ar-LY","ar-MA","ar-OM","ar-QA","ar-SA","ar-SY","ar-TN","ar-AE","ar-YE","an","hy","as","ast","az","eu","bn","br","bg","my","zh","zh-HK","zh-CN","zh-SG","zh-TW","co","cr","cs","nl","nl-BE","en","en-AU","en-BZ","en-CA","en-IE","en-JM","en-NZ","en-PH","en-ZA","en-TT","en-GB","en-US","en-ZW","eo","et","fo","fj","fi","fr","fr-BE","fr-CA","fr-FR","fr-LU","fr-MC","fr-CH","fy","fur","gd-IE","gl","de-AT","de-DE","de-LI","de-LU","de-CH","gu","ht","hi","hu","is","iu","it","it-CH","kn","ks","kk","km","ky","tlh","ko","ko-KP","ko-KR","lv","lt","mk","ms","ml","mt","mi","mr","mo","nv","ng","no","nn","or","om","fa-IR","pl","pt-BR","pa-IN","pa-PK","qu","rm","ro","ro-MO","ru","ru-MO","sz","sg","si","sr","sk","sl","so","es","es-AR","es-BO","es-CL","es-CO","es-CR","es-DO","es-EC","es-SV","es-GT","es-HN","es-MX","es-NI","es-PA","es-PY","es-PE","es-PR","es-ES","es-UY","es-VE","sw","sv","sv-FI","sv-SV","tt","th","tig","ts","tn","tr","tk","uk","hsb","ur","vi","vo","xh","ji","zu","languageCode","char_code","widths","Unicode","widthsFractionOf","fof","kerning","kerningFractionOf","kerningValue","prior_char_code","default_char_width","widthOfString","widthOfGlyph","characterToGlyph","widths_array","firstLineMaxLen","maxLen","answer","workingLen","startOfLine","maxlen","lineIndent","postProcess","line_length","textIndent","separator_length","current_word_length","spaceCharWidth","pad","wrds","wrd","idx","force","ln","paragraphs","fsize","newOptions","fontUnit_maxLen","__fontmetrics__","encoded","mappingUncompress","mappingCompress","keystring","valuestring","numberprefix","vals","uncompress","stringparts","parent_key_pair","sign","activeobject","parentchain","keyparts","valueparts","datalen","WinAnsiEncoding","encodings","Courier","Courier-Bold","Courier-BoldOblique","Courier-Oblique","Helvetica-Bold","Helvetica-BoldOblique","Helvetica-Oblique","Times-Roman","Times-Bold","Times-BoldItalic","Times-Italic","fontMetrics","Symbol","ZapfDingbats","metrics","file","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","loadCanvg","canvg","addSvgAsImage","svg","ignoreMouse","ignoreAnimation","ignoreDimensions","doc","fromString","putTotalPages","pageExpression","replaceExpression","totalNumberOfPages","pdfEscape16","viewerPreferences","doReset","configuration","isValid","method","configurationTemplate","HideToolbar","defaultValue","explicitSet","valueSet","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","configurationKeys","rangeArray","arrayContainsElement","iterator","viewerpreferences","vPref","pdfDict","postPutResources","rdf_beginning","__metadata__","namespaceuri","utf8_xmpmeta_beginning","utf8_rdf_beginning","utf8_metadata","utf8_rdf_ending","utf8_xmpmeta_ending","total_len","metadata_object_number","addMetadata","padz","toUnicode","toUnicodeCmap","codes","range","unicode","unicodeMap","pdfOutput","subset","pdfOutput2","fontTable","cmap","fontDescriptor","PDFObject","bbox","stemV","italicAngle","ascender","decender","capHeight","DescendantFont","identityHFunction","hmtx","head","unitsPerEm","winAnsiEncodingFunction","utf8TextFunction","cmapConfirm","strText","codeMap","parms","_initializeVFS","vFS","addFileToVFS","filecontent","__bidiEngine__","_hasUbatB","_hasUbatS","_isInVisual","_isInRtl","_isOutVisual","_isOutRtl","_isSymmetricSwapping","_UNICODE_TYPES","_bidiUnicodeTypes","_STATE_TABLE_LTR","_STATE_TABLE_RTL","_TYPE_NAMES_MAP","EN","AN","_UNICODE_RANGES_MAP","5","6","7","32","251","254","255","_SWAP_TABLE","_LTR_RANGES_REG_EXPR","_lastArabic","_dir","_getCharType","rangeIdx","_isContextualDirRtl","charType","_resolveCharType","chars","types","resolvedTypes","wType","nType","cType","rtlCandidate","_invertString","sourceToTargetMap","levels","charArray","_computeLevels","hiLevel","params","action","newLevel","prevState","condPos","newState","stateTable","_handleUbatS","_invertByLevel","high","end","low","_reorder","_symmetricSwap","DIR_RTL","doBidiReorder","_init","isSymmetricSwappingOrig","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","bidiEngine","Data","readString","Subset","registerTTF","directory","Directory","HeadTable","NameTable","CmapTable","hhea","HheaTable","maxp","MaxpTable","HmtxTable","post","PostTable","os2","OS2Table","loca","LocaTable","glyf","GlyfTable","exists","lineGap","xMin","yMin","xMax","yMax","raw","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","character","glyph","forGlyph","advance","includeGap","gap","Table","readByte","writeUInt32","readInt32","int","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","checksum","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","adjustment","directoryLength","headOffset","log2","tableData","__slice","__hasProp","__extends","ctor","__super__","_super","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","CmapEntry","endCode","glyphId","glyphIds","idDelta","idRangeOffset","saveOffset","segCount","segCountX2","startCode","platformID","encodingID","language","charmap","charMap","diff","endCodes","glyphIDs","indexes","last","nextID","old","rangeOffsets","startCodes","startGlyph","subtable","_len1","_len2","_len3","_len4","_len5","_len6","_len7","_n","_name","_o","_p","_q","new","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","numberOfGlyphs","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","_results1","numGlyphs","NameEntry","languageID","entries","stringOffset","strings","nameID","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","lsbCount","lsb","leftSideBearings","cache","glyphFor","numberOfContours","lengthOf","CompoundGlyph","SimpleGlyph","glyphs","mapping","old2new","compound","glyphOffsets","activeGlyphs","glyfPtr","listGlyf","newLocaTable","unicodes","next","generateCmap","roman","unicodeCmap","glyphsFor","additionalIDs","glyID","ids","new2old","newIDs","nextGlyphID","oldID","oldIDs","invert","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"mappings":"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,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,MAAQ,MAAQ,MAAO,OAChCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,OACjBC,KAAQ,CAAC,OACTC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAAC,MAAQ,MAAQ,MAAQ,OACjCC,KAAQ,CAA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ACrBw4D,EAAkB,IAAIx4D,MAAM,IAC5By4D,EAAK,IAAIz4D,MAAM,IACf04D,EAAU,GACVC,EAAU,EACVC,EAAU,EAEVC,EAAM,IAAI74D,MAAM,IAChB84D,EAAM,IAAI94D,MAAM,IAChB+4D,EAAM,IAAI/4D,MAAM,IAChBg5D,EAAM,IAAIh5D,MAAM,KAChBi5D,EAAgB,IAAIj5D,MAAM,MAG1Bk5D,EAAS,CACX,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAGEC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA0B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC7DC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA0B,CAC5B,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGEC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC/DC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA4B,CAC9B,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,GACA,IACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,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D,EAAUW,GACHH,EAIT,IAFA,IACIwD,EADAhiE,EAAI,EAEDA,GAAK+hE,GAAS,CAEnB,IADA,IAAIE,EAAWjiE,EACC,GAATw8D,EAAGx8D,IAAWA,GAAK+hE,KACtB/hE,EAEJ,IAAIkiE,EAAWliE,EAAIiiE,EACnB,GAAIC,GApCI,GAoCa,CACnBF,EAAME,GAAY,EAClB,IAAK,IAAIC,EAAW,EAAGA,GAAYH,IAAOG,EACxCnE,EAAUY,GACZsD,GAAsB,GAExBnO,EAAM,MAAQyI,EAAGx8D,GACjBg+D,EAAUU,GAAMwD,GAAY,GAAK5F,EAASvI,KAC1CiK,EAAU3B,EAAQtI,IAClB/zD,IAKF,OAjDU,IA8CN+hE,GACF/D,EAAUW,GAELH,EA8HT,SAAS4D,EAAW5S,IAClBA,EAAU/oD,KAAK8b,IAAI9b,KAAKouC,IAAI2a,EAAS,GAAI,KAErCuM,GAAkBvM,MA1qBxB,SAAyB6S,GAoEvB,IAnEA,IAAIC,EAAM,CACR,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IAGOtiE,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAImC,EAAI65D,GAAQsG,EAAItiE,GAAKqiE,EAAK,IAAM,KACpClgE,EAAIsE,KAAK8b,IAAI9b,KAAKouC,IAAI1yC,EAAG,GAAI,KAC7B85D,EAAOgB,EAAOj9D,IAAMmC,EAoEtB,IAlEA,IAAIogE,EAAO,CACT,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA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,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEJM,EAAE,aAAc,iBAChBvxE,EAAKqiF,WAAa,WAChB,OAAO,YAET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,SAEVzL,GAAMh4E,EAAK0jF,kBAAoB,GACjC1L,GAAGhuE,OAAS,IACXhK,EAAK2jF,eAAiB,IAAI35E,OAAS,IACnChK,EAAK4jF,oBAAsB,IAAI55E,OAAS,IACxChK,EAAK6jF,iBAAmB,IAAI75E,OAAS,GACtC,IAAIiuE,GACFK,GACAC,GACAG,GACArB,GACAoB,GA+3BAxD,GAIA4F,GACAvG,GACAkJ,GACA3d,GACAud,GACAd,GACA5I,GACA3D,GACAkO,GACAjO,GACAkO,GACAL,GACAxB,GACAlH,GACAqH,GACAS,GACAC,GAIA3H,GACA+B,GACApC,GACAwG,GAz5BAlH,GAAKj0C,EAAE,KACPk0C,GAAKl0C,EAAE,MACPu8C,GAAKv8C,EAAE,KACPq9C,GAAKr9C,EAAE,KACP48C,GAAK,EACL7N,GAAKmF,GACLuG,GAAK8B,GACL3C,GAAIyD,GACJpuE,GAAIglE,GACJ7E,GAAK,EACL8F,GAAK,EACL+C,GAAK,EACL9C,GAAK,EACLL,GAAK,EACLxB,GAAK,EACL8E,GAAK,EACLzF,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,GACL6H,GAAK,CAAC,EAAG,EAAG,GACZD,GAAK,CAAC,EAAG,EAAG,IACZpE,GAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAC1BuE,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,GAClBV,GAAK,CAAC,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IACpEzD,GAAK,CACH,GACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,GACA,GACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,KAEFmD,GAAK,CACH,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEFZ,GAAK,EACLyC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEFzK,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,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K,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,I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AvZM,EAwZNj2E,EAAOg4E,EAASh4E,EAAM+2E,EAAmBC,GACzCf,EA1ZM,EA2ZNnB,GAAuB,EACvB90E,EAAOg4E,EAASh4E,EAAM+2E,EAAmBC,GACzClC,EAAuBuD,IAGvBpC,EAhaM,EAiaNj2E,EAAOg4E,EAASh4E,EAAM+2E,EAAmBC,GACzCh3E,EAAO82E,EAAc92E,EAAM+2E,GAC3Bd,EAlaM,EAmaNnB,GAAuB,EACvB90E,EAAOg4E,EAASh4E,EAAM+2E,EAAmBC,GACzClC,EAAuBuD,EACvBr4E,EAAO82E,EAAc92E,EAAM+2E,UAxC7Bd,EA/XQ,EAgYRj2E,EAAOg4E,EAASh4E,EAAM+2E,EAAmBC,QAdzCf,EAAOtB,EAjXC,EADA,EAmXR30E,EAAOg4E,EAASh4E,EAAM+2E,EAAmBC,GAuD3C,OAAOh3E,GAcTlrB,KAAKy/F,eAAev4D,WAAa,SAASx0B,GACpCA,IACFktF,EAAcltF,EAAQ8wF,cACtB1D,EAAeptF,EAAQ+wF,eACvB5D,EAAWntF,EAAQgxF,WACnB3D,EAAYrtF,EAAQixF,YACpB3D,EAAuBttF,EAAQkxF,sBAInC5jG,KAAKy/F,eAAev4D,WAAWx0B,GACxB1S,KAAKy/F,gBAGd,IAAIS,EA5jFmB,CACrB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,MACA,IACA,MACA,MACA,IACA,MACA,MACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA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"} \ No newline at end of file diff --git a/lib/jspdf/jspdf.umd.js b/lib/jspdf/jspdf.umd.js new file mode 100644 index 0000000..22d6d59 --- /dev/null +++ b/lib/jspdf/jspdf.umd.js @@ -0,0 +1,28833 @@ +/** @license + * + * jsPDF - PDF Document creation from JavaScript + * Version 2.5.1 Built on 2022-01-28T15:37:57.789Z + * CommitID 00000000 + * + * Copyright (c) 2010-2021 James Hall , https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.jspdf = {})); +}(this, (function (exports) { 'use strict'; + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + var globalObject = function () { + return "undefined" !== typeof window ? window : "undefined" !== typeof global ? global : "undefined" !== typeof self ? self : this; + }(); + + function consoleLog() { + if (globalObject.console && typeof globalObject.console.log === "function") { + globalObject.console.log.apply(globalObject.console, arguments); + } + } + + function consoleWarn(str) { + if (globalObject.console) { + if (typeof globalObject.console.warn === "function") { + globalObject.console.warn.apply(globalObject.console, arguments); + } else { + consoleLog.call(null, arguments); + } + } + } + + function consoleError(str) { + if (globalObject.console) { + if (typeof globalObject.console.error === "function") { + globalObject.console.error.apply(globalObject.console, arguments); + } else { + consoleLog(str); + } + } + } + + var console = { + log: consoleLog, + warn: consoleWarn, + error: consoleError + }; + + function bom(blob, opts) { + if (typeof opts === "undefined") opts = { + autoBom: false + };else if (_typeof(opts) !== "object") { + console.warn("Deprecated: Expected third argument to be a object"); + opts = { + autoBom: !opts + }; + } // prepend BOM for UTF-8 XML and text/* types (including HTML) + // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF + + if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + return new Blob([String.fromCharCode(0xfeff), blob], { + type: blob.type + }); + } + + return blob; + } + + function download(url, name, opts) { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url); + xhr.responseType = "blob"; + + xhr.onload = function () { + saveAs(xhr.response, name, opts); + }; + + xhr.onerror = function () { + console.error("could not download file"); + }; + + xhr.send(); + } + + function corsEnabled(url) { + var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker + + xhr.open("HEAD", url, false); + + try { + xhr.send(); + } catch (e) {} + + return xhr.status >= 200 && xhr.status <= 299; + } // `a.click()` doesn't work for all browsers (#465) + + + function click(node) { + try { + node.dispatchEvent(new MouseEvent("click")); + } catch (e) { + var evt = document.createEvent("MouseEvents"); + evt.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); + node.dispatchEvent(evt); + } + } + + var saveAs = globalObject.saveAs || ( // probably in some web worker + (typeof window === "undefined" ? "undefined" : _typeof(window)) !== "object" || window !== globalObject ? function saveAs() { + /* noop */ + } : // Use download attribute first if possible (#193 Lumia mobile) unless this is a native app + typeof HTMLAnchorElement !== "undefined" && "download" in HTMLAnchorElement.prototype ? function saveAs(blob, name, opts) { + var URL = globalObject.URL || globalObject.webkitURL; + var a = document.createElement("a"); + name = name || blob.name || "download"; + a.download = name; + a.rel = "noopener"; // tabnabbing + // TODO: detect chrome extensions & packaged apps + // a.target = '_blank' + + if (typeof blob === "string") { + // Support regular links + a.href = blob; + + if (a.origin !== location.origin) { + corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = "_blank"); + } else { + click(a); + } + } else { + // Support blobs + a.href = URL.createObjectURL(blob); + setTimeout(function () { + URL.revokeObjectURL(a.href); + }, 4e4); // 40s + + setTimeout(function () { + click(a); + }, 0); + } + } : // Use msSaveOrOpenBlob as a second approach + "msSaveOrOpenBlob" in navigator ? function saveAs(blob, name, opts) { + name = name || blob.name || "download"; + + if (typeof blob === "string") { + if (corsEnabled(blob)) { + download(blob, name, opts); + } else { + var a = document.createElement("a"); + a.href = blob; + a.target = "_blank"; + setTimeout(function () { + click(a); + }); + } + } else { + navigator.msSaveOrOpenBlob(bom(blob, opts), name); + } + } : // Fallback to using FileReader and a popup + function saveAs(blob, name, opts, popup) { + // Open a popup immediately do go around popup blocker + // Mostly only available on user interaction and the fileReader is async so... + popup = popup || open("", "_blank"); + + if (popup) { + popup.document.title = popup.document.body.innerText = "downloading..."; + } + + if (typeof blob === "string") return download(blob, name, opts); + var force = blob.type === "application/octet-stream"; + + var isSafari = /constructor/i.test(globalObject.HTMLElement) || globalObject.safari; + + var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); + + if ((isChromeIOS || force && isSafari) && (typeof FileReader === "undefined" ? "undefined" : _typeof(FileReader)) === "object") { + // Safari doesn't allow downloading of blob URLs + var reader = new FileReader(); + + reader.onloadend = function () { + var url = reader.result; + url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, "data:attachment/file;"); + if (popup) popup.location.href = url;else location = url; + popup = null; // reverse-tabnabbing #460 + }; + + reader.readAsDataURL(blob); + } else { + var URL = globalObject.URL || globalObject.webkitURL; + var url = URL.createObjectURL(blob); + if (popup) popup.location = url;else location.href = url; + popup = null; // reverse-tabnabbing #460 + + setTimeout(function () { + URL.revokeObjectURL(url); + }, 4e4); // 40s + } + }); + + /** + * A class to parse color values + * @author Stoyan Stefanov + * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} + * @license Use it if you like it + */ + function RGBColor(color_string) { + color_string = color_string || ""; + this.ok = false; // strip any leading # + + if (color_string.charAt(0) == "#") { + // remove # if any + color_string = color_string.substr(1, 6); + } + + color_string = color_string.replace(/ /g, ""); + color_string = color_string.toLowerCase(); + var channels; // before getting into regexps, try simple matches + // and overwrite the input + + var simple_colors = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "00ffff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000000", + blanchedalmond: "ffebcd", + blue: "0000ff", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "00ffff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dodgerblue: "1e90ff", + feldspar: "d19275", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "ff00ff", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgrey: "d3d3d3", + lightgreen: "90ee90", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslateblue: "8470ff", + lightslategray: "778899", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "00ff00", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "ff00ff", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370d8", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "d87093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "ff0000", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + violetred: "d02090", + wheat: "f5deb3", + white: "ffffff", + whitesmoke: "f5f5f5", + yellow: "ffff00", + yellowgreen: "9acd32" + }; + color_string = simple_colors[color_string] || color_string; // array of color definition objects + + var color_defs = [{ + re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, + example: ["rgb(123, 234, 45)", "rgb(255,234,245)"], + process: function process(bits) { + return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])]; + } + }, { + re: /^(\w{2})(\w{2})(\w{2})$/, + example: ["#00ff00", "336699"], + process: function process(bits) { + return [parseInt(bits[1], 16), parseInt(bits[2], 16), parseInt(bits[3], 16)]; + } + }, { + re: /^(\w{1})(\w{1})(\w{1})$/, + example: ["#fb0", "f0f"], + process: function process(bits) { + return [parseInt(bits[1] + bits[1], 16), parseInt(bits[2] + bits[2], 16), parseInt(bits[3] + bits[3], 16)]; + } + }]; // search through the definitions to find a match + + for (var i = 0; i < color_defs.length; i++) { + var re = color_defs[i].re; + var processor = color_defs[i].process; + var bits = re.exec(color_string); + + if (bits) { + channels = processor(bits); + this.r = channels[0]; + this.g = channels[1]; + this.b = channels[2]; + this.ok = true; + } + } // validate/cleanup values + + + this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; + this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g; + this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; // some getters + + this.toRGB = function () { + return "rgb(" + this.r + ", " + this.g + ", " + this.b + ")"; + }; + + this.toHex = function () { + var r = this.r.toString(16); + var g = this.g.toString(16); + var b = this.b.toString(16); + if (r.length == 1) r = "0" + r; + if (g.length == 1) g = "0" + g; + if (b.length == 1) b = "0" + b; + return "#" + r + g + b; + }; + } + + var atob, btoa; + + (function () { + atob = globalObject.atob.bind(globalObject); + btoa = globalObject.btoa.bind(globalObject); + return; + })(); + + /** + * @license + * Joseph Myers does not specify a particular license for his work. + * + * Author: Joseph Myers + * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js + * + * Modified by: Owen Leong + */ + function md5cycle(x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + } + + function cmn(q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32(a << s | a >>> 32 - s, b); + } + + function ff(a, b, c, d, x, s, t) { + return cmn(b & c | ~b & d, a, b, x, s, t); + } + + function gg(a, b, c, d, x, s, t) { + return cmn(b & d | c & ~d, a, b, x, s, t); + } + + function hh(a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); + } + + function ii(a, b, c, d, x, s, t) { + return cmn(c ^ (b | ~d), a, b, x, s, t); + } + + function md51(s) { + // txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + + for (i = 0; i < s.length; i++) { + tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3); + } + + tail[i >> 2] |= 0x80 << (i % 4 << 3); + + if (i > 55) { + md5cycle(state, tail); + + for (i = 0; i < 16; i++) { + tail[i] = 0; + } + } + + tail[14] = n * 8; + md5cycle(state, tail); + return state; + } + /* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + + + function md5blk(s) { + /* I figured global was faster. */ + var md5blks = [], + i; + /* Andy King said do it this way. */ + + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + + return md5blks; + } + + var hex_chr = "0123456789abcdef".split(""); + + function rhex(n) { + var s = "", + j = 0; + + for (; j < 4; j++) { + s += hex_chr[n >> j * 8 + 4 & 0x0f] + hex_chr[n >> j * 8 & 0x0f]; + } + + return s; + } + + function hex(x) { + for (var i = 0; i < x.length; i++) { + x[i] = rhex(x[i]); + } + + return x.join(""); + } // Converts a 4-byte number to byte string + + + function singleToByteString(n) { + return String.fromCharCode((n & 0xff) >> 0, (n & 0xff00) >> 8, (n & 0xff0000) >> 16, (n & 0xff000000) >> 24); + } // Converts an array of numbers to a byte string + + + function toByteString(x) { + return x.map(singleToByteString).join(""); + } // Returns the MD5 hash as a byte string + + + function md5Bin(s) { + return toByteString(md51(s)); + } // Returns MD5 hash as a hex string + + + function md5(s) { + return hex(md51(s)); + } + + var md5Check = md5("hello") != "5d41402abc4b2a76b9719d911017c592"; + + function add32(a, b) { + if (md5Check) { + /* if the md5Check does not match + the expected value, we're dealing + with an old browser and need + this function. */ + var lsw = (a & 0xffff) + (b & 0xffff), + msw = (a >> 16) + (b >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; + } else { + /* this function is much faster, + so if possible we use it. Some IEs + are the only ones I know of that + need the idiotic second function, + generated by an if clause. */ + return a + b & 0xffffffff; + } + } + + /** + * @license + * FPDF is released under a permissive license: there is no usage restriction. + * You may embed it freely in your application (commercial or not), with or + * without modifications. + * + * Reference: http://www.fpdf.org/en/script/script37.php + */ + function repeat(str, num) { + return new Array(num + 1).join(str); + } + /** + * Converts a byte string to a hex string + * + * @name rc4 + * @function + * @param {string} key Byte string of encryption key + * @param {string} data Byte string of data to be encrypted + * @returns {string} Encrypted string + */ + + + function rc4(key, data) { + var lastKey, lastState; + + if (key !== lastKey) { + var k = repeat(key, (256 / key.length >> 0) + 1); + var state = []; + + for (var i = 0; i < 256; i++) { + state[i] = i; + } + + var j = 0; + + for (var i = 0; i < 256; i++) { + var t = state[i]; + j = (j + t + k.charCodeAt(i)) % 256; + state[i] = state[j]; + state[j] = t; + } + + lastKey = key; + lastState = state; + } else { + state = lastState; + } + + var length = data.length; + var a = 0; + var b = 0; + var out = ""; + + for (var i = 0; i < length; i++) { + a = (a + 1) % 256; + t = state[a]; + b = (b + t) % 256; + state[a] = state[b]; + state[b] = t; + k = state[(state[a] + state[b]) % 256]; + out += String.fromCharCode(data.charCodeAt(i) ^ k); + } + + return out; + } + + /** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + * Author: Owen Leong (@owenl131) + * Date: 15 Oct 2020 + * References: + * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt + * https://github.com/foliojs/pdfkit/blob/master/lib/security.js + * http://www.fpdf.org/en/script/script37.php + */ + var permissionOptions = { + print: 4, + modify: 8, + copy: 16, + "annot-forms": 32 + }; + /** + * Initializes encryption settings + * + * @name constructor + * @function + * @param {Array} permissions Permissions allowed for user, "print", "modify", "copy" and "annot-forms". + * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document + * is not password protected but viewer has the above permissions. + * @param {String} ownerPassword Owner has full functionalities to the file. + * @param {String} fileId As hex string, should be same as the file ID in the trailer. + * @example + * var security = new PDFSecurity(["print"]) + */ + + function PDFSecurity(permissions, userPassword, ownerPassword, fileId) { + this.v = 1; // algorithm 1, future work can add in more recent encryption schemes + + this.r = 2; // revision 2 + // set flags for what functionalities the user can access + + var protection = 192; + permissions.forEach(function (perm) { + if (typeof permissionOptions.perm !== "undefined") { + throw new Error("Invalid permission: " + perm); + } + + protection += permissionOptions[perm]; + }); // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF + + this.padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08" + "\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + var paddedUserPassword = (userPassword + this.padding).substr(0, 32); + var paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32); + this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword); + this.P = -((protection ^ 255) + 1); + this.encryptionKey = md5Bin(paddedUserPassword + this.O + this.lsbFirstWord(this.P) + this.hexToBytes(fileId)).substr(0, 5); + this.U = rc4(this.encryptionKey, this.padding); + } + /** + * Breaks down a 4-byte number into its individual bytes, with the least significant bit first + * + * @name lsbFirstWord + * @function + * @param {number} data 32-bit number + * @returns {Array} + */ + + + PDFSecurity.prototype.lsbFirstWord = function (data) { + return String.fromCharCode(data >> 0 & 0xff, data >> 8 & 0xff, data >> 16 & 0xff, data >> 24 & 0xff); + }; + /** + * Converts a byte string to a hex string + * + * @name toHexString + * @function + * @param {String} byteString Byte string + * @returns {String} + */ + + + PDFSecurity.prototype.toHexString = function (byteString) { + return byteString.split("").map(function (byte) { + return ("0" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2); + }).join(""); + }; + /** + * Converts a hex string to a byte string + * + * @name hexToBytes + * @function + * @param {String} hex Hex string + * @returns {String} + */ + + + PDFSecurity.prototype.hexToBytes = function (hex) { + for (var bytes = [], c = 0; c < hex.length; c += 2) { + bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16))); + } + + return bytes.join(""); + }; + /** + * Computes the 'O' field in the encryption dictionary + * + * @name processOwnerPassword + * @function + * @param {String} paddedUserPassword Byte string of padded user password + * @param {String} paddedOwnerPassword Byte string of padded owner password + * @returns {String} + */ + + + PDFSecurity.prototype.processOwnerPassword = function (paddedUserPassword, paddedOwnerPassword) { + var key = md5Bin(paddedOwnerPassword).substr(0, 5); + return rc4(key, paddedUserPassword); + }; + /** + * Returns an encryptor function which can take in a byte string and returns the encrypted version + * + * @name encryptor + * @function + * @param {number} objectId + * @param {number} generation Not sure what this is for, you can set it to 0 + * @returns {Function} + * @example + * out("stream"); + * encryptor = security.encryptor(object.id, 0); + * out(encryptor(data)); + * out("endstream"); + */ + + + PDFSecurity.prototype.encryptor = function (objectId, generation) { + var key = md5Bin(this.encryptionKey + String.fromCharCode(objectId & 0xff, objectId >> 8 & 0xff, objectId >> 16 & 0xff, generation & 0xff, generation >> 8 & 0xff)).substr(0, 10); + return function (data) { + return rc4(key, data); + }; + }; + + /** + * Convert string to `PDF Name Object`. + * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object + * @param str + */ + function toPDFName(str) { + // eslint-disable-next-line no-control-regex + if (/[^\u0000-\u00ff]/.test(str)) { + // non ascii string + throw new Error("Invalid PDF Name Object: " + str + ", Only accept ASCII characters."); + } + + var result = "", + strLength = str.length; + + for (var i = 0; i < strLength; i++) { + var charCode = str.charCodeAt(i); + + if (charCode < 0x21 || charCode === 0x23 + /* # */ + || charCode === 0x25 + /* % */ + || charCode === 0x28 + /* ( */ + || charCode === 0x29 + /* ) */ + || charCode === 0x2f + /* / */ + || charCode === 0x3c + /* < */ + || charCode === 0x3e + /* > */ + || charCode === 0x5b + /* [ */ + || charCode === 0x5d + /* ] */ + || charCode === 0x7b + /* { */ + || charCode === 0x7d + /* } */ + || charCode > 0x7e) { + // Char CharCode hexStr paddingHexStr Result + // "\t" 9 9 09 #09 + // " " 32 20 20 #20 + // "©" 169 a9 a9 #a9 + var hexStr = charCode.toString(16), + paddingHexStr = ("0" + hexStr).slice(-2); + result += "#" + paddingHexStr; + } else { + // Other ASCII printable characters between 0x21 <= X <= 0x7e + result += str[i]; + } + } + + return result; + } + + /** + * jsPDF's Internal PubSub Implementation. + * Backward compatible rewritten on 2014 by + * Diego Casorran, https://github.com/diegocr + * + * @class + * @name PubSub + * @ignore + */ + + function PubSub(context) { + if (_typeof(context) !== "object") { + throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)"); + } + + var topics = {}; + + this.subscribe = function (topic, callback, once) { + once = once || false; + + if (typeof topic !== "string" || typeof callback !== "function" || typeof once !== "boolean") { + throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)"); + } + + if (!topics.hasOwnProperty(topic)) { + topics[topic] = {}; + } + + var token = Math.random().toString(35); + topics[topic][token] = [callback, !!once]; + return token; + }; + + this.unsubscribe = function (token) { + for (var topic in topics) { + if (topics[topic][token]) { + delete topics[topic][token]; + + if (Object.keys(topics[topic]).length === 0) { + delete topics[topic]; + } + + return true; + } + } + + return false; + }; + + this.publish = function (topic) { + if (topics.hasOwnProperty(topic)) { + var args = Array.prototype.slice.call(arguments, 1), + tokens = []; + + for (var token in topics[topic]) { + var sub = topics[topic][token]; + + try { + sub[0].apply(context, args); + } catch (ex) { + if (globalObject.console) { + console.error("jsPDF PubSub Error", ex.message, ex); + } + } + + if (sub[1]) tokens.push(token); + } + + if (tokens.length) tokens.forEach(this.unsubscribe); + } + }; + + this.getTopics = function () { + return topics; + }; + } + + function GState(parameters) { + if (!(this instanceof GState)) { + return new GState(parameters); + } + /** + * @name GState#opacity + * @type {any} + */ + + /** + * @name GState#stroke-opacity + * @type {any} + */ + + + var supported = "opacity,stroke-opacity".split(","); + + for (var p in parameters) { + if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) { + this[p] = parameters[p]; + } + } + /** + * @name GState#id + * @type {string} + */ + + + this.id = ""; // set by addGState() + + /** + * @name GState#objectNumber + * @type {number} + */ + + this.objectNumber = -1; // will be set by putGState() + } + + GState.prototype.equals = function equals(other) { + var ignore = "id,objectNumber,equals"; + var p; + if (!other || _typeof(other) !== _typeof(this)) return false; + var count = 0; + + for (p in this) { + if (ignore.indexOf(p) >= 0) continue; + if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false; + if (this[p] !== other[p]) return false; + count++; + } + + for (p in other) { + if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--; + } + + return count === 0; + }; + + function Pattern(gState, matrix) { + this.gState = gState; + this.matrix = matrix; + this.id = ""; // set by addPattern() + + this.objectNumber = -1; // will be set by putPattern() + } + + function ShadingPattern(type, coords, colors, gState, matrix) { + if (!(this instanceof ShadingPattern)) { + return new ShadingPattern(type, coords, colors, gState, matrix); + } // see putPattern() for information how they are realized + + + this.type = type === "axial" ? 2 : 3; + this.coords = coords; + this.colors = colors; + Pattern.call(this, gState, matrix); + } + + function TilingPattern(boundingBox, xStep, yStep, gState, matrix) { + if (!(this instanceof TilingPattern)) { + return new TilingPattern(boundingBox, xStep, yStep, gState, matrix); + } + + this.boundingBox = boundingBox; + this.xStep = xStep; + this.yStep = yStep; + this.stream = ""; // set by endTilingPattern(); + + this.cloneIndex = 0; + Pattern.call(this, gState, matrix); + } + /** + * Creates new jsPDF document object instance. + * @name jsPDF + * @class + * @param {Object} [options] - Collection of settings initializing the jsPDF-instance + * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are "portrait" or "landscape" (or shortcuts "p" or "l").
    + * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.
    + * Possible values are "pt" (points), "mm", "cm", "in", "px", "pc", "em" or "ex". Note that in order to get the correct scaling for "px" + * units, you need to enable the hotfix "px_scaling" by setting options.hotfixes = ["px_scaling"]. + * @param {string/Array} [options.format=a4] The format of the first page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    + * Default is "a4". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89] + * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used. + * @param {boolean} [options.compress=false] Compress the generated PDF. + * @param {number} [options.precision=16] Precision of the element-positions. + * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it. + * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling. + * @param {Object} [options.encryption] + * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list. + * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication. + * @param {string[]} [options.encryption.userPermissions] Array of permissions "print", "modify", "copy", "annot-forms", accessible by the user. + * @param {number|"smart"} [options.floatPrecision=16] + * @returns {jsPDF} jsPDF-instance + * @description + * ``` + * { + * orientation: 'p', + * unit: 'mm', + * format: 'a4', + * putOnlyUsedFonts:true, + * floatPrecision: 16 // or "smart", default is 16 + * } + * ``` + * + * @constructor + */ + + + function jsPDF(options) { + var orientation = typeof arguments[0] === "string" ? arguments[0] : "p"; + var unit = arguments[1]; + var format = arguments[2]; + var compressPdf = arguments[3]; + var filters = []; + var userUnit = 1.0; + var precision; + var floatPrecision = 16; + var defaultPathOperation = "S"; + var encryptionOptions = null; + options = options || {}; + + if (_typeof(options) === "object") { + orientation = options.orientation; + unit = options.unit || unit; + format = options.format || format; + compressPdf = options.compress || options.compressPdf || compressPdf; + encryptionOptions = options.encryption || null; + + if (encryptionOptions !== null) { + encryptionOptions.userPassword = encryptionOptions.userPassword || ""; + encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || ""; + encryptionOptions.userPermissions = encryptionOptions.userPermissions || []; + } + + userUnit = typeof options.userUnit === "number" ? Math.abs(options.userUnit) : 1.0; + + if (typeof options.precision !== "undefined") { + precision = options.precision; + } + + if (typeof options.floatPrecision !== "undefined") { + floatPrecision = options.floatPrecision; + } + + defaultPathOperation = options.defaultPathOperation || "S"; + } + + filters = options.filters || (compressPdf === true ? ["FlateEncode"] : filters); + unit = unit || "mm"; + orientation = ("" + (orientation || "P")).toLowerCase(); + var putOnlyUsedFonts = options.putOnlyUsedFonts || false; + var usedFonts = {}; + var API = { + internal: {}, + __private__: {} + }; + API.__private__.PubSub = PubSub; + var pdfVersion = "1.3"; + + var getPdfVersion = API.__private__.getPdfVersion = function () { + return pdfVersion; + }; + + API.__private__.setPdfVersion = function (value) { + pdfVersion = value; + }; // Size in pt of various paper formats + + + var pageFormats = { + a0: [2383.94, 3370.39], + a1: [1683.78, 2383.94], + a2: [1190.55, 1683.78], + a3: [841.89, 1190.55], + a4: [595.28, 841.89], + a5: [419.53, 595.28], + a6: [297.64, 419.53], + a7: [209.76, 297.64], + a8: [147.4, 209.76], + a9: [104.88, 147.4], + a10: [73.7, 104.88], + b0: [2834.65, 4008.19], + b1: [2004.09, 2834.65], + b2: [1417.32, 2004.09], + b3: [1000.63, 1417.32], + b4: [708.66, 1000.63], + b5: [498.9, 708.66], + b6: [354.33, 498.9], + b7: [249.45, 354.33], + b8: [175.75, 249.45], + b9: [124.72, 175.75], + b10: [87.87, 124.72], + c0: [2599.37, 3676.54], + c1: [1836.85, 2599.37], + c2: [1298.27, 1836.85], + c3: [918.43, 1298.27], + c4: [649.13, 918.43], + c5: [459.21, 649.13], + c6: [323.15, 459.21], + c7: [229.61, 323.15], + c8: [161.57, 229.61], + c9: [113.39, 161.57], + c10: [79.37, 113.39], + dl: [311.81, 623.62], + letter: [612, 792], + "government-letter": [576, 756], + legal: [612, 1008], + "junior-legal": [576, 360], + ledger: [1224, 792], + tabloid: [792, 1224], + "credit-card": [153, 243] + }; + + API.__private__.getPageFormats = function () { + return pageFormats; + }; + + var getPageFormat = API.__private__.getPageFormat = function (value) { + return pageFormats[value]; + }; + + format = format || "a4"; + var ApiMode = { + COMPAT: "compat", + ADVANCED: "advanced" + }; + var apiMode = ApiMode.COMPAT; + + function advancedAPI() { + // prepend global change of basis matrix + // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix + // that does this job for us (however, texts, images and similar objects must be drawn bottom up)) + this.saveGraphicsState(); + out(new Matrix(scaleFactor, 0, 0, -scaleFactor, 0, getPageHeight() * scaleFactor).toString() + " cm"); + this.setFontSize(this.getFontSize() / scaleFactor); // The default in MrRio's implementation is "S" (stroke), whereas the default in the yWorks implementation + // was "n" (none). Although this has nothing to do with transforms, we should use the API switch here. + + defaultPathOperation = "n"; + apiMode = ApiMode.ADVANCED; + } + + function compatAPI() { + this.restoreGraphicsState(); + defaultPathOperation = "S"; + apiMode = ApiMode.COMPAT; + } + /** + * @function combineFontStyleAndFontWeight + * @param {string} fontStyle Fontstyle or variant. Example: "italic". + * @param {number | string} fontWeight Weight of the Font. Example: "normal" | 400 + * @returns {string} + * @private + */ + + + var combineFontStyleAndFontWeight = API.__private__.combineFontStyleAndFontWeight = function (fontStyle, fontWeight) { + if (fontStyle == "bold" && fontWeight == "normal" || fontStyle == "bold" && fontWeight == 400 || fontStyle == "normal" && fontWeight == "italic" || fontStyle == "bold" && fontWeight == "italic") { + throw new Error("Invalid Combination of fontweight and fontstyle"); + } + + if (fontWeight) { + fontStyle = fontWeight == 400 || fontWeight === "normal" ? fontStyle === "italic" ? "italic" : "normal" : (fontWeight == 700 || fontWeight === "bold") && fontStyle === "normal" ? "bold" : (fontWeight == 700 ? "bold" : fontWeight) + "" + fontStyle; + } + + return fontStyle; + }; + /** + * @callback ApiSwitchBody + * @param {jsPDF} pdf + */ + + /** + * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual + * screen coordinates and the PDF coordinate system. + * - "compat": Offers full compatibility across all plugins but does not allow arbitrary transforms + * - "advanced": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might + * not support this mode, though. + * Initial mode is "compat". + * + * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to + * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}. + * + * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the + * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject} + * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to "compat" API mode. + * + * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched. + * The API mode will be switched back automatically afterwards. + * @returns {jsPDF} + * @memberof jsPDF# + * @name advancedAPI + */ + + + API.advancedAPI = function (body) { + var doSwitch = apiMode === ApiMode.COMPAT; + + if (doSwitch) { + advancedAPI.call(this); + } + + if (typeof body !== "function") { + return this; + } + + body(this); + + if (doSwitch) { + compatAPI.call(this); + } + + return this; + }; + /** + * Switches to "compat" API mode. See {@link advancedAPI} for more details. + * + * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched. + * The API mode will be switched back automatically afterwards. + * @return {jsPDF} + * @memberof jsPDF# + * @name compatApi + */ + + + API.compatAPI = function (body) { + var doSwitch = apiMode === ApiMode.ADVANCED; + + if (doSwitch) { + compatAPI.call(this); + } + + if (typeof body !== "function") { + return this; + } + + body(this); + + if (doSwitch) { + advancedAPI.call(this); + } + + return this; + }; + /** + * @return {boolean} True iff the current API mode is "advanced". See {@link advancedAPI}. + * @memberof jsPDF# + * @name isAdvancedAPI + */ + + + API.isAdvancedAPI = function () { + return apiMode === ApiMode.ADVANCED; + }; + + var advancedApiModeTrap = function advancedApiModeTrap(methodName) { + if (apiMode !== ApiMode.ADVANCED) { + throw new Error(methodName + " is only available in 'advanced' API mode. " + "You need to call advancedAPI() first."); + } + }; + + var roundToPrecision = API.roundToPrecision = API.__private__.roundToPrecision = function (number, parmPrecision) { + var tmpPrecision = precision || parmPrecision; + + if (isNaN(number) || isNaN(tmpPrecision)) { + throw new Error("Invalid argument passed to jsPDF.roundToPrecision"); + } + + return number.toFixed(tmpPrecision).replace(/0+$/, ""); + }; // high precision float + + + var hpf; + + if (typeof floatPrecision === "number") { + hpf = API.hpf = API.__private__.hpf = function (number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.hpf"); + } + + return roundToPrecision(number, floatPrecision); + }; + } else if (floatPrecision === "smart") { + hpf = API.hpf = API.__private__.hpf = function (number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.hpf"); + } + + if (number > -1 && number < 1) { + return roundToPrecision(number, 16); + } else { + return roundToPrecision(number, 5); + } + }; + } else { + hpf = API.hpf = API.__private__.hpf = function (number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.hpf"); + } + + return roundToPrecision(number, 16); + }; + } + + var f2 = API.f2 = API.__private__.f2 = function (number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.f2"); + } + + return roundToPrecision(number, 2); + }; + + var f3 = API.__private__.f3 = function (number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.f3"); + } + + return roundToPrecision(number, 3); + }; + + var scale = API.scale = API.__private__.scale = function (number) { + if (isNaN(number)) { + throw new Error("Invalid argument passed to jsPDF.scale"); + } + + if (apiMode === ApiMode.COMPAT) { + return number * scaleFactor; + } else if (apiMode === ApiMode.ADVANCED) { + return number; + } + }; + + var transformY = function transformY(y) { + if (apiMode === ApiMode.COMPAT) { + return getPageHeight() - y; + } else if (apiMode === ApiMode.ADVANCED) { + return y; + } + }; + + var transformScaleY = function transformScaleY(y) { + return scale(transformY(y)); + }; + /** + * @name setPrecision + * @memberof jsPDF# + * @function + * @instance + * @param {string} precision + * @returns {jsPDF} + */ + + + API.__private__.setPrecision = API.setPrecision = function (value) { + if (typeof parseInt(value, 10) === "number") { + precision = parseInt(value, 10); + } + }; + + var fileId = "00000000000000000000000000000000"; + + var getFileId = API.__private__.getFileId = function () { + return fileId; + }; + + var setFileId = API.__private__.setFileId = function (value) { + if (typeof value !== "undefined" && /^[a-fA-F0-9]{32}$/.test(value)) { + fileId = value.toUpperCase(); + } else { + fileId = fileId.split("").map(function () { + return "ABCDEF0123456789".charAt(Math.floor(Math.random() * 16)); + }).join(""); + } + + if (encryptionOptions !== null) { + encryption = new PDFSecurity(encryptionOptions.userPermissions, encryptionOptions.userPassword, encryptionOptions.ownerPassword, fileId); + } + + return fileId; + }; + /** + * @name setFileId + * @memberof jsPDF# + * @function + * @instance + * @param {string} value GUID. + * @returns {jsPDF} + */ + + + API.setFileId = function (value) { + setFileId(value); + return this; + }; + /** + * @name getFileId + * @memberof jsPDF# + * @function + * @instance + * + * @returns {string} GUID. + */ + + + API.getFileId = function () { + return getFileId(); + }; + + var creationDate; + + var convertDateToPDFDate = API.__private__.convertDateToPDFDate = function (parmDate) { + var result = ""; + var tzoffset = parmDate.getTimezoneOffset(), + tzsign = tzoffset < 0 ? "+" : "-", + tzhour = Math.floor(Math.abs(tzoffset / 60)), + tzmin = Math.abs(tzoffset % 60), + timeZoneString = [tzsign, padd2(tzhour), "'", padd2(tzmin), "'"].join(""); + result = ["D:", parmDate.getFullYear(), padd2(parmDate.getMonth() + 1), padd2(parmDate.getDate()), padd2(parmDate.getHours()), padd2(parmDate.getMinutes()), padd2(parmDate.getSeconds()), timeZoneString].join(""); + return result; + }; + + var convertPDFDateToDate = API.__private__.convertPDFDateToDate = function (parmPDFDate) { + var year = parseInt(parmPDFDate.substr(2, 4), 10); + var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1; + var date = parseInt(parmPDFDate.substr(8, 2), 10); + var hour = parseInt(parmPDFDate.substr(10, 2), 10); + var minutes = parseInt(parmPDFDate.substr(12, 2), 10); + var seconds = parseInt(parmPDFDate.substr(14, 2), 10); // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10); + // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10); + + var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0); + return resultingDate; + }; + + var setCreationDate = API.__private__.setCreationDate = function (date) { + var tmpCreationDateString; + var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/; + + if (typeof date === "undefined") { + date = new Date(); + } + + if (date instanceof Date) { + tmpCreationDateString = convertDateToPDFDate(date); + } else if (regexPDFCreationDate.test(date)) { + tmpCreationDateString = date; + } else { + throw new Error("Invalid argument passed to jsPDF.setCreationDate"); + } + + creationDate = tmpCreationDateString; + return creationDate; + }; + + var getCreationDate = API.__private__.getCreationDate = function (type) { + var result = creationDate; + + if (type === "jsDate") { + result = convertPDFDateToDate(creationDate); + } + + return result; + }; + /** + * @name setCreationDate + * @memberof jsPDF# + * @function + * @instance + * @param {Object} date + * @returns {jsPDF} + */ + + + API.setCreationDate = function (date) { + setCreationDate(date); + return this; + }; + /** + * @name getCreationDate + * @memberof jsPDF# + * @function + * @instance + * @param {Object} type + * @returns {Object} + */ + + + API.getCreationDate = function (type) { + return getCreationDate(type); + }; + + var padd2 = API.__private__.padd2 = function (number) { + return ("0" + parseInt(number)).slice(-2); + }; + + var padd2Hex = API.__private__.padd2Hex = function (hexString) { + hexString = hexString.toString(); + return ("00" + hexString).substr(hexString.length); + }; + + var objectNumber = 0; // 'n' Current object number + + var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes. + + var content = []; + var contentLength = 0; + var additionalObjects = []; + var pages = []; + var currentPage; + var hasCustomDestination = false; + var outputDestination = content; + + var resetDocument = function resetDocument() { + //reset fields relevant for objectNumber generation and xref. + objectNumber = 0; + contentLength = 0; + content = []; + offsets = []; + additionalObjects = []; + rootDictionaryObjId = newObjectDeferred(); + resourceDictionaryObjId = newObjectDeferred(); + }; + + API.__private__.setCustomOutputDestination = function (destination) { + hasCustomDestination = true; + outputDestination = destination; + }; + + var setOutputDestination = function setOutputDestination(destination) { + if (!hasCustomDestination) { + outputDestination = destination; + } + }; + + API.__private__.resetCustomOutputDestination = function () { + hasCustomDestination = false; + outputDestination = content; + }; + + var out = API.__private__.out = function (string) { + string = string.toString(); + contentLength += string.length + 1; + outputDestination.push(string); + return outputDestination; + }; + + var write = API.__private__.write = function (value) { + return out(arguments.length === 1 ? value.toString() : Array.prototype.join.call(arguments, " ")); + }; + + var getArrayBuffer = API.__private__.getArrayBuffer = function (data) { + var len = data.length, + ab = new ArrayBuffer(len), + u8 = new Uint8Array(ab); + + while (len--) { + u8[len] = data.charCodeAt(len); + } + + return ab; + }; + + var standardFonts = [["Helvetica", "helvetica", "normal", "WinAnsiEncoding"], ["Helvetica-Bold", "helvetica", "bold", "WinAnsiEncoding"], ["Helvetica-Oblique", "helvetica", "italic", "WinAnsiEncoding"], ["Helvetica-BoldOblique", "helvetica", "bolditalic", "WinAnsiEncoding"], ["Courier", "courier", "normal", "WinAnsiEncoding"], ["Courier-Bold", "courier", "bold", "WinAnsiEncoding"], ["Courier-Oblique", "courier", "italic", "WinAnsiEncoding"], ["Courier-BoldOblique", "courier", "bolditalic", "WinAnsiEncoding"], ["Times-Roman", "times", "normal", "WinAnsiEncoding"], ["Times-Bold", "times", "bold", "WinAnsiEncoding"], ["Times-Italic", "times", "italic", "WinAnsiEncoding"], ["Times-BoldItalic", "times", "bolditalic", "WinAnsiEncoding"], ["ZapfDingbats", "zapfdingbats", "normal", null], ["Symbol", "symbol", "normal", null]]; + + API.__private__.getStandardFonts = function () { + return standardFonts; + }; + + var activeFontSize = options.fontSize || 16; + /** + * Sets font size for upcoming text elements. + * + * @param {number} size Font size in points. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFontSize + */ + + API.__private__.setFontSize = API.setFontSize = function (size) { + if (apiMode === ApiMode.ADVANCED) { + activeFontSize = size / scaleFactor; + } else { + activeFontSize = size; + } + + return this; + }; + /** + * Gets the fontsize for upcoming text elements. + * + * @function + * @instance + * @returns {number} + * @memberof jsPDF# + * @name getFontSize + */ + + + var getFontSize = API.__private__.getFontSize = API.getFontSize = function () { + if (apiMode === ApiMode.COMPAT) { + return activeFontSize; + } else { + return activeFontSize * scaleFactor; + } + }; + + var R2L = options.R2L || false; + /** + * Set value of R2L functionality. + * + * @param {boolean} value + * @function + * @instance + * @returns {jsPDF} jsPDF-instance + * @memberof jsPDF# + * @name setR2L + */ + + API.__private__.setR2L = API.setR2L = function (value) { + R2L = value; + return this; + }; + /** + * Get value of R2L functionality. + * + * @function + * @instance + * @returns {boolean} jsPDF-instance + * @memberof jsPDF# + * @name getR2L + */ + + + API.__private__.getR2L = API.getR2L = function () { + return R2L; + }; + + var zoomMode; // default: 1; + + var setZoomMode = API.__private__.setZoomMode = function (zoom) { + var validZoomModes = [undefined, null, "fullwidth", "fullheight", "fullpage", "original"]; + + if (/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(zoom)) { + zoomMode = zoom; + } else if (!isNaN(zoom)) { + zoomMode = parseInt(zoom, 10); + } else if (validZoomModes.indexOf(zoom) !== -1) { + zoomMode = zoom; + } else { + throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "' + zoom + '" is not recognized.'); + } + }; + + API.__private__.getZoomMode = function () { + return zoomMode; + }; + + var pageMode; // default: 'UseOutlines'; + + var setPageMode = API.__private__.setPageMode = function (pmode) { + var validPageModes = [undefined, null, "UseNone", "UseOutlines", "UseThumbs", "FullScreen"]; + + if (validPageModes.indexOf(pmode) == -1) { + throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "' + pmode + '" is not recognized.'); + } + + pageMode = pmode; + }; + + API.__private__.getPageMode = function () { + return pageMode; + }; + + var layoutMode; // default: 'continuous'; + + var setLayoutMode = API.__private__.setLayoutMode = function (layout) { + var validLayoutModes = [undefined, null, "continuous", "single", "twoleft", "tworight", "two"]; + + if (validLayoutModes.indexOf(layout) == -1) { + throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "' + layout + '" is not recognized.'); + } + + layoutMode = layout; + }; + + API.__private__.getLayoutMode = function () { + return layoutMode; + }; + /** + * Set the display mode options of the page like zoom and layout. + * + * @name setDisplayMode + * @memberof jsPDF# + * @function + * @instance + * @param {integer|String} zoom You can pass an integer or percentage as + * a string. 2 will scale the document up 2x, '200%' will scale up by the + * same amount. You can also set it to 'fullwidth', 'fullheight', + * 'fullpage', or 'original'. + * + * Only certain PDF readers support this, such as Adobe Acrobat. + * + * @param {string} layout Layout mode can be: 'continuous' - this is the + * default continuous scroll. 'single' - the single page mode only shows one + * page at a time. 'twoleft' - two column left mode, first page starts on + * the left, and 'tworight' - pages are laid out in two columns, with the + * first page on the right. This would be used for books. + * @param {string} pmode 'UseOutlines' - it shows the + * outline of the document on the left. 'UseThumbs' - shows thumbnails along + * the left. 'FullScreen' - prompts the user to enter fullscreen mode. + * + * @returns {jsPDF} + */ + + + API.__private__.setDisplayMode = API.setDisplayMode = function (zoom, layout, pmode) { + setZoomMode(zoom); + setLayoutMode(layout); + setPageMode(pmode); + return this; + }; + + var documentProperties = { + title: "", + subject: "", + author: "", + keywords: "", + creator: "" + }; + + API.__private__.getDocumentProperty = function (key) { + if (Object.keys(documentProperties).indexOf(key) === -1) { + throw new Error("Invalid argument passed to jsPDF.getDocumentProperty"); + } + + return documentProperties[key]; + }; + + API.__private__.getDocumentProperties = function () { + return documentProperties; + }; + /** + * Adds a properties to the PDF document. + * + * @param {Object} A property_name-to-property_value object structure. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setDocumentProperties + */ + + + API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function (properties) { + // copying only those properties we can render. + for (var property in documentProperties) { + if (documentProperties.hasOwnProperty(property) && properties[property]) { + documentProperties[property] = properties[property]; + } + } + + return this; + }; + + API.__private__.setDocumentProperty = function (key, value) { + if (Object.keys(documentProperties).indexOf(key) === -1) { + throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty"); + } + + return documentProperties[key] = value; + }; + + var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font. + + var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont() + + var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle + + var fontStateStack = []; // + + var patterns = {}; // collection of pattern objects + + var patternMap = {}; // see fonts + + var gStates = {}; // collection of graphic state objects + + var gStatesMap = {}; // see fonts + + var activeGState = null; + var scaleFactor; // Scale factor + + var page = 0; + var pagesContext = []; + var events = new PubSub(API); + var hotfixes = options.hotfixes || []; + var renderTargets = {}; + var renderTargetMap = {}; + var renderTargetStack = []; + var pageX; + var pageY; + var pageMatrix; // only used for FormObjects + + /** + * A matrix object for 2D homogenous transformations:
    + * | a b 0 |
    + * | c d 0 |
    + * | e f 1 |
    + * pdf multiplies matrices righthand: v' = v x m1 x m2 x ... + * + * @class + * @name Matrix + * @param {number} sx + * @param {number} shy + * @param {number} shx + * @param {number} sy + * @param {number} tx + * @param {number} ty + * @constructor + */ + + var Matrix = function Matrix(sx, shy, shx, sy, tx, ty) { + if (!(this instanceof Matrix)) { + return new Matrix(sx, shy, shx, sy, tx, ty); + } + + if (isNaN(sx)) sx = 1; + if (isNaN(shy)) shy = 0; + if (isNaN(shx)) shx = 0; + if (isNaN(sy)) sy = 1; + if (isNaN(tx)) tx = 0; + if (isNaN(ty)) ty = 0; + this._matrix = [sx, shy, shx, sy, tx, ty]; + }; + /** + * @name sx + * @memberof Matrix# + */ + + + Object.defineProperty(Matrix.prototype, "sx", { + get: function get() { + return this._matrix[0]; + }, + set: function set(value) { + this._matrix[0] = value; + } + }); + /** + * @name shy + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "shy", { + get: function get() { + return this._matrix[1]; + }, + set: function set(value) { + this._matrix[1] = value; + } + }); + /** + * @name shx + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "shx", { + get: function get() { + return this._matrix[2]; + }, + set: function set(value) { + this._matrix[2] = value; + } + }); + /** + * @name sy + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "sy", { + get: function get() { + return this._matrix[3]; + }, + set: function set(value) { + this._matrix[3] = value; + } + }); + /** + * @name tx + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "tx", { + get: function get() { + return this._matrix[4]; + }, + set: function set(value) { + this._matrix[4] = value; + } + }); + /** + * @name ty + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "ty", { + get: function get() { + return this._matrix[5]; + }, + set: function set(value) { + this._matrix[5] = value; + } + }); + Object.defineProperty(Matrix.prototype, "a", { + get: function get() { + return this._matrix[0]; + }, + set: function set(value) { + this._matrix[0] = value; + } + }); + Object.defineProperty(Matrix.prototype, "b", { + get: function get() { + return this._matrix[1]; + }, + set: function set(value) { + this._matrix[1] = value; + } + }); + Object.defineProperty(Matrix.prototype, "c", { + get: function get() { + return this._matrix[2]; + }, + set: function set(value) { + this._matrix[2] = value; + } + }); + Object.defineProperty(Matrix.prototype, "d", { + get: function get() { + return this._matrix[3]; + }, + set: function set(value) { + this._matrix[3] = value; + } + }); + Object.defineProperty(Matrix.prototype, "e", { + get: function get() { + return this._matrix[4]; + }, + set: function set(value) { + this._matrix[4] = value; + } + }); + Object.defineProperty(Matrix.prototype, "f", { + get: function get() { + return this._matrix[5]; + }, + set: function set(value) { + this._matrix[5] = value; + } + }); + /** + * @name rotation + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "rotation", { + get: function get() { + return Math.atan2(this.shx, this.sx); + } + }); + /** + * @name scaleX + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "scaleX", { + get: function get() { + return this.decompose().scale.sx; + } + }); + /** + * @name scaleY + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "scaleY", { + get: function get() { + return this.decompose().scale.sy; + } + }); + /** + * @name isIdentity + * @memberof Matrix# + */ + + Object.defineProperty(Matrix.prototype, "isIdentity", { + get: function get() { + if (this.sx !== 1) { + return false; + } + + if (this.shy !== 0) { + return false; + } + + if (this.shx !== 0) { + return false; + } + + if (this.sy !== 1) { + return false; + } + + if (this.tx !== 0) { + return false; + } + + if (this.ty !== 0) { + return false; + } + + return true; + } + }); + /** + * Join the Matrix Values to a String + * + * @function join + * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (","). If separator is an empty string, all elements are joined without any characters in between them. + * @returns {string} A string with all array elements joined. + * @memberof Matrix# + */ + + Matrix.prototype.join = function (separator) { + return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty].map(hpf).join(separator); + }; + /** + * Multiply the matrix with given Matrix + * + * @function multiply + * @param matrix + * @returns {Matrix} + * @memberof Matrix# + */ + + + Matrix.prototype.multiply = function (matrix) { + var sx = matrix.sx * this.sx + matrix.shy * this.shx; + var shy = matrix.sx * this.shy + matrix.shy * this.sy; + var shx = matrix.shx * this.sx + matrix.sy * this.shx; + var sy = matrix.shx * this.shy + matrix.sy * this.sy; + var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx; + var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty; + return new Matrix(sx, shy, shx, sy, tx, ty); + }; + /** + * @function decompose + * @memberof Matrix# + */ + + + Matrix.prototype.decompose = function () { + var a = this.sx; + var b = this.shy; + var c = this.shx; + var d = this.sy; + var e = this.tx; + var f = this.ty; + var scaleX = Math.sqrt(a * a + b * b); + a /= scaleX; + b /= scaleX; + var shear = a * c + b * d; + c -= a * shear; + d -= b * shear; + var scaleY = Math.sqrt(c * c + d * d); + c /= scaleY; + d /= scaleY; + shear /= scaleY; + + if (a * d < b * c) { + a = -a; + b = -b; + shear = -shear; + scaleX = -scaleX; + } + + return { + scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0), + translate: new Matrix(1, 0, 0, 1, e, f), + rotate: new Matrix(a, b, -b, a, 0, 0), + skew: new Matrix(1, 0, shear, 1, 0, 0) + }; + }; + /** + * @function toString + * @memberof Matrix# + */ + + + Matrix.prototype.toString = function (parmPrecision) { + return this.join(" "); + }; + /** + * @function inversed + * @memberof Matrix# + */ + + + Matrix.prototype.inversed = function () { + var a = this.sx, + b = this.shy, + c = this.shx, + d = this.sy, + e = this.tx, + f = this.ty; + var quot = 1 / (a * d - b * c); + var aInv = d * quot; + var bInv = -b * quot; + var cInv = -c * quot; + var dInv = a * quot; + var eInv = -aInv * e - cInv * f; + var fInv = -bInv * e - dInv * f; + return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv); + }; + /** + * @function applyToPoint + * @memberof Matrix# + */ + + + Matrix.prototype.applyToPoint = function (pt) { + var x = pt.x * this.sx + pt.y * this.shx + this.tx; + var y = pt.x * this.shy + pt.y * this.sy + this.ty; + return new Point(x, y); + }; + /** + * @function applyToRectangle + * @memberof Matrix# + */ + + + Matrix.prototype.applyToRectangle = function (rect) { + var pt1 = this.applyToPoint(rect); + var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h)); + return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y); + }; + /** + * Clone the Matrix + * + * @function clone + * @memberof Matrix# + * @name clone + * @instance + */ + + + Matrix.prototype.clone = function () { + var sx = this.sx; + var shy = this.shy; + var shx = this.shx; + var sy = this.sy; + var tx = this.tx; + var ty = this.ty; + return new Matrix(sx, shy, shx, sy, tx, ty); + }; + + API.Matrix = Matrix; + /** + * Multiplies two matrices. (see {@link Matrix}) + * @param {Matrix} m1 + * @param {Matrix} m2 + * @memberof jsPDF# + * @name matrixMult + */ + + var matrixMult = API.matrixMult = function (m1, m2) { + return m2.multiply(m1); + }; + /** + * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)). + * @type {Matrix} + * @memberof! jsPDF# + * @name identityMatrix + */ + + + var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0); + API.unitMatrix = API.identityMatrix = identityMatrix; + /** + * Adds a new pattern for later use. + * @param {String} key The key by it can be referenced later. The keys must be unique! + * @param {API.Pattern} pattern The pattern + */ + + var addPattern = function addPattern(key, pattern) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (patternMap[key]) return; + var prefix = pattern instanceof ShadingPattern ? "Sh" : "P"; + var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10); + pattern.id = patternKey; + patternMap[key] = patternKey; + patterns[patternKey] = pattern; + events.publish("addPattern", pattern); + }; + /** + * A pattern describing a shading pattern. + * + * Only available in "advanced" API mode. + * + * @param {String} type One of "axial" or "radial" + * @param {Array} coords Either [x1, y1, x2, y2] for "axial" type describing the two interpolation points + * or [x1, y1, r, x2, y2, r2] for "radial" describing inner and the outer circle. + * @param {Array} colors An array of objects with the fields "offset" and "color". "offset" describes + * the offset in parameter space [0, 1]. "color" is an array of length 3 describing RGB values in [0, 255]. + * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional). + * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system + * and the use coordinate system (optional). + * @constructor + * @extends API.Pattern + */ + + + API.ShadingPattern = ShadingPattern; + /** + * A PDF Tiling pattern. + * + * Only available in "advanced" API mode. + * + * @param {Array.} boundingBox The bounding box at which one pattern cell gets clipped. + * @param {Number} xStep Horizontal spacing between pattern cells. + * @param {Number} yStep Vertical spacing between pattern cells. + * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional). + * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system + * and the use coordinate system (optional). + * @constructor + * @extends API.Pattern + */ + + API.TilingPattern = TilingPattern; + /** + * Adds a new {@link API.ShadingPattern} for later use. Only available in "advanced" API mode. + * @param {String} key + * @param {Pattern} pattern + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name addPattern + */ + + API.addShadingPattern = function (key, pattern) { + advancedApiModeTrap("addShadingPattern()"); + addPattern(key, pattern); + return this; + }; + /** + * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern} + * gets called. Only available in "advanced" API mode. + * @param {API.Pattern} pattern + * @memberof jsPDF# + * @name beginTilingPattern + */ + + + API.beginTilingPattern = function (pattern) { + advancedApiModeTrap("beginTilingPattern()"); + beginNewRenderTarget(pattern.boundingBox[0], pattern.boundingBox[1], pattern.boundingBox[2] - pattern.boundingBox[0], pattern.boundingBox[3] - pattern.boundingBox[1], pattern.matrix); + }; + /** + * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called. + * + * Only available in "advanced" API mode. + * + * @param {string} key A unique key that is used to reference this pattern at later use. + * @param {API.Pattern} pattern The pattern to end. + * @memberof jsPDF# + * @name endTilingPattern + */ + + + API.endTilingPattern = function (key, pattern) { + advancedApiModeTrap("endTilingPattern()"); // retrieve the stream + + pattern.stream = pages[currentPage].join("\n"); + addPattern(key, pattern); + events.publish("endTilingPattern", pattern); // restore state from stack + + renderTargetStack.pop().restore(); + }; + + var newObject = API.__private__.newObject = function () { + var oid = newObjectDeferred(); + newObjectDeferredBegin(oid, true); + return oid; + }; // Does not output the object. The caller must call newObjectDeferredBegin(oid) before outputing any data + + + var newObjectDeferred = API.__private__.newObjectDeferred = function () { + objectNumber++; + + offsets[objectNumber] = function () { + return contentLength; + }; + + return objectNumber; + }; + + var newObjectDeferredBegin = function newObjectDeferredBegin(oid, doOutput) { + doOutput = typeof doOutput === "boolean" ? doOutput : false; + offsets[oid] = contentLength; + + if (doOutput) { + out(oid + " 0 obj"); + } + + return oid; + }; // Does not output the object until after the pages have been output. + // Returns an object containing the objectId and content. + // All pages have been added so the object ID can be estimated to start right after. + // This does not modify the current objectNumber; It must be updated after the newObjects are output. + + + var newAdditionalObject = API.__private__.newAdditionalObject = function () { + var objId = newObjectDeferred(); + var obj = { + objId: objId, + content: "" + }; + additionalObjects.push(obj); + return obj; + }; + + var rootDictionaryObjId = newObjectDeferred(); + var resourceDictionaryObjId = newObjectDeferred(); ///////////////////// + // Private functions + ///////////////////// + + var decodeColorString = API.__private__.decodeColorString = function (color) { + var colorEncoded = color.split(" "); + + if (colorEncoded.length === 2 && (colorEncoded[1] === "g" || colorEncoded[1] === "G")) { + // convert grayscale value to rgb so that it can be converted to hex for consistency + var floatVal = parseFloat(colorEncoded[0]); + colorEncoded = [floatVal, floatVal, floatVal, "r"]; + } else if (colorEncoded.length === 5 && (colorEncoded[4] === "k" || colorEncoded[4] === "K")) { + // convert CMYK values to rbg so that it can be converted to hex for consistency + var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]); + var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]); + var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]); + colorEncoded = [red, green, blue, "r"]; + } + + var colorAsRGB = "#"; + + for (var i = 0; i < 3; i++) { + colorAsRGB += ("0" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16)).slice(-2); + } + + return colorAsRGB; + }; + + var encodeColorString = API.__private__.encodeColorString = function (options) { + var color; + + if (typeof options === "string") { + options = { + ch1: options + }; + } + + var ch1 = options.ch1; + var ch2 = options.ch2; + var ch3 = options.ch3; + var ch4 = options.ch4; + var letterArray = options.pdfColorType === "draw" ? ["G", "RG", "K"] : ["g", "rg", "k"]; + + if (typeof ch1 === "string" && ch1.charAt(0) !== "#") { + var rgbColor = new RGBColor(ch1); + + if (rgbColor.ok) { + ch1 = rgbColor.toHex(); + } else if (!/^\d*\.?\d*$/.test(ch1)) { + throw new Error('Invalid color "' + ch1 + '" passed to jsPDF.encodeColorString.'); + } + } //convert short rgb to long form + + + if (typeof ch1 === "string" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) { + ch1 = "#" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3]; + } + + if (typeof ch1 === "string" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) { + var hex = parseInt(ch1.substr(1), 16); + ch1 = hex >> 16 & 255; + ch2 = hex >> 8 & 255; + ch3 = hex & 255; + } + + if (typeof ch2 === "undefined" || typeof ch4 === "undefined" && ch1 === ch2 && ch2 === ch3) { + // Gray color space. + if (typeof ch1 === "string") { + color = ch1 + " " + letterArray[0]; + } else { + switch (options.precision) { + case 2: + color = f2(ch1 / 255) + " " + letterArray[0]; + break; + + case 3: + default: + color = f3(ch1 / 255) + " " + letterArray[0]; + } + } + } else if (typeof ch4 === "undefined" || _typeof(ch4) === "object") { + // assume RGBA + if (ch4 && !isNaN(ch4.a)) { + //TODO Implement transparency. + //WORKAROUND use white for now, if transparent, otherwise handle as rgb + if (ch4.a === 0) { + color = ["1.", "1.", "1.", letterArray[1]].join(" "); + return color; + } + } // assume RGB + + + if (typeof ch1 === "string") { + color = [ch1, ch2, ch3, letterArray[1]].join(" "); + } else { + switch (options.precision) { + case 2: + color = [f2(ch1 / 255), f2(ch2 / 255), f2(ch3 / 255), letterArray[1]].join(" "); + break; + + default: + case 3: + color = [f3(ch1 / 255), f3(ch2 / 255), f3(ch3 / 255), letterArray[1]].join(" "); + } + } + } else { + // assume CMYK + if (typeof ch1 === "string") { + color = [ch1, ch2, ch3, ch4, letterArray[2]].join(" "); + } else { + switch (options.precision) { + case 2: + color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(" "); + break; + + case 3: + default: + color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(" "); + } + } + } + + return color; + }; + + var getFilters = API.__private__.getFilters = function () { + return filters; + }; + + var putStream = API.__private__.putStream = function (options) { + options = options || {}; + var data = options.data || ""; + var filters = options.filters || getFilters(); + var alreadyAppliedFilters = options.alreadyAppliedFilters || []; + var addLength1 = options.addLength1 || false; + var valueOfLength1 = data.length; + var objectId = options.objectId; + + var encryptor = function encryptor(data) { + return data; + }; + + if (encryptionOptions !== null && typeof objectId == "undefined") { + throw new Error("ObjectId must be passed to putStream for file encryption"); + } + + if (encryptionOptions !== null) { + encryptor = encryption.encryptor(objectId, 0); + } + + var processedData = {}; + + if (filters === true) { + filters = ["FlateEncode"]; + } + + var keyValues = options.additionalKeyValues || []; + + if (typeof jsPDF.API.processDataByFilters !== "undefined") { + processedData = jsPDF.API.processDataByFilters(data, filters); + } else { + processedData = { + data: data, + reverseChain: [] + }; + } + + var filterAsString = processedData.reverseChain + (Array.isArray(alreadyAppliedFilters) ? alreadyAppliedFilters.join(" ") : alreadyAppliedFilters.toString()); + + if (processedData.data.length !== 0) { + keyValues.push({ + key: "Length", + value: processedData.data.length + }); + + if (addLength1 === true) { + keyValues.push({ + key: "Length1", + value: valueOfLength1 + }); + } + } + + if (filterAsString.length != 0) { + if (filterAsString.split("/").length - 1 === 1) { + keyValues.push({ + key: "Filter", + value: filterAsString + }); + } else { + keyValues.push({ + key: "Filter", + value: "[" + filterAsString + "]" + }); + + for (var j = 0; j < keyValues.length; j += 1) { + if (keyValues[j].key === "DecodeParms") { + var decodeParmsArray = []; + + for (var i = 0; i < processedData.reverseChain.split("/").length - 1; i += 1) { + decodeParmsArray.push("null"); + } + + decodeParmsArray.push(keyValues[j].value); + keyValues[j].value = "[" + decodeParmsArray.join(" ") + "]"; + } + } + } + } + + out("<<"); + + for (var k = 0; k < keyValues.length; k++) { + out("/" + keyValues[k].key + " " + keyValues[k].value); + } + + out(">>"); + + if (processedData.data.length !== 0) { + out("stream"); + out(encryptor(processedData.data)); + out("endstream"); + } + }; + + var putPage = API.__private__.putPage = function (page) { + var pageNumber = page.number; + var data = page.data; + var pageObjectNumber = page.objId; + var pageContentsObjId = page.contentsObjId; + newObjectDeferredBegin(pageObjectNumber, true); + out("<>"); + out("endobj"); // Page content + + var pageContent = data.join("\n"); + + if (apiMode === ApiMode.ADVANCED) { + // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again + pageContent += "\nQ"; + } + + newObjectDeferredBegin(pageContentsObjId, true); + putStream({ + data: pageContent, + filters: getFilters(), + objectId: pageContentsObjId + }); + out("endobj"); + return pageObjectNumber; + }; + + var putPages = API.__private__.putPages = function () { + var n, + i, + pageObjectNumbers = []; + + for (n = 1; n <= page; n++) { + pagesContext[n].objId = newObjectDeferred(); + pagesContext[n].contentsObjId = newObjectDeferred(); + } + + for (n = 1; n <= page; n++) { + pageObjectNumbers.push(putPage({ + number: n, + data: pages[n], + objId: pagesContext[n].objId, + contentsObjId: pagesContext[n].contentsObjId, + mediaBox: pagesContext[n].mediaBox, + cropBox: pagesContext[n].cropBox, + bleedBox: pagesContext[n].bleedBox, + trimBox: pagesContext[n].trimBox, + artBox: pagesContext[n].artBox, + userUnit: pagesContext[n].userUnit, + rootDictionaryObjId: rootDictionaryObjId, + resourceDictionaryObjId: resourceDictionaryObjId + })); + } + + newObjectDeferredBegin(rootDictionaryObjId, true); + out("<>"); + out("endobj"); + events.publish("postPutPages"); + }; + + var putFont = function putFont(font) { + events.publish("putFont", { + font: font, + out: out, + newObject: newObject, + putStream: putStream + }); + + if (font.isAlreadyPutted !== true) { + font.objectNumber = newObject(); + out("<<"); + out("/Type /Font"); + out("/BaseFont /" + toPDFName(font.postScriptName)); + out("/Subtype /Type1"); + + if (typeof font.encoding === "string") { + out("/Encoding /" + font.encoding); + } + + out("/FirstChar 32"); + out("/LastChar 255"); + out(">>"); + out("endobj"); + } + }; + + var putFonts = function putFonts() { + for (var fontKey in fonts) { + if (fonts.hasOwnProperty(fontKey)) { + if (putOnlyUsedFonts === false || putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey)) { + putFont(fonts[fontKey]); + } + } + } + }; + + var putXObject = function putXObject(xObject) { + xObject.objectNumber = newObject(); + var options = []; + options.push({ + key: "Type", + value: "/XObject" + }); + options.push({ + key: "Subtype", + value: "/Form" + }); + options.push({ + key: "BBox", + value: "[" + [hpf(xObject.x), hpf(xObject.y), hpf(xObject.x + xObject.width), hpf(xObject.y + xObject.height)].join(" ") + "]" + }); + options.push({ + key: "Matrix", + value: "[" + xObject.matrix.toString() + "]" + }); // TODO: /Resources + + var stream = xObject.pages[1].join("\n"); + putStream({ + data: stream, + additionalKeyValues: options, + objectId: xObject.objectNumber + }); + out("endobj"); + }; + + var putXObjects = function putXObjects() { + for (var xObjectKey in renderTargets) { + if (renderTargets.hasOwnProperty(xObjectKey)) { + putXObject(renderTargets[xObjectKey]); + } + } + }; + + var interpolateAndEncodeRGBStream = function interpolateAndEncodeRGBStream(colors, numberSamples) { + var tValues = []; + var t; + var dT = 1.0 / (numberSamples - 1); + + for (t = 0.0; t < 1.0; t += dT) { + tValues.push(t); + } + + tValues.push(1.0); // add first and last control point if not present + + if (colors[0].offset != 0.0) { + var c0 = { + offset: 0.0, + color: colors[0].color + }; + colors.unshift(c0); + } + + if (colors[colors.length - 1].offset != 1.0) { + var c1 = { + offset: 1.0, + color: colors[colors.length - 1].color + }; + colors.push(c1); + } + + var out = ""; + var index = 0; + + for (var i = 0; i < tValues.length; i++) { + t = tValues[i]; + + while (t > colors[index + 1].offset) { + index++; + } + + var a = colors[index].offset; + var b = colors[index + 1].offset; + var d = (t - a) / (b - a); + var aColor = colors[index].color; + var bColor = colors[index + 1].color; + out += padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) + padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) + padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16)); + } + + return out.trim(); + }; + + var putShadingPattern = function putShadingPattern(pattern, numberSamples) { + /* + Axial patterns shade between the two points specified in coords, radial patterns between the inner + and outer circle. + The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now + interpolated to equidistant samples and written to pdf as a sample (type 0) function. + */ + // The number of color samples that should be used to describe the shading. + // The higher, the more accurate the gradient will be. + numberSamples || (numberSamples = 21); + var funcObjectNumber = newObject(); + var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples); + var options = []; + options.push({ + key: "FunctionType", + value: "0" + }); + options.push({ + key: "Domain", + value: "[0.0 1.0]" + }); + options.push({ + key: "Size", + value: "[" + numberSamples + "]" + }); + options.push({ + key: "BitsPerSample", + value: "8" + }); + options.push({ + key: "Range", + value: "[0.0 1.0 0.0 1.0 0.0 1.0]" + }); + options.push({ + key: "Decode", + value: "[0.0 1.0 0.0 1.0 0.0 1.0]" + }); + putStream({ + data: stream, + additionalKeyValues: options, + alreadyAppliedFilters: ["/ASCIIHexDecode"], + objectId: funcObjectNumber + }); + out("endobj"); + pattern.objectNumber = newObject(); + out("<< /ShadingType " + pattern.type); + out("/ColorSpace /DeviceRGB"); + var coords = "/Coords [" + hpf(parseFloat(pattern.coords[0])) + " " + // x1 + hpf(parseFloat(pattern.coords[1])) + " "; // y1 + + if (pattern.type === 2) { + // axial + coords += hpf(parseFloat(pattern.coords[2])) + " " + // x2 + hpf(parseFloat(pattern.coords[3])); // y2 + } else { + // radial + coords += hpf(parseFloat(pattern.coords[2])) + " " + // r1 + hpf(parseFloat(pattern.coords[3])) + " " + // x2 + hpf(parseFloat(pattern.coords[4])) + " " + // y2 + hpf(parseFloat(pattern.coords[5])); // r2 + } + + coords += "]"; + out(coords); + + if (pattern.matrix) { + out("/Matrix [" + pattern.matrix.toString() + "]"); + } + + out("/Function " + funcObjectNumber + " 0 R"); + out("/Extend [true true]"); + out(">>"); + out("endobj"); + }; + + var putTilingPattern = function putTilingPattern(pattern, deferredResourceDictionaryIds) { + var resourcesObjectId = newObjectDeferred(); + var patternObjectId = newObject(); + deferredResourceDictionaryIds.push({ + resourcesOid: resourcesObjectId, + objectOid: patternObjectId + }); + pattern.objectNumber = patternObjectId; + var options = []; + options.push({ + key: "Type", + value: "/Pattern" + }); + options.push({ + key: "PatternType", + value: "1" + }); // tiling pattern + + options.push({ + key: "PaintType", + value: "1" + }); // colored tiling pattern + + options.push({ + key: "TilingType", + value: "1" + }); // constant spacing + + options.push({ + key: "BBox", + value: "[" + pattern.boundingBox.map(hpf).join(" ") + "]" + }); + options.push({ + key: "XStep", + value: hpf(pattern.xStep) + }); + options.push({ + key: "YStep", + value: hpf(pattern.yStep) + }); + options.push({ + key: "Resources", + value: resourcesObjectId + " 0 R" + }); + + if (pattern.matrix) { + options.push({ + key: "Matrix", + value: "[" + pattern.matrix.toString() + "]" + }); + } + + putStream({ + data: pattern.stream, + additionalKeyValues: options, + objectId: pattern.objectNumber + }); + out("endobj"); + }; + + var putPatterns = function putPatterns(deferredResourceDictionaryIds) { + var patternKey; + + for (patternKey in patterns) { + if (patterns.hasOwnProperty(patternKey)) { + if (patterns[patternKey] instanceof ShadingPattern) { + putShadingPattern(patterns[patternKey]); + } else if (patterns[patternKey] instanceof TilingPattern) { + putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds); + } + } + } + }; + + var putGState = function putGState(gState) { + gState.objectNumber = newObject(); + out("<<"); + + for (var p in gState) { + switch (p) { + case "opacity": + out("/ca " + f2(gState[p])); + break; + + case "stroke-opacity": + out("/CA " + f2(gState[p])); + break; + } + } + + out(">>"); + out("endobj"); + }; + + var putGStates = function putGStates() { + var gStateKey; + + for (gStateKey in gStates) { + if (gStates.hasOwnProperty(gStateKey)) { + putGState(gStates[gStateKey]); + } + } + }; + + var putXobjectDict = function putXobjectDict() { + out("/XObject <<"); + + for (var xObjectKey in renderTargets) { + if (renderTargets.hasOwnProperty(xObjectKey) && renderTargets[xObjectKey].objectNumber >= 0) { + out("/" + xObjectKey + " " + renderTargets[xObjectKey].objectNumber + " 0 R"); + } + } // Loop through images, or other data objects + + + events.publish("putXobjectDict"); + out(">>"); + }; + + var putEncryptionDict = function putEncryptionDict() { + encryption.oid = newObject(); + out("<<"); + out("/Filter /Standard"); + out("/V " + encryption.v); + out("/R " + encryption.r); + out("/U <" + encryption.toHexString(encryption.U) + ">"); + out("/O <" + encryption.toHexString(encryption.O) + ">"); + out("/P " + encryption.P); + out(">>"); + out("endobj"); + }; + + var putFontDict = function putFontDict() { + out("/Font <<"); + + for (var fontKey in fonts) { + if (fonts.hasOwnProperty(fontKey)) { + if (putOnlyUsedFonts === false || putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey)) { + out("/" + fontKey + " " + fonts[fontKey].objectNumber + " 0 R"); + } + } + } + + out(">>"); + }; + + var putShadingPatternDict = function putShadingPatternDict() { + if (Object.keys(patterns).length > 0) { + out("/Shading <<"); + + for (var patternKey in patterns) { + if (patterns.hasOwnProperty(patternKey) && patterns[patternKey] instanceof ShadingPattern && patterns[patternKey].objectNumber >= 0) { + out("/" + patternKey + " " + patterns[patternKey].objectNumber + " 0 R"); + } + } + + events.publish("putShadingPatternDict"); + out(">>"); + } + }; + + var putTilingPatternDict = function putTilingPatternDict(objectOid) { + if (Object.keys(patterns).length > 0) { + out("/Pattern <<"); + + for (var patternKey in patterns) { + if (patterns.hasOwnProperty(patternKey) && patterns[patternKey] instanceof API.TilingPattern && patterns[patternKey].objectNumber >= 0 && patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies + ) { + out("/" + patternKey + " " + patterns[patternKey].objectNumber + " 0 R"); + } + } + + events.publish("putTilingPatternDict"); + out(">>"); + } + }; + + var putGStatesDict = function putGStatesDict() { + if (Object.keys(gStates).length > 0) { + var gStateKey; + out("/ExtGState <<"); + + for (gStateKey in gStates) { + if (gStates.hasOwnProperty(gStateKey) && gStates[gStateKey].objectNumber >= 0) { + out("/" + gStateKey + " " + gStates[gStateKey].objectNumber + " 0 R"); + } + } + + events.publish("putGStateDict"); + out(">>"); + } + }; + + var putResourceDictionary = function putResourceDictionary(objectIds) { + newObjectDeferredBegin(objectIds.resourcesOid, true); + out("<<"); + out("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"); + putFontDict(); + putShadingPatternDict(); + putTilingPatternDict(objectIds.objectOid); + putGStatesDict(); + putXobjectDict(); + out(">>"); + out("endobj"); + }; + + var putResources = function putResources() { + // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images + // which means their resource dictionaries must contain the already resolved + // object ids. For this reason we defer the serialization of the resource + // dicts until all objects have been serialized and have object ids. + // + // In order to prevent cyclic dependencies (which Adobe Reader doesn't like), + // we only put all oids that are smaller than the oid of the object the + // resource dict belongs to. This is correct behavior, since the streams + // may only use other objects that have already been defined and thus appear + // earlier in their respective collection. + // Currently, this only affects tiling patterns, but a (more) correct + // implementation of FormObjects would also define their own resource dicts. + var deferredResourceDictionaryIds = []; + putFonts(); + putGStates(); + putXObjects(); + putPatterns(deferredResourceDictionaryIds); + events.publish("putResources"); + deferredResourceDictionaryIds.forEach(putResourceDictionary); + putResourceDictionary({ + resourcesOid: resourceDictionaryObjId, + objectOid: Number.MAX_SAFE_INTEGER // output all objects + + }); + events.publish("postPutResources"); + }; + + var putAdditionalObjects = function putAdditionalObjects() { + events.publish("putAdditionalObjects"); + + for (var i = 0; i < additionalObjects.length; i++) { + var obj = additionalObjects[i]; + newObjectDeferredBegin(obj.objId, true); + out(obj.content); + out("endobj"); + } + + events.publish("postPutAdditionalObjects"); + }; + + var addFontToFontDictionary = function addFontToFontDictionary(font) { + fontmap[font.fontName] = fontmap[font.fontName] || {}; + fontmap[font.fontName][font.fontStyle] = font.id; + }; + + var addFont = function addFont(postScriptName, fontName, fontStyle, encoding, isStandardFont) { + var font = { + id: "F" + (Object.keys(fonts).length + 1).toString(10), + postScriptName: postScriptName, + fontName: fontName, + fontStyle: fontStyle, + encoding: encoding, + isStandardFont: isStandardFont || false, + metadata: {} + }; + events.publish("addFont", { + font: font, + instance: this + }); + fonts[font.id] = font; + addFontToFontDictionary(font); + return font.id; + }; + + var addFonts = function addFonts(arrayOfFonts) { + for (var i = 0, l = standardFonts.length; i < l; i++) { + var fontKey = addFont.call(this, arrayOfFonts[i][0], arrayOfFonts[i][1], arrayOfFonts[i][2], standardFonts[i][3], true); + + if (putOnlyUsedFonts === false) { + usedFonts[fontKey] = true; + } // adding aliases for standard fonts, this time matching the capitalization + + + var parts = arrayOfFonts[i][0].split("-"); + addFontToFontDictionary({ + id: fontKey, + fontName: parts[0], + fontStyle: parts[1] || "" + }); + } + + events.publish("addFonts", { + fonts: fonts, + dictionary: fontmap + }); + }; + + var SAFE = function __safeCall(fn) { + fn.foo = function __safeCallWrapper() { + try { + return fn.apply(this, arguments); + } catch (e) { + var stack = e.stack || ""; + if (~stack.indexOf(" at ")) stack = stack.split(" at ")[1]; + var m = "Error in function " + stack.split("\n")[0].split("<")[0] + ": " + e.message; + + if (globalObject.console) { + globalObject.console.error(m, e); + if (globalObject.alert) alert(m); + } else { + throw new Error(m); + } + } + }; + + fn.foo.bar = fn; + return fn.foo; + }; + + var to8bitStream = function to8bitStream(text, flags) { + /** + * PDF 1.3 spec: + * "For text strings encoded in Unicode, the first two bytes must be 254 followed by + * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts + * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely + * to be a meaningful beginning of a word or phrase.) The remainder of the + * string consists of Unicode character codes, according to the UTF-16 encoding + * specified in the Unicode standard, version 2.0. Commonly used Unicode values + * are represented as 2 bytes per character, with the high-order byte appearing first + * in the string." + * + * In other words, if there are chars in a string with char code above 255, we + * recode the string to UCS2 BE - string doubles in length and BOM is prepended. + * + * HOWEVER! + * Actual *content* (body) text (as opposed to strings used in document properties etc) + * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID) + * + * Because of Adobe's focus on "you subset your fonts!" you are not supposed to have + * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could + * fudge it with "Identity-H" encoding and custom CIDtoGID map that mimics Unicode + * code page. There, however, all characters in the stream are treated as GIDs, + * including BOM, which is the reason we need to skip BOM in content text (i.e. that + * that is tied to a font). + * + * To signal this "special" PDFEscape / to8bitStream handling mode, + * API.text() function sets (unless you overwrite it with manual values + * given to API.text(.., flags) ) + * flags.autoencode = true + * flags.noBOM = true + * + * =================================================================================== + * `flags` properties relied upon: + * .sourceEncoding = string with encoding label. + * "Unicode" by default. = encoding of the incoming text. + * pass some non-existing encoding name + * (ex: 'Do not touch my strings! I know what I am doing.') + * to make encoding code skip the encoding step. + * .outputEncoding = Either valid PDF encoding name + * (must be supported by jsPDF font metrics, otherwise no encoding) + * or a JS object, where key = sourceCharCode, value = outputCharCode + * missing keys will be treated as: sourceCharCode === outputCharCode + * .noBOM + * See comment higher above for explanation for why this is important + * .autoencode + * See comment higher above for explanation for why this is important + */ + var i, l, sourceEncoding, encodingBlock, outputEncoding, newtext, isUnicode, ch, bch; + flags = flags || {}; + sourceEncoding = flags.sourceEncoding || "Unicode"; + outputEncoding = flags.outputEncoding; // This 'encoding' section relies on font metrics format + // attached to font objects by, among others, + // "Willow Systems' standard_font_metrics plugin" + // see jspdf.plugin.standard_font_metrics.js for format + // of the font.metadata.encoding Object. + // It should be something like + // .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}} + // .widths = {0:width, code:width, ..., 'fof':divisor} + // .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...} + + if ((flags.autoencode || outputEncoding) && fonts[activeFontKey].metadata && fonts[activeFontKey].metadata[sourceEncoding] && fonts[activeFontKey].metadata[sourceEncoding].encoding) { + encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding; // each font has default encoding. Some have it clearly defined. + + if (!outputEncoding && fonts[activeFontKey].encoding) { + outputEncoding = fonts[activeFontKey].encoding; + } // Hmmm, the above did not work? Let's try again, in different place. + + + if (!outputEncoding && encodingBlock.codePages) { + outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default + } + + if (typeof outputEncoding === "string") { + outputEncoding = encodingBlock[outputEncoding]; + } // we want output encoding to be a JS Object, where + // key = sourceEncoding's character code and + // value = outputEncoding's character code. + + + if (outputEncoding) { + isUnicode = false; + newtext = []; + + for (i = 0, l = text.length; i < l; i++) { + ch = outputEncoding[text.charCodeAt(i)]; + + if (ch) { + newtext.push(String.fromCharCode(ch)); + } else { + newtext.push(text[i]); + } // since we are looping over chars anyway, might as well + // check for residual unicodeness + + + if (newtext[i].charCodeAt(0) >> 8) { + /* more than 255 */ + isUnicode = true; + } + } + + text = newtext.join(""); + } + } + + i = text.length; // isUnicode may be set to false above. Hence the triple-equal to undefined + + while (isUnicode === undefined && i !== 0) { + if (text.charCodeAt(i - 1) >> 8) { + /* more than 255 */ + isUnicode = true; + } + + i--; + } + + if (!isUnicode) { + return text; + } + + newtext = flags.noBOM ? [] : [254, 255]; + + for (i = 0, l = text.length; i < l; i++) { + ch = text.charCodeAt(i); + bch = ch >> 8; // divide by 256 + + if (bch >> 8) { + /* something left after dividing by 256 second time */ + throw new Error("Character at position " + i + " of string '" + text + "' exceeds 16bits. Cannot be encoded into UCS-2 BE"); + } + + newtext.push(bch); + newtext.push(ch - (bch << 8)); + } + + return String.fromCharCode.apply(undefined, newtext); + }; + + var pdfEscape = API.__private__.pdfEscape = API.pdfEscape = function (text, flags) { + /** + * Replace '/', '(', and ')' with pdf-safe versions + * + * Doing to8bitStream does NOT make this PDF display unicode text. For that + * we also need to reference a unicode font and embed it - royal pain in the rear. + * + * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars, + * which JavaScript Strings are happy to provide. So, while we still cannot display + * 2-byte characters property, at least CONDITIONALLY converting (entire string containing) + * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF + * is still parseable. + * This will allow immediate support for unicode in document properties strings. + */ + return to8bitStream(text, flags).replace(/\\/g, "\\\\").replace(/\(/g, "\\(").replace(/\)/g, "\\)"); + }; + + var beginPage = API.__private__.beginPage = function (format) { + pages[++page] = []; + pagesContext[page] = { + objId: 0, + contentsObjId: 0, + userUnit: Number(userUnit), + artBox: null, + bleedBox: null, + cropBox: null, + trimBox: null, + mediaBox: { + bottomLeftX: 0, + bottomLeftY: 0, + topRightX: Number(format[0]), + topRightY: Number(format[1]) + } + }; + + _setPage(page); + + setOutputDestination(pages[currentPage]); + }; + + var _addPage = function _addPage(parmFormat, parmOrientation) { + var dimensions, width, height; + orientation = parmOrientation || orientation; + + if (typeof parmFormat === "string") { + dimensions = getPageFormat(parmFormat.toLowerCase()); + + if (Array.isArray(dimensions)) { + width = dimensions[0]; + height = dimensions[1]; + } + } + + if (Array.isArray(parmFormat)) { + width = parmFormat[0] * scaleFactor; + height = parmFormat[1] * scaleFactor; + } + + if (isNaN(width)) { + width = format[0]; + height = format[1]; + } + + if (width > 14400 || height > 14400) { + console.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"); + width = Math.min(14400, width); + height = Math.min(14400, height); + } + + format = [width, height]; + + switch (orientation.substr(0, 1)) { + case "l": + if (height > width) { + format = [height, width]; + } + + break; + + case "p": + if (width > height) { + format = [height, width]; + } + + break; + } + + beginPage(format); // Set line width + + setLineWidth(lineWidth); // Set draw color + + out(strokeColor); // resurrecting non-default line caps, joins + + if (lineCapID !== 0) { + out(lineCapID + " J"); + } + + if (lineJoinID !== 0) { + out(lineJoinID + " j"); + } + + events.publish("addPage", { + pageNumber: page + }); + }; + + var _deletePage = function _deletePage(n) { + if (n > 0 && n <= page) { + pages.splice(n, 1); + pagesContext.splice(n, 1); + page--; + + if (currentPage > page) { + currentPage = page; + } + + this.setPage(currentPage); + } + }; + + var _setPage = function _setPage(n) { + if (n > 0 && n <= page) { + currentPage = n; + } + }; + + var getNumberOfPages = API.__private__.getNumberOfPages = API.getNumberOfPages = function () { + return pages.length - 1; + }; + /** + * Returns a document-specific font key - a label assigned to a + * font name + font type combination at the time the font was added + * to the font inventory. + * + * Font key is used as label for the desired font for a block of text + * to be added to the PDF document stream. + * @private + * @function + * @param fontName {string} can be undefined on "falthy" to indicate "use current" + * @param fontStyle {string} can be undefined on "falthy" to indicate "use current" + * @returns {string} Font key. + * @ignore + */ + + + var getFont = function getFont(fontName, fontStyle, options) { + var key = undefined, + fontNameLowerCase; + options = options || {}; + fontName = fontName !== undefined ? fontName : fonts[activeFontKey].fontName; + fontStyle = fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle; + fontNameLowerCase = fontName.toLowerCase(); + + if (fontmap[fontNameLowerCase] !== undefined && fontmap[fontNameLowerCase][fontStyle] !== undefined) { + key = fontmap[fontNameLowerCase][fontStyle]; + } else if (fontmap[fontName] !== undefined && fontmap[fontName][fontStyle] !== undefined) { + key = fontmap[fontName][fontStyle]; + } else { + if (options.disableWarning === false) { + console.warn("Unable to look up font label for font '" + fontName + "', '" + fontStyle + "'. Refer to getFontList() for available fonts."); + } + } + + if (!key && !options.noFallback) { + key = fontmap["times"][fontStyle]; + + if (key == null) { + key = fontmap["times"]["normal"]; + } + } + + return key; + }; + + var putInfo = API.__private__.putInfo = function () { + var objectId = newObject(); + + var encryptor = function encryptor(data) { + return data; + }; + + if (encryptionOptions !== null) { + encryptor = encryption.encryptor(objectId, 0); + } + + out("<<"); + out("/Producer (" + pdfEscape(encryptor("jsPDF " + jsPDF.version)) + ")"); + + for (var key in documentProperties) { + if (documentProperties.hasOwnProperty(key) && documentProperties[key]) { + out("/" + key.substr(0, 1).toUpperCase() + key.substr(1) + " (" + pdfEscape(encryptor(documentProperties[key])) + ")"); + } + } + + out("/CreationDate (" + pdfEscape(encryptor(creationDate)) + ")"); + out(">>"); + out("endobj"); + }; + + var putCatalog = API.__private__.putCatalog = function (options) { + options = options || {}; + var tmpRootDictionaryObjId = options.rootDictionaryObjId || rootDictionaryObjId; + newObject(); + out("<<"); + out("/Type /Catalog"); + out("/Pages " + tmpRootDictionaryObjId + " 0 R"); // PDF13ref Section 7.2.1 + + if (!zoomMode) zoomMode = "fullwidth"; + + switch (zoomMode) { + case "fullwidth": + out("/OpenAction [3 0 R /FitH null]"); + break; + + case "fullheight": + out("/OpenAction [3 0 R /FitV null]"); + break; + + case "fullpage": + out("/OpenAction [3 0 R /Fit]"); + break; + + case "original": + out("/OpenAction [3 0 R /XYZ null null 1]"); + break; + + default: + var pcn = "" + zoomMode; + if (pcn.substr(pcn.length - 1) === "%") zoomMode = parseInt(zoomMode) / 100; + + if (typeof zoomMode === "number") { + out("/OpenAction [3 0 R /XYZ null null " + f2(zoomMode) + "]"); + } + + } + + if (!layoutMode) layoutMode = "continuous"; + + switch (layoutMode) { + case "continuous": + out("/PageLayout /OneColumn"); + break; + + case "single": + out("/PageLayout /SinglePage"); + break; + + case "two": + case "twoleft": + out("/PageLayout /TwoColumnLeft"); + break; + + case "tworight": + out("/PageLayout /TwoColumnRight"); + break; + } + + if (pageMode) { + /** + * A name object specifying how the document should be displayed when opened: + * UseNone : Neither document outline nor thumbnail images visible -- DEFAULT + * UseOutlines : Document outline visible + * UseThumbs : Thumbnail images visible + * FullScreen : Full-screen mode, with no menu bar, window controls, or any other window visible + */ + out("/PageMode /" + pageMode); + } + + events.publish("putCatalog"); + out(">>"); + out("endobj"); + }; + + var putTrailer = API.__private__.putTrailer = function () { + out("trailer"); + out("<<"); + out("/Size " + (objectNumber + 1)); // Root and Info must be the last and second last objects written respectively + + out("/Root " + objectNumber + " 0 R"); + out("/Info " + (objectNumber - 1) + " 0 R"); + + if (encryptionOptions !== null) { + out("/Encrypt " + encryption.oid + " 0 R"); + } + + out("/ID [ <" + fileId + "> <" + fileId + "> ]"); + out(">>"); + }; + + var putHeader = API.__private__.putHeader = function () { + out("%PDF-" + pdfVersion); + out("%\xBA\xDF\xAC\xE0"); + }; + + var putXRef = API.__private__.putXRef = function () { + var p = "0000000000"; + out("xref"); + out("0 " + (objectNumber + 1)); + out("0000000000 65535 f "); + + for (var i = 1; i <= objectNumber; i++) { + var offset = offsets[i]; + + if (typeof offset === "function") { + out((p + offsets[i]()).slice(-10) + " 00000 n "); + } else { + if (typeof offsets[i] !== "undefined") { + out((p + offsets[i]).slice(-10) + " 00000 n "); + } else { + out("0000000000 00000 n "); + } + } + } + }; + + var buildDocument = API.__private__.buildDocument = function () { + resetDocument(); + setOutputDestination(content); + events.publish("buildDocument"); + putHeader(); + putPages(); + putAdditionalObjects(); + putResources(); + if (encryptionOptions !== null) putEncryptionDict(); + putInfo(); + putCatalog(); + var offsetOfXRef = contentLength; + putXRef(); + putTrailer(); + out("startxref"); + out("" + offsetOfXRef); + out("%%EOF"); + setOutputDestination(pages[currentPage]); + return content.join("\n"); + }; + + var getBlob = API.__private__.getBlob = function (data) { + return new Blob([getArrayBuffer(data)], { + type: "application/pdf" + }); + }; + /** + * Generates the PDF document. + * + * If `type` argument is undefined, output is raw body of resulting PDF returned as a string. + * + * @param {string} type A string identifying one of the possible output types.
    + * Possible values are:
    + * 'arraybuffer' -> (ArrayBuffer)
    + * 'blob' -> (Blob)
    + * 'bloburi'/'bloburl' -> (string)
    + * 'datauristring'/'dataurlstring' -> (string)
    + * 'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring
    + * 'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)
    + * 'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)
    + * 'pdfjsnewwindow' -> (wind | null) + * @param {Object|string} options An object providing some additional signalling to PDF generator.
    + * Possible options are 'filename'.
    + * A string can be passed instead of {filename:string} and defaults to 'generated.pdf' + * @function + * @instance + * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined} + * @memberof jsPDF# + * @name output + */ + + + var output = API.output = API.__private__.output = SAFE(function output(type, options) { + options = options || {}; + + if (typeof options === "string") { + options = { + filename: options + }; + } else { + options.filename = options.filename || "generated.pdf"; + } + + switch (type) { + case undefined: + return buildDocument(); + + case "save": + API.save(options.filename); + break; + + case "arraybuffer": + return getArrayBuffer(buildDocument()); + + case "blob": + return getBlob(buildDocument()); + + case "bloburi": + case "bloburl": + // Developer is responsible of calling revokeObjectURL + if (typeof globalObject.URL !== "undefined" && typeof globalObject.URL.createObjectURL === "function") { + return globalObject.URL && globalObject.URL.createObjectURL(getBlob(buildDocument())) || void 0; + } else { + console.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser."); + } + + break; + + case "datauristring": + case "dataurlstring": + var dataURI = ""; + var pdfDocument = buildDocument(); + + try { + dataURI = btoa(pdfDocument); + } catch (e) { + dataURI = btoa(unescape(encodeURIComponent(pdfDocument))); + } + + return "data:application/pdf;filename=" + options.filename + ";base64," + dataURI; + + case "pdfobjectnewwindow": + if (Object.prototype.toString.call(globalObject) === "[object Window]") { + var pdfObjectUrl = "https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js"; + var integrity = ' integrity="sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==" crossorigin="anonymous"'; + + if (options.pdfObjectUrl) { + pdfObjectUrl = options.pdfObjectUrl; + integrity = ""; + } + + var htmlForNewWindow = "" + '"; + var nW = globalObject.open(); + + if (nW !== null) { + nW.document.write(htmlForNewWindow); + } + + return nW; + } else { + throw new Error("The option pdfobjectnewwindow just works in a browser-environment."); + } + + case "pdfjsnewwindow": + if (Object.prototype.toString.call(globalObject) === "[object Window]") { + var pdfJsUrl = options.pdfJsUrl || "examples/PDF.js/web/viewer.html"; + var htmlForPDFjsNewWindow = "" + "" + '' + ""; + var dataURLNewWindow = globalObject.open(); + + if (dataURLNewWindow !== null) { + dataURLNewWindow.document.write(htmlForDataURLNewWindow); + dataURLNewWindow.document.title = options.filename; + } + + if (dataURLNewWindow || typeof safari === "undefined") return dataURLNewWindow; + } else { + throw new Error("The option dataurlnewwindow just works in a browser-environment."); + } + + break; + + case "datauri": + case "dataurl": + return globalObject.document.location.href = this.output("datauristring", options); + + default: + return null; + } + }); + /** + * Used to see if a supplied hotfix was requested when the pdf instance was created. + * @param {string} hotfixName - The name of the hotfix to check. + * @returns {boolean} + */ + + var hasHotfix = function hasHotfix(hotfixName) { + return Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1; + }; + + switch (unit) { + case "pt": + scaleFactor = 1; + break; + + case "mm": + scaleFactor = 72 / 25.4; + break; + + case "cm": + scaleFactor = 72 / 2.54; + break; + + case "in": + scaleFactor = 72; + break; + + case "px": + if (hasHotfix("px_scaling") == true) { + scaleFactor = 72 / 96; + } else { + scaleFactor = 96 / 72; + } + + break; + + case "pc": + scaleFactor = 12; + break; + + case "em": + scaleFactor = 12; + break; + + case "ex": + scaleFactor = 6; + break; + + default: + if (typeof unit === "number") { + scaleFactor = unit; + } else { + throw new Error("Invalid unit: " + unit); + } + + } + + var encryption = null; + setCreationDate(); + setFileId(); + + var getEncryptor = function getEncryptor(objectId) { + if (encryptionOptions !== null) { + return encryption.encryptor(objectId, 0); + } + + return function (data) { + return data; + }; + }; //--------------------------------------- + // Public API + + + var getPageInfo = API.__private__.getPageInfo = API.getPageInfo = function (pageNumberOneBased) { + if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) { + throw new Error("Invalid argument passed to jsPDF.getPageInfo"); + } + + var objId = pagesContext[pageNumberOneBased].objId; + return { + objId: objId, + pageNumber: pageNumberOneBased, + pageContext: pagesContext[pageNumberOneBased] + }; + }; + + var getPageInfoByObjId = API.__private__.getPageInfoByObjId = function (objId) { + if (isNaN(objId) || objId % 1 !== 0) { + throw new Error("Invalid argument passed to jsPDF.getPageInfoByObjId"); + } + + for (var pageNumber in pagesContext) { + if (pagesContext[pageNumber].objId === objId) { + break; + } + } + + return getPageInfo(pageNumber); + }; + + var getCurrentPageInfo = API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function () { + return { + objId: pagesContext[currentPage].objId, + pageNumber: currentPage, + pageContext: pagesContext[currentPage] + }; + }; + /** + * Adds (and transfers the focus to) new page to the PDF document. + * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    + * Default is "a4". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89] + * @param orientation {string} Orientation of the new page. Possible values are "portrait" or "landscape" (or shortcuts "p" (Default), "l"). + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name addPage + */ + + + API.addPage = function () { + _addPage.apply(this, arguments); + + return this; + }; + /** + * Adds (and transfers the focus to) new page to the PDF document. + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name setPage + * @param {number} page Switch the active page to the page number specified (indexed starting at 1). + * @example + * doc = jsPDF() + * doc.addPage() + * doc.addPage() + * doc.text('I am on page 3', 10, 10) + * doc.setPage(1) + * doc.text('I am on page 1', 10, 10) + */ + + + API.setPage = function () { + _setPage.apply(this, arguments); + + setOutputDestination.call(this, pages[currentPage]); + return this; + }; + /** + * @name insertPage + * @memberof jsPDF# + * + * @function + * @instance + * @param {Object} beforePage + * @returns {jsPDF} + */ + + + API.insertPage = function (beforePage) { + this.addPage(); + this.movePage(currentPage, beforePage); + return this; + }; + /** + * @name movePage + * @memberof jsPDF# + * @function + * @instance + * @param {number} targetPage + * @param {number} beforePage + * @returns {jsPDF} + */ + + + API.movePage = function (targetPage, beforePage) { + var tmpPages, tmpPagesContext; + + if (targetPage > beforePage) { + tmpPages = pages[targetPage]; + tmpPagesContext = pagesContext[targetPage]; + + for (var i = targetPage; i > beforePage; i--) { + pages[i] = pages[i - 1]; + pagesContext[i] = pagesContext[i - 1]; + } + + pages[beforePage] = tmpPages; + pagesContext[beforePage] = tmpPagesContext; + this.setPage(beforePage); + } else if (targetPage < beforePage) { + tmpPages = pages[targetPage]; + tmpPagesContext = pagesContext[targetPage]; + + for (var j = targetPage; j < beforePage; j++) { + pages[j] = pages[j + 1]; + pagesContext[j] = pagesContext[j + 1]; + } + + pages[beforePage] = tmpPages; + pagesContext[beforePage] = tmpPagesContext; + this.setPage(beforePage); + } + + return this; + }; + /** + * Deletes a page from the PDF. + * @name deletePage + * @memberof jsPDF# + * @function + * @param {number} targetPage + * @instance + * @returns {jsPDF} + */ + + + API.deletePage = function () { + _deletePage.apply(this, arguments); + + return this; + }; + /** + * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings. + * + * @function + * @instance + * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call. + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page. + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page. + * @param {Object} [options] - Collection of settings signaling how the text must be encoded. + * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify. + * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging + * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree. + * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise. + * @param {number} [options.charSpace=0] - The space between each letter. + * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size. + * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line. + * @param {Object} [options.flags] - Flags for to8bitStream. + * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text. + * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text. + * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split. + * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping. + * @param {boolean} [options.isInputVisual] - Option for the BidiEngine + * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine + * @param {boolean} [options.isInputRtl] - Option for the BidiEngine + * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine + * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine + * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y. + * + * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing + * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this + * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a + * DIFFERENT result. A matrix is only allowed in "advanced" API mode. + * @returns {jsPDF} + * @memberof jsPDF# + * @name text + */ + + + API.__private__.text = API.text = function (text, x, y, options, transform) { + /* + * Inserts something like this into PDF + * BT + * /F1 16 Tf % Font name + size + * 16 TL % How many units down for next line in multiline text + * 0 g % color + * 28.35 813.54 Td % position + * (line one) Tj + * T* (line two) Tj + * T* (line three) Tj + * ET + */ + options = options || {}; + var scope = options.scope || this; + var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale; // Pre-August-2012 the order of arguments was function(x, y, text, flags) + // in effort to make all calls have similar signature like + // function(data, coordinates... , miscellaneous) + // this method had its args flipped. + // code below allows backward compatibility with old arg order. + + if (typeof text === "number" && typeof x === "number" && (typeof y === "string" || Array.isArray(y))) { + var tmp = y; + y = x; + x = text; + text = tmp; + } + + var transformationMatrix; + + if (arguments[3] instanceof Matrix === false) { + flags = arguments[3]; + angle = arguments[4]; + align = arguments[5]; + + if (_typeof(flags) !== "object" || flags === null) { + if (typeof angle === "string") { + align = angle; + angle = null; + } + + if (typeof flags === "string") { + align = flags; + flags = null; + } + + if (typeof flags === "number") { + angle = flags; + flags = null; + } + + options = { + flags: flags, + angle: angle, + align: align + }; + } + } else { + advancedApiModeTrap("The transform parameter of text() with a Matrix value"); + transformationMatrix = transform; + } + + if (isNaN(x) || isNaN(y) || typeof text === "undefined" || text === null) { + throw new Error("Invalid arguments passed to jsPDF.text"); + } + + if (text.length === 0) { + return scope; + } + + var xtra = ""; + var isHex = false; + var lineHeight = typeof options.lineHeightFactor === "number" ? options.lineHeightFactor : lineHeightFactor; + var scaleFactor = scope.internal.scaleFactor; + + function ESC(s) { + s = s.split("\t").join(Array(options.TabLen || 9).join(" ")); + return pdfEscape(s, flags); + } + + function transformTextToSpecialArray(text) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + var da = []; + var len = sa.length; + var curDa; //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + + while (len--) { + curDa = sa.shift(); + + if (typeof curDa === "string") { + da.push(curDa); + } else { + if (Array.isArray(text) && (curDa.length === 1 || curDa[1] === undefined && curDa[2] === undefined)) { + da.push(curDa[0]); + } else { + da.push([curDa[0], curDa[1], curDa[2]]); + } + } + } + + return da; + } + + function processTextByFunction(text, processingFunction) { + var result; + + if (typeof text === "string") { + result = processingFunction(text)[0]; + } else if (Array.isArray(text)) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + var da = []; + var len = sa.length; + var curDa; + var tmpResult; //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + + while (len--) { + curDa = sa.shift(); + + if (typeof curDa === "string") { + da.push(processingFunction(curDa)[0]); + } else if (Array.isArray(curDa) && typeof curDa[0] === "string") { + tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]); + da.push([tmpResult[0], tmpResult[1], tmpResult[2]]); + } + } + + result = da; + } + + return result; + } //Check if text is of type String + + + var textIsOfTypeString = false; + var tmpTextIsOfTypeString = true; + + if (typeof text === "string") { + textIsOfTypeString = true; + } else if (Array.isArray(text)) { + //we don't want to destroy original text array, so cloning it + var sa = text.concat(); + da = []; + var len = sa.length; + var curDa; //we do array.join('text that must not be PDFescaped") + //thus, pdfEscape each component separately + + while (len--) { + curDa = sa.shift(); + + if (typeof curDa !== "string" || Array.isArray(curDa) && typeof curDa[0] !== "string") { + tmpTextIsOfTypeString = false; + } + } + + textIsOfTypeString = tmpTextIsOfTypeString; + } + + if (textIsOfTypeString === false) { + throw new Error('Type of text must be string or Array. "' + text + '" is not recognized.'); + } //If there are any newlines in text, we assume + //the user wanted to print multiple lines, so break the + //text up into an array. If the text is already an array, + //we assume the user knows what they are doing. + //Convert text into an array anyway to simplify + //later code. + + + if (typeof text === "string") { + if (text.match(/[\r?\n]/)) { + text = text.split(/\r\n|\r|\n/g); + } else { + text = [text]; + } + } //baseline + + + var height = activeFontSize / scope.internal.scaleFactor; + var descent = height * (lineHeight - 1); + + switch (options.baseline) { + case "bottom": + y -= descent; + break; + + case "top": + y += height - descent; + break; + + case "hanging": + y += height - 2 * descent; + break; + + case "middle": + y += height / 2 - descent; + break; + } //multiline + + + maxWidth = options.maxWidth || 0; + + if (maxWidth > 0) { + if (typeof text === "string") { + text = scope.splitTextToSize(text, maxWidth); + } else if (Object.prototype.toString.call(text) === "[object Array]") { + text = text.reduce(function (acc, textLine) { + return acc.concat(scope.splitTextToSize(textLine, maxWidth)); + }, []); + } + } //creating Payload-Object to make text byRef + + + payload = { + text: text, + x: x, + y: y, + options: options, + mutex: { + pdfEscape: pdfEscape, + activeFontKey: activeFontKey, + fonts: fonts, + activeFontSize: activeFontSize + } + }; + events.publish("preProcessText", payload); + text = payload.text; + options = payload.options; //angle + + angle = options.angle; + + if (transformationMatrix instanceof Matrix === false && angle && typeof angle === "number") { + angle *= Math.PI / 180; + + if (options.rotationDirection === 0) { + angle = -angle; + } + + if (apiMode === ApiMode.ADVANCED) { + angle = -angle; + } + + var c = Math.cos(angle); + var s = Math.sin(angle); + transformationMatrix = new Matrix(c, s, -s, c, 0, 0); + } else if (angle && angle instanceof Matrix) { + transformationMatrix = angle; + } + + if (apiMode === ApiMode.ADVANCED && !transformationMatrix) { + transformationMatrix = identityMatrix; + } //charSpace + + + charSpace = options.charSpace || activeCharSpace; + + if (typeof charSpace !== "undefined") { + xtra += hpf(scale(charSpace)) + " Tc\n"; + this.setCharSpace(this.getCharSpace() || 0); + } + + horizontalScale = options.horizontalScale; + + if (typeof horizontalScale !== "undefined") { + xtra += hpf(horizontalScale * 100) + " Tz\n"; + } //lang + + + var lang = options.lang; + + + var renderingMode = -1; + var parmRenderingMode = typeof options.renderingMode !== "undefined" ? options.renderingMode : options.stroke; + var pageContext = scope.internal.getCurrentPageInfo().pageContext; + + switch (parmRenderingMode) { + case 0: + case false: + case "fill": + renderingMode = 0; + break; + + case 1: + case true: + case "stroke": + renderingMode = 1; + break; + + case 2: + case "fillThenStroke": + renderingMode = 2; + break; + + case 3: + case "invisible": + renderingMode = 3; + break; + + case 4: + case "fillAndAddForClipping": + renderingMode = 4; + break; + + case 5: + case "strokeAndAddPathForClipping": + renderingMode = 5; + break; + + case 6: + case "fillThenStrokeAndAddToPathForClipping": + renderingMode = 6; + break; + + case 7: + case "addToPathForClipping": + renderingMode = 7; + break; + } + + var usedRenderingMode = typeof pageContext.usedRenderingMode !== "undefined" ? pageContext.usedRenderingMode : -1; //if the coder wrote it explicitly to use a specific + //renderingMode, then use it + + if (renderingMode !== -1) { + xtra += renderingMode + " Tr\n"; //otherwise check if we used the rendering Mode already + //if so then set the rendering Mode... + } else if (usedRenderingMode !== -1) { + xtra += "0 Tr\n"; + } + + if (renderingMode !== -1) { + pageContext.usedRenderingMode = renderingMode; + } //align + + + align = options.align || "left"; + var leading = activeFontSize * lineHeight; + var pageWidth = scope.internal.pageSize.getWidth(); + var activeFont = fonts[activeFontKey]; + charSpace = options.charSpace || activeCharSpace; + maxWidth = options.maxWidth || 0; + var lineWidths; + flags = Object.assign({ + autoencode: true, + noBOM: true + }, options.flags); + var wordSpacingPerLine = []; + + if (Object.prototype.toString.call(text) === "[object Array]") { + da = transformTextToSpecialArray(text); + var newY; + + if (align !== "left") { + lineWidths = da.map(function (v) { + return scope.getStringUnitWidth(v, { + font: activeFont, + charSpace: charSpace, + fontSize: activeFontSize, + doKerning: false + }) * activeFontSize / scaleFactor; + }); + } //The first line uses the "main" Td setting, + //and the subsequent lines are offset by the + //previous line's x coordinate. + + + var prevWidth = 0; + var newX; + + if (align === "right") { + //The passed in x coordinate defines the + //rightmost point of the text. + x -= lineWidths[0]; + text = []; + len = da.length; + + for (var i = 0; i < len; i++) { + if (i === 0) { + newX = getHorizontalCoordinate(x); + newY = getVerticalCoordinate(y); + } else { + newX = scale(prevWidth - lineWidths[i]); + newY = -leading; + } + + text.push([da[i], newX, newY]); + prevWidth = lineWidths[i]; + } + } else if (align === "center") { + //The passed in x coordinate defines + //the center point. + x -= lineWidths[0] / 2; + text = []; + len = da.length; + + for (var j = 0; j < len; j++) { + if (j === 0) { + newX = getHorizontalCoordinate(x); + newY = getVerticalCoordinate(y); + } else { + newX = scale((prevWidth - lineWidths[j]) / 2); + newY = -leading; + } + + text.push([da[j], newX, newY]); + prevWidth = lineWidths[j]; + } + } else if (align === "left") { + text = []; + len = da.length; + + for (var h = 0; h < len; h++) { + text.push(da[h]); + } + } else if (align === "justify") { + text = []; + len = da.length; + maxWidth = maxWidth !== 0 ? maxWidth : pageWidth; + + for (var l = 0; l < len; l++) { + newY = l === 0 ? getVerticalCoordinate(y) : -leading; + newX = l === 0 ? getHorizontalCoordinate(x) : 0; + + if (l < len - 1) { + wordSpacingPerLine.push(hpf(scale((maxWidth - lineWidths[l]) / (da[l].split(" ").length - 1)))); + } else { + wordSpacingPerLine.push(0); + } + + text.push([da[l], newX, newY]); + } + } else { + throw new Error('Unrecognized alignment option, use "left", "center", "right" or "justify".'); + } + } //R2L + + + var doReversing = typeof options.R2L === "boolean" ? options.R2L : R2L; + + if (doReversing === true) { + text = processTextByFunction(text, function (text, posX, posY) { + return [text.split("").reverse().join(""), posX, posY]; + }); + } //creating Payload-Object to make text byRef + + + payload = { + text: text, + x: x, + y: y, + options: options, + mutex: { + pdfEscape: pdfEscape, + activeFontKey: activeFontKey, + fonts: fonts, + activeFontSize: activeFontSize + } + }; + events.publish("postProcessText", payload); + text = payload.text; + isHex = payload.mutex.isHex || false; //Escaping + + var activeFontEncoding = fonts[activeFontKey].encoding; + + if (activeFontEncoding === "WinAnsiEncoding" || activeFontEncoding === "StandardEncoding") { + text = processTextByFunction(text, function (text, posX, posY) { + return [ESC(text), posX, posY]; + }); + } + + da = transformTextToSpecialArray(text); + text = []; + var STRING = 0; + var ARRAY = 1; + var variant = Array.isArray(da[0]) ? ARRAY : STRING; + var posX; + var posY; + var content; + var wordSpacing = ""; + + var generatePosition = function generatePosition(parmPosX, parmPosY, parmTransformationMatrix) { + var position = ""; + + if (parmTransformationMatrix instanceof Matrix) { + // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y + // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied + // in the coordinate system established by this matrix + if (typeof options.angle === "number") { + parmTransformationMatrix = matrixMult(parmTransformationMatrix, new Matrix(1, 0, 0, 1, parmPosX, parmPosY)); + } else { + parmTransformationMatrix = matrixMult(new Matrix(1, 0, 0, 1, parmPosX, parmPosY), parmTransformationMatrix); + } + + if (apiMode === ApiMode.ADVANCED) { + parmTransformationMatrix = matrixMult(new Matrix(1, 0, 0, -1, 0, 0), parmTransformationMatrix); + } + + position = parmTransformationMatrix.join(" ") + " Tm\n"; + } else { + position = hpf(parmPosX) + " " + hpf(parmPosY) + " Td\n"; + } + + return position; + }; + + for (var lineIndex = 0; lineIndex < da.length; lineIndex++) { + wordSpacing = ""; + + switch (variant) { + case ARRAY: + content = (isHex ? "<" : "(") + da[lineIndex][0] + (isHex ? ">" : ")"); + posX = parseFloat(da[lineIndex][1]); + posY = parseFloat(da[lineIndex][2]); + break; + + case STRING: + content = (isHex ? "<" : "(") + da[lineIndex] + (isHex ? ">" : ")"); + posX = getHorizontalCoordinate(x); + posY = getVerticalCoordinate(y); + break; + } + + if (typeof wordSpacingPerLine !== "undefined" && typeof wordSpacingPerLine[lineIndex] !== "undefined") { + wordSpacing = wordSpacingPerLine[lineIndex] + " Tw\n"; + } + + if (lineIndex === 0) { + text.push(wordSpacing + generatePosition(posX, posY, transformationMatrix) + content); + } else if (variant === STRING) { + text.push(wordSpacing + content); + } else if (variant === ARRAY) { + text.push(wordSpacing + generatePosition(posX, posY, transformationMatrix) + content); + } + } + + text = variant === STRING ? text.join(" Tj\nT* ") : text.join(" Tj\n"); + text += " Tj\n"; + var result = "BT\n/"; + result += activeFontKey + " " + activeFontSize + " Tf\n"; // font face, style, size + + result += hpf(activeFontSize * lineHeight) + " TL\n"; // line spacing + + result += textColor + "\n"; + result += xtra; + result += text; + result += "ET"; + out(result); + usedFonts[activeFontKey] = true; + return scope; + }; // PDF supports these path painting and clip path operators: + // + // S - stroke + // s - close/stroke + // f (F) - fill non-zero + // f* - fill evenodd + // B - fill stroke nonzero + // B* - fill stroke evenodd + // b - close fill stroke nonzero + // b* - close fill stroke evenodd + // n - nothing (consume path) + // W - clip nonzero + // W* - clip evenodd + // + // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close() + // method. + + /** + * + * @name clip + * @function + * @instance + * @param {string} rule Only possible value is 'evenodd' + * @returns {jsPDF} + * @memberof jsPDF# + * @description All .clip() after calling drawing ops with a style argument of null. + */ + + + var clip = API.__private__.clip = API.clip = function (rule) { + // Call .clip() after calling drawing ops with a style argument of null + // W is the PDF clipping op + if ("evenodd" === rule) { + out("W*"); + } else { + out("W"); + } + + return this; + }; + /** + * @name clipEvenOdd + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note + * that this will NOT consume the current path. In order to only use this path for clipping call + * {@link API.discardPath} afterwards. + */ + + + API.clipEvenOdd = function () { + return clip("evenodd"); + }; + /** + * Consumes the current path without any effect. Mainly used in combination with {@link clip} or + * {@link clipEvenOdd}. The PDF "n" operator. + * @name discardPath + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.__private__.discardPath = API.discardPath = function () { + out("n"); + return this; + }; + + var isValidStyle = API.__private__.isValidStyle = function (style) { + var validStyleVariants = [undefined, null, "S", "D", "F", "DF", "FD", "f", "f*", "B", "B*", "n"]; + var result = false; + + if (validStyleVariants.indexOf(style) !== -1) { + result = true; + } + + return result; + }; + + API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function (operator) { + if (isValidStyle(operator)) { + defaultPathOperation = operator; + } + + return this; + }; + + var getStyle = API.__private__.getStyle = API.getStyle = function (style) { + // see path-painting operators in PDF spec + var op = defaultPathOperation; // stroke + + switch (style) { + case "D": + case "S": + op = "S"; // stroke + + break; + + case "F": + op = "f"; // fill + + break; + + case "FD": + case "DF": + op = "B"; + break; + + case "f": + case "f*": + case "B": + case "B*": + /* + Allow direct use of these PDF path-painting operators: + - f fill using nonzero winding number rule + - f* fill using even-odd rule + - B fill then stroke with fill using non-zero winding number rule + - B* fill then stroke with fill using even-odd rule + */ + op = style; + break; + } + + return op; + }; + /** + * Close the current path. The PDF "h" operator. + * @name close + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + var close = API.close = function () { + out("h"); + return this; + }; + /** + * Stroke the path. The PDF "S" operator. + * @name stroke + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.stroke = function () { + out("S"); + return this; + }; + /** + * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled + * with this pattern, otherwise with the current fill color. Equivalent to the PDF "f" operator. + * @name fill + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be filled with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fill = function (pattern) { + fillWithOptionalPattern("f", pattern); + return this; + }; + /** + * Fill the current path using the even-odd rule. The PDF f* operator. + * @see API.fill + * @name fillEvenOdd + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be filled with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fillEvenOdd = function (pattern) { + fillWithOptionalPattern("f*", pattern); + return this; + }; + /** + * Fill using the nonzero winding number rule and then stroke the current Path. The PDF "B" operator. + * @see API.fill + * @name fillStroke + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be stroked with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fillStroke = function (pattern) { + fillWithOptionalPattern("B", pattern); + return this; + }; + /** + * Fill using the even-odd rule and then stroke the current Path. The PDF "B" operator. + * @see API.fill + * @name fillStrokeEvenOdd + * @function + * @instance + * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.fillStrokeEvenOdd = function (pattern) { + fillWithOptionalPattern("B*", pattern); + return this; + }; + + var fillWithOptionalPattern = function fillWithOptionalPattern(style, pattern) { + if (_typeof(pattern) === "object") { + fillWithPattern(pattern, style); + } else { + out(style); + } + }; + + var putStyle = function putStyle(style) { + if (style === null || apiMode === ApiMode.ADVANCED && style === undefined) { + return; + } + + style = getStyle(style); // stroking / filling / both the path + + out(style); + }; + + function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) { + var clone = new TilingPattern(boundingBox || this.boundingBox, xStep || this.xStep, yStep || this.yStep, this.gState, matrix || this.matrix); + clone.stream = this.stream; + var key = patternKey + "$$" + this.cloneIndex++ + "$$"; + addPattern(key, clone); + return clone; + } + + var fillWithPattern = function fillWithPattern(patternData, style) { + var patternId = patternMap[patternData.key]; + var pattern = patterns[patternId]; + + if (pattern instanceof ShadingPattern) { + out("q"); + out(clipRuleFromStyle(style)); + + if (pattern.gState) { + API.setGState(pattern.gState); + } + + out(patternData.matrix.toString() + " cm"); + out("/" + patternId + " sh"); + out("Q"); + } else if (pattern instanceof TilingPattern) { + // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation, + // so we must flip them + var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight()); + + if (patternData.matrix) { + matrix = matrix.multiply(patternData.matrix || identityMatrix); // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances + // for each use + + patternId = cloneTilingPattern.call(pattern, patternData.key, patternData.boundingBox, patternData.xStep, patternData.yStep, matrix).id; + } + + out("q"); + out("/Pattern cs"); + out("/" + patternId + " scn"); + + if (pattern.gState) { + API.setGState(pattern.gState); + } + + out(style); + out("Q"); + } + }; + + var clipRuleFromStyle = function clipRuleFromStyle(style) { + switch (style) { + case "f": + case "F": + return "W n"; + + case "f*": + return "W* n"; + + case "B": + return "W S"; + + case "B*": + return "W* S"; + // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern + // and "n"/"S" as style would still fill/fill and stroke the path) + + case "S": + return "W S"; + + case "n": + return "W n"; + } + }; + /** + * Begin a new subpath by moving the current point to coordinates (x, y). The PDF "m" operator. + * @param {number} x + * @param {number} y + * @name moveTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + + + var moveTo = API.moveTo = function (x, y) { + out(hpf(scale(x)) + " " + hpf(transformScaleY(y)) + " m"); + return this; + }; + /** + * Append a straight line segment from the current point to the point (x, y). The PDF "l" operator. + * @param {number} x + * @param {number} y + * @memberof jsPDF# + * @name lineTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + + + var lineTo = API.lineTo = function (x, y) { + out(hpf(scale(x)) + " " + hpf(transformScaleY(y)) + " l"); + return this; + }; + /** + * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point + * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3). + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @memberof jsPDF# + * @name curveTo + * @function + * @instance + * @memberof jsPDF# + * @returns {jsPDF} + */ + + + var curveTo = API.curveTo = function (x1, y1, x2, y2, x3, y3) { + out([hpf(scale(x1)), hpf(transformScaleY(y1)), hpf(scale(x2)), hpf(transformScaleY(y2)), hpf(scale(x3)), hpf(transformScaleY(y3)), "c"].join(" ")); + return this; + }; + /** + * Draw a line on the current page. + * + * @name line + * @function + * @instance + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S' + * @returns {jsPDF} + * @memberof jsPDF# + */ + + + API.__private__.line = API.line = function (x1, y1, x2, y2, style) { + if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.line"); + } + + if (apiMode === ApiMode.COMPAT) { + return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || "S"); + } else { + return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke(); + } + }; + /** + * @typedef {Object} PatternData + * {Matrix|undefined} matrix + * {Number|undefined} xStep + * {Number|undefined} yStep + * {Array.|undefined} boundingBox + */ + + /** + * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates. + * All data points in `lines` are relative to last line origin. + * `x`, `y` become x1,y1 for first line / curve in the set. + * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point. + * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1. + * + * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line + * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves). + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction. + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name lines + */ + + + API.__private__.lines = API.lines = function (lines, x, y, scale, style, closed) { + var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp; // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style) + // in effort to make all calls have similar signature like + // function(content, coordinateX, coordinateY , miscellaneous) + // this method had its args flipped. + // code below allows backward compatibility with old arg order. + + if (typeof lines === "number") { + tmp = y; + y = x; + x = lines; + lines = tmp; + } + + scale = scale || [1, 1]; + closed = closed || false; + + if (isNaN(x) || isNaN(y) || !Array.isArray(lines) || !Array.isArray(scale) || !isValidStyle(style) || typeof closed !== "boolean") { + throw new Error("Invalid arguments passed to jsPDF.lines"); + } // starting point + + + moveTo(x, y); + scalex = scale[0]; + scaley = scale[1]; + l = lines.length; //, x2, y2 // bezier only. In page default measurement "units", *after* scaling + //, x3, y3 // bezier only. In page default measurement "units", *after* scaling + // ending point for all, lines and bezier. . In page default measurement "units", *after* scaling + + x4 = x; // last / ending point = starting point for first item. + + y4 = y; // last / ending point = starting point for first item. + + for (i = 0; i < l; i++) { + leg = lines[i]; + + if (leg.length === 2) { + // simple line + x4 = leg[0] * scalex + x4; // here last x4 was prior ending point + + y4 = leg[1] * scaley + y4; // here last y4 was prior ending point + + lineTo(x4, y4); + } else { + // bezier curve + x2 = leg[0] * scalex + x4; // here last x4 is prior ending point + + y2 = leg[1] * scaley + y4; // here last y4 is prior ending point + + x3 = leg[2] * scalex + x4; // here last x4 is prior ending point + + y3 = leg[3] * scaley + y4; // here last y4 is prior ending point + + x4 = leg[4] * scalex + x4; // here last x4 was prior ending point + + y4 = leg[5] * scaley + y4; // here last y4 was prior ending point + + curveTo(x2, y2, x3, y3, x4, y4); + } + } + + if (closed) { + close(); + } + + putStyle(style); + return this; + }; + /** + * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative. + * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of "m" (move to), "l" (line to) + * "c" (cubic bezier curve) and "h" (close (sub)path)). c is an array of coordinates. "m" and "l" expect two, "c" + * six and "h" an empty array (or undefined). + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name path + */ + + + API.path = function (lines) { + for (var i = 0; i < lines.length; i++) { + var leg = lines[i]; + var coords = leg.c; + + switch (leg.op) { + case "m": + moveTo(coords[0], coords[1]); + break; + + case "l": + lineTo(coords[0], coords[1]); + break; + + case "c": + curveTo.apply(this, coords); + break; + + case "h": + close(); + break; + } + } + + return this; + }; + /** + * Adds a rectangle to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} w Width (in units declared at inception of PDF document) + * @param {number} h Height (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name rect + */ + + + API.__private__.rect = API.rect = function (x, y, w, h, style) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.rect"); + } + + if (apiMode === ApiMode.COMPAT) { + h = -h; + } + + out([hpf(scale(x)), hpf(transformScaleY(y)), hpf(scale(w)), hpf(scale(h)), "re"].join(" ")); + putStyle(style); + return this; + }; + /** + * Adds a triangle to PDF. + * + * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name triangle + */ + + + API.__private__.triangle = API.triangle = function (x1, y1, x2, y2, x3, y3, style) { + if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2) || isNaN(x3) || isNaN(y3) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.triangle"); + } + + this.lines([[x2 - x1, y2 - y1], // vector to point 2 + [x3 - x2, y3 - y2], // vector to point 3 + [x1 - x3, y1 - y3] // closing vector back to point 1 + ], x1, y1, // start of path + [1, 1], style, true); + return this; + }; + /** + * Adds a rectangle with rounded corners to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} w Width (in units declared at inception of PDF document) + * @param {number} h Height (in units declared at inception of PDF document) + * @param {number} rx Radius along x axis (in units declared at inception of PDF document) + * @param {number} ry Radius along y axis (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name roundedRect + */ + + + API.__private__.roundedRect = API.roundedRect = function (x, y, w, h, rx, ry, style) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || isNaN(rx) || isNaN(ry) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.roundedRect"); + } + + var MyArc = 4 / 3 * (Math.SQRT2 - 1); + rx = Math.min(rx, w * 0.5); + ry = Math.min(ry, h * 0.5); + this.lines([[w - 2 * rx, 0], [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry], [0, h - 2 * ry], [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry], [-w + 2 * rx, 0], [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry], [0, -h + 2 * ry], [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]], x + rx, y, // start of path + [1, 1], style, true); + return this; + }; + /** + * Adds an ellipse to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} rx Radius along x axis (in units declared at inception of PDF document) + * @param {number} ry Radius along y axis (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name ellipse + */ + + + API.__private__.ellipse = API.ellipse = function (x, y, rx, ry, style) { + if (isNaN(x) || isNaN(y) || isNaN(rx) || isNaN(ry) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.ellipse"); + } + + var lx = 4 / 3 * (Math.SQRT2 - 1) * rx, + ly = 4 / 3 * (Math.SQRT2 - 1) * ry; + moveTo(x + rx, y); + curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry); + curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y); + curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry); + curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y); + putStyle(style); + return this; + }; + /** + * Adds an circle to PDF. + * + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} r Radius (in units declared at inception of PDF document) + * @param {string=} style A string specifying the painting style or null. Valid styles include: + * 'S' [default] - stroke, + * 'F' - fill, + * and 'DF' (or 'FD') - fill then stroke. + * In "compat" API mode, a null value postpones setting the style so that a shape may be composed using multiple + * method calls. The last drawing method call used to define the shape should not have a null style argument. + * + * In "advanced" API mode this parameter is deprecated. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name circle + */ + + + API.__private__.circle = API.circle = function (x, y, r, style) { + if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) { + throw new Error("Invalid arguments passed to jsPDF.circle"); + } + + return this.ellipse(x, y, r, r, style); + }; + /** + * Sets text font face, variant for upcoming text elements. + * See output of jsPDF.getFontList() for possible font names, styles. + * + * @param {string} fontName Font name or family. Example: "times". + * @param {string} fontStyle Font style or variant. Example: "italic". + * @param {number | string} fontWeight Weight of the Font. Example: "normal" | 400 + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFont + */ + + + API.setFont = function (fontName, fontStyle, fontWeight) { + if (fontWeight) { + fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight); + } + + activeFontKey = getFont(fontName, fontStyle, { + disableWarning: false + }); + return this; + }; + /** + * Gets text font face, variant for upcoming text elements. + * + * @function + * @instance + * @returns {Object} + * @memberof jsPDF# + * @name getFont + */ + + + var getFontEntry = API.__private__.getFont = API.getFont = function () { + return fonts[getFont.apply(API, arguments)]; + }; + /** + * Returns an object - a tree of fontName to fontStyle relationships available to + * active PDF document. + * + * @public + * @function + * @instance + * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... } + * @memberof jsPDF# + * @name getFontList + */ + + + API.__private__.getFontList = API.getFontList = function () { + var list = {}, + fontName, + fontStyle; + + for (fontName in fontmap) { + if (fontmap.hasOwnProperty(fontName)) { + list[fontName] = []; + + for (fontStyle in fontmap[fontName]) { + if (fontmap[fontName].hasOwnProperty(fontStyle)) { + list[fontName].push(fontStyle); + } + } + } + } + + return list; + }; + /** + * Add a custom font to the current instance. + * + * @param {string} postScriptName PDF specification full name for the font. + * @param {string} id PDF-document-instance-specific label assinged to the font. + * @param {string} fontStyle Style of the Font. + * @param {number | string} fontWeight Weight of the Font. + * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping. + * @function + * @instance + * @memberof jsPDF# + * @name addFont + * @returns {string} fontId + */ + + + API.addFont = function (postScriptName, fontName, fontStyle, fontWeight, encoding) { + var encodingOptions = ["StandardEncoding", "MacRomanEncoding", "Identity-H", "WinAnsiEncoding"]; + + if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) { + //IE 11 fix + encoding = arguments[3]; + } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) { + fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight); + } + + encoding = encoding || "Identity-H"; + return addFont.call(this, postScriptName, fontName, fontStyle, encoding); + }; + + var lineWidth = options.lineWidth || 0.200025; // 2mm + + /** + * Gets the line width, default: 0.200025. + * + * @function + * @instance + * @returns {number} lineWidth + * @memberof jsPDF# + * @name getLineWidth + */ + + var getLineWidth = API.__private__.getLineWidth = API.getLineWidth = function () { + return lineWidth; + }; + /** + * Sets line width for upcoming lines. + * + * @param {number} width Line width (in units declared at inception of PDF document). + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineWidth + */ + + + var setLineWidth = API.__private__.setLineWidth = API.setLineWidth = function (width) { + lineWidth = width; + out(hpf(scale(width)) + " w"); + return this; + }; + /** + * Sets the dash pattern for upcoming lines. + * + * To reset the settings simply call the method without any parameters. + * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the + * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered + * to be as long as the dashes. An empty array means solid, unbroken lines. + * @param {number} dashPhase The phase lines start with. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineDashPattern + */ + + + API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function (dashArray, dashPhase) { + dashArray = dashArray || []; + dashPhase = dashPhase || 0; + + if (isNaN(dashPhase) || !Array.isArray(dashArray)) { + throw new Error("Invalid arguments passed to jsPDF.setLineDash"); + } + + dashArray = dashArray.map(function (x) { + return hpf(scale(x)); + }).join(" "); + dashPhase = hpf(scale(dashPhase)); + out("[" + dashArray + "] " + dashPhase + " d"); + return this; + }; + + var lineHeightFactor; + + var getLineHeight = API.__private__.getLineHeight = API.getLineHeight = function () { + return activeFontSize * lineHeightFactor; + }; + + API.__private__.getLineHeight = API.getLineHeight = function () { + return activeFontSize * lineHeightFactor; + }; + /** + * Sets the LineHeightFactor of proportion. + * + * @param {number} value LineHeightFactor value. Default: 1.15. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineHeightFactor + */ + + + var setLineHeightFactor = API.__private__.setLineHeightFactor = API.setLineHeightFactor = function (value) { + value = value || 1.15; + + if (typeof value === "number") { + lineHeightFactor = value; + } + + return this; + }; + /** + * Gets the LineHeightFactor, default: 1.15. + * + * @function + * @instance + * @returns {number} lineHeightFactor + * @memberof jsPDF# + * @name getLineHeightFactor + */ + + + var getLineHeightFactor = API.__private__.getLineHeightFactor = API.getLineHeightFactor = function () { + return lineHeightFactor; + }; + + setLineHeightFactor(options.lineHeight); + + var getHorizontalCoordinate = API.__private__.getHorizontalCoordinate = function (value) { + return scale(value); + }; + + var getVerticalCoordinate = API.__private__.getVerticalCoordinate = function (value) { + if (apiMode === ApiMode.ADVANCED) { + return value; + } else { + var pageHeight = pagesContext[currentPage].mediaBox.topRightY - pagesContext[currentPage].mediaBox.bottomLeftY; + return pageHeight - scale(value); + } + }; + + var getHorizontalCoordinateString = API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function (value) { + return hpf(getHorizontalCoordinate(value)); + }; + + var getVerticalCoordinateString = API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function (value) { + return hpf(getVerticalCoordinate(value)); + }; + + var strokeColor = options.strokeColor || "0 G"; + /** + * Gets the stroke color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getDrawColor + */ + + API.__private__.getStrokeColor = API.getDrawColor = function () { + return decodeColorString(strokeColor); + }; + /** + * Sets the stroke color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setDrawColor + */ + + + API.__private__.setStrokeColor = API.setDrawColor = function (ch1, ch2, ch3, ch4) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "draw", + precision: 2 + }; + strokeColor = encodeColorString(options); + out(strokeColor); + return this; + }; + + var fillColor = options.fillColor || "0 g"; + /** + * Gets the fill color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getFillColor + */ + + API.__private__.getFillColor = API.getFillColor = function () { + return decodeColorString(fillColor); + }; + /** + * Sets the fill color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setFillColor + */ + + + API.__private__.setFillColor = API.setFillColor = function (ch1, ch2, ch3, ch4) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "fill", + precision: 2 + }; + fillColor = encodeColorString(options); + out(fillColor); + return this; + }; + + var textColor = options.textColor || "0 g"; + /** + * Gets the text color for upcoming elements. + * + * @function + * @instance + * @returns {string} colorAsHex + * @memberof jsPDF# + * @name getTextColor + */ + + var getTextColor = API.__private__.getTextColor = API.getTextColor = function () { + return decodeColorString(textColor); + }; + /** + * Sets the text color for upcoming elements. + * + * Depending on the number of arguments given, Gray, RGB, or CMYK + * color space is implied. + * + * When only ch1 is given, "Gray" color space is implied and it + * must be a value in the range from 0.00 (solid black) to to 1.00 (white) + * if values are communicated as String types, or in range from 0 (black) + * to 255 (white) if communicated as Number type. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When only ch1,ch2,ch3 are given, "RGB" color space is implied and each + * value must be in the range from 0.00 (minimum intensity) to to 1.00 + * (max intensity) if values are communicated as String types, or + * from 0 (min intensity) to to 255 (max intensity) if values are communicated + * as Number types. + * The RGB-like 0-255 range is provided for backward compatibility. + * + * When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each + * value must be a in the range from 0.00 (0% concentration) to to + * 1.00 (100% concentration) + * + * Because JavaScript treats fixed point numbers badly (rounds to + * floating point nearest to binary representation) it is highly advised to + * communicate the fractional numbers as String types, not JavaScript Number type. + * + * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'. + * @param {Number} ch2 Color channel value. + * @param {Number} ch3 Color channel value. + * @param {Number} ch4 Color channel value. + * + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setTextColor + */ + + + API.__private__.setTextColor = API.setTextColor = function (ch1, ch2, ch3, ch4) { + var options = { + ch1: ch1, + ch2: ch2, + ch3: ch3, + ch4: ch4, + pdfColorType: "text", + precision: 3 + }; + textColor = encodeColorString(options); + return this; + }; + + var activeCharSpace = options.charSpace; + /** + * Get global value of CharSpace. + * + * @function + * @instance + * @returns {number} charSpace + * @memberof jsPDF# + * @name getCharSpace + */ + + var getCharSpace = API.__private__.getCharSpace = API.getCharSpace = function () { + return parseFloat(activeCharSpace || 0); + }; + /** + * Set global value of CharSpace. + * + * @param {number} charSpace + * @function + * @instance + * @returns {jsPDF} jsPDF-instance + * @memberof jsPDF# + * @name setCharSpace + */ + + + API.__private__.setCharSpace = API.setCharSpace = function (charSpace) { + if (isNaN(charSpace)) { + throw new Error("Invalid argument passed to jsPDF.setCharSpace"); + } + + activeCharSpace = charSpace; + return this; + }; + + var lineCapID = 0; + /** + * Is an Object providing a mapping from human-readable to + * integer flag values designating the varieties of line cap + * and join styles. + * + * @memberof jsPDF# + * @name CapJoinStyles + */ + + API.CapJoinStyles = { + 0: 0, + butt: 0, + but: 0, + miter: 0, + 1: 1, + round: 1, + rounded: 1, + circle: 1, + 2: 2, + projecting: 2, + project: 2, + square: 2, + bevel: 2 + }; + /** + * Sets the line cap styles. + * See {jsPDF.CapJoinStyles} for variants. + * + * @param {String|Number} style A string or number identifying the type of line cap. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineCap + */ + + API.__private__.setLineCap = API.setLineCap = function (style) { + var id = API.CapJoinStyles[style]; + + if (id === undefined) { + throw new Error("Line cap style of '" + style + "' is not recognized. See or extend .CapJoinStyles property for valid styles"); + } + + lineCapID = id; + out(id + " J"); + return this; + }; + + var lineJoinID = 0; + /** + * Sets the line join styles. + * See {jsPDF.CapJoinStyles} for variants. + * + * @param {String|Number} style A string or number identifying the type of line join. + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineJoin + */ + + API.__private__.setLineJoin = API.setLineJoin = function (style) { + var id = API.CapJoinStyles[style]; + + if (id === undefined) { + throw new Error("Line join style of '" + style + "' is not recognized. See or extend .CapJoinStyles property for valid styles"); + } + + lineJoinID = id; + out(id + " j"); + return this; + }; + /** + * Sets the miterLimit property, which effects the maximum miter length. + * + * @param {number} length The length of the miter + * @function + * @instance + * @returns {jsPDF} + * @memberof jsPDF# + * @name setLineMiterLimit + */ + + API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function (length) { + length = length || 0; + + if (isNaN(length)) { + throw new Error("Invalid argument passed to jsPDF.setLineMiterLimit"); + } + + out(hpf(scale(length)) + " M"); + return this; + }; + /** + * An object representing a pdf graphics state. + * @class GState + */ + + /** + * + * @param parameters A parameter object that contains all properties this graphics state wants to set. + * Supported are: opacity, stroke-opacity + * @constructor + */ + + + API.GState = GState; + /** + * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}. + * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState + * it will be added before use. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name setGState + */ + + API.setGState = function (gState) { + if (typeof gState === "string") { + gState = gStates[gStatesMap[gState]]; + } else { + gState = addGState(null, gState); + } + + if (!gState.equals(activeGState)) { + out("/" + gState.id + " gs"); + activeGState = gState; + } + }; + /** + * Adds a new Graphics State. Duplicates are automatically eliminated. + * @param {String} key Might also be null, if no later reference to this gState is needed + * @param {Object} gState The gState object + */ + + + var addGState = function addGState(key, gState) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (key && gStatesMap[key]) return; + var duplicate = false; + + for (var s in gStates) { + if (gStates.hasOwnProperty(s)) { + if (gStates[s].equals(gState)) { + duplicate = true; + break; + } + } + } + + if (duplicate) { + gState = gStates[s]; + } else { + var gStateKey = "GS" + (Object.keys(gStates).length + 1).toString(10); + gStates[gStateKey] = gState; + gState.id = gStateKey; + } // several user keys may point to the same GState object + + + key && (gStatesMap[key] = gState.id); + events.publish("addGState", gState); + return gState; + }; + /** + * Adds a new {@link GState} for later use. See {@link setGState}. + * @param {String} key + * @param {GState} gState + * @function + * @instance + * @returns {jsPDF} + * + * @memberof jsPDF# + * @name addGState + */ + + + API.addGState = function (key, gState) { + addGState(key, gState); + return this; + }; + /** + * Saves the current graphics state ("pushes it on the stack"). It can be restored by {@link restoreGraphicsState} + * later. Here, the general pdf graphics state is meant, also including the current transformation matrix, + * fill and stroke colors etc. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name saveGraphicsState + */ + + + API.saveGraphicsState = function () { + out("q"); // as we cannot set font key and size independently we must keep track of both + + fontStateStack.push({ + key: activeFontKey, + size: activeFontSize, + color: textColor + }); + return this; + }; + /** + * Restores a previously saved graphics state saved by {@link saveGraphicsState} ("pops the stack"). + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name restoreGraphicsState + */ + + + API.restoreGraphicsState = function () { + out("Q"); // restore previous font state + + var fontState = fontStateStack.pop(); + activeFontKey = fontState.key; + activeFontSize = fontState.size; + textColor = fontState.color; + activeGState = null; + return this; + }; + /** + * Appends this matrix to the left of all previously applied matrices. + * + * @param {Matrix} matrix + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name setCurrentTransformationMatrix + */ + + + API.setCurrentTransformationMatrix = function (matrix) { + out(matrix.toString() + " cm"); + return this; + }; + /** + * Inserts a debug comment into the generated pdf. + * @function + * @instance + * @param {String} text + * @returns {jsPDF} + * @memberof jsPDF# + * @name comment + */ + + + API.comment = function (text) { + out("#" + text); + return this; + }; + /** + * Point + */ + + + var Point = function Point(x, y) { + var _x = x || 0; + + Object.defineProperty(this, "x", { + enumerable: true, + get: function get() { + return _x; + }, + set: function set(value) { + if (!isNaN(value)) { + _x = parseFloat(value); + } + } + }); + + var _y = y || 0; + + Object.defineProperty(this, "y", { + enumerable: true, + get: function get() { + return _y; + }, + set: function set(value) { + if (!isNaN(value)) { + _y = parseFloat(value); + } + } + }); + var _type = "pt"; + Object.defineProperty(this, "type", { + enumerable: true, + get: function get() { + return _type; + }, + set: function set(value) { + _type = value.toString(); + } + }); + return this; + }; + /** + * Rectangle + */ + + + var Rectangle = function Rectangle(x, y, w, h) { + Point.call(this, x, y); + this.type = "rect"; + + var _w = w || 0; + + Object.defineProperty(this, "w", { + enumerable: true, + get: function get() { + return _w; + }, + set: function set(value) { + if (!isNaN(value)) { + _w = parseFloat(value); + } + } + }); + + var _h = h || 0; + + Object.defineProperty(this, "h", { + enumerable: true, + get: function get() { + return _h; + }, + set: function set(value) { + if (!isNaN(value)) { + _h = parseFloat(value); + } + } + }); + return this; + }; + /** + * FormObject/RenderTarget + */ + + + var RenderTarget = function RenderTarget() { + this.page = page; + this.currentPage = currentPage; + this.pages = pages.slice(0); + this.pagesContext = pagesContext.slice(0); + this.x = pageX; + this.y = pageY; + this.matrix = pageMatrix; + this.width = getPageWidth(currentPage); + this.height = getPageHeight(currentPage); + this.outputDestination = outputDestination; + this.id = ""; // set by endFormObject() + + this.objectNumber = -1; // will be set by putXObject() + }; + + RenderTarget.prototype.restore = function () { + page = this.page; + currentPage = this.currentPage; + pagesContext = this.pagesContext; + pages = this.pages; + pageX = this.x; + pageY = this.y; + pageMatrix = this.matrix; + setPageWidth(currentPage, this.width); + setPageHeight(currentPage, this.height); + outputDestination = this.outputDestination; + }; + + var beginNewRenderTarget = function beginNewRenderTarget(x, y, width, height, matrix) { + // save current state + renderTargetStack.push(new RenderTarget()); // clear pages + + page = currentPage = 0; + pages = []; + pageX = x; + pageY = y; + pageMatrix = matrix; + beginPage([width, height]); + }; + + var endFormObject = function endFormObject(key) { + // only add it if it is not already present (the keys provided by the user must be unique!) + if (renderTargetMap[key]) { + renderTargetStack.pop().restore(); + return; + } // save the created xObject + + + var newXObject = new RenderTarget(); + var xObjectId = "Xo" + (Object.keys(renderTargets).length + 1).toString(10); + newXObject.id = xObjectId; + renderTargetMap[key] = xObjectId; + renderTargets[xObjectId] = newXObject; + events.publish("addFormObject", newXObject); // restore state from stack + + renderTargetStack.pop().restore(); + }; + /** + * Starts a new pdf form object, which means that all consequent draw calls target a new independent object + * until {@link endFormObject} is called. The created object can be referenced and drawn later using + * {@link doFormObject}. Nested form objects are possible. + * x, y, width, height set the bounding box that is used to clip the content. + * + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to + * the parent's. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name beginFormObject + */ + + + API.beginFormObject = function (x, y, width, height, matrix) { + // The user can set the output target to a new form object. Nested form objects are possible. + // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as + // the PDF-Spec states: + // "In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which + // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions, + // form XObjects may be independent of the content streams in which they appear, and this is strongly + // recommended although not required" + beginNewRenderTarget(x, y, width, height, matrix); + return this; + }; + /** + * Completes and saves the form object. + * @param {String} key The key by which this form object can be referenced. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name endFormObject + */ + + + API.endFormObject = function (key) { + endFormObject(key); + return this; + }; + /** + * Draws the specified form object by referencing to the respective pdf XObject created with + * {@link API.beginFormObject} and {@link endFormObject}. + * The location is determined by matrix. + * + * @param {String} key The key to the form object. + * @param {Matrix} matrix The matrix applied before drawing the form object. + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name doFormObject + */ + + + API.doFormObject = function (key, matrix) { + var xObject = renderTargets[renderTargetMap[key]]; + out("q"); + out(matrix.toString() + " cm"); + out("/" + xObject.id + " Do"); + out("Q"); + return this; + }; + /** + * Returns the form object specified by key. + * @param key {String} + * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}} + * @function + * @returns {jsPDF} + * @memberof jsPDF# + * @name getFormObject + */ + + + API.getFormObject = function (key) { + var xObject = renderTargets[renderTargetMap[key]]; + return { + x: xObject.x, + y: xObject.y, + width: xObject.width, + height: xObject.height, + matrix: xObject.matrix + }; + }; + /** + * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf'). + * Uses FileSaver.js-method saveAs. + * + * @memberof jsPDF# + * @name save + * @function + * @instance + * @param {string} filename The filename including extension. + * @param {Object} options An Object with additional options, possible options: 'returnPromise'. + * @returns {jsPDF|Promise} jsPDF-instance */ + + + API.save = function (filename, options) { + filename = filename || "generated.pdf"; + options = options || {}; + options.returnPromise = options.returnPromise || false; + + if (options.returnPromise === false) { + saveAs(getBlob(buildDocument()), filename); + + if (typeof saveAs.unload === "function") { + if (globalObject.setTimeout) { + setTimeout(saveAs.unload, 911); + } + } + + return this; + } else { + return new Promise(function (resolve, reject) { + try { + var result = saveAs(getBlob(buildDocument()), filename); + + if (typeof saveAs.unload === "function") { + if (globalObject.setTimeout) { + setTimeout(saveAs.unload, 911); + } + } + + resolve(result); + } catch (e) { + reject(e.message); + } + }); + } + }; // applying plugins (more methods) ON TOP of built-in API. + // this is intentional as we allow plugins to override + // built-ins + + + for (var plugin in jsPDF.API) { + if (jsPDF.API.hasOwnProperty(plugin)) { + if (plugin === "events" && jsPDF.API.events.length) { + (function (events, newEvents) { + // jsPDF.API.events is a JS Array of Arrays + // where each Array is a pair of event name, handler + // Events were added by plugins to the jsPDF instantiator. + // These are always added to the new instance and some ran + // during instantiation. + var eventname, handler_and_args, i; + + for (i = newEvents.length - 1; i !== -1; i--) { + // subscribe takes 3 args: 'topic', function, runonce_flag + // if undefined, runonce is false. + // users can attach callback directly, + // or they can attach an array with [callback, runonce_flag] + // that's what the "apply" magic is for below. + eventname = newEvents[i][0]; + handler_and_args = newEvents[i][1]; + events.subscribe.apply(events, [eventname].concat(typeof handler_and_args === "function" ? [handler_and_args] : handler_and_args)); + } + })(events, jsPDF.API.events); + } else { + API[plugin] = jsPDF.API[plugin]; + } + } + } + + var getPageWidth = API.getPageWidth = function (pageNumber) { + pageNumber = pageNumber || currentPage; + return (pagesContext[pageNumber].mediaBox.topRightX - pagesContext[pageNumber].mediaBox.bottomLeftX) / scaleFactor; + }; + + var setPageWidth = API.setPageWidth = function (pageNumber, value) { + pagesContext[pageNumber].mediaBox.topRightX = value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX; + }; + + var getPageHeight = API.getPageHeight = function (pageNumber) { + pageNumber = pageNumber || currentPage; + return (pagesContext[pageNumber].mediaBox.topRightY - pagesContext[pageNumber].mediaBox.bottomLeftY) / scaleFactor; + }; + + var setPageHeight = API.setPageHeight = function (pageNumber, value) { + pagesContext[pageNumber].mediaBox.topRightY = value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY; + }; + /** + * Object exposing internal API to plugins + * @public + * @ignore + */ + + + API.internal = { + pdfEscape: pdfEscape, + getStyle: getStyle, + getFont: getFontEntry, + getFontSize: getFontSize, + getCharSpace: getCharSpace, + getTextColor: getTextColor, + getLineHeight: getLineHeight, + getLineHeightFactor: getLineHeightFactor, + getLineWidth: getLineWidth, + write: write, + getHorizontalCoordinate: getHorizontalCoordinate, + getVerticalCoordinate: getVerticalCoordinate, + getCoordinateString: getHorizontalCoordinateString, + getVerticalCoordinateString: getVerticalCoordinateString, + collections: {}, + newObject: newObject, + newAdditionalObject: newAdditionalObject, + newObjectDeferred: newObjectDeferred, + newObjectDeferredBegin: newObjectDeferredBegin, + getFilters: getFilters, + putStream: putStream, + events: events, + scaleFactor: scaleFactor, + pageSize: { + getWidth: function getWidth() { + return getPageWidth(currentPage); + }, + setWidth: function setWidth(value) { + setPageWidth(currentPage, value); + }, + getHeight: function getHeight() { + return getPageHeight(currentPage); + }, + setHeight: function setHeight(value) { + setPageHeight(currentPage, value); + } + }, + encryptionOptions: encryptionOptions, + encryption: encryption, + getEncryptor: getEncryptor, + output: output, + getNumberOfPages: getNumberOfPages, + pages: pages, + out: out, + f2: f2, + f3: f3, + getPageInfo: getPageInfo, + getPageInfoByObjId: getPageInfoByObjId, + getCurrentPageInfo: getCurrentPageInfo, + getPDFVersion: getPdfVersion, + Point: Point, + Rectangle: Rectangle, + Matrix: Matrix, + hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them. + + }; + Object.defineProperty(API.internal.pageSize, "width", { + get: function get() { + return getPageWidth(currentPage); + }, + set: function set(value) { + setPageWidth(currentPage, value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(API.internal.pageSize, "height", { + get: function get() { + return getPageHeight(currentPage); + }, + set: function set(value) { + setPageHeight(currentPage, value); + }, + enumerable: true, + configurable: true + }); ////////////////////////////////////////////////////// + // continuing initialization of jsPDF Document object + ////////////////////////////////////////////////////// + // Add the first page automatically + + addFonts.call(API, standardFonts); + activeFontKey = "F1"; + + _addPage(format, orientation); + + events.publish("initialized"); + return API; + } + /** + * jsPDF.API is a STATIC property of jsPDF class. + * jsPDF.API is an object you can add methods and properties to. + * The methods / properties you add will show up in new jsPDF objects. + * + * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics, + * callbacks to this object. These will be reassigned to all new instances of jsPDF. + * + * @static + * @public + * @memberof jsPDF# + * @name API + * + * @example + * jsPDF.API.mymethod = function(){ + * // 'this' will be ref to internal API object. see jsPDF source + * // , so you can refer to built-in methods like so: + * // this.line(....) + * // this.text(....) + * } + * var pdfdoc = new jsPDF() + * pdfdoc.mymethod() // <- !!!!!! + */ + + + jsPDF.API = { + events: [] + }; + /** + * The version of jsPDF. + * @name version + * @type {string} + * @memberof jsPDF# + */ + + jsPDF.version = "2.5.1"; + + var jsPDFAPI = jsPDF.API; + var scaleFactor = 1; + + var pdfEscape = function pdfEscape(value) { + return value.replace(/\\/g, "\\\\").replace(/\(/g, "\\(").replace(/\)/g, "\\)"); + }; + + var pdfUnescape = function pdfUnescape(value) { + return value.replace(/\\\\/g, "\\").replace(/\\\(/g, "(").replace(/\\\)/g, ")"); + }; + + var f2 = function f2(number) { + return number.toFixed(2); // Ie, %.2f + }; + + var f5 = function f5(number) { + return number.toFixed(5); // Ie, %.2f + }; + + jsPDFAPI.__acroform__ = {}; + + var inherit = function inherit(child, parent) { + child.prototype = Object.create(parent.prototype); + child.prototype.constructor = child; + }; + + var scale = function scale(x) { + return x * scaleFactor; + }; + + var createFormXObject = function createFormXObject(formObject) { + var xobj = new AcroFormXObject(); + var height = AcroFormAppearance.internal.getHeight(formObject) || 0; + var width = AcroFormAppearance.internal.getWidth(formObject) || 0; + xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))]; + return xobj; + }; + /** + * Bit-Operations + */ + + + var setBit = jsPDFAPI.__acroform__.setBit = function (number, bitPosition) { + number = number || 0; + bitPosition = bitPosition || 0; + + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBit"); + } + + var bitMask = 1 << bitPosition; + number |= bitMask; + return number; + }; + + var clearBit = jsPDFAPI.__acroform__.clearBit = function (number, bitPosition) { + number = number || 0; + bitPosition = bitPosition || 0; + + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.clearBit"); + } + + var bitMask = 1 << bitPosition; + number &= ~bitMask; + return number; + }; + + var getBit = jsPDFAPI.__acroform__.getBit = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.getBit"); + } + + return (number & 1 << bitPosition) === 0 ? 0 : 1; + }; + /* + * Ff starts counting the bit position at 1 and not like javascript at 0 + */ + + + var getBitForPdf = jsPDFAPI.__acroform__.getBitForPdf = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf"); + } + + return getBit(number, bitPosition - 1); + }; + + var setBitForPdf = jsPDFAPI.__acroform__.setBitForPdf = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf"); + } + + return setBit(number, bitPosition - 1); + }; + + var clearBitForPdf = jsPDFAPI.__acroform__.clearBitForPdf = function (number, bitPosition) { + if (isNaN(number) || isNaN(bitPosition)) { + throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf"); + } + + return clearBit(number, bitPosition - 1); + }; + + var calculateCoordinates = jsPDFAPI.__acroform__.calculateCoordinates = function (args, scope) { + var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate; + var getVerticalCoordinate = scope.internal.getVerticalCoordinate; + var x = args[0]; + var y = args[1]; + var w = args[2]; + var h = args[3]; + var coordinates = {}; + coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0; + coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0; + coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0; + coordinates.upperRight_Y = getVerticalCoordinate(y) || 0; + return [Number(f2(coordinates.lowerLeft_X)), Number(f2(coordinates.lowerLeft_Y)), Number(f2(coordinates.upperRight_X)), Number(f2(coordinates.upperRight_Y))]; + }; + + var calculateAppearanceStream = function calculateAppearanceStream(formObject) { + if (formObject.appearanceStreamContent) { + return formObject.appearanceStreamContent; + } + + if (!formObject.V && !formObject.DV) { + return; + } // else calculate it + + + var stream = []; + var text = formObject._V || formObject.DV; + var calcRes = calculateX(formObject, text); + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; //PDF 32000-1:2008, page 444 + + stream.push("/Tx BMC"); + stream.push("q"); + stream.push("BT"); // Begin Text + + stream.push(formObject.scope.__private__.encodeColorString(formObject.color)); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf"); + stream.push("1 0 0 1 0 0 Tm"); // Transformation Matrix + + stream.push(calcRes.text); + stream.push("ET"); // End Text + + stream.push("Q"); + stream.push("EMC"); + var appearanceStreamContent = createFormXObject(formObject); + appearanceStreamContent.scope = formObject.scope; + appearanceStreamContent.stream = stream.join("\n"); + return appearanceStreamContent; + }; + + var calculateX = function calculateX(formObject, text) { + var maxFontSize = formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize; + var returnValue = { + text: "", + fontSize: "" + }; // Remove Brackets + + text = text.substr(0, 1) == "(" ? text.substr(1) : text; + text = text.substr(text.length - 1) == ")" ? text.substr(0, text.length - 1) : text; // split into array of words + + var textSplit = text.split(" "); + + if (formObject.multiline) { + textSplit = textSplit.map(function (word) { + return word.split("\n"); + }); + } else { + textSplit = textSplit.map(function (word) { + return [word]; + }); + } + + var fontSize = maxFontSize; // The Starting fontSize (The Maximum) + + var lineSpacing = 2; + var borderPadding = 2; + var height = AcroFormAppearance.internal.getHeight(formObject) || 0; + height = height < 0 ? -height : height; + var width = AcroFormAppearance.internal.getWidth(formObject) || 0; + width = width < 0 ? -width : width; + + var isSmallerThanWidth = function isSmallerThanWidth(i, lastLine, fontSize) { + if (i + 1 < textSplit.length) { + var tmp = lastLine + " " + textSplit[i + 1][0]; + var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width; + var FieldWidth = width - 2 * borderPadding; + return TextWidth <= FieldWidth; + } else { + return false; + } + }; + + fontSize++; + + FontSize: while (fontSize > 0) { + text = ""; + fontSize--; + var textHeight = calculateFontSpace("3", formObject, fontSize).height; + var startY = formObject.multiline ? height - fontSize : (height - textHeight) / 2; + startY += lineSpacing; + var startX; + var lastY = startY; + var firstWordInLine = 0, + lastWordInLine = 0; + var lastLength; + var currWord = 0; + + if (fontSize <= 0) { + // In case, the Text doesn't fit at all + fontSize = 12; + text = "(...) Tj\n"; + text += "% Width of Text: " + calculateFontSpace(text, formObject, fontSize).width + ", FieldWidth:" + width + "\n"; + break; + } + + var lastLine = ""; + var lineCount = 0; + + Line: for (var i = 0; i < textSplit.length; i++) { + if (textSplit.hasOwnProperty(i)) { + var isWithNewLine = false; + + if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) { + if ((textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > height) { + continue FontSize; + } + + lastLine += textSplit[i][currWord]; + isWithNewLine = true; + lastWordInLine = i; + i--; + } else { + lastLine += textSplit[i][currWord] + " "; + lastLine = lastLine.substr(lastLine.length - 1) == " " ? lastLine.substr(0, lastLine.length - 1) : lastLine; + var key = parseInt(i); + var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize); + var isLastWord = i >= textSplit.length - 1; + + if (nextLineIsSmaller && !isLastWord) { + lastLine += " "; + currWord = 0; + continue; // Line + } else if (!nextLineIsSmaller && !isLastWord) { + if (!formObject.multiline) { + continue FontSize; + } else { + if ((textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > height) { + // If the Text is higher than the + // FieldObject + continue FontSize; + } + + lastWordInLine = key; // go on + } + } else if (isLastWord) { + lastWordInLine = key; + } else { + if (formObject.multiline && (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing > height) { + // If the Text is higher than the FieldObject + continue FontSize; + } + } + } // Remove last blank + + + var line = ""; + + for (var x = firstWordInLine; x <= lastWordInLine; x++) { + var currLine = textSplit[x]; + + if (formObject.multiline) { + if (x === lastWordInLine) { + line += currLine[currWord] + " "; + currWord = (currWord + 1) % currLine.length; + continue; + } + + if (x === firstWordInLine) { + line += currLine[currLine.length - 1] + " "; + continue; + } + } + + line += currLine[0] + " "; + } // Remove last blank + + + line = line.substr(line.length - 1) == " " ? line.substr(0, line.length - 1) : line; // lastLength -= blankSpace.width; + + lastLength = calculateFontSpace(line, formObject, fontSize).width; // Calculate startX + + switch (formObject.textAlign) { + case "right": + startX = width - lastLength - borderPadding; + break; + + case "center": + startX = (width - lastLength) / 2; + break; + + case "left": + default: + startX = borderPadding; + break; + } + + text += f2(startX) + " " + f2(lastY) + " Td\n"; + text += "(" + pdfEscape(line) + ") Tj\n"; // reset X in PDF + + text += -f2(startX) + " 0 Td\n"; // After a Line, adjust y position + + lastY = -(fontSize + lineSpacing); // Reset for next iteration step + + lastLength = 0; + firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1; + lineCount++; + lastLine = ""; + continue Line; + } + } + + break; + } + + returnValue.text = text; + returnValue.fontSize = fontSize; + return returnValue; + }; + /** + * Small workaround for calculating the TextMetric approximately. + * + * @param text + * @param fontsize + * @returns {TextMetrics} (Has Height and Width) + */ + + + var calculateFontSpace = function calculateFontSpace(text, formObject, fontSize) { + var font = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle); + var width = formObject.scope.getStringUnitWidth(text, { + font: font, + fontSize: parseFloat(fontSize), + charSpace: 0 + }) * parseFloat(fontSize); + var height = formObject.scope.getStringUnitWidth("3", { + font: font, + fontSize: parseFloat(fontSize), + charSpace: 0 + }) * parseFloat(fontSize) * 1.5; + return { + height: height, + width: width + }; + }; + + var acroformPluginTemplate = { + fields: [], + xForms: [], + + /** + * acroFormDictionaryRoot contains information about the AcroForm + * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has + * 1: The Object ID of the Root + */ + acroFormDictionaryRoot: null, + + /** + * After the PDF gets evaluated, the reference to the root has to be + * reset, this indicates, whether the root has already been printed + * out + */ + printedOut: false, + internal: null, + isInitialized: false + }; + + var annotReferenceCallback = function annotReferenceCallback(scope) { + //set objId to undefined and force it to get a new objId on buildDocument + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined; + var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields; + + for (var i in fields) { + if (fields.hasOwnProperty(i)) { + var formObject = fields[i]; //set objId to undefined and force it to get a new objId on buildDocument + + formObject.objId = undefined; // add Annot Reference! + + if (formObject.hasAnnotation) { + // If theres an Annotation Widget in the Form Object, put the + // Reference in the /Annot array + createAnnotationReference(formObject, scope); + } + } + } + }; + + var putForm = function putForm(formObject) { + if (formObject.scope.internal.acroformPlugin.printedOut) { + formObject.scope.internal.acroformPlugin.printedOut = false; + formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null; + } + + formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(formObject); + }; + /** + * Create the Reference to the widgetAnnotation, so that it gets referenced + * in the Annot[] int the+ (Requires the Annotation Plugin) + */ + + + var createAnnotationReference = function createAnnotationReference(object, scope) { + var options = { + type: "reference", + object: object + }; + + var findEntry = function findEntry(entry) { + return entry.type === options.type && entry.object === options.object; + }; + + if (scope.internal.getPageInfo(object.page).pageContext.annotations.find(findEntry) === undefined) { + scope.internal.getPageInfo(object.page).pageContext.annotations.push(options); + } + }; // Callbacks + + + var putCatalogCallback = function putCatalogCallback(scope) { + // Put reference to AcroForm to DocumentCatalog + if (typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== "undefined") { + // for safety, shouldn't normally be the case + scope.internal.write("/AcroForm " + scope.internal.acroformPlugin.acroFormDictionaryRoot.objId + " " + 0 + " R"); + } else { + throw new Error("putCatalogCallback: Root missing."); + } + }; + /** + * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm + * Dictionary + */ + + + var AcroFormDictionaryCallback = function AcroFormDictionaryCallback(scope) { + // Remove event + scope.internal.events.unsubscribe(scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID); + delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID; + scope.internal.acroformPlugin.printedOut = true; + }; + /** + * Creates the single Fields and writes them into the Document + * + * If fieldArray is set, use the fields that are inside it instead of the + * fields from the AcroRoot (for the FormXObjects...) + */ + + + var createFieldCallback = function createFieldCallback(fieldArray, scope) { + var standardFields = !fieldArray; + + if (!fieldArray) { + // in case there is no fieldArray specified, we want to print out + // the Fields of the AcroForm + // Print out Root + scope.internal.newObjectDeferredBegin(scope.internal.acroformPlugin.acroFormDictionaryRoot.objId, true); + scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream(); + } + + fieldArray = fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids; + + for (var i in fieldArray) { + if (fieldArray.hasOwnProperty(i)) { + var fieldObject = fieldArray[i]; + var keyValueList = []; + var oldRect = fieldObject.Rect; + + if (fieldObject.Rect) { + fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope); + } // Start Writing the Object + + + scope.internal.newObjectDeferredBegin(fieldObject.objId, true); + fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(fieldObject); + + if (_typeof(fieldObject) === "object" && typeof fieldObject.getKeyValueListForStream === "function") { + keyValueList = fieldObject.getKeyValueListForStream(); + } + + fieldObject.Rect = oldRect; + + if (fieldObject.hasAppearanceStream && !fieldObject.appearanceStreamContent) { + // Calculate Appearance + var appearance = calculateAppearanceStream(fieldObject); + keyValueList.push({ + key: "AP", + value: "<>" + }); + scope.internal.acroformPlugin.xForms.push(appearance); + } // Assume AppearanceStreamContent is a Array with N,R,D (at least + // one of them!) + + + if (fieldObject.appearanceStreamContent) { + var appearanceStreamString = ""; // Iterate over N,R and D + + for (var k in fieldObject.appearanceStreamContent) { + if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) { + var value = fieldObject.appearanceStreamContent[k]; + appearanceStreamString += "/" + k + " "; + appearanceStreamString += "<<"; + + if (Object.keys(value).length >= 1 || Array.isArray(value)) { + // appearanceStream is an Array or Object! + for (var i in value) { + if (value.hasOwnProperty(i)) { + var obj = value[i]; + + if (typeof obj === "function") { + // if Function is referenced, call it in order + // to get the FormXObject + obj = obj.call(scope, fieldObject); + } + + appearanceStreamString += "/" + i + " " + obj + " "; // In case the XForm is already used, e.g. OffState + // of CheckBoxes, don't add it + + if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0)) scope.internal.acroformPlugin.xForms.push(obj); + } + } + } else { + obj = value; + + if (typeof obj === "function") { + // if Function is referenced, call it in order to + // get the FormXObject + obj = obj.call(scope, fieldObject); + } + + appearanceStreamString += "/" + i + " " + obj; + if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0)) scope.internal.acroformPlugin.xForms.push(obj); + } + + appearanceStreamString += ">>"; + } + } // appearance stream is a normal Object.. + + + keyValueList.push({ + key: "AP", + value: "<<\n" + appearanceStreamString + ">>" + }); + } + + scope.internal.putStream({ + additionalKeyValues: keyValueList, + objectId: fieldObject.objId + }); + scope.internal.out("endobj"); + } + } + + if (standardFields) { + createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope); + } + }; + + var createXFormObjectCallback = function createXFormObjectCallback(fieldArray, scope) { + for (var i in fieldArray) { + if (fieldArray.hasOwnProperty(i)) { + var key = i; + var fieldObject = fieldArray[i]; // Start Writing the Object + + scope.internal.newObjectDeferredBegin(fieldObject.objId, true); + + if (_typeof(fieldObject) === "object" && typeof fieldObject.putStream === "function") { + fieldObject.putStream(); + } + + delete fieldArray[key]; + } + } + }; + + var initializeAcroForm = function initializeAcroForm(scope, formObject) { + formObject.scope = scope; + + if (scope.internal !== undefined && (scope.internal.acroformPlugin === undefined || scope.internal.acroformPlugin.isInitialized === false)) { + AcroFormField.FieldNum = 0; + scope.internal.acroformPlugin = JSON.parse(JSON.stringify(acroformPluginTemplate)); + + if (scope.internal.acroformPlugin.acroFormDictionaryRoot) { + throw new Error("Exception while creating AcroformDictionary"); + } + + scaleFactor = scope.internal.scaleFactor; // The Object Number of the AcroForm Dictionary + + scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary(); + scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope; // add Callback for creating the AcroForm Dictionary + + scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe("postPutResources", function () { + AcroFormDictionaryCallback(scope); + }); + scope.internal.events.subscribe("buildDocument", function () { + annotReferenceCallback(scope); + }); // buildDocument + // Register event, that is triggered when the DocumentCatalog is + // written, in order to add /AcroForm + + scope.internal.events.subscribe("putCatalog", function () { + putCatalogCallback(scope); + }); // Register event, that creates all Fields + + scope.internal.events.subscribe("postPutPages", function (fieldArray) { + createFieldCallback(fieldArray, scope); + }); + scope.internal.acroformPlugin.isInitialized = true; + } + }; //PDF 32000-1:2008, page 26, 7.3.6 + + + var arrayToPdfArray = jsPDFAPI.__acroform__.arrayToPdfArray = function (array, objId, scope) { + var encryptor = function encryptor(data) { + return data; + }; + + if (Array.isArray(array)) { + var content = "["; + + for (var i = 0; i < array.length; i++) { + if (i !== 0) { + content += " "; + } + + switch (_typeof(array[i])) { + case "boolean": + case "number": + case "object": + content += array[i].toString(); + break; + + case "string": + if (array[i].substr(0, 1) !== "/") { + if (typeof objId !== "undefined" && scope) encryptor = scope.internal.getEncryptor(objId); + content += "(" + pdfEscape(encryptor(array[i].toString())) + ")"; + } else { + content += array[i].toString(); + } + + break; + } + } + + content += "]"; + return content; + } + + throw new Error("Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray"); + }; + + function getMatches(string, regex, index) { + index || (index = 1); // default to the first capturing group + + var matches = []; + var match; + + while (match = regex.exec(string)) { + matches.push(match[index]); + } + + return matches; + } + + var pdfArrayToStringArray = function pdfArrayToStringArray(array) { + var result = []; + + if (typeof array === "string") { + result = getMatches(array, /\((.*?)\)/g); + } + + return result; + }; + + var toPdfString = function toPdfString(string, objId, scope) { + var encryptor = function encryptor(data) { + return data; + }; + + if (typeof objId !== "undefined" && scope) encryptor = scope.internal.getEncryptor(objId); + string = string || ""; + string.toString(); + string = "(" + pdfEscape(encryptor(string)) + ")"; + return string; + }; // ########################## + // Classes + // ########################## + + /** + * @class AcroFormPDFObject + * @classdesc A AcroFormPDFObject + */ + + + var AcroFormPDFObject = function AcroFormPDFObject() { + this._objId = undefined; + this._scope = undefined; + /** + * @name AcroFormPDFObject#objId + * @type {any} + */ + + Object.defineProperty(this, "objId", { + get: function get() { + if (typeof this._objId === "undefined") { + if (typeof this.scope === "undefined") { + return undefined; + } + + this._objId = this.scope.internal.newObjectDeferred(); + } + + return this._objId; + }, + set: function set(value) { + this._objId = value; + } + }); + Object.defineProperty(this, "scope", { + value: this._scope, + writable: true + }); + }; + /** + * @function AcroFormPDFObject.toString + */ + + + AcroFormPDFObject.prototype.toString = function () { + return this.objId + " 0 R"; + }; + + AcroFormPDFObject.prototype.putStream = function () { + var keyValueList = this.getKeyValueListForStream(); + this.scope.internal.putStream({ + data: this.stream, + additionalKeyValues: keyValueList, + objectId: this.objId + }); + this.scope.internal.out("endobj"); + }; + /** + * Returns an key-value-List of all non-configurable Variables from the Object + * + * @name getKeyValueListForStream + * @returns {string} + */ + + + AcroFormPDFObject.prototype.getKeyValueListForStream = function () { + var keyValueList = []; + var keys = Object.getOwnPropertyNames(this).filter(function (key) { + return key != "content" && key != "appearanceStreamContent" && key != "scope" && key != "objId" && key.substring(0, 1) != "_"; + }); + + for (var i in keys) { + if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) { + var key = keys[i]; + var value = this[key]; + + if (value) { + if (Array.isArray(value)) { + keyValueList.push({ + key: key, + value: arrayToPdfArray(value, this.objId, this.scope) + }); + } else if (value instanceof AcroFormPDFObject) { + // In case it is a reference to another PDFObject, + // take the reference number + value.scope = this.scope; + keyValueList.push({ + key: key, + value: value.objId + " 0 R" + }); + } else if (typeof value !== "function") { + keyValueList.push({ + key: key, + value: value + }); + } + } + } + } + + return keyValueList; + }; + + var AcroFormXObject = function AcroFormXObject() { + AcroFormPDFObject.call(this); + Object.defineProperty(this, "Type", { + value: "/XObject", + configurable: false, + writable: true + }); + Object.defineProperty(this, "Subtype", { + value: "/Form", + configurable: false, + writable: true + }); + Object.defineProperty(this, "FormType", { + value: 1, + configurable: false, + writable: true + }); + var _BBox = []; + Object.defineProperty(this, "BBox", { + configurable: false, + get: function get() { + return _BBox; + }, + set: function set(value) { + _BBox = value; + } + }); + Object.defineProperty(this, "Resources", { + value: "2 0 R", + configurable: false, + writable: true + }); + + var _stream; + + Object.defineProperty(this, "stream", { + enumerable: false, + configurable: true, + set: function set(value) { + _stream = value.trim(); + }, + get: function get() { + if (_stream) { + return _stream; + } else { + return null; + } + } + }); + }; + + inherit(AcroFormXObject, AcroFormPDFObject); + + var AcroFormDictionary = function AcroFormDictionary() { + AcroFormPDFObject.call(this); + var _Kids = []; + Object.defineProperty(this, "Kids", { + enumerable: false, + configurable: true, + get: function get() { + if (_Kids.length > 0) { + return _Kids; + } else { + return undefined; + } + } + }); + Object.defineProperty(this, "Fields", { + enumerable: false, + configurable: false, + get: function get() { + return _Kids; + } + }); // Default Appearance + + var _DA; + + Object.defineProperty(this, "DA", { + enumerable: false, + configurable: false, + get: function get() { + if (!_DA) { + return undefined; + } + + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + return "(" + pdfEscape(encryptor(_DA)) + ")"; + }, + set: function set(value) { + _DA = value; + } + }); + }; + + inherit(AcroFormDictionary, AcroFormPDFObject); + /** + * The Field Object contains the Variables, that every Field needs + * + * @class AcroFormField + * @classdesc An AcroForm FieldObject + */ + + var AcroFormField = function AcroFormField() { + AcroFormPDFObject.call(this); //Annotation-Flag See Table 165 + + var _F = 4; + Object.defineProperty(this, "F", { + enumerable: false, + configurable: false, + get: function get() { + return _F; + }, + set: function set(value) { + if (!isNaN(value)) { + _F = value; + } else { + throw new Error('Invalid value "' + value + '" for attribute F supplied.'); + } + } + }); + /** + * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen. + * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page. + * + * @name AcroFormField#showWhenPrinted + * @default true + * @type {boolean} + */ + + Object.defineProperty(this, "showWhenPrinted", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(_F, 3)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.F = setBitForPdf(_F, 3); + } else { + this.F = clearBitForPdf(_F, 3); + } + } + }); + var _Ff = 0; + Object.defineProperty(this, "Ff", { + enumerable: false, + configurable: false, + get: function get() { + return _Ff; + }, + set: function set(value) { + if (!isNaN(value)) { + _Ff = value; + } else { + throw new Error('Invalid value "' + value + '" for attribute Ff supplied.'); + } + } + }); + var _Rect = []; + Object.defineProperty(this, "Rect", { + enumerable: false, + configurable: false, + get: function get() { + if (_Rect.length === 0) { + return undefined; + } + + return _Rect; + }, + set: function set(value) { + if (typeof value !== "undefined") { + _Rect = value; + } else { + _Rect = []; + } + } + }); + /** + * The x-position of the field. + * + * @name AcroFormField#x + * @default null + * @type {number} + */ + + Object.defineProperty(this, "x", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[0])) { + return 0; + } + + return _Rect[0]; + }, + set: function set(value) { + _Rect[0] = value; + } + }); + /** + * The y-position of the field. + * + * @name AcroFormField#y + * @default null + * @type {number} + */ + + Object.defineProperty(this, "y", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[1])) { + return 0; + } + + return _Rect[1]; + }, + set: function set(value) { + _Rect[1] = value; + } + }); + /** + * The width of the field. + * + * @name AcroFormField#width + * @default null + * @type {number} + */ + + Object.defineProperty(this, "width", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[2])) { + return 0; + } + + return _Rect[2]; + }, + set: function set(value) { + _Rect[2] = value; + } + }); + /** + * The height of the field. + * + * @name AcroFormField#height + * @default null + * @type {number} + */ + + Object.defineProperty(this, "height", { + enumerable: true, + configurable: true, + get: function get() { + if (!_Rect || isNaN(_Rect[3])) { + return 0; + } + + return _Rect[3]; + }, + set: function set(value) { + _Rect[3] = value; + } + }); + var _FT = ""; + Object.defineProperty(this, "FT", { + enumerable: true, + configurable: false, + get: function get() { + return _FT; + }, + set: function set(value) { + switch (value) { + case "/Btn": + case "/Tx": + case "/Ch": + case "/Sig": + _FT = value; + break; + + default: + throw new Error('Invalid value "' + value + '" for attribute FT supplied.'); + } + } + }); + var _T = null; + Object.defineProperty(this, "T", { + enumerable: true, + configurable: false, + get: function get() { + if (!_T || _T.length < 1) { + // In case of a Child from a Radio´Group, you don't need a FieldName + if (this instanceof AcroFormChildClass) { + return undefined; + } + + _T = "FieldObject" + AcroFormField.FieldNum++; + } + + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + return "(" + pdfEscape(encryptor(_T)) + ")"; + }, + set: function set(value) { + _T = value.toString(); + } + }); + /** + * (Optional) The partial field name (see 12.7.3.2, “Field Names”). + * + * @name AcroFormField#fieldName + * @default null + * @type {string} + */ + + Object.defineProperty(this, "fieldName", { + configurable: true, + enumerable: true, + get: function get() { + return _T; + }, + set: function set(value) { + _T = value; + } + }); + var _fontName = "helvetica"; + /** + * The fontName of the font to be used. + * + * @name AcroFormField#fontName + * @default 'helvetica' + * @type {string} + */ + + Object.defineProperty(this, "fontName", { + enumerable: true, + configurable: true, + get: function get() { + return _fontName; + }, + set: function set(value) { + _fontName = value; + } + }); + var _fontStyle = "normal"; + /** + * The fontStyle of the font to be used. + * + * @name AcroFormField#fontStyle + * @default 'normal' + * @type {string} + */ + + Object.defineProperty(this, "fontStyle", { + enumerable: true, + configurable: true, + get: function get() { + return _fontStyle; + }, + set: function set(value) { + _fontStyle = value; + } + }); + var _fontSize = 0; + /** + * The fontSize of the font to be used. + * + * @name AcroFormField#fontSize + * @default 0 (for auto) + * @type {number} + */ + + Object.defineProperty(this, "fontSize", { + enumerable: true, + configurable: true, + get: function get() { + return _fontSize; + }, + set: function set(value) { + _fontSize = value; + } + }); + var _maxFontSize = undefined; + /** + * The maximum fontSize of the font to be used. + * + * @name AcroFormField#maxFontSize + * @default 0 (for auto) + * @type {number} + */ + + Object.defineProperty(this, "maxFontSize", { + enumerable: true, + configurable: true, + get: function get() { + if (_maxFontSize === undefined) { + // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit) + // ("50" is transformed to the "user space" but then used in "pdf space") + return 50 / scaleFactor; + } else { + return _maxFontSize; + } + }, + set: function set(value) { + _maxFontSize = value; + } + }); + var _color = "black"; + /** + * The color of the text + * + * @name AcroFormField#color + * @default 'black' + * @type {string|rgba} + */ + + Object.defineProperty(this, "color", { + enumerable: true, + configurable: true, + get: function get() { + return _color; + }, + set: function set(value) { + _color = value; + } + }); + var _DA = "/F1 0 Tf 0 g"; // Defines the default appearance (Needed for variable Text) + + Object.defineProperty(this, "DA", { + enumerable: true, + configurable: false, + get: function get() { + if (!_DA || this instanceof AcroFormChildClass || this instanceof AcroFormTextField) { + return undefined; + } + + return toPdfString(_DA, this.objId, this.scope); + }, + set: function set(value) { + value = value.toString(); + _DA = value; + } + }); + var _DV = null; + Object.defineProperty(this, "DV", { + enumerable: false, + configurable: false, + get: function get() { + if (!_DV) { + return undefined; + } + + if (this instanceof AcroFormButton === false) { + return toPdfString(_DV, this.objId, this.scope); + } + + return _DV; + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === false) { + if (value.substr(0, 1) === "(") { + _DV = pdfUnescape(value.substr(1, value.length - 2)); + } else { + _DV = pdfUnescape(value); + } + } else { + _DV = value; + } + } + }); + /** + * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value. + * + * @name AcroFormField#defaultValue + * @default null + * @type {any} + */ + + Object.defineProperty(this, "defaultValue", { + enumerable: true, + configurable: true, + get: function get() { + if (this instanceof AcroFormButton === true) { + return pdfUnescape(_DV.substr(1, _DV.length - 1)); + } else { + return _DV; + } + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === true) { + _DV = "/" + value; + } else { + _DV = value; + } + } + }); + var _V = null; + Object.defineProperty(this, "_V", { + enumerable: false, + configurable: false, + get: function get() { + if (!_V) { + return undefined; + } + + return _V; + }, + set: function set(value) { + this.V = value; + } + }); + Object.defineProperty(this, "V", { + enumerable: false, + configurable: false, + get: function get() { + if (!_V) { + return undefined; + } + + if (this instanceof AcroFormButton === false) { + return toPdfString(_V, this.objId, this.scope); + } + + return _V; + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === false) { + if (value.substr(0, 1) === "(") { + _V = pdfUnescape(value.substr(1, value.length - 2)); + } else { + _V = pdfUnescape(value); + } + } else { + _V = value; + } + } + }); + /** + * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information. + * + * @name AcroFormField#value + * @default null + * @type {any} + */ + + Object.defineProperty(this, "value", { + enumerable: true, + configurable: true, + get: function get() { + if (this instanceof AcroFormButton === true) { + return pdfUnescape(_V.substr(1, _V.length - 1)); + } else { + return _V; + } + }, + set: function set(value) { + value = value.toString(); + + if (this instanceof AcroFormButton === true) { + _V = "/" + value; + } else { + _V = value; + } + } + }); + /** + * Check if field has annotations + * + * @name AcroFormField#hasAnnotation + * @readonly + * @type {boolean} + */ + + Object.defineProperty(this, "hasAnnotation", { + enumerable: true, + configurable: true, + get: function get() { + return this.Rect; + } + }); + Object.defineProperty(this, "Type", { + enumerable: true, + configurable: false, + get: function get() { + return this.hasAnnotation ? "/Annot" : null; + } + }); + Object.defineProperty(this, "Subtype", { + enumerable: true, + configurable: false, + get: function get() { + return this.hasAnnotation ? "/Widget" : null; + } + }); + var _hasAppearanceStream = false; + /** + * true if field has an appearanceStream + * + * @name AcroFormField#hasAppearanceStream + * @readonly + * @type {boolean} + */ + + Object.defineProperty(this, "hasAppearanceStream", { + enumerable: true, + configurable: true, + get: function get() { + return _hasAppearanceStream; + }, + set: function set(value) { + value = Boolean(value); + _hasAppearanceStream = value; + } + }); + /** + * The page on which the AcroFormField is placed + * + * @name AcroFormField#page + * @type {number} + */ + + var _page; + + Object.defineProperty(this, "page", { + enumerable: true, + configurable: true, + get: function get() { + if (!_page) { + return undefined; + } + + return _page; + }, + set: function set(value) { + _page = value; + } + }); + /** + * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database. + * + * @name AcroFormField#readOnly + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "readOnly", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 1)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 1); + } else { + this.Ff = clearBitForPdf(this.Ff, 1); + } + } + }); + /** + * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”). + * + * @name AcroFormField#required + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "required", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 2)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 2); + } else { + this.Ff = clearBitForPdf(this.Ff, 2); + } + } + }); + /** + * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”) + * + * @name AcroFormField#noExport + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "noExport", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 3)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 3); + } else { + this.Ff = clearBitForPdf(this.Ff, 3); + } + } + }); + var _Q = null; + Object.defineProperty(this, "Q", { + enumerable: true, + configurable: false, + get: function get() { + if (_Q === null) { + return undefined; + } + + return _Q; + }, + set: function set(value) { + if ([0, 1, 2].indexOf(value) !== -1) { + _Q = value; + } else { + throw new Error('Invalid value "' + value + '" for attribute Q supplied.'); + } + } + }); + /** + * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text: + * 'left', 'center', 'right' + * + * @name AcroFormField#textAlign + * @default 'left' + * @type {string} + */ + + Object.defineProperty(this, "textAlign", { + get: function get() { + var result; + + switch (_Q) { + case 0: + default: + result = "left"; + break; + + case 1: + result = "center"; + break; + + case 2: + result = "right"; + break; + } + + return result; + }, + configurable: true, + enumerable: true, + set: function set(value) { + switch (value) { + case "right": + case 2: + _Q = 2; + break; + + case "center": + case 1: + _Q = 1; + break; + + case "left": + case 0: + default: + _Q = 0; + } + } + }); + }; + + inherit(AcroFormField, AcroFormPDFObject); + /** + * @class AcroFormChoiceField + * @extends AcroFormField + */ + + var AcroFormChoiceField = function AcroFormChoiceField() { + AcroFormField.call(this); // Field Type = Choice Field + + this.FT = "/Ch"; // options + + this.V = "()"; + this.fontName = "zapfdingbats"; // Top Index + + var _TI = 0; + Object.defineProperty(this, "TI", { + enumerable: true, + configurable: false, + get: function get() { + return _TI; + }, + set: function set(value) { + _TI = value; + } + }); + /** + * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0. + * + * @name AcroFormChoiceField#topIndex + * @default 0 + * @type {number} + */ + + Object.defineProperty(this, "topIndex", { + enumerable: true, + configurable: true, + get: function get() { + return _TI; + }, + set: function set(value) { + _TI = value; + } + }); + var _Opt = []; + Object.defineProperty(this, "Opt", { + enumerable: true, + configurable: false, + get: function get() { + return arrayToPdfArray(_Opt, this.objId, this.scope); + }, + set: function set(value) { + _Opt = pdfArrayToStringArray(value); + } + }); + /** + * @memberof AcroFormChoiceField + * @name getOptions + * @function + * @instance + * @returns {array} array of Options + */ + + this.getOptions = function () { + return _Opt; + }; + /** + * @memberof AcroFormChoiceField + * @name setOptions + * @function + * @instance + * @param {array} value + */ + + + this.setOptions = function (value) { + _Opt = value; + + if (this.sort) { + _Opt.sort(); + } + }; + /** + * @memberof AcroFormChoiceField + * @name addOption + * @function + * @instance + * @param {string} value + */ + + + this.addOption = function (value) { + value = value || ""; + value = value.toString(); + + _Opt.push(value); + + if (this.sort) { + _Opt.sort(); + } + }; + /** + * @memberof AcroFormChoiceField + * @name removeOption + * @function + * @instance + * @param {string} value + * @param {boolean} allEntries (default: false) + */ + + + this.removeOption = function (value, allEntries) { + allEntries = allEntries || false; + value = value || ""; + value = value.toString(); + + while (_Opt.indexOf(value) !== -1) { + _Opt.splice(_Opt.indexOf(value), 1); + + if (allEntries === false) { + break; + } + } + }; + /** + * If set, the field is a combo box; if clear, the field is a list box. + * + * @name AcroFormChoiceField#combo + * @default false + * @type {boolean} + */ + + + Object.defineProperty(this, "combo", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 18)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 18); + } else { + this.Ff = clearBitForPdf(this.Ff, 18); + } + } + }); + /** + * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set. + * + * @name AcroFormChoiceField#edit + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "edit", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 19)); + }, + set: function set(value) { + //PDF 32000-1:2008, page 444 + if (this.combo === true) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 19); + } else { + this.Ff = clearBitForPdf(this.Ff, 19); + } + } + } + }); + /** + * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231). + * + * @name AcroFormChoiceField#sort + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "sort", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 20)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 20); + + _Opt.sort(); + } else { + this.Ff = clearBitForPdf(this.Ff, 20); + } + } + }); + /** + * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected + * + * @name AcroFormChoiceField#multiSelect + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "multiSelect", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 22)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 22); + } else { + this.Ff = clearBitForPdf(this.Ff, 22); + } + } + }); + /** + * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set. + * + * @name AcroFormChoiceField#doNotSpellCheck + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "doNotSpellCheck", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 23)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 23); + } else { + this.Ff = clearBitForPdf(this.Ff, 23); + } + } + }); + /** + * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step. + * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field. + * + * @name AcroFormChoiceField#commitOnSelChange + * @default false + * @type {boolean} + */ + + Object.defineProperty(this, "commitOnSelChange", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 27)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 27); + } else { + this.Ff = clearBitForPdf(this.Ff, 27); + } + } + }); + this.hasAppearanceStream = false; + }; + + inherit(AcroFormChoiceField, AcroFormField); + /** + * @class AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ + + var AcroFormListBox = function AcroFormListBox() { + AcroFormChoiceField.call(this); + this.fontName = "helvetica"; //PDF 32000-1:2008, page 444 + + this.combo = false; + }; + + inherit(AcroFormListBox, AcroFormChoiceField); + /** + * @class AcroFormComboBox + * @extends AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ + + var AcroFormComboBox = function AcroFormComboBox() { + AcroFormListBox.call(this); + this.combo = true; + }; + + inherit(AcroFormComboBox, AcroFormListBox); + /** + * @class AcroFormEditBox + * @extends AcroFormComboBox + * @extends AcroFormListBox + * @extends AcroFormChoiceField + * @extends AcroFormField + */ + + var AcroFormEditBox = function AcroFormEditBox() { + AcroFormComboBox.call(this); + this.edit = true; + }; + + inherit(AcroFormEditBox, AcroFormComboBox); + /** + * @class AcroFormButton + * @extends AcroFormField + */ + + var AcroFormButton = function AcroFormButton() { + AcroFormField.call(this); + this.FT = "/Btn"; + /** + * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected. + * + * @name AcroFormButton#noToggleToOff + * @type {boolean} + */ + + Object.defineProperty(this, "noToggleToOff", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 15)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 15); + } else { + this.Ff = clearBitForPdf(this.Ff, 15); + } + } + }); + /** + * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear. + * + * @name AcroFormButton#radio + * @type {boolean} + */ + + Object.defineProperty(this, "radio", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 16)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 16); + } else { + this.Ff = clearBitForPdf(this.Ff, 16); + } + } + }); + /** + * If set, the field is a pushbutton that does not retain a permanent value. + * + * @name AcroFormButton#pushButton + * @type {boolean} + */ + + Object.defineProperty(this, "pushButton", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 17)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 17); + } else { + this.Ff = clearBitForPdf(this.Ff, 17); + } + } + }); + /** + * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons). + * + * @name AcroFormButton#radioIsUnison + * @type {boolean} + */ + + Object.defineProperty(this, "radioIsUnison", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 26)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 26); + } else { + this.Ff = clearBitForPdf(this.Ff, 26); + } + } + }); + var _MK = {}; + Object.defineProperty(this, "MK", { + enumerable: false, + configurable: false, + get: function get() { + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + + if (Object.keys(_MK).length !== 0) { + var result = []; + result.push("<<"); + var key; + + for (key in _MK) { + result.push("/" + key + " (" + pdfEscape(encryptor(_MK[key])) + ")"); + } + + result.push(">>"); + return result.join("\n"); + } + + return undefined; + }, + set: function set(value) { + if (_typeof(value) === "object") { + _MK = value; + } + } + }); + /** + * From the PDF reference: + * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user. + * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, "Button Fields"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, "Button Fields") and radio buttons (Radio Buttons in 12.7.4.2, "Button Fields"). + * + * - '8' = Cross, + * - 'l' = Circle, + * - '' = nothing + * @name AcroFormButton#caption + * @type {string} + */ + + Object.defineProperty(this, "caption", { + enumerable: true, + configurable: true, + get: function get() { + return _MK.CA || ""; + }, + set: function set(value) { + if (typeof value === "string") { + _MK.CA = value; + } + } + }); + + var _AS; + + Object.defineProperty(this, "AS", { + enumerable: false, + configurable: false, + get: function get() { + return _AS; + }, + set: function set(value) { + _AS = value; + } + }); + /** + * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, "Appearance Streams") + * + * @name AcroFormButton#appearanceState + * @type {any} + */ + + Object.defineProperty(this, "appearanceState", { + enumerable: true, + configurable: true, + get: function get() { + return _AS.substr(1, _AS.length - 1); + }, + set: function set(value) { + _AS = "/" + value; + } + }); + }; + + inherit(AcroFormButton, AcroFormField); + /** + * @class AcroFormPushButton + * @extends AcroFormButton + * @extends AcroFormField + */ + + var AcroFormPushButton = function AcroFormPushButton() { + AcroFormButton.call(this); + this.pushButton = true; + }; + + inherit(AcroFormPushButton, AcroFormButton); + /** + * @class AcroFormRadioButton + * @extends AcroFormButton + * @extends AcroFormField + */ + + var AcroFormRadioButton = function AcroFormRadioButton() { + AcroFormButton.call(this); + this.radio = true; + this.pushButton = false; + var _Kids = []; + Object.defineProperty(this, "Kids", { + enumerable: true, + configurable: false, + get: function get() { + return _Kids; + }, + set: function set(value) { + if (typeof value !== "undefined") { + _Kids = value; + } else { + _Kids = []; + } + } + }); + }; + + inherit(AcroFormRadioButton, AcroFormButton); + /** + * The Child class of a RadioButton (the radioGroup) -> The single Buttons + * + * @class AcroFormChildClass + * @extends AcroFormField + * @ignore + */ + + var AcroFormChildClass = function AcroFormChildClass() { + AcroFormField.call(this); + + var _parent; + + Object.defineProperty(this, "Parent", { + enumerable: false, + configurable: false, + get: function get() { + return _parent; + }, + set: function set(value) { + _parent = value; + } + }); + + var _optionName; + + Object.defineProperty(this, "optionName", { + enumerable: false, + configurable: true, + get: function get() { + return _optionName; + }, + set: function set(value) { + _optionName = value; + } + }); + var _MK = {}; + Object.defineProperty(this, "MK", { + enumerable: false, + configurable: false, + get: function get() { + var encryptor = function encryptor(data) { + return data; + }; + + if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId); + var result = []; + result.push("<<"); + var key; + + for (key in _MK) { + result.push("/" + key + " (" + pdfEscape(encryptor(_MK[key])) + ")"); + } + + result.push(">>"); + return result.join("\n"); + }, + set: function set(value) { + if (_typeof(value) === "object") { + _MK = value; + } + } + }); + /** + * From the PDF reference: + * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user. + * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, "Button Fields"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, "Button Fields") and radio buttons (Radio Buttons in 12.7.4.2, "Button Fields"). + * + * - '8' = Cross, + * - 'l' = Circle, + * - '' = nothing + * @name AcroFormButton#caption + * @type {string} + */ + + Object.defineProperty(this, "caption", { + enumerable: true, + configurable: true, + get: function get() { + return _MK.CA || ""; + }, + set: function set(value) { + if (typeof value === "string") { + _MK.CA = value; + } + } + }); + + var _AS; + + Object.defineProperty(this, "AS", { + enumerable: false, + configurable: false, + get: function get() { + return _AS; + }, + set: function set(value) { + _AS = value; + } + }); + /** + * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, "Appearance Streams") + * + * @name AcroFormButton#appearanceState + * @type {any} + */ + + Object.defineProperty(this, "appearanceState", { + enumerable: true, + configurable: true, + get: function get() { + return _AS.substr(1, _AS.length - 1); + }, + set: function set(value) { + _AS = "/" + value; + } + }); + this.caption = "l"; + this.appearanceState = "Off"; // todo: set AppearanceType as variable that can be set from the + // outside... + + this._AppearanceType = AcroFormAppearance.RadioButton.Circle; // The Default appearanceType is the Circle + + this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(this.optionName); + }; + + inherit(AcroFormChildClass, AcroFormField); + + AcroFormRadioButton.prototype.setAppearance = function (appearance) { + if (!("createAppearanceStream" in appearance && "getCA" in appearance)) { + throw new Error("Couldn't assign Appearance to RadioButton. Appearance was Invalid!"); + } + + for (var objId in this.Kids) { + if (this.Kids.hasOwnProperty(objId)) { + var child = this.Kids[objId]; + child.appearanceStreamContent = appearance.createAppearanceStream(child.optionName); + child.caption = appearance.getCA(); + } + } + }; + + AcroFormRadioButton.prototype.createOption = function (name) { + // Create new Child for RadioGroup + var child = new AcroFormChildClass(); + child.Parent = this; + child.optionName = name; // Add to Parent + + this.Kids.push(child); + addField.call(this.scope, child); + return child; + }; + /** + * @class AcroFormCheckBox + * @extends AcroFormButton + * @extends AcroFormField + */ + + + var AcroFormCheckBox = function AcroFormCheckBox() { + AcroFormButton.call(this); + this.fontName = "zapfdingbats"; + this.caption = "3"; + this.appearanceState = "On"; + this.value = "On"; + this.textAlign = "center"; + this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream(); + }; + + inherit(AcroFormCheckBox, AcroFormButton); + /** + * @class AcroFormTextField + * @extends AcroFormField + */ + + var AcroFormTextField = function AcroFormTextField() { + AcroFormField.call(this); + this.FT = "/Tx"; + /** + * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line. + * + * @name AcroFormTextField#multiline + * @type {boolean} + */ + + Object.defineProperty(this, "multiline", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 13)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 13); + } else { + this.Ff = clearBitForPdf(this.Ff, 13); + } + } + }); + /** + * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field. + * + * @name AcroFormTextField#fileSelect + * @type {boolean} + */ + + Object.defineProperty(this, "fileSelect", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 21)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 21); + } else { + this.Ff = clearBitForPdf(this.Ff, 21); + } + } + }); + /** + * (PDF 1.4) If set, text entered in the field shall not be spell-checked. + * + * @name AcroFormTextField#doNotSpellCheck + * @type {boolean} + */ + + Object.defineProperty(this, "doNotSpellCheck", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 23)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 23); + } else { + this.Ff = clearBitForPdf(this.Ff, 23); + } + } + }); + /** + * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area. + * + * @name AcroFormTextField#doNotScroll + * @type {boolean} + */ + + Object.defineProperty(this, "doNotScroll", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 24)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 24); + } else { + this.Ff = clearBitForPdf(this.Ff, 24); + } + } + }); + /** + * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs. + * + * @name AcroFormTextField#comb + * @type {boolean} + */ + + Object.defineProperty(this, "comb", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 25)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 25); + } else { + this.Ff = clearBitForPdf(this.Ff, 25); + } + } + }); + /** + * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string. + * + * @name AcroFormTextField#richText + * @type {boolean} + */ + + Object.defineProperty(this, "richText", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 26)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 26); + } else { + this.Ff = clearBitForPdf(this.Ff, 26); + } + } + }); + var _MaxLen = null; + Object.defineProperty(this, "MaxLen", { + enumerable: true, + configurable: false, + get: function get() { + return _MaxLen; + }, + set: function set(value) { + _MaxLen = value; + } + }); + /** + * (Optional; inheritable) The maximum length of the field’s text, in characters. + * + * @name AcroFormTextField#maxLength + * @type {number} + */ + + Object.defineProperty(this, "maxLength", { + enumerable: true, + configurable: true, + get: function get() { + return _MaxLen; + }, + set: function set(value) { + if (Number.isInteger(value)) { + _MaxLen = value; + } + } + }); + Object.defineProperty(this, "hasAppearanceStream", { + enumerable: true, + configurable: true, + get: function get() { + return this.V || this.DV; + } + }); + }; + + inherit(AcroFormTextField, AcroFormField); + /** + * @class AcroFormPasswordField + * @extends AcroFormTextField + * @extends AcroFormField + */ + + var AcroFormPasswordField = function AcroFormPasswordField() { + AcroFormTextField.call(this); + /** + * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters. + * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set. + * + * @name AcroFormTextField#password + * @type {boolean} + */ + + Object.defineProperty(this, "password", { + enumerable: true, + configurable: true, + get: function get() { + return Boolean(getBitForPdf(this.Ff, 14)); + }, + set: function set(value) { + if (Boolean(value) === true) { + this.Ff = setBitForPdf(this.Ff, 14); + } else { + this.Ff = clearBitForPdf(this.Ff, 14); + } + } + }); + this.password = true; + }; + + inherit(AcroFormPasswordField, AcroFormTextField); // Contains Methods for creating standard appearances + + var AcroFormAppearance = { + CheckBox: { + createAppearanceStream: function createAppearanceStream() { + var appearance = { + N: { + On: AcroFormAppearance.CheckBox.YesNormal + }, + D: { + On: AcroFormAppearance.CheckBox.YesPushDown, + Off: AcroFormAppearance.CheckBox.OffPushDown + } + }; + return appearance; + }, + + /** + * Returns the standard On Appearance for a CheckBox + * + * @returns {AcroFormXObject} + */ + YesPushDown: function YesPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; + + var encodedColor = formObject.scope.__private__.encodeColorString(formObject.color); + + var calcRes = calculateX(formObject, formObject.caption); + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + stream.push("BMC"); + stream.push("q"); + stream.push("0 0 1 rg"); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf " + encodedColor); + stream.push("BT"); + stream.push(calcRes.text); + stream.push("ET"); + stream.push("Q"); + stream.push("EMC"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesNormal: function YesNormal(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; + + var encodedColor = formObject.scope.__private__.encodeColorString(formObject.color); + + var stream = []; + var height = AcroFormAppearance.internal.getHeight(formObject); + var width = AcroFormAppearance.internal.getWidth(formObject); + var calcRes = calculateX(formObject, formObject.caption); + stream.push("1 g"); + stream.push("0 0 " + f2(width) + " " + f2(height) + " re"); + stream.push("f"); + stream.push("q"); + stream.push("0 0 1 rg"); + stream.push("0 0 " + f2(width - 1) + " " + f2(height - 1) + " re"); + stream.push("W"); + stream.push("n"); + stream.push("0 g"); + stream.push("BT"); + stream.push("/" + fontKey + " " + f2(calcRes.fontSize) + " Tf " + encodedColor); + stream.push(calcRes.text); + stream.push("ET"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + + /** + * Returns the standard Off Appearance for a CheckBox + * + * @returns {AcroFormXObject} + */ + OffPushDown: function OffPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + xobj.stream = stream.join("\n"); + return xobj; + } + }, + RadioButton: { + Circle: { + createAppearanceStream: function createAppearanceStream(name) { + var appearanceStreamContent = { + D: { + Off: AcroFormAppearance.RadioButton.Circle.OffPushDown + }, + N: {} + }; + appearanceStreamContent.N[name] = AcroFormAppearance.RadioButton.Circle.YesNormal; + appearanceStreamContent.D[name] = AcroFormAppearance.RadioButton.Circle.YesPushDown; + return appearanceStreamContent; + }, + getCA: function getCA() { + return "l"; + }, + YesNormal: function YesNormal(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; // Make the Radius of the Circle relative to min(height, width) of formObject + + var DotRadius = AcroFormAppearance.internal.getWidth(formObject) <= AcroFormAppearance.internal.getHeight(formObject) ? AcroFormAppearance.internal.getWidth(formObject) / 4 : AcroFormAppearance.internal.getHeight(formObject) / 4; // The Borderpadding... + + DotRadius = Number((DotRadius * 0.9).toFixed(5)); + var c = AcroFormAppearance.internal.Bezier_C; + var DotRadiusBezier = Number((DotRadius * c).toFixed(5)); + /* + * The Following is a Circle created with Bezier-Curves. + */ + + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(DotRadius + " 0 m"); + stream.push(DotRadius + " " + DotRadiusBezier + " " + DotRadiusBezier + " " + DotRadius + " 0 " + DotRadius + " c"); + stream.push("-" + DotRadiusBezier + " " + DotRadius + " -" + DotRadius + " " + DotRadiusBezier + " -" + DotRadius + " 0 c"); + stream.push("-" + DotRadius + " -" + DotRadiusBezier + " -" + DotRadiusBezier + " -" + DotRadius + " 0 -" + DotRadius + " c"); + stream.push(DotRadiusBezier + " -" + DotRadius + " " + DotRadius + " -" + DotRadiusBezier + " " + DotRadius + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesPushDown: function YesPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var DotRadius = AcroFormAppearance.internal.getWidth(formObject) <= AcroFormAppearance.internal.getHeight(formObject) ? AcroFormAppearance.internal.getWidth(formObject) / 4 : AcroFormAppearance.internal.getHeight(formObject) / 4; // The Borderpadding... + + DotRadius = Number((DotRadius * 0.9).toFixed(5)); // Save results for later use; no need to waste + // processor ticks on doing math + + var k = Number((DotRadius * 2).toFixed(5)); + var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + var dc = Number((DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + stream.push("0.749023 g"); + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(k + " 0 m"); + stream.push(k + " " + kc + " " + kc + " " + k + " 0 " + k + " c"); + stream.push("-" + kc + " " + k + " -" + k + " " + kc + " -" + k + " 0 c"); + stream.push("-" + k + " -" + kc + " -" + kc + " -" + k + " 0 -" + k + " c"); + stream.push(kc + " -" + k + " " + k + " -" + kc + " " + k + " 0 c"); + stream.push("f"); + stream.push("Q"); + stream.push("0 g"); + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(DotRadius + " 0 m"); + stream.push("" + DotRadius + " " + dc + " " + dc + " " + DotRadius + " 0 " + DotRadius + " c"); + stream.push("-" + dc + " " + DotRadius + " -" + DotRadius + " " + dc + " -" + DotRadius + " 0 c"); + stream.push("-" + DotRadius + " -" + dc + " -" + dc + " -" + DotRadius + " 0 -" + DotRadius + " c"); + stream.push(dc + " -" + DotRadius + " " + DotRadius + " -" + dc + " " + DotRadius + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + OffPushDown: function OffPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var DotRadius = AcroFormAppearance.internal.getWidth(formObject) <= AcroFormAppearance.internal.getHeight(formObject) ? AcroFormAppearance.internal.getWidth(formObject) / 4 : AcroFormAppearance.internal.getHeight(formObject) / 4; // The Borderpadding... + + DotRadius = Number((DotRadius * 0.9).toFixed(5)); // Save results for later use; no need to waste + // processor ticks on doing math + + var k = Number((DotRadius * 2).toFixed(5)); + var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5)); + stream.push("0.749023 g"); + stream.push("q"); + stream.push("1 0 0 1 " + f5(AcroFormAppearance.internal.getWidth(formObject) / 2) + " " + f5(AcroFormAppearance.internal.getHeight(formObject) / 2) + " cm"); + stream.push(k + " 0 m"); + stream.push(k + " " + kc + " " + kc + " " + k + " 0 " + k + " c"); + stream.push("-" + kc + " " + k + " -" + k + " " + kc + " -" + k + " 0 c"); + stream.push("-" + k + " -" + kc + " -" + kc + " -" + k + " 0 -" + k + " c"); + stream.push(kc + " -" + k + " " + k + " -" + kc + " " + k + " 0 c"); + stream.push("f"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + } + }, + Cross: { + /** + * Creates the Actual AppearanceDictionary-References + * + * @param {string} name + * @returns {Object} + * @ignore + */ + createAppearanceStream: function createAppearanceStream(name) { + var appearanceStreamContent = { + D: { + Off: AcroFormAppearance.RadioButton.Cross.OffPushDown + }, + N: {} + }; + appearanceStreamContent.N[name] = AcroFormAppearance.RadioButton.Cross.YesNormal; + appearanceStreamContent.D[name] = AcroFormAppearance.RadioButton.Cross.YesPushDown; + return appearanceStreamContent; + }, + getCA: function getCA() { + return "8"; + }, + YesNormal: function YesNormal(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + var cross = AcroFormAppearance.internal.calculateCross(formObject); + stream.push("q"); + stream.push("1 1 " + f2(AcroFormAppearance.internal.getWidth(formObject) - 2) + " " + f2(AcroFormAppearance.internal.getHeight(formObject) - 2) + " re"); + stream.push("W"); + stream.push("n"); + stream.push(f2(cross.x1.x) + " " + f2(cross.x1.y) + " m"); + stream.push(f2(cross.x2.x) + " " + f2(cross.x2.y) + " l"); + stream.push(f2(cross.x4.x) + " " + f2(cross.x4.y) + " m"); + stream.push(f2(cross.x3.x) + " " + f2(cross.x3.y) + " l"); + stream.push("s"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + YesPushDown: function YesPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var cross = AcroFormAppearance.internal.calculateCross(formObject); + var stream = []; + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + stream.push("q"); + stream.push("1 1 " + f2(AcroFormAppearance.internal.getWidth(formObject) - 2) + " " + f2(AcroFormAppearance.internal.getHeight(formObject) - 2) + " re"); + stream.push("W"); + stream.push("n"); + stream.push(f2(cross.x1.x) + " " + f2(cross.x1.y) + " m"); + stream.push(f2(cross.x2.x) + " " + f2(cross.x2.y) + " l"); + stream.push(f2(cross.x4.x) + " " + f2(cross.x4.y) + " m"); + stream.push(f2(cross.x3.x) + " " + f2(cross.x3.y) + " l"); + stream.push("s"); + stream.push("Q"); + xobj.stream = stream.join("\n"); + return xobj; + }, + OffPushDown: function OffPushDown(formObject) { + var xobj = createFormXObject(formObject); + xobj.scope = formObject.scope; + var stream = []; + stream.push("0.749023 g"); + stream.push("0 0 " + f2(AcroFormAppearance.internal.getWidth(formObject)) + " " + f2(AcroFormAppearance.internal.getHeight(formObject)) + " re"); + stream.push("f"); + xobj.stream = stream.join("\n"); + return xobj; + } + } + }, + + /** + * Returns the standard Appearance + * + * @returns {AcroFormXObject} + */ + createDefaultAppearanceStream: function createDefaultAppearanceStream(formObject) { + // Set Helvetica to Standard Font (size: auto) + // Color: Black + var fontKey = formObject.scope.internal.getFont(formObject.fontName, formObject.fontStyle).id; + + var encodedColor = formObject.scope.__private__.encodeColorString(formObject.color); + + var fontSize = formObject.fontSize; + var result = "/" + fontKey + " " + fontSize + " Tf " + encodedColor; + return result; + } + }; + AcroFormAppearance.internal = { + Bezier_C: 0.551915024494, + calculateCross: function calculateCross(formObject) { + var width = AcroFormAppearance.internal.getWidth(formObject); + var height = AcroFormAppearance.internal.getHeight(formObject); + var a = Math.min(width, height); + var cross = { + x1: { + // upperLeft + x: (width - a) / 2, + y: (height - a) / 2 + a // height - borderPadding + + }, + x2: { + // lowerRight + x: (width - a) / 2 + a, + y: (height - a) / 2 // borderPadding + + }, + x3: { + // lowerLeft + x: (width - a) / 2, + y: (height - a) / 2 // borderPadding + + }, + x4: { + // upperRight + x: (width - a) / 2 + a, + y: (height - a) / 2 + a // height - borderPadding + + } + }; + return cross; + } + }; + + AcroFormAppearance.internal.getWidth = function (formObject) { + var result = 0; + + if (_typeof(formObject) === "object") { + result = scale(formObject.Rect[2]); + } + + return result; + }; + + AcroFormAppearance.internal.getHeight = function (formObject) { + var result = 0; + + if (_typeof(formObject) === "object") { + result = scale(formObject.Rect[3]); + } + + return result; + }; // Public: + + /** + * Add an AcroForm-Field to the jsPDF-instance + * + * @name addField + * @function + * @instance + * @param {Object} fieldObject + * @returns {jsPDF} + */ + + + var addField = jsPDFAPI.addField = function (fieldObject) { + initializeAcroForm(this, fieldObject); + + if (fieldObject instanceof AcroFormField) { + putForm(fieldObject); + } else { + throw new Error("Invalid argument passed to jsPDF.addField."); + } + + fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber; + return this; + }; + + jsPDFAPI.AcroFormChoiceField = AcroFormChoiceField; + jsPDFAPI.AcroFormListBox = AcroFormListBox; + jsPDFAPI.AcroFormComboBox = AcroFormComboBox; + jsPDFAPI.AcroFormEditBox = AcroFormEditBox; + jsPDFAPI.AcroFormButton = AcroFormButton; + jsPDFAPI.AcroFormPushButton = AcroFormPushButton; + jsPDFAPI.AcroFormRadioButton = AcroFormRadioButton; + jsPDFAPI.AcroFormCheckBox = AcroFormCheckBox; + jsPDFAPI.AcroFormTextField = AcroFormTextField; + jsPDFAPI.AcroFormPasswordField = AcroFormPasswordField; + jsPDFAPI.AcroFormAppearance = AcroFormAppearance; + jsPDFAPI.AcroForm = { + ChoiceField: AcroFormChoiceField, + ListBox: AcroFormListBox, + ComboBox: AcroFormComboBox, + EditBox: AcroFormEditBox, + Button: AcroFormButton, + PushButton: AcroFormPushButton, + RadioButton: AcroFormRadioButton, + CheckBox: AcroFormCheckBox, + TextField: AcroFormTextField, + PasswordField: AcroFormPasswordField, + Appearance: AcroFormAppearance + }; + jsPDF.AcroForm = { + ChoiceField: AcroFormChoiceField, + ListBox: AcroFormListBox, + ComboBox: AcroFormComboBox, + EditBox: AcroFormEditBox, + Button: AcroFormButton, + PushButton: AcroFormPushButton, + RadioButton: AcroFormRadioButton, + CheckBox: AcroFormCheckBox, + TextField: AcroFormTextField, + PasswordField: AcroFormPasswordField, + Appearance: AcroFormAppearance + }; + var AcroForm = jsPDF.AcroForm; + + (function (jsPDFAPI) { + + var namespace = "addImage_"; + jsPDFAPI.__addimage__ = {}; + var UNKNOWN = "UNKNOWN"; // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow. + // With too small batch iteration will be slow as more calls are made, + // higher values cause larger and slower garbage collection. + + var ARRAY_APPLY_BATCH = 8192; + var imageFileTypeHeaders = { + PNG: [[0x89, 0x50, 0x4e, 0x47]], + TIFF: [[0x4d, 0x4d, 0x00, 0x2a], //Motorola + [0x49, 0x49, 0x2a, 0x00] //Intel + ], + JPEG: [[0xff, 0xd8, 0xff, 0xe0, undefined, undefined, 0x4a, 0x46, 0x49, 0x46, 0x00], //JFIF + [0xff, 0xd8, 0xff, 0xe1, undefined, undefined, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00], //Exif + [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW + [0xff, 0xd8, 0xff, 0xee] //EXIF RAW + ], + JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]], + GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]], + GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]], + WEBP: [[0x52, 0x49, 0x46, 0x46, undefined, undefined, undefined, undefined, 0x57, 0x45, 0x42, 0x50]], + BMP: [[0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc. + [0x42, 0x41], //BA - OS/2 struct bitmap array + [0x43, 0x49], //CI - OS/2 struct color icon + [0x43, 0x50], //CP - OS/2 const color pointer + [0x49, 0x43], //IC - OS/2 struct icon + [0x50, 0x54] //PT - OS/2 pointer + ] + }; + /** + * Recognize filetype of Image by magic-bytes + * + * https://en.wikipedia.org/wiki/List_of_file_signatures + * + * @name getImageFileTypeByImageData + * @public + * @function + * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer + * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG' + * + * @returns {string} filetype of Image + */ + + var getImageFileTypeByImageData = jsPDFAPI.__addimage__.getImageFileTypeByImageData = function (imageData, fallbackFormat) { + fallbackFormat = fallbackFormat || UNKNOWN; + var i; + var j; + var result = UNKNOWN; + var headerSchemata; + var compareResult; + var fileType; + + if (fallbackFormat === "RGBA" || imageData.data !== undefined && imageData.data instanceof Uint8ClampedArray && "height" in imageData && "width" in imageData) { + return "RGBA"; + } + + if (isArrayBufferView(imageData)) { + for (fileType in imageFileTypeHeaders) { + headerSchemata = imageFileTypeHeaders[fileType]; + + for (i = 0; i < headerSchemata.length; i += 1) { + compareResult = true; + + for (j = 0; j < headerSchemata[i].length; j += 1) { + if (headerSchemata[i][j] === undefined) { + continue; + } + + if (headerSchemata[i][j] !== imageData[j]) { + compareResult = false; + break; + } + } + + if (compareResult === true) { + result = fileType; + break; + } + } + } + } else { + for (fileType in imageFileTypeHeaders) { + headerSchemata = imageFileTypeHeaders[fileType]; + + for (i = 0; i < headerSchemata.length; i += 1) { + compareResult = true; + + for (j = 0; j < headerSchemata[i].length; j += 1) { + if (headerSchemata[i][j] === undefined) { + continue; + } + + if (headerSchemata[i][j] !== imageData.charCodeAt(j)) { + compareResult = false; + break; + } + } + + if (compareResult === true) { + result = fileType; + break; + } + } + } + } + + if (result === UNKNOWN && fallbackFormat !== UNKNOWN) { + result = fallbackFormat; + } + + return result; + }; // Image functionality ported from pdf.js + + + var putImage = function putImage(image) { + var out = this.internal.write; + var putStream = this.internal.putStream; + var getFilters = this.internal.getFilters; + var filter = getFilters(); + + while (filter.indexOf("FlateEncode") !== -1) { + filter.splice(filter.indexOf("FlateEncode"), 1); + } + + image.objectId = this.internal.newObject(); + var additionalKeyValues = []; + additionalKeyValues.push({ + key: "Type", + value: "/XObject" + }); + additionalKeyValues.push({ + key: "Subtype", + value: "/Image" + }); + additionalKeyValues.push({ + key: "Width", + value: image.width + }); + additionalKeyValues.push({ + key: "Height", + value: image.height + }); + + if (image.colorSpace === color_spaces.INDEXED) { + additionalKeyValues.push({ + key: "ColorSpace", + value: "[/Indexed /DeviceRGB " + ( // if an indexed png defines more than one colour with transparency, we've created a sMask + image.palette.length / 3 - 1) + " " + ("sMask" in image && typeof image.sMask !== "undefined" ? image.objectId + 2 : image.objectId + 1) + " 0 R]" + }); + } else { + additionalKeyValues.push({ + key: "ColorSpace", + value: "/" + image.colorSpace + }); + + if (image.colorSpace === color_spaces.DEVICE_CMYK) { + additionalKeyValues.push({ + key: "Decode", + value: "[1 0 1 0 1 0 1 0]" + }); + } + } + + additionalKeyValues.push({ + key: "BitsPerComponent", + value: image.bitsPerComponent + }); + + if ("decodeParameters" in image && typeof image.decodeParameters !== "undefined") { + additionalKeyValues.push({ + key: "DecodeParms", + value: "<<" + image.decodeParameters + ">>" + }); + } + + if ("transparency" in image && Array.isArray(image.transparency)) { + var transparency = "", + i = 0, + len = image.transparency.length; + + for (; i < len; i++) { + transparency += image.transparency[i] + " " + image.transparency[i] + " "; + } + + additionalKeyValues.push({ + key: "Mask", + value: "[" + transparency + "]" + }); + } + + if (typeof image.sMask !== "undefined") { + additionalKeyValues.push({ + key: "SMask", + value: image.objectId + 1 + " 0 R" + }); + } + + var alreadyAppliedFilters = typeof image.filter !== "undefined" ? ["/" + image.filter] : undefined; + putStream({ + data: image.data, + additionalKeyValues: additionalKeyValues, + alreadyAppliedFilters: alreadyAppliedFilters, + objectId: image.objectId + }); + out("endobj"); // Soft mask + + if ("sMask" in image && typeof image.sMask !== "undefined") { + var decodeParameters = "/Predictor " + image.predictor + " /Colors 1 /BitsPerComponent " + image.bitsPerComponent + " /Columns " + image.width; + var sMask = { + width: image.width, + height: image.height, + colorSpace: "DeviceGray", + bitsPerComponent: image.bitsPerComponent, + decodeParameters: decodeParameters, + data: image.sMask + }; + + if ("filter" in image) { + sMask.filter = image.filter; + } + + putImage.call(this, sMask); + } //Palette + + + if (image.colorSpace === color_spaces.INDEXED) { + var objId = this.internal.newObject(); //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>'); + //putStream(zlib.compress(img['pal'])); + + putStream({ + data: arrayBufferToBinaryString(new Uint8Array(image.palette)), + objectId: objId + }); + out("endobj"); + } + }; + + var putResourcesCallback = function putResourcesCallback() { + var images = this.internal.collections[namespace + "images"]; + + for (var i in images) { + putImage.call(this, images[i]); + } + }; + + var putXObjectsDictCallback = function putXObjectsDictCallback() { + var images = this.internal.collections[namespace + "images"], + out = this.internal.write, + image; + + for (var i in images) { + image = images[i]; + out("/I" + image.index, image.objectId, "0", "R"); + } + }; + + var checkCompressValue = function checkCompressValue(value) { + if (value && typeof value === "string") value = value.toUpperCase(); + return value in jsPDFAPI.image_compression ? value : image_compression.NONE; + }; + + var initialize = function initialize() { + if (!this.internal.collections[namespace + "images"]) { + this.internal.collections[namespace + "images"] = {}; + this.internal.events.subscribe("putResources", putResourcesCallback); + this.internal.events.subscribe("putXobjectDict", putXObjectsDictCallback); + } + }; + + var getImages = function getImages() { + var images = this.internal.collections[namespace + "images"]; + initialize.call(this); + return images; + }; + + var getImageIndex = function getImageIndex() { + return Object.keys(this.internal.collections[namespace + "images"]).length; + }; + + var notDefined = function notDefined(value) { + return typeof value === "undefined" || value === null || value.length === 0; + }; + + var generateAliasFromImageData = function generateAliasFromImageData(imageData) { + if (typeof imageData === "string" || isArrayBufferView(imageData)) { + return sHashCode(imageData); + } else if (isArrayBufferView(imageData.data)) { + return sHashCode(imageData.data); + } + + return null; + }; + + var isImageTypeSupported = function isImageTypeSupported(type) { + return typeof jsPDFAPI["process" + type.toUpperCase()] === "function"; + }; + + var isDOMElement = function isDOMElement(object) { + return _typeof(object) === "object" && object.nodeType === 1; + }; + + var getImageDataFromElement = function getImageDataFromElement(element, format) { + //if element is an image which uses data url definition, just return the dataurl + if (element.nodeName === "IMG" && element.hasAttribute("src")) { + var src = "" + element.getAttribute("src"); //is base64 encoded dataUrl, directly process it + + if (src.indexOf("data:image/") === 0) { + return atob(unescape(src).split("base64,").pop()); + } //it is probably an url, try to load it + + + var tmpImageData = jsPDFAPI.loadFile(src, true); + + if (tmpImageData !== undefined) { + return tmpImageData; + } + } + + if (element.nodeName === "CANVAS") { + if (element.width === 0 || element.height === 0) { + throw new Error("Given canvas must have data. Canvas width: " + element.width + ", height: " + element.height); + } + + var mimeType; + + switch (format) { + case "PNG": + mimeType = "image/png"; + break; + + case "WEBP": + mimeType = "image/webp"; + break; + + case "JPEG": + case "JPG": + default: + mimeType = "image/jpeg"; + break; + } + + return atob(element.toDataURL(mimeType, 1.0).split("base64,").pop()); + } + }; + + var checkImagesForAlias = function checkImagesForAlias(alias) { + var images = this.internal.collections[namespace + "images"]; + + if (images) { + for (var e in images) { + if (alias === images[e].alias) { + return images[e]; + } + } + } + }; + + var determineWidthAndHeight = function determineWidthAndHeight(width, height, image) { + if (!width && !height) { + width = -96; + height = -96; + } + + if (width < 0) { + width = -1 * image.width * 72 / width / this.internal.scaleFactor; + } + + if (height < 0) { + height = -1 * image.height * 72 / height / this.internal.scaleFactor; + } + + if (width === 0) { + width = height * image.width / image.height; + } + + if (height === 0) { + height = width * image.height / image.width; + } + + return [width, height]; + }; + + var writeImageToPDF = function writeImageToPDF(x, y, width, height, image, rotation) { + var dims = determineWidthAndHeight.call(this, width, height, image), + coord = this.internal.getCoordinateString, + vcoord = this.internal.getVerticalCoordinateString; + var images = getImages.call(this); + width = dims[0]; + height = dims[1]; + images[image.index] = image; + + if (rotation) { + rotation *= Math.PI / 180; + var c = Math.cos(rotation); + var s = Math.sin(rotation); //like in pdf Reference do it 4 digits instead of 2 + + var f4 = function f4(number) { + return number.toFixed(4); + }; + + var rotationTransformationMatrix = [f4(c), f4(s), f4(s * -1), f4(c), 0, 0, "cm"]; + } + + this.internal.write("q"); //Save graphics state + + if (rotation) { + this.internal.write([1, "0", "0", 1, coord(x), vcoord(y + height), "cm"].join(" ")); //Translate + + this.internal.write(rotationTransformationMatrix.join(" ")); //Rotate + + this.internal.write([coord(width), "0", "0", coord(height), "0", "0", "cm"].join(" ")); //Scale + } else { + this.internal.write([coord(width), "0", "0", coord(height), coord(x), vcoord(y + height), "cm"].join(" ")); //Translate and Scale + } + + if (this.isAdvancedAPI()) { + // draw image bottom up when in "advanced" API mode + this.internal.write([1, 0, 0, -1, 0, 0, "cm"].join(" ")); + } + + this.internal.write("/I" + image.index + " Do"); //Paint Image + + this.internal.write("Q"); //Restore graphics state + }; + /** + * COLOR SPACES + */ + + + var color_spaces = jsPDFAPI.color_spaces = { + DEVICE_RGB: "DeviceRGB", + DEVICE_GRAY: "DeviceGray", + DEVICE_CMYK: "DeviceCMYK", + CAL_GREY: "CalGray", + CAL_RGB: "CalRGB", + LAB: "Lab", + ICC_BASED: "ICCBased", + INDEXED: "Indexed", + PATTERN: "Pattern", + SEPARATION: "Separation", + DEVICE_N: "DeviceN" + }; + /** + * DECODE METHODS + */ + + jsPDFAPI.decode = { + DCT_DECODE: "DCTDecode", + FLATE_DECODE: "FlateDecode", + LZW_DECODE: "LZWDecode", + JPX_DECODE: "JPXDecode", + JBIG2_DECODE: "JBIG2Decode", + ASCII85_DECODE: "ASCII85Decode", + ASCII_HEX_DECODE: "ASCIIHexDecode", + RUN_LENGTH_DECODE: "RunLengthDecode", + CCITT_FAX_DECODE: "CCITTFaxDecode" + }; + /** + * IMAGE COMPRESSION TYPES + */ + + var image_compression = jsPDFAPI.image_compression = { + NONE: "NONE", + FAST: "FAST", + MEDIUM: "MEDIUM", + SLOW: "SLOW" + }; + /** + * @name sHashCode + * @function + * @param {string} data + * @returns {string} + */ + + var sHashCode = jsPDFAPI.__addimage__.sHashCode = function (data) { + var hash = 0, + i, + len; + + if (typeof data === "string") { + len = data.length; + + for (i = 0; i < len; i++) { + hash = (hash << 5) - hash + data.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + } else if (isArrayBufferView(data)) { + len = data.byteLength / 2; + + for (i = 0; i < len; i++) { + hash = (hash << 5) - hash + data[i]; + hash |= 0; // Convert to 32bit integer + } + } + + return hash; + }; + /** + * Validates if given String is a valid Base64-String + * + * @name validateStringAsBase64 + * @public + * @function + * @param {String} possible Base64-String + * + * @returns {boolean} + */ + + + var validateStringAsBase64 = jsPDFAPI.__addimage__.validateStringAsBase64 = function (possibleBase64String) { + possibleBase64String = possibleBase64String || ""; + possibleBase64String.toString().trim(); + var result = true; + + if (possibleBase64String.length === 0) { + result = false; + } + + if (possibleBase64String.length % 4 !== 0) { + result = false; + } + + if (/^[A-Za-z0-9+/]+$/.test(possibleBase64String.substr(0, possibleBase64String.length - 2)) === false) { + result = false; + } + + if (/^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(possibleBase64String.substr(-2)) === false) { + result = false; + } + + return result; + }; + /** + * Strips out and returns info from a valid base64 data URI + * + * @name extractImageFromDataUrl + * @function + * @param {string} dataUrl a valid data URI of format 'data:[][;base64],' + * @returns {Array}an Array containing the following + * [0] the complete data URI + * [1] + * [2] format - the second part of the mime-type i.e 'png' in 'image/png' + * [4] + */ + + + var extractImageFromDataUrl = jsPDFAPI.__addimage__.extractImageFromDataUrl = function (dataUrl) { + dataUrl = dataUrl || ""; + var dataUrlParts = dataUrl.split("base64,"); + var result = null; + + if (dataUrlParts.length === 2) { + var extractedInfo = /^data:(\w*\/\w*);*(charset=(?!charset=)[\w=-]*)*;*$/.exec(dataUrlParts[0]); + + if (Array.isArray(extractedInfo)) { + result = { + mimeType: extractedInfo[1], + charset: extractedInfo[2], + data: dataUrlParts[1] + }; + } + } + + return result; + }; + /** + * Check to see if ArrayBuffer is supported + * + * @name supportsArrayBuffer + * @function + * @returns {boolean} + */ + + + var supportsArrayBuffer = jsPDFAPI.__addimage__.supportsArrayBuffer = function () { + return typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; + }; + /** + * Tests supplied object to determine if ArrayBuffer + * + * @name isArrayBuffer + * @function + * @param {Object} object an Object + * + * @returns {boolean} + */ + + + jsPDFAPI.__addimage__.isArrayBuffer = function (object) { + return supportsArrayBuffer() && object instanceof ArrayBuffer; + }; + /** + * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface + * + * @name isArrayBufferView + * @function + * @param {Object} object an Object + * @returns {boolean} + */ + + + var isArrayBufferView = jsPDFAPI.__addimage__.isArrayBufferView = function (object) { + return supportsArrayBuffer() && typeof Uint32Array !== "undefined" && (object instanceof Int8Array || object instanceof Uint8Array || typeof Uint8ClampedArray !== "undefined" && object instanceof Uint8ClampedArray || object instanceof Int16Array || object instanceof Uint16Array || object instanceof Int32Array || object instanceof Uint32Array || object instanceof Float32Array || object instanceof Float64Array); + }; + /** + * Convert Binary String to ArrayBuffer + * + * @name binaryStringToUint8Array + * @public + * @function + * @param {string} BinaryString with ImageData + * @returns {Uint8Array} + */ + + + var binaryStringToUint8Array = jsPDFAPI.__addimage__.binaryStringToUint8Array = function (binary_string) { + var len = binary_string.length; + var bytes = new Uint8Array(len); + + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + + return bytes; + }; + /** + * Convert the Buffer to a Binary String + * + * @name arrayBufferToBinaryString + * @public + * @function + * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData + * + * @returns {String} + */ + + + var arrayBufferToBinaryString = jsPDFAPI.__addimage__.arrayBufferToBinaryString = function (buffer) { + var out = ""; // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView. + // Do not copy the array if input is already an array. + + var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer); + + for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) { + // Limit the amount of characters being parsed to prevent overflow. + // Note that while TextDecoder would be faster, it does not have the same + // functionality as fromCharCode with any provided encodings as of 3/2021. + out += String.fromCharCode.apply(null, buf.subarray(i, i + ARRAY_APPLY_BATCH)); + } + + return out; + }; + /** + * Possible parameter for addImage, an RGBA buffer with size. + * + * @typedef {Object} RGBAData + * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData. + * @property {number} width - Image width as the data does not carry this information in itself. + * @property {number} height - Image height as the data does not carry this information in itself. + */ + + /** + * Adds an Image to the PDF. + * + * @name addImage + * @public + * @function + * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData). + * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP' + * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} width width of the image (in units declared at inception of PDF document) + * @param {number} height height of the Image (in units declared at inception of PDF document) + * @param {string} alias alias of the image (if used multiple times) + * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW' + * @param {number} rotation rotation of the image in degrees (0-359) + * + * @returns jsPDF + */ + + + jsPDFAPI.addImage = function () { + var imageData, format, x, y, w, h, alias, compression, rotation; + imageData = arguments[0]; + + if (typeof arguments[1] === "number") { + format = UNKNOWN; + x = arguments[1]; + y = arguments[2]; + w = arguments[3]; + h = arguments[4]; + alias = arguments[5]; + compression = arguments[6]; + rotation = arguments[7]; + } else { + format = arguments[1]; + x = arguments[2]; + y = arguments[3]; + w = arguments[4]; + h = arguments[5]; + alias = arguments[6]; + compression = arguments[7]; + rotation = arguments[8]; + } + + if (_typeof(imageData) === "object" && !isDOMElement(imageData) && "imageData" in imageData) { + var options = imageData; + imageData = options.imageData; + format = options.format || format || UNKNOWN; + x = options.x || x || 0; + y = options.y || y || 0; + w = options.w || options.width || w; + h = options.h || options.height || h; + alias = options.alias || alias; + compression = options.compression || compression; + rotation = options.rotation || options.angle || rotation; + } //If compression is not explicitly set, determine if we should use compression + + + var filter = this.internal.getFilters(); + + if (compression === undefined && filter.indexOf("FlateEncode") !== -1) { + compression = "SLOW"; + } + + if (isNaN(x) || isNaN(y)) { + throw new Error("Invalid coordinates passed to jsPDF.addImage"); + } + + initialize.call(this); + var image = processImageData.call(this, imageData, format, alias, compression); + writeImageToPDF.call(this, x, y, w, h, image, rotation); + return this; + }; + + var processImageData = function processImageData(imageData, format, alias, compression) { + var result, dataAsBinaryString; + + if (typeof imageData === "string" && getImageFileTypeByImageData(imageData) === UNKNOWN) { + imageData = unescape(imageData); + var tmpImageData = convertBase64ToBinaryString(imageData, false); + + if (tmpImageData !== "") { + imageData = tmpImageData; + } else { + tmpImageData = jsPDFAPI.loadFile(imageData, true); + + if (tmpImageData !== undefined) { + imageData = tmpImageData; + } + } + } + + if (isDOMElement(imageData)) { + imageData = getImageDataFromElement(imageData, format); + } + + format = getImageFileTypeByImageData(imageData, format); + + if (!isImageTypeSupported(format)) { + throw new Error("addImage does not support files of type '" + format + "', please ensure that a plugin for '" + format + "' support is added."); + } // now do the heavy lifting + + + if (notDefined(alias)) { + alias = generateAliasFromImageData(imageData); + } + + result = checkImagesForAlias.call(this, alias); + + if (!result) { + if (supportsArrayBuffer()) { + // no need to convert if imageData is already uint8array + if (!(imageData instanceof Uint8Array) && format !== "RGBA") { + dataAsBinaryString = imageData; + imageData = binaryStringToUint8Array(imageData); + } + } + + result = this["process" + format.toUpperCase()](imageData, getImageIndex.call(this), alias, checkCompressValue(compression), dataAsBinaryString); + } + + if (!result) { + throw new Error("An unknown error occurred whilst processing the image."); + } + + return result; + }; + /** + * @name convertBase64ToBinaryString + * @function + * @param {string} stringData + * @returns {string} binary string + */ + + + var convertBase64ToBinaryString = jsPDFAPI.__addimage__.convertBase64ToBinaryString = function (stringData, throwError) { + throwError = typeof throwError === "boolean" ? throwError : true; + var base64Info; + var imageData = ""; + var rawData; + + if (typeof stringData === "string") { + base64Info = extractImageFromDataUrl(stringData); + rawData = base64Info !== null ? base64Info.data : stringData; + + try { + imageData = atob(rawData); + } catch (e) { + if (throwError) { + if (!validateStringAsBase64(rawData)) { + throw new Error("Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString "); + } else { + throw new Error("atob-Error in jsPDF.convertBase64ToBinaryString " + e.message); + } + } + } + } + + return imageData; + }; + /** + * @name getImageProperties + * @function + * @param {Object} imageData + * @returns {Object} + */ + + + jsPDFAPI.getImageProperties = function (imageData) { + var image; + var tmpImageData = ""; + var format; + + if (isDOMElement(imageData)) { + imageData = getImageDataFromElement(imageData); + } + + if (typeof imageData === "string" && getImageFileTypeByImageData(imageData) === UNKNOWN) { + tmpImageData = convertBase64ToBinaryString(imageData, false); + + if (tmpImageData === "") { + tmpImageData = jsPDFAPI.loadFile(imageData) || ""; + } + + imageData = tmpImageData; + } + + format = getImageFileTypeByImageData(imageData); + + if (!isImageTypeSupported(format)) { + throw new Error("addImage does not support files of type '" + format + "', please ensure that a plugin for '" + format + "' support is added."); + } + + if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) { + imageData = binaryStringToUint8Array(imageData); + } + + image = this["process" + format.toUpperCase()](imageData); + + if (!image) { + throw new Error("An unknown error occurred whilst processing the image"); + } + + image.fileType = format; + return image; + }; + })(jsPDF.API); + + /** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + + (function (jsPDFAPI) { + + var notEmpty = function notEmpty(obj) { + if (typeof obj != "undefined") { + if (obj != "") { + return true; + } + } + }; + + jsPDF.API.events.push(["addPage", function (addPageData) { + var pageInfo = this.internal.getPageInfo(addPageData.pageNumber); + pageInfo.pageContext.annotations = []; + }]); + jsPDFAPI.events.push(["putPage", function (putPageData) { + var getHorizontalCoordinateString = this.internal.getCoordinateString; + var getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId); + var pageAnnos = putPageData.pageContext.annotations; + var anno, rect, line; + var found = false; + + for (var a = 0; a < pageAnnos.length && !found; a++) { + anno = pageAnnos[a]; + + switch (anno.type) { + case "link": + if (notEmpty(anno.options.url) || notEmpty(anno.options.pageNumber)) { + found = true; + } + + break; + + case "reference": + case "text": + case "freetext": + found = true; + break; + } + } + + if (found == false) { + return; + } + + this.internal.write("/Annots ["); + + for (var i = 0; i < pageAnnos.length; i++) { + anno = pageAnnos[i]; + var escape = this.internal.pdfEscape; + var encryptor = this.internal.getEncryptor(putPageData.objId); + + switch (anno.type) { + case "reference": + // References to Widget Annotations (for AcroForm Fields) + this.internal.write(" " + anno.object.objId + " 0 R "); + break; + + case "text": + // Create a an object for both the text and the popup + var objText = this.internal.newAdditionalObject(); + var objPopup = this.internal.newAdditionalObject(); + var encryptorText = this.internal.getEncryptor(objText.objId); + var title = anno.title || "Note"; + rect = "/Rect [" + getHorizontalCoordinateString(anno.bounds.x) + " " + getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) + " " + getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) + " " + getVerticalCoordinateString(anno.bounds.y) + "] "; + line = "<>"; + objText.content = line; + var parent = objText.objId + " 0 R"; + var popoff = 30; + rect = "/Rect [" + getHorizontalCoordinateString(anno.bounds.x + popoff) + " " + getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) + " " + getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w + popoff) + " " + getVerticalCoordinateString(anno.bounds.y) + "] "; + line = "<>"; + } else if (anno.options.pageNumber) { + // first page is 0 + var info = this.internal.getPageInfo(anno.options.pageNumber); + line = "< pageNumber or url [required] + *

    If pageNumber is specified, top and zoom may also be specified

    + * @name link + * @function + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @param {Object} options + */ + + + jsPDFAPI.link = function (x, y, w, h, options) { + var pageInfo = this.internal.getCurrentPageInfo(); + var getHorizontalCoordinateString = this.internal.getCoordinateString; + var getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + pageInfo.pageContext.annotations.push({ + finalBounds: { + x: getHorizontalCoordinateString(x), + y: getVerticalCoordinateString(y), + w: getHorizontalCoordinateString(x + w), + h: getVerticalCoordinateString(y + h) + }, + options: options, + type: "link" + }); + }; + /** + * Currently only supports single line text. + * Returns the width of the text/link + * + * @name textWithLink + * @function + * @param {string} text + * @param {number} x + * @param {number} y + * @param {Object} options + * @returns {number} width the width of the text/link + */ + + + jsPDFAPI.textWithLink = function (text, x, y, options) { + var totalLineWidth = this.getTextWidth(text); + var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor; + var linkHeight, linkWidth; // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line + + if (options.maxWidth !== undefined) { + var maxWidth = options.maxWidth; + linkWidth = maxWidth; + var numOfLines = this.splitTextToSize(text, linkWidth).length; + linkHeight = Math.ceil(lineHeight * numOfLines); + } else { + linkWidth = totalLineWidth; + linkHeight = lineHeight; + } + + this.text(text, x, y, options); //TODO We really need the text baseline height to do this correctly. + // Or ability to draw text on top, bottom, center, or baseline. + + y += lineHeight * 0.2; //handle x position based on the align option + + if (options.align === "center") { + x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width + } + + if (options.align === "right") { + x = x - totalLineWidth; + } + + this.link(x, y - lineHeight, linkWidth, linkHeight, options); + return totalLineWidth; + }; //TODO move into external library + + /** + * @name getTextWidth + * @function + * @param {string} text + * @returns {number} txtWidth + */ + + + jsPDFAPI.getTextWidth = function (text) { + var fontSize = this.internal.getFontSize(); + var txtWidth = this.getStringUnitWidth(text) * fontSize / this.internal.scaleFactor; + return txtWidth; + }; + + return this; + })(jsPDF.API); + + /** + * @license + * Copyright (c) 2017 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF arabic parser PlugIn + * + * @name arabic + * @module + */ + + (function (jsPDFAPI) { + /** + * Arabic shape substitutions: char code => (isolated, final, initial, medial). + * Arabic Substition A + */ + + var arabicSubstitionA = { + 0x0621: [0xfe80], + // ARABIC LETTER HAMZA + 0x0622: [0xfe81, 0xfe82], + // ARABIC LETTER ALEF WITH MADDA ABOVE + 0x0623: [0xfe83, 0xfe84], + // ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x0624: [0xfe85, 0xfe86], + // ARABIC LETTER WAW WITH HAMZA ABOVE + 0x0625: [0xfe87, 0xfe88], + // ARABIC LETTER ALEF WITH HAMZA BELOW + 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], + // ARABIC LETTER YEH WITH HAMZA ABOVE + 0x0627: [0xfe8d, 0xfe8e], + // ARABIC LETTER ALEF + 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], + // ARABIC LETTER BEH + 0x0629: [0xfe93, 0xfe94], + // ARABIC LETTER TEH MARBUTA + 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], + // ARABIC LETTER TEH + 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], + // ARABIC LETTER THEH + 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], + // ARABIC LETTER JEEM + 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], + // ARABIC LETTER HAH + 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], + // ARABIC LETTER KHAH + 0x062f: [0xfea9, 0xfeaa], + // ARABIC LETTER DAL + 0x0630: [0xfeab, 0xfeac], + // ARABIC LETTER THAL + 0x0631: [0xfead, 0xfeae], + // ARABIC LETTER REH + 0x0632: [0xfeaf, 0xfeb0], + // ARABIC LETTER ZAIN + 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], + // ARABIC LETTER SEEN + 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], + // ARABIC LETTER SHEEN + 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], + // ARABIC LETTER SAD + 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], + // ARABIC LETTER DAD + 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], + // ARABIC LETTER TAH + 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], + // ARABIC LETTER ZAH + 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], + // ARABIC LETTER AIN + 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], + // ARABIC LETTER GHAIN + 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], + // ARABIC LETTER FEH + 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], + // ARABIC LETTER QAF + 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], + // ARABIC LETTER KAF + 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], + // ARABIC LETTER LAM + 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], + // ARABIC LETTER MEEM + 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], + // ARABIC LETTER NOON + 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], + // ARABIC LETTER HEH + 0x0648: [0xfeed, 0xfeee], + // ARABIC LETTER WAW + 0x0649: [0xfeef, 0xfef0, 64488, 64489], + // ARABIC LETTER ALEF MAKSURA + 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], + // ARABIC LETTER YEH + 0x0671: [0xfb50, 0xfb51], + // ARABIC LETTER ALEF WASLA + 0x0677: [0xfbdd], + // ARABIC LETTER U WITH HAMZA ABOVE + 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], + // ARABIC LETTER TTEH + 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], + // ARABIC LETTER TTEHEH + 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], + // ARABIC LETTER BEEH + 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], + // ARABIC LETTER PEH + 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], + // ARABIC LETTER TEHEH + 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], + // ARABIC LETTER BEHEH + 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], + // ARABIC LETTER NYEH + 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], + // ARABIC LETTER DYEH + 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], + // ARABIC LETTER TCHEH + 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], + // ARABIC LETTER TCHEHEH + 0x0688: [0xfb88, 0xfb89], + // ARABIC LETTER DDAL + 0x068c: [0xfb84, 0xfb85], + // ARABIC LETTER DAHAL + 0x068d: [0xfb82, 0xfb83], + // ARABIC LETTER DDAHAL + 0x068e: [0xfb86, 0xfb87], + // ARABIC LETTER DUL + 0x0691: [0xfb8c, 0xfb8d], + // ARABIC LETTER RREH + 0x0698: [0xfb8a, 0xfb8b], + // ARABIC LETTER JEH + 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], + // ARABIC LETTER VEH + 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], + // ARABIC LETTER PEHEH + 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], + // ARABIC LETTER KEHEH + 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], + // ARABIC LETTER NG + 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], + // ARABIC LETTER GAF + 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], + // ARABIC LETTER NGOEH + 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], + // ARABIC LETTER GUEH + 0x06ba: [0xfb9e, 0xfb9f], + // ARABIC LETTER NOON GHUNNA + 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], + // ARABIC LETTER RNOON + 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], + // ARABIC LETTER HEH DOACHASHMEE + 0x06c0: [0xfba4, 0xfba5], + // ARABIC LETTER HEH WITH YEH ABOVE + 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], + // ARABIC LETTER HEH GOAL + 0x06c5: [0xfbe0, 0xfbe1], + // ARABIC LETTER KIRGHIZ OE + 0x06c6: [0xfbd9, 0xfbda], + // ARABIC LETTER OE + 0x06c7: [0xfbd7, 0xfbd8], + // ARABIC LETTER U + 0x06c8: [0xfbdb, 0xfbdc], + // ARABIC LETTER YU + 0x06c9: [0xfbe2, 0xfbe3], + // ARABIC LETTER KIRGHIZ YU + 0x06cb: [0xfbde, 0xfbdf], + // ARABIC LETTER VE + 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], + // ARABIC LETTER FARSI YEH + 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], + //ARABIC LETTER E + 0x06d2: [0xfbae, 0xfbaf], + // ARABIC LETTER YEH BARREE + 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE + + }; + /* + var ligaturesSubstitutionA = { + 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM + }; + */ + + var ligatures = { + 0xfedf: { + 0xfe82: 0xfef5, + // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM + 0xfe84: 0xfef7, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM + 0xfe88: 0xfef9, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM + 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + + }, + 0xfee0: { + 0xfe82: 0xfef6, + // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM + 0xfe84: 0xfef8, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM + 0xfe88: 0xfefa, + // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM + 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM + + }, + 0xfe8d: { + 0xfedf: { + 0xfee0: { + 0xfeea: 0xfdf2 + } + } + }, + // ALLAH + 0x0651: { + 0x064c: 0xfc5e, + // Shadda + Dammatan + 0x064d: 0xfc5f, + // Shadda + Kasratan + 0x064e: 0xfc60, + // Shadda + Fatha + 0x064f: 0xfc61, + // Shadda + Damma + 0x0650: 0xfc62 // Shadda + Kasra + + } + }; + var arabic_diacritics = { + 1612: 64606, + // Shadda + Dammatan + 1613: 64607, + // Shadda + Kasratan + 1614: 64608, + // Shadda + Fatha + 1615: 64609, + // Shadda + Damma + 1616: 64610 // Shadda + Kasra + + }; + var alfletter = [1570, 1571, 1573, 1575]; + var noChangeInForm = -1; + var isolatedForm = 0; + var finalForm = 1; + var initialForm = 2; + var medialForm = 3; + jsPDFAPI.__arabicParser__ = {}; //private + + var isInArabicSubstitutionA = jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function (letter) { + return typeof arabicSubstitionA[letter.charCodeAt(0)] !== "undefined"; + }; + + var isArabicLetter = jsPDFAPI.__arabicParser__.isArabicLetter = function (letter) { + return typeof letter === "string" && /^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(letter); + }; + + var isArabicEndLetter = jsPDFAPI.__arabicParser__.isArabicEndLetter = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length <= 2; + }; + + var isArabicAlfLetter = jsPDFAPI.__arabicParser__.isArabicAlfLetter = function (letter) { + return isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0; + }; + + jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length >= 1; + }; + + var arabicLetterHasFinalForm = jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length >= 2; + }; + + jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length >= 3; + }; + + var arabicLetterHasMedialForm = jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function (letter) { + return isArabicLetter(letter) && isInArabicSubstitutionA(letter) && arabicSubstitionA[letter.charCodeAt(0)].length == 4; + }; + + var resolveLigatures = jsPDFAPI.__arabicParser__.resolveLigatures = function (letters) { + var i = 0; + var tmpLigatures = ligatures; + var result = ""; + var effectedLetters = 0; + + for (i = 0; i < letters.length; i += 1) { + if (typeof tmpLigatures[letters.charCodeAt(i)] !== "undefined") { + effectedLetters++; + tmpLigatures = tmpLigatures[letters.charCodeAt(i)]; + + if (typeof tmpLigatures === "number") { + result += String.fromCharCode(tmpLigatures); + tmpLigatures = ligatures; + effectedLetters = 0; + } + + if (i === letters.length - 1) { + tmpLigatures = ligatures; + result += letters.charAt(i - (effectedLetters - 1)); + i = i - (effectedLetters - 1); + effectedLetters = 0; + } + } else { + tmpLigatures = ligatures; + result += letters.charAt(i - effectedLetters); + i = i - effectedLetters; + effectedLetters = 0; + } + } + + return result; + }; + + jsPDFAPI.__arabicParser__.isArabicDiacritic = function (letter) { + return letter !== undefined && arabic_diacritics[letter.charCodeAt(0)] !== undefined; + }; + + var getCorrectForm = jsPDFAPI.__arabicParser__.getCorrectForm = function (currentChar, beforeChar, nextChar) { + if (!isArabicLetter(currentChar)) { + return -1; + } + + if (isInArabicSubstitutionA(currentChar) === false) { + return noChangeInForm; + } + + if (!arabicLetterHasFinalForm(currentChar) || !isArabicLetter(beforeChar) && !isArabicLetter(nextChar) || !isArabicLetter(nextChar) && isArabicEndLetter(beforeChar) || isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar) || isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar) || isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar)) { + return isolatedForm; + } + + if (arabicLetterHasMedialForm(currentChar) && isArabicLetter(beforeChar) && !isArabicEndLetter(beforeChar) && isArabicLetter(nextChar) && arabicLetterHasFinalForm(nextChar)) { + return medialForm; + } + + if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) { + return finalForm; + } + + return initialForm; + }; + /** + * @name processArabic + * @function + * @param {string} text + * @returns {string} + */ + + + var parseArabic = function parseArabic(text) { + text = text || ""; + var result = ""; + var i = 0; + var j = 0; + var position = 0; + var currentLetter = ""; + var prevLetter = ""; + var nextLetter = ""; + var words = text.split("\\s+"); + var newWords = []; + + for (i = 0; i < words.length; i += 1) { + newWords.push(""); + + for (j = 0; j < words[i].length; j += 1) { + currentLetter = words[i][j]; + prevLetter = words[i][j - 1]; + nextLetter = words[i][j + 1]; + + if (isArabicLetter(currentLetter)) { + position = getCorrectForm(currentLetter, prevLetter, nextLetter); + + if (position !== -1) { + newWords[i] += String.fromCharCode(arabicSubstitionA[currentLetter.charCodeAt(0)][position]); + } else { + newWords[i] += currentLetter; + } + } else { + newWords[i] += currentLetter; + } + } + + newWords[i] = resolveLigatures(newWords[i]); + } + + result = newWords.join(" "); + return result; + }; + + var processArabic = jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function () { + var text = typeof arguments[0] === "string" ? arguments[0] : arguments[0].text; + var tmpText = []; + var result; + + if (Array.isArray(text)) { + var i = 0; + tmpText = []; + + for (i = 0; i < text.length; i += 1) { + if (Array.isArray(text[i])) { + tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]); + } else { + tmpText.push([parseArabic(text[i])]); + } + } + + result = tmpText; + } else { + result = parseArabic(text); + } + + if (typeof arguments[0] === "string") { + return result; + } else { + arguments[0].text = result; + return arguments[0]; + } + }; + + jsPDFAPI.events.push(["preProcessText", processArabic]); + })(jsPDF.API); + + /** @license + * jsPDF Autoprint Plugin + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * @name autoprint + * @module + */ + + (function (jsPDFAPI) { + /** + * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer. + * + * @name autoPrint + * @function + * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer . + * @returns {jsPDF} + * @example + * var doc = new jsPDF(); + * doc.text(10, 10, 'This is a test'); + * doc.autoPrint({variant: 'non-conform'}); + * doc.save('autoprint.pdf'); + */ + + jsPDFAPI.autoPrint = function (options) { + + var refAutoPrintTag; + options = options || {}; + options.variant = options.variant || "non-conform"; + + switch (options.variant) { + case "javascript": + //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb + this.addJS("print({});"); + break; + + case "non-conform": + default: + this.internal.events.subscribe("postPutResources", function () { + refAutoPrintTag = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/S /Named"); + this.internal.out("/Type /Action"); + this.internal.out("/N /Print"); + this.internal.out(">>"); + this.internal.out("endobj"); + }); + this.internal.events.subscribe("putCatalog", function () { + this.internal.out("/OpenAction " + refAutoPrintTag + " 0 R"); + }); + break; + } + + return this; + }; + })(jsPDF.API); + + /** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF Canvas PlugIn + * This plugin mimics the HTML5 Canvas + * + * The goal is to provide a way for current canvas users to print directly to a PDF. + * @name canvas + * @module + */ + + (function (jsPDFAPI) { + /** + * @class Canvas + * @classdesc A Canvas Wrapper for jsPDF + */ + + var Canvas = function Canvas() { + var jsPdfInstance = undefined; + Object.defineProperty(this, "pdf", { + get: function get() { + return jsPdfInstance; + }, + set: function set(value) { + jsPdfInstance = value; + } + }); + var _width = 150; + /** + * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used. + * This is one of the two properties, the other being width, that controls the size of the canvas. + * + * @name width + */ + + Object.defineProperty(this, "width", { + get: function get() { + return _width; + }, + set: function set(value) { + if (isNaN(value) || Number.isInteger(value) === false || value < 0) { + _width = 150; + } else { + _width = value; + } + + if (this.getContext("2d").pageWrapXEnabled) { + this.getContext("2d").pageWrapX = _width + 1; + } + } + }); + var _height = 300; + /** + * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used. + * This is one of the two properties, the other being height, that controls the size of the canvas. + * + * @name height + */ + + Object.defineProperty(this, "height", { + get: function get() { + return _height; + }, + set: function set(value) { + if (isNaN(value) || Number.isInteger(value) === false || value < 0) { + _height = 300; + } else { + _height = value; + } + + if (this.getContext("2d").pageWrapYEnabled) { + this.getContext("2d").pageWrapY = _height + 1; + } + } + }); + var _childNodes = []; + Object.defineProperty(this, "childNodes", { + get: function get() { + return _childNodes; + }, + set: function set(value) { + _childNodes = value; + } + }); + var _style = {}; + Object.defineProperty(this, "style", { + get: function get() { + return _style; + }, + set: function set(value) { + _style = value; + } + }); + Object.defineProperty(this, "parentNode", {}); + }; + /** + * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported. + * + * @name getContext + * @function + * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is "2d", leading to the creation of a Context2D object representing a two-dimensional rendering context. + * @param {object} contextAttributes + */ + + + Canvas.prototype.getContext = function (contextType, contextAttributes) { + contextType = contextType || "2d"; + var key; + + if (contextType !== "2d") { + return null; + } + + for (key in contextAttributes) { + if (this.pdf.context2d.hasOwnProperty(key)) { + this.pdf.context2d[key] = contextAttributes[key]; + } + } + + this.pdf.context2d._canvas = this; + return this.pdf.context2d; + }; + /** + * The toDataURL() method is just a stub to throw an error if accidently called. + * + * @name toDataURL + * @function + */ + + + Canvas.prototype.toDataURL = function () { + throw new Error("toDataURL is not implemented."); + }; + + jsPDFAPI.events.push(["initialized", function () { + this.canvas = new Canvas(); + this.canvas.pdf = this; + }]); + return this; + })(jsPDF.API); + + /** + * @name cell + * @module + */ + + (function (jsPDFAPI) { + + var NO_MARGINS = { + left: 0, + top: 0, + bottom: 0, + right: 0 + }; + var px2pt = 0.264583 * 72 / 25.4; + var printingHeaderRow = false; + + var _initialize = function _initialize() { + if (typeof this.internal.__cell__ === "undefined") { + this.internal.__cell__ = {}; + this.internal.__cell__.padding = 3; + this.internal.__cell__.headerFunction = undefined; + this.internal.__cell__.margins = Object.assign({}, NO_MARGINS); + this.internal.__cell__.margins.width = this.getPageWidth(); + + _reset.call(this); + } + }; + + var _reset = function _reset() { + this.internal.__cell__.lastCell = new Cell(); + this.internal.__cell__.pages = 1; + }; + + var Cell = function Cell() { + var _x = arguments[0]; + Object.defineProperty(this, "x", { + enumerable: true, + get: function get() { + return _x; + }, + set: function set(value) { + _x = value; + } + }); + var _y = arguments[1]; + Object.defineProperty(this, "y", { + enumerable: true, + get: function get() { + return _y; + }, + set: function set(value) { + _y = value; + } + }); + var _width = arguments[2]; + Object.defineProperty(this, "width", { + enumerable: true, + get: function get() { + return _width; + }, + set: function set(value) { + _width = value; + } + }); + var _height = arguments[3]; + Object.defineProperty(this, "height", { + enumerable: true, + get: function get() { + return _height; + }, + set: function set(value) { + _height = value; + } + }); + var _text = arguments[4]; + Object.defineProperty(this, "text", { + enumerable: true, + get: function get() { + return _text; + }, + set: function set(value) { + _text = value; + } + }); + var _lineNumber = arguments[5]; + Object.defineProperty(this, "lineNumber", { + enumerable: true, + get: function get() { + return _lineNumber; + }, + set: function set(value) { + _lineNumber = value; + } + }); + var _align = arguments[6]; + Object.defineProperty(this, "align", { + enumerable: true, + get: function get() { + return _align; + }, + set: function set(value) { + _align = value; + } + }); + return this; + }; + + Cell.prototype.clone = function () { + return new Cell(this.x, this.y, this.width, this.height, this.text, this.lineNumber, this.align); + }; + + Cell.prototype.toArray = function () { + return [this.x, this.y, this.width, this.height, this.text, this.lineNumber, this.align]; + }; + /** + * @name setHeaderFunction + * @function + * @param {function} func + */ + + + jsPDFAPI.setHeaderFunction = function (func) { + _initialize.call(this); + + this.internal.__cell__.headerFunction = typeof func === "function" ? func : undefined; + return this; + }; + /** + * @name getTextDimensions + * @function + * @param {string} txt + * @returns {Object} dimensions + */ + + + jsPDFAPI.getTextDimensions = function (text, options) { + _initialize.call(this); + + options = options || {}; + var fontSize = options.fontSize || this.getFontSize(); + var font = options.font || this.getFont(); + var scaleFactor = options.scaleFactor || this.internal.scaleFactor; + var width = 0; + var amountOfLines = 0; + var height = 0; + var tempWidth = 0; + var scope = this; + + if (!Array.isArray(text) && typeof text !== "string") { + if (typeof text === "number") { + text = String(text); + } else { + throw new Error("getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings."); + } + } + + var maxWidth = options.maxWidth; + + if (maxWidth > 0) { + if (typeof text === "string") { + text = this.splitTextToSize(text, maxWidth); + } else if (Object.prototype.toString.call(text) === "[object Array]") { + text = text.reduce(function (acc, textLine) { + return acc.concat(scope.splitTextToSize(textLine, maxWidth)); + }, []); + } + } else { + // Without the else clause, it will not work if you do not pass along maxWidth + text = Array.isArray(text) ? text : [text]; + } + + for (var i = 0; i < text.length; i++) { + tempWidth = this.getStringUnitWidth(text[i], { + font: font + }) * fontSize; + + if (width < tempWidth) { + width = tempWidth; + } + } + + if (width !== 0) { + amountOfLines = text.length; + } + + width = width / scaleFactor; + height = Math.max((amountOfLines * fontSize * this.getLineHeightFactor() - fontSize * (this.getLineHeightFactor() - 1)) / scaleFactor, 0); + return { + w: width, + h: height + }; + }; + /** + * @name cellAddPage + * @function + */ + + + jsPDFAPI.cellAddPage = function () { + _initialize.call(this); + + this.addPage(); + var margins = this.internal.__cell__.margins || NO_MARGINS; + this.internal.__cell__.lastCell = new Cell(margins.left, margins.top, undefined, undefined); + this.internal.__cell__.pages += 1; + return this; + }; + /** + * @name cell + * @function + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {string} text + * @param {number} lineNumber lineNumber + * @param {string} align + * @return {jsPDF} jsPDF-instance + */ + + + var cell = jsPDFAPI.cell = function () { + var currentCell; + + if (arguments[0] instanceof Cell) { + currentCell = arguments[0]; + } else { + currentCell = new Cell(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + + _initialize.call(this); + + var lastCell = this.internal.__cell__.lastCell; + var padding = this.internal.__cell__.padding; + var margins = this.internal.__cell__.margins || NO_MARGINS; + var tableHeaderRow = this.internal.__cell__.tableHeaderRow; + var printHeaders = this.internal.__cell__.printHeaders; // If this is not the first cell, we must change its position + + if (typeof lastCell.lineNumber !== "undefined") { + if (lastCell.lineNumber === currentCell.lineNumber) { + //Same line + currentCell.x = (lastCell.x || 0) + (lastCell.width || 0); + currentCell.y = lastCell.y || 0; + } else { + //New line + if (lastCell.y + lastCell.height + currentCell.height + margins.bottom > this.getPageHeight()) { + this.cellAddPage(); + currentCell.y = margins.top; + + if (printHeaders && tableHeaderRow) { + this.printHeaderRow(currentCell.lineNumber, true); + currentCell.y += tableHeaderRow[0].height; + } + } else { + currentCell.y = lastCell.y + lastCell.height || currentCell.y; + } + } + } + + if (typeof currentCell.text[0] !== "undefined") { + this.rect(currentCell.x, currentCell.y, currentCell.width, currentCell.height, printingHeaderRow === true ? "FD" : undefined); + + if (currentCell.align === "right") { + this.text(currentCell.text, currentCell.x + currentCell.width - padding, currentCell.y + padding, { + align: "right", + baseline: "top" + }); + } else if (currentCell.align === "center") { + this.text(currentCell.text, currentCell.x + currentCell.width / 2, currentCell.y + padding, { + align: "center", + baseline: "top", + maxWidth: currentCell.width - padding - padding + }); + } else { + this.text(currentCell.text, currentCell.x + padding, currentCell.y + padding, { + align: "left", + baseline: "top", + maxWidth: currentCell.width - padding - padding + }); + } + } + + this.internal.__cell__.lastCell = currentCell; + return this; + }; + /** + * Create a table from a set of data. + * @name table + * @function + * @param {Integer} [x] : left-position for top-left corner of table + * @param {Integer} [y] top-position for top-left corner of table + * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data. + * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost + * @param {Object} [config.printHeaders] True to print column headers at the top of every page + * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value + * @param {Object} [config.margins] margin values for left, top, bottom, and width + * @param {Object} [config.fontSize] Integer fontSize to use (optional) + * @param {Object} [config.padding] cell-padding in pt to use (optional) + * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional) + * @param {Object} [config.headerTextColor] default is #000 (optional) + * @param {Object} [config.rowStart] callback to handle before print each row (optional) + * @param {Object} [config.cellStart] callback to handle before print each cell (optional) + * @returns {jsPDF} jsPDF-instance + */ + + + jsPDFAPI.table = function (x, y, data, headers, config) { + _initialize.call(this); + + if (!data) { + throw new Error("No data for PDF table."); + } + + config = config || {}; + var headerNames = [], + headerLabels = [], + headerAligns = [], + i, + columnMatrix = {}, + columnWidths = {}, + column, + columnMinWidths = [], + j, + tableHeaderConfigs = [], + //set up defaults. If a value is provided in config, defaults will be overwritten: + autoSize = config.autoSize || false, + printHeaders = config.printHeaders === false ? false : true, + fontSize = config.css && typeof config.css["font-size"] !== "undefined" ? config.css["font-size"] * 16 : config.fontSize || 12, + margins = config.margins || Object.assign({ + width: this.getPageWidth() + }, NO_MARGINS), + padding = typeof config.padding === "number" ? config.padding : 3, + headerBackgroundColor = config.headerBackgroundColor || "#c8c8c8", + headerTextColor = config.headerTextColor || "#000"; + + _reset.call(this); + + this.internal.__cell__.printHeaders = printHeaders; + this.internal.__cell__.margins = margins; + this.internal.__cell__.table_font_size = fontSize; + this.internal.__cell__.padding = padding; + this.internal.__cell__.headerBackgroundColor = headerBackgroundColor; + this.internal.__cell__.headerTextColor = headerTextColor; + this.setFontSize(fontSize); // Set header values + + if (headers === undefined || headers === null) { + // No headers defined so we derive from data + headerNames = Object.keys(data[0]); + headerLabels = headerNames; + headerAligns = headerNames.map(function () { + return "left"; + }); + } else if (Array.isArray(headers) && _typeof(headers[0]) === "object") { + headerNames = headers.map(function (header) { + return header.name; + }); + headerLabels = headers.map(function (header) { + return header.prompt || header.name || ""; + }); + headerAligns = headers.map(function (header) { + return header.align || "left"; + }); // Split header configs into names and prompts + + for (i = 0; i < headers.length; i += 1) { + columnWidths[headers[i].name] = headers[i].width * px2pt; + } + } else if (Array.isArray(headers) && typeof headers[0] === "string") { + headerNames = headers; + headerLabels = headerNames; + headerAligns = headerNames.map(function () { + return "left"; + }); + } + + if (autoSize || Array.isArray(headers) && typeof headers[0] === "string") { + var headerName; + + for (i = 0; i < headerNames.length; i += 1) { + headerName = headerNames[i]; // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]} + + columnMatrix[headerName] = data.map(function (rec) { + return rec[headerName]; + }); // get header width + + this.setFont(undefined, "bold"); + columnMinWidths.push(this.getTextDimensions(headerLabels[i], { + fontSize: this.internal.__cell__.table_font_size, + scaleFactor: this.internal.scaleFactor + }).w); + column = columnMatrix[headerName]; // get cell widths + + this.setFont(undefined, "normal"); + + for (j = 0; j < column.length; j += 1) { + columnMinWidths.push(this.getTextDimensions(column[j], { + fontSize: this.internal.__cell__.table_font_size, + scaleFactor: this.internal.scaleFactor + }).w); + } // get final column width + + + columnWidths[headerName] = Math.max.apply(null, columnMinWidths) + padding + padding; //have to reset + + columnMinWidths = []; + } + } // -- Construct the table + + + if (printHeaders) { + var row = {}; + + for (i = 0; i < headerNames.length; i += 1) { + row[headerNames[i]] = {}; + row[headerNames[i]].text = headerLabels[i]; + row[headerNames[i]].align = headerAligns[i]; + } + + var rowHeight = calculateLineHeight.call(this, row, columnWidths); // Construct the header row + + tableHeaderConfigs = headerNames.map(function (value) { + return new Cell(x, y, columnWidths[value], rowHeight, row[value].text, undefined, row[value].align); + }); // Store the table header config + + this.setTableHeaderRow(tableHeaderConfigs); // Print the header for the start of the table + + this.printHeaderRow(1, false); + } // Construct the data rows + + + var align = headers.reduce(function (pv, cv) { + pv[cv.name] = cv.align; + return pv; + }, {}); + + for (i = 0; i < data.length; i += 1) { + if ("rowStart" in config && config.rowStart instanceof Function) { + config.rowStart({ + row: i, + data: data[i] + }, this); + } + + var lineHeight = calculateLineHeight.call(this, data[i], columnWidths); + + for (j = 0; j < headerNames.length; j += 1) { + var cellData = data[i][headerNames[j]]; + + if ("cellStart" in config && config.cellStart instanceof Function) { + config.cellStart({ + row: i, + col: j, + data: cellData + }, this); + } + + cell.call(this, new Cell(x, y, columnWidths[headerNames[j]], lineHeight, cellData, i + 2, align[headerNames[j]])); + } + } + + this.internal.__cell__.table_x = x; + this.internal.__cell__.table_y = y; + return this; + }; + /** + * Calculate the height for containing the highest column + * + * @name calculateLineHeight + * @function + * @param {Object[]} model is the line of data we want to calculate the height of + * @param {Integer[]} columnWidths is size of each column + * @returns {number} lineHeight + * @private + */ + + + var calculateLineHeight = function calculateLineHeight(model, columnWidths) { + var padding = this.internal.__cell__.padding; + var fontSize = this.internal.__cell__.table_font_size; + var scaleFactor = this.internal.scaleFactor; + return Object.keys(model).map(function (key) { + var value = model[key]; + return this.splitTextToSize(value.hasOwnProperty("text") ? value.text : value, columnWidths[key] - padding - padding); + }, this).map(function (value) { + return this.getLineHeightFactor() * value.length * fontSize / scaleFactor + padding + padding; + }, this).reduce(function (pv, cv) { + return Math.max(pv, cv); + }, 0); + }; + /** + * Store the config for outputting a table header + * + * @name setTableHeaderRow + * @function + * @param {Object[]} config + * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell + * except the lineNumber parameter is excluded + */ + + + jsPDFAPI.setTableHeaderRow = function (config) { + _initialize.call(this); + + this.internal.__cell__.tableHeaderRow = config; + }; + /** + * Output the store header row + * + * @name printHeaderRow + * @function + * @param {number} lineNumber The line number to output the header at + * @param {boolean} new_page + */ + + + jsPDFAPI.printHeaderRow = function (lineNumber, new_page) { + _initialize.call(this); + + if (!this.internal.__cell__.tableHeaderRow) { + throw new Error("Property tableHeaderRow does not exist."); + } + + var tableHeaderCell; + printingHeaderRow = true; + + if (typeof this.internal.__cell__.headerFunction === "function") { + var position = this.internal.__cell__.headerFunction(this, this.internal.__cell__.pages); + + this.internal.__cell__.lastCell = new Cell(position[0], position[1], position[2], position[3], undefined, -1); + } + + this.setFont(undefined, "bold"); + var tempHeaderConf = []; + + for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) { + tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone(); + + if (new_page) { + tableHeaderCell.y = this.internal.__cell__.margins.top || 0; + tempHeaderConf.push(tableHeaderCell); + } + + tableHeaderCell.lineNumber = lineNumber; + var currentTextColor = this.getTextColor(); + this.setTextColor(this.internal.__cell__.headerTextColor); + this.setFillColor(this.internal.__cell__.headerBackgroundColor); + cell.call(this, tableHeaderCell); + this.setTextColor(currentTextColor); + } + + if (tempHeaderConf.length > 0) { + this.setTableHeaderRow(tempHeaderConf); + } + + this.setFont(undefined, "normal"); + printingHeaderRow = false; + }; + })(jsPDF.API); + + function toLookup(arr) { + return arr.reduce(function (lookup, name, index) { + lookup[name] = index; + return lookup; + }, {}); + } + + var fontStyleOrder = { + italic: ["italic", "oblique", "normal"], + oblique: ["oblique", "italic", "normal"], + normal: ["normal", "oblique", "italic"] + }; + var fontStretchOrder = ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"]; // For a given font-stretch value, we need to know where to start our search + // from in the fontStretchOrder list. + + var fontStretchLookup = toLookup(fontStretchOrder); + var fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900]; + var fontWeightsLookup = toLookup(fontWeights); + + function normalizeFontStretch(stretch) { + stretch = stretch || "normal"; + return typeof fontStretchLookup[stretch] === "number" ? stretch : "normal"; + } + + function normalizeFontStyle(style) { + style = style || "normal"; + return fontStyleOrder[style] ? style : "normal"; + } + + function normalizeFontWeight(weight) { + if (!weight) { + return 400; + } + + if (typeof weight === "number") { + // Ignore values which aren't valid font-weights. + return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400; + } + + if (/^\d00$/.test(weight)) { + return parseInt(weight); + } + + switch (weight) { + case "bold": + return 700; + + case "normal": + default: + return 400; + } + } + + function normalizeFontFace(fontFace) { + var family = fontFace.family.replace(/"|'/g, "").toLowerCase(); + var style = normalizeFontStyle(fontFace.style); + var weight = normalizeFontWeight(fontFace.weight); + var stretch = normalizeFontStretch(fontFace.stretch); + return { + family: family, + style: style, + weight: weight, + stretch: stretch, + src: fontFace.src || [], + // The ref property maps this font-face to the font + // added by the .addFont() method. + ref: fontFace.ref || { + name: family, + style: [stretch, style, weight].join(" ") + } + }; + } + /** + * Turns a list of font-faces into a map, for easier lookup when resolving + * fonts. + * @private + */ + + function buildFontFaceMap(fontFaces) { + var map = {}; + + for (var i = 0; i < fontFaces.length; ++i) { + var normalized = normalizeFontFace(fontFaces[i]); + var name = normalized.family; + var stretch = normalized.stretch; + var style = normalized.style; + var weight = normalized.weight; + map[name] = map[name] || {}; + map[name][stretch] = map[name][stretch] || {}; + map[name][stretch][style] = map[name][stretch][style] || {}; + map[name][stretch][style][weight] = normalized; + } + + return map; + } + /** + * Searches a map of stretches, weights, etc. in the given direction and + * then, if no match has been found, in the opposite directions. + * + * @param {Object.} matchingSet A map of the various font variations. + * @param {any[]} order The order of the different variations + * @param {number} pivot The starting point of the search in the order list. + * @param {number} dir The initial direction of the search (desc = -1, asc = 1) + * @private + */ + + function searchFromPivot(matchingSet, order, pivot, dir) { + var i; + + for (i = pivot; i >= 0 && i < order.length; i += dir) { + if (matchingSet[order[i]]) { + return matchingSet[order[i]]; + } + } + + for (i = pivot; i >= 0 && i < order.length; i -= dir) { + if (matchingSet[order[i]]) { + return matchingSet[order[i]]; + } + } + } + + function resolveFontStretch(stretch, matchingSet) { + if (matchingSet[stretch]) { + return matchingSet[stretch]; + } + + var pivot = fontStretchLookup[stretch]; // If the font-stretch value is normal or more condensed, we want to + // start with a descending search, otherwise we should do ascending. + + var dir = pivot <= fontStretchLookup["normal"] ? -1 : 1; + var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir); + + if (!match) { + // Since a font-family cannot exist without having at least one stretch value + // we should never reach this point. + throw new Error("Could not find a matching font-stretch value for " + stretch); + } + + return match; + } + + function resolveFontStyle(fontStyle, matchingSet) { + if (matchingSet[fontStyle]) { + return matchingSet[fontStyle]; + } + + var ordering = fontStyleOrder[fontStyle]; + + for (var i = 0; i < ordering.length; ++i) { + if (matchingSet[ordering[i]]) { + return matchingSet[ordering[i]]; + } + } // Since a font-family cannot exist without having at least one style value + // we should never reach this point. + + + throw new Error("Could not find a matching font-style for " + fontStyle); + } + + function resolveFontWeight(weight, matchingSet) { + if (matchingSet[weight]) { + return matchingSet[weight]; + } + + if (weight === 400 && matchingSet[500]) { + return matchingSet[500]; + } + + if (weight === 500 && matchingSet[400]) { + return matchingSet[400]; + } + + var pivot = fontWeightsLookup[weight]; // If the font-stretch value is normal or more condensed, we want to + // start with a descending search, otherwise we should do ascending. + + var dir = weight < 400 ? -1 : 1; + var match = searchFromPivot(matchingSet, fontWeights, pivot, dir); + + if (!match) { + // Since a font-family cannot exist without having at least one stretch value + // we should never reach this point. + throw new Error("Could not find a matching font-weight for value " + weight); + } + + return match; + } + + var defaultGenericFontFamilies = { + "sans-serif": "helvetica", + fixed: "courier", + monospace: "courier", + terminal: "courier", + cursive: "times", + fantasy: "times", + serif: "times" + }; + var systemFonts = { + caption: "times", + icon: "times", + menu: "times", + "message-box": "times", + "small-caption": "times", + "status-bar": "times" + }; + + function ruleToString(rule) { + return [rule.stretch, rule.style, rule.weight, rule.family].join(" "); + } + + function resolveFontFace(fontFaceMap, rules, opts) { + opts = opts || {}; + var defaultFontFamily = opts.defaultFontFamily || "times"; + var genericFontFamilies = Object.assign({}, defaultGenericFontFamilies, opts.genericFontFamilies || {}); + var rule = null; + var matches = null; + + for (var i = 0; i < rules.length; ++i) { + rule = normalizeFontFace(rules[i]); + + if (genericFontFamilies[rule.family]) { + rule.family = genericFontFamilies[rule.family]; + } + + if (fontFaceMap.hasOwnProperty(rule.family)) { + matches = fontFaceMap[rule.family]; + break; + } + } // Always fallback to a known font family. + + + matches = matches || fontFaceMap[defaultFontFamily]; + + if (!matches) { + // At this point we should definitiely have a font family, but if we + // don't there is something wrong with our configuration + throw new Error("Could not find a font-family for the rule '" + ruleToString(rule) + "' and default family '" + defaultFontFamily + "'."); + } + + matches = resolveFontStretch(rule.stretch, matches); + matches = resolveFontStyle(rule.style, matches); + matches = resolveFontWeight(rule.weight, matches); + + if (!matches) { + // We should've fount + throw new Error("Failed to resolve a font for the rule '" + ruleToString(rule) + "'."); + } + + return matches; + } + + function eatWhiteSpace(input) { + return input.trimLeft(); + } + + function parseQuotedFontFamily(input, quote) { + var index = 0; + + while (index < input.length) { + var current = input.charAt(index); + + if (current === quote) { + return [input.substring(0, index), input.substring(index + 1)]; + } + + index += 1; + } // Unexpected end of input + + + return null; + } + + function parseNonQuotedFontFamily(input) { + // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + // + // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode. + // + // Breakdown of regexp: + // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit + // [a-z_] - allow a-z and underscore at beginning of input + // [a-z0-9_-]* - after that, anything goes + var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i); // non quoted value contains illegal characters + + if (match === null) { + return null; + } + + return [match[0], input.substring(match[0].length)]; + } + + var defaultFont = ["times"]; + function parseFontFamily(input) { + var result = []; + var ch, parsed; + var remaining = input.trim(); + + if (remaining === "") { + return defaultFont; + } + + if (remaining in systemFonts) { + return [systemFonts[remaining]]; + } + + while (remaining !== "") { + parsed = null; + remaining = eatWhiteSpace(remaining); + ch = remaining.charAt(0); + + switch (ch) { + case '"': + case "'": + parsed = parseQuotedFontFamily(remaining.substring(1), ch); + break; + + default: + parsed = parseNonQuotedFontFamily(remaining); + break; + } + + if (parsed === null) { + return defaultFont; + } + + result.push(parsed[0]); + remaining = eatWhiteSpace(parsed[1]); // We expect end of input or a comma separator here + + if (remaining !== "" && remaining.charAt(0) !== ",") { + return defaultFont; + } + + remaining = remaining.replace(/^,/, ""); + } + + return result; + } + + /** + * This plugin mimics the HTML5 CanvasRenderingContext2D. + * + * The goal is to provide a way for current canvas implementations to print directly to a PDF. + * + * @name context2d + * @module + */ + + (function (jsPDFAPI) { + + var ContextLayer = function ContextLayer(ctx) { + ctx = ctx || {}; + this.isStrokeTransparent = ctx.isStrokeTransparent || false; + this.strokeOpacity = ctx.strokeOpacity || 1; + this.strokeStyle = ctx.strokeStyle || "#000000"; + this.fillStyle = ctx.fillStyle || "#000000"; + this.isFillTransparent = ctx.isFillTransparent || false; + this.fillOpacity = ctx.fillOpacity || 1; + this.font = ctx.font || "10px sans-serif"; + this.textBaseline = ctx.textBaseline || "alphabetic"; + this.textAlign = ctx.textAlign || "left"; + this.lineWidth = ctx.lineWidth || 1; + this.lineJoin = ctx.lineJoin || "miter"; + this.lineCap = ctx.lineCap || "butt"; + this.path = ctx.path || []; + this.transform = typeof ctx.transform !== "undefined" ? ctx.transform.clone() : new Matrix(); + this.globalCompositeOperation = ctx.globalCompositeOperation || "normal"; + this.globalAlpha = ctx.globalAlpha || 1.0; + this.clip_path = ctx.clip_path || []; + this.currentPoint = ctx.currentPoint || new Point(); + this.miterLimit = ctx.miterLimit || 10.0; + this.lastPoint = ctx.lastPoint || new Point(); + this.lineDashOffset = ctx.lineDashOffset || 0.0; + this.lineDash = ctx.lineDash || []; + this.margin = ctx.margin || [0, 0, 0, 0]; + this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0; + this.ignoreClearRect = typeof ctx.ignoreClearRect === "boolean" ? ctx.ignoreClearRect : true; + return this; + }; //stub + + + var f2, getHorizontalCoordinateString, getVerticalCoordinateString, getHorizontalCoordinate, getVerticalCoordinate, Point, Rectangle, Matrix, _ctx; + + jsPDFAPI.events.push(["initialized", function () { + this.context2d = new Context2D(this); + f2 = this.internal.f2; + getHorizontalCoordinateString = this.internal.getCoordinateString; + getVerticalCoordinateString = this.internal.getVerticalCoordinateString; + getHorizontalCoordinate = this.internal.getHorizontalCoordinate; + getVerticalCoordinate = this.internal.getVerticalCoordinate; + Point = this.internal.Point; + Rectangle = this.internal.Rectangle; + Matrix = this.internal.Matrix; + _ctx = new ContextLayer(); + }]); + + var Context2D = function Context2D(pdf) { + Object.defineProperty(this, "canvas", { + get: function get() { + return { + parentNode: false, + style: false + }; + } + }); + var _pdf = pdf; + Object.defineProperty(this, "pdf", { + get: function get() { + return _pdf; + } + }); + var _pageWrapXEnabled = false; + /** + * @name pageWrapXEnabled + * @type {boolean} + * @default false + */ + + Object.defineProperty(this, "pageWrapXEnabled", { + get: function get() { + return _pageWrapXEnabled; + }, + set: function set(value) { + _pageWrapXEnabled = Boolean(value); + } + }); + var _pageWrapYEnabled = false; + /** + * @name pageWrapYEnabled + * @type {boolean} + * @default true + */ + + Object.defineProperty(this, "pageWrapYEnabled", { + get: function get() { + return _pageWrapYEnabled; + }, + set: function set(value) { + _pageWrapYEnabled = Boolean(value); + } + }); + var _posX = 0; + /** + * @name posX + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "posX", { + get: function get() { + return _posX; + }, + set: function set(value) { + if (!isNaN(value)) { + _posX = value; + } + } + }); + var _posY = 0; + /** + * @name posY + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "posY", { + get: function get() { + return _posY; + }, + set: function set(value) { + if (!isNaN(value)) { + _posY = value; + } + } + }); + /** + * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off. + * @name margin + * @type {number|number[]} + * @default [0, 0, 0, 0] + */ + + Object.defineProperty(this, "margin", { + get: function get() { + return _ctx.margin; + }, + set: function set(value) { + var margin; + + if (typeof value === "number") { + margin = [value, value, value, value]; + } else { + margin = new Array(4); + margin[0] = value[0]; + margin[1] = value.length >= 2 ? value[1] : margin[0]; + margin[2] = value.length >= 3 ? value[2] : margin[0]; + margin[3] = value.length >= 4 ? value[3] : margin[1]; + } + + _ctx.margin = margin; + } + }); + var _autoPaging = false; + /** + * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the + * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new + * pages if required. + * + * Context2d supports different modes: + *
      + *
    • + * false: Auto paging is disabled. + *
    • + *
    • + * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly + * slice text in half, making it difficult to read. + *
    • + *
    • + * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting + * mostly of a single column of text. + *
    • + *
    + * @name Context2D#autoPaging + * @type {boolean|"slice"|"text"} + * @default false + */ + + Object.defineProperty(this, "autoPaging", { + get: function get() { + return _autoPaging; + }, + set: function set(value) { + _autoPaging = value; + } + }); + var lastBreak = 0; + /** + * @name lastBreak + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "lastBreak", { + get: function get() { + return lastBreak; + }, + set: function set(value) { + lastBreak = value; + } + }); + var pageBreaks = []; + /** + * Y Position of page breaks. + * @name pageBreaks + * @type {number} + * @default 0 + */ + + Object.defineProperty(this, "pageBreaks", { + get: function get() { + return pageBreaks; + }, + set: function set(value) { + pageBreaks = value; + } + }); + /** + * @name ctx + * @type {object} + * @default {} + */ + + Object.defineProperty(this, "ctx", { + get: function get() { + return _ctx; + }, + set: function set(value) { + if (value instanceof ContextLayer) { + _ctx = value; + } + } + }); + /** + * @name path + * @type {array} + * @default [] + */ + + Object.defineProperty(this, "path", { + get: function get() { + return _ctx.path; + }, + set: function set(value) { + _ctx.path = value; + } + }); + /** + * @name ctxStack + * @type {array} + * @default [] + */ + + var _ctxStack = []; + Object.defineProperty(this, "ctxStack", { + get: function get() { + return _ctxStack; + }, + set: function set(value) { + _ctxStack = value; + } + }); + /** + * Sets or returns the color, gradient, or pattern used to fill the drawing + * + * @name fillStyle + * @default #000000 + * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    + * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    + * A pattern object to use to fill the drawing (not supported by context2d) + */ + + Object.defineProperty(this, "fillStyle", { + get: function get() { + return this.ctx.fillStyle; + }, + set: function set(value) { + var rgba; + rgba = getRGBA(value); + this.ctx.fillStyle = rgba.style; + this.ctx.isFillTransparent = rgba.a === 0; + this.ctx.fillOpacity = rgba.a; + this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { + a: rgba.a + }); + this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { + a: rgba.a + }); + } + }); + /** + * Sets or returns the color, gradient, or pattern used for strokes + * + * @name strokeStyle + * @default #000000 + * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d) + * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d) + * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d) + */ + + Object.defineProperty(this, "strokeStyle", { + get: function get() { + return this.ctx.strokeStyle; + }, + set: function set(value) { + var rgba = getRGBA(value); + this.ctx.strokeStyle = rgba.style; + this.ctx.isStrokeTransparent = rgba.a === 0; + this.ctx.strokeOpacity = rgba.a; + + if (rgba.a === 0) { + this.pdf.setDrawColor(255, 255, 255); + } else if (rgba.a === 1) { + this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b); + } else { + this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b); + } + } + }); + /** + * Sets or returns the style of the end caps for a line + * + * @name lineCap + * @default butt + * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    + * round A rounded end cap is added to each end of the line
    + * square A square end cap is added to each end of the line
    + */ + + Object.defineProperty(this, "lineCap", { + get: function get() { + return this.ctx.lineCap; + }, + set: function set(value) { + if (["butt", "round", "square"].indexOf(value) !== -1) { + this.ctx.lineCap = value; + this.pdf.setLineCap(value); + } + } + }); + /** + * Sets or returns the current line width + * + * @name lineWidth + * @default 1 + * @property {number} lineWidth The current line width, in pixels + */ + + Object.defineProperty(this, "lineWidth", { + get: function get() { + return this.ctx.lineWidth; + }, + set: function set(value) { + if (!isNaN(value)) { + this.ctx.lineWidth = value; + this.pdf.setLineWidth(value); + } + } + }); + /** + * Sets or returns the type of corner created, when two lines meet + */ + + Object.defineProperty(this, "lineJoin", { + get: function get() { + return this.ctx.lineJoin; + }, + set: function set(value) { + if (["bevel", "round", "miter"].indexOf(value) !== -1) { + this.ctx.lineJoin = value; + this.pdf.setLineJoin(value); + } + } + }); + /** + * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0. + * + * @name miterLimit + * @default 10 + */ + + Object.defineProperty(this, "miterLimit", { + get: function get() { + return this.ctx.miterLimit; + }, + set: function set(value) { + if (!isNaN(value)) { + this.ctx.miterLimit = value; + this.pdf.setMiterLimit(value); + } + } + }); + Object.defineProperty(this, "textBaseline", { + get: function get() { + return this.ctx.textBaseline; + }, + set: function set(value) { + this.ctx.textBaseline = value; + } + }); + Object.defineProperty(this, "textAlign", { + get: function get() { + return this.ctx.textAlign; + }, + set: function set(value) { + if (["right", "end", "center", "left", "start"].indexOf(value) !== -1) { + this.ctx.textAlign = value; + } + } + }); + var _fontFaceMap = null; + + function getFontFaceMap(pdf, fontFaces) { + if (_fontFaceMap === null) { + var fontMap = pdf.getFontList(); + var convertedFontFaces = convertToFontFaces(fontMap); + _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces)); + } + + return _fontFaceMap; + } + + function convertToFontFaces(fontMap) { + var fontFaces = []; + Object.keys(fontMap).forEach(function (family) { + var styles = fontMap[family]; + styles.forEach(function (style) { + var fontFace = null; + + switch (style) { + case "bold": + fontFace = { + family: family, + weight: "bold" + }; + break; + + case "italic": + fontFace = { + family: family, + style: "italic" + }; + break; + + case "bolditalic": + fontFace = { + family: family, + weight: "bold", + style: "italic" + }; + break; + + case "": + case "normal": + fontFace = { + family: family + }; + break; + } // If font-face is still null here, it is a font with some styling we don't recognize and + // cannot map or it is a font added via the fontFaces option of .html(). + + + if (fontFace !== null) { + fontFace.ref = { + name: family, + style: style + }; + fontFaces.push(fontFace); + } + }); + }); + return fontFaces; + } + + var _fontFaces = null; + /** + * A map of available font-faces, as passed in the options of + * .html(). If set a limited implementation of the font style matching + * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm + * will be used. If not set it will fallback to previous behavior. + */ + + Object.defineProperty(this, "fontFaces", { + get: function get() { + return _fontFaces; + }, + set: function set(value) { + _fontFaceMap = null; + _fontFaces = value; + } + }); + Object.defineProperty(this, "font", { + get: function get() { + return this.ctx.font; + }, + set: function set(value) { + this.ctx.font = value; + var rx, matches; //source: https://stackoverflow.com/a/10136041 + // eslint-disable-next-line no-useless-escape + + rx = /^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z]+?)\s*$/i; + matches = rx.exec(value); + + if (matches !== null) { + var fontStyle = matches[1]; + var fontVariant = matches[2]; + var fontWeight = matches[3]; + var fontSize = matches[4]; + var lineHeight = matches[5]; + var fontFamily = matches[6]; + } else { + return; + } + + var rxFontSize = /^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i; + var fontSizeUnit = rxFontSize.exec(fontSize)[2]; + + if ("px" === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.internal.scaleFactor); + } else if ("em" === fontSizeUnit) { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize()); + } else { + fontSize = Math.floor(parseFloat(fontSize) * this.pdf.internal.scaleFactor); + } + + this.pdf.setFontSize(fontSize); + var parts = parseFontFamily(fontFamily); + + if (this.fontFaces) { + var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces); + var rules = parts.map(function (ff) { + return { + family: ff, + stretch: "normal", + // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?) + weight: fontWeight, + style: fontStyle + }; + }); + var font = resolveFontFace(fontFaceMap, rules); + this.pdf.setFont(font.ref.name, font.ref.style); + return; + } + + var style = ""; + + if (fontWeight === "bold" || parseInt(fontWeight, 10) >= 700 || fontStyle === "bold") { + style = "bold"; + } + + if (fontStyle === "italic") { + style += "italic"; + } + + if (style.length === 0) { + style = "normal"; + } + + var jsPdfFontName = ""; + var fallbackFonts = { + arial: "Helvetica", + Arial: "Helvetica", + verdana: "Helvetica", + Verdana: "Helvetica", + helvetica: "Helvetica", + Helvetica: "Helvetica", + "sans-serif": "Helvetica", + fixed: "Courier", + monospace: "Courier", + terminal: "Courier", + cursive: "Times", + fantasy: "Times", + serif: "Times" + }; + + for (var i = 0; i < parts.length; i++) { + if (this.pdf.internal.getFont(parts[i], style, { + noFallback: true, + disableWarning: true + }) !== undefined) { + jsPdfFontName = parts[i]; + break; + } else if (style === "bolditalic" && this.pdf.internal.getFont(parts[i], "bold", { + noFallback: true, + disableWarning: true + }) !== undefined) { + jsPdfFontName = parts[i]; + style = "bold"; + } else if (this.pdf.internal.getFont(parts[i], "normal", { + noFallback: true, + disableWarning: true + }) !== undefined) { + jsPdfFontName = parts[i]; + style = "normal"; + break; + } + } + + if (jsPdfFontName === "") { + for (var j = 0; j < parts.length; j++) { + if (fallbackFonts[parts[j]]) { + jsPdfFontName = fallbackFonts[parts[j]]; + break; + } + } + } + + jsPdfFontName = jsPdfFontName === "" ? "Times" : jsPdfFontName; + this.pdf.setFont(jsPdfFontName, style); + } + }); + Object.defineProperty(this, "globalCompositeOperation", { + get: function get() { + return this.ctx.globalCompositeOperation; + }, + set: function set(value) { + this.ctx.globalCompositeOperation = value; + } + }); + Object.defineProperty(this, "globalAlpha", { + get: function get() { + return this.ctx.globalAlpha; + }, + set: function set(value) { + this.ctx.globalAlpha = value; + } + }); + /** + * A float specifying the amount of the line dash offset. The default value is 0.0. + * + * @name lineDashOffset + * @default 0.0 + */ + + Object.defineProperty(this, "lineDashOffset", { + get: function get() { + return this.ctx.lineDashOffset; + }, + set: function set(value) { + this.ctx.lineDashOffset = value; + setLineDash.call(this); + } + }); // Not HTML API + + Object.defineProperty(this, "lineDash", { + get: function get() { + return this.ctx.lineDash; + }, + set: function set(value) { + this.ctx.lineDash = value; + setLineDash.call(this); + } + }); // Not HTML API + + Object.defineProperty(this, "ignoreClearRect", { + get: function get() { + return this.ctx.ignoreClearRect; + }, + set: function set(value) { + this.ctx.ignoreClearRect = Boolean(value); + } + }); + }; + /** + * Sets the line dash pattern used when stroking lines. + * @name setLineDash + * @function + * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern. + */ + + + Context2D.prototype.setLineDash = function (dashArray) { + this.lineDash = dashArray; + }; + /** + * gets the current line dash pattern. + * @name getLineDash + * @function + * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25]. + */ + + + Context2D.prototype.getLineDash = function () { + if (this.lineDash.length % 2) { + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value + return this.lineDash.concat(this.lineDash); + } else { + // The copied value is returned to prevent contamination from outside. + return this.lineDash.slice(); + } + }; + + Context2D.prototype.fill = function () { + pathPreProcess.call(this, "fill", false); + }; + /** + * Actually draws the path you have defined + * + * @name stroke + * @function + * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black. + */ + + + Context2D.prototype.stroke = function () { + pathPreProcess.call(this, "stroke", false); + }; + /** + * Begins a path, or resets the current + * + * @name beginPath + * @function + * @description The beginPath() method begins a path, or resets the current path. + */ + + + Context2D.prototype.beginPath = function () { + this.path = [{ + type: "begin" + }]; + }; + /** + * Moves the path to the specified point in the canvas, without creating a line + * + * @name moveTo + * @function + * @param x {Number} The x-coordinate of where to move the path to + * @param y {Number} The y-coordinate of where to move the path to + */ + + + Context2D.prototype.moveTo = function (x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.moveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.moveTo"); + } + + var pt = this.ctx.transform.applyToPoint(new Point(x, y)); + this.path.push({ + type: "mt", + x: pt.x, + y: pt.y + }); + this.ctx.lastPoint = new Point(x, y); + }; + /** + * Creates a path from the current point back to the starting point + * + * @name closePath + * @function + * @description The closePath() method creates a path from the current point back to the starting point. + */ + + + Context2D.prototype.closePath = function () { + var pathBegin = new Point(0, 0); + var i = 0; + + for (i = this.path.length - 1; i !== -1; i--) { + if (this.path[i].type === "begin") { + if (_typeof(this.path[i + 1]) === "object" && typeof this.path[i + 1].x === "number") { + pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y); + break; + } + } + } + + this.path.push({ + type: "close" + }); + this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y); + }; + /** + * Adds a new point and creates a line to that point from the last specified point in the canvas + * + * @name lineTo + * @function + * @param x The x-coordinate of where to create the line to + * @param y The y-coordinate of where to create the line to + * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line). + */ + + + Context2D.prototype.lineTo = function (x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.lineTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.lineTo"); + } + + var pt = this.ctx.transform.applyToPoint(new Point(x, y)); + this.path.push({ + type: "lt", + x: pt.x, + y: pt.y + }); + this.ctx.lastPoint = new Point(pt.x, pt.y); + }; + /** + * Clips a region of any shape and size from the original canvas + * + * @name clip + * @function + * @description The clip() method clips a region of any shape and size from the original canvas. + */ + + + Context2D.prototype.clip = function () { + this.ctx.clip_path = JSON.parse(JSON.stringify(this.path)); + pathPreProcess.call(this, null, true); + }; + /** + * Creates a cubic Bézier curve + * + * @name quadraticCurveTo + * @function + * @param cpx {Number} The x-coordinate of the Bézier control point + * @param cpy {Number} The y-coordinate of the Bézier control point + * @param x {Number} The x-coordinate of the ending point + * @param y {Number} The y-coordinate of the ending point + * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point. + */ + + + Context2D.prototype.quadraticCurveTo = function (cpx, cpy, x, y) { + if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) { + console.error("jsPDF.context2d.quadraticCurveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.quadraticCurveTo"); + } + + var pt0 = this.ctx.transform.applyToPoint(new Point(x, y)); + var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy)); + this.path.push({ + type: "qct", + x1: pt1.x, + y1: pt1.y, + x: pt0.x, + y: pt0.y + }); + this.ctx.lastPoint = new Point(pt0.x, pt0.y); + }; + /** + * Creates a cubic Bézier curve + * + * @name bezierCurveTo + * @function + * @param cp1x {Number} The x-coordinate of the first Bézier control point + * @param cp1y {Number} The y-coordinate of the first Bézier control point + * @param cp2x {Number} The x-coordinate of the second Bézier control point + * @param cp2y {Number} The y-coordinate of the second Bézier control point + * @param x {Number} The x-coordinate of the ending point + * @param y {Number} The y-coordinate of the ending point + * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point. + */ + + + Context2D.prototype.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + if (isNaN(x) || isNaN(y) || isNaN(cp1x) || isNaN(cp1y) || isNaN(cp2x) || isNaN(cp2y)) { + console.error("jsPDF.context2d.bezierCurveTo: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.bezierCurveTo"); + } + + var pt0 = this.ctx.transform.applyToPoint(new Point(x, y)); + var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y)); + var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y)); + this.path.push({ + type: "bct", + x1: pt1.x, + y1: pt1.y, + x2: pt2.x, + y2: pt2.y, + x: pt0.x, + y: pt0.y + }); + this.ctx.lastPoint = new Point(pt0.x, pt0.y); + }; + /** + * Creates an arc/curve (used to create circles, or parts of circles) + * + * @name arc + * @function + * @param x {Number} The x-coordinate of the center of the circle + * @param y {Number} The y-coordinate of the center of the circle + * @param radius {Number} The radius of the circle + * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle) + * @param endAngle {Number} The ending angle, in radians + * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise. + * @description The arc() method creates an arc/curve (used to create circles, or parts of circles). + */ + + + Context2D.prototype.arc = function (x, y, radius, startAngle, endAngle, counterclockwise) { + if (isNaN(x) || isNaN(y) || isNaN(radius) || isNaN(startAngle) || isNaN(endAngle)) { + console.error("jsPDF.context2d.arc: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.arc"); + } + + counterclockwise = Boolean(counterclockwise); + + if (!this.ctx.transform.isIdentity) { + var xpt = this.ctx.transform.applyToPoint(new Point(x, y)); + x = xpt.x; + y = xpt.y; + var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius)); + var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0)); + radius = Math.sqrt(Math.pow(x_radPt.x - x_radPt0.x, 2) + Math.pow(x_radPt.y - x_radPt0.y, 2)); + } + + if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) { + startAngle = 0; + endAngle = 2 * Math.PI; + } + + this.path.push({ + type: "arc", + x: x, + y: y, + radius: radius, + startAngle: startAngle, + endAngle: endAngle, + counterclockwise: counterclockwise + }); // this.ctx.lastPoint(new Point(pt.x,pt.y)); + }; + /** + * Creates an arc/curve between two tangents + * + * @name arcTo + * @function + * @param x1 {Number} The x-coordinate of the first tangent + * @param y1 {Number} The y-coordinate of the first tangent + * @param x2 {Number} The x-coordinate of the second tangent + * @param y2 {Number} The y-coordinate of the second tangent + * @param radius The radius of the arc + * @description The arcTo() method creates an arc/curve between two tangents on the canvas. + */ + // eslint-disable-next-line no-unused-vars + + + Context2D.prototype.arcTo = function (x1, y1, x2, y2, radius) { + throw new Error("arcTo not implemented."); + }; + /** + * Creates a rectangle + * + * @name rect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The rect() method creates a rectangle. + */ + + + Context2D.prototype.rect = function (x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.rect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.rect"); + } + + this.moveTo(x, y); + this.lineTo(x + w, y); + this.lineTo(x + w, y + h); + this.lineTo(x, y + h); + this.lineTo(x, y); + this.lineTo(x + w, y); + this.lineTo(x, y); + }; + /** + * Draws a "filled" rectangle + * + * @name fillRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The fillRect() method draws a "filled" rectangle. The default color of the fill is black. + */ + + + Context2D.prototype.fillRect = function (x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.fillRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.fillRect"); + } + + if (isFillTransparent.call(this)) { + return; + } + + var tmp = {}; + + if (this.lineCap !== "butt") { + tmp.lineCap = this.lineCap; + this.lineCap = "butt"; + } + + if (this.lineJoin !== "miter") { + tmp.lineJoin = this.lineJoin; + this.lineJoin = "miter"; + } + + this.beginPath(); + this.rect(x, y, w, h); + this.fill(); + + if (tmp.hasOwnProperty("lineCap")) { + this.lineCap = tmp.lineCap; + } + + if (tmp.hasOwnProperty("lineJoin")) { + this.lineJoin = tmp.lineJoin; + } + }; + /** + * Draws a rectangle (no fill) + * + * @name strokeRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle, in pixels + * @param h {Number} The height of the rectangle, in pixels + * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black. + */ + + + Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.strokeRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.strokeRect"); + } + + if (isStrokeTransparent.call(this)) { + return; + } + + this.beginPath(); + this.rect(x, y, w, h); + this.stroke(); + }; + /** + * Clears the specified pixels within a given rectangle + * + * @name clearRect + * @function + * @param x {Number} The x-coordinate of the upper-left corner of the rectangle + * @param y {Number} The y-coordinate of the upper-left corner of the rectangle + * @param w {Number} The width of the rectangle to clear, in pixels + * @param h {Number} The height of the rectangle to clear, in pixels + * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    + * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set. + * This results in all calls to clearRect() to do nothing, and keep the canvas transparent. + * This flag is stored in the save/restore context and is managed the same way as other drawing states. + * + */ + + + Context2D.prototype.clearRect = function (x, y, w, h) { + if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) { + console.error("jsPDF.context2d.clearRect: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.clearRect"); + } + + if (this.ignoreClearRect) { + return; + } + + this.fillStyle = "#ffffff"; + this.fillRect(x, y, w, h); + }; + /** + * Saves the state of the current context + * + * @name save + * @function + */ + + + Context2D.prototype.save = function (doStackPush) { + doStackPush = typeof doStackPush === "boolean" ? doStackPush : true; + var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber; + + for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) { + this.pdf.setPage(i + 1); + this.pdf.internal.out("q"); + } + + this.pdf.setPage(tmpPageNumber); + + if (doStackPush) { + this.ctx.fontSize = this.pdf.internal.getFontSize(); + var ctx = new ContextLayer(this.ctx); + this.ctxStack.push(this.ctx); + this.ctx = ctx; + } + }; + /** + * Returns previously saved path state and attributes + * + * @name restore + * @function + */ + + + Context2D.prototype.restore = function (doStackPop) { + doStackPop = typeof doStackPop === "boolean" ? doStackPop : true; + var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber; + + for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) { + this.pdf.setPage(i + 1); + this.pdf.internal.out("Q"); + } + + this.pdf.setPage(tmpPageNumber); + + if (doStackPop && this.ctxStack.length !== 0) { + this.ctx = this.ctxStack.pop(); + this.fillStyle = this.ctx.fillStyle; + this.strokeStyle = this.ctx.strokeStyle; + this.font = this.ctx.font; + this.lineCap = this.ctx.lineCap; + this.lineWidth = this.ctx.lineWidth; + this.lineJoin = this.ctx.lineJoin; + this.lineDash = this.ctx.lineDash; + this.lineDashOffset = this.ctx.lineDashOffset; + } + }; + /** + * @name toDataURL + * @function + */ + + + Context2D.prototype.toDataURL = function () { + throw new Error("toDataUrl not implemented."); + }; //helper functions + + /** + * Get the decimal values of r, g, b and a + * + * @name getRGBA + * @function + * @private + * @ignore + */ + + + var getRGBA = function getRGBA(style) { + var rxRgb = /rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/; + var rxRgba = /rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)/; + var rxTransparent = /transparent|rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*0+\s*\)/; + var r, g, b, a; + + if (style.isCanvasGradient === true) { + style = style.getColor(); + } + + if (!style) { + return { + r: 0, + g: 0, + b: 0, + a: 0, + style: style + }; + } + + if (rxTransparent.test(style)) { + r = 0; + g = 0; + b = 0; + a = 0; + } else { + var matches = rxRgb.exec(style); + + if (matches !== null) { + r = parseInt(matches[1]); + g = parseInt(matches[2]); + b = parseInt(matches[3]); + a = 1; + } else { + matches = rxRgba.exec(style); + + if (matches !== null) { + r = parseInt(matches[1]); + g = parseInt(matches[2]); + b = parseInt(matches[3]); + a = parseFloat(matches[4]); + } else { + a = 1; + + if (typeof style === "string" && style.charAt(0) !== "#") { + var rgbColor = new RGBColor(style); + + if (rgbColor.ok) { + style = rgbColor.toHex(); + } else { + style = "#000000"; + } + } + + if (style.length === 4) { + r = style.substring(1, 2); + r += r; + g = style.substring(2, 3); + g += g; + b = style.substring(3, 4); + b += b; + } else { + r = style.substring(1, 3); + g = style.substring(3, 5); + b = style.substring(5, 7); + } + + r = parseInt(r, 16); + g = parseInt(g, 16); + b = parseInt(b, 16); + } + } + } + + return { + r: r, + g: g, + b: b, + a: a, + style: style + }; + }; + /** + * @name isFillTransparent + * @function + * @private + * @ignore + * @returns {Boolean} + */ + + + var isFillTransparent = function isFillTransparent() { + return this.ctx.isFillTransparent || this.globalAlpha == 0; + }; + /** + * @name isStrokeTransparent + * @function + * @private + * @ignore + * @returns {Boolean} + */ + + + var isStrokeTransparent = function isStrokeTransparent() { + return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0); + }; + /** + * Draws "filled" text on the canvas + * + * @name fillText + * @function + * @param text {String} Specifies the text that will be written on the canvas + * @param x {Number} The x coordinate where to start painting the text (relative to the canvas) + * @param y {Number} The y coordinate where to start painting the text (relative to the canvas) + * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels + * @description The fillText() method draws filled text on the canvas. The default color of the text is black. + */ + + + Context2D.prototype.fillText = function (text, x, y, maxWidth) { + if (isNaN(x) || isNaN(y) || typeof text !== "string") { + console.error("jsPDF.context2d.fillText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.fillText"); + } + + maxWidth = isNaN(maxWidth) ? undefined : maxWidth; + + if (isFillTransparent.call(this)) { + return; + } + + var degs = rad2deg(this.ctx.transform.rotation); // We only use X axis as scale hint + + var scale = this.ctx.transform.scaleX; + putText.call(this, { + text: text, + x: x, + y: y, + scale: scale, + angle: degs, + align: this.textAlign, + maxWidth: maxWidth + }); + }; + /** + * Draws text on the canvas (no fill) + * + * @name strokeText + * @function + * @param text {String} Specifies the text that will be written on the canvas + * @param x {Number} The x coordinate where to start painting the text (relative to the canvas) + * @param y {Number} The y coordinate where to start painting the text (relative to the canvas) + * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels + * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black. + */ + + + Context2D.prototype.strokeText = function (text, x, y, maxWidth) { + if (isNaN(x) || isNaN(y) || typeof text !== "string") { + console.error("jsPDF.context2d.strokeText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.strokeText"); + } + + if (isStrokeTransparent.call(this)) { + return; + } + + maxWidth = isNaN(maxWidth) ? undefined : maxWidth; + var degs = rad2deg(this.ctx.transform.rotation); + var scale = this.ctx.transform.scaleX; + putText.call(this, { + text: text, + x: x, + y: y, + scale: scale, + renderingMode: "stroke", + angle: degs, + align: this.textAlign, + maxWidth: maxWidth + }); + }; + /** + * Returns an object that contains the width of the specified text + * + * @name measureText + * @function + * @param text {String} The text to be measured + * @description The measureText() method returns an object that contains the width of the specified text, in pixels. + * @returns {Number} + */ + + + Context2D.prototype.measureText = function (text) { + if (typeof text !== "string") { + console.error("jsPDF.context2d.measureText: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.measureText"); + } + + var pdf = this.pdf; + var k = this.pdf.internal.scaleFactor; + var fontSize = pdf.internal.getFontSize(); + var txtWidth = pdf.getStringUnitWidth(text) * fontSize / pdf.internal.scaleFactor; + txtWidth *= Math.round(k * 96 / 72 * 10000) / 10000; + + var TextMetrics = function TextMetrics(options) { + options = options || {}; + + var _width = options.width || 0; + + Object.defineProperty(this, "width", { + get: function get() { + return _width; + } + }); + return this; + }; + + return new TextMetrics({ + width: txtWidth + }); + }; //Transformations + + /** + * Scales the current drawing bigger or smaller + * + * @name scale + * @function + * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.) + * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.) + * @description The scale() method scales the current drawing, bigger or smaller. + */ + + + Context2D.prototype.scale = function (scalewidth, scaleheight) { + if (isNaN(scalewidth) || isNaN(scaleheight)) { + console.error("jsPDF.context2d.scale: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.scale"); + } + + var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Rotates the current drawing + * + * @name rotate + * @function + * @param angle {Number} The rotation angle, in radians. + * @description To calculate from degrees to radians: degrees*Math.PI/180.
    + * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180 + */ + + + Context2D.prototype.rotate = function (angle) { + if (isNaN(angle)) { + console.error("jsPDF.context2d.rotate: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.rotate"); + } + + var matrix = new Matrix(Math.cos(angle), Math.sin(angle), -Math.sin(angle), Math.cos(angle), 0.0, 0.0); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Remaps the (0,0) position on the canvas + * + * @name translate + * @function + * @param x {Number} The value to add to horizontal (x) coordinates + * @param y {Number} The value to add to vertical (y) coordinates + * @description The translate() method remaps the (0,0) position on the canvas. + */ + + + Context2D.prototype.translate = function (x, y) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.context2d.translate: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.translate"); + } + + var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Replaces the current transformation matrix for the drawing + * + * @name transform + * @function + * @param a {Number} Horizontal scaling + * @param b {Number} Horizontal skewing + * @param c {Number} Vertical skewing + * @param d {Number} Vertical scaling + * @param e {Number} Horizontal moving + * @param f {Number} Vertical moving + * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context. + */ + + + Context2D.prototype.transform = function (a, b, c, d, e, f) { + if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) { + console.error("jsPDF.context2d.transform: Invalid arguments", arguments); + throw new Error("Invalid arguments passed to jsPDF.context2d.transform"); + } + + var matrix = new Matrix(a, b, c, d, e, f); + this.ctx.transform = this.ctx.transform.multiply(matrix); + }; + /** + * Resets the current transform to the identity matrix. Then runs transform() + * + * @name setTransform + * @function + * @param a {Number} Horizontal scaling + * @param b {Number} Horizontal skewing + * @param c {Number} Vertical skewing + * @param d {Number} Vertical scaling + * @param e {Number} Horizontal moving + * @param f {Number} Vertical moving + * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context. + */ + + + Context2D.prototype.setTransform = function (a, b, c, d, e, f) { + a = isNaN(a) ? 1 : a; + b = isNaN(b) ? 0 : b; + c = isNaN(c) ? 0 : c; + d = isNaN(d) ? 1 : d; + e = isNaN(e) ? 0 : e; + f = isNaN(f) ? 0 : f; + this.ctx.transform = new Matrix(a, b, c, d, e, f); + }; + + var hasMargins = function hasMargins() { + return this.margin[0] > 0 || this.margin[1] > 0 || this.margin[2] > 0 || this.margin[3] > 0; + }; + /** + * Draws an image, canvas, or video onto the canvas + * + * @function + * @param img {} Specifies the image, canvas, or video element to use + * @param sx {Number} Optional. The x coordinate where to start clipping + * @param sy {Number} Optional. The y coordinate where to start clipping + * @param swidth {Number} Optional. The width of the clipped image + * @param sheight {Number} Optional. The height of the clipped image + * @param x {Number} The x coordinate where to place the image on the canvas + * @param y {Number} The y coordinate where to place the image on the canvas + * @param width {Number} Optional. The width of the image to use (stretch or reduce the image) + * @param height {Number} Optional. The height of the image to use (stretch or reduce the image) + */ + + + Context2D.prototype.drawImage = function (img, sx, sy, swidth, sheight, x, y, width, height) { + var imageProperties = this.pdf.getImageProperties(img); + var factorX = 1; + var factorY = 1; + var clipFactorX = 1; + var clipFactorY = 1; + + if (typeof swidth !== "undefined" && typeof width !== "undefined") { + clipFactorX = width / swidth; + clipFactorY = height / sheight; + factorX = imageProperties.width / swidth * width / swidth; + factorY = imageProperties.height / sheight * height / sheight; + } //is sx and sy are set and x and y not, set x and y with values of sx and sy + + + if (typeof x === "undefined") { + x = sx; + y = sy; + sx = 0; + sy = 0; + } + + if (typeof swidth !== "undefined" && typeof width === "undefined") { + width = swidth; + height = sheight; + } + + if (typeof swidth === "undefined" && typeof width === "undefined") { + width = imageProperties.width; + height = imageProperties.height; + } + + var decomposedTransformationMatrix = this.ctx.transform.decompose(); + var angle = rad2deg(decomposedTransformationMatrix.rotate.shx); + var matrix = new Matrix(); + matrix = matrix.multiply(decomposedTransformationMatrix.translate); + matrix = matrix.multiply(decomposedTransformationMatrix.skew); + matrix = matrix.multiply(decomposedTransformationMatrix.scale); + var xRect = matrix.applyToRectangle(new Rectangle(x - sx * clipFactorX, y - sy * clipFactorY, swidth * factorX, sheight * factorY)); + var pageArray = getPagesByPath.call(this, xRect); + var pages = []; + + for (var ii = 0; ii < pageArray.length; ii += 1) { + if (pages.indexOf(pageArray[ii]) === -1) { + pages.push(pageArray[ii]); + } + } + + sortPages(pages); + var clipPath; + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + + for (var i = min; i < max + 1; i++) { + this.pdf.setPage(i); + var pageWidthMinusMargins = this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1]; + var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = this.pdf.internal.pageSize.height - this.posY - this.margin[0] - this.margin[2]; + var pageHeightMinusMargins = this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var previousPageHeightSum = i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo(clipPath, this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset); + drawPaths.call(this, "fill", true); + this.path = tmpPaths; + } + + var tmpRect = JSON.parse(JSON.stringify(xRect)); + tmpRect = pathPositionRedo([tmpRect], this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset)[0]; + var needsClipping = (i > min || i < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf.rect(this.margin[3], this.margin[0], pageWidthMinusMargins, pageHeightMinusMargins, null).clip().discardPath(); + } + + this.pdf.addImage(img, "JPEG", tmpRect.x, tmpRect.y, tmpRect.w, tmpRect.h, null, null, angle); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + } else { + this.pdf.addImage(img, "JPEG", xRect.x, xRect.y, xRect.w, xRect.h, null, null, angle); + } + }; + + var getPagesByPath = function getPagesByPath(path, pageWrapX, pageWrapY) { + var result = []; + pageWrapX = pageWrapX || this.pdf.internal.pageSize.width; + pageWrapY = pageWrapY || this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var yOffset = this.posY + this.ctx.prevPageLastElemOffset; + + switch (path.type) { + default: + case "mt": + case "lt": + result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1); + break; + + case "arc": + result.push(Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1); + result.push(Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1); + break; + + case "qct": + var rectOfQuadraticCurve = getQuadraticCurveBoundary(this.ctx.lastPoint.x, this.ctx.lastPoint.y, path.x1, path.y1, path.x, path.y); + result.push(Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) / pageWrapY) + 1); + break; + + case "bct": + var rectOfBezierCurve = getBezierCurveBoundary(this.ctx.lastPoint.x, this.ctx.lastPoint.y, path.x1, path.y1, path.x2, path.y2, path.x, path.y); + result.push(Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY) + 1); + break; + + case "rect": + result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1); + result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1); + } + + for (var i = 0; i < result.length; i += 1) { + while (this.pdf.internal.getNumberOfPages() < result[i]) { + addPage.call(this); + } + } + + return result; + }; + + var addPage = function addPage() { + var fillStyle = this.fillStyle; + var strokeStyle = this.strokeStyle; + var font = this.font; + var lineCap = this.lineCap; + var lineWidth = this.lineWidth; + var lineJoin = this.lineJoin; + this.pdf.addPage(); + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.font = font; + this.lineCap = lineCap; + this.lineWidth = lineWidth; + this.lineJoin = lineJoin; + }; + + var pathPositionRedo = function pathPositionRedo(paths, x, y) { + for (var i = 0; i < paths.length; i++) { + switch (paths[i].type) { + case "bct": + paths[i].x2 += x; + paths[i].y2 += y; + + case "qct": + paths[i].x1 += x; + paths[i].y1 += y; + + case "mt": + case "lt": + case "arc": + default: + paths[i].x += x; + paths[i].y += y; + } + } + + return paths; + }; + + var sortPages = function sortPages(pages) { + return pages.sort(function (a, b) { + return a - b; + }); + }; + + var pathPreProcess = function pathPreProcess(rule, isClip) { + var fillStyle = this.fillStyle; + var strokeStyle = this.strokeStyle; + var lineCap = this.lineCap; + var oldLineWidth = this.lineWidth; + var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX); + var lineJoin = this.lineJoin; + var origPath = JSON.parse(JSON.stringify(this.path)); + var xPath = JSON.parse(JSON.stringify(this.path)); + var clipPath; + var tmpPath; + var pages = []; + + for (var i = 0; i < xPath.length; i++) { + if (typeof xPath[i].x !== "undefined") { + var page = getPagesByPath.call(this, xPath[i]); + + for (var ii = 0; ii < page.length; ii += 1) { + if (pages.indexOf(page[ii]) === -1) { + pages.push(page[ii]); + } + } + } + } + + for (var j = 0; j < pages.length; j++) { + while (this.pdf.internal.getNumberOfPages() < pages[j]) { + addPage.call(this); + } + } + + sortPages(pages); + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + + for (var k = min; k < max + 1; k++) { + this.pdf.setPage(k); + this.fillStyle = fillStyle; + this.strokeStyle = strokeStyle; + this.lineCap = lineCap; + this.lineWidth = lineWidth; + this.lineJoin = lineJoin; + var pageWidthMinusMargins = this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1]; + var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = this.pdf.internal.pageSize.height - this.posY - this.margin[0] - this.margin[2]; + var pageHeightMinusMargins = this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2]; + var previousPageHeightSum = k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo(clipPath, this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset); + drawPaths.call(this, rule, true); + this.path = tmpPaths; + } + + tmpPath = JSON.parse(JSON.stringify(origPath)); + this.path = pathPositionRedo(tmpPath, this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset); + + if (isClip === false || k === 0) { + var needsClipping = (k > min || k < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf.rect(this.margin[3], this.margin[0], pageWidthMinusMargins, pageHeightMinusMargins, null).clip().discardPath(); + } + + drawPaths.call(this, rule, isClip); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + + this.lineWidth = oldLineWidth; + } + } else { + this.lineWidth = lineWidth; + drawPaths.call(this, rule, isClip); + this.lineWidth = oldLineWidth; + } + + this.path = origPath; + }; + /** + * Processes the paths + * + * @function + * @param rule {String} + * @param isClip {Boolean} + * @private + * @ignore + */ + + + var drawPaths = function drawPaths(rule, isClip) { + if (rule === "stroke" && !isClip && isStrokeTransparent.call(this)) { + return; + } + + if (rule !== "stroke" && !isClip && isFillTransparent.call(this)) { + return; + } + + var moves = []; //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha; + + var delta; + var xPath = this.path; + + for (var i = 0; i < xPath.length; i++) { + var pt = xPath[i]; + + switch (pt.type) { + case "begin": + moves.push({ + begin: true + }); + break; + + case "close": + moves.push({ + close: true + }); + break; + + case "mt": + moves.push({ + start: pt, + deltas: [], + abs: [] + }); + break; + + case "lt": + var iii = moves.length; + + if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) { + delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y]; + + if (iii > 0) { + for (iii; iii >= 0; iii--) { + if (moves[iii - 1].close !== true && moves[iii - 1].begin !== true) { + moves[iii - 1].deltas.push(delta); + moves[iii - 1].abs.push(pt); + break; + } + } + } + } + + break; + + case "bct": + delta = [pt.x1 - xPath[i - 1].x, pt.y1 - xPath[i - 1].y, pt.x2 - xPath[i - 1].x, pt.y2 - xPath[i - 1].y, pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y]; + moves[moves.length - 1].deltas.push(delta); + break; + + case "qct": + var x1 = xPath[i - 1].x + 2.0 / 3.0 * (pt.x1 - xPath[i - 1].x); + var y1 = xPath[i - 1].y + 2.0 / 3.0 * (pt.y1 - xPath[i - 1].y); + var x2 = pt.x + 2.0 / 3.0 * (pt.x1 - pt.x); + var y2 = pt.y + 2.0 / 3.0 * (pt.y1 - pt.y); + var x3 = pt.x; + var y3 = pt.y; + delta = [x1 - xPath[i - 1].x, y1 - xPath[i - 1].y, x2 - xPath[i - 1].x, y2 - xPath[i - 1].y, x3 - xPath[i - 1].x, y3 - xPath[i - 1].y]; + moves[moves.length - 1].deltas.push(delta); + break; + + case "arc": + moves.push({ + deltas: [], + abs: [], + arc: true + }); + + if (Array.isArray(moves[moves.length - 1].abs)) { + moves[moves.length - 1].abs.push(pt); + } + + break; + } + } + + var style; + + if (!isClip) { + if (rule === "stroke") { + style = "stroke"; + } else { + style = "fill"; + } + } else { + style = null; + } + + var began = false; + + for (var k = 0; k < moves.length; k++) { + if (moves[k].arc) { + var arcs = moves[k].abs; + + for (var ii = 0; ii < arcs.length; ii++) { + var arc = arcs[ii]; + + if (arc.type === "arc") { + drawArc.call(this, arc.x, arc.y, arc.radius, arc.startAngle, arc.endAngle, arc.counterclockwise, undefined, isClip, !began); + } else { + drawLine.call(this, arc.x, arc.y); + } + + began = true; + } + } else if (moves[k].close === true) { + this.pdf.internal.out("h"); + began = false; + } else if (moves[k].begin !== true) { + var x = moves[k].start.x; + var y = moves[k].start.y; + drawLines.call(this, moves[k].deltas, x, y); + began = true; + } + } + + if (style) { + putStyle.call(this, style); + } + + if (isClip) { + doClip.call(this); + } + }; + + var getBaseline = function getBaseline(y) { + var height = this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor; + var descent = height * (this.pdf.internal.getLineHeightFactor() - 1); + + switch (this.ctx.textBaseline) { + case "bottom": + return y - descent; + + case "top": + return y + height - descent; + + case "hanging": + return y + height - 2 * descent; + + case "middle": + return y + height / 2 - descent; + + case "ideographic": + // TODO not implemented + return y; + + case "alphabetic": + default: + return y; + } + }; + + var getTextBottom = function getTextBottom(yBaseLine) { + var height = this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor; + var descent = height * (this.pdf.internal.getLineHeightFactor() - 1); + return yBaseLine + descent; + }; + + Context2D.prototype.createLinearGradient = function createLinearGradient() { + var canvasGradient = function canvasGradient() {}; + + canvasGradient.colorStops = []; + + canvasGradient.addColorStop = function (offset, color) { + this.colorStops.push([offset, color]); + }; + + canvasGradient.getColor = function () { + if (this.colorStops.length === 0) { + return "#000000"; + } + + return this.colorStops[0][1]; + }; + + canvasGradient.isCanvasGradient = true; + return canvasGradient; + }; + + Context2D.prototype.createPattern = function createPattern() { + return this.createLinearGradient(); + }; + + Context2D.prototype.createRadialGradient = function createRadialGradient() { + return this.createLinearGradient(); + }; + /** + * + * @param x Edge point X + * @param y Edge point Y + * @param r Radius + * @param a1 start angle + * @param a2 end angle + * @param counterclockwise + * @param style + * @param isClip + */ + + + var drawArc = function drawArc(x, y, r, a1, a2, counterclockwise, style, isClip, includeMove) { + // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html + var curves = createArc.call(this, r, a1, a2, counterclockwise); + + for (var i = 0; i < curves.length; i++) { + var curve = curves[i]; + + if (i === 0) { + if (includeMove) { + doMove.call(this, curve.x1 + x, curve.y1 + y); + } else { + drawLine.call(this, curve.x1 + x, curve.y1 + y); + } + } + + drawCurve.call(this, x, y, curve.x2, curve.y2, curve.x3, curve.y3, curve.x4, curve.y4); + } + + if (!isClip) { + putStyle.call(this, style); + } else { + doClip.call(this); + } + }; + + var putStyle = function putStyle(style) { + switch (style) { + case "stroke": + this.pdf.internal.out("S"); + break; + + case "fill": + this.pdf.internal.out("f"); + break; + } + }; + + var doClip = function doClip() { + this.pdf.clip(); + this.pdf.discardPath(); + }; + + var doMove = function doMove(x, y) { + this.pdf.internal.out(getHorizontalCoordinateString(x) + " " + getVerticalCoordinateString(y) + " m"); + }; + + var putText = function putText(options) { + var textAlign; + + switch (options.align) { + case "right": + case "end": + textAlign = "right"; + break; + + case "center": + textAlign = "center"; + break; + + case "left": + case "start": + default: + textAlign = "left"; + break; + } + + var textDimensions = this.pdf.getTextDimensions(options.text); + var yBaseLine = getBaseline.call(this, options.y); + var yBottom = getTextBottom.call(this, yBaseLine); + var yTop = yBottom - textDimensions.h; + var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine)); + var decomposedTransformationMatrix = this.ctx.transform.decompose(); + var matrix = new Matrix(); + matrix = matrix.multiply(decomposedTransformationMatrix.translate); + matrix = matrix.multiply(decomposedTransformationMatrix.skew); + matrix = matrix.multiply(decomposedTransformationMatrix.scale); + var baselineRect = this.ctx.transform.applyToRectangle(new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)); + var textBounds = matrix.applyToRectangle(new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)); + var pageArray = getPagesByPath.call(this, textBounds); + var pages = []; + + for (var ii = 0; ii < pageArray.length; ii += 1) { + if (pages.indexOf(pageArray[ii]) === -1) { + pages.push(pageArray[ii]); + } + } + + sortPages(pages); + var clipPath, oldSize, oldLineWidth; + + if (this.autoPaging) { + var min = pages[0]; + var max = pages[pages.length - 1]; + + for (var i = min; i < max + 1; i++) { + this.pdf.setPage(i); + var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0]; + var firstPageHeight = this.pdf.internal.pageSize.height - this.posY - this.margin[0] - this.margin[2]; + var pageHeightMinusBottomMargin = this.pdf.internal.pageSize.height - this.margin[2]; + var pageHeightMinusMargins = pageHeightMinusBottomMargin - this.margin[0]; + var pageWidthMinusRightMargin = this.pdf.internal.pageSize.width - this.margin[1]; + var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3]; + var previousPageHeightSum = i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins; + + if (this.ctx.clip_path.length !== 0) { + var tmpPaths = this.path; + clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path)); + this.path = pathPositionRedo(clipPath, this.posX + this.margin[3], -1 * previousPageHeightSum + topMargin); + drawPaths.call(this, "fill", true); + this.path = tmpPaths; + } + + var textBoundsOnPage = pathPositionRedo([JSON.parse(JSON.stringify(textBounds))], this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset)[0]; + + if (options.scale >= 0.01) { + oldSize = this.pdf.internal.getFontSize(); + this.pdf.setFontSize(oldSize * options.scale); + oldLineWidth = this.lineWidth; + this.lineWidth = oldLineWidth * options.scale; + } + + var doSlice = this.autoPaging !== "text"; + + if (doSlice || textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin) { + if (doSlice || textBoundsOnPage.y >= topMargin && textBoundsOnPage.x <= pageWidthMinusRightMargin) { + var croppedText = doSlice ? options.text : this.pdf.splitTextToSize(options.text, options.maxWidth || pageWidthMinusRightMargin - textBoundsOnPage.x)[0]; + var baseLineRectOnPage = pathPositionRedo([JSON.parse(JSON.stringify(baselineRect))], this.posX + this.margin[3], -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset)[0]; + var needsClipping = doSlice && (i > min || i < max) && hasMargins.call(this); + + if (needsClipping) { + this.pdf.saveGraphicsState(); + this.pdf.rect(this.margin[3], this.margin[0], pageWidthMinusMargins, pageHeightMinusMargins, null).clip().discardPath(); + } + + this.pdf.text(croppedText, baseLineRectOnPage.x, baseLineRectOnPage.y, { + angle: options.angle, + align: textAlign, + renderingMode: options.renderingMode + }); + + if (needsClipping) { + this.pdf.restoreGraphicsState(); + } + } + } else { + // This text is the last element of the page, but it got cut off due to the margin + // so we render it in the next page + if (textBoundsOnPage.y < pageHeightMinusBottomMargin) { + // As a result, all other elements have their y offset increased + this.ctx.prevPageLastElemOffset += pageHeightMinusBottomMargin - textBoundsOnPage.y; + } + } + + if (options.scale >= 0.01) { + this.pdf.setFontSize(oldSize); + this.lineWidth = oldLineWidth; + } + } + } else { + if (options.scale >= 0.01) { + oldSize = this.pdf.internal.getFontSize(); + this.pdf.setFontSize(oldSize * options.scale); + oldLineWidth = this.lineWidth; + this.lineWidth = oldLineWidth * options.scale; + } + + this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, { + angle: options.angle, + align: textAlign, + renderingMode: options.renderingMode, + maxWidth: options.maxWidth + }); + + if (options.scale >= 0.01) { + this.pdf.setFontSize(oldSize); + this.lineWidth = oldLineWidth; + } + } + }; + + var drawLine = function drawLine(x, y, prevX, prevY) { + prevX = prevX || 0; + prevY = prevY || 0; + this.pdf.internal.out(getHorizontalCoordinateString(x + prevX) + " " + getVerticalCoordinateString(y + prevY) + " l"); + }; + + var drawLines = function drawLines(lines, x, y) { + return this.pdf.lines(lines, x, y, null, null); + }; + + var drawCurve = function drawCurve(x, y, x1, y1, x2, y2, x3, y3) { + this.pdf.internal.out([f2(getHorizontalCoordinate(x1 + x)), f2(getVerticalCoordinate(y1 + y)), f2(getHorizontalCoordinate(x2 + x)), f2(getVerticalCoordinate(y2 + y)), f2(getHorizontalCoordinate(x3 + x)), f2(getVerticalCoordinate(y3 + y)), "c"].join(" ")); + }; + /** + * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius. + * + * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. + * @function createArc + */ + + + var createArc = function createArc(radius, startAngle, endAngle, anticlockwise) { + var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below + + var twoPi = Math.PI * 2; + var halfPi = Math.PI / 2.0; + + while (startAngle > endAngle) { + startAngle = startAngle - twoPi; + } + + var totalAngle = Math.abs(endAngle - startAngle); + + if (totalAngle < twoPi) { + if (anticlockwise) { + totalAngle = twoPi - totalAngle; + } + } // Compute the sequence of arc curves, up to PI/2 at a time. + + + var curves = []; // clockwise or counterclockwise + + var sgn = anticlockwise ? -1 : +1; + var a1 = startAngle; + + for (; totalAngle > EPSILON;) { + var remain = sgn * Math.min(totalAngle, halfPi); + var a2 = a1 + remain; + curves.push(createSmallArc.call(this, radius, a1, a2)); + totalAngle -= Math.abs(a2 - a1); + a1 = a2; + } + + return curves; + }; + /** + * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r. + * + * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points. + * + * This algorithm is based on the approach described in: A. Riškus, "Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa," Information Technology and Control, 35(4), 2006 pp. 371-378. + */ + + + var createSmallArc = function createSmallArc(r, a1, a2) { + var a = (a2 - a1) / 2.0; + var x4 = r * Math.cos(a); + var y4 = r * Math.sin(a); + var x1 = x4; + var y1 = -y4; + var q1 = x1 * x1 + y1 * y1; + var q2 = q1 + x1 * x4 + y1 * y4; + var k2 = 4 / 3 * (Math.sqrt(2 * q1 * q2) - q2) / (x1 * y4 - y1 * x4); + var x2 = x1 - k2 * y1; + var y2 = y1 + k2 * x1; + var x3 = x2; + var y3 = -y2; + var ar = a + a1; + var cos_ar = Math.cos(ar); + var sin_ar = Math.sin(ar); + return { + x1: r * Math.cos(a1), + y1: r * Math.sin(a1), + x2: x2 * cos_ar - y2 * sin_ar, + y2: x2 * sin_ar + y2 * cos_ar, + x3: x3 * cos_ar - y3 * sin_ar, + y3: x3 * sin_ar + y3 * cos_ar, + x4: r * Math.cos(a2), + y4: r * Math.sin(a2) + }; + }; + + var rad2deg = function rad2deg(value) { + return value * 180 / Math.PI; + }; + + var getQuadraticCurveBoundary = function getQuadraticCurveBoundary(sx, sy, cpx, cpy, ex, ey) { + var midX1 = sx + (cpx - sx) * 0.5; + var midY1 = sy + (cpy - sy) * 0.5; + var midX2 = ex + (cpx - ex) * 0.5; + var midY2 = ey + (cpy - ey) * 0.5; + var resultX1 = Math.min(sx, ex, midX1, midX2); + var resultX2 = Math.max(sx, ex, midX1, midX2); + var resultY1 = Math.min(sy, ey, midY1, midY2); + var resultY2 = Math.max(sy, ey, midY1, midY2); + return new Rectangle(resultX1, resultY1, resultX2 - resultX1, resultY2 - resultY1); + }; //De Casteljau algorithm + + + var getBezierCurveBoundary = function getBezierCurveBoundary(ax, ay, bx, by, cx, cy, dx, dy) { + var tobx = bx - ax; + var toby = by - ay; + var tocx = cx - bx; + var tocy = cy - by; + var todx = dx - cx; + var tody = dy - cy; + var precision = 40; + var d, i, px, py, qx, qy, rx, ry, tx, ty, sx, sy, x, y, minx, miny, maxx, maxy, toqx, toqy, torx, tory, totx, toty; + + for (i = 0; i < precision + 1; i++) { + d = i / precision; + px = ax + d * tobx; + py = ay + d * toby; + qx = bx + d * tocx; + qy = by + d * tocy; + rx = cx + d * todx; + ry = cy + d * tody; + toqx = qx - px; + toqy = qy - py; + torx = rx - qx; + tory = ry - qy; + sx = px + d * toqx; + sy = py + d * toqy; + tx = qx + d * torx; + ty = qy + d * tory; + totx = tx - sx; + toty = ty - sy; + x = sx + d * totx; + y = sy + d * toty; + + if (i == 0) { + minx = x; + miny = y; + maxx = x; + maxy = y; + } else { + minx = Math.min(minx, x); + miny = Math.min(miny, y); + maxx = Math.max(maxx, x); + maxy = Math.max(maxy, y); + } + } + + return new Rectangle(Math.round(minx), Math.round(miny), Math.round(maxx - minx), Math.round(maxy - miny)); + }; + + var getPrevLineDashValue = function getPrevLineDashValue(lineDash, lineDashOffset) { + return JSON.stringify({ + lineDash: lineDash, + lineDashOffset: lineDashOffset + }); + }; + + var setLineDash = function setLineDash() { + // Avoid unnecessary line dash declarations. + if (!this.prevLineDash && !this.ctx.lineDash.length && !this.ctx.lineDashOffset) { + return; + } // Avoid unnecessary line dash declarations. + + + var nextLineDash = getPrevLineDashValue(this.ctx.lineDash, this.ctx.lineDashOffset); + + if (this.prevLineDash !== nextLineDash) { + this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset); + this.prevLineDash = nextLineDash; + } + }; + })(jsPDF.API); + + // DEFLATE is a complex format; to read this code, you should probably check the RFC first: + // https://tools.ietf.org/html/rfc1951 + // You may also wish to take a look at the guide I made about this program: + // https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad + // Much of the following code is similar to that of UZIP.js: + // https://github.com/photopea/UZIP.js + // Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar. + // Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint + // is better for memory in most engines (I *think*). + // Mediocre shim + var Worker; + + try { + Worker = require('worker_threads').Worker; + } catch (e) {} + + var u8 = Uint8Array, + u16 = Uint16Array, + u32 = Uint32Array; // fixed length extra bits + + var fleb = new u8([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, + /* unused */ + 0, 0, + /* impossible */ + 0]); // fixed distance extra bits + // see fleb note + + var fdeb = new u8([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, + /* unused */ + 0, 0]); // code length index map + + var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); // get base, reverse index map from extra bits + + var freb = function (eb, start) { + var b = new u16(31); + + for (var i = 0; i < 31; ++i) { + b[i] = start += 1 << eb[i - 1]; + } // numbers here are at max 18 bits + + + var r = new u32(b[30]); + + for (var i = 1; i < 30; ++i) { + for (var j = b[i]; j < b[i + 1]; ++j) { + r[j] = j - b[i] << 5 | i; + } + } + + return [b, r]; + }; + + var _a = freb(fleb, 2), + fl = _a[0], + revfl = _a[1]; // we can ignore the fact that the other numbers are wrong; they never happen anyway + + + fl[28] = 258, revfl[258] = 28; + + var _b = freb(fdeb, 0), + fd = _b[0], + revfd = _b[1]; // map of value to reverse (assuming 16 bits) + + + var rev = new u16(32768); + + for (var i = 0; i < 32768; ++i) { + // reverse table algorithm from SO + var x = (i & 0xAAAA) >>> 1 | (i & 0x5555) << 1; + x = (x & 0xCCCC) >>> 2 | (x & 0x3333) << 2; + x = (x & 0xF0F0) >>> 4 | (x & 0x0F0F) << 4; + rev[i] = ((x & 0xFF00) >>> 8 | (x & 0x00FF) << 8) >>> 1; + } // create huffman tree from u8 "map": index -> code length for code index + // mb (max bits) must be at most 15 + // TODO: optimize/split up? + + + var hMap = function (cd, mb, r) { + var s = cd.length; // index + + var i = 0; // u16 "map": index -> # of codes with bit length = index + + var l = new u16(mb); // length of cd must be 288 (total # of codes) + + for (; i < s; ++i) ++l[cd[i] - 1]; // u16 "map": index -> minimum code for bit length = index + + + var le = new u16(mb); + + for (i = 0; i < mb; ++i) { + le[i] = le[i - 1] + l[i - 1] << 1; + } + + var co; + + if (r) { + // u16 "map": index -> number of actual bits, symbol for code + co = new u16(1 << mb); // bits to remove for reverser + + var rvb = 15 - mb; + + for (i = 0; i < s; ++i) { + // ignore 0 lengths + if (cd[i]) { + // num encoding both symbol and bits read + var sv = i << 4 | cd[i]; // free bits + + var r_1 = mb - cd[i]; // start value + + var v = le[cd[i] - 1]++ << r_1; // m is end value + + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + // every 16 bit value starting with the code yields the same result + co[rev[v] >>> rvb] = sv; + } + } + } + } else { + co = new u16(s); + + for (i = 0; i < s; ++i) co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i]; + } + + return co; + }; // fixed length tree + + + var flt = new u8(288); + + for (var i = 0; i < 144; ++i) flt[i] = 8; + + for (var i = 144; i < 256; ++i) flt[i] = 9; + + for (var i = 256; i < 280; ++i) flt[i] = 7; + + for (var i = 280; i < 288; ++i) flt[i] = 8; // fixed distance tree + + + var fdt = new u8(32); + + for (var i = 0; i < 32; ++i) fdt[i] = 5; // fixed length map + + + var flm = /*#__PURE__*/hMap(flt, 9, 0), + flrm = /*#__PURE__*/hMap(flt, 9, 1); // fixed distance map + + var fdm = /*#__PURE__*/hMap(fdt, 5, 0), + fdrm = /*#__PURE__*/hMap(fdt, 5, 1); // find max of array + + var max = function (a) { + var m = a[0]; + + for (var i = 1; i < a.length; ++i) { + if (a[i] > m) m = a[i]; + } + + return m; + }; // read d, starting at bit p and mask with m + + + var bits = function (d, p, m) { + var o = p / 8 >> 0; + return (d[o] | d[o + 1] << 8) >>> (p & 7) & m; + }; // read d, starting at bit p continuing for at least 16 bits + + + var bits16 = function (d, p) { + var o = p / 8 >> 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >>> (p & 7); + }; // get end of byte + + + var shft = function (p) { + return (p / 8 >> 0) + (p & 7 && 1); + }; // typed array slice - allows garbage collector to free original reference, + // while being more compatible than .slice + + + var slc = function (v, s, e) { + if (s == null || s < 0) s = 0; + if (e == null || e > v.length) e = v.length; // can't use .constructor in case user-supplied + + var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s); + n.set(v.subarray(s, e)); + return n; + }; // expands raw DEFLATE data + + + var inflt = function (dat, buf, st) { + // source length + var sl = dat.length; // have to estimate size + + var noBuf = !buf || st; // no state + + var noSt = !st || st.i; + if (!st) st = {}; // Assumes roughly 33% compression ratio average + + if (!buf) buf = new u8(sl * 3); // ensure buffer can fit at least l elements + + var cbuf = function (l) { + var bl = buf.length; // need to increase size to fit + + if (l > bl) { + // Double or set to necessary, whichever is greater + var nbuf = new u8(Math.max(bl * 2, l)); + nbuf.set(buf); + buf = nbuf; + } + }; // last chunk bitpos bytes + + + var final = st.f || 0, + pos = st.p || 0, + bt = st.b || 0, + lm = st.l, + dm = st.d, + lbt = st.m, + dbt = st.n; // total bits + + var tbts = sl * 8; + + do { + if (!lm) { + // BFINAL - this is only 1 when last chunk is next + st.f = final = bits(dat, pos, 1); // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman + + var type = bits(dat, pos + 1, 3); + pos += 3; + + if (!type) { + // go to end of byte boundary + var s = shft(pos) + 4, + l = dat[s - 4] | dat[s - 3] << 8, + t = s + l; + + if (t > sl) { + if (noSt) throw 'unexpected EOF'; + break; + } // ensure size + + + if (noBuf) cbuf(bt + l); // Copy over uncompressed data + + buf.set(dat.subarray(s, t), bt); // Get new bitpos, update byte count + + st.b = bt += l, st.p = pos = t * 8; + continue; + } else if (type == 1) lm = flrm, dm = fdrm, lbt = 9, dbt = 5;else if (type == 2) { + // literal lengths + var hLit = bits(dat, pos, 31) + 257, + hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; // length+distance tree + + var ldt = new u8(tl); // code length tree + + var clt = new u8(19); + + for (var i = 0; i < hcLen; ++i) { + // use index map to get real code + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + + pos += hcLen * 3; // code lengths bits + + var clb = max(clt), + clbmsk = (1 << clb) - 1; + if (!noSt && pos + tl * (clb + 7) > tbts) break; // code lengths map + + var clm = hMap(clt, clb, 1); + + for (var i = 0; i < tl;) { + var r = clm[bits(dat, pos, clbmsk)]; // bits read + + pos += r & 15; // symbol + + var s = r >>> 4; // code length to copy + + if (s < 16) { + ldt[i++] = s; + } else { + // copy count + var c = 0, + n = 0; + if (s == 16) n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];else if (s == 17) n = 3 + bits(dat, pos, 7), pos += 3;else if (s == 18) n = 11 + bits(dat, pos, 127), pos += 7; + + while (n--) ldt[i++] = c; + } + } // length tree distance tree + + + var lt = ldt.subarray(0, hLit), + dt = ldt.subarray(hLit); // max length bits + + lbt = max(lt); // max dist bits + + dbt = max(dt); + lm = hMap(lt, lbt, 1); + dm = hMap(dt, dbt, 1); + } else throw 'invalid block type'; + + if (pos > tbts) throw 'unexpected EOF'; + } // Make sure the buffer can hold this + the largest possible addition + // Maximum chunk size (practically, theoretically infinite) is 2^17; + + + if (noBuf) cbuf(bt + 131072); + var lms = (1 << lbt) - 1, + dms = (1 << dbt) - 1; + var mxa = lbt + dbt + 18; + + while (noSt || pos + mxa < tbts) { + // bits read, code + var c = lm[bits16(dat, pos) & lms], + sym = c >>> 4; + pos += c & 15; + if (pos > tbts) throw 'unexpected EOF'; + if (!c) throw 'invalid length/literal'; + if (sym < 256) buf[bt++] = sym;else if (sym == 256) { + lm = null; + break; + } else { + var add = sym - 254; // no extra bits needed if less + + if (sym > 264) { + // index + var i = sym - 257, + b = fleb[i]; + add = bits(dat, pos, (1 << b) - 1) + fl[i]; + pos += b; + } // dist + + + var d = dm[bits16(dat, pos) & dms], + dsym = d >>> 4; + if (!d) throw 'invalid distance'; + pos += d & 15; + var dt = fd[dsym]; + + if (dsym > 3) { + var b = fdeb[dsym]; + dt += bits16(dat, pos) & (1 << b) - 1, pos += b; + } + + if (pos > tbts) throw 'unexpected EOF'; + if (noBuf) cbuf(bt + 131072); + var end = bt + add; + + for (; bt < end; bt += 4) { + buf[bt] = buf[bt - dt]; + buf[bt + 1] = buf[bt + 1 - dt]; + buf[bt + 2] = buf[bt + 2 - dt]; + buf[bt + 3] = buf[bt + 3 - dt]; + } + + bt = end; + } + } + + st.l = lm, st.p = pos, st.b = bt; + if (lm) final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + + return bt == buf.length ? buf : slc(buf, 0, bt); + }; // starting at p, write the minimum number of bits that can hold v to d + + + var wbits = function (d, p, v) { + v <<= p & 7; + var o = p / 8 >> 0; + d[o] |= v; + d[o + 1] |= v >>> 8; + }; // starting at p, write the minimum number of bits (>8) that can hold v to d + + + var wbits16 = function (d, p, v) { + v <<= p & 7; + var o = p / 8 >> 0; + d[o] |= v; + d[o + 1] |= v >>> 8; + d[o + 2] |= v >>> 16; + }; // creates code lengths from a frequency table + + + var hTree = function (d, mb) { + // Need extra info to make a tree + var t = []; + + for (var i = 0; i < d.length; ++i) { + if (d[i]) t.push({ + s: i, + f: d[i] + }); + } + + var s = t.length; + var t2 = t.slice(); + if (!s) return [new u8(0), 0]; + + if (s == 1) { + var v = new u8(t[0].s + 1); + v[t[0].s] = 1; + return [v, 1]; + } + + t.sort(function (a, b) { + return a.f - b.f; + }); // after i2 reaches last ind, will be stopped + // freq must be greater than largest possible number of symbols + + t.push({ + s: -1, + f: 25001 + }); + var l = t[0], + r = t[1], + i0 = 0, + i1 = 1, + i2 = 2; + t[0] = { + s: -1, + f: l.f + r.f, + l: l, + r: r + }; // efficient algorithm from UZIP.js + // i0 is lookbehind, i2 is lookahead - after processing two low-freq + // symbols that combined have high freq, will start processing i2 (high-freq, + // non-composite) symbols instead + // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/ + + while (i1 != s - 1) { + l = t[t[i0].f < t[i2].f ? i0++ : i2++]; + r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++]; + t[i1++] = { + s: -1, + f: l.f + r.f, + l: l, + r: r + }; + } + + var maxSym = t2[0].s; + + for (var i = 1; i < s; ++i) { + if (t2[i].s > maxSym) maxSym = t2[i].s; + } // code lengths + + + var tr = new u16(maxSym + 1); // max bits in tree + + var mbt = ln(t[i1 - 1], tr, 0); + + if (mbt > mb) { + // more algorithms from UZIP.js + // TODO: find out how this code works (debt) + // ind debt + var i = 0, + dt = 0; // left cost + + var lft = mbt - mb, + cst = 1 << lft; + t2.sort(function (a, b) { + return tr[b.s] - tr[a.s] || a.f - b.f; + }); + + for (; i < s; ++i) { + var i2_1 = t2[i].s; + + if (tr[i2_1] > mb) { + dt += cst - (1 << mbt - tr[i2_1]); + tr[i2_1] = mb; + } else break; + } + + dt >>>= lft; + + while (dt > 0) { + var i2_2 = t2[i].s; + if (tr[i2_2] < mb) dt -= 1 << mb - tr[i2_2]++ - 1;else ++i; + } + + for (; i >= 0 && dt; --i) { + var i2_3 = t2[i].s; + + if (tr[i2_3] == mb) { + --tr[i2_3]; + ++dt; + } + } + + mbt = mb; + } + + return [new u8(tr), mbt]; + }; // get the max length and assign length codes + + + var ln = function (n, l, d) { + return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d; + }; // length codes generation + + + var lc = function (c) { + var s = c.length; // Note that the semicolon was intentional + + while (s && !c[--s]); + + var cl = new u16(++s); // ind num streak + + var cli = 0, + cln = c[0], + cls = 1; + + var w = function (v) { + cl[cli++] = v; + }; + + for (var i = 1; i <= s; ++i) { + if (c[i] == cln && i != s) ++cls;else { + if (!cln && cls > 2) { + for (; cls > 138; cls -= 138) w(32754); + + if (cls > 2) { + w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); + cls = 0; + } + } else if (cls > 3) { + w(cln), --cls; + + for (; cls > 6; cls -= 6) w(8304); + + if (cls > 2) w(cls - 3 << 5 | 8208), cls = 0; + } + + while (cls--) w(cln); + + cls = 1; + cln = c[i]; + } + } + + return [cl.subarray(0, cli), s]; + }; // calculate the length of output from tree, code lengths + + + var clen = function (cf, cl) { + var l = 0; + + for (var i = 0; i < cl.length; ++i) l += cf[i] * cl[i]; + + return l; + }; // writes a fixed block + // returns the new bit pos + + + var wfblk = function (out, pos, dat) { + // no need to write 00 as type: TypedArray defaults to 0 + var s = dat.length; + var o = shft(pos + 2); + out[o] = s & 255; + out[o + 1] = s >>> 8; + out[o + 2] = out[o] ^ 255; + out[o + 3] = out[o + 1] ^ 255; + + for (var i = 0; i < s; ++i) out[o + i + 4] = dat[i]; + + return (o + 4 + s) * 8; + }; // writes a block + + + var wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) { + wbits(out, p++, final); + ++lf[256]; + + var _a = hTree(lf, 15), + dlt = _a[0], + mlb = _a[1]; + + var _b = hTree(df, 15), + ddt = _b[0], + mdb = _b[1]; + + var _c = lc(dlt), + lclt = _c[0], + nlc = _c[1]; + + var _d = lc(ddt), + lcdt = _d[0], + ndc = _d[1]; + + var lcfreq = new u16(19); + + for (var i = 0; i < lclt.length; ++i) lcfreq[lclt[i] & 31]++; + + for (var i = 0; i < lcdt.length; ++i) lcfreq[lcdt[i] & 31]++; + + var _e = hTree(lcfreq, 7), + lct = _e[0], + mlcb = _e[1]; + + var nlcc = 19; + + for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc); + + var flen = bl + 5 << 3; + var ftlen = clen(lf, flt) + clen(df, fdt) + eb; + var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]); + if (flen <= ftlen && flen <= dtlen) return wfblk(out, p, dat.subarray(bs, bs + bl)); + var lm, ll, dm, dl; + wbits(out, p, 1 + (dtlen < ftlen)), p += 2; + + if (dtlen < ftlen) { + lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; + var llm = hMap(lct, mlcb, 0); + wbits(out, p, nlc - 257); + wbits(out, p + 5, ndc - 1); + wbits(out, p + 10, nlcc - 4); + p += 14; + + for (var i = 0; i < nlcc; ++i) wbits(out, p + 3 * i, lct[clim[i]]); + + p += 3 * nlcc; + var lcts = [lclt, lcdt]; + + for (var it = 0; it < 2; ++it) { + var clct = lcts[it]; + + for (var i = 0; i < clct.length; ++i) { + var len = clct[i] & 31; + wbits(out, p, llm[len]), p += lct[len]; + if (len > 15) wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12; + } + } + } else { + lm = flm, ll = flt, dm = fdm, dl = fdt; + } + + for (var i = 0; i < li; ++i) { + if (syms[i] > 255) { + var len = syms[i] >>> 18 & 31; + wbits16(out, p, lm[len + 257]), p += ll[len + 257]; + if (len > 7) wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len]; + var dst = syms[i] & 31; + wbits16(out, p, dm[dst]), p += dl[dst]; + if (dst > 3) wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst]; + } else { + wbits16(out, p, lm[syms[i]]), p += ll[syms[i]]; + } + } + + wbits16(out, p, lm[256]); + return p + ll[256]; + }; // deflate options (nice << 13) | chain + + + var deo = /*#__PURE__*/new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); // empty + + var et = /*#__PURE__*/new u8(0); // compresses data into a raw DEFLATE buffer + + var dflt = function (dat, lvl, plvl, pre, post, lst) { + var s = dat.length; + var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post); // writing to this writes to the output buffer + + var w = o.subarray(pre, o.length - post); + var pos = 0; + + if (!lvl || s < 8) { + for (var i = 0; i <= s; i += 65535) { + // end + var e = i + 65535; + + if (e < s) { + // write full block + pos = wfblk(w, pos, dat.subarray(i, e)); + } else { + // write final block + w[i] = lst; + pos = wfblk(w, pos, dat.subarray(i, s)); + } + } + } else { + var opt = deo[lvl - 1]; + var n = opt >>> 13, + c = opt & 8191; + var msk_1 = (1 << plvl) - 1; // prev 2-byte val map curr 2-byte val map + + var prev = new u16(32768), + head = new u16(msk_1 + 1); + var bs1_1 = Math.ceil(plvl / 3), + bs2_1 = 2 * bs1_1; + + var hsh = function (i) { + return (dat[i] ^ dat[i + 1] << bs1_1 ^ dat[i + 2] << bs2_1) & msk_1; + }; // 24576 is an arbitrary number of maximum symbols per block + // 424 buffer for last block + + + var syms = new u32(25000); // length/literal freq distance freq + + var lf = new u16(288), + df = new u16(32); // l/lcnt exbits index l/lind waitdx bitpos + + var lc_1 = 0, + eb = 0, + i = 0, + li = 0, + wi = 0, + bs = 0; + + for (; i < s; ++i) { + // hash value + var hv = hsh(i); // index mod 32768 + + var imod = i & 32767; // previous index with this value + + var pimod = head[hv]; + prev[imod] = pimod; + head[hv] = imod; // We always should modify head and prev, but only add symbols if + // this data is not yet processed ("wait" for wait index) + + if (wi <= i) { + // bytes remaining + var rem = s - i; + + if ((lc_1 > 7000 || li > 24576) && rem > 423) { + pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); + li = lc_1 = eb = 0, bs = i; + + for (var j = 0; j < 286; ++j) lf[j] = 0; + + for (var j = 0; j < 30; ++j) df[j] = 0; + } // len dist chain + + + var l = 2, + d = 0, + ch_1 = c, + dif = imod - pimod & 32767; + + if (rem > 2 && hv == hsh(i - dif)) { + var maxn = Math.min(n, rem) - 1; + var maxd = Math.min(32767, i); // max possible length + // not capped at dif because decompressors implement "rolling" index population + + var ml = Math.min(258, rem); + + while (dif <= maxd && --ch_1 && imod != pimod) { + if (dat[i + l] == dat[i + l - dif]) { + var nl = 0; + + for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl); + + if (nl > l) { + l = nl, d = dif; // break out early when we reach "nice" (we are satisfied enough) + + if (nl > maxn) break; // now, find the rarest 2-byte sequence within this + // length of literals and search for that instead. + // Much faster than just using the start + + var mmd = Math.min(dif, nl - 2); + var md = 0; + + for (var j = 0; j < mmd; ++j) { + var ti = i - dif + j + 32768 & 32767; + var pti = prev[ti]; + var cd = ti - pti + 32768 & 32767; + if (cd > md) md = cd, pimod = ti; + } + } + } // check the previous match + + + imod = pimod, pimod = prev[imod]; + dif += imod - pimod + 32768 & 32767; + } + } // d will be nonzero only when a match was found + + + if (d) { + // store both dist and len data in one Uint32 + // Make sure this is recognized as a len/dist with 28th bit (2^28) + syms[li++] = 268435456 | revfl[l] << 18 | revfd[d]; + var lin = revfl[l] & 31, + din = revfd[d] & 31; + eb += fleb[lin] + fdeb[din]; + ++lf[257 + lin]; + ++df[din]; + wi = i + l; + ++lc_1; + } else { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + } + } + + pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); // this is the easiest way to avoid needing to maintain state + + if (!lst) pos = wfblk(w, pos, et); + } + + return slc(o, 0, pre + shft(pos) + post); + }; // CRC32 table + + + var adler = function () { + var a = 1, + b = 0; + return { + p: function (d) { + // closures have awful performance + var n = a, + m = b; + var l = d.length; + + for (var i = 0; i != l;) { + var e = Math.min(i + 5552, l); + + for (; i < e; ++i) n += d[i], m += n; + + n %= 65521, m %= 65521; + } + + a = n, b = m; + }, + d: function () { + return (a >>> 8 << 16 | (b & 255) << 8 | b >>> 8) + ((a & 255) << 23) * 2; + } + }; + }; + + var dopt = function (dat, opt, pre, post, st) { + return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st); + }; // Walmart object spread + + + var wbytes = function (d, b, v) { + for (; v; ++b) d[b] = v, v >>>= 8; + }; // gzip header + + + var zlh = function (c, o) { + var lv = o.level, + fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2; + c[0] = 120, c[1] = fl << 6 | (fl ? 32 - 2 * fl : 1); + }; // zlib valid + + + var zlv = function (d) { + if ((d[0] & 15) != 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31) throw 'invalid zlib data'; + if (d[1] & 32) throw 'invalid zlib data: preset dictionaries not supported'; + }; + /** + * Compress data with Zlib + * @param data The data to compress + * @param opts The compression options + * @returns The zlib-compressed version of the data + */ + + function zlibSync(data, opts) { + if (opts === void 0) { + opts = {}; + } + + var a = adler(); + a.p(data); + var d = dopt(data, opts, 2, 4); + return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d; + } + /** + * Expands Zlib data + * @param data The data to decompress + * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length. + * @returns The decompressed version of the data + */ + + function unzlibSync(data, out) { + return inflt((zlv(data), data.subarray(2, -4)), out); + } // Default algorithm for compression (used because having a known output size allows faster decompression) + + /** + * @license + * jsPDF filters PlugIn + * Copyright (c) 2014 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + + (function (jsPDFAPI) { + + var ASCII85Encode = function ASCII85Encode(a) { + var b, c, d, e, f, g, h, i, j, k; // eslint-disable-next-line no-control-regex + + for (!/[^\x00-\xFF]/.test(a), b = "\x00\x00\x00\x00".slice(a.length % 4 || 4), a += b, c = [], d = 0, e = a.length; e > d; d += 4) { + f = (a.charCodeAt(d) << 24) + (a.charCodeAt(d + 1) << 16) + (a.charCodeAt(d + 2) << 8) + a.charCodeAt(d + 3), 0 !== f ? (k = f % 85, f = (f - k) / 85, j = f % 85, f = (f - j) / 85, i = f % 85, f = (f - i) / 85, h = f % 85, f = (f - h) / 85, g = f % 85, c.push(g + 33, h + 33, i + 33, j + 33, k + 33)) : c.push(122); + } + + return function (a, b) { + for (var c = b; c > 0; c--) { + a.pop(); + } + }(c, b.length), String.fromCharCode.apply(String, c) + "~>"; + }; + + var ASCII85Decode = function ASCII85Decode(a) { + var c, + d, + e, + f, + g, + h = String, + l = "length", + w = 255, + x = "charCodeAt", + y = "slice", + z = "replace"; + + for ("~>" === a[y](-2), a = a[y](0, -2)[z](/\s/g, "")[z]("z", "!!!!!"), c = "uuuuu"[y](a[l] % 5 || 5), a += c, e = [], f = 0, g = a[l]; g > f; f += 5) { + d = 52200625 * (a[x](f) - 33) + 614125 * (a[x](f + 1) - 33) + 7225 * (a[x](f + 2) - 33) + 85 * (a[x](f + 3) - 33) + (a[x](f + 4) - 33), e.push(w & d >> 24, w & d >> 16, w & d >> 8, w & d); + } + + return function (a, b) { + for (var c = b; c > 0; c--) { + a.pop(); + } + }(e, c[l]), h.fromCharCode.apply(h, e); + }; + + var ASCIIHexEncode = function ASCIIHexEncode(value) { + return value.split("").map(function (value) { + return ("0" + value.charCodeAt().toString(16)).slice(-2); + }).join("") + ">"; + }; + + var ASCIIHexDecode = function ASCIIHexDecode(value) { + var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/); + value = value.replace(/\s/g, ""); + + if (value.indexOf(">") !== -1) { + value = value.substr(0, value.indexOf(">")); + } + + if (value.length % 2) { + value += "0"; + } + + if (regexCheckIfHex.test(value) === false) { + return ""; + } + + var result = ""; + + for (var i = 0; i < value.length; i += 2) { + result += String.fromCharCode("0x" + (value[i] + value[i + 1])); + } + + return result; + }; + /* + var FlatePredictors = { + None: 1, + TIFF: 2, + PNG_None: 10, + PNG_Sub: 11, + PNG_Up: 12, + PNG_Average: 13, + PNG_Paeth: 14, + PNG_Optimum: 15 + }; + */ + + + var FlateEncode = function FlateEncode(data) { + var arr = new Uint8Array(data.length); + var i = data.length; + + while (i--) { + arr[i] = data.charCodeAt(i); + } + + arr = zlibSync(arr); + data = arr.reduce(function (data, byte) { + return data + String.fromCharCode(byte); + }, ""); + return data; + }; + + jsPDFAPI.processDataByFilters = function (origData, filterChain) { + + var i = 0; + var data = origData || ""; + var reverseChain = []; + filterChain = filterChain || []; + + if (typeof filterChain === "string") { + filterChain = [filterChain]; + } + + for (i = 0; i < filterChain.length; i += 1) { + switch (filterChain[i]) { + case "ASCII85Decode": + case "/ASCII85Decode": + data = ASCII85Decode(data); + reverseChain.push("/ASCII85Encode"); + break; + + case "ASCII85Encode": + case "/ASCII85Encode": + data = ASCII85Encode(data); + reverseChain.push("/ASCII85Decode"); + break; + + case "ASCIIHexDecode": + case "/ASCIIHexDecode": + data = ASCIIHexDecode(data); + reverseChain.push("/ASCIIHexEncode"); + break; + + case "ASCIIHexEncode": + case "/ASCIIHexEncode": + data = ASCIIHexEncode(data); + reverseChain.push("/ASCIIHexDecode"); + break; + + case "FlateEncode": + case "/FlateEncode": + data = FlateEncode(data); + reverseChain.push("/FlateDecode"); + break; + + default: + throw new Error('The filter: "' + filterChain[i] + '" is not implemented'); + } + } + + return { + data: data, + reverseChain: reverseChain.reverse().join(" ") + }; + }; + })(jsPDF.API); + + /** + * @license + * jsPDF fileloading PlugIn + * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com) + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * @name fileloading + * @module + */ + + (function (jsPDFAPI) { + /** + * @name loadFile + * @function + * @param {string} url + * @param {boolean} sync + * @param {function} callback + * @returns {string|undefined} result + */ + + jsPDFAPI.loadFile = function (url, sync, callback) { + return browserRequest(url, sync, callback); + }; + /** + * @name loadImageFile + * @function + * @param {string} path + * @param {boolean} sync + * @param {function} callback + */ + + + jsPDFAPI.loadImageFile = jsPDFAPI.loadFile; + + function browserRequest(url, sync, callback) { + sync = sync === false ? false : true; + callback = typeof callback === "function" ? callback : function () {}; + var result = undefined; + + var xhr = function xhr(url, sync, callback) { + var request = new XMLHttpRequest(); + var i = 0; + + var sanitizeUnicode = function sanitizeUnicode(data) { + var dataLength = data.length; + var charArray = []; + var StringFromCharCode = String.fromCharCode; //Transform Unicode to ASCII + + for (i = 0; i < dataLength; i += 1) { + charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff)); + } + + return charArray.join(""); + }; + + request.open("GET", url, !sync); // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com] + + request.overrideMimeType("text/plain; charset=x-user-defined"); + + if (sync === false) { + request.onload = function () { + if (request.status === 200) { + callback(sanitizeUnicode(this.responseText)); + } else { + callback(undefined); + } + }; + } + + request.send(null); + + if (sync && request.status === 200) { + return sanitizeUnicode(request.responseText); + } + }; + + try { + result = xhr(url, sync, callback); // eslint-disable-next-line no-empty + } catch (e) {} + + return result; + } + })(jsPDF.API); + + /** + * jsPDF html PlugIn + * + * @name html + * @module + */ + + (function (jsPDFAPI) { + + function loadHtml2Canvas() { + return function () { + if (globalObject["html2canvas"]) { + return Promise.resolve(globalObject["html2canvas"]); + } + + if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") { + return new Promise(function (resolve, reject) { + try { + resolve(require("html2canvas")); + } catch (e) { + reject(e); + } + }); + } + + if (typeof define === "function" && define.amd) { + return new Promise(function (resolve, reject) { + try { + require(["html2canvas"], resolve); + } catch (e) { + reject(e); + } + }); + } + + return Promise.reject(new Error("Could not load html2canvas")); + }().catch(function (e) { + return Promise.reject(new Error("Could not load html2canvas: " + e)); + }).then(function (html2canvas) { + return html2canvas.default ? html2canvas.default : html2canvas; + }); + } + + function loadDomPurify() { + return function () { + if (globalObject["DOMPurify"]) { + return Promise.resolve(globalObject["DOMPurify"]); + } + + if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") { + return new Promise(function (resolve, reject) { + try { + resolve(require("dompurify")); + } catch (e) { + reject(e); + } + }); + } + + if (typeof define === "function" && define.amd) { + return new Promise(function (resolve, reject) { + try { + require(["dompurify"], resolve); + } catch (e) { + reject(e); + } + }); + } + + return Promise.reject(new Error("Could not load dompurify")); + }().catch(function (e) { + return Promise.reject(new Error("Could not load dompurify: " + e)); + }).then(function (dompurify) { + return dompurify.default ? dompurify.default : dompurify; + }); + } + /** + * Determine the type of a variable/object. + * + * @private + * @ignore + */ + + + var objType = function objType(obj) { + var type = _typeof(obj); + + if (type === "undefined") return "undefined";else if (type === "string" || obj instanceof String) return "string";else if (type === "number" || obj instanceof Number) return "number";else if (type === "function" || obj instanceof Function) return "function";else if (!!obj && obj.constructor === Array) return "array";else if (obj && obj.nodeType === 1) return "element";else if (type === "object") return "object";else return "unknown"; + }; + /** + * Create an HTML element with optional className, innerHTML, and style. + * + * @private + * @ignore + */ + + + var createElement = function createElement(tagName, opt) { + var el = document.createElement(tagName); + if (opt.className) el.className = opt.className; + + if (opt.innerHTML && opt.dompurify) { + el.innerHTML = opt.dompurify.sanitize(opt.innerHTML); + } + + for (var key in opt.style) { + el.style[key] = opt.style[key]; + } + + return el; + }; + /** + * Deep-clone a node and preserve contents/properties. + * + * @private + * @ignore + */ + + + var cloneNode = function cloneNode(node, javascriptEnabled) { + // Recursively clone the node. + var clone = node.nodeType === 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false); + + for (var child = node.firstChild; child; child = child.nextSibling) { + if (javascriptEnabled === true || child.nodeType !== 1 || child.nodeName !== "SCRIPT") { + clone.appendChild(cloneNode(child, javascriptEnabled)); + } + } + + if (node.nodeType === 1) { + // Preserve contents/properties of special nodes. + if (node.nodeName === "CANVAS") { + clone.width = node.width; + clone.height = node.height; + clone.getContext("2d").drawImage(node, 0, 0); + } else if (node.nodeName === "TEXTAREA" || node.nodeName === "SELECT") { + clone.value = node.value; + } // Preserve the node's scroll position when it loads. + + + clone.addEventListener("load", function () { + clone.scrollTop = node.scrollTop; + clone.scrollLeft = node.scrollLeft; + }, true); + } // Return the cloned node. + + + return clone; + }; + /* ----- CONSTRUCTOR ----- */ + + + var Worker = function Worker(opt) { + // Create the root parent for the proto chain, and the starting Worker. + var root = Object.assign(Worker.convert(Promise.resolve()), JSON.parse(JSON.stringify(Worker.template))); + var self = Worker.convert(Promise.resolve(), root); // Set progress, optional settings, and return. + + self = self.setProgress(1, Worker, 1, [Worker]); + self = self.set(opt); + return self; + }; // Boilerplate for subclassing Promise. + + + Worker.prototype = Object.create(Promise.prototype); + Worker.prototype.constructor = Worker; // Converts/casts promises into Workers. + + Worker.convert = function convert(promise, inherit) { + // Uses prototypal inheritance to receive changes made to ancestors' properties. + promise.__proto__ = inherit || Worker.prototype; + return promise; + }; + + Worker.template = { + prop: { + src: null, + container: null, + overlay: null, + canvas: null, + img: null, + pdf: null, + pageSize: null, + callback: function callback() {} + }, + progress: { + val: 0, + state: null, + n: 0, + stack: [] + }, + opt: { + filename: "file.pdf", + margin: [0, 0, 0, 0], + enableLinks: true, + x: 0, + y: 0, + html2canvas: {}, + jsPDF: {}, + backgroundColor: "transparent" + } + }; + /* ----- FROM / TO ----- */ + + Worker.prototype.from = function from(src, type) { + function getType(src) { + switch (objType(src)) { + case "string": + return "string"; + + case "element": + return src.nodeName.toLowerCase() === "canvas" ? "canvas" : "element"; + + default: + return "unknown"; + } + } + + return this.then(function from_main() { + type = type || getType(src); + + switch (type) { + case "string": + return this.then(loadDomPurify).then(function (dompurify) { + return this.set({ + src: createElement("div", { + innerHTML: src, + dompurify: dompurify + }) + }); + }); + + case "element": + return this.set({ + src: src + }); + + case "canvas": + return this.set({ + canvas: src + }); + + case "img": + return this.set({ + img: src + }); + + default: + return this.error("Unknown source type."); + } + }); + }; + + Worker.prototype.to = function to(target) { + // Route the 'to' request to the appropriate method. + switch (target) { + case "container": + return this.toContainer(); + + case "canvas": + return this.toCanvas(); + + case "img": + return this.toImg(); + + case "pdf": + return this.toPdf(); + + default: + return this.error("Invalid target."); + } + }; + + Worker.prototype.toContainer = function toContainer() { + // Set up function prerequisites. + var prereqs = [function checkSrc() { + return this.prop.src || this.error("Cannot duplicate - no source HTML."); + }, function checkPageSize() { + return this.prop.pageSize || this.setPageSize(); + }]; + return this.thenList(prereqs).then(function toContainer_main() { + // Define the CSS styles for the container and its overlay parent. + var overlayCSS = { + position: "fixed", + overflow: "hidden", + zIndex: 1000, + left: "-100000px", + right: 0, + bottom: 0, + top: 0 + }; + var containerCSS = { + position: "relative", + display: "inline-block", + width: (typeof this.opt.width === "number" && !isNaN(this.opt.width) && typeof this.opt.windowWidth === "number" && !isNaN(this.opt.windowWidth) ? this.opt.windowWidth : Math.max(this.prop.src.clientWidth, this.prop.src.scrollWidth, this.prop.src.offsetWidth)) + "px", + left: 0, + right: 0, + top: 0, + margin: "auto", + backgroundColor: this.opt.backgroundColor + }; // Set the overlay to hidden (could be changed in the future to provide a print preview). + + var source = cloneNode(this.prop.src, this.opt.html2canvas.javascriptEnabled); + + if (source.tagName === "BODY") { + containerCSS.height = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight) + "px"; + } + + this.prop.overlay = createElement("div", { + className: "html2pdf__overlay", + style: overlayCSS + }); + this.prop.container = createElement("div", { + className: "html2pdf__container", + style: containerCSS + }); + this.prop.container.appendChild(source); + this.prop.container.firstChild.appendChild(createElement("div", { + style: { + clear: "both", + border: "0 none transparent", + margin: 0, + padding: 0, + height: 0 + } + })); + this.prop.container.style.float = "none"; + this.prop.overlay.appendChild(this.prop.container); + document.body.appendChild(this.prop.overlay); + this.prop.container.firstChild.style.position = "relative"; + this.prop.container.height = Math.max(this.prop.container.firstChild.clientHeight, this.prop.container.firstChild.scrollHeight, this.prop.container.firstChild.offsetHeight) + "px"; + }); + }; + + Worker.prototype.toCanvas = function toCanvas() { + // Set up function prerequisites. + var prereqs = [function checkContainer() { + return document.body.contains(this.prop.container) || this.toContainer(); + }]; // Fulfill prereqs then create the canvas. + + return this.thenList(prereqs).then(loadHtml2Canvas).then(function toCanvas_main(html2canvas) { + // Handle old-fashioned 'onrendered' argument. + var options = Object.assign({}, this.opt.html2canvas); + delete options.onrendered; + return html2canvas(this.prop.container, options); + }).then(function toCanvas_post(canvas) { + // Handle old-fashioned 'onrendered' argument. + var onRendered = this.opt.html2canvas.onrendered || function () {}; + + onRendered(canvas); + this.prop.canvas = canvas; + document.body.removeChild(this.prop.overlay); + }); + }; + + Worker.prototype.toContext2d = function toContext2d() { + // Set up function prerequisites. + var prereqs = [function checkContainer() { + return document.body.contains(this.prop.container) || this.toContainer(); + }]; // Fulfill prereqs then create the canvas. + + return this.thenList(prereqs).then(loadHtml2Canvas).then(function toContext2d_main(html2canvas) { + // Handle old-fashioned 'onrendered' argument. + var pdf = this.opt.jsPDF; + var fontFaces = this.opt.fontFaces; + var scale = typeof this.opt.width === "number" && !isNaN(this.opt.width) && typeof this.opt.windowWidth === "number" && !isNaN(this.opt.windowWidth) ? this.opt.width / this.opt.windowWidth : 1; + var options = Object.assign({ + async: true, + allowTaint: true, + scale: scale, + scrollX: this.opt.scrollX || 0, + scrollY: this.opt.scrollY || 0, + backgroundColor: "#ffffff", + imageTimeout: 15000, + logging: true, + proxy: null, + removeContainer: true, + foreignObjectRendering: false, + useCORS: false + }, this.opt.html2canvas); + delete options.onrendered; + pdf.context2d.autoPaging = typeof this.opt.autoPaging === "undefined" ? true : this.opt.autoPaging; + pdf.context2d.posX = this.opt.x; + pdf.context2d.posY = this.opt.y; + pdf.context2d.margin = this.opt.margin; + pdf.context2d.fontFaces = fontFaces; + + if (fontFaces) { + for (var i = 0; i < fontFaces.length; ++i) { + var font = fontFaces[i]; + var src = font.src.find(function (src) { + return src.format === "truetype"; + }); + + if (src) { + pdf.addFont(src.url, font.ref.name, font.ref.style); + } + } + } + + options.windowHeight = options.windowHeight || 0; + options.windowHeight = options.windowHeight == 0 ? Math.max(this.prop.container.clientHeight, this.prop.container.scrollHeight, this.prop.container.offsetHeight) : options.windowHeight; + pdf.context2d.save(true); + return html2canvas(this.prop.container, options); + }).then(function toContext2d_post(canvas) { + this.opt.jsPDF.context2d.restore(true); // Handle old-fashioned 'onrendered' argument. + + var onRendered = this.opt.html2canvas.onrendered || function () {}; + + onRendered(canvas); + this.prop.canvas = canvas; + document.body.removeChild(this.prop.overlay); + }); + }; + + Worker.prototype.toImg = function toImg() { + // Set up function prerequisites. + var prereqs = [function checkCanvas() { + return this.prop.canvas || this.toCanvas(); + }]; // Fulfill prereqs then create the image. + + return this.thenList(prereqs).then(function toImg_main() { + var imgData = this.prop.canvas.toDataURL("image/" + this.opt.image.type, this.opt.image.quality); + this.prop.img = document.createElement("img"); + this.prop.img.src = imgData; + }); + }; + + Worker.prototype.toPdf = function toPdf() { + // Set up function prerequisites. + var prereqs = [function checkContext2d() { + return this.toContext2d(); + } //function checkCanvas() { return this.prop.canvas || this.toCanvas(); } + ]; // Fulfill prereqs then create the image. + + return this.thenList(prereqs).then(function toPdf_main() { + // Create local copies of frequently used properties. + this.prop.pdf = this.prop.pdf || this.opt.jsPDF; + }); + }; + /* ----- OUTPUT / SAVE ----- */ + + + Worker.prototype.output = function output(type, options, src) { + // Redirect requests to the correct function (outputPdf / outputImg). + src = src || "pdf"; + + if (src.toLowerCase() === "img" || src.toLowerCase() === "image") { + return this.outputImg(type, options); + } else { + return this.outputPdf(type, options); + } + }; + + Worker.prototype.outputPdf = function outputPdf(type, options) { + // Set up function prerequisites. + var prereqs = [function checkPdf() { + return this.prop.pdf || this.toPdf(); + }]; // Fulfill prereqs then perform the appropriate output. + + return this.thenList(prereqs).then(function outputPdf_main() { + /* Currently implemented output types: + * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992 + * save(options), arraybuffer, blob, bloburi/bloburl, + * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl + */ + return this.prop.pdf.output(type, options); + }); + }; + + Worker.prototype.outputImg = function outputImg(type) { + // Set up function prerequisites. + var prereqs = [function checkImg() { + return this.prop.img || this.toImg(); + }]; // Fulfill prereqs then perform the appropriate output. + + return this.thenList(prereqs).then(function outputImg_main() { + switch (type) { + case undefined: + case "img": + return this.prop.img; + + case "datauristring": + case "dataurlstring": + return this.prop.img.src; + + case "datauri": + case "dataurl": + return document.location.href = this.prop.img.src; + + default: + throw 'Image output type "' + type + '" is not supported.'; + } + }); + }; + + Worker.prototype.save = function save(filename) { + // Set up function prerequisites. + var prereqs = [function checkPdf() { + return this.prop.pdf || this.toPdf(); + }]; // Fulfill prereqs, update the filename (if provided), and save the PDF. + + return this.thenList(prereqs).set(filename ? { + filename: filename + } : null).then(function save_main() { + this.prop.pdf.save(this.opt.filename); + }); + }; + + Worker.prototype.doCallback = function doCallback() { + // Set up function prerequisites. + var prereqs = [function checkPdf() { + return this.prop.pdf || this.toPdf(); + }]; // Fulfill prereqs, update the filename (if provided), and save the PDF. + + return this.thenList(prereqs).then(function doCallback_main() { + this.prop.callback(this.prop.pdf); + }); + }; + /* ----- SET / GET ----- */ + + + Worker.prototype.set = function set(opt) { + // TODO: Implement ordered pairs? + // Silently ignore invalid or empty input. + if (objType(opt) !== "object") { + return this; + } // Build an array of setter functions to queue. + + + var fns = Object.keys(opt || {}).map(function (key) { + if (key in Worker.template.prop) { + // Set pre-defined properties. + return function set_prop() { + this.prop[key] = opt[key]; + }; + } else { + switch (key) { + case "margin": + return this.setMargin.bind(this, opt.margin); + + case "jsPDF": + return function set_jsPDF() { + this.opt.jsPDF = opt.jsPDF; + return this.setPageSize(); + }; + + case "pageSize": + return this.setPageSize.bind(this, opt.pageSize); + + default: + // Set any other properties in opt. + return function set_opt() { + this.opt[key] = opt[key]; + }; + } + } + }, this); // Set properties within the promise chain. + + return this.then(function set_main() { + return this.thenList(fns); + }); + }; + + Worker.prototype.get = function get(key, cbk) { + return this.then(function get_main() { + // Fetch the requested property, either as a predefined prop or in opt. + var val = key in Worker.template.prop ? this.prop[key] : this.opt[key]; + return cbk ? cbk(val) : val; + }); + }; + + Worker.prototype.setMargin = function setMargin(margin) { + return this.then(function setMargin_main() { + // Parse the margin property. + switch (objType(margin)) { + case "number": + margin = [margin, margin, margin, margin]; + // eslint-disable-next-line no-fallthrough + + case "array": + if (margin.length === 2) { + margin = [margin[0], margin[1], margin[0], margin[1]]; + } + + if (margin.length === 4) { + break; + } + + // eslint-disable-next-line no-fallthrough + + default: + return this.error("Invalid margin array."); + } // Set the margin property, then update pageSize. + + + this.opt.margin = margin; + }).then(this.setPageSize); + }; + + Worker.prototype.setPageSize = function setPageSize(pageSize) { + function toPx(val, k) { + return Math.floor(val * k / 72 * 96); + } + + return this.then(function setPageSize_main() { + // Retrieve page-size based on jsPDF settings, if not explicitly provided. + pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF); // Add 'inner' field if not present. + + if (!pageSize.hasOwnProperty("inner")) { + pageSize.inner = { + width: pageSize.width - this.opt.margin[1] - this.opt.margin[3], + height: pageSize.height - this.opt.margin[0] - this.opt.margin[2] + }; + pageSize.inner.px = { + width: toPx(pageSize.inner.width, pageSize.k), + height: toPx(pageSize.inner.height, pageSize.k) + }; + pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width; + } // Attach pageSize to this. + + + this.prop.pageSize = pageSize; + }); + }; + + Worker.prototype.setProgress = function setProgress(val, state, n, stack) { + // Immediately update all progress values. + if (val != null) this.progress.val = val; + if (state != null) this.progress.state = state; + if (n != null) this.progress.n = n; + if (stack != null) this.progress.stack = stack; + this.progress.ratio = this.progress.val / this.progress.state; // Return this for command chaining. + + return this; + }; + + Worker.prototype.updateProgress = function updateProgress(val, state, n, stack) { + // Immediately update all progress values, using setProgress. + return this.setProgress(val ? this.progress.val + val : null, state ? state : null, n ? this.progress.n + n : null, stack ? this.progress.stack.concat(stack) : null); + }; + /* ----- PROMISE MAPPING ----- */ + + + Worker.prototype.then = function then(onFulfilled, onRejected) { + // Wrap `this` for encapsulation. + var self = this; + return this.thenCore(onFulfilled, onRejected, function then_main(onFulfilled, onRejected) { + // Update progress while queuing, calling, and resolving `then`. + self.updateProgress(null, null, 1, [onFulfilled]); + return Promise.prototype.then.call(this, function then_pre(val) { + self.updateProgress(null, onFulfilled); + return val; + }).then(onFulfilled, onRejected).then(function then_post(val) { + self.updateProgress(1); + return val; + }); + }); + }; + + Worker.prototype.thenCore = function thenCore(onFulfilled, onRejected, thenBase) { + // Handle optional thenBase parameter. + thenBase = thenBase || Promise.prototype.then; // Wrap `this` for encapsulation and bind it to the promise handlers. + + var self = this; + + if (onFulfilled) { + onFulfilled = onFulfilled.bind(self); + } + + if (onRejected) { + onRejected = onRejected.bind(self); + } // Cast self into a Promise to avoid polyfills recursively defining `then`. + + + var isNative = Promise.toString().indexOf("[native code]") !== -1 && Promise.name === "Promise"; + var selfPromise = isNative ? self : Worker.convert(Object.assign({}, self), Promise.prototype); // Return the promise, after casting it into a Worker and preserving props. + + var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected); + return Worker.convert(returnVal, self.__proto__); + }; + + Worker.prototype.thenExternal = function thenExternal(onFulfilled, onRejected) { + // Call `then` and return a standard promise (exits the Worker chain). + return Promise.prototype.then.call(this, onFulfilled, onRejected); + }; + + Worker.prototype.thenList = function thenList(fns) { + // Queue a series of promise 'factories' into the promise chain. + var self = this; + fns.forEach(function thenList_forEach(fn) { + self = self.thenCore(fn); + }); + return self; + }; + + Worker.prototype["catch"] = function (onRejected) { + // Bind `this` to the promise handler, call `catch`, and return a Worker. + if (onRejected) { + onRejected = onRejected.bind(this); + } + + var returnVal = Promise.prototype["catch"].call(this, onRejected); + return Worker.convert(returnVal, this); + }; + + Worker.prototype.catchExternal = function catchExternal(onRejected) { + // Call `catch` and return a standard promise (exits the Worker chain). + return Promise.prototype["catch"].call(this, onRejected); + }; + + Worker.prototype.error = function error(msg) { + // Throw the error in the Promise chain. + return this.then(function error_main() { + throw new Error(msg); + }); + }; + /* ----- ALIASES ----- */ + + + Worker.prototype.using = Worker.prototype.set; + Worker.prototype.saveAs = Worker.prototype.save; + Worker.prototype.export = Worker.prototype.output; + Worker.prototype.run = Worker.prototype.then; // Get dimensions of a PDF page, as determined by jsPDF. + + jsPDF.getPageSize = function (orientation, unit, format) { + // Decode options object + if (_typeof(orientation) === "object") { + var options = orientation; + orientation = options.orientation; + unit = options.unit || unit; + format = options.format || format; + } // Default options + + + unit = unit || "mm"; + format = format || "a4"; + orientation = ("" + (orientation || "P")).toLowerCase(); + var format_as_string = ("" + format).toLowerCase(); // Size in pt of various paper formats + + var pageFormats = { + a0: [2383.94, 3370.39], + a1: [1683.78, 2383.94], + a2: [1190.55, 1683.78], + a3: [841.89, 1190.55], + a4: [595.28, 841.89], + a5: [419.53, 595.28], + a6: [297.64, 419.53], + a7: [209.76, 297.64], + a8: [147.4, 209.76], + a9: [104.88, 147.4], + a10: [73.7, 104.88], + b0: [2834.65, 4008.19], + b1: [2004.09, 2834.65], + b2: [1417.32, 2004.09], + b3: [1000.63, 1417.32], + b4: [708.66, 1000.63], + b5: [498.9, 708.66], + b6: [354.33, 498.9], + b7: [249.45, 354.33], + b8: [175.75, 249.45], + b9: [124.72, 175.75], + b10: [87.87, 124.72], + c0: [2599.37, 3676.54], + c1: [1836.85, 2599.37], + c2: [1298.27, 1836.85], + c3: [918.43, 1298.27], + c4: [649.13, 918.43], + c5: [459.21, 649.13], + c6: [323.15, 459.21], + c7: [229.61, 323.15], + c8: [161.57, 229.61], + c9: [113.39, 161.57], + c10: [79.37, 113.39], + dl: [311.81, 623.62], + letter: [612, 792], + "government-letter": [576, 756], + legal: [612, 1008], + "junior-legal": [576, 360], + ledger: [1224, 792], + tabloid: [792, 1224], + "credit-card": [153, 243] + }; + var k; // Unit conversion + + switch (unit) { + case "pt": + k = 1; + break; + + case "mm": + k = 72 / 25.4; + break; + + case "cm": + k = 72 / 2.54; + break; + + case "in": + k = 72; + break; + + case "px": + k = 72 / 96; + break; + + case "pc": + k = 12; + break; + + case "em": + k = 12; + break; + + case "ex": + k = 6; + break; + + default: + throw "Invalid unit: " + unit; + } + + var pageHeight = 0; + var pageWidth = 0; // Dimensions are stored as user units and converted to points on output + + if (pageFormats.hasOwnProperty(format_as_string)) { + pageHeight = pageFormats[format_as_string][1] / k; + pageWidth = pageFormats[format_as_string][0] / k; + } else { + try { + pageHeight = format[1]; + pageWidth = format[0]; + } catch (err) { + throw new Error("Invalid format: " + format); + } + } + + var tmp; // Handle page orientation + + if (orientation === "p" || orientation === "portrait") { + orientation = "p"; + + if (pageWidth > pageHeight) { + tmp = pageWidth; + pageWidth = pageHeight; + pageHeight = tmp; + } + } else if (orientation === "l" || orientation === "landscape") { + orientation = "l"; + + if (pageHeight > pageWidth) { + tmp = pageWidth; + pageWidth = pageHeight; + pageHeight = tmp; + } + } else { + throw "Invalid orientation: " + orientation; + } // Return information (k is the unit conversion ratio from pts) + + + var info = { + width: pageWidth, + height: pageHeight, + unit: unit, + k: k, + orientation: orientation + }; + return info; + }; + /** + * @typedef FontFace + * + * The font-face type implements an interface similar to that of the font-face CSS rule, + * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D + * is updated. + * + * All properties expect values similar to those in the font-face CSS rule. A difference + * is the font-family, which do not need to be enclosed in double-quotes when containing + * spaces like in CSS. + * + * @property {string} family The name of the font-family. + * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'. + * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.) + * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded. + * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched. + * @property {string} [src] url A URL to a font of a specific format. + * @property {string} [src] format Format of the font referenced by the URL. + */ + + /** + * Generate a PDF from an HTML element or string using. + * + * @name html + * @function + * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML. + * @param {Object} [options] Collection of settings + * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance + * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0. + * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode. + *
      + *
    • + * false: Auto paging is disabled. + *
    • + *
    • + * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly + * slice text in half, making it difficult to read. + *
    • + *
    • + * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting + * mostly of a single column of text. + *
    • + *
    + * Default is true. + * @param {string} [options.filename] name of the file + * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image + * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options + * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm. + * @param {jsPDF} [options.jsPDF] jsPDF instance + * @param {number=} [options.x] x position on the PDF document in jsPDF units. + * @param {number=} [options.y] y position on the PDF document in jsPDF units. + * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be + * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is + * specified or the windowWidth option is NOT specified. + * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the + * html2canvas.windowWidth option, this option affects the actual container size while rendering and + * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified. + * + * @example + * var doc = new jsPDF(); + * + * doc.html(document.body, { + * callback: function (doc) { + * doc.save(); + * }, + * x: 10, + * y: 10 + * }); + */ + + + jsPDFAPI.html = function (src, options) { + + options = options || {}; + + options.callback = options.callback || function () {}; + + options.html2canvas = options.html2canvas || {}; + options.html2canvas.canvas = options.html2canvas.canvas || this.canvas; + options.jsPDF = options.jsPDF || this; + options.fontFaces = options.fontFaces ? options.fontFaces.map(normalizeFontFace) : null; // Create a new worker with the given options. + + var worker = new Worker(options); + + if (!options.worker) { + // If worker is not set to true, perform the traditional 'simple' operation. + return worker.from(src).doCallback(); + } else { + // Otherwise, return the worker for new Promise-based operation. + return worker; + } + }; + })(jsPDF.API); + + /** + * @license + * ==================================================================== + * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com + * + * 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. + * ==================================================================== + */ + /** + * jsPDF JavaScript plugin + * + * @name javascript + * @module + */ + + (function (jsPDFAPI) { + + var jsNamesObj, jsJsObj, text; + /** + * @name addJS + * @function + * @param {string} javascript The javascript to be embedded into the PDF-file. + * @returns {jsPDF} + */ + + jsPDFAPI.addJS = function (javascript) { + text = javascript; + this.internal.events.subscribe("postPutResources", function () { + jsNamesObj = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/Names [(EmbeddedJS) " + (jsNamesObj + 1) + " 0 R]"); + this.internal.out(">>"); + this.internal.out("endobj"); + jsJsObj = this.internal.newObject(); + this.internal.out("<<"); + this.internal.out("/S /JavaScript"); + this.internal.out("/JS (" + text + ")"); + this.internal.out(">>"); + this.internal.out("endobj"); + }); + this.internal.events.subscribe("putCatalog", function () { + if (jsNamesObj !== undefined && jsJsObj !== undefined) { + this.internal.out("/Names <>"); + } + }); + return this; + }; + })(jsPDF.API); + + /** + * @license + * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF Outline PlugIn + * + * Generates a PDF Outline + * @name outline + * @module + */ + + (function (jsPDFAPI) { + + var namesOid; //var destsGoto = []; + + jsPDFAPI.events.push(["postPutResources", function () { + var pdf = this; + var rx = /^(\d+) 0 obj$/; // Write action goto objects for each page + // this.outline.destsGoto = []; + // for (var i = 0; i < totalPages; i++) { + // var id = pdf.internal.newObject(); + // this.outline.destsGoto.push(id); + // pdf.internal.write("<> endobj"); + // } + // + // for (var i = 0; i < dests.length; i++) { + // pdf.internal.write("(page_" + (i + 1) + ")" + dests[i] + " 0 + // R"); + // } + // + + if (this.outline.root.children.length > 0) { + var lines = pdf.outline.render().split(/\r\n/); + + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var m = rx.exec(line); + + if (m != null) { + var oid = m[1]; + pdf.internal.newObjectDeferredBegin(oid, false); + } + + pdf.internal.write(line); + } + } // This code will write named destination for each page reference + // (page_1, etc) + + + if (this.outline.createNamedDestinations) { + var totalPages = this.internal.pages.length; // WARNING: this assumes jsPDF starts on page 3 and pageIDs + // follow 5, 7, 9, etc + // Write destination objects for each page + + var dests = []; + + for (var i = 0; i < totalPages; i++) { + var id = pdf.internal.newObject(); + dests.push(id); + var info = pdf.internal.getPageInfo(i + 1); + pdf.internal.write("<< /D[" + info.objId + " 0 R /XYZ null null null]>> endobj"); + } // assign a name for each destination + + + var names2Oid = pdf.internal.newObject(); + pdf.internal.write("<< /Names [ "); + + for (var i = 0; i < dests.length; i++) { + pdf.internal.write("(page_" + (i + 1) + ")" + dests[i] + " 0 R"); + } + + pdf.internal.write(" ] >>", "endobj"); // var kids = pdf.internal.newObject(); + // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R'); + // pdf.internal.write(' ] >>', 'endobj'); + + namesOid = pdf.internal.newObject(); + pdf.internal.write("<< /Dests " + names2Oid + " 0 R"); + pdf.internal.write(">>", "endobj"); + } + }]); + jsPDFAPI.events.push(["putCatalog", function () { + var pdf = this; + + if (pdf.outline.root.children.length > 0) { + pdf.internal.write("/Outlines", this.outline.makeRef(this.outline.root)); + + if (this.outline.createNamedDestinations) { + pdf.internal.write("/Names " + namesOid + " 0 R"); + } // Open with Bookmarks showing + // pdf.internal.write("/PageMode /UseOutlines"); + + } + }]); + jsPDFAPI.events.push(["initialized", function () { + var pdf = this; + pdf.outline = { + createNamedDestinations: false, + root: { + children: [] + } + }; + /** + * Options: pageNumber + */ + + pdf.outline.add = function (parent, title, options) { + var item = { + title: title, + options: options, + children: [] + }; + + if (parent == null) { + parent = this.root; + } + + parent.children.push(item); + return item; + }; + + pdf.outline.render = function () { + this.ctx = {}; + this.ctx.val = ""; + this.ctx.pdf = pdf; + this.genIds_r(this.root); + this.renderRoot(this.root); + this.renderItems(this.root); + return this.ctx.val; + }; + + pdf.outline.genIds_r = function (node) { + node.id = pdf.internal.newObjectDeferred(); + + for (var i = 0; i < node.children.length; i++) { + this.genIds_r(node.children[i]); + } + }; + + pdf.outline.renderRoot = function (node) { + this.objStart(node); + this.line("/Type /Outlines"); + + if (node.children.length > 0) { + this.line("/First " + this.makeRef(node.children[0])); + this.line("/Last " + this.makeRef(node.children[node.children.length - 1])); + } + + this.line("/Count " + this.count_r({ + count: 0 + }, node)); + this.objEnd(); + }; + + pdf.outline.renderItems = function (node) { + var getVerticalCoordinateString = this.ctx.pdf.internal.getVerticalCoordinateString; + + for (var i = 0; i < node.children.length; i++) { + var item = node.children[i]; + this.objStart(item); + this.line("/Title " + this.makeString(item.title)); + this.line("/Parent " + this.makeRef(node)); + + if (i > 0) { + this.line("/Prev " + this.makeRef(node.children[i - 1])); + } + + if (i < node.children.length - 1) { + this.line("/Next " + this.makeRef(node.children[i + 1])); + } + + if (item.children.length > 0) { + this.line("/First " + this.makeRef(item.children[0])); + this.line("/Last " + this.makeRef(item.children[item.children.length - 1])); + } + + var count = this.count = this.count_r({ + count: 0 + }, item); + + if (count > 0) { + this.line("/Count " + count); + } + + if (item.options) { + if (item.options.pageNumber) { + // Explicit Destination + //WARNING this assumes page ids are 3,5,7, etc. + var info = pdf.internal.getPageInfo(item.options.pageNumber); + this.line("/Dest " + "[" + info.objId + " 0 R /XYZ 0 " + getVerticalCoordinateString(0) + " 0]"); // this line does not work on all clients (pageNumber instead of page ref) + //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]'); + // Named Destination + // this.line('/Dest (page_' + (item.options.pageNumber) + ')'); + // Action Destination + // var id = pdf.internal.newObject(); + // pdf.internal.write('<> endobj'); + // this.line('/A ' + id + ' 0 R' ); + } + } + + this.objEnd(); + } + + for (var z = 0; z < node.children.length; z++) { + this.renderItems(node.children[z]); + } + }; + + pdf.outline.line = function (text) { + this.ctx.val += text + "\r\n"; + }; + + pdf.outline.makeRef = function (node) { + return node.id + " 0 R"; + }; + + pdf.outline.makeString = function (val) { + return "(" + pdf.internal.pdfEscape(val) + ")"; + }; + + pdf.outline.objStart = function (node) { + this.ctx.val += "\r\n" + node.id + " 0 obj" + "\r\n<<\r\n"; + }; + + pdf.outline.objEnd = function () { + this.ctx.val += ">> \r\n" + "endobj" + "\r\n"; + }; + + pdf.outline.count_r = function (ctx, node) { + for (var i = 0; i < node.children.length; i++) { + ctx.count++; + this.count_r(ctx, node.children[i]); + } + + return ctx.count; + }; + }]); + return this; + })(jsPDF.API); + + /** + * @license + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF jpeg Support PlugIn + * + * @name jpeg_support + * @module + */ + + (function (jsPDFAPI) { + /** + * 0xc0 (SOF) Huffman - Baseline DCT + * 0xc1 (SOF) Huffman - Extended sequential DCT + * 0xc2 Progressive DCT (SOF2) + * 0xc3 Spatial (sequential) lossless (SOF3) + * 0xc4 Differential sequential DCT (SOF5) + * 0xc5 Differential progressive DCT (SOF6) + * 0xc6 Differential spatial (SOF7) + * 0xc7 + */ + + var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7]; //takes a string imgData containing the raw bytes of + //a jpeg image and returns [width, height] + //Algorithm from: http://www.64lines.com/jpeg-width-height + + var getJpegInfo = function getJpegInfo(imgData) { + var width, height, numcomponents; + var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5); + var len = imgData.length; + var result = { + width: 0, + height: 0, + numcomponents: 1 + }; + + for (var i = 4; i < len; i += 2) { + i += blockLength; + + if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) { + height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6); + width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8); + numcomponents = imgData.charCodeAt(i + 9); + result = { + width: width, + height: height, + numcomponents: numcomponents + }; + break; + } else { + blockLength = imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3); + } + } + + return result; + }; + /** + * @ignore + */ + + + jsPDFAPI.processJPEG = function (data, index, alias, compression, dataAsBinaryString, colorSpace) { + var filter = this.decode.DCT_DECODE, + bpc = 8, + dims, + result = null; + + if (typeof data === "string" || this.__addimage__.isArrayBuffer(data) || this.__addimage__.isArrayBufferView(data)) { + // if we already have a stored binary string rep use that + data = dataAsBinaryString || data; + data = this.__addimage__.isArrayBuffer(data) ? new Uint8Array(data) : data; + data = this.__addimage__.isArrayBufferView(data) ? this.__addimage__.arrayBufferToBinaryString(data) : data; + dims = getJpegInfo(data); + + switch (dims.numcomponents) { + case 1: + colorSpace = this.color_spaces.DEVICE_GRAY; + break; + + case 4: + colorSpace = this.color_spaces.DEVICE_CMYK; + break; + + case 3: + colorSpace = this.color_spaces.DEVICE_RGB; + break; + } + + result = { + data: data, + width: dims.width, + height: dims.height, + colorSpace: colorSpace, + bitsPerComponent: bpc, + filter: filter, + index: index, + alias: alias + }; + } + + return result; + }; + })(jsPDF.API); + + // Generated by CoffeeScript 1.4.0 + + var PNG = function () { + var APNG_BLEND_OP_SOURCE, APNG_DISPOSE_OP_BACKGROUND, APNG_DISPOSE_OP_PREVIOUS, makeImage, scratchCanvas, scratchCtx; + APNG_DISPOSE_OP_BACKGROUND = 1; + APNG_DISPOSE_OP_PREVIOUS = 2; + APNG_BLEND_OP_SOURCE = 0; + + function PNG(data) { + var chunkSize, colors, palLen, delayDen, delayNum, frame, i, index, key, section, palShort, text, _i, _j, _ref; + + this.data = data; + this.pos = 8; + this.palette = []; + this.imgData = []; + this.transparency = {}; + this.animation = null; + this.text = {}; + frame = null; + + while (true) { + chunkSize = this.readUInt32(); + + section = function () { + var _i, _results; + + _results = []; + + for (i = _i = 0; _i < 4; i = ++_i) { + _results.push(String.fromCharCode(this.data[this.pos++])); + } + + return _results; + }.call(this).join(""); + + switch (section) { + case "IHDR": + this.width = this.readUInt32(); + this.height = this.readUInt32(); + this.bits = this.data[this.pos++]; + this.colorType = this.data[this.pos++]; + this.compressionMethod = this.data[this.pos++]; + this.filterMethod = this.data[this.pos++]; + this.interlaceMethod = this.data[this.pos++]; + break; + + case "acTL": + this.animation = { + numFrames: this.readUInt32(), + numPlays: this.readUInt32() || Infinity, + frames: [] + }; + break; + + case "PLTE": + this.palette = this.read(chunkSize); + break; + + case "fcTL": + if (frame) { + this.animation.frames.push(frame); + } + + this.pos += 4; + frame = { + width: this.readUInt32(), + height: this.readUInt32(), + xOffset: this.readUInt32(), + yOffset: this.readUInt32() + }; + delayNum = this.readUInt16(); + delayDen = this.readUInt16() || 100; + frame.delay = 1000 * delayNum / delayDen; + frame.disposeOp = this.data[this.pos++]; + frame.blendOp = this.data[this.pos++]; + frame.data = []; + break; + + case "IDAT": + case "fdAT": + if (section === "fdAT") { + this.pos += 4; + chunkSize -= 4; + } + + data = (frame != null ? frame.data : void 0) || this.imgData; + + for (i = _i = 0; 0 <= chunkSize ? _i < chunkSize : _i > chunkSize; i = 0 <= chunkSize ? ++_i : --_i) { + data.push(this.data[this.pos++]); + } + + break; + + case "tRNS": + this.transparency = {}; + + switch (this.colorType) { + case 3: + palLen = this.palette.length / 3; + this.transparency.indexed = this.read(chunkSize); + if (this.transparency.indexed.length > palLen) throw new Error("More transparent colors than palette size"); + /* + * According to the PNG spec trns should be increased to the same size as palette if shorter + */ + //palShort = 255 - this.transparency.indexed.length; + + palShort = palLen - this.transparency.indexed.length; + + if (palShort > 0) { + for (i = _j = 0; 0 <= palShort ? _j < palShort : _j > palShort; i = 0 <= palShort ? ++_j : --_j) { + this.transparency.indexed.push(255); + } + } + + break; + + case 0: + this.transparency.grayscale = this.read(chunkSize)[0]; + break; + + case 2: + this.transparency.rgb = this.read(chunkSize); + } + + break; + + case "tEXt": + text = this.read(chunkSize); + index = text.indexOf(0); + key = String.fromCharCode.apply(String, text.slice(0, index)); + this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1)); + break; + + case "IEND": + if (frame) { + this.animation.frames.push(frame); + } + + this.colors = function () { + switch (this.colorType) { + case 0: + case 3: + case 4: + return 1; + + case 2: + case 6: + return 3; + } + }.call(this); + + this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6; + colors = this.colors + (this.hasAlphaChannel ? 1 : 0); + this.pixelBitlength = this.bits * colors; + + this.colorSpace = function () { + switch (this.colors) { + case 1: + return "DeviceGray"; + + case 3: + return "DeviceRGB"; + } + }.call(this); + + this.imgData = new Uint8Array(this.imgData); + return; + + default: + this.pos += chunkSize; + } + + this.pos += 4; + + if (this.pos > this.data.length) { + throw new Error("Incomplete or corrupt PNG file"); + } + } + } + + PNG.prototype.read = function (bytes) { + var i, _i, _results; + + _results = []; + + for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) { + _results.push(this.data[this.pos++]); + } + + return _results; + }; + + PNG.prototype.readUInt32 = function () { + var b1, b2, b3, b4; + b1 = this.data[this.pos++] << 24; + b2 = this.data[this.pos++] << 16; + b3 = this.data[this.pos++] << 8; + b4 = this.data[this.pos++]; + return b1 | b2 | b3 | b4; + }; + + PNG.prototype.readUInt16 = function () { + var b1, b2; + b1 = this.data[this.pos++] << 8; + b2 = this.data[this.pos++]; + return b1 | b2; + }; + + PNG.prototype.decodePixels = function (data) { + var pixelBytes = this.pixelBitlength / 8; + var fullPixels = new Uint8Array(this.width * this.height * pixelBytes); + var pos = 0; + + var _this = this; + + if (data == null) { + data = this.imgData; + } + + if (data.length === 0) { + return new Uint8Array(0); + } + + data = unzlibSync(data); + + function pass(x0, y0, dx, dy) { + var abyte, c, col, i, left, length, p, pa, paeth, pb, pc, pixels, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m; + + var w = Math.ceil((_this.width - x0) / dx), + h = Math.ceil((_this.height - y0) / dy); + var isFull = _this.width == w && _this.height == h; + scanlineLength = pixelBytes * w; + pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h); + length = data.length; + row = 0; + c = 0; + + while (row < h && pos < length) { + switch (data[pos++]) { + case 0: + for (i = _i = 0; _i < scanlineLength; i = _i += 1) { + pixels[c++] = data[pos++]; + } + + break; + + case 1: + for (i = _j = 0; _j < scanlineLength; i = _j += 1) { + abyte = data[pos++]; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + pixels[c++] = (abyte + left) % 256; + } + + break; + + case 2: + for (i = _k = 0; _k < scanlineLength; i = _k += 1) { + abyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + pixels[c++] = (upper + abyte) % 256; + } + + break; + + case 3: + for (i = _l = 0; _l < scanlineLength; i = _l += 1) { + abyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256; + } + + break; + + case 4: + for (i = _m = 0; _m < scanlineLength; i = _m += 1) { + abyte = data[pos++]; + col = (i - i % pixelBytes) / pixelBytes; + left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; + + if (row === 0) { + upper = upperLeft = 0; + } else { + upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + i % pixelBytes]; + upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + i % pixelBytes]; + } + + p = left + upper - upperLeft; + pa = Math.abs(p - left); + pb = Math.abs(p - upper); + pc = Math.abs(p - upperLeft); + + if (pa <= pb && pa <= pc) { + paeth = left; + } else if (pb <= pc) { + paeth = upper; + } else { + paeth = upperLeft; + } + + pixels[c++] = (abyte + paeth) % 256; + } + + break; + + default: + throw new Error("Invalid filter algorithm: " + data[pos - 1]); + } + + if (!isFull) { + var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes; + var partPos = row * scanlineLength; + + for (i = 0; i < w; i += 1) { + for (var j = 0; j < pixelBytes; j += 1) { + fullPixels[fullPos++] = pixels[partPos++]; + } + + fullPos += (dx - 1) * pixelBytes; + } + } + + row++; + } + } + + if (_this.interlaceMethod == 1) { + /* + 1 6 4 6 2 6 4 6 + 7 7 7 7 7 7 7 7 + 5 6 5 6 5 6 5 6 + 7 7 7 7 7 7 7 7 + 3 6 4 6 3 6 4 6 + 7 7 7 7 7 7 7 7 + 5 6 5 6 5 6 5 6 + 7 7 7 7 7 7 7 7 + */ + pass(0, 0, 8, 8); // 1 + + /* NOTE these seem to follow the pattern: + * pass(x, 0, 2*x, 2*x); + * pass(0, x, x, 2*x); + * with x being 4, 2, 1. + */ + + pass(4, 0, 8, 8); // 2 + + pass(0, 4, 4, 8); // 3 + + pass(2, 0, 4, 4); // 4 + + pass(0, 2, 2, 4); // 5 + + pass(1, 0, 2, 2); // 6 + + pass(0, 1, 1, 2); // 7 + } else { + pass(0, 0, 1, 1); + } + + return fullPixels; + }; + + PNG.prototype.decodePalette = function () { + var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1; + + palette = this.palette; + transparency = this.transparency.indexed || []; + ret = new Uint8Array((transparency.length || 0) + palette.length); + pos = 0; + length = palette.length; + c = 0; + + for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) { + ret[pos++] = palette[i]; + ret[pos++] = palette[i + 1]; + ret[pos++] = palette[i + 2]; + ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255; + } + + return ret; + }; + + PNG.prototype.copyToImageData = function (imageData, pixels) { + var alpha, colors, data, i, input, j, k, length, palette, v, _ref; + + colors = this.colors; + palette = null; + alpha = this.hasAlphaChannel; + + if (this.palette.length) { + palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette(); + colors = 4; + alpha = true; + } + + data = imageData.data || imageData; + length = data.length; + input = palette || pixels; + i = j = 0; + + if (colors === 1) { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + v = input[k++]; + data[i++] = v; + data[i++] = v; + data[i++] = v; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } else { + while (i < length) { + k = palette ? pixels[i / 4] * 4 : j; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = input[k++]; + data[i++] = alpha ? input[k++] : 255; + j = k; + } + } + }; + + PNG.prototype.decode = function () { + var ret; + ret = new Uint8Array(this.width * this.height * 4); + this.copyToImageData(ret, this.decodePixels()); + return ret; + }; + + var hasBrowserCanvas = function hasBrowserCanvas() { + if (Object.prototype.toString.call(globalObject) === "[object Window]") { + try { + scratchCanvas = globalObject.document.createElement("canvas"); + scratchCtx = scratchCanvas.getContext("2d"); + } catch (e) { + return false; + } + + return true; + } + + return false; + }; + + hasBrowserCanvas(); + + makeImage = function makeImage(imageData) { + if (hasBrowserCanvas() === true) { + var img; + scratchCtx.width = imageData.width; + scratchCtx.height = imageData.height; + scratchCtx.clearRect(0, 0, imageData.width, imageData.height); + scratchCtx.putImageData(imageData, 0, 0); + img = new Image(); + img.src = scratchCanvas.toDataURL(); + return img; + } + + throw new Error("This method requires a Browser with Canvas-capability."); + }; + + PNG.prototype.decodeFrames = function (ctx) { + var frame, i, imageData, pixels, _i, _len, _ref, _results; + + if (!this.animation) { + return; + } + + _ref = this.animation.frames; + _results = []; + + for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { + frame = _ref[i]; + imageData = ctx.createImageData(frame.width, frame.height); + pixels = this.decodePixels(new Uint8Array(frame.data)); + this.copyToImageData(imageData, pixels); + frame.imageData = imageData; + + _results.push(frame.image = makeImage(imageData)); + } + + return _results; + }; + + PNG.prototype.renderFrame = function (ctx, number) { + var frame, frames, prev; + frames = this.animation.frames; + frame = frames[number]; + prev = frames[number - 1]; + + if (number === 0) { + ctx.clearRect(0, 0, this.width, this.height); + } + + if ((prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND) { + ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height); + } else if ((prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS) { + ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset); + } + + if (frame.blendOp === APNG_BLEND_OP_SOURCE) { + ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height); + } + + return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset); + }; + + PNG.prototype.animate = function (ctx) { + var _doFrame, + frameNumber, + frames, + numFrames, + numPlays, + _ref, + _this = this; + + frameNumber = 0; + _ref = this.animation, numFrames = _ref.numFrames, frames = _ref.frames, numPlays = _ref.numPlays; + return (_doFrame = function doFrame() { + var f, frame; + f = frameNumber++ % numFrames; + frame = frames[f]; + + _this.renderFrame(ctx, f); + + if (numFrames > 1 && frameNumber / numFrames < numPlays) { + return _this.animation._timeout = setTimeout(_doFrame, frame.delay); + } + })(); + }; + + PNG.prototype.stopAnimation = function () { + var _ref; + + return clearTimeout((_ref = this.animation) != null ? _ref._timeout : void 0); + }; + + PNG.prototype.render = function (canvas) { + var ctx, data; + + if (canvas._png) { + canvas._png.stopAnimation(); + } + + canvas._png = this; + canvas.width = this.width; + canvas.height = this.height; + ctx = canvas.getContext("2d"); + + if (this.animation) { + this.decodeFrames(ctx); + return this.animate(ctx); + } else { + data = ctx.createImageData(this.width, this.height); + this.copyToImageData(data, this.decodePixels()); + return ctx.putImageData(data, 0, 0); + } + }; + + return PNG; + }(); + + /** + * @license + * + * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb + * + * 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. + * ==================================================================== + */ + /** + * jsPDF PNG PlugIn + * @name png_support + * @module + */ + + (function (jsPDFAPI) { + /* + * @see http://www.w3.org/TR/PNG-Chunks.html + * + Color Allowed Interpretation + Type Bit Depths + 0 1,2,4,8,16 Each pixel is a grayscale sample. + 2 8,16 Each pixel is an R,G,B triple. + 3 1,2,4,8 Each pixel is a palette index; + a PLTE chunk must appear. + 4 8,16 Each pixel is a grayscale sample, + followed by an alpha sample. + 6 8,16 Each pixel is an R,G,B triple, + followed by an alpha sample. + */ + + /* + * PNG filter method types + * + * @see http://www.w3.org/TR/PNG-Filters.html + * @see http://www.libpng.org/pub/png/book/chapter09.html + * + * This is what the value 'Predictor' in decode params relates to + * + * 15 is "optimal prediction", which means the prediction algorithm can change from line to line. + * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte. + * + 0 None + 1 Sub + 2 Up + 3 Average + 4 Paeth + */ + + var canCompress = function canCompress(value) { + return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS(); + }; + + var hasCompressionJS = function hasCompressionJS() { + return typeof zlibSync === "function"; + }; + + var compressBytes = function compressBytes(bytes, lineLength, colorsPerPixel, compression) { + var level = 4; + var filter_method = filterUp; + + switch (compression) { + case jsPDFAPI.image_compression.FAST: + level = 1; + filter_method = filterSub; + break; + + case jsPDFAPI.image_compression.MEDIUM: + level = 6; + filter_method = filterAverage; + break; + + case jsPDFAPI.image_compression.SLOW: + level = 9; + filter_method = filterPaeth; + break; + } + + bytes = applyPngFilterMethod(bytes, lineLength, colorsPerPixel, filter_method); + var dat = zlibSync(bytes, { + level: level + }); + return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat); + }; + + var applyPngFilterMethod = function applyPngFilterMethod(bytes, lineLength, colorsPerPixel, filter_method) { + var lines = bytes.length / lineLength, + result = new Uint8Array(bytes.length + lines), + filter_methods = getFilterMethods(), + line, + prevLine, + offset; + + for (var i = 0; i < lines; i += 1) { + offset = i * lineLength; + line = bytes.subarray(offset, offset + lineLength); + + if (filter_method) { + result.set(filter_method(line, colorsPerPixel, prevLine), offset + i); + } else { + var len = filter_methods.length, + results = []; + + for (var j; j < len; j += 1) { + results[j] = filter_methods[j](line, colorsPerPixel, prevLine); + } + + var ind = getIndexOfSmallestSum(results.concat()); + result.set(results[ind], offset + i); + } + + prevLine = line; + } + + return result; + }; + + var filterNone = function filterNone(line) { + /*var result = new Uint8Array(line.length + 1); + result[0] = 0; + result.set(line, 1);*/ + var result = Array.apply([], line); + result.unshift(0); + return result; + }; + + var filterSub = function filterSub(line, colorsPerPixel) { + var result = [], + len = line.length, + left; + result[0] = 1; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + result[i + 1] = line[i] - left + 0x0100 & 0xff; + } + + return result; + }; + + var filterUp = function filterUp(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + up; + result[0] = 2; + + for (var i = 0; i < len; i += 1) { + up = prevLine && prevLine[i] || 0; + result[i + 1] = line[i] - up + 0x0100 & 0xff; + } + + return result; + }; + + var filterAverage = function filterAverage(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + left, + up; + result[0] = 3; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + up = prevLine && prevLine[i] || 0; + result[i + 1] = line[i] + 0x0100 - (left + up >>> 1) & 0xff; + } + + return result; + }; + + var filterPaeth = function filterPaeth(line, colorsPerPixel, prevLine) { + var result = [], + len = line.length, + left, + up, + upLeft, + paeth; + result[0] = 4; + + for (var i = 0; i < len; i += 1) { + left = line[i - colorsPerPixel] || 0; + up = prevLine && prevLine[i] || 0; + upLeft = prevLine && prevLine[i - colorsPerPixel] || 0; + paeth = paethPredictor(left, up, upLeft); + result[i + 1] = line[i] - paeth + 0x0100 & 0xff; + } + + return result; + }; + + var paethPredictor = function paethPredictor(left, up, upLeft) { + if (left === up && up === upLeft) { + return left; + } + + var pLeft = Math.abs(up - upLeft), + pUp = Math.abs(left - upLeft), + pUpLeft = Math.abs(left + up - upLeft - upLeft); + return pLeft <= pUp && pLeft <= pUpLeft ? left : pUp <= pUpLeft ? up : upLeft; + }; + + var getFilterMethods = function getFilterMethods() { + return [filterNone, filterSub, filterUp, filterAverage, filterPaeth]; + }; + + var getIndexOfSmallestSum = function getIndexOfSmallestSum(arrays) { + var sum = arrays.map(function (value) { + return value.reduce(function (pv, cv) { + return pv + Math.abs(cv); + }, 0); + }); + return sum.indexOf(Math.min.apply(null, sum)); + }; + + var getPredictorFromCompression = function getPredictorFromCompression(compression) { + var predictor; + + switch (compression) { + case jsPDFAPI.image_compression.FAST: + predictor = 11; + break; + + case jsPDFAPI.image_compression.MEDIUM: + predictor = 13; + break; + + case jsPDFAPI.image_compression.SLOW: + predictor = 14; + break; + + default: + predictor = 12; + break; + } + + return predictor; + }; + /** + * @name processPNG + * @function + * @ignore + */ + + + jsPDFAPI.processPNG = function (imageData, index, alias, compression) { + + var colorSpace, + filter = this.decode.FLATE_DECODE, + bitsPerComponent, + image, + decodeParameters = "", + trns, + colors, + pal, + smask, + pixels, + len, + alphaData, + imgData, + hasColors, + pixel, + i, + n; + if (this.__addimage__.isArrayBuffer(imageData)) imageData = new Uint8Array(imageData); + + if (this.__addimage__.isArrayBufferView(imageData)) { + image = new PNG(imageData); + imageData = image.imgData; + bitsPerComponent = image.bits; + colorSpace = image.colorSpace; + colors = image.colors; + /* + * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample. + * + * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample. + * + * Extract alpha to create two separate images, using the alpha as a sMask + */ + + if ([4, 6].indexOf(image.colorType) !== -1) { + /* + * processes 8 bit RGBA and grayscale + alpha images + */ + if (image.bits === 8) { + pixels = image.pixelBitlength == 32 ? new Uint32Array(image.decodePixels().buffer) : image.pixelBitlength == 16 ? new Uint16Array(image.decodePixels().buffer) : new Uint8Array(image.decodePixels().buffer); + len = pixels.length; + imgData = new Uint8Array(len * image.colors); + alphaData = new Uint8Array(len); + var pDiff = image.pixelBitlength - image.bits; + i = 0; + n = 0; + var pbl; + + for (; i < len; i++) { + pixel = pixels[i]; + pbl = 0; + + while (pbl < pDiff) { + imgData[n++] = pixel >>> pbl & 0xff; + pbl = pbl + image.bits; + } + + alphaData[i] = pixel >>> pbl & 0xff; + } + } + /* + * processes 16 bit RGBA and grayscale + alpha images + */ + + + if (image.bits === 16) { + pixels = new Uint32Array(image.decodePixels().buffer); + len = pixels.length; + imgData = new Uint8Array(len * (32 / image.pixelBitlength) * image.colors); + alphaData = new Uint8Array(len * (32 / image.pixelBitlength)); + hasColors = image.colors > 1; + i = 0; + n = 0; + var a = 0; + + while (i < len) { + pixel = pixels[i++]; + imgData[n++] = pixel >>> 0 & 0xff; + + if (hasColors) { + imgData[n++] = pixel >>> 16 & 0xff; + pixel = pixels[i++]; + imgData[n++] = pixel >>> 0 & 0xff; + } + + alphaData[a++] = pixel >>> 16 & 0xff; + } + + bitsPerComponent = 8; + } + + if (canCompress(compression)) { + imageData = compressBytes(imgData, image.width * image.colors, image.colors, compression); + smask = compressBytes(alphaData, image.width, 1, compression); + } else { + imageData = imgData; + smask = alphaData; + filter = undefined; + } + } + /* + * Indexed png. Each pixel is a palette index. + */ + + + if (image.colorType === 3) { + colorSpace = this.color_spaces.INDEXED; + pal = image.palette; + + if (image.transparency.indexed) { + var trans = image.transparency.indexed; + var total = 0; + i = 0; + len = trans.length; + + for (; i < len; ++i) { + total += trans[i]; + } + + total = total / 255; + /* + * a single color is specified as 100% transparent (0), + * so we set trns to use a /Mask with that index + */ + + if (total === len - 1 && trans.indexOf(0) !== -1) { + trns = [trans.indexOf(0)]; + /* + * there's more than one colour within the palette that specifies + * a transparency value less than 255, so we unroll the pixels to create an image sMask + */ + } else if (total !== len) { + pixels = image.decodePixels(); + alphaData = new Uint8Array(pixels.length); + i = 0; + len = pixels.length; + + for (; i < len; i++) { + alphaData[i] = trans[pixels[i]]; + } + + smask = compressBytes(alphaData, image.width, 1); + } + } + } + + var predictor = getPredictorFromCompression(compression); + + if (filter === this.decode.FLATE_DECODE) { + decodeParameters = "/Predictor " + predictor + " "; + } + + decodeParameters += "/Colors " + colors + " /BitsPerComponent " + bitsPerComponent + " /Columns " + image.width; + + if (this.__addimage__.isArrayBuffer(imageData) || this.__addimage__.isArrayBufferView(imageData)) { + imageData = this.__addimage__.arrayBufferToBinaryString(imageData); + } + + if (smask && this.__addimage__.isArrayBuffer(smask) || this.__addimage__.isArrayBufferView(smask)) { + smask = this.__addimage__.arrayBufferToBinaryString(smask); + } + + return { + alias: alias, + data: imageData, + index: index, + filter: filter, + decodeParameters: decodeParameters, + transparency: trns, + palette: pal, + sMask: smask, + predictor: predictor, + width: image.width, + height: image.height, + bitsPerComponent: bitsPerComponent, + colorSpace: colorSpace + }; + } + }; + })(jsPDF.API); + + /** + * @license + * (c) Dean McNamee , 2013. + * + * https://github.com/deanm/omggif + * + * 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. + * + * omggif is a JavaScript implementation of a GIF 89a encoder and decoder, + * including animation and compression. It does not rely on any specific + * underlying system, so should run in the browser, Node, or Plask. + */ + + function GifReader(buf) { + var p = 0; // - Header (GIF87a or GIF89a). + + if (buf[p++] !== 0x47 || buf[p++] !== 0x49 || buf[p++] !== 0x46 || buf[p++] !== 0x38 || (buf[p++] + 1 & 0xfd) !== 0x38 || buf[p++] !== 0x61) { + throw new Error("Invalid GIF 87a/89a header."); + } // - Logical Screen Descriptor. + + + var width = buf[p++] | buf[p++] << 8; + var height = buf[p++] | buf[p++] << 8; + var pf0 = buf[p++]; // . + + var global_palette_flag = pf0 >> 7; + var num_global_colors_pow2 = pf0 & 0x7; + var num_global_colors = 1 << num_global_colors_pow2 + 1; + var background = buf[p++]; + buf[p++]; // Pixel aspect ratio (unused?). + + var global_palette_offset = null; + var global_palette_size = null; + + if (global_palette_flag) { + global_palette_offset = p; + global_palette_size = num_global_colors; + p += num_global_colors * 3; // Seek past palette. + } + + var no_eof = true; + var frames = []; + var delay = 0; + var transparent_index = null; + var disposal = 0; // 0 - No disposal specified. + + var loop_count = null; + this.width = width; + this.height = height; + + while (no_eof && p < buf.length) { + switch (buf[p++]) { + case 0x21: + // Graphics Control Extension Block + switch (buf[p++]) { + case 0xff: + // Application specific block + // Try if it's a Netscape block (with animation loop counter). + if (buf[p] !== 0x0b || // 21 FF already read, check block size. + // NETSCAPE2.0 + buf[p + 1] == 0x4e && buf[p + 2] == 0x45 && buf[p + 3] == 0x54 && buf[p + 4] == 0x53 && buf[p + 5] == 0x43 && buf[p + 6] == 0x41 && buf[p + 7] == 0x50 && buf[p + 8] == 0x45 && buf[p + 9] == 0x32 && buf[p + 10] == 0x2e && buf[p + 11] == 0x30 && // Sub-block + buf[p + 12] == 0x03 && buf[p + 13] == 0x01 && buf[p + 16] == 0) { + p += 14; + loop_count = buf[p++] | buf[p++] << 8; + p++; // Skip terminator. + } else { + // We don't know what it is, just try to get past it. + p += 12; + + while (true) { + // Seek through subblocks. + var block_size = buf[p++]; // Bad block size (ex: undefined from an out of bounds read). + + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + + p += block_size; + } + } + + break; + + case 0xf9: + // Graphics Control Extension + if (buf[p++] !== 0x4 || buf[p + 4] !== 0) throw new Error("Invalid graphics extension block."); + var pf1 = buf[p++]; + delay = buf[p++] | buf[p++] << 8; + transparent_index = buf[p++]; + if ((pf1 & 1) === 0) transparent_index = null; + disposal = pf1 >> 2 & 0x7; + p++; // Skip terminator. + + break; + + case 0xfe: + // Comment Extension. + while (true) { + // Seek through subblocks. + var block_size = buf[p++]; // Bad block size (ex: undefined from an out of bounds read). + + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + // console.log(buf.slice(p, p+block_size).toString('ascii')); + + p += block_size; + } + + break; + + default: + throw new Error("Unknown graphic control label: 0x" + buf[p - 1].toString(16)); + } + + break; + + case 0x2c: + // Image Descriptor. + var x = buf[p++] | buf[p++] << 8; + var y = buf[p++] | buf[p++] << 8; + var w = buf[p++] | buf[p++] << 8; + var h = buf[p++] | buf[p++] << 8; + var pf2 = buf[p++]; + var local_palette_flag = pf2 >> 7; + var interlace_flag = pf2 >> 6 & 1; + var num_local_colors_pow2 = pf2 & 0x7; + var num_local_colors = 1 << num_local_colors_pow2 + 1; + var palette_offset = global_palette_offset; + var palette_size = global_palette_size; + var has_local_palette = false; + + if (local_palette_flag) { + var has_local_palette = true; + palette_offset = p; // Override with local palette. + + palette_size = num_local_colors; + p += num_local_colors * 3; // Seek past palette. + } + + var data_offset = p; + p++; // codesize + + while (true) { + var block_size = buf[p++]; // Bad block size (ex: undefined from an out of bounds read). + + if (!(block_size >= 0)) throw Error("Invalid block size"); + if (block_size === 0) break; // 0 size is terminator + + p += block_size; + } + + frames.push({ + x: x, + y: y, + width: w, + height: h, + has_local_palette: has_local_palette, + palette_offset: palette_offset, + palette_size: palette_size, + data_offset: data_offset, + data_length: p - data_offset, + transparent_index: transparent_index, + interlaced: !!interlace_flag, + delay: delay, + disposal: disposal + }); + break; + + case 0x3b: + // Trailer Marker (end of file). + no_eof = false; + break; + + default: + throw new Error("Unknown gif block: 0x" + buf[p - 1].toString(16)); + } + } + + this.numFrames = function () { + return frames.length; + }; + + this.loopCount = function () { + return loop_count; + }; + + this.frameInfo = function (frame_num) { + if (frame_num < 0 || frame_num >= frames.length) throw new Error("Frame index out of range."); + return frames[frame_num]; + }; + + this.decodeAndBlitFrameBGRA = function (frame_num, pixels) { + var frame = this.frameInfo(frame_num); + var num_pixels = frame.width * frame.height; + var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices. + + GifReaderLZWOutputIndexStream(buf, frame.data_offset, index_stream, num_pixels); + var palette_offset = frame.palette_offset; // NOTE(deanm): It seems to be much faster to compare index to 256 than + // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in + // the profile, not sure if it's related to using a Uint8Array. + + var trans = frame.transparent_index; + if (trans === null) trans = 256; // We are possibly just blitting to a portion of the entire frame. + // That is a subrect within the framerect, so the additional pixels + // must be skipped over after we finished a scanline. + + var framewidth = frame.width; + var framestride = width - framewidth; + var xleft = framewidth; // Number of subrect pixels left in scanline. + // Output indices of the top left and bottom right corners of the subrect. + + var opbeg = (frame.y * width + frame.x) * 4; + var opend = ((frame.y + frame.height) * width + frame.x) * 4; + var op = opbeg; + var scanstride = framestride * 4; // Use scanstride to skip past the rows when interlacing. This is skipping + // 7 rows for the first two passes, then 3 then 1. + + if (frame.interlaced === true) { + scanstride += width * 4 * 7; // Pass 1. + } + + var interlaceskip = 8; // Tracking the row interval in the current pass. + + for (var i = 0, il = index_stream.length; i < il; ++i) { + var index = index_stream[i]; + + if (xleft === 0) { + // Beginning of new scan line + op += scanstride; + xleft = framewidth; + + if (op >= opend) { + // Catch the wrap to switch passes when interlacing. + scanstride = framestride * 4 + width * 4 * (interlaceskip - 1); // interlaceskip / 2 * 4 is interlaceskip << 1. + + op = opbeg + (framewidth + framestride) * (interlaceskip << 1); + interlaceskip >>= 1; + } + } + + if (index === trans) { + op += 4; + } else { + var r = buf[palette_offset + index * 3]; + var g = buf[palette_offset + index * 3 + 1]; + var b = buf[palette_offset + index * 3 + 2]; + pixels[op++] = b; + pixels[op++] = g; + pixels[op++] = r; + pixels[op++] = 255; + } + + --xleft; + } + }; // I will go to copy and paste hell one day... + + + this.decodeAndBlitFrameRGBA = function (frame_num, pixels) { + var frame = this.frameInfo(frame_num); + var num_pixels = frame.width * frame.height; + var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices. + + GifReaderLZWOutputIndexStream(buf, frame.data_offset, index_stream, num_pixels); + var palette_offset = frame.palette_offset; // NOTE(deanm): It seems to be much faster to compare index to 256 than + // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in + // the profile, not sure if it's related to using a Uint8Array. + + var trans = frame.transparent_index; + if (trans === null) trans = 256; // We are possibly just blitting to a portion of the entire frame. + // That is a subrect within the framerect, so the additional pixels + // must be skipped over after we finished a scanline. + + var framewidth = frame.width; + var framestride = width - framewidth; + var xleft = framewidth; // Number of subrect pixels left in scanline. + // Output indices of the top left and bottom right corners of the subrect. + + var opbeg = (frame.y * width + frame.x) * 4; + var opend = ((frame.y + frame.height) * width + frame.x) * 4; + var op = opbeg; + var scanstride = framestride * 4; // Use scanstride to skip past the rows when interlacing. This is skipping + // 7 rows for the first two passes, then 3 then 1. + + if (frame.interlaced === true) { + scanstride += width * 4 * 7; // Pass 1. + } + + var interlaceskip = 8; // Tracking the row interval in the current pass. + + for (var i = 0, il = index_stream.length; i < il; ++i) { + var index = index_stream[i]; + + if (xleft === 0) { + // Beginning of new scan line + op += scanstride; + xleft = framewidth; + + if (op >= opend) { + // Catch the wrap to switch passes when interlacing. + scanstride = framestride * 4 + width * 4 * (interlaceskip - 1); // interlaceskip / 2 * 4 is interlaceskip << 1. + + op = opbeg + (framewidth + framestride) * (interlaceskip << 1); + interlaceskip >>= 1; + } + } + + if (index === trans) { + op += 4; + } else { + var r = buf[palette_offset + index * 3]; + var g = buf[palette_offset + index * 3 + 1]; + var b = buf[palette_offset + index * 3 + 2]; + pixels[op++] = r; + pixels[op++] = g; + pixels[op++] = b; + pixels[op++] = 255; + } + + --xleft; + } + }; + } + + function GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) { + var min_code_size = code_stream[p++]; + var clear_code = 1 << min_code_size; + var eoi_code = clear_code + 1; + var next_code = eoi_code + 1; + var cur_code_size = min_code_size + 1; // Number of bits per code. + // NOTE: This shares the same name as the encoder, but has a different + // meaning here. Here this masks each code coming from the code stream. + + var code_mask = (1 << cur_code_size) - 1; + var cur_shift = 0; + var cur = 0; + var op = 0; // Output pointer. + + var subblock_size = code_stream[p++]; // TODO(deanm): Would using a TypedArray be any faster? At least it would + // solve the fast mode / backing store uncertainty. + // var code_table = Array(4096); + + var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits. + + var prev_code = null; // Track code-1. + + while (true) { + // Read up to two bytes, making sure we always 12-bits for max sized code. + while (cur_shift < 16) { + if (subblock_size === 0) break; // No more data to be read. + + cur |= code_stream[p++] << cur_shift; + cur_shift += 8; + + if (subblock_size === 1) { + // Never let it get to 0 to hold logic above. + subblock_size = code_stream[p++]; // Next subblock. + } else { + --subblock_size; + } + } // TODO(deanm): We should never really get here, we should have received + // and EOI. + + + if (cur_shift < cur_code_size) break; + var code = cur & code_mask; + cur >>= cur_code_size; + cur_shift -= cur_code_size; // TODO(deanm): Maybe should check that the first code was a clear code, + // at least this is what you're supposed to do. But actually our encoder + // now doesn't emit a clear code first anyway. + + if (code === clear_code) { + // We don't actually have to clear the table. This could be a good idea + // for greater error checking, but we don't really do any anyway. We + // will just track it with next_code and overwrite old entries. + next_code = eoi_code + 1; + cur_code_size = min_code_size + 1; + code_mask = (1 << cur_code_size) - 1; // Don't update prev_code ? + + prev_code = null; + continue; + } else if (code === eoi_code) { + break; + } // We have a similar situation as the decoder, where we want to store + // variable length entries (code table entries), but we want to do in a + // faster manner than an array of arrays. The code below stores sort of a + // linked list within the code table, and then "chases" through it to + // construct the dictionary entries. When a new entry is created, just the + // last byte is stored, and the rest (prefix) of the entry is only + // referenced by its table entry. Then the code chases through the + // prefixes until it reaches a single byte code. We have to chase twice, + // first to compute the length, and then to actually copy the data to the + // output (backwards, since we know the length). The alternative would be + // storing something in an intermediate stack, but that doesn't make any + // more sense. I implemented an approach where it also stored the length + // in the code table, although it's a bit tricky because you run out of + // bits (12 + 12 + 8), but I didn't measure much improvements (the table + // entries are generally not the long). Even when I created benchmarks for + // very long table entries the complexity did not seem worth it. + // The code table stores the prefix entry in 12 bits and then the suffix + // byte in 8 bits, so each entry is 20 bits. + + + var chase_code = code < next_code ? code : prev_code; // Chase what we will output, either {CODE} or {CODE-1}. + + var chase_length = 0; + var chase = chase_code; + + while (chase > clear_code) { + chase = code_table[chase] >> 8; + ++chase_length; + } + + var k = chase; + var op_end = op + chase_length + (chase_code !== code ? 1 : 0); + + if (op_end > output_length) { + console.log("Warning, gif stream longer than expected."); + return; + } // Already have the first byte from the chase, might as well write it fast. + + + output[op++] = k; + op += chase_length; + var b = op; // Track pointer, writing backwards. + + if (chase_code !== code) // The case of emitting {CODE-1} + k. + output[op++] = k; + chase = chase_code; + + while (chase_length--) { + chase = code_table[chase]; + output[--b] = chase & 0xff; // Write backwards. + + chase >>= 8; // Pull down to the prefix code. + } + + if (prev_code !== null && next_code < 4096) { + code_table[next_code++] = prev_code << 8 | k; // TODO(deanm): Figure out this clearing vs code growth logic better. I + // have an feeling that it should just happen somewhere else, for now it + // is awkward between when we grow past the max and then hit a clear code. + // For now just check if we hit the max 12-bits (then a clear code should + // follow, also of course encoded in 12-bits). + + if (next_code >= code_mask + 1 && cur_code_size < 12) { + ++cur_code_size; + code_mask = code_mask << 1 | 1; + } + } + + prev_code = code; + } + + if (op !== output_length) { + console.log("Warning, gif stream shorter than expected."); + } + + return output; + } + + /** + * @license + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * 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. + + * Neither the name of Adobe Systems Incorporated 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + + /* + JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 + + Basic GUI blocking jpeg encoder + */ + function JPEGEncoder(quality) { + var ffloor = Math.floor; + var YTable = new Array(64); + var UVTable = new Array(64); + var fdtbl_Y = new Array(64); + var fdtbl_UV = new Array(64); + var YDC_HT; + var UVDC_HT; + var YAC_HT; + var UVAC_HT; + var bitcode = new Array(65535); + var category = new Array(65535); + var outputfDCTQuant = new Array(64); + var DU = new Array(64); + var byteout = []; + var bytenew = 0; + var bytepos = 7; + var YDU = new Array(64); + var UDU = new Array(64); + var VDU = new Array(64); + var clt = new Array(256); + var RGB_YUV_TABLE = new Array(2048); + var currentQuality; + var ZigZag = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; + var std_dc_luminance_nrcodes = [0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]; + var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + var std_ac_luminance_nrcodes = [0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d]; + var std_ac_luminance_values = [0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]; + var std_dc_chrominance_nrcodes = [0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; + var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; + var std_ac_chrominance_nrcodes = [0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77]; + var std_ac_chrominance_values = [0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa]; + + function initQuantTables(sf) { + var YQT = [16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99]; + + for (var i = 0; i < 64; i++) { + var t = ffloor((YQT[i] * sf + 50) / 100); + t = Math.min(Math.max(t, 1), 255); + YTable[ZigZag[i]] = t; + } + + var UVQT = [17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99]; + + for (var j = 0; j < 64; j++) { + var u = ffloor((UVQT[j] * sf + 50) / 100); + u = Math.min(Math.max(u, 1), 255); + UVTable[ZigZag[j]] = u; + } + + var aasf = [1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.5411961, 0.275899379]; + var k = 0; + + for (var row = 0; row < 8; row++) { + for (var col = 0; col < 8; col++) { + fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0); + fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0); + k++; + } + } + } + + function computeHuffmanTbl(nrcodes, std_table) { + var codevalue = 0; + var pos_in_table = 0; + var HT = new Array(); + + for (var k = 1; k <= 16; k++) { + for (var j = 1; j <= nrcodes[k]; j++) { + HT[std_table[pos_in_table]] = []; + HT[std_table[pos_in_table]][0] = codevalue; + HT[std_table[pos_in_table]][1] = k; + pos_in_table++; + codevalue++; + } + + codevalue *= 2; + } + + return HT; + } + + function initHuffmanTbl() { + YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes, std_dc_luminance_values); + UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes, std_dc_chrominance_values); + YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes, std_ac_luminance_values); + UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes, std_ac_chrominance_values); + } + + function initCategoryNumber() { + var nrlower = 1; + var nrupper = 2; + + for (var cat = 1; cat <= 15; cat++) { + //Positive numbers + for (var nr = nrlower; nr < nrupper; nr++) { + category[32767 + nr] = cat; + bitcode[32767 + nr] = []; + bitcode[32767 + nr][1] = cat; + bitcode[32767 + nr][0] = nr; + } //Negative numbers + + + for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) { + category[32767 + nrneg] = cat; + bitcode[32767 + nrneg] = []; + bitcode[32767 + nrneg][1] = cat; + bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg; + } + + nrlower <<= 1; + nrupper <<= 1; + } + } + + function initRGBYUVTable() { + for (var i = 0; i < 256; i++) { + RGB_YUV_TABLE[i] = 19595 * i; + RGB_YUV_TABLE[i + 256 >> 0] = 38470 * i; + RGB_YUV_TABLE[i + 512 >> 0] = 7471 * i + 0x8000; + RGB_YUV_TABLE[i + 768 >> 0] = -11059 * i; + RGB_YUV_TABLE[i + 1024 >> 0] = -21709 * i; + RGB_YUV_TABLE[i + 1280 >> 0] = 32768 * i + 0x807fff; + RGB_YUV_TABLE[i + 1536 >> 0] = -27439 * i; + RGB_YUV_TABLE[i + 1792 >> 0] = -5329 * i; + } + } // IO functions + + + function writeBits(bs) { + var value = bs[0]; + var posval = bs[1] - 1; + + while (posval >= 0) { + if (value & 1 << posval) { + bytenew |= 1 << bytepos; + } + + posval--; + bytepos--; + + if (bytepos < 0) { + if (bytenew == 0xff) { + writeByte(0xff); + writeByte(0); + } else { + writeByte(bytenew); + } + + bytepos = 7; + bytenew = 0; + } + } + } + + function writeByte(value) { + //byteout.push(clt[value]); // write char directly instead of converting later + byteout.push(value); + } + + function writeWord(value) { + writeByte(value >> 8 & 0xff); + writeByte(value & 0xff); + } // DCT & quantization core + + + function fDCTQuant(data, fdtbl) { + var d0, d1, d2, d3, d4, d5, d6, d7; + /* Pass 1: process rows. */ + + var dataOff = 0; + var i; + var I8 = 8; + var I64 = 64; + + for (i = 0; i < I8; ++i) { + d0 = data[dataOff]; + d1 = data[dataOff + 1]; + d2 = data[dataOff + 2]; + d3 = data[dataOff + 3]; + d4 = data[dataOff + 4]; + d5 = data[dataOff + 5]; + d6 = data[dataOff + 6]; + d7 = data[dataOff + 7]; + var tmp0 = d0 + d7; + var tmp7 = d0 - d7; + var tmp1 = d1 + d6; + var tmp6 = d1 - d6; + var tmp2 = d2 + d5; + var tmp5 = d2 - d5; + var tmp3 = d3 + d4; + var tmp4 = d3 - d4; + /* Even part */ + + var tmp10 = tmp0 + tmp3; + /* phase 2 */ + + var tmp13 = tmp0 - tmp3; + var tmp11 = tmp1 + tmp2; + var tmp12 = tmp1 - tmp2; + data[dataOff] = tmp10 + tmp11; + /* phase 3 */ + + data[dataOff + 4] = tmp10 - tmp11; + var z1 = (tmp12 + tmp13) * 0.707106781; + /* c4 */ + + data[dataOff + 2] = tmp13 + z1; + /* phase 5 */ + + data[dataOff + 6] = tmp13 - z1; + /* Odd part */ + + tmp10 = tmp4 + tmp5; + /* phase 2 */ + + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + + var z5 = (tmp10 - tmp12) * 0.382683433; + /* c6 */ + + var z2 = 0.5411961 * tmp10 + z5; + /* c2-c6 */ + + var z4 = 1.306562965 * tmp12 + z5; + /* c2+c6 */ + + var z3 = tmp11 * 0.707106781; + /* c4 */ + + var z11 = tmp7 + z3; + /* phase 5 */ + + var z13 = tmp7 - z3; + data[dataOff + 5] = z13 + z2; + /* phase 6 */ + + data[dataOff + 3] = z13 - z2; + data[dataOff + 1] = z11 + z4; + data[dataOff + 7] = z11 - z4; + dataOff += 8; + /* advance pointer to next row */ + } + /* Pass 2: process columns. */ + + + dataOff = 0; + + for (i = 0; i < I8; ++i) { + d0 = data[dataOff]; + d1 = data[dataOff + 8]; + d2 = data[dataOff + 16]; + d3 = data[dataOff + 24]; + d4 = data[dataOff + 32]; + d5 = data[dataOff + 40]; + d6 = data[dataOff + 48]; + d7 = data[dataOff + 56]; + var tmp0p2 = d0 + d7; + var tmp7p2 = d0 - d7; + var tmp1p2 = d1 + d6; + var tmp6p2 = d1 - d6; + var tmp2p2 = d2 + d5; + var tmp5p2 = d2 - d5; + var tmp3p2 = d3 + d4; + var tmp4p2 = d3 - d4; + /* Even part */ + + var tmp10p2 = tmp0p2 + tmp3p2; + /* phase 2 */ + + var tmp13p2 = tmp0p2 - tmp3p2; + var tmp11p2 = tmp1p2 + tmp2p2; + var tmp12p2 = tmp1p2 - tmp2p2; + data[dataOff] = tmp10p2 + tmp11p2; + /* phase 3 */ + + data[dataOff + 32] = tmp10p2 - tmp11p2; + var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; + /* c4 */ + + data[dataOff + 16] = tmp13p2 + z1p2; + /* phase 5 */ + + data[dataOff + 48] = tmp13p2 - z1p2; + /* Odd part */ + + tmp10p2 = tmp4p2 + tmp5p2; + /* phase 2 */ + + tmp11p2 = tmp5p2 + tmp6p2; + tmp12p2 = tmp6p2 + tmp7p2; + /* The rotator is modified from fig 4-8 to avoid extra negations. */ + + var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; + /* c6 */ + + var z2p2 = 0.5411961 * tmp10p2 + z5p2; + /* c2-c6 */ + + var z4p2 = 1.306562965 * tmp12p2 + z5p2; + /* c2+c6 */ + + var z3p2 = tmp11p2 * 0.707106781; + /* c4 */ + + var z11p2 = tmp7p2 + z3p2; + /* phase 5 */ + + var z13p2 = tmp7p2 - z3p2; + data[dataOff + 40] = z13p2 + z2p2; + /* phase 6 */ + + data[dataOff + 24] = z13p2 - z2p2; + data[dataOff + 8] = z11p2 + z4p2; + data[dataOff + 56] = z11p2 - z4p2; + dataOff++; + /* advance pointer to next column */ + } // Quantize/descale the coefficients + + + var fDCTQuant; + + for (i = 0; i < I64; ++i) { + // Apply the quantization and scaling factor & Round to nearest integer + fDCTQuant = data[i] * fdtbl[i]; + outputfDCTQuant[i] = fDCTQuant > 0.0 ? fDCTQuant + 0.5 | 0 : fDCTQuant - 0.5 | 0; //outputfDCTQuant[i] = fround(fDCTQuant); + } + + return outputfDCTQuant; + } + + function writeAPP0() { + writeWord(0xffe0); // marker + + writeWord(16); // length + + writeByte(0x4a); // J + + writeByte(0x46); // F + + writeByte(0x49); // I + + writeByte(0x46); // F + + writeByte(0); // = "JFIF",'\0' + + writeByte(1); // versionhi + + writeByte(1); // versionlo + + writeByte(0); // xyunits + + writeWord(1); // xdensity + + writeWord(1); // ydensity + + writeByte(0); // thumbnwidth + + writeByte(0); // thumbnheight + } + + function writeSOF0(width, height) { + writeWord(0xffc0); // marker + + writeWord(17); // length, truecolor YUV JPG + + writeByte(8); // precision + + writeWord(height); + writeWord(width); + writeByte(3); // nrofcomponents + + writeByte(1); // IdY + + writeByte(0x11); // HVY + + writeByte(0); // QTY + + writeByte(2); // IdU + + writeByte(0x11); // HVU + + writeByte(1); // QTU + + writeByte(3); // IdV + + writeByte(0x11); // HVV + + writeByte(1); // QTV + } + + function writeDQT() { + writeWord(0xffdb); // marker + + writeWord(132); // length + + writeByte(0); + + for (var i = 0; i < 64; i++) { + writeByte(YTable[i]); + } + + writeByte(1); + + for (var j = 0; j < 64; j++) { + writeByte(UVTable[j]); + } + } + + function writeDHT() { + writeWord(0xffc4); // marker + + writeWord(0x01a2); // length + + writeByte(0); // HTYDCinfo + + for (var i = 0; i < 16; i++) { + writeByte(std_dc_luminance_nrcodes[i + 1]); + } + + for (var j = 0; j <= 11; j++) { + writeByte(std_dc_luminance_values[j]); + } + + writeByte(0x10); // HTYACinfo + + for (var k = 0; k < 16; k++) { + writeByte(std_ac_luminance_nrcodes[k + 1]); + } + + for (var l = 0; l <= 161; l++) { + writeByte(std_ac_luminance_values[l]); + } + + writeByte(1); // HTUDCinfo + + for (var m = 0; m < 16; m++) { + writeByte(std_dc_chrominance_nrcodes[m + 1]); + } + + for (var n = 0; n <= 11; n++) { + writeByte(std_dc_chrominance_values[n]); + } + + writeByte(0x11); // HTUACinfo + + for (var o = 0; o < 16; o++) { + writeByte(std_ac_chrominance_nrcodes[o + 1]); + } + + for (var p = 0; p <= 161; p++) { + writeByte(std_ac_chrominance_values[p]); + } + } + + function writeSOS() { + writeWord(0xffda); // marker + + writeWord(12); // length + + writeByte(3); // nrofcomponents + + writeByte(1); // IdY + + writeByte(0); // HTY + + writeByte(2); // IdU + + writeByte(0x11); // HTU + + writeByte(3); // IdV + + writeByte(0x11); // HTV + + writeByte(0); // Ss + + writeByte(0x3f); // Se + + writeByte(0); // Bf + } + + function processDU(CDU, fdtbl, DC, HTDC, HTAC) { + var EOB = HTAC[0x00]; + var M16zeroes = HTAC[0xf0]; + var pos; + var I16 = 16; + var I63 = 63; + var I64 = 64; + var DU_DCT = fDCTQuant(CDU, fdtbl); //ZigZag reorder + + for (var j = 0; j < I64; ++j) { + DU[ZigZag[j]] = DU_DCT[j]; + } + + var Diff = DU[0] - DC; + DC = DU[0]; //Encode DC + + if (Diff == 0) { + writeBits(HTDC[0]); // Diff might be 0 + } else { + pos = 32767 + Diff; + writeBits(HTDC[category[pos]]); + writeBits(bitcode[pos]); + } //Encode ACs + + + var end0pos = 63; // was const... which is crazy + + while (end0pos > 0 && DU[end0pos] == 0) { + end0pos--; + } //end0pos = first element in reverse order !=0 + + + if (end0pos == 0) { + writeBits(EOB); + return DC; + } + + var i = 1; + var lng; + + while (i <= end0pos) { + var startpos = i; + + while (DU[i] == 0 && i <= end0pos) { + ++i; + } + + var nrzeroes = i - startpos; + + if (nrzeroes >= I16) { + lng = nrzeroes >> 4; + + for (var nrmarker = 1; nrmarker <= lng; ++nrmarker) { + writeBits(M16zeroes); + } + + nrzeroes = nrzeroes & 0xf; + } + + pos = 32767 + DU[i]; + writeBits(HTAC[(nrzeroes << 4) + category[pos]]); + writeBits(bitcode[pos]); + i++; + } + + if (end0pos != I63) { + writeBits(EOB); + } + + return DC; + } + + function initCharLookupTable() { + var sfcc = String.fromCharCode; + + for (var i = 0; i < 256; i++) { + ///// ACHTUNG // 255 + clt[i] = sfcc(i); + } + } + + this.encode = function (image, quality // image data object + ) { + if (quality) setQuality(quality); // Initialize bit writer + + byteout = new Array(); + bytenew = 0; + bytepos = 7; // Add JPEG headers + + writeWord(0xffd8); // SOI + + writeAPP0(); + writeDQT(); + writeSOF0(image.width, image.height); + writeDHT(); + writeSOS(); // Encode 8x8 macroblocks + + var DCY = 0; + var DCU = 0; + var DCV = 0; + bytenew = 0; + bytepos = 7; + this.encode.displayName = "_encode_"; + var imageData = image.data; + var width = image.width; + var height = image.height; + var quadWidth = width * 4; + var x, + y = 0; + var r, g, b; + var start, p, col, row, pos; + + while (y < height) { + x = 0; + + while (x < quadWidth) { + start = quadWidth * y + x; + col = -1; + row = 0; + + for (pos = 0; pos < 64; pos++) { + row = pos >> 3; // /8 + + col = (pos & 7) * 4; // %8 + + p = start + row * quadWidth + col; + + if (y + row >= height) { + // padding bottom + p -= quadWidth * (y + 1 + row - height); + } + + if (x + col >= quadWidth) { + // padding right + p -= x + col - quadWidth + 4; + } + + r = imageData[p++]; + g = imageData[p++]; + b = imageData[p++]; + /* // calculate YUV values dynamically + YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 + UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); + VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); + */ + // use lookup table (slightly faster) + + YDU[pos] = (RGB_YUV_TABLE[r] + RGB_YUV_TABLE[g + 256 >> 0] + RGB_YUV_TABLE[b + 512 >> 0] >> 16) - 128; + UDU[pos] = (RGB_YUV_TABLE[r + 768 >> 0] + RGB_YUV_TABLE[g + 1024 >> 0] + RGB_YUV_TABLE[b + 1280 >> 0] >> 16) - 128; + VDU[pos] = (RGB_YUV_TABLE[r + 1280 >> 0] + RGB_YUV_TABLE[g + 1536 >> 0] + RGB_YUV_TABLE[b + 1792 >> 0] >> 16) - 128; + } + + DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + x += 32; + } + + y += 8; + } //////////////////////////////////////////////////////////////// + // Do the bit alignment of the EOI marker + + + if (bytepos >= 0) { + var fillbits = []; + fillbits[1] = bytepos + 1; + fillbits[0] = (1 << bytepos + 1) - 1; + writeBits(fillbits); + } + + writeWord(0xffd9); //EOI + + return new Uint8Array(byteout); + }; + + function setQuality(quality) { + quality = Math.min(Math.max(quality, 1), 100); + if (currentQuality == quality) return; // don't recalc if unchanged + + var sf = quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2); + initQuantTables(sf); + currentQuality = quality; //console.log('Quality set to: '+quality +'%'); + } + + function init() { + quality = quality || 50; // Create tables + + initCharLookupTable(); + initHuffmanTbl(); + initCategoryNumber(); + initRGBYUVTable(); + setQuality(quality); + } + + init(); + } + + /** + * @license + * Copyright (c) 2017 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF Gif Support PlugIn + * + * @name gif_support + * @module + */ + + (function (jsPDFAPI) { + + jsPDFAPI.processGIF89A = function (imageData, index, alias, compression) { + var reader = new GifReader(imageData); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = []; + reader.decodeAndBlitFrameRGBA(0, pixels); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; + + jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A; + })(jsPDF.API); + + /** + * @author shaozilee + * + * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp + * + */ + + function BmpDecoder(buffer, is_with_alpha) { + this.pos = 0; + this.buffer = buffer; + this.datav = new DataView(buffer.buffer); + this.is_with_alpha = !!is_with_alpha; + this.bottom_up = true; + this.flag = String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]); + this.pos += 2; + if (["BM", "BA", "CI", "CP", "IC", "PT"].indexOf(this.flag) === -1) throw new Error("Invalid BMP File"); + this.parseHeader(); + this.parseBGR(); + } + + BmpDecoder.prototype.parseHeader = function () { + this.fileSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.reserved = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.offset = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.headerSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.width = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.height = this.datav.getInt32(this.pos, true); + this.pos += 4; + this.planes = this.datav.getUint16(this.pos, true); + this.pos += 2; + this.bitPP = this.datav.getUint16(this.pos, true); + this.pos += 2; + this.compress = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.rawSize = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.hr = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.vr = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.colors = this.datav.getUint32(this.pos, true); + this.pos += 4; + this.importantColors = this.datav.getUint32(this.pos, true); + this.pos += 4; + + if (this.bitPP === 16 && this.is_with_alpha) { + this.bitPP = 15; + } + + if (this.bitPP < 15) { + var len = this.colors === 0 ? 1 << this.bitPP : this.colors; + this.palette = new Array(len); + + for (var i = 0; i < len; i++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var quad = this.datav.getUint8(this.pos++, true); + this.palette[i] = { + red: red, + green: green, + blue: blue, + quad: quad + }; + } + } + + if (this.height < 0) { + this.height *= -1; + this.bottom_up = false; + } + }; + + BmpDecoder.prototype.parseBGR = function () { + this.pos = this.offset; + + try { + var bitn = "bit" + this.bitPP; + var len = this.width * this.height * 4; + this.data = new Uint8Array(len); + this[bitn](); + } catch (e) { + console.log("bit decode error:" + e); + } + }; + + BmpDecoder.prototype.bit1 = function () { + var xlen = Math.ceil(this.width / 8); + var mode = xlen % 4; + var y; + + for (y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < xlen; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 8 * 4; + + for (var i = 0; i < 8; i++) { + if (x * 8 + i < this.width) { + var rgb = this.palette[b >> 7 - i & 0x1]; + this.data[location + i * 4] = rgb.blue; + this.data[location + i * 4 + 1] = rgb.green; + this.data[location + i * 4 + 2] = rgb.red; + this.data[location + i * 4 + 3] = 0xff; + } else { + break; + } + } + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } + }; + + BmpDecoder.prototype.bit4 = function () { + var xlen = Math.ceil(this.width / 2); + var mode = xlen % 4; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < xlen; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 2 * 4; + var before = b >> 4; + var after = b & 0x0f; + var rgb = this.palette[before]; + this.data[location] = rgb.blue; + this.data[location + 1] = rgb.green; + this.data[location + 2] = rgb.red; + this.data[location + 3] = 0xff; + if (x * 2 + 1 >= this.width) break; + rgb = this.palette[after]; + this.data[location + 4] = rgb.blue; + this.data[location + 4 + 1] = rgb.green; + this.data[location + 4 + 2] = rgb.red; + this.data[location + 4 + 3] = 0xff; + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } + }; + + BmpDecoder.prototype.bit8 = function () { + var mode = this.width % 4; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var b = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + + if (b < this.palette.length) { + var rgb = this.palette[b]; + this.data[location] = rgb.red; + this.data[location + 1] = rgb.green; + this.data[location + 2] = rgb.blue; + this.data[location + 3] = 0xff; + } else { + this.data[location] = 0xff; + this.data[location + 1] = 0xff; + this.data[location + 2] = 0xff; + this.data[location + 3] = 0xff; + } + } + + if (mode !== 0) { + this.pos += 4 - mode; + } + } + }; + + BmpDecoder.prototype.bit15 = function () { + var dif_w = this.width % 3; + + var _11111 = parseInt("11111", 2), + _1_5 = _11111; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var B = this.datav.getUint16(this.pos, true); + this.pos += 2; + var blue = (B & _1_5) / _1_5 * 255 | 0; + var green = (B >> 5 & _1_5) / _1_5 * 255 | 0; + var red = (B >> 10 & _1_5) / _1_5 * 255 | 0; + var alpha = B >> 15 ? 0xff : 0x00; + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } //skip extra bytes + + + this.pos += dif_w; + } + }; + + BmpDecoder.prototype.bit16 = function () { + var dif_w = this.width % 3; + + var _11111 = parseInt("11111", 2), + _1_5 = _11111; + + var _111111 = parseInt("111111", 2), + _1_6 = _111111; + + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var B = this.datav.getUint16(this.pos, true); + this.pos += 2; + var alpha = 0xff; + var blue = (B & _1_5) / _1_5 * 255 | 0; + var green = (B >> 5 & _1_6) / _1_6 * 255 | 0; + var red = (B >> 11) / _1_5 * 255 | 0; + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } //skip extra bytes + + + this.pos += dif_w; + } + }; + + BmpDecoder.prototype.bit24 = function () { + //when height > 0 + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = 0xff; + } //skip extra bytes + + + this.pos += this.width % 4; + } + }; + /** + * add 32bit decode func + * @author soubok + */ + + + BmpDecoder.prototype.bit32 = function () { + //when height > 0 + for (var y = this.height - 1; y >= 0; y--) { + var line = this.bottom_up ? y : this.height - 1 - y; + + for (var x = 0; x < this.width; x++) { + var blue = this.datav.getUint8(this.pos++, true); + var green = this.datav.getUint8(this.pos++, true); + var red = this.datav.getUint8(this.pos++, true); + var alpha = this.datav.getUint8(this.pos++, true); + var location = line * this.width * 4 + x * 4; + this.data[location] = red; + this.data[location + 1] = green; + this.data[location + 2] = blue; + this.data[location + 3] = alpha; + } //skip extra bytes + //this.pos += (this.width % 4); + + } + }; + + BmpDecoder.prototype.getData = function () { + return this.data; + }; + + /** + * @license + * Copyright (c) 2018 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + + /** + * jsPDF bmp Support PlugIn + * @name bmp_support + * @module + */ + + (function (jsPDFAPI) { + + jsPDFAPI.processBMP = function (imageData, index, alias, compression) { + var reader = new BmpDecoder(imageData, false); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = reader.getData(); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; + })(jsPDF.API); + + function WebPDecoder(imageData) { + + function x(F) { + if (!F) throw Error("assert :P"); + } + + function fa(F, L, J) { + for (var H = 0; 4 > H; H++) { + if (F[L + H] != J.charCodeAt(H)) return !0; + } + + return !1; + } + + function I(F, L, J, H, Z) { + for (var O = 0; O < Z; O++) { + F[L + O] = J[H + O]; + } + } + + function M(F, L, J, H) { + for (var Z = 0; Z < H; Z++) { + F[L + Z] = J; + } + } + + function V(F) { + return new Int32Array(F); + } + + function wa(F, L) { + for (var J = [], H = 0; H < F; H++) { + J.push(new L()); + } + + return J; + } + + function wb() { + function F(J, H, Z) { + for (var O = Z[H], L = 0; L < O; L++) { + J.push(Z.length > H + 1 ? [] : 0); + if (Z.length < H + 1) break; + F(J[L], H + 1, Z); + } + } + + var L = []; + F(L, 0, [3, 11]); + return L; + } + + function Ed(F, L) { + function J(H, O, F) { + for (var Z = F[O], ma = 0; ma < Z; ma++) { + H.push(F.length > O + 1 ? [] : new L()); + if (F.length < O + 1) break; + J(H[ma], O + 1, F); + } + } + + var H = []; + J(H, 0, F); + return H; + } + + var _WebPDecoder = function _WebPDecoder() { + var self = this; + + function L(a, b) { + for (var c = 1 << b - 1 >>> 0; a & c;) { + c >>>= 1; + } + + return c ? (a & c - 1) + c : a; + } + + function J(a, b, c, d, e) { + x(!(d % c)); + + do { + d -= c, a[b + d] = e; + } while (0 < d); + } + + function H(a, b, c, d, e, f) { + var g = b, + h = 1 << c, + k, + l, + m = V(16), + n = V(16); + x(0 != e); + x(null != d); + x(null != a); + x(0 < c); + + for (l = 0; l < e; ++l) { + if (15 < d[l]) return 0; + ++m[d[l]]; + } + + if (m[0] == e) return 0; + n[1] = 0; + + for (k = 1; 15 > k; ++k) { + if (m[k] > 1 << k) return 0; + n[k + 1] = n[k] + m[k]; + } + + for (l = 0; l < e; ++l) { + k = d[l], 0 < d[l] && (f[n[k]++] = l); + } + + if (1 == n[15]) return d = new O(), d.g = 0, d.value = f[0], J(a, g, 1, h, d), h; + var r = -1, + q = h - 1, + t = 0, + v = 1, + p = 1, + u, + w = 1 << c; + l = 0; + k = 1; + + for (e = 2; k <= c; ++k, e <<= 1) { + p <<= 1; + v += p; + p -= m[k]; + if (0 > p) return 0; + + for (; 0 < m[k]; --m[k]) { + d = new O(), d.g = k, d.value = f[l++], J(a, g + t, e, w, d), t = L(t, k); + } + } + + k = c + 1; + + for (e = 2; 15 >= k; ++k, e <<= 1) { + p <<= 1; + v += p; + p -= m[k]; + if (0 > p) return 0; + + for (; 0 < m[k]; --m[k]) { + d = new O(); + + if ((t & q) != r) { + g += w; + r = k; + + for (u = 1 << r - c; 15 > r;) { + u -= m[r]; + if (0 >= u) break; + ++r; + u <<= 1; + } + + u = r - c; + w = 1 << u; + h += w; + r = t & q; + a[b + r].g = u + c; + a[b + r].value = g - b - r; + } + + d.g = k - c; + d.value = f[l++]; + J(a, g + (t >> c), e, w, d); + t = L(t, k); + } + } + + return v != 2 * n[15] - 1 ? 0 : h; + } + + function Z(a, b, c, d, e) { + x(2328 >= e); + if (512 >= e) var f = V(512);else if (f = V(e), null == f) return 0; + return H(a, b, c, d, e, f); + } + + function O() { + this.value = this.g = 0; + } + + function Fd() { + this.value = this.g = 0; + } + + function Ub() { + this.G = wa(5, O); + this.H = V(5); + this.jc = this.Qb = this.qb = this.nd = 0; + this.pd = wa(xb, Fd); + } + + function ma(a, b, c, d) { + x(null != a); + x(null != b); + x(2147483648 > d); + a.Ca = 254; + a.I = 0; + a.b = -8; + a.Ka = 0; + a.oa = b; + a.pa = c; + a.Jd = b; + a.Yc = c + d; + a.Zc = 4 <= d ? c + d - 4 + 1 : c; + Qa(a); + } + + function na(a, b) { + for (var c = 0; 0 < b--;) { + c |= K(a, 128) << b; + } + + return c; + } + + function ca(a, b) { + var c = na(a, b); + return G(a) ? -c : c; + } + + function cb(a, b, c, d) { + var e, + f = 0; + x(null != a); + x(null != b); + x(4294967288 > d); + a.Sb = d; + a.Ra = 0; + a.u = 0; + a.h = 0; + 4 < d && (d = 4); + + for (e = 0; e < d; ++e) { + f += b[c + e] << 8 * e; + } + + a.Ra = f; + a.bb = d; + a.oa = b; + a.pa = c; + } + + function Vb(a) { + for (; 8 <= a.u && a.bb < a.Sb;) { + a.Ra >>>= 8, a.Ra += a.oa[a.pa + a.bb] << ob - 8 >>> 0, ++a.bb, a.u -= 8; + } + + db(a) && (a.h = 1, a.u = 0); + } + + function D(a, b) { + x(0 <= b); + + if (!a.h && b <= Gd) { + var c = pb(a) & Hd[b]; + a.u += b; + Vb(a); + return c; + } + + a.h = 1; + return a.u = 0; + } + + function Wb() { + this.b = this.Ca = this.I = 0; + this.oa = []; + this.pa = 0; + this.Jd = []; + this.Yc = 0; + this.Zc = []; + this.Ka = 0; + } + + function Ra() { + this.Ra = 0; + this.oa = []; + this.h = this.u = this.bb = this.Sb = this.pa = 0; + } + + function pb(a) { + return a.Ra >>> (a.u & ob - 1) >>> 0; + } + + function db(a) { + x(a.bb <= a.Sb); + return a.h || a.bb == a.Sb && a.u > ob; + } + + function qb(a, b) { + a.u = b; + a.h = db(a); + } + + function Sa(a) { + a.u >= Xb && (x(a.u >= Xb), Vb(a)); + } + + function Qa(a) { + x(null != a && null != a.oa); + a.pa < a.Zc ? (a.I = (a.oa[a.pa++] | a.I << 8) >>> 0, a.b += 8) : (x(null != a && null != a.oa), a.pa < a.Yc ? (a.b += 8, a.I = a.oa[a.pa++] | a.I << 8) : a.Ka ? a.b = 0 : (a.I <<= 8, a.b += 8, a.Ka = 1)); + } + + function G(a) { + return na(a, 1); + } + + function K(a, b) { + var c = a.Ca; + 0 > a.b && Qa(a); + var d = a.b, + e = c * b >>> 8, + f = (a.I >>> d > e) + 0; + f ? (c -= e, a.I -= e + 1 << d >>> 0) : c = e + 1; + d = c; + + for (e = 0; 256 <= d;) { + e += 8, d >>= 8; + } + + d = 7 ^ e + Id[d]; + a.b -= d; + a.Ca = (c << d) - 1; + return f; + } + + function ra(a, b, c) { + a[b + 0] = c >> 24 & 255; + a[b + 1] = c >> 16 & 255; + a[b + 2] = c >> 8 & 255; + a[b + 3] = c >> 0 & 255; + } + + function Ta(a, b) { + return a[b + 0] << 0 | a[b + 1] << 8; + } + + function Yb(a, b) { + return Ta(a, b) | a[b + 2] << 16; + } + + function Ha(a, b) { + return Ta(a, b) | Ta(a, b + 2) << 16; + } + + function Zb(a, b) { + var c = 1 << b; + x(null != a); + x(0 < b); + a.X = V(c); + if (null == a.X) return 0; + a.Mb = 32 - b; + a.Xa = b; + return 1; + } + + function $b(a, b) { + x(null != a); + x(null != b); + x(a.Xa == b.Xa); + I(b.X, 0, a.X, 0, 1 << b.Xa); + } + + function ac() { + this.X = []; + this.Xa = this.Mb = 0; + } + + function bc(a, b, c, d) { + x(null != c); + x(null != d); + var e = c[0], + f = d[0]; + 0 == e && (e = (a * f + b / 2) / b); + 0 == f && (f = (b * e + a / 2) / a); + if (0 >= e || 0 >= f) return 0; + c[0] = e; + d[0] = f; + return 1; + } + + function xa(a, b) { + return a + (1 << b) - 1 >>> b; + } + + function yb(a, b) { + return ((a & 4278255360) + (b & 4278255360) >>> 0 & 4278255360) + ((a & 16711935) + (b & 16711935) >>> 0 & 16711935) >>> 0; + } + + function X(a, b) { + self[b] = function (b, d, e, f, g, h, k) { + var c; + + for (c = 0; c < g; ++c) { + var m = self[a](h[k + c - 1], e, f + c); + h[k + c] = yb(b[d + c], m); + } + }; + } + + function Jd() { + this.ud = this.hd = this.jd = 0; + } + + function aa(a, b) { + return (((a ^ b) & 4278124286) >>> 1) + (a & b) >>> 0; + } + + function sa(a) { + if (0 <= a && 256 > a) return a; + if (0 > a) return 0; + if (255 < a) return 255; + } + + function eb(a, b) { + return sa(a + (a - b + 0.5 >> 1)); + } + + function Ia(a, b, c) { + return Math.abs(b - c) - Math.abs(a - c); + } + + function cc(a, b, c, d, e, f, g) { + d = f[g - 1]; + + for (c = 0; c < e; ++c) { + f[g + c] = d = yb(a[b + c], d); + } + } + + function Kd(a, b, c, d, e) { + var f; + + for (f = 0; f < c; ++f) { + var g = a[b + f], + h = g >> 8 & 255, + k = g & 16711935, + k = k + ((h << 16) + h), + k = k & 16711935; + d[e + f] = (g & 4278255360) + k >>> 0; + } + } + + function dc(a, b) { + b.jd = a >> 0 & 255; + b.hd = a >> 8 & 255; + b.ud = a >> 16 & 255; + } + + function Ld(a, b, c, d, e, f) { + var g; + + for (g = 0; g < d; ++g) { + var h = b[c + g], + k = h >>> 8, + l = h >>> 16, + m = h, + l = l + ((a.jd << 24 >> 24) * (k << 24 >> 24) >>> 5), + l = l & 255, + m = m + ((a.hd << 24 >> 24) * (k << 24 >> 24) >>> 5), + m = m + ((a.ud << 24 >> 24) * (l << 24 >> 24) >>> 5), + m = m & 255; + e[f + g] = (h & 4278255360) + (l << 16) + m; + } + } + + function ec(a, b, c, d, e) { + self[b] = function (a, b, c, k, l, m, n, r, q) { + for (k = n; k < r; ++k) { + for (n = 0; n < q; ++n) { + l[m++] = e(c[d(a[b++])]); + } + } + }; + + self[a] = function (a, b, h, k, l, m, n) { + var f = 8 >> a.b, + g = a.Ea, + t = a.K[0], + v = a.w; + if (8 > f) for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) { + var p = 0, + u; + + for (u = 0; u < g; ++u) { + u & a || (p = d(k[l++])), m[n++] = e(t[p & v]), p >>= f; + } + } else self["VP8LMapColor" + c](k, l, t, v, m, n, b, h, g); + }; + } + + function Md(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++]; + d[e++] = f >> 16 & 255; + d[e++] = f >> 8 & 255; + d[e++] = f >> 0 & 255; + } + } + + function Nd(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++]; + d[e++] = f >> 16 & 255; + d[e++] = f >> 8 & 255; + d[e++] = f >> 0 & 255; + d[e++] = f >> 24 & 255; + } + } + + function Od(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++], + g = f >> 16 & 240 | f >> 12 & 15, + f = f >> 0 & 240 | f >> 28 & 15; + d[e++] = g; + d[e++] = f; + } + } + + function Pd(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++], + g = f >> 16 & 248 | f >> 13 & 7, + f = f >> 5 & 224 | f >> 3 & 31; + d[e++] = g; + d[e++] = f; + } + } + + function Qd(a, b, c, d, e) { + for (c = b + c; b < c;) { + var f = a[b++]; + d[e++] = f >> 0 & 255; + d[e++] = f >> 8 & 255; + d[e++] = f >> 16 & 255; + } + } + + function fb(a, b, c, d, e, f) { + if (0 == f) for (c = b + c; b < c;) { + f = a[b++], ra(d, (f[0] >> 24 | f[1] >> 8 & 65280 | f[2] << 8 & 16711680 | f[3] << 24) >>> 0), e += 32; + } else I(d, e, a, b, c); + } + + function gb(a, b) { + self[b][0] = self[a + "0"]; + self[b][1] = self[a + "1"]; + self[b][2] = self[a + "2"]; + self[b][3] = self[a + "3"]; + self[b][4] = self[a + "4"]; + self[b][5] = self[a + "5"]; + self[b][6] = self[a + "6"]; + self[b][7] = self[a + "7"]; + self[b][8] = self[a + "8"]; + self[b][9] = self[a + "9"]; + self[b][10] = self[a + "10"]; + self[b][11] = self[a + "11"]; + self[b][12] = self[a + "12"]; + self[b][13] = self[a + "13"]; + self[b][14] = self[a + "0"]; + self[b][15] = self[a + "0"]; + } + + function hb(a) { + return a == zb || a == Ab || a == Ja || a == Bb; + } + + function Rd() { + this.eb = []; + this.size = this.A = this.fb = 0; + } + + function Sd() { + this.y = []; + this.f = []; + this.ea = []; + this.F = []; + this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0; + } + + function Cb() { + this.Rd = this.height = this.width = this.S = 0; + this.f = {}; + this.f.RGBA = new Rd(); + this.f.kb = new Sd(); + this.sd = null; + } + + function Td() { + this.width = [0]; + this.height = [0]; + this.Pd = [0]; + this.Qd = [0]; + this.format = [0]; + } + + function Ud() { + this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0; + } + + function Vd(a) { + alert("todo:WebPSamplerProcessPlane"); + return a.T; + } + + function Wd(a, b) { + var c = a.T, + d = b.ba.f.RGBA, + e = d.eb, + f = d.fb + a.ka * d.A, + g = P[b.ba.S], + h = a.y, + k = a.O, + l = a.f, + m = a.N, + n = a.ea, + r = a.W, + q = b.cc, + t = b.dc, + v = b.Mc, + p = b.Nc, + u = a.ka, + w = a.ka + a.T, + y = a.U, + A = y + 1 >> 1; + 0 == u ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y) : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y), ++c); + + for (; u + 2 < w; u += 2) { + q = l, t = m, v = n, p = r, m += a.Rc, r += a.Rc, f += 2 * d.A, k += 2 * a.fa, g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y); + } + + k += a.fa; + a.j + w < a.o ? (I(b.ec, b.fc, h, k, y), I(b.cc, b.dc, l, m, A), I(b.Mc, b.Nc, n, r, A), c--) : w & 1 || g(h, k, null, null, l, m, n, r, l, m, n, r, e, f + d.A, null, null, y); + return c; + } + + function Xd(a, b, c) { + var d = a.F, + e = [a.J]; + + if (null != d) { + var f = a.U, + g = b.ba.S, + h = g == ya || g == Ja; + b = b.ba.f.RGBA; + var k = [0], + l = a.ka; + k[0] = a.T; + a.Kb && (0 == l ? --k[0] : (--l, e[0] -= a.width), a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l)); + var m = b.eb, + l = b.fb + l * b.A; + a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A); + x(c == k); + a && hb(g) && za(m, l, h, f, k, b.A); + } + + return 0; + } + + function gc(a) { + var b = a.ma, + c = b.ba.S, + d = 11 > c, + e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c); + b.memory = null; + b.Ib = null; + b.Jb = null; + b.Nd = null; + if (!hc(b.Oa, a, e ? 11 : 12)) return 0; + e && hb(c) && ic(); + if (a.da) alert("todo:use_scaling");else { + if (d) { + if (b.Ib = Vd, a.Kb) { + c = a.U + 1 >> 1; + b.memory = V(a.U + 2 * c); + if (null == b.memory) return 0; + b.ec = b.memory; + b.fc = 0; + b.cc = b.ec; + b.dc = b.fc + a.U; + b.Mc = b.cc; + b.Nc = b.dc + c; + b.Ib = Wd; + ic(); + } + } else alert("todo:EmitYUV"); + + e && (b.Jb = Xd, d && Aa()); + } + + if (d && !jc) { + for (a = 0; 256 > a; ++a) { + Yd[a] = 89858 * (a - 128) + Ba >> Wa, Zd[a] = -22014 * (a - 128) + Ba, $d[a] = -45773 * (a - 128), ae[a] = 113618 * (a - 128) + Ba >> Wa; + } + + for (a = ta; a < Eb; ++a) { + b = 76283 * (a - 16) + Ba >> Wa, be[a - ta] = ga(b, 255), ce[a - ta] = ga(b + 8 >> 4, 15); + } + + jc = 1; + } + + return 1; + } + + function kc(a) { + var b = a.ma, + c = a.U, + d = a.T; + x(!(a.ka & 1)); + if (0 >= c || 0 >= d) return 0; + c = b.Ib(a, b); + null != b.Jb && b.Jb(a, b, c); + b.Dc += c; + return 1; + } + + function lc(a) { + a.ma.memory = null; + } + + function mc(a, b, c, d) { + if (47 != D(a, 8)) return 0; + b[0] = D(a, 14) + 1; + c[0] = D(a, 14) + 1; + d[0] = D(a, 1); + return 0 != D(a, 3) ? 0 : !a.h; + } + + function ib(a, b) { + if (4 > a) return a + 1; + var c = a - 2 >> 1; + return (2 + (a & 1) << c) + D(b, c) + 1; + } + + function nc(a, b) { + if (120 < b) return b - 120; + var c = de[b - 1], + c = (c >> 4) * a + (8 - (c & 15)); + return 1 <= c ? c : 1; + } + + function ua(a, b, c) { + var d = pb(c); + b += d & 255; + var e = a[b].g - 8; + 0 < e && (qb(c, c.u + 8), d = pb(c), b += a[b].value, b += d & (1 << e) - 1); + qb(c, c.u + a[b].g); + return a[b].value; + } + + function ub(a, b, c) { + c.g += a.g; + c.value += a.value << b >>> 0; + x(8 >= c.g); + return a.g; + } + + function ha(a, b, c) { + var d = a.xc; + b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)]; + x(b < a.Wb); + return a.Ya[b]; + } + + function oc(a, b, c, d) { + var e = a.ab, + f = a.c * b, + g = a.C; + b = g + b; + var h = c, + k = d; + d = a.Ta; + + for (c = a.Ua; 0 < e--;) { + var l = a.gc[e], + m = g, + n = b, + r = h, + q = k, + k = d, + h = c, + t = l.Ea; + x(m < n); + x(n <= l.nc); + + switch (l.hc) { + case 2: + pc(r, q, (n - m) * t, k, h); + break; + + case 0: + var v = l, + p = m, + u = n, + w = k, + y = h, + A = v.Ea; + 0 == p && (ee(r, q, null, null, 1, w, y), cc(r, q + 1, 0, 0, A - 1, w, y + 1), q += A, y += A, ++p); + + for (var E = 1 << v.b, B = E - 1, C = xa(A, v.b), N = v.K, v = v.w + (p >> v.b) * C; p < u;) { + var z = N, + Q = v, + S = 1; + + for (fe(r, q, w, y - A, 1, w, y); S < A;) { + var K = qc[z[Q++] >> 8 & 15], + D = (S & ~B) + E; + D > A && (D = A); + K(r, q + +S, w, y + S - A, D - S, w, y + S); + S = D; + } + + q += A; + y += A; + ++p; + p & B || (v += C); + } + + n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t); + break; + + case 1: + t = r; + u = q; + r = l.Ea; + q = 1 << l.b; + w = q - 1; + y = r & ~w; + A = r - y; + p = xa(r, l.b); + E = l.K; + + for (l = l.w + (m >> l.b) * p; m < n;) { + B = E; + C = l; + N = new Jd(); + v = u + y; + + for (z = u + r; u < v;) { + dc(B[C++], N), Fb(N, t, u, q, k, h), u += q, h += q; + } + + u < z && (dc(B[C++], N), Fb(N, t, u, A, k, h), u += A, h += A); + ++m; + m & w || (l += p); + } + + break; + + case 3: + if (r == k && q == h && 0 < l.b) { + y = (n - m) * xa(l.Ea, l.b); + t = h + (n - m) * t - y; + u = k; + r = t; + q = k; + w = h; + A = y; + p = []; + + for (y = A - 1; 0 <= y; --y) { + p[y] = q[w + y]; + } + + for (y = A - 1; 0 <= y; --y) { + u[r + y] = p[y]; + } + + rc(l, m, n, k, t, k, h); + } else rc(l, m, n, r, q, k, h); + + } + + h = d; + k = c; + } + + k != c && I(d, c, h, k, f); + } + + function ge(a, b) { + var c = a.V, + d = a.Ba + a.c * a.C, + e = b - a.C; + x(b <= a.l.o); + x(16 >= e); + + if (0 < e) { + var f = a.l, + g = a.Ta, + h = a.Ua, + k = f.width; + oc(a, e, c, d); + h = [h]; + c = a.C; + d = b; + e = h; + x(c < d); + x(f.v < f.va); + d > f.o && (d = f.o); + + if (c < f.j) { + var l = f.j - c, + c = f.j; + e[0] += l * k; + } + + c >= d ? c = 0 : (e[0] += 4 * f.v, f.ka = c - f.j, f.U = f.va - f.v, f.T = d - c, c = 1); + + if (c) { + h = h[0]; + c = a.ca; + + if (11 > c.S) { + for (var m = c.f.RGBA, d = c.S, e = f.U, f = f.T, l = m.eb, n = m.A, r = f, m = m.fb + a.Ma * m.A; 0 < r--;) { + var q = g, + t = h, + v = e, + p = l, + u = m; + + switch (d) { + case Ca: + sc(q, t, v, p, u); + break; + + case Ua: + Gb(q, t, v, p, u); + break; + + case zb: + Gb(q, t, v, p, u); + za(p, u, 0, v, 1, 0); + break; + + case tc: + uc(q, t, v, p, u); + break; + + case Va: + fb(q, t, v, p, u, 1); + break; + + case Ab: + fb(q, t, v, p, u, 1); + za(p, u, 0, v, 1, 0); + break; + + case ya: + fb(q, t, v, p, u, 0); + break; + + case Ja: + fb(q, t, v, p, u, 0); + za(p, u, 1, v, 1, 0); + break; + + case Db: + Hb(q, t, v, p, u); + break; + + case Bb: + Hb(q, t, v, p, u); + vc(p, u, v, 1, 0); + break; + + case wc: + xc(q, t, v, p, u); + break; + + default: + x(0); + } + + h += k; + m += n; + } + + a.Ma += f; + } else alert("todo:EmitRescaledRowsYUVA"); + + x(a.Ma <= c.height); + } + } + + a.C = b; + x(a.C <= a.i); + } + + function yc(a) { + var b; + if (0 < a.ua) return 0; + + for (b = 0; b < a.Wb; ++b) { + var c = a.Ya[b].G, + d = a.Ya[b].H; + if (0 < c[1][d[1] + 0].g || 0 < c[2][d[2] + 0].g || 0 < c[3][d[3] + 0].g) return 0; + } + + return 1; + } + + function zc(a, b, c, d, e, f) { + if (0 != a.Z) { + var g = a.qd, + h = a.rd; + + for (x(null != ia[a.Z]); b < c; ++b) { + ia[a.Z](g, h, d, e, d, e, f), g = d, h = e, e += f; + } + + a.qd = g; + a.rd = h; + } + } + + function Ib(a, b) { + var c = a.l.ma, + d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C, + d = a.C < d ? d : a.C; + x(b <= a.l.o); + + if (b > d) { + var e = a.l.width, + f = c.ca, + g = c.tb + e * d, + h = a.V, + k = a.Ba + a.c * d, + l = a.gc; + x(1 == a.ab); + x(3 == l[0].hc); + he(l[0], d, b, h, k, f, g); + zc(c, d, b, f, g, e); + } + + a.C = a.Ma = b; + } + + function Jb(a, b, c, d, e, f, g) { + var h = a.$ / d, + k = a.$ % d, + l = a.m, + m = a.s, + n = c + a.$, + r = n; + e = c + d * e; + var q = c + d * f, + t = 280 + m.ua, + v = a.Pb ? h : 16777216, + p = 0 < m.ua ? m.Wa : null, + u = m.wc, + w = n < q ? ha(m, k, h) : null; + x(a.C < f); + x(q <= e); + var y = !1; + + a: for (;;) { + for (; y || n < q;) { + var A = 0; + + if (h >= v) { + var v = a, + E = n - c; + x(v.Pb); + v.wd = v.m; + v.xd = E; + 0 < v.s.ua && $b(v.s.Wa, v.s.vb); + v = h + ie; + } + + k & u || (w = ha(m, k, h)); + x(null != w); + w.Qb && (b[n] = w.qb, y = !0); + if (!y) if (Sa(l), w.jc) { + var A = l, + E = b, + B = n, + C = w.pd[pb(A) & xb - 1]; + x(w.jc); + 256 > C.g ? (qb(A, A.u + C.g), E[B] = C.value, A = 0) : (qb(A, A.u + C.g - 256), x(256 <= C.value), A = C.value); + 0 == A && (y = !0); + } else A = ua(w.G[0], w.H[0], l); + if (l.h) break; + + if (y || 256 > A) { + if (!y) if (w.nd) b[n] = (w.qb | A << 8) >>> 0;else { + Sa(l); + y = ua(w.G[1], w.H[1], l); + Sa(l); + E = ua(w.G[2], w.H[2], l); + B = ua(w.G[3], w.H[3], l); + if (l.h) break; + b[n] = (B << 24 | y << 16 | A << 8 | E) >>> 0; + } + y = !1; + ++n; + ++k; + if (k >= d && (k = 0, ++h, null != g && h <= f && !(h % 16) && g(a, h), null != p)) for (; r < n;) { + A = b[r++], p.X[(506832829 * A & 4294967295) >>> p.Mb] = A; + } + } else if (280 > A) { + A = ib(A - 256, l); + E = ua(w.G[4], w.H[4], l); + Sa(l); + E = ib(E, l); + E = nc(d, E); + if (l.h) break; + if (n - c < E || e - n < A) break a;else for (B = 0; B < A; ++B) { + b[n + B] = b[n + B - E]; + } + n += A; + + for (k += A; k >= d;) { + k -= d, ++h, null != g && h <= f && !(h % 16) && g(a, h); + } + + x(n <= e); + k & u && (w = ha(m, k, h)); + if (null != p) for (; r < n;) { + A = b[r++], p.X[(506832829 * A & 4294967295) >>> p.Mb] = A; + } + } else if (A < t) { + y = A - 280; + + for (x(null != p); r < n;) { + A = b[r++], p.X[(506832829 * A & 4294967295) >>> p.Mb] = A; + } + + A = n; + E = p; + x(!(y >>> E.Xa)); + b[A] = E.X[y]; + y = !0; + } else break a; + + y || x(l.h == db(l)); + } + + if (a.Pb && l.h && n < e) x(a.m.h), a.a = 5, a.m = a.wd, a.$ = a.xd, 0 < a.s.ua && $b(a.s.vb, a.s.Wa);else if (l.h) break a;else null != g && g(a, h > f ? f : h), a.a = 0, a.$ = n - c; + return 1; + } + + a.a = 3; + return 0; + } + + function Ac(a) { + x(null != a); + a.vc = null; + a.yc = null; + a.Ya = null; + var b = a.Wa; + null != b && (b.X = null); + a.vb = null; + x(null != a); + } + + function Bc() { + var a = new je(); + if (null == a) return null; + a.a = 0; + a.xb = Cc; + gb("Predictor", "VP8LPredictors"); + gb("Predictor", "VP8LPredictors_C"); + gb("PredictorAdd", "VP8LPredictorsAdd"); + gb("PredictorAdd", "VP8LPredictorsAdd_C"); + pc = Kd; + Fb = Ld; + sc = Md; + Gb = Nd; + Hb = Od; + xc = Pd; + uc = Qd; + self.VP8LMapColor32b = ke; + self.VP8LMapColor8b = le; + return a; + } + + function rb(a, b, c, d, e) { + var f = 1, + g = [a], + h = [b], + k = d.m, + l = d.s, + m = null, + n = 0; + + a: for (;;) { + if (c) for (; f && D(k, 1);) { + var r = g, + q = h, + t = d, + v = 1, + p = t.m, + u = t.gc[t.ab], + w = D(p, 2); + if (t.Oc & 1 << w) f = 0;else { + t.Oc |= 1 << w; + u.hc = w; + u.Ea = r[0]; + u.nc = q[0]; + u.K = [null]; + ++t.ab; + x(4 >= t.ab); + + switch (w) { + case 0: + case 1: + u.b = D(p, 3) + 2; + v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K); + u.K = u.K[0]; + break; + + case 3: + var y = D(p, 8) + 1, + A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3; + r[0] = xa(u.Ea, A); + u.b = A; + var v = rb(y, 1, 0, t, u.K), + E; + + if (E = v) { + var B, + C = y, + N = u, + z = 1 << (8 >> N.b), + Q = V(z); + if (null == Q) E = 0;else { + var S = N.K[0], + K = N.w; + Q[0] = N.K[0][0]; + + for (B = 1; B < 1 * C; ++B) { + Q[B] = yb(S[K + B], Q[B - 1]); + } + + for (; B < 4 * z; ++B) { + Q[B] = 0; + } + + N.K[0] = null; + N.K[0] = Q; + E = 1; + } + } + + v = E; + break; + + case 2: + break; + + default: + x(0); + } + + f = v; + } + } + g = g[0]; + h = h[0]; + + if (f && D(k, 1) && (n = D(k, 4), f = 1 <= n && 11 >= n, !f)) { + d.a = 3; + break a; + } + + var H; + if (H = f) b: { + var F = d, + G = g, + L = h, + J = n, + T = c, + Da, + ba, + X = F.m, + R = F.s, + P = [null], + U, + W = 1, + aa = 0, + na = me[J]; + + c: for (;;) { + if (T && D(X, 1)) { + var ca = D(X, 3) + 2, + ga = xa(G, ca), + ka = xa(L, ca), + qa = ga * ka; + if (!rb(ga, ka, 0, F, P)) break c; + P = P[0]; + R.xc = ca; + + for (Da = 0; Da < qa; ++Da) { + var ia = P[Da] >> 8 & 65535; + P[Da] = ia; + ia >= W && (W = ia + 1); + } + } + + if (X.h) break c; + + for (ba = 0; 5 > ba; ++ba) { + var Y = Dc[ba]; + !ba && 0 < J && (Y += 1 << J); + aa < Y && (aa = Y); + } + + var ma = wa(W * na, O); + var ua = W, + va = wa(ua, Ub); + if (null == va) var la = null;else x(65536 >= ua), la = va; + var ha = V(aa); + + if (null == la || null == ha || null == ma) { + F.a = 1; + break c; + } + + var pa = ma; + + for (Da = U = 0; Da < W; ++Da) { + var ja = la[Da], + da = ja.G, + ea = ja.H, + Fa = 0, + ra = 1, + Ha = 0; + + for (ba = 0; 5 > ba; ++ba) { + Y = Dc[ba]; + da[ba] = pa; + ea[ba] = U; + !ba && 0 < J && (Y += 1 << J); + + d: { + var sa, + za = Y, + ta = F, + oa = ha, + db = pa, + eb = U, + Ia = 0, + Ka = ta.m, + fb = D(Ka, 1); + M(oa, 0, 0, za); + + if (fb) { + var gb = D(Ka, 1) + 1, + hb = D(Ka, 1), + Ja = D(Ka, 0 == hb ? 1 : 8); + oa[Ja] = 1; + 2 == gb && (Ja = D(Ka, 8), oa[Ja] = 1); + var ya = 1; + } else { + var Ua = V(19), + Va = D(Ka, 4) + 4; + + if (19 < Va) { + ta.a = 3; + var Aa = 0; + break d; + } + + for (sa = 0; sa < Va; ++sa) { + Ua[ne[sa]] = D(Ka, 3); + } + + var Ba = void 0, + sb = void 0, + Wa = ta, + ib = Ua, + Ca = za, + Xa = oa, + Oa = 0, + La = Wa.m, + Ya = 8, + Za = wa(128, O); + + e: for (;;) { + if (!Z(Za, 0, 7, ib, 19)) break e; + + if (D(La, 1)) { + var kb = 2 + 2 * D(La, 3), + Ba = 2 + D(La, kb); + if (Ba > Ca) break e; + } else Ba = Ca; + + for (sb = 0; sb < Ca && Ba--;) { + Sa(La); + var $a = Za[0 + (pb(La) & 127)]; + qb(La, La.u + $a.g); + var jb = $a.value; + if (16 > jb) Xa[sb++] = jb, 0 != jb && (Ya = jb);else { + var lb = 16 == jb, + ab = jb - 16, + mb = oe[ab], + bb = D(La, pe[ab]) + mb; + if (sb + bb > Ca) break e;else for (var nb = lb ? Ya : 0; 0 < bb--;) { + Xa[sb++] = nb; + } + } + } + + Oa = 1; + break e; + } + + Oa || (Wa.a = 3); + ya = Oa; + } + + (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za)); + ya && 0 != Ia ? Aa = Ia : (ta.a = 3, Aa = 0); + } + + if (0 == Aa) break c; + ra && 1 == qe[ba] && (ra = 0 == pa[U].g); + Fa += pa[U].g; + U += Aa; + + if (3 >= ba) { + var Pa = ha[0], + tb; + + for (tb = 1; tb < Y; ++tb) { + ha[tb] > Pa && (Pa = ha[tb]); + } + + Ha += Pa; + } + } + + ja.nd = ra; + ja.Qb = 0; + ra && (ja.qb = (da[3][ea[3] + 0].value << 24 | da[1][ea[1] + 0].value << 16 | da[2][ea[2] + 0].value) >>> 0, 0 == Fa && 256 > da[0][ea[0] + 0].value && (ja.Qb = 1, ja.qb += da[0][ea[0] + 0].value << 8)); + ja.jc = !ja.Qb && 6 > Ha; + + if (ja.jc) { + var Ga, + Ea = ja; + + for (Ga = 0; Ga < xb; ++Ga) { + var Ma = Ga, + Na = Ea.pd[Ma], + vb = Ea.G[0][Ea.H[0] + Ma]; + 256 <= vb.value ? (Na.g = vb.g + 256, Na.value = vb.value) : (Na.g = 0, Na.value = 0, Ma >>= ub(vb, 8, Na), Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na), Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na), ub(Ea.G[3][Ea.H[3] + Ma], 24, Na)); + } + } + } + + R.vc = P; + R.Wb = W; + R.Ya = la; + R.yc = ma; + H = 1; + break b; + } + + H = 0; + } + f = H; + + if (!f) { + d.a = 3; + break a; + } + + if (0 < n) { + if (l.ua = 1 << n, !Zb(l.Wa, n)) { + d.a = 1; + f = 0; + break a; + } + } else l.ua = 0; + + var Qa = d, + cb = g, + ob = h, + Ra = Qa.s, + Ta = Ra.xc; + Qa.c = cb; + Qa.i = ob; + Ra.md = xa(cb, Ta); + Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1; + + if (c) { + d.xb = re; + break a; + } + + m = V(g * h); + + if (null == m) { + d.a = 1; + f = 0; + break a; + } + + f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h; + break a; + } + + f ? (null != e ? e[0] = m : (x(null == m), x(c)), d.$ = 0, c || Ac(l)) : Ac(l); + return f; + } + + function Ec(a, b) { + var c = a.c * a.i, + d = c + b + 16 * b; + x(a.c <= b); + a.V = V(d); + if (null == a.V) return a.Ta = null, a.Ua = 0, a.a = 1, 0; + a.Ta = a.V; + a.Ua = a.Ba + c + b; + return 1; + } + + function se(a, b) { + var c = a.C, + d = b - c, + e = a.V, + f = a.Ba + a.c * c; + + for (x(b <= a.l.o); 0 < d;) { + var g = 16 < d ? 16 : d, + h = a.l.ma, + k = a.l.width, + l = k * g, + m = h.ca, + n = h.tb + k * c, + r = a.Ta, + q = a.Ua; + oc(a, g, e, f); + Fc(r, q, m, n, l); + zc(h, c, c + g, m, n, k); + d -= g; + e += g * a.c; + c += g; + } + + x(c == b); + a.C = a.Ma = b; + } + + function te(a, b) { + var c = [0], + d = [0], + e = [0]; + + a: for (;;) { + if (null == a) return 0; + if (null == b) return a.a = 2, 0; + a.l = b; + a.a = 0; + cb(a.m, b.data, b.w, b.ha); + + if (!mc(a.m, c, d, e)) { + a.a = 3; + break a; + } + + a.xb = Cc; + b.width = c[0]; + b.height = d[0]; + if (!rb(c[0], d[0], 1, a, null)) break a; + return 1; + } + + x(0 != a.a); + return 0; + } + + function ue() { + this.ub = this.yd = this.td = this.Rb = 0; + } + + function ve() { + this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0; + } + + function we() { + this.Fb = this.Bb = this.Cb = 0; + this.Zb = V(4); + this.Lb = V(4); + } + + function Gc() { + this.Yb = wb(); + } + + function xe() { + this.jb = V(3); + this.Wc = Ed([4, 8], Gc); + this.Xc = Ed([4, 17], Gc); + } + + function ye() { + this.Pc = this.wb = this.Tb = this.zd = 0; + this.vd = new V(4); + this.od = new V(4); + } + + function Xa() { + this.ld = this.La = this.dd = this.tc = 0; + } + + function Hc() { + this.Na = this.la = 0; + } + + function ze() { + this.Sc = [0, 0]; + this.Eb = [0, 0]; + this.Qc = [0, 0]; + this.ia = this.lc = 0; + } + + function Kb() { + this.ad = V(384); + this.Za = 0; + this.Ob = V(16); + this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0; + } + + function Ae() { + this.uc = this.M = this.Nb = 0; + this.wa = Array(new Xa()); + this.Y = 0; + this.ya = Array(new Kb()); + this.aa = 0; + this.l = new Oa(); + } + + function Ic() { + this.y = V(16); + this.f = V(8); + this.ea = V(8); + } + + function Be() { + this.cb = this.a = 0; + this.sc = ""; + this.m = new Wb(); + this.Od = new ue(); + this.Kc = new ve(); + this.ed = new ye(); + this.Qa = new we(); + this.Ic = this.$c = this.Aa = 0; + this.D = new Ae(); + this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0; + this.Jc = wa(8, Wb); + this.ia = 0; + this.pb = wa(4, ze); + this.Pa = new xe(); + this.Bd = this.kc = 0; + this.Ac = []; + this.Bc = 0; + this.zc = [0, 0, 0, 0]; + this.Gd = Array(new Ic()); + this.Hd = 0; + this.rb = Array(new Hc()); + this.sb = 0; + this.wa = Array(new Xa()); + this.Y = 0; + this.oc = []; + this.pc = 0; + this.sa = []; + this.ta = 0; + this.qa = []; + this.ra = 0; + this.Ha = []; + this.B = this.R = this.Ia = 0; + this.Ec = []; + this.M = this.ja = this.Vb = this.Fc = 0; + this.ya = Array(new Kb()); + this.L = this.aa = 0; + this.gd = Ed([4, 2], Xa); + this.ga = null; + this.Fa = []; + this.Cc = this.qc = this.P = 0; + this.Gb = []; + this.Uc = 0; + this.mb = []; + this.nb = 0; + this.rc = []; + this.Ga = this.Vc = 0; + } + + function ga(a, b) { + return 0 > a ? 0 : a > b ? b : a; + } + + function Oa() { + this.T = this.U = this.ka = this.height = this.width = 0; + this.y = []; + this.f = []; + this.ea = []; + this.Rc = this.fa = this.W = this.N = this.O = 0; + this.ma = "void"; + this.put = "VP8IoPutHook"; + this.ac = "VP8IoSetupHook"; + this.bc = "VP8IoTeardownHook"; + this.ha = this.Kb = 0; + this.data = []; + this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0; + this.F = []; + this.J = 0; + } + + function Ce() { + var a = new Be(); + null != a && (a.a = 0, a.sc = "OK", a.cb = 0, a.Xb = 0, oa || (oa = De)); + return a; + } + + function T(a, b, c) { + 0 == a.a && (a.a = b, a.sc = c, a.cb = 0); + return 0; + } + + function Jc(a, b, c) { + return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2]; + } + + function Kc(a, b) { + if (null == a) return 0; + a.a = 0; + a.sc = "OK"; + if (null == b) return T(a, 2, "null VP8Io passed to VP8GetHeaders()"); + var c = b.data; + var d = b.w; + var e = b.ha; + if (4 > e) return T(a, 7, "Truncated header."); + var f = c[d + 0] | c[d + 1] << 8 | c[d + 2] << 16; + var g = a.Od; + g.Rb = !(f & 1); + g.td = f >> 1 & 7; + g.yd = f >> 4 & 1; + g.ub = f >> 5; + if (3 < g.td) return T(a, 3, "Incorrect keyframe parameters."); + if (!g.yd) return T(a, 4, "Frame not displayable."); + d += 3; + e -= 3; + var h = a.Kc; + + if (g.Rb) { + if (7 > e) return T(a, 7, "cannot parse picture header"); + if (!Jc(c, d, e)) return T(a, 3, "Bad code word"); + h.c = (c[d + 4] << 8 | c[d + 3]) & 16383; + h.Td = c[d + 4] >> 6; + h.i = (c[d + 6] << 8 | c[d + 5]) & 16383; + h.Ud = c[d + 6] >> 6; + d += 7; + e -= 7; + a.za = h.c + 15 >> 4; + a.Ub = h.i + 15 >> 4; + b.width = h.c; + b.height = h.i; + b.Da = 0; + b.j = 0; + b.v = 0; + b.va = b.width; + b.o = b.height; + b.da = 0; + b.ib = b.width; + b.hb = b.height; + b.U = b.width; + b.T = b.height; + f = a.Pa; + M(f.jb, 0, 255, f.jb.length); + f = a.Qa; + x(null != f); + f.Cb = 0; + f.Bb = 0; + f.Fb = 1; + M(f.Zb, 0, 0, f.Zb.length); + M(f.Lb, 0, 0, f.Lb); + } + + if (g.ub > e) return T(a, 7, "bad partition length"); + f = a.m; + ma(f, c, d, g.ub); + d += g.ub; + e -= g.ub; + g.Rb && (h.Ld = G(f), h.Kd = G(f)); + h = a.Qa; + var k = a.Pa, + l; + x(null != f); + x(null != h); + h.Cb = G(f); + + if (h.Cb) { + h.Bb = G(f); + + if (G(f)) { + h.Fb = G(f); + + for (l = 0; 4 > l; ++l) { + h.Zb[l] = G(f) ? ca(f, 7) : 0; + } + + for (l = 0; 4 > l; ++l) { + h.Lb[l] = G(f) ? ca(f, 6) : 0; + } + } + + if (h.Bb) for (l = 0; 3 > l; ++l) { + k.jb[l] = G(f) ? na(f, 8) : 255; + } + } else h.Bb = 0; + + if (f.Ka) return T(a, 3, "cannot parse segment header"); + h = a.ed; + h.zd = G(f); + h.Tb = na(f, 6); + h.wb = na(f, 3); + h.Pc = G(f); + + if (h.Pc && G(f)) { + for (k = 0; 4 > k; ++k) { + G(f) && (h.vd[k] = ca(f, 6)); + } + + for (k = 0; 4 > k; ++k) { + G(f) && (h.od[k] = ca(f, 6)); + } + } + + a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2; + if (f.Ka) return T(a, 3, "cannot parse filter header"); + l = d; + var m = e; + e = l; + d = l + m; + h = m; + a.Xb = (1 << na(a.m, 2)) - 1; + k = a.Xb; + if (m < 3 * k) c = 7;else { + l += 3 * k; + h -= 3 * k; + + for (m = 0; m < k; ++m) { + var n = c[e + 0] | c[e + 1] << 8 | c[e + 2] << 16; + n > h && (n = h); + ma(a.Jc[+m], c, l, n); + l += n; + h -= n; + e += 3; + } + + ma(a.Jc[+k], c, l, h); + c = l < d ? 0 : 5; + } + if (0 != c) return T(a, c, "cannot parse partitions"); + l = a.m; + c = na(l, 7); + e = G(l) ? ca(l, 4) : 0; + d = G(l) ? ca(l, 4) : 0; + h = G(l) ? ca(l, 4) : 0; + k = G(l) ? ca(l, 4) : 0; + l = G(l) ? ca(l, 4) : 0; + m = a.Qa; + + for (n = 0; 4 > n; ++n) { + if (m.Cb) { + var r = m.Zb[n]; + m.Fb || (r += c); + } else if (0 < n) { + a.pb[n] = a.pb[0]; + continue; + } else r = c; + + var q = a.pb[n]; + q.Sc[0] = Lb[ga(r + e, 127)]; + q.Sc[1] = Mb[ga(r + 0, 127)]; + q.Eb[0] = 2 * Lb[ga(r + d, 127)]; + q.Eb[1] = 101581 * Mb[ga(r + h, 127)] >> 16; + 8 > q.Eb[1] && (q.Eb[1] = 8); + q.Qc[0] = Lb[ga(r + k, 117)]; + q.Qc[1] = Mb[ga(r + l, 127)]; + q.lc = r + l; + } + + if (!g.Rb) return T(a, 4, "Not a key frame."); + G(f); + g = a.Pa; + + for (c = 0; 4 > c; ++c) { + for (e = 0; 8 > e; ++e) { + for (d = 0; 3 > d; ++d) { + for (h = 0; 11 > h; ++h) { + k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h], g.Wc[c][e].Yb[d][h] = k; + } + } + } + + for (e = 0; 17 > e; ++e) { + g.Xc[c][e] = g.Wc[c][Ge[e]]; + } + } + + a.kc = G(f); + a.kc && (a.Bd = na(f, 8)); + return a.cb = 1; + } + + function De(a, b, c, d, e, f, g) { + var h = b[e].Yb[c]; + + for (c = 0; 16 > e; ++e) { + if (!K(a, h[c + 0])) return e; + + for (; !K(a, h[c + 1]);) { + if (h = b[++e].Yb[0], c = 0, 16 == e) return 16; + } + + var k = b[e + 1].Yb; + + if (K(a, h[c + 2])) { + var l = a, + m = h, + n = c; + var r = 0; + if (K(l, m[n + 3])) { + if (K(l, m[n + 6])) { + h = 0; + r = K(l, m[n + 8]); + m = K(l, m[n + 9 + r]); + n = 2 * r + m; + r = 0; + + for (m = He[n]; m[h]; ++h) { + r += r + K(l, m[h]); + } + + r += 3 + (8 << n); + } else K(l, m[n + 7]) ? (r = 7 + 2 * K(l, 165), r += K(l, 145)) : r = 5 + K(l, 159); + } else K(l, m[n + 4]) ? r = 3 + K(l, m[n + 5]) : r = 2; + h = k[2]; + } else r = 1, h = k[1]; + + k = g + Ie[e]; + l = a; + 0 > l.b && Qa(l); + var m = l.b, + n = l.Ca >> 1, + q = n - (l.I >> m) >> 31; + --l.b; + l.Ca += q; + l.Ca |= 1; + l.I -= (n + 1 & q) << m; + f[k] = ((r ^ q) - q) * d[(0 < e) + 0]; + } + + return 16; + } + + function Lc(a) { + var b = a.rb[a.sb - 1]; + b.la = 0; + b.Na = 0; + M(a.zc, 0, 0, a.zc.length); + a.ja = 0; + } + + function Je(a, b) { + for (a.M = 0; a.M < a.Va; ++a.M) { + var c = a.Jc[a.M & a.Xb], + d = a.m, + e = a, + f; + + for (f = 0; f < e.za; ++f) { + var g = d; + var h = e; + var k = h.Ac, + l = h.Bc + 4 * f, + m = h.zc, + n = h.ya[h.aa + f]; + h.Qa.Bb ? n.$b = K(g, h.Pa.jb[0]) ? 2 + K(g, h.Pa.jb[2]) : K(g, h.Pa.jb[1]) : n.$b = 0; + h.kc && (n.Ad = K(g, h.Bd)); + n.Za = !K(g, 145) + 0; + + if (n.Za) { + var r = n.Ob, + q = 0; + + for (h = 0; 4 > h; ++h) { + var t = m[0 + h]; + var v; + + for (v = 0; 4 > v; ++v) { + t = Ke[k[l + v]][t]; + + for (var p = Mc[K(g, t[0])]; 0 < p;) { + p = Mc[2 * p + K(g, t[p])]; + } + + t = -p; + k[l + v] = t; + } + + I(r, q, k, l, 4); + q += 4; + m[0 + h] = t; + } + } else t = K(g, 156) ? K(g, 128) ? 1 : 3 : K(g, 163) ? 2 : 0, n.Ob[0] = t, M(k, l, t, 4), M(m, 0, t, 4); + + n.Dd = K(g, 142) ? K(g, 114) ? K(g, 183) ? 1 : 3 : 2 : 0; + } + + if (e.m.Ka) return T(a, 7, "Premature end-of-partition0 encountered."); + + for (; a.ja < a.za; ++a.ja) { + d = a; + e = c; + g = d.rb[d.sb - 1]; + k = d.rb[d.sb + d.ja]; + f = d.ya[d.aa + d.ja]; + if (l = d.kc ? f.Ad : 0) g.la = k.la = 0, f.Za || (g.Na = k.Na = 0), f.Hc = 0, f.Gc = 0, f.ia = 0;else { + var u, + w, + g = k, + k = e, + l = d.Pa.Xc, + m = d.ya[d.aa + d.ja], + n = d.pb[m.$b]; + h = m.ad; + r = 0; + q = d.rb[d.sb - 1]; + t = v = 0; + M(h, r, 0, 384); + + if (m.Za) { + var y = 0; + var A = l[3]; + } else { + p = V(16); + var E = g.Na + q.Na; + E = oa(k, l[1], E, n.Eb, 0, p, 0); + g.Na = q.Na = (0 < E) + 0; + if (1 < E) Nc(p, 0, h, r);else { + var B = p[0] + 3 >> 3; + + for (p = 0; 256 > p; p += 16) { + h[r + p] = B; + } + } + y = 1; + A = l[0]; + } + + var C = g.la & 15; + var N = q.la & 15; + + for (p = 0; 4 > p; ++p) { + var z = N & 1; + + for (B = w = 0; 4 > B; ++B) { + E = z + (C & 1), E = oa(k, A, E, n.Sc, y, h, r), z = E > y, C = C >> 1 | z << 7, w = w << 2 | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0]), r += 16; + } + + C >>= 4; + N = N >> 1 | z << 7; + v = (v << 8 | w) >>> 0; + } + + A = C; + y = N >> 4; + + for (u = 0; 4 > u; u += 2) { + w = 0; + C = g.la >> 4 + u; + N = q.la >> 4 + u; + + for (p = 0; 2 > p; ++p) { + z = N & 1; + + for (B = 0; 2 > B; ++B) { + E = z + (C & 1), E = oa(k, l[2], E, n.Qc, 0, h, r), z = 0 < E, C = C >> 1 | z << 3, w = w << 2 | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0]), r += 16; + } + + C >>= 2; + N = N >> 1 | z << 5; + } + + t |= w << 4 * u; + A |= C << 4 << u; + y |= (N & 240) << u; + } + + g.la = A; + q.la = y; + m.Hc = v; + m.Gc = t; + m.ia = t & 43690 ? 0 : n.ia; + l = !(v | t); + } + 0 < d.L && (d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za], d.wa[d.Y + d.ja].La |= !l); + if (e.Ka) return T(a, 7, "Premature end-of-file encountered."); + } + + Lc(a); + c = a; + d = b; + e = 1; + f = c.D; + g = 0 < c.L && c.M >= c.zb && c.M <= c.Va; + if (0 == c.Aa) a: { + f.M = c.M, f.uc = g, Oc(c, f), e = 1; + w = c.D; + f = w.Nb; + t = Ya[c.L]; + g = t * c.R; + k = t / 2 * c.B; + p = 16 * f * c.R; + B = 8 * f * c.B; + l = c.sa; + m = c.ta - g + p; + n = c.qa; + h = c.ra - k + B; + r = c.Ha; + q = c.Ia - k + B; + C = w.M; + N = 0 == C; + v = C >= c.Va - 1; + 2 == c.Aa && Oc(c, w); + if (w.uc) for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) { + var Q = E; + y = w; + A = z; + var S = Q.D, + D = S.Nb; + u = Q.R; + var S = S.wa[S.Y + y], + F = Q.sa, + H = Q.ta + 16 * D * u + 16 * y, + J = S.dd, + G = S.tc; + if (0 != G) if (x(3 <= G), 1 == Q.L) 0 < y && Pc(F, H, u, G + 4), S.La && Qc(F, H, u, G), 0 < A && Rc(F, H, u, G + 4), S.La && Sc(F, H, u, G);else { + var L = Q.B, + O = Q.qa, + P = Q.ra + 8 * D * L + 8 * y, + R = Q.Ha, + Q = Q.Ia + 8 * D * L + 8 * y, + D = S.ld; + 0 < y && (Tc(F, H, u, G + 4, J, D), Uc(O, P, R, Q, L, G + 4, J, D)); + S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D)); + 0 < A && (Xc(F, H, u, G + 4, J, D), Yc(O, P, R, Q, L, G + 4, J, D)); + S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D)); + } + } + c.ia && alert("todo:DitherRow"); + + if (null != d.put) { + w = 16 * C; + C = 16 * (C + 1); + N ? (d.y = c.sa, d.O = c.ta + p, d.f = c.qa, d.N = c.ra + B, d.ea = c.Ha, d.W = c.Ia + B) : (w -= t, d.y = l, d.O = m, d.f = n, d.N = h, d.ea = r, d.W = q); + v || (C -= t); + C > d.o && (C = d.o); + d.F = null; + d.J = null; + + if (null != c.Fa && 0 < c.Fa.length && w < C && (d.J = Le(c, d, w, C - w), d.F = c.mb, null == d.F && 0 == d.F.length)) { + e = T(c, 3, "Could not decode alpha data."); + break a; + } + + w < d.j && (t = d.j - w, w = d.j, x(!(t & 1)), d.O += c.R * t, d.N += c.B * (t >> 1), d.W += c.B * (t >> 1), null != d.F && (d.J += d.width * t)); + w < C && (d.O += d.v, d.N += d.v >> 1, d.W += d.v >> 1, null != d.F && (d.J += d.v), d.ka = w - d.j, d.U = d.va - d.v, d.T = C - w, e = d.put(d)); + } + + f + 1 != c.Ic || v || (I(c.sa, c.ta - g, l, m + 16 * c.R, g), I(c.qa, c.ra - k, n, h + 8 * c.B, k), I(c.Ha, c.Ia - k, r, q + 8 * c.B, k)); + } + if (!e) return T(a, 6, "Output aborted."); + } + + return 1; + } + + function Me(a, b) { + if (null == a) return 0; + if (null == b) return T(a, 2, "NULL VP8Io parameter in VP8Decode()."); + if (!a.cb && !Kc(a, b)) return 0; + x(a.cb); + + if (null == b.ac || b.ac(b)) { + b.ob && (a.L = 0); + var c = Ya[a.L]; + 2 == a.L ? (a.yb = 0, a.zb = 0) : (a.yb = b.v - c >> 4, a.zb = b.j - c >> 4, 0 > a.yb && (a.yb = 0), 0 > a.zb && (a.zb = 0)); + a.Va = b.o + 15 + c >> 4; + a.Hb = b.va + 15 + c >> 4; + a.Hb > a.za && (a.Hb = a.za); + a.Va > a.Ub && (a.Va = a.Ub); + + if (0 < a.L) { + var d = a.ed; + + for (c = 0; 4 > c; ++c) { + var e; + + if (a.Qa.Cb) { + var f = a.Qa.Lb[c]; + a.Qa.Fb || (f += d.Tb); + } else f = d.Tb; + + for (e = 0; 1 >= e; ++e) { + var g = a.gd[c][e], + h = f; + d.Pc && (h += d.vd[0], e && (h += d.od[0])); + h = 0 > h ? 0 : 63 < h ? 63 : h; + + if (0 < h) { + var k = h; + 0 < d.wb && (k = 4 < d.wb ? k >> 2 : k >> 1, k > 9 - d.wb && (k = 9 - d.wb)); + 1 > k && (k = 1); + g.dd = k; + g.tc = 2 * h + k; + g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0; + } else g.tc = 0; + + g.La = e; + } + } + } + + c = 0; + } else T(a, 6, "Frame setup failed"), c = a.a; + + if (c = 0 == c) { + if (c) { + a.$c = 0; + 0 < a.Aa || (a.Ic = Ne); + + b: { + c = a.Ic; + var k = a.za, + d = 4 * k, + l = 32 * k, + m = k + 1, + n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0, + r = (2 == a.Aa ? 2 : 1) * k; + e = 3 * (16 * c + Ya[a.L]) / 2 * l; + f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0; + g = d + 832 + e + f; + if (g != g) c = 0;else { + if (g > a.Vb) { + a.Vb = 0; + a.Ec = V(g); + a.Fc = 0; + + if (null == a.Ec) { + c = T(a, 1, "no memory during frame initialization."); + break b; + } + + a.Vb = g; + } + + g = a.Ec; + h = a.Fc; + a.Ac = g; + a.Bc = h; + h += d; + a.Gd = wa(l, Ic); + a.Hd = 0; + a.rb = wa(m + 1, Hc); + a.sb = 1; + a.wa = n ? wa(n, Xa) : null; + a.Y = 0; + a.D.Nb = 0; + a.D.wa = a.wa; + a.D.Y = a.Y; + 0 < a.Aa && (a.D.Y += k); + x(!0); + a.oc = g; + a.pc = h; + h += 832; + a.ya = wa(r, Kb); + a.aa = 0; + a.D.ya = a.ya; + a.D.aa = a.aa; + 2 == a.Aa && (a.D.aa += k); + a.R = 16 * k; + a.B = 8 * k; + l = Ya[a.L]; + k = l * a.R; + l = l / 2 * a.B; + a.sa = g; + a.ta = h + k; + a.qa = a.sa; + a.ra = a.ta + 16 * c * a.R + l; + a.Ha = a.qa; + a.Ia = a.ra + 8 * c * a.B + l; + a.$c = 0; + h += e; + a.mb = f ? g : null; + a.nb = f ? h : null; + x(h + f <= a.Fc + a.Vb); + Lc(a); + M(a.Ac, a.Bc, 0, d); + c = 1; + } + } + + if (c) { + b.ka = 0; + b.y = a.sa; + b.O = a.ta; + b.f = a.qa; + b.N = a.ra; + b.ea = a.Ha; + b.Vd = a.Ia; + b.fa = a.R; + b.Rc = a.B; + b.F = null; + b.J = 0; + + if (!ad) { + for (c = -255; 255 >= c; ++c) { + bd[255 + c] = 0 > c ? -c : c; + } + + for (c = -1020; 1020 >= c; ++c) { + cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c; + } + + for (c = -112; 112 >= c; ++c) { + dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c; + } + + for (c = -255; 510 >= c; ++c) { + ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c; + } + + ad = 1; + } + + Nc = Oe; + Za = Pe; + Nb = Qe; + pa = Re; + Ob = Se; + fd = Te; + Xc = Ue; + Tc = Ve; + Yc = We; + Uc = Xe; + Zc = Ye; + Vc = Ze; + $c = $e; + Wc = af; + Rc = gd; + Pc = hd; + Sc = bf; + Qc = cf; + W[0] = df; + W[1] = ef; + W[2] = ff; + W[3] = gf; + W[4] = hf; + W[5] = jf; + W[6] = kf; + W[7] = lf; + W[8] = mf; + W[9] = nf; + Y[0] = of; + Y[1] = pf; + Y[2] = qf; + Y[3] = rf; + Y[4] = sf; + Y[5] = tf; + Y[6] = uf; + ka[0] = vf; + ka[1] = wf; + ka[2] = xf; + ka[3] = yf; + ka[4] = zf; + ka[5] = Af; + ka[6] = Bf; + c = 1; + } else c = 0; + } + + c && (c = Je(a, b)); + null != b.bc && b.bc(b); + c &= 1; + } + + if (!c) return 0; + a.cb = 0; + return c; + } + + function qa(a, b, c, d, e) { + e = a[b + c + 32 * d] + (e >> 3); + a[b + c + 32 * d] = e & -256 ? 0 > e ? 0 : 255 : e; + } + + function kb(a, b, c, d, e, f) { + qa(a, b, 0, c, d + e); + qa(a, b, 1, c, d + f); + qa(a, b, 2, c, d - f); + qa(a, b, 3, c, d - e); + } + + function da(a) { + return (20091 * a >> 16) + a; + } + + function id(a, b, c, d) { + var e = 0, + f; + var g = V(16); + + for (f = 0; 4 > f; ++f) { + var h = a[b + 0] + a[b + 8]; + var k = a[b + 0] - a[b + 8]; + var l = (35468 * a[b + 4] >> 16) - da(a[b + 12]); + var m = da(a[b + 4]) + (35468 * a[b + 12] >> 16); + g[e + 0] = h + m; + g[e + 1] = k + l; + g[e + 2] = k - l; + g[e + 3] = h - m; + e += 4; + b++; + } + + for (f = e = 0; 4 > f; ++f) { + a = g[e + 0] + 4, h = a + g[e + 8], k = a - g[e + 8], l = (35468 * g[e + 4] >> 16) - da(g[e + 12]), m = da(g[e + 4]) + (35468 * g[e + 12] >> 16), qa(c, d, 0, 0, h + m), qa(c, d, 1, 0, k + l), qa(c, d, 2, 0, k - l), qa(c, d, 3, 0, h - m), e++, d += 32; + } + } + + function Te(a, b, c, d) { + var e = a[b + 0] + 4, + f = 35468 * a[b + 4] >> 16, + g = da(a[b + 4]), + h = 35468 * a[b + 1] >> 16; + a = da(a[b + 1]); + kb(c, d, 0, e + g, a, h); + kb(c, d, 1, e + f, a, h); + kb(c, d, 2, e - f, a, h); + kb(c, d, 3, e - g, a, h); + } + + function Pe(a, b, c, d, e) { + id(a, b, c, d); + e && id(a, b + 16, c, d + 4); + } + + function Qe(a, b, c, d) { + Za(a, b + 0, c, d, 1); + Za(a, b + 32, c, d + 128, 1); + } + + function Re(a, b, c, d) { + a = a[b + 0] + 4; + var e; + + for (e = 0; 4 > e; ++e) { + for (b = 0; 4 > b; ++b) { + qa(c, d, b, e, a); + } + } + } + + function Se(a, b, c, d) { + a[b + 0] && pa(a, b + 0, c, d); + a[b + 16] && pa(a, b + 16, c, d + 4); + a[b + 32] && pa(a, b + 32, c, d + 128); + a[b + 48] && pa(a, b + 48, c, d + 128 + 4); + } + + function Oe(a, b, c, d) { + var e = V(16), + f; + + for (f = 0; 4 > f; ++f) { + var g = a[b + 0 + f] + a[b + 12 + f]; + var h = a[b + 4 + f] + a[b + 8 + f]; + var k = a[b + 4 + f] - a[b + 8 + f]; + var l = a[b + 0 + f] - a[b + 12 + f]; + e[0 + f] = g + h; + e[8 + f] = g - h; + e[4 + f] = l + k; + e[12 + f] = l - k; + } + + for (f = 0; 4 > f; ++f) { + a = e[0 + 4 * f] + 3, g = a + e[3 + 4 * f], h = e[1 + 4 * f] + e[2 + 4 * f], k = e[1 + 4 * f] - e[2 + 4 * f], l = a - e[3 + 4 * f], c[d + 0] = g + h >> 3, c[d + 16] = l + k >> 3, c[d + 32] = g - h >> 3, c[d + 48] = l - k >> 3, d += 64; + } + } + + function Pb(a, b, c) { + var d = b - 32, + e = R, + f = 255 - a[d - 1], + g; + + for (g = 0; g < c; ++g) { + var h = e, + k = f + a[b - 1], + l; + + for (l = 0; l < c; ++l) { + a[b + l] = h[k + a[d + l]]; + } + + b += 32; + } + } + + function ef(a, b) { + Pb(a, b, 4); + } + + function wf(a, b) { + Pb(a, b, 8); + } + + function pf(a, b) { + Pb(a, b, 16); + } + + function qf(a, b) { + var c; + + for (c = 0; 16 > c; ++c) { + I(a, b + 32 * c, a, b - 32, 16); + } + } + + function rf(a, b) { + var c; + + for (c = 16; 0 < c; --c) { + M(a, b, a[b - 1], 16), b += 32; + } + } + + function $a(a, b, c) { + var d; + + for (d = 0; 16 > d; ++d) { + M(b, c + 32 * d, a, 16); + } + } + + function of(a, b) { + var c = 16, + d; + + for (d = 0; 16 > d; ++d) { + c += a[b - 1 + 32 * d] + a[b + d - 32]; + } + + $a(c >> 5, a, b); + } + + function sf(a, b) { + var c = 8, + d; + + for (d = 0; 16 > d; ++d) { + c += a[b - 1 + 32 * d]; + } + + $a(c >> 4, a, b); + } + + function tf(a, b) { + var c = 8, + d; + + for (d = 0; 16 > d; ++d) { + c += a[b + d - 32]; + } + + $a(c >> 4, a, b); + } + + function uf(a, b) { + $a(128, a, b); + } + + function z(a, b, c) { + return a + 2 * b + c + 2 >> 2; + } + + function ff(a, b) { + var c = b - 32, + c = new Uint8Array([z(a[c - 1], a[c + 0], a[c + 1]), z(a[c + 0], a[c + 1], a[c + 2]), z(a[c + 1], a[c + 2], a[c + 3]), z(a[c + 2], a[c + 3], a[c + 4])]), + d; + + for (d = 0; 4 > d; ++d) { + I(a, b + 32 * d, c, 0, c.length); + } + } + + function gf(a, b) { + var c = a[b - 1], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96]; + ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d)); + ra(a, b + 32, 16843009 * z(c, d, e)); + ra(a, b + 64, 16843009 * z(d, e, f)); + ra(a, b + 96, 16843009 * z(e, f, f)); + } + + function df(a, b) { + var c = 4, + d; + + for (d = 0; 4 > d; ++d) { + c += a[b + d - 32] + a[b - 1 + 32 * d]; + } + + c >>= 3; + + for (d = 0; 4 > d; ++d) { + M(a, b + 32 * d, c, 4); + } + } + + function hf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 - 32], + g = a[b + 0 - 32], + h = a[b + 1 - 32], + k = a[b + 2 - 32], + l = a[b + 3 - 32]; + a[b + 0 + 96] = z(d, e, a[b - 1 + 96]); + a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e); + a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d); + a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c); + a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f); + a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g); + a[b + 3 + 0] = z(l, k, h); + } + + function kf(a, b) { + var c = a[b + 1 - 32], + d = a[b + 2 - 32], + e = a[b + 3 - 32], + f = a[b + 4 - 32], + g = a[b + 5 - 32], + h = a[b + 6 - 32], + k = a[b + 7 - 32]; + a[b + 0 + 0] = z(a[b + 0 - 32], c, d); + a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e); + a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f); + a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g); + a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h); + a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k); + a[b + 3 + 96] = z(h, k, k); + } + + function jf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 - 32], + g = a[b + 0 - 32], + h = a[b + 1 - 32], + k = a[b + 2 - 32], + l = a[b + 3 - 32]; + a[b + 0 + 0] = a[b + 1 + 64] = f + g + 1 >> 1; + a[b + 1 + 0] = a[b + 2 + 64] = g + h + 1 >> 1; + a[b + 2 + 0] = a[b + 3 + 64] = h + k + 1 >> 1; + a[b + 3 + 0] = k + l + 1 >> 1; + a[b + 0 + 96] = z(e, d, c); + a[b + 0 + 64] = z(d, c, f); + a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g); + a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h); + a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k); + a[b + 3 + 32] = z(h, k, l); + } + + function lf(a, b) { + var c = a[b + 0 - 32], + d = a[b + 1 - 32], + e = a[b + 2 - 32], + f = a[b + 3 - 32], + g = a[b + 4 - 32], + h = a[b + 5 - 32], + k = a[b + 6 - 32], + l = a[b + 7 - 32]; + a[b + 0 + 0] = c + d + 1 >> 1; + a[b + 1 + 0] = a[b + 0 + 64] = d + e + 1 >> 1; + a[b + 2 + 0] = a[b + 1 + 64] = e + f + 1 >> 1; + a[b + 3 + 0] = a[b + 2 + 64] = f + g + 1 >> 1; + a[b + 0 + 32] = z(c, d, e); + a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f); + a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g); + a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h); + a[b + 3 + 64] = z(g, h, k); + a[b + 3 + 96] = z(h, k, l); + } + + function nf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96]; + a[b + 0 + 0] = c + d + 1 >> 1; + a[b + 2 + 0] = a[b + 0 + 32] = d + e + 1 >> 1; + a[b + 2 + 32] = a[b + 0 + 64] = e + f + 1 >> 1; + a[b + 1 + 0] = z(c, d, e); + a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f); + a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f); + a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[b + 2 + 96] = a[b + 3 + 96] = f; + } + + function mf(a, b) { + var c = a[b - 1 + 0], + d = a[b - 1 + 32], + e = a[b - 1 + 64], + f = a[b - 1 + 96], + g = a[b - 1 - 32], + h = a[b + 0 - 32], + k = a[b + 1 - 32], + l = a[b + 2 - 32]; + a[b + 0 + 0] = a[b + 2 + 32] = c + g + 1 >> 1; + a[b + 0 + 32] = a[b + 2 + 64] = d + c + 1 >> 1; + a[b + 0 + 64] = a[b + 2 + 96] = e + d + 1 >> 1; + a[b + 0 + 96] = f + e + 1 >> 1; + a[b + 3 + 0] = z(h, k, l); + a[b + 2 + 0] = z(g, h, k); + a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h); + a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g); + a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c); + a[b + 1 + 96] = z(f, e, d); + } + + function xf(a, b) { + var c; + + for (c = 0; 8 > c; ++c) { + I(a, b + 32 * c, a, b - 32, 8); + } + } + + function yf(a, b) { + var c; + + for (c = 0; 8 > c; ++c) { + M(a, b, a[b - 1], 8), b += 32; + } + } + + function lb(a, b, c) { + var d; + + for (d = 0; 8 > d; ++d) { + M(b, c + 32 * d, a, 8); + } + } + + function vf(a, b) { + var c = 8, + d; + + for (d = 0; 8 > d; ++d) { + c += a[b + d - 32] + a[b - 1 + 32 * d]; + } + + lb(c >> 4, a, b); + } + + function Af(a, b) { + var c = 4, + d; + + for (d = 0; 8 > d; ++d) { + c += a[b + d - 32]; + } + + lb(c >> 3, a, b); + } + + function zf(a, b) { + var c = 4, + d; + + for (d = 0; 8 > d; ++d) { + c += a[b - 1 + 32 * d]; + } + + lb(c >> 3, a, b); + } + + function Bf(a, b) { + lb(128, a, b); + } + + function ab(a, b, c) { + var d = a[b - c], + e = a[b + 0], + f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]], + g = mb[112 + (f + 4 >> 3)]; + a[b - c] = R[255 + d + mb[112 + (f + 3 >> 3)]]; + a[b + 0] = R[255 + e - g]; + } + + function jd(a, b, c, d) { + var e = a[b + 0], + f = a[b + c]; + return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d; + } + + function kd(a, b, c, d) { + return 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d; + } + + function ld(a, b, c, d, e) { + var f = a[b - 3 * c], + g = a[b - 2 * c], + h = a[b - c], + k = a[b + 0], + l = a[b + c], + m = a[b + 2 * c], + n = a[b + 3 * c]; + return 4 * U[255 + h - k] + U[255 + g - l] > d ? 0 : U[255 + a[b - 4 * c] - f] <= e && U[255 + f - g] <= e && U[255 + g - h] <= e && U[255 + n - m] <= e && U[255 + m - l] <= e && U[255 + l - k] <= e; + } + + function gd(a, b, c, d) { + var e = 2 * d + 1; + + for (d = 0; 16 > d; ++d) { + kd(a, b + d, c, e) && ab(a, b + d, c); + } + } + + function hd(a, b, c, d) { + var e = 2 * d + 1; + + for (d = 0; 16 > d; ++d) { + kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1); + } + } + + function bf(a, b, c, d) { + var e; + + for (e = 3; 0 < e; --e) { + b += 4 * c, gd(a, b, c, d); + } + } + + function cf(a, b, c, d) { + var e; + + for (e = 3; 0 < e; --e) { + b += 4, hd(a, b, c, d); + } + } + + function ea(a, b, c, d, e, f, g, h) { + for (f = 2 * f + 1; 0 < e--;) { + if (ld(a, b, c, f, g)) if (jd(a, b, c, h)) ab(a, b, c);else { + var k = a, + l = b, + m = c, + n = k[l - 2 * m], + r = k[l - m], + q = k[l + 0], + t = k[l + m], + v = k[l + 2 * m], + p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]], + u = 27 * p + 63 >> 7, + w = 18 * p + 63 >> 7, + p = 9 * p + 63 >> 7; + k[l - 3 * m] = R[255 + k[l - 3 * m] + p]; + k[l - 2 * m] = R[255 + n + w]; + k[l - m] = R[255 + r + u]; + k[l + 0] = R[255 + q - u]; + k[l + m] = R[255 + t - w]; + k[l + 2 * m] = R[255 + v - p]; + } + b += d; + } + } + + function Fa(a, b, c, d, e, f, g, h) { + for (f = 2 * f + 1; 0 < e--;) { + if (ld(a, b, c, f, g)) if (jd(a, b, c, h)) ab(a, b, c);else { + var k = a, + l = b, + m = c, + n = k[l - m], + r = k[l + 0], + q = k[l + m], + t = 3 * (r - n), + v = mb[112 + (t + 4 >> 3)], + t = mb[112 + (t + 3 >> 3)], + p = v + 1 >> 1; + k[l - 2 * m] = R[255 + k[l - 2 * m] + p]; + k[l - m] = R[255 + n + t]; + k[l + 0] = R[255 + r - v]; + k[l + m] = R[255 + q - p]; + } + b += d; + } + } + + function Ue(a, b, c, d, e, f) { + ea(a, b, c, 1, 16, d, e, f); + } + + function Ve(a, b, c, d, e, f) { + ea(a, b, 1, c, 16, d, e, f); + } + + function Ye(a, b, c, d, e, f) { + var g; + + for (g = 3; 0 < g; --g) { + b += 4 * c, Fa(a, b, c, 1, 16, d, e, f); + } + } + + function Ze(a, b, c, d, e, f) { + var g; + + for (g = 3; 0 < g; --g) { + b += 4, Fa(a, b, 1, c, 16, d, e, f); + } + } + + function We(a, b, c, d, e, f, g, h) { + ea(a, b, e, 1, 8, f, g, h); + ea(c, d, e, 1, 8, f, g, h); + } + + function Xe(a, b, c, d, e, f, g, h) { + ea(a, b, 1, e, 8, f, g, h); + ea(c, d, 1, e, 8, f, g, h); + } + + function $e(a, b, c, d, e, f, g, h) { + Fa(a, b + 4 * e, e, 1, 8, f, g, h); + Fa(c, d + 4 * e, e, 1, 8, f, g, h); + } + + function af(a, b, c, d, e, f, g, h) { + Fa(a, b + 4, 1, e, 8, f, g, h); + Fa(c, d + 4, 1, e, 8, f, g, h); + } + + function Cf() { + this.ba = new Cb(); + this.ec = []; + this.cc = []; + this.Mc = []; + this.Dc = this.Nc = this.dc = this.fc = 0; + this.Oa = new Ud(); + this.memory = 0; + this.Ib = "OutputFunc"; + this.Jb = "OutputAlphaFunc"; + this.Nd = "OutputRowFunc"; + } + + function md() { + this.data = []; + this.offset = this.kd = this.ha = this.w = 0; + this.na = []; + this.xa = this.gb = this.Ja = this.Sa = this.P = 0; + } + + function Df() { + this.nc = this.Ea = this.b = this.hc = 0; + this.K = []; + this.w = 0; + } + + function Ef() { + this.ua = 0; + this.Wa = new ac(); + this.vb = new ac(); + this.md = this.xc = this.wc = 0; + this.vc = []; + this.Wb = 0; + this.Ya = new Ub(); + this.yc = new O(); + } + + function je() { + this.xb = this.a = 0; + this.l = new Oa(); + this.ca = new Cb(); + this.V = []; + this.Ba = 0; + this.Ta = []; + this.Ua = 0; + this.m = new Ra(); + this.Pb = 0; + this.wd = new Ra(); + this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0; + this.s = new Ef(); + this.ab = 0; + this.gc = wa(4, Df); + this.Oc = 0; + } + + function Ff() { + this.Lc = this.Z = this.$a = this.i = this.c = 0; + this.l = new Oa(); + this.ic = 0; + this.ca = []; + this.tb = 0; + this.qd = null; + this.rd = 0; + } + + function Rb(a, b, c, d, e, f, g) { + a = null == a ? 0 : a[b + 0]; + + for (b = 0; b < g; ++b) { + e[f + b] = a + c[d + b] & 255, a = e[f + b]; + } + } + + function Gf(a, b, c, d, e, f, g) { + if (null == a) Rb(null, null, c, d, e, f, g);else { + var h; + + for (h = 0; h < g; ++h) { + e[f + h] = a[b + h] + c[d + h] & 255; + } + } + } + + function Hf(a, b, c, d, e, f, g) { + if (null == a) Rb(null, null, c, d, e, f, g);else { + var h = a[b + 0], + k = h, + l = h, + m; + + for (m = 0; m < g; ++m) { + h = a[b + m], k = l + h - k, l = c[d + m] + (k & -256 ? 0 > k ? 0 : 255 : k) & 255, k = h, e[f + m] = l; + } + } + } + + function Le(a, b, c, d) { + var e = b.width, + f = b.o; + x(null != a && null != b); + if (0 > c || 0 >= d || c + d > f) return null; + + if (!a.Cc) { + if (null == a.ga) { + a.ga = new Ff(); + var g; + (g = null == a.ga) || (g = b.width * b.o, x(0 == a.Gb.length), a.Gb = V(g), a.Uc = 0, null == a.Gb ? g = 0 : (a.mb = a.Gb, a.nb = a.Uc, a.rc = null, g = 1), g = !g); + + if (!g) { + g = a.ga; + var h = a.Fa, + k = a.P, + l = a.qc, + m = a.mb, + n = a.nb, + r = k + 1, + q = l - 1, + t = g.l; + x(null != h && null != m && null != b); + ia[0] = null; + ia[1] = Rb; + ia[2] = Gf; + ia[3] = Hf; + g.ca = m; + g.tb = n; + g.c = b.width; + g.i = b.height; + x(0 < g.c && 0 < g.i); + if (1 >= l) b = 0;else if (g.$a = h[k + 0] >> 0 & 3, g.Z = h[k + 0] >> 2 & 3, g.Lc = h[k + 0] >> 4 & 3, k = h[k + 0] >> 6 & 3, 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k) b = 0;else if (t.put = kc, t.ac = gc, t.bc = lc, t.ma = g, t.width = b.width, t.height = b.height, t.Da = b.Da, t.v = b.v, t.va = b.va, t.j = b.j, t.o = b.o, g.$a) b: { + x(1 == g.$a), b = Bc(); + + c: for (;;) { + if (null == b) { + b = 0; + break b; + } + + x(null != g); + g.mc = b; + b.c = g.c; + b.i = g.i; + b.l = g.l; + b.l.ma = g; + b.l.width = g.c; + b.l.height = g.i; + b.a = 0; + cb(b.m, h, r, q); + if (!rb(g.c, g.i, 1, b, null)) break c; + 1 == b.ab && 3 == b.gc[0].hc && yc(b.s) ? (g.ic = 1, h = b.c * b.i, b.Ta = null, b.Ua = 0, b.V = V(h), b.Ba = 0, null == b.V ? (b.a = 1, b = 0) : b = 1) : (g.ic = 0, b = Ec(b, g.c)); + if (!b) break c; + b = 1; + break b; + } + + g.mc = null; + b = 0; + } else b = q >= g.c * g.i; + g = !b; + } + + if (g) return null; + 1 != a.ga.Lc ? a.Ga = 0 : d = f - c; + } + + x(null != a.ga); + x(c + d <= f); + + a: { + h = a.ga; + b = h.c; + f = h.l.o; + + if (0 == h.$a) { + r = a.rc; + q = a.Vc; + t = a.Fa; + k = a.P + 1 + c * b; + l = a.mb; + m = a.nb + c * b; + x(k <= a.P + a.qc); + if (0 != h.Z) for (x(null != ia[h.Z]), g = 0; g < d; ++g) { + ia[h.Z](r, q, t, k, l, m, b), r = l, q = m, m += b, k += b; + } else for (g = 0; g < d; ++g) { + I(l, m, t, k, b), r = l, q = m, m += b, k += b; + } + a.rc = r; + a.Vc = q; + } else { + x(null != h.mc); + b = c + d; + g = h.mc; + x(null != g); + x(b <= g.i); + if (g.C >= b) b = 1;else if (h.ic || Aa(), h.ic) { + var h = g.V, + r = g.Ba, + q = g.c, + v = g.i, + t = 1, + k = g.$ / q, + l = g.$ % q, + m = g.m, + n = g.s, + p = g.$, + u = q * v, + w = q * b, + y = n.wc, + A = p < w ? ha(n, l, k) : null; + x(p <= u); + x(b <= v); + x(yc(n)); + + c: for (;;) { + for (; !m.h && p < w;) { + l & y || (A = ha(n, l, k)); + x(null != A); + Sa(m); + v = ua(A.G[0], A.H[0], m); + if (256 > v) h[r + p] = v, ++p, ++l, l >= q && (l = 0, ++k, k <= b && !(k % 16) && Ib(g, k));else if (280 > v) { + var v = ib(v - 256, m); + var E = ua(A.G[4], A.H[4], m); + Sa(m); + E = ib(E, m); + E = nc(q, E); + + if (p >= E && u - p >= v) { + var B; + + for (B = 0; B < v; ++B) { + h[r + p + B] = h[r + p + B - E]; + } + } else { + t = 0; + break c; + } + + p += v; + + for (l += v; l >= q;) { + l -= q, ++k, k <= b && !(k % 16) && Ib(g, k); + } + + p < w && l & y && (A = ha(n, l, k)); + } else { + t = 0; + break c; + } + x(m.h == db(m)); + } + + Ib(g, k > b ? b : k); + break c; + } + + !t || m.h && p < u ? (t = 0, g.a = m.h ? 5 : 3) : g.$ = p; + b = t; + } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se); + + if (!b) { + d = 0; + break a; + } + } + + c + d >= f && (a.Cc = 1); + d = 1; + } + + if (!d) return null; + if (a.Cc && (d = a.ga, null != d && (d.mc = null), a.ga = null, 0 < a.Ga)) return alert("todo:WebPDequantizeLevels"), null; + } + + return a.nb + c * e; + } + + function If(a, b, c, d, e, f) { + for (; 0 < e--;) { + var g = a, + h = b + (c ? 1 : 0), + k = a, + l = b + (c ? 0 : 3), + m; + + for (m = 0; m < d; ++m) { + var n = k[l + 4 * m]; + 255 != n && (n *= 32897, g[h + 4 * m + 0] = g[h + 4 * m + 0] * n >> 23, g[h + 4 * m + 1] = g[h + 4 * m + 1] * n >> 23, g[h + 4 * m + 2] = g[h + 4 * m + 2] * n >> 23); + } + + b += f; + } + } + + function Jf(a, b, c, d, e) { + for (; 0 < d--;) { + var f; + + for (f = 0; f < c; ++f) { + var g = a[b + 2 * f + 0], + h = a[b + 2 * f + 1], + k = h & 15, + l = 4369 * k, + h = (h & 240 | h >> 4) * l >> 16; + a[b + 2 * f + 0] = (g & 240 | g >> 4) * l >> 16 & 240 | (g & 15 | g << 4) * l >> 16 >> 4 & 15; + a[b + 2 * f + 1] = h & 240 | k; + } + + b += e; + } + } + + function Kf(a, b, c, d, e, f, g, h) { + var k = 255, + l, + m; + + for (m = 0; m < e; ++m) { + for (l = 0; l < d; ++l) { + var n = a[b + l]; + f[g + 4 * l] = n; + k &= n; + } + + b += c; + g += h; + } + + return 255 != k; + } + + function Lf(a, b, c, d, e) { + var f; + + for (f = 0; f < e; ++f) { + c[d + f] = a[b + f] >> 8; + } + } + + function Aa() { + za = If; + vc = Jf; + fc = Kf; + Fc = Lf; + } + + function va(a, b, c) { + self[a] = function (a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) { + var d, + E = y - 1 >> 1; + var B = h[k + 0] | l[m + 0] << 16; + var C = n[r + 0] | q[t + 0] << 16; + x(null != a); + var z = 3 * B + C + 131074 >> 2; + b(a[e + 0], z & 255, z >> 16, v, p); + null != f && (z = 3 * C + B + 131074 >> 2, b(f[g + 0], z & 255, z >> 16, u, w)); + + for (d = 1; d <= E; ++d) { + var D = h[k + d] | l[m + d] << 16; + var G = n[r + d] | q[t + d] << 16; + var F = B + D + C + G + 524296; + var H = F + 2 * (D + C) >> 3; + F = F + 2 * (B + G) >> 3; + z = H + B >> 1; + B = F + D >> 1; + b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c); + b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c); + null != f && (z = F + C >> 1, B = H + G >> 1, b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c), b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c)); + B = D; + C = G; + } + + y & 1 || (z = 3 * B + C + 131074 >> 2, b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c), null != f && (z = 3 * C + B + 131074 >> 2, b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c))); + }; + } + + function ic() { + P[Ca] = Mf; + P[Ua] = nd; + P[tc] = Nf; + P[Va] = od; + P[ya] = pd; + P[Db] = qd; + P[wc] = Of; + P[zb] = nd; + P[Ab] = od; + P[Ja] = pd; + P[Bb] = qd; + } + + function Sb(a) { + return a & ~Pf ? 0 > a ? 0 : 255 : a >> rd; + } + + function bb(a, b) { + return Sb((19077 * a >> 8) + (26149 * b >> 8) - 14234); + } + + function nb(a, b, c) { + return Sb((19077 * a >> 8) - (6419 * b >> 8) - (13320 * c >> 8) + 8708); + } + + function Pa(a, b) { + return Sb((19077 * a >> 8) + (33050 * b >> 8) - 17685); + } + + function Ga(a, b, c, d, e) { + d[e + 0] = bb(a, c); + d[e + 1] = nb(a, b, c); + d[e + 2] = Pa(a, b); + } + + function Tb(a, b, c, d, e) { + d[e + 0] = Pa(a, b); + d[e + 1] = nb(a, b, c); + d[e + 2] = bb(a, c); + } + + function sd(a, b, c, d, e) { + var f = nb(a, b, c); + b = f << 3 & 224 | Pa(a, b) >> 3; + d[e + 0] = bb(a, c) & 248 | f >> 5; + d[e + 1] = b; + } + + function td(a, b, c, d, e) { + var f = Pa(a, b) & 240 | 15; + d[e + 0] = bb(a, c) & 240 | nb(a, b, c) >> 4; + d[e + 1] = f; + } + + function ud(a, b, c, d, e) { + d[e + 0] = 255; + Ga(a, b, c, d, e + 1); + } + + function vd(a, b, c, d, e) { + Tb(a, b, c, d, e); + d[e + 3] = 255; + } + + function wd(a, b, c, d, e) { + Ga(a, b, c, d, e); + d[e + 3] = 255; + } + + function ga(a, b) { + return 0 > a ? 0 : a > b ? b : a; + } + + function la(a, b, c) { + self[a] = function (a, e, f, g, h, k, l, m, n) { + for (var d = m + (n & -2) * c; m != d;) { + b(a[e + 0], f[g + 0], h[k + 0], l, m), b(a[e + 1], f[g + 0], h[k + 0], l, m + c), e += 2, ++g, ++k, m += 2 * c; + } + + n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m); + }; + } + + function xd(a, b, c) { + return 0 == c ? 0 == a ? 0 == b ? 6 : 5 : 0 == b ? 4 : 0 : c; + } + + function yd(a, b, c, d, e) { + switch (a >>> 30) { + case 3: + Za(b, c, d, e, 0); + break; + + case 2: + fd(b, c, d, e); + break; + + case 1: + pa(b, c, d, e); + } + } + + function Oc(a, b) { + var c, + d, + e = b.M, + f = b.Nb, + g = a.oc, + h = a.pc + 40, + k = a.oc, + l = a.pc + 584, + m = a.oc, + n = a.pc + 600; + + for (c = 0; 16 > c; ++c) { + g[h + 32 * c - 1] = 129; + } + + for (c = 0; 8 > c; ++c) { + k[l + 32 * c - 1] = 129, m[n + 32 * c - 1] = 129; + } + + 0 < e ? g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129 : (M(g, h - 32 - 1, 127, 21), M(k, l - 32 - 1, 127, 9), M(m, n - 32 - 1, 127, 9)); + + for (d = 0; d < a.za; ++d) { + var r = b.ya[b.aa + d]; + + if (0 < d) { + for (c = -1; 16 > c; ++c) { + I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4); + } + + for (c = -1; 8 > c; ++c) { + I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4), I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4); + } + } + + var q = a.Gd, + t = a.Hd + d, + v = r.ad, + p = r.Hc; + 0 < e && (I(g, h - 32, q[t].y, 0, 16), I(k, l - 32, q[t].f, 0, 8), I(m, n - 32, q[t].ea, 0, 8)); + + if (r.Za) { + var u = g; + var w = h - 32 + 16; + 0 < e && (d >= a.za - 1 ? M(u, w, q[t].y[15], 4) : I(u, w, q[t + 1].y, 0, 4)); + + for (c = 0; 4 > c; c++) { + u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c]; + } + + for (c = 0; 16 > c; ++c, p <<= 2) { + u = g, w = h + zd[c], W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w); + } + } else if (u = xd(d, e, r.Ob[0]), Y[u](g, h), 0 != p) for (c = 0; 16 > c; ++c, p <<= 2) { + yd(p, v, 16 * +c, g, h + zd[c]); + } + + c = r.Gc; + u = xd(d, e, r.Dd); + ka[u](k, l); + ka[u](m, n); + r = c >> 0; + p = v; + u = k; + w = l; + r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w)); + c >>= 8; + r = m; + p = n; + c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p)); + e < a.Ub - 1 && (I(q[t].y, 0, g, h + 480, 16), I(q[t].f, 0, k, l + 224, 8), I(q[t].ea, 0, m, n + 224, 8)); + c = 8 * f * a.B; + q = a.sa; + t = a.ta + 16 * d + 16 * f * a.R; + v = a.qa; + r = a.ra + 8 * d + c; + p = a.Ha; + u = a.Ia + 8 * d + c; + + for (c = 0; 16 > c; ++c) { + I(q, t + c * a.R, g, h + 32 * c, 16); + } + + for (c = 0; 8 > c; ++c) { + I(v, r + c * a.B, k, l + 32 * c, 8), I(p, u + c * a.B, m, n + 32 * c, 8); + } + } + } + + function Ad(a, b, c, d, e, f, g, h, k) { + var l = [0], + m = [0], + n = 0, + r = null != k ? k.kd : 0, + q = null != k ? k : new md(); + if (null == a || 12 > c) return 7; + q.data = a; + q.w = b; + q.ha = c; + b = [b]; + c = [c]; + q.gb = [q.gb]; + + a: { + var t = b; + var v = c; + var p = q.gb; + x(null != a); + x(null != v); + x(null != p); + p[0] = 0; + + if (12 <= v[0] && !fa(a, t[0], "RIFF")) { + if (fa(a, t[0] + 8, "WEBP")) { + p = 3; + break a; + } + + var u = Ha(a, t[0] + 4); + + if (12 > u || 4294967286 < u) { + p = 3; + break a; + } + + if (r && u > v[0] - 8) { + p = 7; + break a; + } + + p[0] = u; + t[0] += 12; + v[0] -= 12; + } + + p = 0; + } + + if (0 != p) return p; + u = 0 < q.gb[0]; + + for (c = c[0];;) { + t = [0]; + n = [n]; + + a: { + var w = a; + v = b; + p = c; + var y = n, + A = l, + z = m, + B = t; + y[0] = 0; + if (8 > p[0]) p = 7;else { + if (!fa(w, v[0], "VP8X")) { + if (10 != Ha(w, v[0] + 4)) { + p = 3; + break a; + } + + if (18 > p[0]) { + p = 7; + break a; + } + + var C = Ha(w, v[0] + 8); + var D = 1 + Yb(w, v[0] + 12); + w = 1 + Yb(w, v[0] + 15); + + if (2147483648 <= D * w) { + p = 3; + break a; + } + + null != B && (B[0] = C); + null != A && (A[0] = D); + null != z && (z[0] = w); + v[0] += 18; + p[0] -= 18; + y[0] = 1; + } + + p = 0; + } + } + + n = n[0]; + t = t[0]; + if (0 != p) return p; + v = !!(t & 2); + if (!u && n) return 3; + null != f && (f[0] = !!(t & 16)); + null != g && (g[0] = v); + null != h && (h[0] = 0); + g = l[0]; + t = m[0]; + + if (n && v && null == k) { + p = 0; + break; + } + + if (4 > c) { + p = 7; + break; + } + + if (u && n || !u && !n && !fa(a, b[0], "ALPH")) { + c = [c]; + q.na = [q.na]; + q.P = [q.P]; + q.Sa = [q.Sa]; + + a: { + C = a; + p = b; + u = c; + var y = q.gb, + A = q.na, + z = q.P, + B = q.Sa; + D = 22; + x(null != C); + x(null != u); + w = p[0]; + var F = u[0]; + x(null != A); + x(null != B); + A[0] = null; + z[0] = null; + + for (B[0] = 0;;) { + p[0] = w; + u[0] = F; + + if (8 > F) { + p = 7; + break a; + } + + var G = Ha(C, w + 4); + + if (4294967286 < G) { + p = 3; + break a; + } + + var H = 8 + G + 1 & -2; + D += H; + + if (0 < y && D > y) { + p = 3; + break a; + } + + if (!fa(C, w, "VP8 ") || !fa(C, w, "VP8L")) { + p = 0; + break a; + } + + if (F[0] < H) { + p = 7; + break a; + } + + fa(C, w, "ALPH") || (A[0] = C, z[0] = w + 8, B[0] = G); + w += H; + F -= H; + } + } + + c = c[0]; + q.na = q.na[0]; + q.P = q.P[0]; + q.Sa = q.Sa[0]; + if (0 != p) break; + } + + c = [c]; + q.Ja = [q.Ja]; + q.xa = [q.xa]; + + a: if (y = a, p = b, u = c, A = q.gb[0], z = q.Ja, B = q.xa, C = p[0], w = !fa(y, C, "VP8 "), D = !fa(y, C, "VP8L"), x(null != y), x(null != u), x(null != z), x(null != B), 8 > u[0]) p = 7;else { + if (w || D) { + y = Ha(y, C + 4); + + if (12 <= A && y > A - 12) { + p = 3; + break a; + } + + if (r && y > u[0] - 8) { + p = 7; + break a; + } + + z[0] = y; + p[0] += 8; + u[0] -= 8; + B[0] = D; + } else B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5), z[0] = u[0]; + + p = 0; + } + + c = c[0]; + q.Ja = q.Ja[0]; + q.xa = q.xa[0]; + b = b[0]; + if (0 != p) break; + if (4294967286 < q.Ja) return 3; + null == h || v || (h[0] = q.xa ? 2 : 1); + g = [g]; + t = [t]; + + if (q.xa) { + if (5 > c) { + p = 7; + break; + } + + h = g; + r = t; + v = f; + null == a || 5 > c ? a = 0 : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5) ? (u = [0], y = [0], A = [0], z = new Ra(), cb(z, a, b, c), mc(z, u, y, A) ? (null != h && (h[0] = u[0]), null != r && (r[0] = y[0]), null != v && (v[0] = A[0]), a = 1) : a = 0) : a = 0; + } else { + if (10 > c) { + p = 7; + break; + } + + h = t; + null == a || 10 > c || !Jc(a, b + 3, c - 3) ? a = 0 : (r = a[b + 0] | a[b + 1] << 8 | a[b + 2] << 16, v = (a[b + 7] << 8 | a[b + 6]) & 16383, a = (a[b + 9] << 8 | a[b + 8]) & 16383, r & 1 || 3 < (r >> 1 & 7) || !(r >> 4 & 1) || r >> 5 >= q.Ja || !v || !a ? a = 0 : (g && (g[0] = v), h && (h[0] = a), a = 1)); + } + + if (!a) return 3; + g = g[0]; + t = t[0]; + if (n && (l[0] != g || m[0] != t)) return 3; + null != k && (k[0] = q, k.offset = b - k.w, x(4294967286 > b - k.w), x(k.offset == k.ha - c)); + break; + } + + return 0 == p || 7 == p && n && null == k ? (null != f && (f[0] |= null != q.na && 0 < q.na.length), null != d && (d[0] = g), null != e && (e[0] = t), 0) : p; + } + + function hc(a, b, c) { + var d = b.width, + e = b.height, + f = 0, + g = 0, + h = d, + k = e; + b.Da = null != a && 0 < a.Da; + if (b.Da && (h = a.cd, k = a.bd, f = a.v, g = a.j, 11 > c || (f &= -2, g &= -2), 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)) return 0; + b.v = f; + b.j = g; + b.va = f + h; + b.o = g + k; + b.U = h; + b.T = k; + b.da = null != a && 0 < a.da; + + if (b.da) { + c = [a.ib]; + f = [a.hb]; + if (!bc(h, k, c, f)) return 0; + b.ib = c[0]; + b.hb = f[0]; + } + + b.ob = null != a && a.ob; + b.Kb = null == a || !a.Sd; + b.da && (b.ob = b.ib < 3 * d / 4 && b.hb < 3 * e / 4, b.Kb = 0); + return 1; + } + + function Bd(a) { + if (null == a) return 2; + + if (11 > a.S) { + var b = a.f.RGBA; + b.fb += (a.height - 1) * b.A; + b.A = -b.A; + } else b = a.f.kb, a = a.height, b.O += (a - 1) * b.fa, b.fa = -b.fa, b.N += (a - 1 >> 1) * b.Ab, b.Ab = -b.Ab, b.W += (a - 1 >> 1) * b.Db, b.Db = -b.Db, null != b.F && (b.J += (a - 1) * b.lb, b.lb = -b.lb); + + return 0; + } + + function Cd(a, b, c, d) { + if (null == d || 0 >= a || 0 >= b) return 2; + + if (null != c) { + if (c.Da) { + var e = c.cd, + f = c.bd, + g = c.v & -2, + h = c.j & -2; + if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b) return 2; + a = e; + b = f; + } + + if (c.da) { + e = [c.ib]; + f = [c.hb]; + if (!bc(a, b, e, f)) return 2; + a = e[0]; + b = f[0]; + } + } + + d.width = a; + d.height = b; + + a: { + var k = d.width; + var l = d.height; + a = d.S; + if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;else { + if (0 >= d.Rd && null == d.sd) { + var g = f = e = b = 0, + h = k * Dd[a], + m = h * l; + 11 > a || (b = (k + 1) / 2, f = (l + 1) / 2 * b, 12 == a && (e = k, g = e * l)); + l = V(m + 2 * f + g); + + if (null == l) { + a = 1; + break a; + } + + d.sd = l; + 11 > a ? (k = d.f.RGBA, k.eb = l, k.fb = 0, k.A = h, k.size = m) : (k = d.f.kb, k.y = l, k.O = 0, k.fa = h, k.Fd = m, k.f = l, k.N = 0 + m, k.Ab = b, k.Cd = f, k.ea = l, k.W = 0 + m + f, k.Db = b, k.Ed = f, 12 == a && (k.F = l, k.J = 0 + m + 2 * f), k.Tc = g, k.lb = e); + } + + b = 1; + e = d.S; + f = d.width; + g = d.height; + if (e >= Ca && 13 > e) { + if (11 > e) a = d.f.RGBA, h = Math.abs(a.A), b &= h * (g - 1) + f <= a.size, b &= h >= f * Dd[e], b &= null != a.eb;else { + a = d.f.kb; + h = (f + 1) / 2; + m = (g + 1) / 2; + k = Math.abs(a.fa); + var l = Math.abs(a.Ab), + n = Math.abs(a.Db), + r = Math.abs(a.lb), + q = r * (g - 1) + f; + b &= k * (g - 1) + f <= a.Fd; + b &= l * (m - 1) + h <= a.Cd; + b &= n * (m - 1) + h <= a.Ed; + b = b & k >= f & l >= h & n >= h; + b &= null != a.y; + b &= null != a.f; + b &= null != a.ea; + 12 == e && (b &= r >= f, b &= q <= a.Tc, b &= null != a.F); + } + } else b = 0; + a = b ? 0 : 2; + } + } + + if (0 != a) return a; + null != c && c.fd && (a = Bd(d)); + return a; + } + + var xb = 64, + Hd = [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215], + Gd = 24, + ob = 32, + Xb = 8, + Id = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7]; + X("Predictor0", "PredictorAdd0"); + + self.Predictor0 = function () { + return 4278190080; + }; + + self.Predictor1 = function (a) { + return a; + }; + + self.Predictor2 = function (a, b, c) { + return b[c + 0]; + }; + + self.Predictor3 = function (a, b, c) { + return b[c + 1]; + }; + + self.Predictor4 = function (a, b, c) { + return b[c - 1]; + }; + + self.Predictor5 = function (a, b, c) { + return aa(aa(a, b[c + 1]), b[c + 0]); + }; + + self.Predictor6 = function (a, b, c) { + return aa(a, b[c - 1]); + }; + + self.Predictor7 = function (a, b, c) { + return aa(a, b[c + 0]); + }; + + self.Predictor8 = function (a, b, c) { + return aa(b[c - 1], b[c + 0]); + }; + + self.Predictor9 = function (a, b, c) { + return aa(b[c + 0], b[c + 1]); + }; + + self.Predictor10 = function (a, b, c) { + return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1])); + }; + + self.Predictor11 = function (a, b, c) { + var d = b[c + 0]; + b = b[c - 1]; + return 0 >= Ia(d >> 24 & 255, a >> 24 & 255, b >> 24 & 255) + Ia(d >> 16 & 255, a >> 16 & 255, b >> 16 & 255) + Ia(d >> 8 & 255, a >> 8 & 255, b >> 8 & 255) + Ia(d & 255, a & 255, b & 255) ? d : a; + }; + + self.Predictor12 = function (a, b, c) { + var d = b[c + 0]; + b = b[c - 1]; + return (sa((a >> 24 & 255) + (d >> 24 & 255) - (b >> 24 & 255)) << 24 | sa((a >> 16 & 255) + (d >> 16 & 255) - (b >> 16 & 255)) << 16 | sa((a >> 8 & 255) + (d >> 8 & 255) - (b >> 8 & 255)) << 8 | sa((a & 255) + (d & 255) - (b & 255))) >>> 0; + }; + + self.Predictor13 = function (a, b, c) { + var d = b[c - 1]; + a = aa(a, b[c + 0]); + return (eb(a >> 24 & 255, d >> 24 & 255) << 24 | eb(a >> 16 & 255, d >> 16 & 255) << 16 | eb(a >> 8 & 255, d >> 8 & 255) << 8 | eb(a >> 0 & 255, d >> 0 & 255)) >>> 0; + }; + + var ee = self.PredictorAdd0; + self.PredictorAdd1 = cc; + X("Predictor2", "PredictorAdd2"); + X("Predictor3", "PredictorAdd3"); + X("Predictor4", "PredictorAdd4"); + X("Predictor5", "PredictorAdd5"); + X("Predictor6", "PredictorAdd6"); + X("Predictor7", "PredictorAdd7"); + X("Predictor8", "PredictorAdd8"); + X("Predictor9", "PredictorAdd9"); + X("Predictor10", "PredictorAdd10"); + X("Predictor11", "PredictorAdd11"); + X("Predictor12", "PredictorAdd12"); + X("Predictor13", "PredictorAdd13"); + var fe = self.PredictorAdd2; + ec("ColorIndexInverseTransform", "MapARGB", "32b", function (a) { + return a >> 8 & 255; + }, function (a) { + return a; + }); + ec("VP8LColorIndexInverseTransformAlpha", "MapAlpha", "8b", function (a) { + return a; + }, function (a) { + return a >> 8 & 255; + }); + var rc = self.ColorIndexInverseTransform, + ke = self.MapARGB, + he = self.VP8LColorIndexInverseTransformAlpha, + le = self.MapAlpha, + pc, + qc = self.VP8LPredictorsAdd = []; + qc.length = 16; + (self.VP8LPredictors = []).length = 16; + (self.VP8LPredictorsAdd_C = []).length = 16; + (self.VP8LPredictors_C = []).length = 16; + var Fb, + sc, + Gb, + Hb, + xc, + uc, + bd = V(511), + cd = V(2041), + dd = V(225), + ed = V(767), + ad = 0, + Qb = cd, + mb = dd, + R = ed, + U = bd, + Ca = 0, + Ua = 1, + tc = 2, + Va = 3, + ya = 4, + Db = 5, + wc = 6, + zb = 7, + Ab = 8, + Ja = 9, + Bb = 10, + pe = [2, 3, 7], + oe = [3, 3, 11], + Dc = [280, 256, 256, 256, 40], + qe = [0, 1, 1, 1, 0], + ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + de = [24, 7, 23, 25, 40, 6, 39, 41, 22, 26, 38, 42, 56, 5, 55, 57, 21, 27, 54, 58, 37, 43, 72, 4, 71, 73, 20, 28, 53, 59, 70, 74, 36, 44, 88, 69, 75, 52, 60, 3, 87, 89, 19, 29, 86, 90, 35, 45, 68, 76, 85, 91, 51, 61, 104, 2, 103, 105, 18, 30, 102, 106, 34, 46, 84, 92, 67, 77, 101, 107, 50, 62, 120, 1, 119, 121, 83, 93, 17, 31, 100, 108, 66, 78, 118, 122, 33, 47, 117, 123, 49, 63, 99, 109, 82, 94, 0, 116, 124, 65, 79, 16, 32, 98, 110, 48, 115, 125, 81, 95, 64, 114, 126, 97, 111, 80, 113, 127, 96, 112], + me = [2954, 2956, 2958, 2962, 2970, 2986, 3018, 3082, 3212, 3468, 3980, 5004], + ie = 8, + Lb = [4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157], + Mb = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284], + oa = null, + He = [[173, 148, 140, 0], [176, 155, 140, 135, 0], [180, 157, 141, 134, 130, 0], [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]], + Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15], + Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9], + Fe = [[[[128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]], [[253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128], [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128], [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]], [[1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128], [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128], [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]], [[1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128], [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128], [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]], [[1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128], [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128], [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]], [[1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128], [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128], [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]], [[1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128], [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128], [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]], [[1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]]], [[[198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62], [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1], [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]], [[1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128], [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128], [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]], [[1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128], [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128], [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]], [[1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128], [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128], [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]], [[1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128], [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128], [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]], [[1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128], [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128], [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]], [[1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128], [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128], [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]], [[1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128], [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128], [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]]], [[[253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128], [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128], [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]], [[1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128], [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128], [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]], [[1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128], [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128], [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]], [[1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128], [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128], [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]], [[1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128], [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128], [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]], [[1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128], [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128], [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]], [[1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128], [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128], [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]], [[128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]]], [[[202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255], [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128], [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]], [[1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128], [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128], [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]], [[1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128], [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128], [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]], [[1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128], [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128], [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]], [[1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128], [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128], [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]], [[1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128], [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128], [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]], [[1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128], [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128], [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]], [[1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]]]], + Ke = [[[231, 120, 48, 89, 115, 113, 120, 152, 112], [152, 179, 64, 126, 170, 118, 46, 70, 95], [175, 69, 143, 80, 85, 82, 72, 155, 103], [56, 58, 10, 171, 218, 189, 17, 13, 152], [114, 26, 17, 163, 44, 195, 21, 10, 173], [121, 24, 80, 195, 26, 62, 44, 64, 85], [144, 71, 10, 38, 171, 213, 144, 34, 26], [170, 46, 55, 19, 136, 160, 33, 206, 71], [63, 20, 8, 114, 114, 208, 12, 9, 226], [81, 40, 11, 96, 182, 84, 29, 16, 36]], [[134, 183, 89, 137, 98, 101, 106, 165, 148], [72, 187, 100, 130, 157, 111, 32, 75, 80], [66, 102, 167, 99, 74, 62, 40, 234, 128], [41, 53, 9, 178, 241, 141, 26, 8, 107], [74, 43, 26, 146, 73, 166, 49, 23, 157], [65, 38, 105, 160, 51, 52, 31, 115, 128], [104, 79, 12, 27, 217, 255, 87, 17, 7], [87, 68, 71, 44, 114, 51, 15, 186, 23], [47, 41, 14, 110, 182, 183, 21, 17, 194], [66, 45, 25, 102, 197, 189, 23, 18, 22]], [[88, 88, 147, 150, 42, 46, 45, 196, 205], [43, 97, 183, 117, 85, 38, 35, 179, 61], [39, 53, 200, 87, 26, 21, 43, 232, 171], [56, 34, 51, 104, 114, 102, 29, 93, 77], [39, 28, 85, 171, 58, 165, 90, 98, 64], [34, 22, 116, 206, 23, 34, 43, 166, 73], [107, 54, 32, 26, 51, 1, 81, 43, 31], [68, 25, 106, 22, 64, 171, 36, 225, 114], [34, 19, 21, 102, 132, 188, 16, 76, 124], [62, 18, 78, 95, 85, 57, 50, 48, 51]], [[193, 101, 35, 159, 215, 111, 89, 46, 111], [60, 148, 31, 172, 219, 228, 21, 18, 111], [112, 113, 77, 85, 179, 255, 38, 120, 114], [40, 42, 1, 196, 245, 209, 10, 25, 109], [88, 43, 29, 140, 166, 213, 37, 43, 154], [61, 63, 30, 155, 67, 45, 68, 1, 209], [100, 80, 8, 43, 154, 1, 51, 26, 71], [142, 78, 78, 16, 255, 128, 34, 197, 171], [41, 40, 5, 102, 211, 183, 4, 1, 221], [51, 50, 17, 168, 209, 192, 23, 25, 82]], [[138, 31, 36, 171, 27, 166, 38, 44, 229], [67, 87, 58, 169, 82, 115, 26, 59, 179], [63, 59, 90, 180, 59, 166, 93, 73, 154], [40, 40, 21, 116, 143, 209, 34, 39, 175], [47, 15, 16, 183, 34, 223, 49, 45, 183], [46, 17, 33, 183, 6, 98, 15, 32, 183], [57, 46, 22, 24, 128, 1, 54, 17, 37], [65, 32, 73, 115, 28, 128, 23, 128, 205], [40, 3, 9, 115, 51, 192, 18, 6, 223], [87, 37, 9, 115, 59, 77, 64, 21, 47]], [[104, 55, 44, 218, 9, 54, 53, 130, 226], [64, 90, 70, 205, 40, 41, 23, 26, 57], [54, 57, 112, 184, 5, 41, 38, 166, 213], [30, 34, 26, 133, 152, 116, 10, 32, 134], [39, 19, 53, 221, 26, 114, 32, 73, 255], [31, 9, 65, 234, 2, 15, 1, 118, 73], [75, 32, 12, 51, 192, 255, 160, 43, 51], [88, 31, 35, 67, 102, 85, 55, 186, 85], [56, 21, 23, 111, 59, 205, 45, 37, 192], [55, 38, 70, 124, 73, 102, 1, 34, 98]], [[125, 98, 42, 88, 104, 85, 117, 175, 82], [95, 84, 53, 89, 128, 100, 113, 101, 45], [75, 79, 123, 47, 51, 128, 81, 171, 1], [57, 17, 5, 71, 102, 57, 53, 41, 49], [38, 33, 13, 121, 57, 73, 26, 1, 85], [41, 10, 67, 138, 77, 110, 90, 47, 114], [115, 21, 2, 10, 102, 255, 166, 23, 6], [101, 29, 16, 10, 85, 128, 101, 196, 26], [57, 18, 10, 102, 102, 213, 34, 20, 43], [117, 20, 15, 36, 163, 128, 68, 1, 26]], [[102, 61, 71, 37, 34, 53, 31, 243, 192], [69, 60, 71, 38, 73, 119, 28, 222, 37], [68, 45, 128, 34, 1, 47, 11, 245, 171], [62, 17, 19, 70, 146, 85, 55, 62, 70], [37, 43, 37, 154, 100, 163, 85, 160, 1], [63, 9, 92, 136, 28, 64, 32, 201, 85], [75, 15, 9, 9, 64, 255, 184, 119, 16], [86, 6, 28, 5, 64, 255, 25, 248, 1], [56, 8, 17, 132, 137, 255, 55, 116, 128], [58, 15, 20, 82, 135, 57, 26, 121, 40]], [[164, 50, 31, 137, 154, 133, 25, 35, 218], [51, 103, 44, 131, 131, 123, 31, 6, 158], [86, 40, 64, 135, 148, 224, 45, 183, 128], [22, 26, 17, 131, 240, 154, 14, 1, 209], [45, 16, 21, 91, 64, 222, 7, 1, 197], [56, 21, 39, 155, 60, 138, 23, 102, 213], [83, 12, 13, 54, 192, 255, 68, 47, 28], [85, 26, 85, 85, 128, 128, 32, 146, 171], [18, 11, 7, 63, 144, 171, 4, 4, 246], [35, 27, 10, 146, 174, 171, 12, 26, 128]], [[190, 80, 35, 99, 180, 80, 126, 54, 45], [85, 126, 47, 87, 176, 51, 41, 20, 32], [101, 75, 128, 139, 118, 146, 116, 128, 85], [56, 41, 15, 176, 236, 85, 37, 9, 62], [71, 30, 17, 119, 118, 255, 17, 18, 138], [101, 38, 60, 138, 55, 70, 43, 26, 142], [146, 36, 19, 30, 171, 255, 97, 27, 20], [138, 45, 61, 62, 219, 1, 81, 188, 64], [32, 41, 20, 117, 151, 142, 20, 21, 163], [112, 19, 12, 61, 195, 128, 48, 4, 24]]], + Ee = [[[[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255], [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255], [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255], [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255], [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255], [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]], [[[217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255], [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]], [[255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]], [[255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255], [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]], [[[186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255], [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255], [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]], [[255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]], [[255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]], [[[248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255], [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]], [[255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]], [[255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255], [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]], [[255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255], [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255], [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255], [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]], [[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]]]], + Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0], + Nc, + Y = [], + W = [], + ka = [], + Za, + fd, + Nb, + pa, + Ob, + Xc, + Tc, + Yc, + Uc, + Zc, + Vc, + $c, + Wc, + Rc, + Pc, + Sc, + Qc, + re = 1, + Cc = 2, + ia = [], + za, + vc, + fc, + Fc, + P = []; + va("UpsampleRgbLinePair", Ga, 3); + va("UpsampleBgrLinePair", Tb, 3); + va("UpsampleRgbaLinePair", wd, 4); + va("UpsampleBgraLinePair", vd, 4); + va("UpsampleArgbLinePair", ud, 4); + va("UpsampleRgba4444LinePair", td, 2); + va("UpsampleRgb565LinePair", sd, 2); + var Mf = self.UpsampleRgbLinePair, + Nf = self.UpsampleBgrLinePair, + nd = self.UpsampleRgbaLinePair, + od = self.UpsampleBgraLinePair, + pd = self.UpsampleArgbLinePair, + qd = self.UpsampleRgba4444LinePair, + Of = self.UpsampleRgb565LinePair, + Wa = 16, + Ba = 1 << Wa - 1, + ta = -227, + Eb = 482, + rd = 6, + Pf = (256 << rd) - 1, + jc = 0, + Yd = V(256), + ae = V(256), + $d = V(256), + Zd = V(256), + be = V(Eb - ta), + ce = V(Eb - ta); + la("YuvToRgbRow", Ga, 3); + la("YuvToBgrRow", Tb, 3); + la("YuvToRgbaRow", wd, 4); + la("YuvToBgraRow", vd, 4); + la("YuvToArgbRow", ud, 4); + la("YuvToRgba4444Row", td, 2); + la("YuvToRgb565Row", sd, 2); + var zd = [0, 4, 8, 12, 128, 132, 136, 140, 256, 260, 264, 268, 384, 388, 392, 396], + Ya = [0, 2, 8], + Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1], + Ne = 1; + + this.WebPDecodeRGBA = function (a, b, c, d, e) { + var f = Ua; + var g = new Cf(), + h = new Cb(); + g.ba = h; + h.S = f; + h.width = [h.width]; + h.height = [h.height]; + var k = h.width; + var l = h.height, + m = new Td(); + if (null == m || null == a) var n = 2;else x(null != m), n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null); + 0 != n ? k = 0 : (null != k && (k[0] = m.width[0]), null != l && (l[0] = m.height[0]), k = 1); + + if (k) { + h.width = h.width[0]; + h.height = h.height[0]; + null != d && (d[0] = h.width); + null != e && (e[0] = h.height); + + b: { + d = new Oa(); + e = new md(); + e.data = a; + e.w = b; + e.ha = c; + e.kd = 1; + b = [0]; + x(null != e); + a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e); + (0 == a || 7 == a) && b[0] && (a = 4); + b = a; + + if (0 == b) { + x(null != g); + d.data = e.data; + d.w = e.w + e.offset; + d.ha = e.ha - e.offset; + d.put = kc; + d.ac = gc; + d.bc = lc; + d.ma = g; + + if (e.xa) { + a = Bc(); + + if (null == a) { + g = 1; + break b; + } + + if (te(a, d)) { + b = Cd(d.width, d.height, g.Oa, g.ba); + + if (d = 0 == b) { + c: { + d = a; + + d: for (;;) { + if (null == d) { + d = 0; + break c; + } + + x(null != d.s.yc); + x(null != d.s.Ya); + x(0 < d.s.Wb); + c = d.l; + x(null != c); + e = c.ma; + x(null != e); + + if (0 != d.xb) { + d.ca = e.ba; + d.tb = e.tb; + x(null != d.ca); + + if (!hc(e.Oa, c, Va)) { + d.a = 2; + break d; + } + + if (!Ec(d, c.width)) break d; + if (c.da) break d; + (c.da || hb(d.ca.S)) && Aa(); + 11 > d.ca.S || (alert("todo:WebPInitConvertARGBToYUV"), null != d.ca.f.kb.F && Aa()); + + if (d.Pb && 0 < d.s.ua && null == d.s.vb.X && !Zb(d.s.vb, d.s.Wa.Xa)) { + d.a = 1; + break d; + } + + d.xb = 0; + } + + if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d; + e.Dc = d.Ma; + d = 1; + break c; + } + + x(0 != d.a); + d = 0; + } + + d = !d; + } + + d && (b = a.a); + } else b = a.a; + } else { + a = new Ce(); + + if (null == a) { + g = 1; + break b; + } + + a.Fa = e.na; + a.P = e.P; + a.qc = e.Sa; + + if (Kc(a, d)) { + if (b = Cd(d.width, d.height, g.Oa, g.ba), 0 == b) { + a.Aa = 0; + c = g.Oa; + e = a; + x(null != e); + + if (null != c) { + k = c.Md; + k = 0 > k ? 0 : 100 < k ? 255 : 255 * k / 100; + + if (0 < k) { + for (l = m = 0; 4 > l; ++l) { + n = e.pb[l], 12 > n.lc && (n.ia = k * Qf[0 > n.lc ? 0 : n.lc] >> 3), m |= n.ia; + } + + m && (alert("todo:VP8InitRandom"), e.ia = 1); + } + + e.Ga = c.Id; + 100 < e.Ga ? e.Ga = 100 : 0 > e.Ga && (e.Ga = 0); + } + + Me(a, d) || (b = a.a); + } + } else b = a.a; + } + + 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba)); + } + + g = b; + } + + f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y; + } else f = null; + + return f; + }; + + var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1]; + }; + + new _WebPDecoder(); + /** @license + * Copyright (c) 2017 Dominik Homberger + 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. + https://webpjs.appspot.com + WebPRiffParser dominikhlbg@gmail.com + */ + + function memcmp(data, data_off, str, size) { + for (var i = 0; i < size; i++) { + if (data[data_off + i] != str.charCodeAt(i)) return true; + } + + return false; + } + + function GetTag(data, data_off) { + var str = ""; + + for (var i = 0; i < 4; i++) { + str += String.fromCharCode(data[data_off++]); + } + + return str; + } + + function GetLE16(data, data_off) { + return data[data_off + 0] << 0 | data[data_off + 1] << 8; + } + + function GetLE24(data, data_off) { + return (data[data_off + 0] << 0 | data[data_off + 1] << 8 | data[data_off + 2] << 16) >>> 0; + } + + function GetLE32(data, data_off) { + return (data[data_off + 0] << 0 | data[data_off + 1] << 8 | data[data_off + 2] << 16 | data[data_off + 3] << 24) >>> 0; + } + + function WebPRiffParser(src, src_off) { + var imagearray = {}; + var i = 0; + var alpha_chunk = false; + var alpha_size = 0; + var alpha_offset = 0; + imagearray["frames"] = []; + if (memcmp(src, src_off, "RIFF", 4)) return; + src_off += 4; + var riff_size = GetLE32(src, src_off) + 8; + src_off += 8; + + while (src_off < src.length) { + var fourcc = GetTag(src, src_off); + src_off += 4; + var payload_size = GetLE32(src, src_off); + src_off += 4; + var payload_size_padded = payload_size + (payload_size & 1); + + switch (fourcc) { + case "VP8 ": + case "VP8L": + if (typeof imagearray["frames"][i] === "undefined") imagearray["frames"][i] = {}; + var obj = imagearray["frames"][i]; + var height = [0]; + var width = [0]; + obj["src_off"] = alpha_chunk ? alpha_offset : src_off - 8; + obj["src_size"] = alpha_size + payload_size + 8; //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height); + //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]}; + + i++; + + if (alpha_chunk) { + alpha_chunk = false; + alpha_size = 0; + alpha_offset = 0; + } + + break; + + case "VP8X": + var obj = imagearray["header"] = {}; + var feature_flags = obj["feature_flags"] = src[src_off]; + var src_off_ = src_off + 4; + var canvas_width = obj["canvas_width"] = 1 + GetLE24(src, src_off_); + src_off_ += 3; + var canvas_height = obj["canvas_height"] = 1 + GetLE24(src, src_off_); + src_off_ += 3; + break; + + case "ALPH": + alpha_chunk = true; + alpha_size = payload_size_padded + 8; + alpha_offset = src_off - 8; + break; + + case "ANIM": + var obj = imagearray["header"]; + var bgcolor = obj["bgcolor"] = GetLE32(src, src_off); + src_off_ = src_off + 4; + var loop_count = obj["loop_count"] = GetLE16(src, src_off_); + src_off_ += 2; + break; + + case "ANMF": + var offset_x = 0, + offset_y = 0, + width = 0, + height = 0, + duration = 0, + blend = 0, + dispose = 0, + temp = 0; + var obj = imagearray["frames"][i] = {}; + obj["offset_x"] = offset_x = 2 * GetLE24(src, src_off); + src_off += 3; + obj["offset_y"] = offset_y = 2 * GetLE24(src, src_off); + src_off += 3; + obj["width"] = width = 1 + GetLE24(src, src_off); + src_off += 3; + obj["height"] = height = 1 + GetLE24(src, src_off); + src_off += 3; + obj["duration"] = duration = GetLE24(src, src_off); + src_off += 3; + temp = src[src_off++]; + obj["dispose"] = dispose = temp & 1; + obj["blend"] = blend = temp >> 1 & 1; + break; + } + + if (fourcc != "ANMF") src_off += payload_size_padded; + } + + return imagearray; + } + + var height = [0]; + var width = [0]; + var pixels = []; + var webpdecoder = new _WebPDecoder(); + var response = imageData; + var imagearray = WebPRiffParser(response, 0); + imagearray["response"] = response; + imagearray["rgbaoutput"] = true; + imagearray["dataurl"] = false; + var header = imagearray["header"] ? imagearray["header"] : null; + var frames = imagearray["frames"] ? imagearray["frames"] : null; + + if (header) { + header["loop_counter"] = header["loop_count"]; + height = [header["canvas_height"]]; + width = [header["canvas_width"]]; + + for (var f = 0; f < frames.length; f++) { + if (frames[f]["blend"] == 0) { + break; + } + } + } + + var frame = frames[0]; + var rgba = webpdecoder.WebPDecodeRGBA(response, frame["src_off"], frame["src_size"], width, height); + frame["rgba"] = rgba; + frame["imgwidth"] = width[0]; + frame["imgheight"] = height[0]; + + for (var i = 0; i < width[0] * height[0] * 4; i++) { + pixels[i] = rgba[i]; + } + + this.width = width; + this.height = height; + this.data = pixels; + return this; + } + + WebPDecoder.prototype.getData = function () { + return this.data; + }; + + /** + * @license + * Copyright (c) 2019 Aras Abbasi + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF webp Support PlugIn + * + * @name webp_support + * @module + */ + + (function (jsPDFAPI) { + + jsPDFAPI.processWEBP = function (imageData, index, alias, compression) { + var reader = new WebPDecoder(imageData, false); + var width = reader.width, + height = reader.height; + var qu = 100; + var pixels = reader.getData(); + var rawImageData = { + data: pixels, + width: width, + height: height + }; + var encoder = new JPEGEncoder(qu); + var data = encoder.encode(rawImageData, qu); + return jsPDFAPI.processJPEG.call(this, data, index, alias, compression); + }; + })(jsPDF.API); + + /** + * @license + * + * Copyright (c) 2021 Antti Palola, https://github.com/Pantura + * + * 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. + * ==================================================================== + */ + /** + * jsPDF RGBA array PlugIn + * @name rgba_support + * @module + */ + + (function (jsPDFAPI) { + /** + * @name processRGBA + * @function + * + * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...]. + * RGBA array data can be obtained from DOM canvas getImageData. + * @ignore + */ + + jsPDFAPI.processRGBA = function (imageData, index, alias) { + + var imagePixels = imageData.data; + var length = imagePixels.length; // jsPDF takes alpha data separately so extract that. + + var rgbOut = new Uint8Array(length / 4 * 3); + var alphaOut = new Uint8Array(length / 4); + var outIndex = 0; + var alphaIndex = 0; + + for (var i = 0; i < length; i += 4) { + var r = imagePixels[i]; + var g = imagePixels[i + 1]; + var b = imagePixels[i + 2]; + var alpha = imagePixels[i + 3]; + rgbOut[outIndex++] = r; + rgbOut[outIndex++] = g; + rgbOut[outIndex++] = b; + alphaOut[alphaIndex++] = alpha; + } + + var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut); + + var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut); + + return { + alpha: alphaData, + data: rgbData, + index: index, + alias: alias, + colorSpace: "DeviceRGB", + bitsPerComponent: 8, + width: imageData.width, + height: imageData.height + }; + }; + })(jsPDF.API); + + /** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * jsPDF setLanguage Plugin + * + * @name setLanguage + * @module + */ + + (function (jsPDFAPI) { + /** + * Add Language Tag to the generated PDF + * + * @name setLanguage + * @function + * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB'). + * @returns {jsPDF} + * @example + * var doc = new jsPDF() + * doc.text(10, 10, 'This is a test') + * doc.setLanguage("en-US") + * doc.save('english.pdf') + */ + + jsPDFAPI.setLanguage = function (langCode) { + + var langCodes = { + af: "Afrikaans", + sq: "Albanian", + ar: "Arabic (Standard)", + "ar-DZ": "Arabic (Algeria)", + "ar-BH": "Arabic (Bahrain)", + "ar-EG": "Arabic (Egypt)", + "ar-IQ": "Arabic (Iraq)", + "ar-JO": "Arabic (Jordan)", + "ar-KW": "Arabic (Kuwait)", + "ar-LB": "Arabic (Lebanon)", + "ar-LY": "Arabic (Libya)", + "ar-MA": "Arabic (Morocco)", + "ar-OM": "Arabic (Oman)", + "ar-QA": "Arabic (Qatar)", + "ar-SA": "Arabic (Saudi Arabia)", + "ar-SY": "Arabic (Syria)", + "ar-TN": "Arabic (Tunisia)", + "ar-AE": "Arabic (U.A.E.)", + "ar-YE": "Arabic (Yemen)", + an: "Aragonese", + hy: "Armenian", + as: "Assamese", + ast: "Asturian", + az: "Azerbaijani", + eu: "Basque", + be: "Belarusian", + bn: "Bengali", + bs: "Bosnian", + br: "Breton", + bg: "Bulgarian", + my: "Burmese", + ca: "Catalan", + ch: "Chamorro", + ce: "Chechen", + zh: "Chinese", + "zh-HK": "Chinese (Hong Kong)", + "zh-CN": "Chinese (PRC)", + "zh-SG": "Chinese (Singapore)", + "zh-TW": "Chinese (Taiwan)", + cv: "Chuvash", + co: "Corsican", + cr: "Cree", + hr: "Croatian", + cs: "Czech", + da: "Danish", + nl: "Dutch (Standard)", + "nl-BE": "Dutch (Belgian)", + en: "English", + "en-AU": "English (Australia)", + "en-BZ": "English (Belize)", + "en-CA": "English (Canada)", + "en-IE": "English (Ireland)", + "en-JM": "English (Jamaica)", + "en-NZ": "English (New Zealand)", + "en-PH": "English (Philippines)", + "en-ZA": "English (South Africa)", + "en-TT": "English (Trinidad & Tobago)", + "en-GB": "English (United Kingdom)", + "en-US": "English (United States)", + "en-ZW": "English (Zimbabwe)", + eo: "Esperanto", + et: "Estonian", + fo: "Faeroese", + fj: "Fijian", + fi: "Finnish", + fr: "French (Standard)", + "fr-BE": "French (Belgium)", + "fr-CA": "French (Canada)", + "fr-FR": "French (France)", + "fr-LU": "French (Luxembourg)", + "fr-MC": "French (Monaco)", + "fr-CH": "French (Switzerland)", + fy: "Frisian", + fur: "Friulian", + gd: "Gaelic (Scots)", + "gd-IE": "Gaelic (Irish)", + gl: "Galacian", + ka: "Georgian", + de: "German (Standard)", + "de-AT": "German (Austria)", + "de-DE": "German (Germany)", + "de-LI": "German (Liechtenstein)", + "de-LU": "German (Luxembourg)", + "de-CH": "German (Switzerland)", + el: "Greek", + gu: "Gujurati", + ht: "Haitian", + he: "Hebrew", + hi: "Hindi", + hu: "Hungarian", + is: "Icelandic", + id: "Indonesian", + iu: "Inuktitut", + ga: "Irish", + it: "Italian (Standard)", + "it-CH": "Italian (Switzerland)", + ja: "Japanese", + kn: "Kannada", + ks: "Kashmiri", + kk: "Kazakh", + km: "Khmer", + ky: "Kirghiz", + tlh: "Klingon", + ko: "Korean", + "ko-KP": "Korean (North Korea)", + "ko-KR": "Korean (South Korea)", + la: "Latin", + lv: "Latvian", + lt: "Lithuanian", + lb: "Luxembourgish", + mk: "North Macedonia", + ms: "Malay", + ml: "Malayalam", + mt: "Maltese", + mi: "Maori", + mr: "Marathi", + mo: "Moldavian", + nv: "Navajo", + ng: "Ndonga", + ne: "Nepali", + no: "Norwegian", + nb: "Norwegian (Bokmal)", + nn: "Norwegian (Nynorsk)", + oc: "Occitan", + or: "Oriya", + om: "Oromo", + fa: "Persian", + "fa-IR": "Persian/Iran", + pl: "Polish", + pt: "Portuguese", + "pt-BR": "Portuguese (Brazil)", + pa: "Punjabi", + "pa-IN": "Punjabi (India)", + "pa-PK": "Punjabi (Pakistan)", + qu: "Quechua", + rm: "Rhaeto-Romanic", + ro: "Romanian", + "ro-MO": "Romanian (Moldavia)", + ru: "Russian", + "ru-MO": "Russian (Moldavia)", + sz: "Sami (Lappish)", + sg: "Sango", + sa: "Sanskrit", + sc: "Sardinian", + sd: "Sindhi", + si: "Singhalese", + sr: "Serbian", + sk: "Slovak", + sl: "Slovenian", + so: "Somani", + sb: "Sorbian", + es: "Spanish", + "es-AR": "Spanish (Argentina)", + "es-BO": "Spanish (Bolivia)", + "es-CL": "Spanish (Chile)", + "es-CO": "Spanish (Colombia)", + "es-CR": "Spanish (Costa Rica)", + "es-DO": "Spanish (Dominican Republic)", + "es-EC": "Spanish (Ecuador)", + "es-SV": "Spanish (El Salvador)", + "es-GT": "Spanish (Guatemala)", + "es-HN": "Spanish (Honduras)", + "es-MX": "Spanish (Mexico)", + "es-NI": "Spanish (Nicaragua)", + "es-PA": "Spanish (Panama)", + "es-PY": "Spanish (Paraguay)", + "es-PE": "Spanish (Peru)", + "es-PR": "Spanish (Puerto Rico)", + "es-ES": "Spanish (Spain)", + "es-UY": "Spanish (Uruguay)", + "es-VE": "Spanish (Venezuela)", + sx: "Sutu", + sw: "Swahili", + sv: "Swedish", + "sv-FI": "Swedish (Finland)", + "sv-SV": "Swedish (Sweden)", + ta: "Tamil", + tt: "Tatar", + te: "Teluga", + th: "Thai", + tig: "Tigre", + ts: "Tsonga", + tn: "Tswana", + tr: "Turkish", + tk: "Turkmen", + uk: "Ukrainian", + hsb: "Upper Sorbian", + ur: "Urdu", + ve: "Venda", + vi: "Vietnamese", + vo: "Volapuk", + wa: "Walloon", + cy: "Welsh", + xh: "Xhosa", + ji: "Yiddish", + zu: "Zulu" + }; + + if (this.internal.languageSettings === undefined) { + this.internal.languageSettings = {}; + this.internal.languageSettings.isSubscribed = false; + } + + if (langCodes[langCode] !== undefined) { + this.internal.languageSettings.languageCode = langCode; + + if (this.internal.languageSettings.isSubscribed === false) { + this.internal.events.subscribe("putCatalog", function () { + this.internal.write("/Lang (" + this.internal.languageSettings.languageCode + ")"); + }); + this.internal.languageSettings.isSubscribed = true; + } + } + + return this; + }; + })(jsPDF.API); + + /** + * jsPDF split_text_to_size plugin + * + * @name split_text_to_size + * @module + */ + + (function (API) { + /** + * Returns an array of length matching length of the 'word' string, with each + * cell occupied by the width of the char in that position. + * + * @name getCharWidthsArray + * @function + * @param {string} text + * @param {Object} options + * @returns {Array} + */ + + var getCharWidthsArray = API.getCharWidthsArray = function (text, options) { + options = options || {}; + var activeFont = options.font || this.internal.getFont(); + var fontSize = options.fontSize || this.internal.getFontSize(); + var charSpace = options.charSpace || this.internal.getCharSpace(); + var widths = options.widths ? options.widths : activeFont.metadata.Unicode.widths; + var widthsFractionOf = widths.fof ? widths.fof : 1; + var kerning = options.kerning ? options.kerning : activeFont.metadata.Unicode.kerning; + var kerningFractionOf = kerning.fof ? kerning.fof : 1; + var doKerning = options.doKerning === false ? false : true; + var kerningValue = 0; + var i; + var length = text.length; + var char_code; + var prior_char_code = 0; //for kerning + + var default_char_width = widths[0] || widthsFractionOf; + var output = []; + + for (i = 0; i < length; i++) { + char_code = text.charCodeAt(i); + + if (typeof activeFont.metadata.widthOfString === "function") { + output.push((activeFont.metadata.widthOfGlyph(activeFont.metadata.characterToGlyph(char_code)) + charSpace * (1000 / fontSize) || 0) / 1000); + } else { + if (doKerning && _typeof(kerning[char_code]) === "object" && !isNaN(parseInt(kerning[char_code][prior_char_code], 10))) { + kerningValue = kerning[char_code][prior_char_code] / kerningFractionOf; + } else { + kerningValue = 0; + } + + output.push((widths[char_code] || default_char_width) / widthsFractionOf + kerningValue); + } + + prior_char_code = char_code; + } + + return output; + }; + /** + * Returns a widths of string in a given font, if the font size is set as 1 point. + * + * In other words, this is "proportional" value. For 1 unit of font size, the length + * of the string will be that much. + * + * Multiply by font size to get actual width in *points* + * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc. + * + * @name getStringUnitWidth + * @public + * @function + * @param {string} text + * @param {string} options + * @returns {number} result + */ + + + var getStringUnitWidth = API.getStringUnitWidth = function (text, options) { + options = options || {}; + var fontSize = options.fontSize || this.internal.getFontSize(); + var font = options.font || this.internal.getFont(); + var charSpace = options.charSpace || this.internal.getCharSpace(); + var result = 0; + + if (API.processArabic) { + text = API.processArabic(text); + } + + if (typeof font.metadata.widthOfString === "function") { + result = font.metadata.widthOfString(text, fontSize, charSpace) / fontSize; + } else { + result = getCharWidthsArray.apply(this, arguments).reduce(function (pv, cv) { + return pv + cv; + }, 0); + } + + return result; + }; + /** + returns array of lines + */ + + + var splitLongWord = function splitLongWord(word, widths_array, firstLineMaxLen, maxLen) { + var answer = []; // 1st, chop off the piece that can fit on the hanging line. + + var i = 0, + l = word.length, + workingLen = 0; + + while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) { + workingLen += widths_array[i]; + i++; + } // this is first line. + + + answer.push(word.slice(0, i)); // 2nd. Split the rest into maxLen pieces. + + var startOfLine = i; + workingLen = 0; + + while (i !== l) { + if (workingLen + widths_array[i] > maxLen) { + answer.push(word.slice(startOfLine, i)); + workingLen = 0; + startOfLine = i; + } + + workingLen += widths_array[i]; + i++; + } + + if (startOfLine !== i) { + answer.push(word.slice(startOfLine, i)); + } + + return answer; + }; // Note, all sizing inputs for this function must be in "font measurement units" + // By default, for PDF, it's "point". + + + var splitParagraphIntoLines = function splitParagraphIntoLines(text, maxlen, options) { + // at this time works only on Western scripts, ones with space char + // separating the words. Feel free to expand. + if (!options) { + options = {}; + } + + var line = [], + lines = [line], + line_length = options.textIndent || 0, + separator_length = 0, + current_word_length = 0, + word, + widths_array, + words = text.split(" "), + spaceCharWidth = getCharWidthsArray.apply(this, [" ", options])[0], + i, + l, + tmp, + lineIndent; + + if (options.lineIndent === -1) { + lineIndent = words[0].length + 2; + } else { + lineIndent = options.lineIndent || 0; + } + + if (lineIndent) { + var pad = Array(lineIndent).join(" "), + wrds = []; + words.map(function (wrd) { + wrd = wrd.split(/\s*\n/); + + if (wrd.length > 1) { + wrds = wrds.concat(wrd.map(function (wrd, idx) { + return (idx && wrd.length ? "\n" : "") + wrd; + })); + } else { + wrds.push(wrd[0]); + } + }); + words = wrds; + lineIndent = getStringUnitWidth.apply(this, [pad, options]); + } + + for (i = 0, l = words.length; i < l; i++) { + var force = 0; + word = words[i]; + + if (lineIndent && word[0] == "\n") { + word = word.substr(1); + force = 1; + } + + widths_array = getCharWidthsArray.apply(this, [word, options]); + current_word_length = widths_array.reduce(function (pv, cv) { + return pv + cv; + }, 0); + + if (line_length + separator_length + current_word_length > maxlen || force) { + if (current_word_length > maxlen) { + // this happens when you have space-less long URLs for example. + // we just chop these to size. We do NOT insert hiphens + tmp = splitLongWord.apply(this, [word, widths_array, maxlen - (line_length + separator_length), maxlen]); // first line we add to existing line object + + line.push(tmp.shift()); // it's ok to have extra space indicator there + // last line we make into new line object + + line = [tmp.pop()]; // lines in the middle we apped to lines object as whole lines + + while (tmp.length) { + lines.push([tmp.shift()]); // single fragment occupies whole line + } + + current_word_length = widths_array.slice(word.length - (line[0] ? line[0].length : 0)).reduce(function (pv, cv) { + return pv + cv; + }, 0); + } else { + // just put it on a new line + line = [word]; + } // now we attach new line to lines + + + lines.push(line); + line_length = current_word_length + lineIndent; + separator_length = spaceCharWidth; + } else { + line.push(word); + line_length += separator_length + current_word_length; + separator_length = spaceCharWidth; + } + } + + var postProcess; + + if (lineIndent) { + postProcess = function postProcess(ln, idx) { + return (idx ? pad : "") + ln.join(" "); + }; + } else { + postProcess = function postProcess(ln) { + return ln.join(" "); + }; + } + + return lines.map(postProcess); + }; + /** + * Splits a given string into an array of strings. Uses 'size' value + * (in measurement units declared as default for the jsPDF instance) + * and the font's "widths" and "Kerning" tables, where available, to + * determine display length of a given string for a given font. + * + * We use character's 100% of unit size (height) as width when Width + * table or other default width is not available. + * + * @name splitTextToSize + * @public + * @function + * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string. + * @param {number} size Nominal number, measured in units default to this instance of jsPDF. + * @param {Object} options Optional flags needed for chopper to do the right thing. + * @returns {Array} array Array with strings chopped to size. + */ + + + API.splitTextToSize = function (text, maxlen, options) { + + options = options || {}; + + var fsize = options.fontSize || this.internal.getFontSize(), + newOptions = function (options) { + var widths = { + 0: 1 + }, + kerning = {}; + + if (!options.widths || !options.kerning) { + var f = this.internal.getFont(options.fontName, options.fontStyle), + encoding = "Unicode"; // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE + // Actual JavaScript-native String's 16bit char codes used. + // no multi-byte logic here + + if (f.metadata[encoding]) { + return { + widths: f.metadata[encoding].widths || widths, + kerning: f.metadata[encoding].kerning || kerning + }; + } else { + return { + font: f.metadata, + fontSize: this.internal.getFontSize(), + charSpace: this.internal.getCharSpace() + }; + } + } else { + return { + widths: options.widths, + kerning: options.kerning + }; + } + }.call(this, options); // first we split on end-of-line chars + + + var paragraphs; + + if (Array.isArray(text)) { + paragraphs = text; + } else { + paragraphs = String(text).split(/\r?\n/); + } // now we convert size (max length of line) into "font size units" + // at present time, the "font size unit" is always 'point' + // 'proportional' means, "in proportion to font size" + + + var fontUnit_maxLen = 1.0 * this.internal.scaleFactor * maxlen / fsize; // at this time, fsize is always in "points" regardless of the default measurement unit of the doc. + // this may change in the future? + // until then, proportional_maxlen is likely to be in 'points' + // If first line is to be indented (shorter or longer) than maxLen + // we indicate that by using CSS-style "text-indent" option. + // here it's in font units too (which is likely 'points') + // it can be negative (which makes the first line longer than maxLen) + + newOptions.textIndent = options.textIndent ? options.textIndent * 1.0 * this.internal.scaleFactor / fsize : 0; + newOptions.lineIndent = options.lineIndent; + var i, + l, + output = []; + + for (i = 0, l = paragraphs.length; i < l; i++) { + output = output.concat(splitParagraphIntoLines.apply(this, [paragraphs[i], fontUnit_maxLen, newOptions])); + } + + return output; + }; + })(jsPDF.API); + + /** + * This file adds the standard font metrics to jsPDF. + * + * Font metrics data is reprocessed derivative of contents of + * "Font Metrics for PDF Core 14 Fonts" package, which exhibits the following copyright and license: + * + * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. + * + * This file and the 14 PostScript(R) AFM files it accompanies may be used, + * copied, and distributed for any purpose and without charge, with or without + * modification, provided that all copyright notices are retained; that the AFM + * files are not distributed without this file; that all modifications to this + * file or any of the AFM files are prominently noted in the modified file(s); + * and that this paragraph is not modified. Adobe Systems has no responsibility + * or obligation to support the use of the AFM files. + * + * @name standard_fonts_metrics + * @module + */ + + (function (API) { + + API.__fontmetrics__ = API.__fontmetrics__ || {}; + var decoded = "0123456789abcdef", + encoded = "klmnopqrstuvwxyz", + mappingUncompress = {}, + mappingCompress = {}; + + for (var i = 0; i < encoded.length; i++) { + mappingUncompress[encoded[i]] = decoded[i]; + mappingCompress[decoded[i]] = encoded[i]; + } + + var hex = function hex(value) { + return "0x" + parseInt(value, 10).toString(16); + }; + + var compress = API.__fontmetrics__.compress = function (data) { + var vals = ["{"]; + var value, keystring, valuestring, numberprefix; + + for (var key in data) { + value = data[key]; + + if (!isNaN(parseInt(key, 10))) { + key = parseInt(key, 10); + keystring = hex(key).slice(2); + keystring = keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)]; + } else { + keystring = "'" + key + "'"; + } + + if (typeof value == "number") { + if (value < 0) { + valuestring = hex(value).slice(3); + numberprefix = "-"; + } else { + valuestring = hex(value).slice(2); + numberprefix = ""; + } + + valuestring = numberprefix + valuestring.slice(0, -1) + mappingCompress[valuestring.slice(-1)]; + } else { + if (_typeof(value) === "object") { + valuestring = compress(value); + } else { + throw new Error("Don't know what to do with value type " + _typeof(value) + "."); + } + } + + vals.push(keystring + valuestring); + } + + vals.push("}"); + return vals.join(""); + }; + /** + * Uncompresses data compressed into custom, base16-like format. + * + * @public + * @function + * @param + * @returns {Type} + */ + + + var uncompress = API.__fontmetrics__.uncompress = function (data) { + if (typeof data !== "string") { + throw new Error("Invalid argument passed to uncompress."); + } + + var output = {}, + sign = 1, + stringparts, + // undef. will be [] in string mode + activeobject = output, + parentchain = [], + parent_key_pair, + keyparts = "", + valueparts = "", + key, + // undef. will be Truthy when Key is resolved. + datalen = data.length - 1, + // stripping ending } + ch; + + for (var i = 1; i < datalen; i += 1) { + // - { } ' are special. + ch = data[i]; + + if (ch == "'") { + if (stringparts) { + // end of string mode + key = stringparts.join(""); + stringparts = undefined; + } else { + // start of string mode + stringparts = []; + } + } else if (stringparts) { + stringparts.push(ch); + } else if (ch == "{") { + // start of object + parentchain.push([activeobject, key]); + activeobject = {}; + key = undefined; + } else if (ch == "}") { + // end of object + parent_key_pair = parentchain.pop(); + parent_key_pair[0][parent_key_pair[1]] = activeobject; + key = undefined; + activeobject = parent_key_pair[0]; + } else if (ch == "-") { + sign = -1; + } else { + // must be number + if (key === undefined) { + if (mappingUncompress.hasOwnProperty(ch)) { + keyparts += mappingUncompress[ch]; + key = parseInt(keyparts, 16) * sign; + sign = +1; + keyparts = ""; + } else { + keyparts += ch; + } + } else { + if (mappingUncompress.hasOwnProperty(ch)) { + valueparts += mappingUncompress[ch]; + activeobject[key] = parseInt(valueparts, 16) * sign; + sign = +1; + key = undefined; + valueparts = ""; + } else { + valueparts += ch; + } + } + } + } + + return output; + }; // encoding = 'Unicode' + // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior + // Actual 16bit char codes used. + // no multi-byte logic here + // Unicode characters to WinAnsiEncoding: + // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158} + // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts. + // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly + // as well as give strings with some (supported by these fonts) Unicode characters and + // these will be mapped to win cp1252 + // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting "Euro" glyph displayed in both cases. + + + var encodingBlock = { + codePages: ["WinAnsiEncoding"], + WinAnsiEncoding: uncompress("{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}") + }; + var encodings = { + Unicode: { + Courier: encodingBlock, + "Courier-Bold": encodingBlock, + "Courier-BoldOblique": encodingBlock, + "Courier-Oblique": encodingBlock, + Helvetica: encodingBlock, + "Helvetica-Bold": encodingBlock, + "Helvetica-BoldOblique": encodingBlock, + "Helvetica-Oblique": encodingBlock, + "Times-Roman": encodingBlock, + "Times-Bold": encodingBlock, + "Times-BoldItalic": encodingBlock, + "Times-Italic": encodingBlock // , 'Symbol' + // , 'ZapfDingbats' + + } + }; + var fontMetrics = { + Unicode: { + // all sizing numbers are n/fontMetricsFractionOf = one font size unit + // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's + // width is 476/1000 or 47.6% of its height (regardless of font size) + // At this time this value applies to "widths" and "kerning" numbers. + // char code 0 represents "default" (average) width - use it for chars missing in this table. + // key 'fof' represents the "fontMetricsFractionOf" value + "Courier-Oblique": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-BoldItalic": uncompress("{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}"), + "Helvetica-Bold": uncompress("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"), + Courier: uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Courier-BoldOblique": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-Bold": uncompress("{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}"), + Symbol: uncompress("{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}"), + Helvetica: uncompress("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}"), + "Helvetica-BoldOblique": uncompress("{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}"), + ZapfDingbats: uncompress("{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}"), + "Courier-Bold": uncompress("{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}"), + "Times-Italic": uncompress("{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}"), + "Times-Roman": uncompress("{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}"), + "Helvetica-Oblique": uncompress("{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}") + } + }; + /* + This event handler is fired when a new jsPDF object is initialized + This event handler appends metrics data to standard fonts within + that jsPDF instance. The metrics are mapped over Unicode character + codes, NOT CIDs or other codes matching the StandardEncoding table of the + standard PDF fonts. + Future: + Also included is the encoding maping table, converting Unicode (UCS-2, UTF-16) + char codes to StandardEncoding character codes. The encoding table is to be used + somewhere around "pdfEscape" call. + */ + + API.events.push(["addFont", function (data) { + var font = data.font; + var metrics = fontMetrics["Unicode"][font.postScriptName]; + + if (metrics) { + font.metadata["Unicode"] = {}; + font.metadata["Unicode"].widths = metrics.widths; + font.metadata["Unicode"].kerning = metrics.kerning; + } + + var encodingBlock = encodings["Unicode"][font.postScriptName]; + + if (encodingBlock) { + font.metadata["Unicode"].encoding = encodingBlock; + font.encoding = encodingBlock.codePages[0]; + } + }]); // end of adding event handler + })(jsPDF.API); + + /** + * @license + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * @name ttfsupport + * @module + */ + + (function (jsPDF) { + + var binaryStringToUint8Array = function binaryStringToUint8Array(binary_string) { + var len = binary_string.length; + var bytes = new Uint8Array(len); + + for (var i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + + return bytes; + }; + + var addFont = function addFont(font, file) { + // eslint-disable-next-line no-control-regex + if (/^\x00\x01\x00\x00/.test(file)) { + file = binaryStringToUint8Array(file); + } else { + file = binaryStringToUint8Array(atob(file)); + } + + font.metadata = jsPDF.API.TTFFont.open(file); + font.metadata.Unicode = font.metadata.Unicode || { + encoding: {}, + kerning: {}, + widths: [] + }; + font.metadata.glyIdsUsed = [0]; + }; + + jsPDF.API.events.push(["addFont", function (data) { + var file = undefined; + var font = data.font; + var instance = data.instance; + + if (font.isStandardFont) { + return; + } + + if (typeof instance !== "undefined") { + if (instance.existsFileInVFS(font.postScriptName) === false) { + file = instance.loadFile(font.postScriptName); + } else { + file = instance.getFileFromVFS(font.postScriptName); + } + + if (typeof file !== "string") { + throw new Error("Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('" + font.postScriptName + "')."); + } + + addFont(font, file); + } else { + throw new Error("Font does not exist in vFS, import fonts or remove declaration doc.addFont('" + font.postScriptName + "')."); + } + }]); // end of adding event handler + })(jsPDF); + + /** + * jsPDF SVG plugin + * + * @name svg + * @module + */ + + (function (jsPDFAPI) { + + function loadCanvg() { + return function () { + if (globalObject["canvg"]) { + return Promise.resolve(globalObject["canvg"]); + } + + if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") { + return new Promise(function (resolve, reject) { + try { + resolve(require("canvg")); + } catch (e) { + reject(e); + } + }); + } + + if (typeof define === "function" && define.amd) { + return new Promise(function (resolve, reject) { + try { + require(["canvg"], resolve); + } catch (e) { + reject(e); + } + }); + } + + return Promise.reject(new Error("Could not load canvg")); + }().catch(function (e) { + return Promise.reject(new Error("Could not load canvg: " + e)); + }).then(function (canvg) { + return canvg.default ? canvg.default : canvg; + }); + } + /** + * Parses SVG XML and saves it as image into the PDF. + * + * Depends on canvas-element and canvg + * + * @name addSvgAsImage + * @public + * @function + * @param {string} SVG-Data as Text + * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page + * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page + * @param {number} width of SVG-Image (in units declared at inception of PDF document) + * @param {number} height of SVG-Image (in units declared at inception of PDF document) + * @param {string} alias of SVG-Image (if used multiple times) + * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW' + * @param {number} rotation of the image in degrees (0-359) + * + * @returns jsPDF jsPDF-instance + */ + + + jsPDFAPI.addSvgAsImage = function (svg, x, y, w, h, alias, compression, rotation) { + if (isNaN(x) || isNaN(y)) { + console.error("jsPDF.addSvgAsImage: Invalid coordinates", arguments); + throw new Error("Invalid coordinates passed to jsPDF.addSvgAsImage"); + } + + if (isNaN(w) || isNaN(h)) { + console.error("jsPDF.addSvgAsImage: Invalid measurements", arguments); + throw new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage"); + } + + var canvas = document.createElement("canvas"); + canvas.width = w; + canvas.height = h; + var ctx = canvas.getContext("2d"); + ctx.fillStyle = "#fff"; /// set white fill style + + ctx.fillRect(0, 0, canvas.width, canvas.height); + var options = { + ignoreMouse: true, + ignoreAnimation: true, + ignoreDimensions: true + }; + var doc = this; + return loadCanvg().then(function (canvg) { + return canvg.fromString(ctx, svg, options); + }, function () { + return Promise.reject(new Error("Could not load canvg.")); + }).then(function (instance) { + return instance.render(options); + }).then(function () { + doc.addImage(canvas.toDataURL("image/jpeg", 1.0), x, y, w, h, compression, rotation); + }); + }; + })(jsPDF.API); + + /** + * @license + * ==================================================================== + * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br + * + * 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. + * ==================================================================== + */ + /** + * jsPDF total_pages plugin + * @name total_pages + * @module + */ + + (function (jsPDFAPI) { + /** + * @name putTotalPages + * @function + * @param {string} pageExpression Regular Expression + * @returns {jsPDF} jsPDF-instance + */ + + jsPDFAPI.putTotalPages = function (pageExpression) { + + var replaceExpression; + var totalNumberOfPages = 0; + + if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) { + replaceExpression = new RegExp(pageExpression, "g"); + totalNumberOfPages = this.internal.getNumberOfPages(); + } else { + replaceExpression = new RegExp(this.pdfEscape16(pageExpression, this.internal.getFont()), "g"); + totalNumberOfPages = this.pdfEscape16(this.internal.getNumberOfPages() + "", this.internal.getFont()); + } + + for (var n = 1; n <= this.internal.getNumberOfPages(); n++) { + for (var i = 0; i < this.internal.pages[n].length; i++) { + this.internal.pages[n][i] = this.internal.pages[n][i].replace(replaceExpression, totalNumberOfPages); + } + } + + return this; + }; + })(jsPDF.API); + + /** + * Adds the ability to set ViewerPreferences and by thus + * controlling the way the document is to be presented on the + * screen or in print. + * @name viewerpreferences + * @module + */ + + (function (jsPDFAPI) { + /** + * Set the ViewerPreferences of the generated PDF + * + * @name viewerPreferences + * @function + * @public + * @param {Object} options Array with the ViewerPreferences
    + * Example: doc.viewerPreferences({"FitWindow":true});
    + *
    + * You can set following preferences:
    + *
    + * HideToolbar (boolean)
    + * Default value: false
    + *
    + * HideMenubar (boolean)
    + * Default value: false.
    + *
    + * HideWindowUI (boolean)
    + * Default value: false.
    + *
    + * FitWindow (boolean)
    + * Default value: false.
    + *
    + * CenterWindow (boolean)
    + * Default value: false
    + *
    + * DisplayDocTitle (boolean)
    + * Default value: false.
    + *
    + * NonFullScreenPageMode (string)
    + * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    + * Default value: UseNone
    + *
    + * Direction (string)
    + * Possible values: L2R, R2L
    + * Default value: L2R.
    + *
    + * ViewArea (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox.
    + *
    + * ViewClip (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox
    + *
    + * PrintArea (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox
    + *
    + * PrintClip (string)
    + * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    + * Default value: CropBox.
    + *
    + * PrintScaling (string)
    + * Possible values: AppDefault, None
    + * Default value: AppDefault.
    + *
    + * Duplex (string)
    + * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge + * Default value: none
    + *
    + * PickTrayByPDFSize (boolean)
    + * Default value: false
    + *
    + * PrintPageRange (Array)
    + * Example: [[1,5], [7,9]]
    + * Default value: as defined by PDF viewer application
    + *
    + * NumCopies (Number)
    + * Possible values: 1, 2, 3, 4, 5
    + * Default value: 1
    + *
    + * For more information see the PDF Reference, sixth edition on Page 577 + * @param {boolean} doReset True to reset the settings + * @function + * @returns jsPDF jsPDF-instance + * @example + * var doc = new jsPDF() + * doc.text('This is a test', 10, 10) + * doc.viewerPreferences({'FitWindow': true}, true) + * doc.save("viewerPreferences.pdf") + * + * // Example printing 10 copies, using cropbox, and hiding UI. + * doc.viewerPreferences({ + * 'HideWindowUI': true, + * 'PrintArea': 'CropBox', + * 'NumCopies': 10 + * }) + */ + + jsPDFAPI.viewerPreferences = function (options, doReset) { + options = options || {}; + doReset = doReset || false; + var configuration; + var configurationTemplate = { + HideToolbar: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + HideMenubar: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + HideWindowUI: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + FitWindow: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + CenterWindow: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.3 + }, + DisplayDocTitle: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.4 + }, + NonFullScreenPageMode: { + defaultValue: "UseNone", + value: "UseNone", + type: "name", + explicitSet: false, + valueSet: ["UseNone", "UseOutlines", "UseThumbs", "UseOC"], + pdfVersion: 1.3 + }, + Direction: { + defaultValue: "L2R", + value: "L2R", + type: "name", + explicitSet: false, + valueSet: ["L2R", "R2L"], + pdfVersion: 1.3 + }, + ViewArea: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + ViewClip: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintArea: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintClip: { + defaultValue: "CropBox", + value: "CropBox", + type: "name", + explicitSet: false, + valueSet: ["MediaBox", "CropBox", "TrimBox", "BleedBox", "ArtBox"], + pdfVersion: 1.4 + }, + PrintScaling: { + defaultValue: "AppDefault", + value: "AppDefault", + type: "name", + explicitSet: false, + valueSet: ["AppDefault", "None"], + pdfVersion: 1.6 + }, + Duplex: { + defaultValue: "", + value: "none", + type: "name", + explicitSet: false, + valueSet: ["Simplex", "DuplexFlipShortEdge", "DuplexFlipLongEdge", "none"], + pdfVersion: 1.7 + }, + PickTrayByPDFSize: { + defaultValue: false, + value: false, + type: "boolean", + explicitSet: false, + valueSet: [true, false], + pdfVersion: 1.7 + }, + PrintPageRange: { + defaultValue: "", + value: "", + type: "array", + explicitSet: false, + valueSet: null, + pdfVersion: 1.7 + }, + NumCopies: { + defaultValue: 1, + value: 1, + type: "integer", + explicitSet: false, + valueSet: null, + pdfVersion: 1.7 + } + }; + var configurationKeys = Object.keys(configurationTemplate); + var rangeArray = []; + var i = 0; + var j = 0; + var k = 0; + var isValid; + var method; + var value; + + function arrayContainsElement(array, element) { + var iterator; + var result = false; + + for (iterator = 0; iterator < array.length; iterator += 1) { + if (array[iterator] === element) { + result = true; + } + } + + return result; + } + + if (this.internal.viewerpreferences === undefined) { + this.internal.viewerpreferences = {}; + this.internal.viewerpreferences.configuration = JSON.parse(JSON.stringify(configurationTemplate)); + this.internal.viewerpreferences.isSubscribed = false; + } + + configuration = this.internal.viewerpreferences.configuration; + + if (options === "reset" || doReset === true) { + var len = configurationKeys.length; + + for (k = 0; k < len; k += 1) { + configuration[configurationKeys[k]].value = configuration[configurationKeys[k]].defaultValue; + configuration[configurationKeys[k]].explicitSet = false; + } + } + + if (_typeof(options) === "object") { + for (method in options) { + value = options[method]; + + if (arrayContainsElement(configurationKeys, method) && value !== undefined) { + if (configuration[method].type === "boolean" && typeof value === "boolean") { + configuration[method].value = value; + } else if (configuration[method].type === "name" && arrayContainsElement(configuration[method].valueSet, value)) { + configuration[method].value = value; + } else if (configuration[method].type === "integer" && Number.isInteger(value)) { + configuration[method].value = value; + } else if (configuration[method].type === "array") { + for (i = 0; i < value.length; i += 1) { + isValid = true; + + if (value[i].length === 1 && typeof value[i][0] === "number") { + rangeArray.push(String(value[i] - 1)); + } else if (value[i].length > 1) { + for (j = 0; j < value[i].length; j += 1) { + if (typeof value[i][j] !== "number") { + isValid = false; + } + } + + if (isValid === true) { + rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(" ")); + } + } + } + + configuration[method].value = "[" + rangeArray.join(" ") + "]"; + } else { + configuration[method].value = configuration[method].defaultValue; + } + + configuration[method].explicitSet = true; + } + } + } + + if (this.internal.viewerpreferences.isSubscribed === false) { + this.internal.events.subscribe("putCatalog", function () { + var pdfDict = []; + var vPref; + + for (vPref in configuration) { + if (configuration[vPref].explicitSet === true) { + if (configuration[vPref].type === "name") { + pdfDict.push("/" + vPref + " /" + configuration[vPref].value); + } else { + pdfDict.push("/" + vPref + " " + configuration[vPref].value); + } + } + } + + if (pdfDict.length !== 0) { + this.internal.write("/ViewerPreferences\n<<\n" + pdfDict.join("\n") + "\n>>"); + } + }); + this.internal.viewerpreferences.isSubscribed = true; + } + + this.internal.viewerpreferences.configuration = configuration; + return this; + }; + })(jsPDF.API); + + /** ==================================================================== + * @license + * jsPDF XMP metadata plugin + * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi + * + * 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. + * ==================================================================== + */ + /** + * @name xmp_metadata + * @module + */ + + (function (jsPDFAPI) { + + var postPutResources = function postPutResources() { + var xmpmeta_beginning = ''; + var rdf_beginning = ''; + var rdf_ending = ""; + var xmpmeta_ending = ""; + var utf8_xmpmeta_beginning = unescape(encodeURIComponent(xmpmeta_beginning)); + var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning)); + var utf8_metadata = unescape(encodeURIComponent(this.internal.__metadata__.metadata)); + var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending)); + var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending)); + var total_len = utf8_rdf_beginning.length + utf8_metadata.length + utf8_rdf_ending.length + utf8_xmpmeta_beginning.length + utf8_xmpmeta_ending.length; + this.internal.__metadata__.metadata_object_number = this.internal.newObject(); + this.internal.write("<< /Type /Metadata /Subtype /XML /Length " + total_len + " >>"); + this.internal.write("stream"); + this.internal.write(utf8_xmpmeta_beginning + utf8_rdf_beginning + utf8_metadata + utf8_rdf_ending + utf8_xmpmeta_ending); + this.internal.write("endstream"); + this.internal.write("endobj"); + }; + + var putCatalog = function putCatalog() { + if (this.internal.__metadata__.metadata_object_number) { + this.internal.write("/Metadata " + this.internal.__metadata__.metadata_object_number + " 0 R"); + } + }; + /** + * Adds XMP formatted metadata to PDF + * + * @name addMetadata + * @function + * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters "<", ">" or "&", those characters should be written using XML entities. + * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash. + * @returns {jsPDF} jsPDF-instance + */ + + + jsPDFAPI.addMetadata = function (metadata, namespaceuri) { + if (typeof this.internal.__metadata__ === "undefined") { + this.internal.__metadata__ = { + metadata: metadata, + namespaceuri: namespaceuri || "http://jspdf.default.namespaceuri/" + }; + this.internal.events.subscribe("putCatalog", putCatalog); + this.internal.events.subscribe("postPutResources", postPutResources); + } + + return this; + }; + })(jsPDF.API); + + /** + * @name utf8 + * @module + */ + + (function (jsPDF) { + + var jsPDFAPI = jsPDF.API; + /***************************************************************************************************/ + + /* function : pdfEscape16 */ + + /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */ + + /* the corresponding glyph id and width, and then adding padding to the string. */ + + /***************************************************************************************************/ + + var pdfEscape16 = jsPDFAPI.pdfEscape16 = function (text, font) { + var widths = font.metadata.Unicode.widths; + var padz = ["", "0", "00", "000", "0000"]; + var ar = [""]; + + for (var i = 0, l = text.length, t; i < l; ++i) { + t = font.metadata.characterToGlyph(text.charCodeAt(i)); + font.metadata.glyIdsUsed.push(t); + font.metadata.toUnicode[t] = text.charCodeAt(i); + + if (widths.indexOf(t) == -1) { + widths.push(t); + widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]); + } + + if (t == "0") { + //Spaces are not allowed in cmap. + return ar.join(""); + } else { + t = t.toString(16); + ar.push(padz[4 - t.length], t); + } + } + + return ar.join(""); + }; + + var toUnicodeCmap = function toUnicodeCmap(map) { + var code, codes, range, unicode, unicodeMap, _i, _len; + + unicodeMap = "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange"; + codes = Object.keys(map).sort(function (a, b) { + return a - b; + }); + range = []; + + for (_i = 0, _len = codes.length; _i < _len; _i++) { + code = codes[_i]; + + if (range.length >= 100) { + unicodeMap += "\n" + range.length + " beginbfchar\n" + range.join("\n") + "\nendbfchar"; + range = []; + } + + if (map[code] !== undefined && map[code] !== null && typeof map[code].toString === "function") { + unicode = ("0000" + map[code].toString(16)).slice(-4); + code = ("0000" + (+code).toString(16)).slice(-4); + range.push("<" + code + "><" + unicode + ">"); + } + } + + if (range.length) { + unicodeMap += "\n" + range.length + " beginbfchar\n" + range.join("\n") + "\nendbfchar\n"; + } + + unicodeMap += "endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; + return unicodeMap; + }; + + var identityHFunction = function identityHFunction(options) { + var font = options.font; + var out = options.out; + var newObject = options.newObject; + var putStream = options.putStream; + + if (font.metadata instanceof jsPDF.API.TTFFont && font.encoding === "Identity-H") { + //Tag with Identity-H + var widths = font.metadata.Unicode.widths; + var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1); + var pdfOutput = data; + var pdfOutput2 = ""; + + for (var i = 0; i < pdfOutput.length; i++) { + pdfOutput2 += String.fromCharCode(pdfOutput[i]); + } + + var fontTable = newObject(); + putStream({ + data: pdfOutput2, + addLength1: true, + objectId: fontTable + }); + out("endobj"); + var cmap = newObject(); + var cmapData = toUnicodeCmap(font.metadata.toUnicode); + putStream({ + data: cmapData, + addLength1: true, + objectId: cmap + }); + out("endobj"); + var fontDescriptor = newObject(); + out("<<"); + out("/Type /FontDescriptor"); + out("/FontName /" + toPDFName(font.fontName)); + out("/FontFile2 " + fontTable + " 0 R"); + out("/FontBBox " + jsPDF.API.PDFObject.convert(font.metadata.bbox)); + out("/Flags " + font.metadata.flags); + out("/StemV " + font.metadata.stemV); + out("/ItalicAngle " + font.metadata.italicAngle); + out("/Ascent " + font.metadata.ascender); + out("/Descent " + font.metadata.decender); + out("/CapHeight " + font.metadata.capHeight); + out(">>"); + out("endobj"); + var DescendantFont = newObject(); + out("<<"); + out("/Type /Font"); + out("/BaseFont /" + toPDFName(font.fontName)); + out("/FontDescriptor " + fontDescriptor + " 0 R"); + out("/W " + jsPDF.API.PDFObject.convert(widths)); + out("/CIDToGIDMap /Identity"); + out("/DW 1000"); + out("/Subtype /CIDFontType2"); + out("/CIDSystemInfo"); + out("<<"); + out("/Supplement 0"); + out("/Registry (Adobe)"); + out("/Ordering (" + font.encoding + ")"); + out(">>"); + out(">>"); + out("endobj"); + font.objectNumber = newObject(); + out("<<"); + out("/Type /Font"); + out("/Subtype /Type0"); + out("/ToUnicode " + cmap + " 0 R"); + out("/BaseFont /" + toPDFName(font.fontName)); + out("/Encoding /" + font.encoding); + out("/DescendantFonts [" + DescendantFont + " 0 R]"); + out(">>"); + out("endobj"); + font.isAlreadyPutted = true; + } + }; + + jsPDFAPI.events.push(["putFont", function (args) { + identityHFunction(args); + }]); + + var winAnsiEncodingFunction = function winAnsiEncodingFunction(options) { + var font = options.font; + var out = options.out; + var newObject = options.newObject; + var putStream = options.putStream; + + if (font.metadata instanceof jsPDF.API.TTFFont && font.encoding === "WinAnsiEncoding") { + //Tag with WinAnsi encoding + var data = font.metadata.rawData; + var pdfOutput = data; + var pdfOutput2 = ""; + + for (var i = 0; i < pdfOutput.length; i++) { + pdfOutput2 += String.fromCharCode(pdfOutput[i]); + } + + var fontTable = newObject(); + putStream({ + data: pdfOutput2, + addLength1: true, + objectId: fontTable + }); + out("endobj"); + var cmap = newObject(); + var cmapData = toUnicodeCmap(font.metadata.toUnicode); + putStream({ + data: cmapData, + addLength1: true, + objectId: cmap + }); + out("endobj"); + var fontDescriptor = newObject(); + out("<<"); + out("/Descent " + font.metadata.decender); + out("/CapHeight " + font.metadata.capHeight); + out("/StemV " + font.metadata.stemV); + out("/Type /FontDescriptor"); + out("/FontFile2 " + fontTable + " 0 R"); + out("/Flags 96"); + out("/FontBBox " + jsPDF.API.PDFObject.convert(font.metadata.bbox)); + out("/FontName /" + toPDFName(font.fontName)); + out("/ItalicAngle " + font.metadata.italicAngle); + out("/Ascent " + font.metadata.ascender); + out(">>"); + out("endobj"); + font.objectNumber = newObject(); + + for (var j = 0; j < font.metadata.hmtx.widths.length; j++) { + font.metadata.hmtx.widths[j] = parseInt(font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)); //Change the width of Em units to Point units. + } + + out("<>"); + out("endobj"); + font.isAlreadyPutted = true; + } + }; + + jsPDFAPI.events.push(["putFont", function (args) { + winAnsiEncodingFunction(args); + }]); + + var utf8TextFunction = function utf8TextFunction(args) { + var text = args.text || ""; + var x = args.x; + var y = args.y; + var options = args.options || {}; + var mutex = args.mutex || {}; + var pdfEscape = mutex.pdfEscape; + var activeFontKey = mutex.activeFontKey; + var fonts = mutex.fonts; + var key = activeFontKey; + var str = "", + s = 0, + cmapConfirm; + var strText = ""; + var encoding = fonts[key].encoding; + + if (fonts[key].encoding !== "Identity-H") { + return { + text: text, + x: x, + y: y, + options: options, + mutex: mutex + }; + } + + strText = text; + key = activeFontKey; + + if (Array.isArray(text)) { + strText = text[0]; + } + + for (s = 0; s < strText.length; s += 1) { + if (fonts[key].metadata.hasOwnProperty("cmap")) { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; + /* + if (Object.prototype.toString.call(text) === '[object Array]') { + var i = 0; + // for (i = 0; i < text.length; i += 1) { + if (Object.prototype.toString.call(text[s]) === '[object Array]') { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id + } else { + } + //} + } else { + cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id + }*/ + } + + if (!cmapConfirm) { + if (strText[s].charCodeAt(0) < 256 && fonts[key].metadata.hasOwnProperty("Unicode")) { + str += strText[s]; + } else { + str += ""; + } + } else { + str += strText[s]; + } + } + + var result = ""; + + if (parseInt(key.slice(1)) < 14 || encoding === "WinAnsiEncoding") { + //For the default 13 font + result = pdfEscape(str, key).split("").map(function (cv) { + return cv.charCodeAt(0).toString(16); + }).join(""); + } else if (encoding === "Identity-H") { + result = pdfEscape16(str, fonts[key]); + } + + mutex.isHex = true; + return { + text: result, + x: x, + y: y, + options: options, + mutex: mutex + }; + }; + + var utf8EscapeFunction = function utf8EscapeFunction(parms) { + var text = parms.text || "", + x = parms.x, + y = parms.y, + options = parms.options, + mutex = parms.mutex; + var tmpText = []; + var args = { + text: text, + x: x, + y: y, + options: options, + mutex: mutex + }; + + if (Array.isArray(text)) { + var i = 0; + + for (i = 0; i < text.length; i += 1) { + if (Array.isArray(text[i])) { + if (text[i].length === 3) { + tmpText.push([utf8TextFunction(Object.assign({}, args, { + text: text[i][0] + })).text, text[i][1], text[i][2]]); + } else { + tmpText.push(utf8TextFunction(Object.assign({}, args, { + text: text[i] + })).text); + } + } else { + tmpText.push(utf8TextFunction(Object.assign({}, args, { + text: text[i] + })).text); + } + } + + parms.text = tmpText; + } else { + parms.text = utf8TextFunction(Object.assign({}, args, { + text: text + })).text; + } + }; + + jsPDFAPI.events.push(["postProcessText", utf8EscapeFunction]); + })(jsPDF); + + /** + * @license + * jsPDF virtual FileSystem functionality + * + * Licensed under the MIT License. + * http://opensource.org/licenses/mit-license + */ + /** + * Use the vFS to handle files + * + * @name vFS + * @module + */ + + (function (jsPDFAPI) { + + var _initializeVFS = function _initializeVFS() { + if (typeof this.internal.vFS === "undefined") { + this.internal.vFS = {}; + } + + return true; + }; + /** + * Check if the file exists in the vFS + * + * @name existsFileInVFS + * @function + * @param {string} Possible filename in the vFS. + * @returns {boolean} + * @example + * doc.existsFileInVFS("someFile.txt"); + */ + + + jsPDFAPI.existsFileInVFS = function (filename) { + _initializeVFS.call(this); + + return typeof this.internal.vFS[filename] !== "undefined"; + }; + /** + * Add a file to the vFS + * + * @name addFileToVFS + * @function + * @param {string} filename The name of the file which should be added. + * @param {string} filecontent The content of the file. + * @returns {jsPDF} + * @example + * doc.addFileToVFS("someFile.txt", "BADFACE1"); + */ + + + jsPDFAPI.addFileToVFS = function (filename, filecontent) { + _initializeVFS.call(this); + + this.internal.vFS[filename] = filecontent; + return this; + }; + /** + * Get the file from the vFS + * + * @name getFileFromVFS + * @function + * @param {string} The name of the file which gets requested. + * @returns {string} + * @example + * doc.getFileFromVFS("someFile.txt"); + */ + + + jsPDFAPI.getFileFromVFS = function (filename) { + _initializeVFS.call(this); + + if (typeof this.internal.vFS[filename] !== "undefined") { + return this.internal.vFS[filename]; + } + + return null; + }; + })(jsPDF.API); + + /** + * @license + * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis) + * MIT License + */ + + (function (jsPDF) { + /** + * Table of Unicode types. + * + * Generated by: + * + * var bidi = require("./bidi/index"); + * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)). + * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)). + * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256)); + * + * for( var i = 0; i < bidi_accumulate.length; i++) { + * if(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON') + * bidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined + * } + * var bidiAccumulateStr = 'return [ "' + bidi_accumulate.toString().replace(/,/g, '", "') + '" ];'; + * require("fs").writeFile('unicode-types.js', bidiAccumulateStr); + * + * Based on: + * https://github.com/mathiasbynens/unicode-8.0.0 + */ + + var bidiUnicodeTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "N", "N", "ET", "ET", "ET", "N", "N", "N", "N", "N", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "N", "ET", "ET", "ET", "ET", "N", "N", "N", "N", "L", "N", "N", "BN", "N", "N", "ET", "ET", "EN", "EN", "N", "L", "N", "N", "N", "EN", "L", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "L", "L", "L", "L", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "L", "N", "N", "N", "N", "N", "ET", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "R", "NSM", "R", "NSM", "NSM", "R", "NSM", "NSM", "R", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "N", "N", "N", "N", "N", "R", "R", "R", "R", "R", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "AN", "AN", "AN", "AN", "AN", "AN", "N", "N", "AL", "ET", "ET", "AL", "CS", "AL", "N", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "N", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "N", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "R", "R", "N", "N", "N", "N", "R", "N", "N", "N", "N", "N", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "WS", "BN", "BN", "BN", "L", "R", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "WS", "B", "LRE", "RLE", "PDF", "LRO", "RLO", "CS", "ET", "ET", "ET", "ET", "ET", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "CS", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "WS", "BN", "BN", "BN", "BN", "BN", "N", "LRI", "RLI", "FSI", "PDI", "BN", "BN", "BN", "BN", "BN", "BN", "EN", "L", "N", "N", "EN", "EN", "EN", "EN", "EN", "EN", "ES", "ES", "N", "N", "N", "L", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "ES", "ES", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "ET", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "R", "NSM", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "ES", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "N", "R", "R", "R", "R", "R", "N", "R", "N", "R", "R", "N", "R", "R", "N", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "CS", "N", "CS", "N", "N", "CS", "N", "N", "N", "N", "N", "N", "N", "N", "N", "ET", "N", "N", "ES", "ES", "N", "N", "N", "N", "N", "ET", "ET", "N", "N", "N", "N", "N", "AL", "AL", "AL", "AL", "AL", "N", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "N", "N", "BN", "N", "N", "N", "ET", "ET", "ET", "N", "N", "N", "N", "N", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "N", "N", "N", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "L", "L", "L", "N", "N", "L", "L", "L", "N", "N", "N", "ET", "ET", "N", "N", "N", "ET", "ET", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N"]; + /** + * Unicode Bidi algorithm compliant Bidi engine. + * For reference see http://unicode.org/reports/tr9/ + */ + + /** + * constructor ( options ) + * + * Initializes Bidi engine + * + * @param {Object} See 'setOptions' below for detailed description. + * options are cashed between invocation of 'doBidiReorder' method + * + * sample usage pattern of BidiEngine: + * var opt = { + * isInputVisual: true, + * isInputRtl: false, + * isOutputVisual: false, + * isOutputRtl: false, + * isSymmetricSwapping: true + * } + * var sourceToTarget = [], levels = []; + * var bidiEng = Globalize.bidiEngine(opt); + * var src = "text string to be reordered"; + * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels); + */ + + jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function (options) { + var _UNICODE_TYPES = _bidiUnicodeTypes; + var _STATE_TABLE_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]]; + var _STATE_TABLE_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]]; + var _TYPE_NAMES_MAP = { + L: 0, + R: 1, + EN: 2, + AN: 3, + N: 4, + B: 5, + S: 6 + }; + var _UNICODE_RANGES_MAP = { + 0: 0, + 5: 1, + 6: 2, + 7: 3, + 0x20: 4, + 0xfb: 5, + 0xfe: 6, + 0xff: 7 + }; + var _SWAP_TABLE = ["(", ")", "(", "<", ">", "<", "[", "]", "[", "{", "}", "{", "\xAB", "\xBB", "\xAB", "\u2039", "\u203A", "\u2039", "\u2045", "\u2046", "\u2045", "\u207D", "\u207E", "\u207D", "\u208D", "\u208E", "\u208D", "\u2264", "\u2265", "\u2264", "\u2329", "\u232A", "\u2329", "\uFE59", "\uFE5A", "\uFE59", "\uFE5B", "\uFE5C", "\uFE5B", "\uFE5D", "\uFE5E", "\uFE5D", "\uFE64", "\uFE65", "\uFE64"]; + + var _LTR_RANGES_REG_EXPR = new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/); + + var _lastArabic = false, + _hasUbatB, + _hasUbatS, + DIR_LTR = 0, + DIR_RTL = 1, + _isInVisual, + _isInRtl, + _isOutVisual, + _isOutRtl, + _isSymmetricSwapping, + _dir = DIR_LTR; + + this.__bidiEngine__ = {}; + + var _init = function _init(text, sourceToTargetMap) { + if (sourceToTargetMap) { + for (var i = 0; i < text.length; i++) { + sourceToTargetMap[i] = i; + } + } + + if (_isInRtl === undefined) { + _isInRtl = _isContextualDirRtl(text); + } + + if (_isOutRtl === undefined) { + _isOutRtl = _isContextualDirRtl(text); + } + }; // for reference see 3.2 in http://unicode.org/reports/tr9/ + // + + + var _getCharType = function _getCharType(ch) { + var charCode = ch.charCodeAt(), + range = charCode >> 8, + rangeIdx = _UNICODE_RANGES_MAP[range]; + + if (rangeIdx !== undefined) { + return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)]; + } else if (range === 0xfc || range === 0xfd) { + return "AL"; + } else if (_LTR_RANGES_REG_EXPR.test(range)) { + //unlikely case + return "L"; + } else if (range === 8) { + // even less likely + return "R"; + } + + return "N"; //undefined type, mark as neutral + }; + + var _isContextualDirRtl = function _isContextualDirRtl(text) { + for (var i = 0, charType; i < text.length; i++) { + charType = _getCharType(text.charAt(i)); + + if (charType === "L") { + return false; + } else if (charType === "R") { + return true; + } + } + + return false; + }; // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/ + // + + + var _resolveCharType = function _resolveCharType(chars, types, resolvedTypes, index) { + var cType = types[index], + wType, + nType, + i, + len; + + switch (cType) { + case "L": + case "R": + _lastArabic = false; + break; + + case "N": + case "AN": + break; + + case "EN": + if (_lastArabic) { + cType = "AN"; + } + + break; + + case "AL": + _lastArabic = true; + cType = "R"; + break; + + case "WS": + cType = "N"; + break; + + case "CS": + if (index < 1 || index + 1 >= types.length || (wType = resolvedTypes[index - 1]) !== "EN" && wType !== "AN" || (nType = types[index + 1]) !== "EN" && nType !== "AN") { + cType = "N"; + } else if (_lastArabic) { + nType = "AN"; + } + + cType = nType === wType ? nType : "N"; + break; + + case "ES": + wType = index > 0 ? resolvedTypes[index - 1] : "B"; + cType = wType === "EN" && index + 1 < types.length && types[index + 1] === "EN" ? "EN" : "N"; + break; + + case "ET": + if (index > 0 && resolvedTypes[index - 1] === "EN") { + cType = "EN"; + break; + } else if (_lastArabic) { + cType = "N"; + break; + } + + i = index + 1; + len = types.length; + + while (i < len && types[i] === "ET") { + i++; + } + + if (i < len && types[i] === "EN") { + cType = "EN"; + } else { + cType = "N"; + } + + break; + + case "NSM": + if (_isInVisual && !_isInRtl) { + //V->L + len = types.length; + i = index + 1; + + while (i < len && types[i] === "NSM") { + i++; + } + + if (i < len) { + var c = chars[index]; + var rtlCandidate = c >= 0x0591 && c <= 0x08ff || c === 0xfb1e; + wType = types[i]; + + if (rtlCandidate && (wType === "R" || wType === "AL")) { + cType = "R"; + break; + } + } + } + + if (index < 1 || (wType = types[index - 1]) === "B") { + cType = "N"; + } else { + cType = resolvedTypes[index - 1]; + } + + break; + + case "B": + _lastArabic = false; + _hasUbatB = true; + cType = _dir; + break; + + case "S": + _hasUbatS = true; + cType = "N"; + break; + + case "LRE": + case "RLE": + case "LRO": + case "RLO": + case "PDF": + _lastArabic = false; + break; + + case "BN": + cType = "N"; + break; + } + + return cType; + }; + + var _handleUbatS = function _handleUbatS(types, levels, length) { + for (var i = 0; i < length; i++) { + if (types[i] === "S") { + levels[i] = _dir; + + for (var j = i - 1; j >= 0; j--) { + if (types[j] === "WS") { + levels[j] = _dir; + } else { + break; + } + } + } + } + }; + + var _invertString = function _invertString(text, sourceToTargetMap, levels) { + var charArray = text.split(""); + + if (levels) { + _computeLevels(charArray, levels, { + hiLevel: _dir + }); + } + + charArray.reverse(); + sourceToTargetMap && sourceToTargetMap.reverse(); + return charArray.join(""); + }; // For reference see 3.3 in http://unicode.org/reports/tr9/ + // + + + var _computeLevels = function _computeLevels(chars, levels, params) { + var action, + condition, + i, + index, + newLevel, + prevState, + condPos = -1, + len = chars.length, + newState = 0, + resolvedTypes = [], + stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR, + types = []; + _lastArabic = false; + _hasUbatB = false; + _hasUbatS = false; + + for (i = 0; i < len; i++) { + types[i] = _getCharType(chars[i]); + } + + for (index = 0; index < len; index++) { + prevState = newState; + resolvedTypes[index] = _resolveCharType(chars, types, resolvedTypes, index); + newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]]; + action = newState & 0xf0; + newState &= 0x0f; + levels[index] = newLevel = stateTable[newState][5]; + + if (action > 0) { + if (action === 0x10) { + for (i = condPos; i < index; i++) { + levels[i] = 1; + } + + condPos = -1; + } else { + condPos = -1; + } + } + + condition = stateTable[newState][6]; + + if (condition) { + if (condPos === -1) { + condPos = index; + } + } else { + if (condPos > -1) { + for (i = condPos; i < index; i++) { + levels[i] = newLevel; + } + + condPos = -1; + } + } + + if (types[index] === "B") { + levels[index] = 0; + } + + params.hiLevel |= newLevel; + } + + if (_hasUbatS) { + _handleUbatS(types, levels, len); + } + }; // for reference see 3.4 in http://unicode.org/reports/tr9/ + // + + + var _invertByLevel = function _invertByLevel(level, charArray, sourceToTargetMap, levels, params) { + if (params.hiLevel < level) { + return; + } + + if (level === 1 && _dir === DIR_RTL && !_hasUbatB) { + charArray.reverse(); + sourceToTargetMap && sourceToTargetMap.reverse(); + return; + } + + var ch, + high, + end, + low, + len = charArray.length, + start = 0; + + while (start < len) { + if (levels[start] >= level) { + end = start + 1; + + while (end < len && levels[end] >= level) { + end++; + } + + for (low = start, high = end - 1; low < high; low++, high--) { + ch = charArray[low]; + charArray[low] = charArray[high]; + charArray[high] = ch; + + if (sourceToTargetMap) { + ch = sourceToTargetMap[low]; + sourceToTargetMap[low] = sourceToTargetMap[high]; + sourceToTargetMap[high] = ch; + } + } + + start = end; + } + + start++; + } + }; // for reference see 7 & BD16 in http://unicode.org/reports/tr9/ + // + + + var _symmetricSwap = function _symmetricSwap(charArray, levels, params) { + if (params.hiLevel !== 0 && _isSymmetricSwapping) { + for (var i = 0, index; i < charArray.length; i++) { + if (levels[i] === 1) { + index = _SWAP_TABLE.indexOf(charArray[i]); + + if (index >= 0) { + charArray[i] = _SWAP_TABLE[index + 1]; + } + } + } + } + }; + + var _reorder = function _reorder(text, sourceToTargetMap, levels) { + var charArray = text.split(""), + params = { + hiLevel: _dir + }; + + if (!levels) { + levels = []; + } + + _computeLevels(charArray, levels, params); + + _symmetricSwap(charArray, levels, params); + + _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params); + + _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params); + + return charArray.join(""); + }; // doBidiReorder( text, sourceToTargetMap, levels ) + // Performs Bidi reordering by implementing Unicode Bidi algorithm. + // Returns reordered string + // @text [String]: + // - input string to be reordered, this is input parameter + // $sourceToTargetMap [Array] (optional) + // - resultant mapping between input and output strings, this is output parameter + // $levels [Array] (optional) + // - array of calculated Bidi levels, , this is output parameter + + + this.__bidiEngine__.doBidiReorder = function (text, sourceToTargetMap, levels) { + _init(text, sourceToTargetMap); + + if (!_isInVisual && _isOutVisual && !_isOutRtl) { + // LLTR->VLTR, LRTL->VLTR + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) { + // VRTL->VLTR, VLTR->VRTL + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _invertString(text, sourceToTargetMap, levels); + } else if (!_isInVisual && _isOutVisual && _isOutRtl) { + // LLTR->VRTL, LRTL->VRTL + _dir = _isInRtl ? DIR_RTL : DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) { + // VLTR->LLTR + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) { + // VLTR->LRTL, VRTL->LLTR + text = _invertString(text, sourceToTargetMap); + + if (_isInRtl) { + //LLTR -> VLTR + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + } else { + //LRTL -> VRTL + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } + } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) { + // VRTL->LRTL + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) { + // LRTL->LLTR, LLTR->LRTL + var isSymmetricSwappingOrig = _isSymmetricSwapping; + + if (_isInRtl) { + //LRTL->LLTR + _dir = DIR_RTL; + text = _reorder(text, sourceToTargetMap, levels); + _dir = DIR_LTR; + _isSymmetricSwapping = false; + text = _reorder(text, sourceToTargetMap, levels); + _isSymmetricSwapping = isSymmetricSwappingOrig; + } else { + //LLTR->LRTL + _dir = DIR_LTR; + text = _reorder(text, sourceToTargetMap, levels); + text = _invertString(text, sourceToTargetMap); + _dir = DIR_RTL; + _isSymmetricSwapping = false; + text = _reorder(text, sourceToTargetMap, levels); + _isSymmetricSwapping = isSymmetricSwappingOrig; + text = _invertString(text, sourceToTargetMap); + } + } + + return text; + }; + /** + * @name setOptions( options ) + * @function + * Sets options for Bidi conversion + * @param {Object}: + * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode) + * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string) + * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode) + * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string) + * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping), + */ + + + this.__bidiEngine__.setOptions = function (options) { + if (options) { + _isInVisual = options.isInputVisual; + _isOutVisual = options.isOutputVisual; + _isInRtl = options.isInputRtl; + _isOutRtl = options.isOutputRtl; + _isSymmetricSwapping = options.isSymmetricSwapping; + } + }; + + this.__bidiEngine__.setOptions(options); + + return this.__bidiEngine__; + }; + + var _bidiUnicodeTypes = bidiUnicodeTypes; + var bidiEngine = new jsPDF.__bidiEngine__({ + isInputVisual: true + }); + + var bidiEngineFunction = function bidiEngineFunction(args) { + var text = args.text; + var x = args.x; + var y = args.y; + var options = args.options || {}; + var mutex = args.mutex || {}; + var lang = options.lang; + var tmpText = []; + options.isInputVisual = typeof options.isInputVisual === "boolean" ? options.isInputVisual : true; + bidiEngine.setOptions(options); + + if (Object.prototype.toString.call(text) === "[object Array]") { + var i = 0; + tmpText = []; + + for (i = 0; i < text.length; i += 1) { + if (Object.prototype.toString.call(text[i]) === "[object Array]") { + tmpText.push([bidiEngine.doBidiReorder(text[i][0]), text[i][1], text[i][2]]); + } else { + tmpText.push([bidiEngine.doBidiReorder(text[i])]); + } + } + + args.text = tmpText; + } else { + args.text = bidiEngine.doBidiReorder(text); + } + + bidiEngine.setOptions({ + isInputVisual: true + }); + }; + + jsPDF.API.events.push(["postProcessText", bidiEngineFunction]); + })(jsPDF); + + /* eslint-disable no-control-regex */ + + jsPDF.API.TTFFont = function () { + /************************************************************************/ + + /* function : open */ + + /* comment : Decode the encoded ttf content and create a TTFFont object. */ + + /************************************************************************/ + TTFFont.open = function (file) { + return new TTFFont(file); + }; + /***************************************************************/ + + /* function : TTFFont gernerator */ + + /* comment : Decode TTF contents are parsed, Data, */ + + /* Subset object is created, and registerTTF function is called.*/ + + /***************************************************************/ + + + function TTFFont(rawData) { + var data; + this.rawData = rawData; + data = this.contents = new Data(rawData); + this.contents.pos = 4; + + if (data.readString(4) === "ttcf") { + throw new Error("TTCF not supported."); + } else { + data.pos = 0; + this.parse(); + this.subset = new Subset(this); + this.registerTTF(); + } + } + /********************************************************/ + + /* function : parse */ + + /* comment : TTF Parses the file contents by each table.*/ + + /********************************************************/ + + + TTFFont.prototype.parse = function () { + this.directory = new Directory(this.contents); + this.head = new HeadTable(this); + this.name = new NameTable(this); + this.cmap = new CmapTable(this); + this.toUnicode = {}; + this.hhea = new HheaTable(this); + this.maxp = new MaxpTable(this); + this.hmtx = new HmtxTable(this); + this.post = new PostTable(this); + this.os2 = new OS2Table(this); + this.loca = new LocaTable(this); + this.glyf = new GlyfTable(this); + this.ascender = this.os2.exists && this.os2.ascender || this.hhea.ascender; + this.decender = this.os2.exists && this.os2.decender || this.hhea.decender; + this.lineGap = this.os2.exists && this.os2.lineGap || this.hhea.lineGap; + return this.bbox = [this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax]; + }; + /***************************************************************/ + + /* function : registerTTF */ + + /* comment : Get the value to assign pdf font descriptors. */ + + /***************************************************************/ + + + TTFFont.prototype.registerTTF = function () { + var e, hi, low, raw, _ref; + + this.scaleFactor = 1000.0 / this.head.unitsPerEm; + + this.bbox = function () { + var _i, _len, _ref, _results; + + _ref = this.bbox; + _results = []; + + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + e = _ref[_i]; + + _results.push(Math.round(e * this.scaleFactor)); + } + + return _results; + }.call(this); + + this.stemV = 0; + + if (this.post.exists) { + raw = this.post.italic_angle; + hi = raw >> 16; + low = raw & 0xff; + + if ((hi & 0x8000) !== 0) { + hi = -((hi ^ 0xffff) + 1); + } + + this.italicAngle = +("" + hi + "." + low); + } else { + this.italicAngle = 0; + } + + this.ascender = Math.round(this.ascender * this.scaleFactor); + this.decender = Math.round(this.decender * this.scaleFactor); + this.lineGap = Math.round(this.lineGap * this.scaleFactor); + this.capHeight = this.os2.exists && this.os2.capHeight || this.ascender; + this.xHeight = this.os2.exists && this.os2.xHeight || 0; + this.familyClass = (this.os2.exists && this.os2.familyClass || 0) >> 8; + this.isSerif = (_ref = this.familyClass) === 1 || _ref === 2 || _ref === 3 || _ref === 4 || _ref === 5 || _ref === 7; + this.isScript = this.familyClass === 10; + this.flags = 0; + + if (this.post.isFixedPitch) { + this.flags |= 1 << 0; + } + + if (this.isSerif) { + this.flags |= 1 << 1; + } + + if (this.isScript) { + this.flags |= 1 << 3; + } + + if (this.italicAngle !== 0) { + this.flags |= 1 << 6; + } + + this.flags |= 1 << 5; + + if (!this.cmap.unicode) { + throw new Error("No unicode cmap for font"); + } + }; + + TTFFont.prototype.characterToGlyph = function (character) { + var _ref; + + return ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) || 0; + }; + + TTFFont.prototype.widthOfGlyph = function (glyph) { + var scale; + scale = 1000.0 / this.head.unitsPerEm; + return this.hmtx.forGlyph(glyph).advance * scale; + }; + + TTFFont.prototype.widthOfString = function (string, size, charSpace) { + var charCode, i, scale, width, _ref; + + string = "" + string; + width = 0; + + for (i = 0, _ref = string.length; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + charCode = string.charCodeAt(i); + width += this.widthOfGlyph(this.characterToGlyph(charCode)) + charSpace * (1000 / size) || 0; + } + + scale = size / 1000; + return width * scale; + }; + + TTFFont.prototype.lineHeight = function (size, includeGap) { + var gap; + + if (includeGap == null) { + includeGap = false; + } + + gap = includeGap ? this.lineGap : 0; + return (this.ascender + gap - this.decender) / 1000 * size; + }; + + return TTFFont; + }(); + /************************************************************************************************/ + + /* function : Data */ + + /* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/ + + /************************************************************************************************/ + + + var Data = function () { + function Data(data) { + this.data = data != null ? data : []; + this.pos = 0; + this.length = this.data.length; + } + + Data.prototype.readByte = function () { + return this.data[this.pos++]; + }; + + Data.prototype.writeByte = function (byte) { + return this.data[this.pos++] = byte; + }; + + Data.prototype.readUInt32 = function () { + var b1, b2, b3, b4; + b1 = this.readByte() * 0x1000000; + b2 = this.readByte() << 16; + b3 = this.readByte() << 8; + b4 = this.readByte(); + return b1 + b2 + b3 + b4; + }; + + Data.prototype.writeUInt32 = function (val) { + this.writeByte(val >>> 24 & 0xff); + this.writeByte(val >> 16 & 0xff); + this.writeByte(val >> 8 & 0xff); + return this.writeByte(val & 0xff); + }; + + Data.prototype.readInt32 = function () { + var int; + int = this.readUInt32(); + + if (int >= 0x80000000) { + return int - 0x100000000; + } else { + return int; + } + }; + + Data.prototype.writeInt32 = function (val) { + if (val < 0) { + val += 0x100000000; + } + + return this.writeUInt32(val); + }; + + Data.prototype.readUInt16 = function () { + var b1, b2; + b1 = this.readByte() << 8; + b2 = this.readByte(); + return b1 | b2; + }; + + Data.prototype.writeUInt16 = function (val) { + this.writeByte(val >> 8 & 0xff); + return this.writeByte(val & 0xff); + }; + + Data.prototype.readInt16 = function () { + var int; + int = this.readUInt16(); + + if (int >= 0x8000) { + return int - 0x10000; + } else { + return int; + } + }; + + Data.prototype.writeInt16 = function (val) { + if (val < 0) { + val += 0x10000; + } + + return this.writeUInt16(val); + }; + + Data.prototype.readString = function (length) { + var i, ret; + ret = []; + + for (i = 0; 0 <= length ? i < length : i > length; i = 0 <= length ? ++i : --i) { + ret[i] = String.fromCharCode(this.readByte()); + } + + return ret.join(""); + }; + + Data.prototype.writeString = function (val) { + var i, _ref, _results; + + _results = []; + + for (i = 0, _ref = val.length; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + _results.push(this.writeByte(val.charCodeAt(i))); + } + + return _results; + }; + /*Data.prototype.stringAt = function (pos, length) { + this.pos = pos; + return this.readString(length); + };*/ + + + Data.prototype.readShort = function () { + return this.readInt16(); + }; + + Data.prototype.writeShort = function (val) { + return this.writeInt16(val); + }; + + Data.prototype.readLongLong = function () { + var b1, b2, b3, b4, b5, b6, b7, b8; + b1 = this.readByte(); + b2 = this.readByte(); + b3 = this.readByte(); + b4 = this.readByte(); + b5 = this.readByte(); + b6 = this.readByte(); + b7 = this.readByte(); + b8 = this.readByte(); + + if (b1 & 0x80) { + return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1; + } + + return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8; + }; + + Data.prototype.writeLongLong = function (val) { + var high, low; + high = Math.floor(val / 0x100000000); + low = val & 0xffffffff; + this.writeByte(high >> 24 & 0xff); + this.writeByte(high >> 16 & 0xff); + this.writeByte(high >> 8 & 0xff); + this.writeByte(high & 0xff); + this.writeByte(low >> 24 & 0xff); + this.writeByte(low >> 16 & 0xff); + this.writeByte(low >> 8 & 0xff); + return this.writeByte(low & 0xff); + }; + + Data.prototype.readInt = function () { + return this.readInt32(); + }; + + Data.prototype.writeInt = function (val) { + return this.writeInt32(val); + }; + /*Data.prototype.slice = function (start, end) { + return this.data.slice(start, end); + };*/ + + + Data.prototype.read = function (bytes) { + var buf, i; + buf = []; + + for (i = 0; 0 <= bytes ? i < bytes : i > bytes; i = 0 <= bytes ? ++i : --i) { + buf.push(this.readByte()); + } + + return buf; + }; + + Data.prototype.write = function (bytes) { + var byte, i, _len, _results; + + _results = []; + + for (i = 0, _len = bytes.length; i < _len; i++) { + byte = bytes[i]; + + _results.push(this.writeByte(byte)); + } + + return _results; + }; + + return Data; + }(); + + var Directory = function () { + var checksum; + /*****************************************************************************************************/ + + /* function : Directory generator */ + + /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/ + + /*****************************************************************************************************/ + + function Directory(data) { + var entry, i, _ref; + + this.scalarType = data.readInt(); + this.tableCount = data.readShort(); + this.searchRange = data.readShort(); + this.entrySelector = data.readShort(); + this.rangeShift = data.readShort(); + this.tables = {}; + + for (i = 0, _ref = this.tableCount; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + entry = { + tag: data.readString(4), + checksum: data.readInt(), + offset: data.readInt(), + length: data.readInt() + }; + this.tables[entry.tag] = entry; + } + } + /********************************************************************************************************/ + + /* function : encode */ + + /* comment : It encodes and stores the font table object and information used for the directory object. */ + + /********************************************************************************************************/ + + + Directory.prototype.encode = function (tables) { + var adjustment, directory, directoryLength, entrySelector, headOffset, log2, offset, rangeShift, searchRange, sum, table, tableCount, tableData, tag; + tableCount = Object.keys(tables).length; + log2 = Math.log(2); + searchRange = Math.floor(Math.log(tableCount) / log2) * 16; + entrySelector = Math.floor(searchRange / log2); + rangeShift = tableCount * 16 - searchRange; + directory = new Data(); + directory.writeInt(this.scalarType); + directory.writeShort(tableCount); + directory.writeShort(searchRange); + directory.writeShort(entrySelector); + directory.writeShort(rangeShift); + directoryLength = tableCount * 16; + offset = directory.pos + directoryLength; + headOffset = null; + tableData = []; + + for (tag in tables) { + table = tables[tag]; + directory.writeString(tag); + directory.writeInt(checksum(table)); + directory.writeInt(offset); + directory.writeInt(table.length); + tableData = tableData.concat(table); + + if (tag === "head") { + headOffset = offset; + } + + offset += table.length; + + while (offset % 4) { + tableData.push(0); + offset++; + } + } + + directory.write(tableData); + sum = checksum(directory.data); + adjustment = 0xb1b0afba - sum; + directory.pos = headOffset + 8; + directory.writeUInt32(adjustment); + return directory.data; + }; + /***************************************************************/ + + /* function : checksum */ + + /* comment : Duplicate the table for the tag. */ + + /***************************************************************/ + + + checksum = function checksum(data) { + var i, sum, tmp, _ref; + + data = __slice.call(data); + + while (data.length % 4) { + data.push(0); + } + + tmp = new Data(data); + sum = 0; + + for (i = 0, _ref = data.length; i < _ref; i = i += 4) { + sum += tmp.readUInt32(); + } + + return sum & 0xffffffff; + }; + + return Directory; + }(); + + var Table, + __hasProp = {}.hasOwnProperty, + __extends = function __extends(child, parent) { + for (var key in parent) { + if (__hasProp.call(parent, key)) child[key] = parent[key]; + } + + function ctor() { + this.constructor = child; + } + + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + child.__super__ = parent.prototype; + return child; + }; + /***************************************************************/ + + /* function : Table */ + + /* comment : Save info for each table, and parse the table. */ + + /***************************************************************/ + + + Table = function () { + function Table(file) { + var info; + this.file = file; + info = this.file.directory.tables[this.tag]; + this.exists = !!info; + + if (info) { + this.offset = info.offset, this.length = info.length; + this.parse(this.file.contents); + } + } + + Table.prototype.parse = function () {}; + + Table.prototype.encode = function () {}; + + Table.prototype.raw = function () { + if (!this.exists) { + return null; + } + + this.file.contents.pos = this.offset; + return this.file.contents.read(this.length); + }; + + return Table; + }(); + + var HeadTable = function (_super) { + __extends(HeadTable, _super); + + function HeadTable() { + return HeadTable.__super__.constructor.apply(this, arguments); + } + + HeadTable.prototype.tag = "head"; + + HeadTable.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readInt(); + this.revision = data.readInt(); + this.checkSumAdjustment = data.readInt(); + this.magicNumber = data.readInt(); + this.flags = data.readShort(); + this.unitsPerEm = data.readShort(); + this.created = data.readLongLong(); + this.modified = data.readLongLong(); + this.xMin = data.readShort(); + this.yMin = data.readShort(); + this.xMax = data.readShort(); + this.yMax = data.readShort(); + this.macStyle = data.readShort(); + this.lowestRecPPEM = data.readShort(); + this.fontDirectionHint = data.readShort(); + this.indexToLocFormat = data.readShort(); + return this.glyphDataFormat = data.readShort(); + }; + + HeadTable.prototype.encode = function (indexToLocFormat) { + var table; + table = new Data(); + table.writeInt(this.version); + table.writeInt(this.revision); + table.writeInt(this.checkSumAdjustment); + table.writeInt(this.magicNumber); + table.writeShort(this.flags); + table.writeShort(this.unitsPerEm); + table.writeLongLong(this.created); + table.writeLongLong(this.modified); + table.writeShort(this.xMin); + table.writeShort(this.yMin); + table.writeShort(this.xMax); + table.writeShort(this.yMax); + table.writeShort(this.macStyle); + table.writeShort(this.lowestRecPPEM); + table.writeShort(this.fontDirectionHint); + table.writeShort(indexToLocFormat); + table.writeShort(this.glyphDataFormat); + return table.data; + }; + + return HeadTable; + }(Table); + /************************************************************************************/ + + /* function : CmapEntry */ + + /* comment : Cmap Initializes and encodes object information (required by pdf spec).*/ + + /************************************************************************************/ + + + var CmapEntry = function () { + function CmapEntry(data, offset) { + var code, count, endCode, glyphId, glyphIds, i, idDelta, idRangeOffset, index, saveOffset, segCount, segCountX2, start, startCode, tail, _j, _k, _len; + + this.platformID = data.readUInt16(); + this.encodingID = data.readShort(); + this.offset = offset + data.readInt(); + saveOffset = data.pos; + data.pos = this.offset; + this.format = data.readUInt16(); + this.length = data.readUInt16(); + this.language = data.readUInt16(); + this.isUnicode = this.platformID === 3 && this.encodingID === 1 && this.format === 4 || this.platformID === 0 && this.format === 4; + this.codeMap = {}; + + switch (this.format) { + case 0: + for (i = 0; i < 256; ++i) { + this.codeMap[i] = data.readByte(); + } + + break; + + case 4: + segCountX2 = data.readUInt16(); + segCount = segCountX2 / 2; + data.pos += 6; + + endCode = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + data.pos += 2; + + startCode = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + idDelta = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + idRangeOffset = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + count = (this.length - data.pos + this.offset) / 2; + + glyphIds = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= count ? _j < count : _j > count; i = 0 <= count ? ++_j : --_j) { + _results.push(data.readUInt16()); + } + + return _results; + }(); + + for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) { + tail = endCode[i]; + start = startCode[i]; + + for (code = _k = start; start <= tail ? _k <= tail : _k >= tail; code = start <= tail ? ++_k : --_k) { + if (idRangeOffset[i] === 0) { + glyphId = code + idDelta[i]; + } else { + index = idRangeOffset[i] / 2 + (code - start) - (segCount - i); + glyphId = glyphIds[index] || 0; + + if (glyphId !== 0) { + glyphId += idDelta[i]; + } + } + + this.codeMap[code] = glyphId & 0xffff; + } + } + + } + + data.pos = saveOffset; + } + + CmapEntry.encode = function (charmap, encoding) { + var charMap, code, codeMap, codes, delta, deltas, diff, endCode, endCodes, entrySelector, glyphIDs, i, id, indexes, last, map, nextID, offset, old, rangeOffsets, rangeShift, searchRange, segCount, segCountX2, startCode, startCodes, startGlyph, subtable, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _name, _o, _p, _q; + + subtable = new Data(); + codes = Object.keys(charmap).sort(function (a, b) { + return a - b; + }); + + switch (encoding) { + case "macroman": + id = 0; + + indexes = function () { + var _results = []; + + for (i = 0; i < 256; ++i) { + _results.push(0); + } + + return _results; + }(); + + map = { + 0: 0 + }; + codeMap = {}; + + for (_i = 0, _len = codes.length; _i < _len; _i++) { + code = codes[_i]; + + if (map[_name = charmap[code]] == null) { + map[_name] = ++id; + } + + codeMap[code] = { + old: charmap[code], + new: map[charmap[code]] + }; + indexes[code] = map[charmap[code]]; + } + + subtable.writeUInt16(1); + subtable.writeUInt16(0); + subtable.writeUInt32(12); + subtable.writeUInt16(0); + subtable.writeUInt16(262); + subtable.writeUInt16(0); + subtable.write(indexes); + return { + charMap: codeMap, + subtable: subtable.data, + maxGlyphID: id + 1 + }; + + case "unicode": + startCodes = []; + endCodes = []; + nextID = 0; + map = {}; + charMap = {}; + last = diff = null; + + for (_j = 0, _len1 = codes.length; _j < _len1; _j++) { + code = codes[_j]; + old = charmap[code]; + + if (map[old] == null) { + map[old] = ++nextID; + } + + charMap[code] = { + old: old, + new: map[old] + }; + delta = map[old] - code; + + if (last == null || delta !== diff) { + if (last) { + endCodes.push(last); + } + + startCodes.push(code); + diff = delta; + } + + last = code; + } + + if (last) { + endCodes.push(last); + } + + endCodes.push(0xffff); + startCodes.push(0xffff); + segCount = startCodes.length; + segCountX2 = segCount * 2; + searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2); + entrySelector = Math.log(searchRange / 2) / Math.LN2; + rangeShift = 2 * segCount - searchRange; + deltas = []; + rangeOffsets = []; + glyphIDs = []; + + for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) { + startCode = startCodes[i]; + endCode = endCodes[i]; + + if (startCode === 0xffff) { + deltas.push(0); + rangeOffsets.push(0); + break; + } + + startGlyph = charMap[startCode]["new"]; + + if (startCode - startGlyph >= 0x8000) { + deltas.push(0); + rangeOffsets.push(2 * (glyphIDs.length + segCount - i)); + + for (code = _l = startCode; startCode <= endCode ? _l <= endCode : _l >= endCode; code = startCode <= endCode ? ++_l : --_l) { + glyphIDs.push(charMap[code]["new"]); + } + } else { + deltas.push(startGlyph - startCode); + rangeOffsets.push(0); + } + } + + subtable.writeUInt16(3); + subtable.writeUInt16(1); + subtable.writeUInt32(12); + subtable.writeUInt16(4); + subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2); + subtable.writeUInt16(0); + subtable.writeUInt16(segCountX2); + subtable.writeUInt16(searchRange); + subtable.writeUInt16(entrySelector); + subtable.writeUInt16(rangeShift); + + for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) { + code = endCodes[_m]; + subtable.writeUInt16(code); + } + + subtable.writeUInt16(0); + + for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) { + code = startCodes[_n]; + subtable.writeUInt16(code); + } + + for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) { + delta = deltas[_o]; + subtable.writeUInt16(delta); + } + + for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) { + offset = rangeOffsets[_p]; + subtable.writeUInt16(offset); + } + + for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) { + id = glyphIDs[_q]; + subtable.writeUInt16(id); + } + + return { + charMap: charMap, + subtable: subtable.data, + maxGlyphID: nextID + 1 + }; + } + }; + + return CmapEntry; + }(); + + var CmapTable = function (_super) { + __extends(CmapTable, _super); + + function CmapTable() { + return CmapTable.__super__.constructor.apply(this, arguments); + } + + CmapTable.prototype.tag = "cmap"; + + CmapTable.prototype.parse = function (data) { + var entry, i, tableCount; + data.pos = this.offset; + this.version = data.readUInt16(); + tableCount = data.readUInt16(); + this.tables = []; + this.unicode = null; + + for (i = 0; 0 <= tableCount ? i < tableCount : i > tableCount; i = 0 <= tableCount ? ++i : --i) { + entry = new CmapEntry(data, this.offset); + this.tables.push(entry); + + if (entry.isUnicode) { + if (this.unicode == null) { + this.unicode = entry; + } + } + } + + return true; + }; + /*************************************************************************/ + + /* function : encode */ + + /* comment : Encode the cmap table corresponding to the input character. */ + + /*************************************************************************/ + + + CmapTable.encode = function (charmap, encoding) { + var result, table; + + if (encoding == null) { + encoding = "macroman"; + } + + result = CmapEntry.encode(charmap, encoding); + table = new Data(); + table.writeUInt16(0); + table.writeUInt16(1); + result.table = table.data.concat(result.subtable); + return result; + }; + + return CmapTable; + }(Table); + + var HheaTable = function (_super) { + __extends(HheaTable, _super); + + function HheaTable() { + return HheaTable.__super__.constructor.apply(this, arguments); + } + + HheaTable.prototype.tag = "hhea"; + + HheaTable.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readInt(); + this.ascender = data.readShort(); + this.decender = data.readShort(); + this.lineGap = data.readShort(); + this.advanceWidthMax = data.readShort(); + this.minLeftSideBearing = data.readShort(); + this.minRightSideBearing = data.readShort(); + this.xMaxExtent = data.readShort(); + this.caretSlopeRise = data.readShort(); + this.caretSlopeRun = data.readShort(); + this.caretOffset = data.readShort(); + data.pos += 4 * 2; + this.metricDataFormat = data.readShort(); + return this.numberOfMetrics = data.readUInt16(); + }; + /*HheaTable.prototype.encode = function (ids) { + var i, table, _i, _ref; + table = new Data; + table.writeInt(this.version); + table.writeShort(this.ascender); + table.writeShort(this.decender); + table.writeShort(this.lineGap); + table.writeShort(this.advanceWidthMax); + table.writeShort(this.minLeftSideBearing); + table.writeShort(this.minRightSideBearing); + table.writeShort(this.xMaxExtent); + table.writeShort(this.caretSlopeRise); + table.writeShort(this.caretSlopeRun); + table.writeShort(this.caretOffset); + for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + table.writeByte(0); + } + table.writeShort(this.metricDataFormat); + table.writeUInt16(ids.length); + return table.data; + };*/ + + + return HheaTable; + }(Table); + + var OS2Table = function (_super) { + __extends(OS2Table, _super); + + function OS2Table() { + return OS2Table.__super__.constructor.apply(this, arguments); + } + + OS2Table.prototype.tag = "OS/2"; + + OS2Table.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readUInt16(); + this.averageCharWidth = data.readShort(); + this.weightClass = data.readUInt16(); + this.widthClass = data.readUInt16(); + this.type = data.readShort(); + this.ySubscriptXSize = data.readShort(); + this.ySubscriptYSize = data.readShort(); + this.ySubscriptXOffset = data.readShort(); + this.ySubscriptYOffset = data.readShort(); + this.ySuperscriptXSize = data.readShort(); + this.ySuperscriptYSize = data.readShort(); + this.ySuperscriptXOffset = data.readShort(); + this.ySuperscriptYOffset = data.readShort(); + this.yStrikeoutSize = data.readShort(); + this.yStrikeoutPosition = data.readShort(); + this.familyClass = data.readShort(); + + this.panose = function () { + var i, _results; + + _results = []; + + for (i = 0; i < 10; ++i) { + _results.push(data.readByte()); + } + + return _results; + }(); + + this.charRange = function () { + var i, _results; + + _results = []; + + for (i = 0; i < 4; ++i) { + _results.push(data.readInt()); + } + + return _results; + }(); + + this.vendorID = data.readString(4); + this.selection = data.readShort(); + this.firstCharIndex = data.readShort(); + this.lastCharIndex = data.readShort(); + + if (this.version > 0) { + this.ascent = data.readShort(); + this.descent = data.readShort(); + this.lineGap = data.readShort(); + this.winAscent = data.readShort(); + this.winDescent = data.readShort(); + + this.codePageRange = function () { + var i, _results; + + _results = []; + + for (i = 0; i < 2; i = ++i) { + _results.push(data.readInt()); + } + + return _results; + }(); + + if (this.version > 1) { + this.xHeight = data.readShort(); + this.capHeight = data.readShort(); + this.defaultChar = data.readShort(); + this.breakChar = data.readShort(); + return this.maxContext = data.readShort(); + } + } + }; + /*OS2Table.prototype.encode = function () { + return this.raw(); + };*/ + + + return OS2Table; + }(Table); + + var PostTable = function (_super) { + + __extends(PostTable, _super); + + function PostTable() { + return PostTable.__super__.constructor.apply(this, arguments); + } + + PostTable.prototype.tag = "post"; + + PostTable.prototype.parse = function (data) { + var length, numberOfGlyphs, _results; + + data.pos = this.offset; + this.format = data.readInt(); + this.italicAngle = data.readInt(); + this.underlinePosition = data.readShort(); + this.underlineThickness = data.readShort(); + this.isFixedPitch = data.readInt(); + this.minMemType42 = data.readInt(); + this.maxMemType42 = data.readInt(); + this.minMemType1 = data.readInt(); + this.maxMemType1 = data.readInt(); + + switch (this.format) { + case 0x00010000: + break; + + case 0x00020000: + numberOfGlyphs = data.readUInt16(); + this.glyphNameIndex = []; + var i; + + for (i = 0; 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs; i = 0 <= numberOfGlyphs ? ++i : --i) { + this.glyphNameIndex.push(data.readUInt16()); + } + + this.names = []; + _results = []; + + while (data.pos < this.offset + this.length) { + length = data.readByte(); + + _results.push(this.names.push(data.readString(length))); + } + + return _results; + + case 0x00025000: + numberOfGlyphs = data.readUInt16(); + return this.offsets = data.read(numberOfGlyphs); + + case 0x00030000: + break; + + case 0x00040000: + return this.map = function () { + var _j, _ref, _results1; + + _results1 = []; + + for (i = _j = 0, _ref = this.file.maxp.numGlyphs; 0 <= _ref ? _j < _ref : _j > _ref; i = 0 <= _ref ? ++_j : --_j) { + _results1.push(data.readUInt32()); + } + + return _results1; + }.call(this); + } + }; + return PostTable; + }(Table); + /*********************************************************************************************************/ + + /* function : NameEntry */ + + /* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/ + + /*********************************************************************************************************/ + + + var NameEntry = function () { + function NameEntry(raw, entry) { + this.raw = raw; + this.length = raw.length; + this.platformID = entry.platformID; + this.encodingID = entry.encodingID; + this.languageID = entry.languageID; + } + + return NameEntry; + }(); + + var NameTable = function (_super) { + + __extends(NameTable, _super); + + function NameTable() { + return NameTable.__super__.constructor.apply(this, arguments); + } + + NameTable.prototype.tag = "name"; + + NameTable.prototype.parse = function (data) { + var count, entries, entry, i, name, stringOffset, strings, text, _j, _len, _name; + + data.pos = this.offset; + data.readShort(); //format + + count = data.readShort(); + stringOffset = data.readShort(); + entries = []; + + for (i = 0; 0 <= count ? i < count : i > count; i = 0 <= count ? ++i : --i) { + entries.push({ + platformID: data.readShort(), + encodingID: data.readShort(), + languageID: data.readShort(), + nameID: data.readShort(), + length: data.readShort(), + offset: this.offset + stringOffset + data.readShort() + }); + } + + strings = {}; + + for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) { + entry = entries[i]; + data.pos = entry.offset; + text = data.readString(entry.length); + name = new NameEntry(text, entry); + + if (strings[_name = entry.nameID] == null) { + strings[_name] = []; + } + + strings[entry.nameID].push(name); + } + + this.strings = strings; + this.copyright = strings[0]; + this.fontFamily = strings[1]; + this.fontSubfamily = strings[2]; + this.uniqueSubfamily = strings[3]; + this.fontName = strings[4]; + this.version = strings[5]; + + try { + this.postscriptName = strings[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g, ""); + } catch (e) { + this.postscriptName = strings[4][0].raw.replace(/[\x00-\x19\x80-\xff]/g, ""); + } + + this.trademark = strings[7]; + this.manufacturer = strings[8]; + this.designer = strings[9]; + this.description = strings[10]; + this.vendorUrl = strings[11]; + this.designerUrl = strings[12]; + this.license = strings[13]; + this.licenseUrl = strings[14]; + this.preferredFamily = strings[15]; + this.preferredSubfamily = strings[17]; + this.compatibleFull = strings[18]; + return this.sampleText = strings[19]; + }; + /*NameTable.prototype.encode = function () { + var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref; + strings = {}; + _ref = this.strings; + for (id in _ref) { + val = _ref[id]; + strings[id] = val; + } + postscriptName = new NameEntry("" + subsetTag + "+" + this.postscriptName, { + platformID: 1 + , encodingID: 0 + , languageID: 0 + }); + strings[6] = [postscriptName]; + subsetTag = successorOf(subsetTag); + strCount = 0; + for (id in strings) { + list = strings[id]; + if (list != null) { + strCount += list.length; + } + } + table = new Data; + strTable = new Data; + table.writeShort(0); + table.writeShort(strCount); + table.writeShort(6 + 12 * strCount); + for (nameID in strings) { + list = strings[nameID]; + if (list != null) { + for (_i = 0, _len = list.length; _i < _len; _i++) { + string = list[_i]; + table.writeShort(string.platformID); + table.writeShort(string.encodingID); + table.writeShort(string.languageID); + table.writeShort(nameID); + table.writeShort(string.length); + table.writeShort(strTable.pos); + strTable.writeString(string.raw); + } + } + } + return nameTable = { + postscriptName: postscriptName.raw + , table: table.data.concat(strTable.data) + }; + };*/ + + return NameTable; + }(Table); + + var MaxpTable = function (_super) { + __extends(MaxpTable, _super); + + function MaxpTable() { + return MaxpTable.__super__.constructor.apply(this, arguments); + } + + MaxpTable.prototype.tag = "maxp"; + + MaxpTable.prototype.parse = function (data) { + data.pos = this.offset; + this.version = data.readInt(); + this.numGlyphs = data.readUInt16(); + this.maxPoints = data.readUInt16(); + this.maxContours = data.readUInt16(); + this.maxCompositePoints = data.readUInt16(); + this.maxComponentContours = data.readUInt16(); + this.maxZones = data.readUInt16(); + this.maxTwilightPoints = data.readUInt16(); + this.maxStorage = data.readUInt16(); + this.maxFunctionDefs = data.readUInt16(); + this.maxInstructionDefs = data.readUInt16(); + this.maxStackElements = data.readUInt16(); + this.maxSizeOfInstructions = data.readUInt16(); + this.maxComponentElements = data.readUInt16(); + return this.maxComponentDepth = data.readUInt16(); + }; + /*MaxpTable.prototype.encode = function (ids) { + var table; + table = new Data; + table.writeInt(this.version); + table.writeUInt16(ids.length); + table.writeUInt16(this.maxPoints); + table.writeUInt16(this.maxContours); + table.writeUInt16(this.maxCompositePoints); + table.writeUInt16(this.maxComponentContours); + table.writeUInt16(this.maxZones); + table.writeUInt16(this.maxTwilightPoints); + table.writeUInt16(this.maxStorage); + table.writeUInt16(this.maxFunctionDefs); + table.writeUInt16(this.maxInstructionDefs); + table.writeUInt16(this.maxStackElements); + table.writeUInt16(this.maxSizeOfInstructions); + table.writeUInt16(this.maxComponentElements); + table.writeUInt16(this.maxComponentDepth); + return table.data; + };*/ + + + return MaxpTable; + }(Table); + + var HmtxTable = function (_super) { + __extends(HmtxTable, _super); + + function HmtxTable() { + return HmtxTable.__super__.constructor.apply(this, arguments); + } + + HmtxTable.prototype.tag = "hmtx"; + + HmtxTable.prototype.parse = function (data) { + var i, last, lsbCount, m, _j, _ref, _results; + + data.pos = this.offset; + this.metrics = []; + + for (i = 0, _ref = this.file.hhea.numberOfMetrics; 0 <= _ref ? i < _ref : i > _ref; i = 0 <= _ref ? ++i : --i) { + this.metrics.push({ + advance: data.readUInt16(), + lsb: data.readInt16() + }); + } + + lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics; + + this.leftSideBearings = function () { + var _j, _results; + + _results = []; + + for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) { + _results.push(data.readInt16()); + } + + return _results; + }(); + + this.widths = function () { + var _j, _len, _ref1, _results; + + _ref1 = this.metrics; + _results = []; + + for (_j = 0, _len = _ref1.length; _j < _len; _j++) { + m = _ref1[_j]; + + _results.push(m.advance); + } + + return _results; + }.call(this); + + last = this.widths[this.widths.length - 1]; + _results = []; + + for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) { + _results.push(this.widths.push(last)); + } + + return _results; + }; + /***************************************************************/ + + /* function : forGlyph */ + + /* comment : Returns the advance width and lsb for this glyph. */ + + /***************************************************************/ + + + HmtxTable.prototype.forGlyph = function (id) { + if (id in this.metrics) { + return this.metrics[id]; + } + + return { + advance: this.metrics[this.metrics.length - 1].advance, + lsb: this.leftSideBearings[id - this.metrics.length] + }; + }; + /*HmtxTable.prototype.encode = function (mapping) { + var id, metric, table, _i, _len; + table = new Data; + for (_i = 0, _len = mapping.length; _i < _len; _i++) { + id = mapping[_i]; + metric = this.forGlyph(id); + table.writeUInt16(metric.advance); + table.writeUInt16(metric.lsb); + } + return table.data; + };*/ + + + return HmtxTable; + }(Table); + + var __slice = [].slice; + + var GlyfTable = function (_super) { + __extends(GlyfTable, _super); + + function GlyfTable() { + return GlyfTable.__super__.constructor.apply(this, arguments); + } + + GlyfTable.prototype.tag = "glyf"; + + GlyfTable.prototype.parse = function () { + return this.cache = {}; + }; + + GlyfTable.prototype.glyphFor = function (id) { + var data, index, length, loca, numberOfContours, raw, xMax, xMin, yMax, yMin; + + if (id in this.cache) { + return this.cache[id]; + } + + loca = this.file.loca; + data = this.file.contents; + index = loca.indexOf(id); + length = loca.lengthOf(id); + + if (length === 0) { + return this.cache[id] = null; + } + + data.pos = this.offset + index; + raw = new Data(data.read(length)); + numberOfContours = raw.readShort(); + xMin = raw.readShort(); + yMin = raw.readShort(); + xMax = raw.readShort(); + yMax = raw.readShort(); + + if (numberOfContours === -1) { + this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax); + } else { + this.cache[id] = new SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax); + } + + return this.cache[id]; + }; + + GlyfTable.prototype.encode = function (glyphs, mapping, old2new) { + var glyph, id, offsets, table, _i, _len; + + table = []; + offsets = []; + + for (_i = 0, _len = mapping.length; _i < _len; _i++) { + id = mapping[_i]; + glyph = glyphs[id]; + offsets.push(table.length); + + if (glyph) { + table = table.concat(glyph.encode(old2new)); + } + } + + offsets.push(table.length); + return { + table: table, + offsets: offsets + }; + }; + + return GlyfTable; + }(Table); + + var SimpleGlyph = function () { + /**************************************************************************/ + + /* function : SimpleGlyph */ + + /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/ + + /**************************************************************************/ + function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) { + this.raw = raw; + this.numberOfContours = numberOfContours; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + this.compound = false; + } + + SimpleGlyph.prototype.encode = function () { + return this.raw.data; + }; + + return SimpleGlyph; + }(); + + var CompoundGlyph = function () { + var ARG_1_AND_2_ARE_WORDS, MORE_COMPONENTS, WE_HAVE_AN_X_AND_Y_SCALE, WE_HAVE_A_SCALE, WE_HAVE_A_TWO_BY_TWO; + ARG_1_AND_2_ARE_WORDS = 0x0001; + WE_HAVE_A_SCALE = 0x0008; + MORE_COMPONENTS = 0x0020; + WE_HAVE_AN_X_AND_Y_SCALE = 0x0040; + WE_HAVE_A_TWO_BY_TWO = 0x0080; + /********************************************************************************************************************/ + + /* function : CompoundGlypg generator */ + + /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/ + + /********************************************************************************************************************/ + + function CompoundGlyph(raw, xMin, yMin, xMax, yMax) { + var data, flags; + this.raw = raw; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + this.compound = true; + this.glyphIDs = []; + this.glyphOffsets = []; + data = this.raw; + + while (true) { + flags = data.readShort(); + this.glyphOffsets.push(data.pos); + this.glyphIDs.push(data.readUInt16()); + + if (!(flags & MORE_COMPONENTS)) { + break; + } + + if (flags & ARG_1_AND_2_ARE_WORDS) { + data.pos += 4; + } else { + data.pos += 2; + } + + if (flags & WE_HAVE_A_TWO_BY_TWO) { + data.pos += 8; + } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { + data.pos += 4; + } else if (flags & WE_HAVE_A_SCALE) { + data.pos += 2; + } + } + } + /****************************************************************************************************************/ + + /* function : CompoundGlypg encode */ + + /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/ + + /****************************************************************************************************************/ + + + CompoundGlyph.prototype.encode = function () { + var i, result, _len, _ref; + + result = new Data(__slice.call(this.raw.data)); + _ref = this.glyphIDs; + + for (i = 0, _len = _ref.length; i < _len; ++i) { + result.pos = this.glyphOffsets[i]; + } + + return result.data; + }; + + return CompoundGlyph; + }(); + + var LocaTable = function (_super) { + __extends(LocaTable, _super); + + function LocaTable() { + return LocaTable.__super__.constructor.apply(this, arguments); + } + + LocaTable.prototype.tag = "loca"; + + LocaTable.prototype.parse = function (data) { + var format, i; + data.pos = this.offset; + format = this.file.head.indexToLocFormat; + + if (format === 0) { + return this.offsets = function () { + var _ref, _results; + + _results = []; + + for (i = 0, _ref = this.length; i < _ref; i += 2) { + _results.push(data.readUInt16() * 2); + } + + return _results; + }.call(this); + } else { + return this.offsets = function () { + var _ref, _results; + + _results = []; + + for (i = 0, _ref = this.length; i < _ref; i += 4) { + _results.push(data.readUInt32()); + } + + return _results; + }.call(this); + } + }; + + LocaTable.prototype.indexOf = function (id) { + return this.offsets[id]; + }; + + LocaTable.prototype.lengthOf = function (id) { + return this.offsets[id + 1] - this.offsets[id]; + }; + + LocaTable.prototype.encode = function (offsets, activeGlyphs) { + var LocaTable = new Uint32Array(this.offsets.length); + var glyfPtr = 0; + var listGlyf = 0; + + for (var k = 0; k < LocaTable.length; ++k) { + LocaTable[k] = glyfPtr; + + if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) { + ++listGlyf; + LocaTable[k] = glyfPtr; + var start = this.offsets[k]; + var len = this.offsets[k + 1] - start; + + if (len > 0) { + glyfPtr += len; + } + } + } + + var newLocaTable = new Array(LocaTable.length * 4); + + for (var j = 0; j < LocaTable.length; ++j) { + newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff; + newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8; + newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16; + newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24; + } + + return newLocaTable; + }; + + return LocaTable; + }(Table); + /************************************************************************************/ + + /* function : invert */ + + /* comment : Change the object's (key: value) to create an object with (value: key).*/ + + /************************************************************************************/ + + + var invert = function invert(object) { + var key, ret, val; + ret = {}; + + for (key in object) { + val = object[key]; + ret[val] = key; + } + + return ret; + }; + /*var successorOf = function (input) { + var added, alphabet, carry, i, index, isUpperCase, last, length, next, result; + alphabet = 'abcdefghijklmnopqrstuvwxyz'; + length = alphabet.length; + result = input; + i = input.length; + while (i >= 0) { + last = input.charAt(--i); + if (isNaN(last)) { + index = alphabet.indexOf(last.toLowerCase()); + if (index === -1) { + next = last; + carry = true; + } + else { + next = alphabet.charAt((index + 1) % length); + isUpperCase = last === last.toUpperCase(); + if (isUpperCase) { + next = next.toUpperCase(); + } + carry = index + 1 >= length; + if (carry && i === 0) { + added = isUpperCase ? 'A' : 'a'; + result = added + next + result.slice(1); + break; + } + } + } + else { + next = +last + 1; + carry = next > 9; + if (carry) { + next = 0; + } + if (carry && i === 0) { + result = '1' + next + result.slice(1); + break; + } + } + result = result.slice(0, i) + next + result.slice(i + 1); + if (!carry) { + break; + } + } + return result; + };*/ + + + var Subset = function () { + function Subset(font) { + this.font = font; + this.subset = {}; + this.unicodes = {}; + this.next = 33; + } + /*Subset.prototype.use = function (character) { + var i, _i, _ref; + if (typeof character === 'string') { + for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + this.use(character.charCodeAt(i)); + } + return; + } + if (!this.unicodes[character]) { + this.subset[this.next] = character; + return this.unicodes[character] = this.next++; + } + };*/ + + /*Subset.prototype.encodeText = function (text) { + var char, i, string, _i, _ref; + string = ''; + for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) { + char = this.unicodes[text.charCodeAt(i)]; + string += String.fromCharCode(char); + } + return string; + };*/ + + /***************************************************************/ + + /* function : generateCmap */ + + /* comment : Returns the unicode cmap for this font. */ + + /***************************************************************/ + + + Subset.prototype.generateCmap = function () { + var mapping, roman, unicode, unicodeCmap, _ref; + + unicodeCmap = this.font.cmap.tables[0].codeMap; + mapping = {}; + _ref = this.subset; + + for (roman in _ref) { + unicode = _ref[roman]; + mapping[roman] = unicodeCmap[unicode]; + } + + return mapping; + }; + /*Subset.prototype.glyphIDs = function () { + var ret, roman, unicode, unicodeCmap, val, _ref; + unicodeCmap = this.font.cmap.tables[0].codeMap; + ret = [0]; + _ref = this.subset; + for (roman in _ref) { + unicode = _ref[roman]; + val = unicodeCmap[unicode]; + if ((val != null) && __indexOf.call(ret, val) < 0) { + ret.push(val); + } + } + return ret.sort(); + };*/ + + /******************************************************************/ + + /* function : glyphsFor */ + + /* comment : Returns simple glyph objects for the input character.*/ + + /******************************************************************/ + + + Subset.prototype.glyphsFor = function (glyphIDs) { + var additionalIDs, glyph, glyphs, id, _i, _len, _ref; + + glyphs = {}; + + for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) { + id = glyphIDs[_i]; + glyphs[id] = this.font.glyf.glyphFor(id); + } + + additionalIDs = []; + + for (id in glyphs) { + glyph = glyphs[id]; + + if (glyph != null ? glyph.compound : void 0) { + additionalIDs.push.apply(additionalIDs, glyph.glyphIDs); + } + } + + if (additionalIDs.length > 0) { + _ref = this.glyphsFor(additionalIDs); + + for (id in _ref) { + glyph = _ref[id]; + glyphs[id] = glyph; + } + } + + return glyphs; + }; + /***************************************************************/ + + /* function : encode */ + + /* comment : Encode various tables for the characters you use. */ + + /***************************************************************/ + + + Subset.prototype.encode = function (glyID, indexToLocFormat) { + var cmap, code, glyf, glyphs, id, ids, loca, new2old, newIDs, nextGlyphID, old2new, oldID, oldIDs, tables, _ref; + + cmap = CmapTable.encode(this.generateCmap(), "unicode"); + glyphs = this.glyphsFor(glyID); + old2new = { + 0: 0 + }; + _ref = cmap.charMap; + + for (code in _ref) { + ids = _ref[code]; + old2new[ids.old] = ids["new"]; + } + + nextGlyphID = cmap.maxGlyphID; + + for (oldID in glyphs) { + if (!(oldID in old2new)) { + old2new[oldID] = nextGlyphID++; + } + } + + new2old = invert(old2new); + newIDs = Object.keys(new2old).sort(function (a, b) { + return a - b; + }); + + oldIDs = function () { + var _i, _len, _results; + + _results = []; + + for (_i = 0, _len = newIDs.length; _i < _len; _i++) { + id = newIDs[_i]; + + _results.push(new2old[id]); + } + + return _results; + }(); + + glyf = this.font.glyf.encode(glyphs, oldIDs, old2new); + loca = this.font.loca.encode(glyf.offsets, oldIDs); + tables = { + cmap: this.font.cmap.raw(), + glyf: glyf.table, + loca: loca, + hmtx: this.font.hmtx.raw(), + hhea: this.font.hhea.raw(), + maxp: this.font.maxp.raw(), + post: this.font.post.raw(), + name: this.font.name.raw(), + head: this.font.head.encode(indexToLocFormat) + }; + + if (this.font.os2.exists) { + tables["OS/2"] = this.font.os2.raw(); + } + + return this.font.directory.encode(tables); + }; + + return Subset; + }(); + + jsPDF.API.PDFObject = function () { + var pad; + + function PDFObject() {} + + pad = function pad(str, length) { + return (Array(length + 1).join("0") + str).slice(-length); + }; + /*****************************************************************************/ + + /* function : convert */ + + /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */ + + /*****************************************************************************/ + + + PDFObject.convert = function (object) { + var e, items, key, out, val; + + if (Array.isArray(object)) { + items = function () { + var _i, _len, _results; + + _results = []; + + for (_i = 0, _len = object.length; _i < _len; _i++) { + e = object[_i]; + + _results.push(PDFObject.convert(e)); + } + + return _results; + }().join(" "); + + return "[" + items + "]"; + } else if (typeof object === "string") { + return "/" + object; + } else if (object != null ? object.isString : void 0) { + return "(" + object + ")"; + } else if (object instanceof Date) { + return "(D:" + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth(), 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + "Z)"; + } else if ({}.toString.call(object) === "[object Object]") { + out = ["<<"]; + + for (key in object) { + val = object[key]; + out.push("/" + key + " " + PDFObject.convert(val)); + } + + out.push(">>"); + return out.join("\n"); + } else { + return "" + object; + } + }; + + return PDFObject; + }(); + + exports.AcroForm = AcroForm; + exports.AcroFormAppearance = AcroFormAppearance; + exports.AcroFormButton = AcroFormButton; + exports.AcroFormCheckBox = AcroFormCheckBox; + exports.AcroFormChoiceField = AcroFormChoiceField; + exports.AcroFormComboBox = AcroFormComboBox; + exports.AcroFormEditBox = AcroFormEditBox; + exports.AcroFormListBox = AcroFormListBox; + exports.AcroFormPasswordField = AcroFormPasswordField; + exports.AcroFormPushButton = AcroFormPushButton; + exports.AcroFormRadioButton = AcroFormRadioButton; + exports.AcroFormTextField = AcroFormTextField; + exports.GState = GState; + exports.ShadingPattern = ShadingPattern; + exports.TilingPattern = TilingPattern; + exports.default = jsPDF; + exports.jsPDF = jsPDF; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=jspdf.umd.js.map diff --git a/lib/jspdf/jspdf.umd.js.map b/lib/jspdf/jspdf.umd.js.map new file mode 100644 index 0000000..026df70 --- /dev/null +++ b/lib/jspdf/jspdf.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jspdf.umd.js","sources":["../src/libs/globalObject.js","../src/libs/console.js","../src/libs/FileSaver.js","../src/libs/rgbcolor.js","../src/libs/AtobBtoa.js","../src/libs/md5.js","../src/libs/rc4.js","../src/libs/pdfsecurity.js","../src/libs/pdfname.js","../src/jspdf.js","../src/modules/acroform.js","../src/modules/addimage.js","../src/modules/annotations.js","../src/modules/arabic.js","../src/modules/autoprint.js","../src/modules/canvas.js","../src/modules/cell.js","../src/libs/fontFace.js","../src/modules/context2d.js","../node_modules/fflate/esm/index.mjs","../src/modules/filters.js","../src/modules/fileloading.js","../src/modules/html.js","../src/modules/javascript.js","../src/modules/outline.js","../src/modules/jpeg_support.js","../src/libs/png.js","../src/modules/png_support.js","../src/libs/omggif.js","../src/libs/JPEGEncoder.js","../src/modules/gif_support.js","../src/libs/BMPDecoder.js","../src/modules/bmp_support.js","../src/libs/WebPDecoder.js","../src/modules/webp_support.js","../src/modules/rgba_support.js","../src/modules/setlanguage.js","../src/modules/split_text_to_size.js","../src/modules/standard_fonts_metrics.js","../src/modules/ttfsupport.js","../src/modules/svg.js","../src/modules/total_pages.js","../src/modules/viewerpreferences.js","../src/modules/xmp_metadata.js","../src/modules/utf8.js","../src/modules/vfs.js","../src/libs/bidiEngine.js","../src/libs/ttffont.js"],"sourcesContent":["export var globalObject = (function() {\n return \"undefined\" !== typeof window\n ? window\n : \"undefined\" !== typeof global\n ? global\n : \"undefined\" !== typeof self\n ? self\n : this;\n})();\n","import { globalObject } from \"./globalObject.js\";\n\nfunction consoleLog() {\n if (globalObject.console && typeof globalObject.console.log === \"function\") {\n globalObject.console.log.apply(globalObject.console, arguments);\n }\n}\n\nfunction consoleWarn(str) {\n if (globalObject.console) {\n if (typeof globalObject.console.warn === \"function\") {\n globalObject.console.warn.apply(globalObject.console, arguments);\n } else {\n consoleLog.call(null, arguments);\n }\n }\n}\n\nfunction consoleError(str) {\n if (globalObject.console) {\n if (typeof globalObject.console.error === \"function\") {\n globalObject.console.error.apply(globalObject.console, arguments);\n } else {\n consoleLog(str);\n }\n }\n}\nexport var console = {\n log: consoleLog,\n warn: consoleWarn,\n error: consoleError\n};\n","/**\n * @license\n * FileSaver.js\n * A saveAs() FileSaver implementation.\n *\n * By Eli Grey, http://eligrey.com\n *\n * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n * source : http://purl.eligrey.com/github/FileSaver.js\n */\n\nimport { globalObject as _global } from \"./globalObject.js\";\nimport { console } from \"./console.js\";\n\nfunction bom(blob, opts) {\n if (typeof opts === \"undefined\") opts = { autoBom: false };\n else if (typeof opts !== \"object\") {\n console.warn(\"Deprecated: Expected third argument to be a object\");\n opts = { autoBom: !opts };\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (\n opts.autoBom &&\n /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n blob.type\n )\n ) {\n return new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n }\n return blob;\n}\n\nfunction download(url, name, opts) {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url);\n xhr.responseType = \"blob\";\n xhr.onload = function() {\n saveAs(xhr.response, name, opts);\n };\n xhr.onerror = function() {\n console.error(\"could not download file\");\n };\n xhr.send();\n}\n\nfunction corsEnabled(url) {\n var xhr = new XMLHttpRequest();\n // use sync to avoid popup blocker\n xhr.open(\"HEAD\", url, false);\n try {\n xhr.send();\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299;\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click(node) {\n try {\n node.dispatchEvent(new MouseEvent(\"click\"));\n } catch (e) {\n var evt = document.createEvent(\"MouseEvents\");\n evt.initMouseEvent(\n \"click\",\n true,\n true,\n window,\n 0,\n 0,\n 0,\n 80,\n 20,\n false,\n false,\n false,\n false,\n 0,\n null\n );\n node.dispatchEvent(evt);\n }\n}\n\nvar saveAs =\n _global.saveAs ||\n // probably in some web worker\n (typeof window !== \"object\" || window !== _global\n ? function saveAs() {\n /* noop */\n }\n : // Use download attribute first if possible (#193 Lumia mobile) unless this is a native app\n typeof HTMLAnchorElement !== \"undefined\" &&\n \"download\" in HTMLAnchorElement.prototype\n ? function saveAs(blob, name, opts) {\n var URL = _global.URL || _global.webkitURL;\n var a = document.createElement(\"a\");\n name = name || blob.name || \"download\";\n\n a.download = name;\n a.rel = \"noopener\"; // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === \"string\") {\n // Support regular links\n a.href = blob;\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, (a.target = \"_blank\"));\n } else {\n click(a);\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function() {\n URL.revokeObjectURL(a.href);\n }, 4e4); // 40s\n setTimeout(function() {\n click(a);\n }, 0);\n }\n }\n : // Use msSaveOrOpenBlob as a second approach\n \"msSaveOrOpenBlob\" in navigator\n ? function saveAs(blob, name, opts) {\n name = name || blob.name || \"download\";\n\n if (typeof blob === \"string\") {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n } else {\n var a = document.createElement(\"a\");\n a.href = blob;\n a.target = \"_blank\";\n setTimeout(function() {\n click(a);\n });\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n }\n : // Fallback to using FileReader and a popup\n function saveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open(\"\", \"_blank\");\n if (popup) {\n popup.document.title = popup.document.body.innerText =\n \"downloading...\";\n }\n\n if (typeof blob === \"string\") return download(blob, name, opts);\n\n var force = blob.type === \"application/octet-stream\";\n var isSafari =\n /constructor/i.test(_global.HTMLElement) || _global.safari;\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\n if (\n (isChromeIOS || (force && isSafari)) &&\n typeof FileReader === \"object\"\n ) {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader();\n reader.onloadend = function() {\n var url = reader.result;\n url = isChromeIOS\n ? url\n : url.replace(/^data:[^;]*;/, \"data:attachment/file;\");\n if (popup) popup.location.href = url;\n else location = url;\n popup = null; // reverse-tabnabbing #460\n };\n reader.readAsDataURL(blob);\n } else {\n var URL = _global.URL || _global.webkitURL;\n var url = URL.createObjectURL(blob);\n if (popup) popup.location = url;\n else location.href = url;\n popup = null; // reverse-tabnabbing #460\n setTimeout(function() {\n URL.revokeObjectURL(url);\n }, 4e4); // 40s\n }\n });\n\nexport { saveAs };\n","/**\n * A class to parse color values\n * @author Stoyan Stefanov \n * {@link http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */\n\nfunction RGBColor(color_string) {\n color_string = color_string || \"\";\n this.ok = false;\n\n // strip any leading #\n if (color_string.charAt(0) == \"#\") {\n // remove # if any\n color_string = color_string.substr(1, 6);\n }\n\n color_string = color_string.replace(/ /g, \"\");\n color_string = color_string.toLowerCase();\n\n var channels;\n\n // before getting into regexps, try simple matches\n // and overwrite the input\n var simple_colors = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"00ffff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000000\",\n blanchedalmond: \"ffebcd\",\n blue: \"0000ff\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"00ffff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dodgerblue: \"1e90ff\",\n feldspar: \"d19275\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"ff00ff\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgrey: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslateblue: \"8470ff\",\n lightslategray: \"778899\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"00ff00\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"ff00ff\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370d8\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"d87093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n red: \"ff0000\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n violetred: \"d02090\",\n wheat: \"f5deb3\",\n white: \"ffffff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ffff00\",\n yellowgreen: \"9acd32\"\n };\n color_string = simple_colors[color_string] || color_string;\n\n // array of color definition objects\n var color_defs = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n example: [\"rgb(123, 234, 45)\", \"rgb(255,234,245)\"],\n process: function(bits) {\n return [parseInt(bits[1]), parseInt(bits[2]), parseInt(bits[3])];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n example: [\"#00ff00\", \"336699\"],\n process: function(bits) {\n return [\n parseInt(bits[1], 16),\n parseInt(bits[2], 16),\n parseInt(bits[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n example: [\"#fb0\", \"f0f\"],\n process: function(bits) {\n return [\n parseInt(bits[1] + bits[1], 16),\n parseInt(bits[2] + bits[2], 16),\n parseInt(bits[3] + bits[3], 16)\n ];\n }\n }\n ];\n\n // search through the definitions to find a match\n for (var i = 0; i < color_defs.length; i++) {\n var re = color_defs[i].re;\n var processor = color_defs[i].process;\n var bits = re.exec(color_string);\n if (bits) {\n channels = processor(bits);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n this.ok = true;\n }\n }\n\n // validate/cleanup values\n this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r;\n this.g = this.g < 0 || isNaN(this.g) ? 0 : this.g > 255 ? 255 : this.g;\n this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b;\n\n // some getters\n this.toRGB = function() {\n return \"rgb(\" + this.r + \", \" + this.g + \", \" + this.b + \")\";\n };\n this.toHex = function() {\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n if (r.length == 1) r = \"0\" + r;\n if (g.length == 1) g = \"0\" + g;\n if (b.length == 1) b = \"0\" + b;\n return \"#\" + r + g + b;\n };\n}\n\nexport { RGBColor };\n","import { globalObject } from \"./globalObject.js\";\n\nvar atob, btoa;\n\n(function() {\n atob = globalObject.atob.bind(globalObject);\n btoa = globalObject.btoa.bind(globalObject);\n return;\n\n})();\n\nexport { atob, btoa };\n","/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\n\nfunction md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a = ff(a, b, c, d, k[0], 7, -680876936);\n d = ff(d, a, b, c, k[1], 12, -389564586);\n c = ff(c, d, a, b, k[2], 17, 606105819);\n b = ff(b, c, d, a, k[3], 22, -1044525330);\n a = ff(a, b, c, d, k[4], 7, -176418897);\n d = ff(d, a, b, c, k[5], 12, 1200080426);\n c = ff(c, d, a, b, k[6], 17, -1473231341);\n b = ff(b, c, d, a, k[7], 22, -45705983);\n a = ff(a, b, c, d, k[8], 7, 1770035416);\n d = ff(d, a, b, c, k[9], 12, -1958414417);\n c = ff(c, d, a, b, k[10], 17, -42063);\n b = ff(b, c, d, a, k[11], 22, -1990404162);\n a = ff(a, b, c, d, k[12], 7, 1804603682);\n d = ff(d, a, b, c, k[13], 12, -40341101);\n c = ff(c, d, a, b, k[14], 17, -1502002290);\n b = ff(b, c, d, a, k[15], 22, 1236535329);\n\n a = gg(a, b, c, d, k[1], 5, -165796510);\n d = gg(d, a, b, c, k[6], 9, -1069501632);\n c = gg(c, d, a, b, k[11], 14, 643717713);\n b = gg(b, c, d, a, k[0], 20, -373897302);\n a = gg(a, b, c, d, k[5], 5, -701558691);\n d = gg(d, a, b, c, k[10], 9, 38016083);\n c = gg(c, d, a, b, k[15], 14, -660478335);\n b = gg(b, c, d, a, k[4], 20, -405537848);\n a = gg(a, b, c, d, k[9], 5, 568446438);\n d = gg(d, a, b, c, k[14], 9, -1019803690);\n c = gg(c, d, a, b, k[3], 14, -187363961);\n b = gg(b, c, d, a, k[8], 20, 1163531501);\n a = gg(a, b, c, d, k[13], 5, -1444681467);\n d = gg(d, a, b, c, k[2], 9, -51403784);\n c = gg(c, d, a, b, k[7], 14, 1735328473);\n b = gg(b, c, d, a, k[12], 20, -1926607734);\n\n a = hh(a, b, c, d, k[5], 4, -378558);\n d = hh(d, a, b, c, k[8], 11, -2022574463);\n c = hh(c, d, a, b, k[11], 16, 1839030562);\n b = hh(b, c, d, a, k[14], 23, -35309556);\n a = hh(a, b, c, d, k[1], 4, -1530992060);\n d = hh(d, a, b, c, k[4], 11, 1272893353);\n c = hh(c, d, a, b, k[7], 16, -155497632);\n b = hh(b, c, d, a, k[10], 23, -1094730640);\n a = hh(a, b, c, d, k[13], 4, 681279174);\n d = hh(d, a, b, c, k[0], 11, -358537222);\n c = hh(c, d, a, b, k[3], 16, -722521979);\n b = hh(b, c, d, a, k[6], 23, 76029189);\n a = hh(a, b, c, d, k[9], 4, -640364487);\n d = hh(d, a, b, c, k[12], 11, -421815835);\n c = hh(c, d, a, b, k[15], 16, 530742520);\n b = hh(b, c, d, a, k[2], 23, -995338651);\n\n a = ii(a, b, c, d, k[0], 6, -198630844);\n d = ii(d, a, b, c, k[7], 10, 1126891415);\n c = ii(c, d, a, b, k[14], 15, -1416354905);\n b = ii(b, c, d, a, k[5], 21, -57434055);\n a = ii(a, b, c, d, k[12], 6, 1700485571);\n d = ii(d, a, b, c, k[3], 10, -1894986606);\n c = ii(c, d, a, b, k[10], 15, -1051523);\n b = ii(b, c, d, a, k[1], 21, -2054922799);\n a = ii(a, b, c, d, k[8], 6, 1873313359);\n d = ii(d, a, b, c, k[15], 10, -30611744);\n c = ii(c, d, a, b, k[6], 15, -1560198380);\n b = ii(b, c, d, a, k[13], 21, 1309151649);\n a = ii(a, b, c, d, k[4], 6, -145523070);\n d = ii(d, a, b, c, k[11], 10, -1120210379);\n c = ii(c, d, a, b, k[2], 15, 718787259);\n b = ii(b, c, d, a, k[9], 21, -343485551);\n\n x[0] = add32(a, x[0]);\n x[1] = add32(b, x[1]);\n x[2] = add32(c, x[2]);\n x[3] = add32(d, x[3]);\n}\n\nfunction cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn((b & c) | (~b & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nfunction md51(s) {\n // txt = '';\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i;\n for (i = 64; i <= s.length; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < s.length; i++)\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n tail[i >> 2] |= 0x80 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i++) tail[i] = 0;\n }\n tail[14] = n * 8;\n md5cycle(state, tail);\n return state;\n}\n\n/* there needs to be support for Unicode here,\n * unless we pretend that we can redefine the MD-5\n * algorithm for multi-byte characters (perhaps\n * by adding every four 16-bit characters and\n * shortening the sum to 32 bits). Otherwise\n * I suggest performing MD-5 as if every character\n * was two bytes--e.g., 0040 0025 = @%--but then\n * how will an ordinary MD-5 sum be matched?\n * There is no way to standardize text to something\n * like UTF-8 before transformation; speed cost is\n * utterly prohibitive. The JavaScript standard\n * itself needs to look at this: it should start\n * providing access to strings as preformed UTF-8\n * 8-bit unsigned value arrays.\n */\nfunction md5blk(s) {\n /* I figured global was faster. */\n var md5blks = [],\n i; /* Andy King said do it this way. */\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] =\n s.charCodeAt(i) +\n (s.charCodeAt(i + 1) << 8) +\n (s.charCodeAt(i + 2) << 16) +\n (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n}\n\nvar hex_chr = \"0123456789abcdef\".split(\"\");\n\nfunction rhex(n) {\n var s = \"\",\n j = 0;\n for (; j < 4; j++)\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];\n return s;\n}\n\nfunction hex(x) {\n for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]);\n return x.join(\"\");\n}\n\n// Converts a 4-byte number to byte string\nfunction singleToByteString(n) {\n return String.fromCharCode(\n (n & 0xff) >> 0,\n (n & 0xff00) >> 8,\n (n & 0xff0000) >> 16,\n (n & 0xff000000) >> 24\n );\n}\n\n// Converts an array of numbers to a byte string\nfunction toByteString(x) {\n return x.map(singleToByteString).join(\"\");\n}\n\n// Returns the MD5 hash as a byte string\nfunction md5Bin(s) {\n return toByteString(md51(s));\n}\n\n// Returns MD5 hash as a hex string\nfunction md5(s) {\n return hex(md51(s));\n}\n\nvar md5Check = md5(\"hello\") != \"5d41402abc4b2a76b9719d911017c592\";\n\nfunction add32(a, b) {\n if (md5Check) {\n /* if the md5Check does not match\n the expected value, we're dealing\n with an old browser and need\n this function. */\n var lsw = (a & 0xffff) + (b & 0xffff),\n msw = (a >> 16) + (b >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n } else {\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n return (a + b) & 0xffffffff;\n }\n}\n\nexport { md5, md5Bin };\n","/**\r\n * @license\r\n * FPDF is released under a permissive license: there is no usage restriction.\r\n * You may embed it freely in your application (commercial or not), with or\r\n * without modifications.\r\n *\r\n * Reference: http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nfunction repeat(str, num) {\r\n return new Array(num + 1).join(str);\r\n}\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name rc4\r\n * @function\r\n * @param {string} key Byte string of encryption key\r\n * @param {string} data Byte string of data to be encrypted\r\n * @returns {string} Encrypted string\r\n */\r\nfunction rc4(key, data) {\r\n var lastKey, lastState;\r\n if (key !== lastKey) {\r\n var k = repeat(key, ((256 / key.length) >> 0) + 1);\r\n var state = [];\r\n for (var i = 0; i < 256; i++) {\r\n state[i] = i;\r\n }\r\n var j = 0;\r\n for (var i = 0; i < 256; i++) {\r\n var t = state[i];\r\n j = (j + t + k.charCodeAt(i)) % 256;\r\n state[i] = state[j];\r\n state[j] = t;\r\n }\r\n lastKey = key;\r\n lastState = state;\r\n } else {\r\n state = lastState;\r\n }\r\n var length = data.length;\r\n var a = 0;\r\n var b = 0;\r\n var out = \"\";\r\n for (var i = 0; i < length; i++) {\r\n a = (a + 1) % 256;\r\n t = state[a];\r\n b = (b + t) % 256;\r\n state[a] = state[b];\r\n state[b] = t;\r\n k = state[(state[a] + state[b]) % 256];\r\n out += String.fromCharCode(data.charCodeAt(i) ^ k);\r\n }\r\n return out;\r\n}\r\n\r\nexport { rc4 };\r\n","/**\r\n * @license\r\n * Licensed under the MIT License.\r\n * http://opensource.org/licenses/mit-license\r\n * Author: Owen Leong (@owenl131)\r\n * Date: 15 Oct 2020\r\n * References:\r\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\r\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\r\n * http://www.fpdf.org/en/script/script37.php\r\n */\r\n\r\nimport { md5Bin } from \"./md5.js\";\r\nimport { rc4 } from \"./rc4.js\";\r\n\r\nvar permissionOptions = {\r\n print: 4,\r\n modify: 8,\r\n copy: 16,\r\n \"annot-forms\": 32\r\n};\r\n\r\n/**\r\n * Initializes encryption settings\r\n *\r\n * @name constructor\r\n * @function\r\n * @param {Array} permissions Permissions allowed for user, \"print\", \"modify\", \"copy\" and \"annot-forms\".\r\n * @param {String} userPassword Permissions apply to this user. Leaving this empty means the document\r\n * is not password protected but viewer has the above permissions.\r\n * @param {String} ownerPassword Owner has full functionalities to the file.\r\n * @param {String} fileId As hex string, should be same as the file ID in the trailer.\r\n * @example\r\n * var security = new PDFSecurity([\"print\"])\r\n */\r\nfunction PDFSecurity(permissions, userPassword, ownerPassword, fileId) {\r\n this.v = 1; // algorithm 1, future work can add in more recent encryption schemes\r\n this.r = 2; // revision 2\r\n\r\n // set flags for what functionalities the user can access\r\n let protection = 192;\r\n permissions.forEach(function(perm) {\r\n if (typeof permissionOptions.perm !== \"undefined\") {\r\n throw new Error(\"Invalid permission: \" + perm);\r\n }\r\n protection += permissionOptions[perm];\r\n });\r\n\r\n // padding is used to pad the passwords to 32 bytes, also is hashed and stored in the final PDF\r\n this.padding =\r\n \"\\x28\\xBF\\x4E\\x5E\\x4E\\x75\\x8A\\x41\\x64\\x00\\x4E\\x56\\xFF\\xFA\\x01\\x08\" +\r\n \"\\x2E\\x2E\\x00\\xB6\\xD0\\x68\\x3E\\x80\\x2F\\x0C\\xA9\\xFE\\x64\\x53\\x69\\x7A\";\r\n let paddedUserPassword = (userPassword + this.padding).substr(0, 32);\r\n let paddedOwnerPassword = (ownerPassword + this.padding).substr(0, 32);\r\n\r\n this.O = this.processOwnerPassword(paddedUserPassword, paddedOwnerPassword);\r\n this.P = -((protection ^ 255) + 1);\r\n this.encryptionKey = md5Bin(\r\n paddedUserPassword +\r\n this.O +\r\n this.lsbFirstWord(this.P) +\r\n this.hexToBytes(fileId)\r\n ).substr(0, 5);\r\n this.U = rc4(this.encryptionKey, this.padding);\r\n}\r\n\r\n/**\r\n * Breaks down a 4-byte number into its individual bytes, with the least significant bit first\r\n *\r\n * @name lsbFirstWord\r\n * @function\r\n * @param {number} data 32-bit number\r\n * @returns {Array}\r\n */\r\nPDFSecurity.prototype.lsbFirstWord = function(data) {\r\n return String.fromCharCode(\r\n (data >> 0) & 0xff,\r\n (data >> 8) & 0xff,\r\n (data >> 16) & 0xff,\r\n (data >> 24) & 0xff\r\n );\r\n};\r\n\r\n/**\r\n * Converts a byte string to a hex string\r\n *\r\n * @name toHexString\r\n * @function\r\n * @param {String} byteString Byte string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.toHexString = function(byteString) {\r\n return byteString\r\n .split(\"\")\r\n .map(function(byte) {\r\n return (\"0\" + (byte.charCodeAt(0) & 0xff).toString(16)).slice(-2);\r\n })\r\n .join(\"\");\r\n};\r\n\r\n/**\r\n * Converts a hex string to a byte string\r\n *\r\n * @name hexToBytes\r\n * @function\r\n * @param {String} hex Hex string\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.hexToBytes = function(hex) {\r\n for (var bytes = [], c = 0; c < hex.length; c += 2)\r\n bytes.push(String.fromCharCode(parseInt(hex.substr(c, 2), 16)));\r\n return bytes.join(\"\");\r\n};\r\n\r\n/**\r\n * Computes the 'O' field in the encryption dictionary\r\n *\r\n * @name processOwnerPassword\r\n * @function\r\n * @param {String} paddedUserPassword Byte string of padded user password\r\n * @param {String} paddedOwnerPassword Byte string of padded owner password\r\n * @returns {String}\r\n */\r\nPDFSecurity.prototype.processOwnerPassword = function(\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let key = md5Bin(paddedOwnerPassword).substr(0, 5);\r\n return rc4(key, paddedUserPassword);\r\n};\r\n\r\n/**\r\n * Returns an encryptor function which can take in a byte string and returns the encrypted version\r\n *\r\n * @name encryptor\r\n * @function\r\n * @param {number} objectId\r\n * @param {number} generation Not sure what this is for, you can set it to 0\r\n * @returns {Function}\r\n * @example\r\n * out(\"stream\");\r\n * encryptor = security.encryptor(object.id, 0);\r\n * out(encryptor(data));\r\n * out(\"endstream\");\r\n */\r\nPDFSecurity.prototype.encryptor = function(objectId, generation) {\r\n let key = md5Bin(\r\n this.encryptionKey +\r\n String.fromCharCode(\r\n objectId & 0xff,\r\n (objectId >> 8) & 0xff,\r\n (objectId >> 16) & 0xff,\r\n generation & 0xff,\r\n (generation >> 8) & 0xff\r\n )\r\n ).substr(0, 10);\r\n return function(data) {\r\n return rc4(key, data);\r\n };\r\n};\r\n\r\nexport { PDFSecurity };\r\n","/**\n * Convert string to `PDF Name Object`.\n * Detail: PDF Reference 1.3 - Chapter 3.2.4 Name Object\n * @param str\n */\nfunction toPDFName(str) {\n // eslint-disable-next-line no-control-regex\n if (/[^\\u0000-\\u00ff]/.test(str)) {\n // non ascii string\n throw new Error(\n \"Invalid PDF Name Object: \" + str + \", Only accept ASCII characters.\"\n );\n }\n var result = \"\",\n strLength = str.length;\n for (var i = 0; i < strLength; i++) {\n var charCode = str.charCodeAt(i);\n if (\n charCode < 0x21 ||\n charCode === 0x23 /* # */ ||\n charCode === 0x25 /* % */ ||\n charCode === 0x28 /* ( */ ||\n charCode === 0x29 /* ) */ ||\n charCode === 0x2f /* / */ ||\n charCode === 0x3c /* < */ ||\n charCode === 0x3e /* > */ ||\n charCode === 0x5b /* [ */ ||\n charCode === 0x5d /* ] */ ||\n charCode === 0x7b /* { */ ||\n charCode === 0x7d /* } */ ||\n charCode > 0x7e\n ) {\n // Char CharCode hexStr paddingHexStr Result\n // \"\\t\" 9 9 09 #09\n // \" \" 32 20 20 #20\n // \"©\" 169 a9 a9 #a9\n var hexStr = charCode.toString(16),\n paddingHexStr = (\"0\" + hexStr).slice(-2);\n\n result += \"#\" + paddingHexStr;\n } else {\n // Other ASCII printable characters between 0x21 <= X <= 0x7e\n result += str[i];\n }\n }\n return result;\n}\n\nexport { toPDFName };\n","/* eslint-disable no-console */\r\n\r\nimport { saveAs } from \"./libs/FileSaver.js\";\r\nimport { globalObject } from \"./libs/globalObject.js\";\r\nimport { RGBColor } from \"./libs/rgbcolor.js\";\r\nimport { btoa } from \"./libs/AtobBtoa.js\";\r\nimport { console } from \"./libs/console.js\";\r\nimport { PDFSecurity } from \"./libs/pdfsecurity.js\";\r\nimport { toPDFName } from \"./libs/pdfname.js\";\r\n/**\r\n * jsPDF's Internal PubSub Implementation.\r\n * Backward compatible rewritten on 2014 by\r\n * Diego Casorran, https://github.com/diegocr\r\n *\r\n * @class\r\n * @name PubSub\r\n * @ignore\r\n */\r\nfunction PubSub(context) {\r\n if (typeof context !== \"object\") {\r\n throw new Error(\r\n \"Invalid Context passed to initialize PubSub (jsPDF-module)\"\r\n );\r\n }\r\n var topics = {};\r\n\r\n this.subscribe = function(topic, callback, once) {\r\n once = once || false;\r\n if (\r\n typeof topic !== \"string\" ||\r\n typeof callback !== \"function\" ||\r\n typeof once !== \"boolean\"\r\n ) {\r\n throw new Error(\r\n \"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\"\r\n );\r\n }\r\n\r\n if (!topics.hasOwnProperty(topic)) {\r\n topics[topic] = {};\r\n }\r\n\r\n var token = Math.random().toString(35);\r\n topics[topic][token] = [callback, !!once];\r\n\r\n return token;\r\n };\r\n\r\n this.unsubscribe = function(token) {\r\n for (var topic in topics) {\r\n if (topics[topic][token]) {\r\n delete topics[topic][token];\r\n if (Object.keys(topics[topic]).length === 0) {\r\n delete topics[topic];\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n this.publish = function(topic) {\r\n if (topics.hasOwnProperty(topic)) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n tokens = [];\r\n\r\n for (var token in topics[topic]) {\r\n var sub = topics[topic][token];\r\n try {\r\n sub[0].apply(context, args);\r\n } catch (ex) {\r\n if (globalObject.console) {\r\n console.error(\"jsPDF PubSub Error\", ex.message, ex);\r\n }\r\n }\r\n if (sub[1]) tokens.push(token);\r\n }\r\n if (tokens.length) tokens.forEach(this.unsubscribe);\r\n }\r\n };\r\n\r\n this.getTopics = function() {\r\n return topics;\r\n };\r\n}\r\n\r\nfunction GState(parameters) {\r\n if (!(this instanceof GState)) {\r\n return new GState(parameters);\r\n }\r\n\r\n /**\r\n * @name GState#opacity\r\n * @type {any}\r\n */\r\n /**\r\n * @name GState#stroke-opacity\r\n * @type {any}\r\n */\r\n var supported = \"opacity,stroke-opacity\".split(\",\");\r\n for (var p in parameters) {\r\n if (parameters.hasOwnProperty(p) && supported.indexOf(p) >= 0) {\r\n this[p] = parameters[p];\r\n }\r\n }\r\n /**\r\n * @name GState#id\r\n * @type {string}\r\n */\r\n this.id = \"\"; // set by addGState()\r\n /**\r\n * @name GState#objectNumber\r\n * @type {number}\r\n */\r\n this.objectNumber = -1; // will be set by putGState()\r\n}\r\n\r\nGState.prototype.equals = function equals(other) {\r\n var ignore = \"id,objectNumber,equals\";\r\n var p;\r\n if (!other || typeof other !== typeof this) return false;\r\n var count = 0;\r\n for (p in this) {\r\n if (ignore.indexOf(p) >= 0) continue;\r\n if (this.hasOwnProperty(p) && !other.hasOwnProperty(p)) return false;\r\n if (this[p] !== other[p]) return false;\r\n count++;\r\n }\r\n for (p in other) {\r\n if (other.hasOwnProperty(p) && ignore.indexOf(p) < 0) count--;\r\n }\r\n return count === 0;\r\n};\r\n\r\nfunction Pattern(gState, matrix) {\r\n this.gState = gState;\r\n this.matrix = matrix;\r\n\r\n this.id = \"\"; // set by addPattern()\r\n this.objectNumber = -1; // will be set by putPattern()\r\n}\r\n\r\nfunction ShadingPattern(type, coords, colors, gState, matrix) {\r\n if (!(this instanceof ShadingPattern)) {\r\n return new ShadingPattern(type, coords, colors, gState, matrix);\r\n }\r\n\r\n // see putPattern() for information how they are realized\r\n this.type = type === \"axial\" ? 2 : 3;\r\n this.coords = coords;\r\n this.colors = colors;\r\n\r\n Pattern.call(this, gState, matrix);\r\n}\r\n\r\nfunction TilingPattern(boundingBox, xStep, yStep, gState, matrix) {\r\n if (!(this instanceof TilingPattern)) {\r\n return new TilingPattern(boundingBox, xStep, yStep, gState, matrix);\r\n }\r\n\r\n this.boundingBox = boundingBox;\r\n this.xStep = xStep;\r\n this.yStep = yStep;\r\n\r\n this.stream = \"\"; // set by endTilingPattern();\r\n\r\n this.cloneIndex = 0;\r\n\r\n Pattern.call(this, gState, matrix);\r\n}\r\n\r\n/**\r\n * Creates new jsPDF document object instance.\r\n * @name jsPDF\r\n * @class\r\n * @param {Object} [options] - Collection of settings initializing the jsPDF-instance\r\n * @param {string} [options.orientation=portrait] - Orientation of the first page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" or \"l\").
    \r\n * @param {string} [options.unit=mm] Measurement unit (base unit) to be used when coordinates are specified.
    \r\n * Possible values are \"pt\" (points), \"mm\", \"cm\", \"in\", \"px\", \"pc\", \"em\" or \"ex\". Note that in order to get the correct scaling for \"px\"\r\n * units, you need to enable the hotfix \"px_scaling\" by setting options.hotfixes = [\"px_scaling\"].\r\n * @param {string/Array} [options.format=a4] The format of the first page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param {boolean} [options.putOnlyUsedFonts=false] Only put fonts into the PDF, which were used.\r\n * @param {boolean} [options.compress=false] Compress the generated PDF.\r\n * @param {number} [options.precision=16] Precision of the element-positions.\r\n * @param {number} [options.userUnit=1.0] Not to be confused with the base unit. Please inform yourself before you use it.\r\n * @param {string[]} [options.hotfixes] An array of strings to enable hotfixes such as correct pixel scaling.\r\n * @param {Object} [options.encryption]\r\n * @param {string} [options.encryption.userPassword] Password for the user bound by the given permissions list.\r\n * @param {string} [options.encryption.ownerPassword] Both userPassword and ownerPassword should be set for proper authentication.\r\n * @param {string[]} [options.encryption.userPermissions] Array of permissions \"print\", \"modify\", \"copy\", \"annot-forms\", accessible by the user.\r\n * @param {number|\"smart\"} [options.floatPrecision=16]\r\n * @returns {jsPDF} jsPDF-instance\r\n * @description\r\n * ```\r\n * {\r\n * orientation: 'p',\r\n * unit: 'mm',\r\n * format: 'a4',\r\n * putOnlyUsedFonts:true,\r\n * floatPrecision: 16 // or \"smart\", default is 16\r\n * }\r\n * ```\r\n *\r\n * @constructor\r\n */\r\nfunction jsPDF(options) {\r\n var orientation = typeof arguments[0] === \"string\" ? arguments[0] : \"p\";\r\n var unit = arguments[1];\r\n var format = arguments[2];\r\n var compressPdf = arguments[3];\r\n var filters = [];\r\n var userUnit = 1.0;\r\n var precision;\r\n var floatPrecision = 16;\r\n var defaultPathOperation = \"S\";\r\n var encryptionOptions = null;\r\n\r\n options = options || {};\r\n\r\n if (typeof options === \"object\") {\r\n orientation = options.orientation;\r\n unit = options.unit || unit;\r\n format = options.format || format;\r\n compressPdf = options.compress || options.compressPdf || compressPdf;\r\n encryptionOptions = options.encryption || null;\r\n if (encryptionOptions !== null) {\r\n encryptionOptions.userPassword = encryptionOptions.userPassword || \"\";\r\n encryptionOptions.ownerPassword = encryptionOptions.ownerPassword || \"\";\r\n encryptionOptions.userPermissions =\r\n encryptionOptions.userPermissions || [];\r\n }\r\n userUnit =\r\n typeof options.userUnit === \"number\" ? Math.abs(options.userUnit) : 1.0;\r\n if (typeof options.precision !== \"undefined\") {\r\n precision = options.precision;\r\n }\r\n if (typeof options.floatPrecision !== \"undefined\") {\r\n floatPrecision = options.floatPrecision;\r\n }\r\n defaultPathOperation = options.defaultPathOperation || \"S\";\r\n }\r\n\r\n filters =\r\n options.filters || (compressPdf === true ? [\"FlateEncode\"] : filters);\r\n\r\n unit = unit || \"mm\";\r\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\r\n var putOnlyUsedFonts = options.putOnlyUsedFonts || false;\r\n var usedFonts = {};\r\n\r\n var API = {\r\n internal: {},\r\n __private__: {}\r\n };\r\n\r\n API.__private__.PubSub = PubSub;\r\n\r\n var pdfVersion = \"1.3\";\r\n var getPdfVersion = (API.__private__.getPdfVersion = function() {\r\n return pdfVersion;\r\n });\r\n\r\n API.__private__.setPdfVersion = function(value) {\r\n pdfVersion = value;\r\n };\r\n\r\n // Size in pt of various paper formats\r\n var pageFormats = {\r\n a0: [2383.94, 3370.39],\r\n a1: [1683.78, 2383.94],\r\n a2: [1190.55, 1683.78],\r\n a3: [841.89, 1190.55],\r\n a4: [595.28, 841.89],\r\n a5: [419.53, 595.28],\r\n a6: [297.64, 419.53],\r\n a7: [209.76, 297.64],\r\n a8: [147.4, 209.76],\r\n a9: [104.88, 147.4],\r\n a10: [73.7, 104.88],\r\n b0: [2834.65, 4008.19],\r\n b1: [2004.09, 2834.65],\r\n b2: [1417.32, 2004.09],\r\n b3: [1000.63, 1417.32],\r\n b4: [708.66, 1000.63],\r\n b5: [498.9, 708.66],\r\n b6: [354.33, 498.9],\r\n b7: [249.45, 354.33],\r\n b8: [175.75, 249.45],\r\n b9: [124.72, 175.75],\r\n b10: [87.87, 124.72],\r\n c0: [2599.37, 3676.54],\r\n c1: [1836.85, 2599.37],\r\n c2: [1298.27, 1836.85],\r\n c3: [918.43, 1298.27],\r\n c4: [649.13, 918.43],\r\n c5: [459.21, 649.13],\r\n c6: [323.15, 459.21],\r\n c7: [229.61, 323.15],\r\n c8: [161.57, 229.61],\r\n c9: [113.39, 161.57],\r\n c10: [79.37, 113.39],\r\n dl: [311.81, 623.62],\r\n letter: [612, 792],\r\n \"government-letter\": [576, 756],\r\n legal: [612, 1008],\r\n \"junior-legal\": [576, 360],\r\n ledger: [1224, 792],\r\n tabloid: [792, 1224],\r\n \"credit-card\": [153, 243]\r\n };\r\n\r\n API.__private__.getPageFormats = function() {\r\n return pageFormats;\r\n };\r\n\r\n var getPageFormat = (API.__private__.getPageFormat = function(value) {\r\n return pageFormats[value];\r\n });\r\n\r\n format = format || \"a4\";\r\n\r\n var ApiMode = {\r\n COMPAT: \"compat\",\r\n ADVANCED: \"advanced\"\r\n };\r\n var apiMode = ApiMode.COMPAT;\r\n\r\n function advancedAPI() {\r\n // prepend global change of basis matrix\r\n // (Now, instead of converting every coordinate to the pdf coordinate system, we apply a matrix\r\n // that does this job for us (however, texts, images and similar objects must be drawn bottom up))\r\n this.saveGraphicsState();\r\n out(\r\n new Matrix(\r\n scaleFactor,\r\n 0,\r\n 0,\r\n -scaleFactor,\r\n 0,\r\n getPageHeight() * scaleFactor\r\n ).toString() + \" cm\"\r\n );\r\n this.setFontSize(this.getFontSize() / scaleFactor);\r\n\r\n // The default in MrRio's implementation is \"S\" (stroke), whereas the default in the yWorks implementation\r\n // was \"n\" (none). Although this has nothing to do with transforms, we should use the API switch here.\r\n defaultPathOperation = \"n\";\r\n\r\n apiMode = ApiMode.ADVANCED;\r\n }\r\n\r\n function compatAPI() {\r\n this.restoreGraphicsState();\r\n defaultPathOperation = \"S\";\r\n apiMode = ApiMode.COMPAT;\r\n }\r\n\r\n /**\r\n * @function combineFontStyleAndFontWeight\r\n * @param {string} fontStyle Fontstyle or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @returns {string}\r\n * @private\r\n */\r\n var combineFontStyleAndFontWeight = (API.__private__.combineFontStyleAndFontWeight = function(\r\n fontStyle,\r\n fontWeight\r\n ) {\r\n if (\r\n (fontStyle == \"bold\" && fontWeight == \"normal\") ||\r\n (fontStyle == \"bold\" && fontWeight == 400) ||\r\n (fontStyle == \"normal\" && fontWeight == \"italic\") ||\r\n (fontStyle == \"bold\" && fontWeight == \"italic\")\r\n ) {\r\n throw new Error(\"Invalid Combination of fontweight and fontstyle\");\r\n }\r\n if (fontWeight) {\r\n fontStyle =\r\n fontWeight == 400 || fontWeight === \"normal\"\r\n ? fontStyle === \"italic\"\r\n ? \"italic\"\r\n : \"normal\"\r\n : (fontWeight == 700 || fontWeight === \"bold\") &&\r\n fontStyle === \"normal\"\r\n ? \"bold\"\r\n : (fontWeight == 700 ? \"bold\" : fontWeight) + \"\" + fontStyle;\r\n }\r\n return fontStyle;\r\n });\r\n\r\n /**\r\n * @callback ApiSwitchBody\r\n * @param {jsPDF} pdf\r\n */\r\n\r\n /**\r\n * For compatibility reasons jsPDF offers two API modes which differ in the way they convert between the the usual\r\n * screen coordinates and the PDF coordinate system.\r\n * - \"compat\": Offers full compatibility across all plugins but does not allow arbitrary transforms\r\n * - \"advanced\": Allows arbitrary transforms and more advanced features like pattern fills. Some plugins might\r\n * not support this mode, though.\r\n * Initial mode is \"compat\".\r\n *\r\n * You can either provide a callback to the body argument, which means that jsPDF will automatically switch back to\r\n * the original API mode afterwards; or you can omit the callback and switch back manually using {@link compatAPI}.\r\n *\r\n * Note, that the calls to {@link saveGraphicsState} and {@link restoreGraphicsState} need to be balanced within the\r\n * callback or between calls of this method and its counterpart {@link compatAPI}. Calls to {@link beginFormObject}\r\n * or {@link beginTilingPattern} need to be closed by their counterparts before switching back to \"compat\" API mode.\r\n *\r\n * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n * The API mode will be switched back automatically afterwards.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name advancedAPI\r\n */\r\n API.advancedAPI = function(body) {\r\n var doSwitch = apiMode === ApiMode.COMPAT;\r\n\r\n if (doSwitch) {\r\n advancedAPI.call(this);\r\n }\r\n\r\n if (typeof body !== \"function\") {\r\n return this;\r\n }\r\n\r\n body(this);\r\n\r\n if (doSwitch) {\r\n compatAPI.call(this);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches to \"compat\" API mode. See {@link advancedAPI} for more details.\r\n *\r\n * @param {ApiSwitchBody=} body When provided, this callback will be called after the API mode has been switched.\r\n * The API mode will be switched back automatically afterwards.\r\n * @return {jsPDF}\r\n * @memberof jsPDF#\r\n * @name compatApi\r\n */\r\n API.compatAPI = function(body) {\r\n var doSwitch = apiMode === ApiMode.ADVANCED;\r\n\r\n if (doSwitch) {\r\n compatAPI.call(this);\r\n }\r\n\r\n if (typeof body !== \"function\") {\r\n return this;\r\n }\r\n\r\n body(this);\r\n\r\n if (doSwitch) {\r\n advancedAPI.call(this);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * @return {boolean} True iff the current API mode is \"advanced\". See {@link advancedAPI}.\r\n * @memberof jsPDF#\r\n * @name isAdvancedAPI\r\n */\r\n API.isAdvancedAPI = function() {\r\n return apiMode === ApiMode.ADVANCED;\r\n };\r\n\r\n var advancedApiModeTrap = function(methodName) {\r\n if (apiMode !== ApiMode.ADVANCED) {\r\n throw new Error(\r\n methodName +\r\n \" is only available in 'advanced' API mode. \" +\r\n \"You need to call advancedAPI() first.\"\r\n );\r\n }\r\n };\r\n\r\n var roundToPrecision = (API.roundToPrecision = API.__private__.roundToPrecision = function(\r\n number,\r\n parmPrecision\r\n ) {\r\n var tmpPrecision = precision || parmPrecision;\r\n if (isNaN(number) || isNaN(tmpPrecision)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");\r\n }\r\n return number.toFixed(tmpPrecision).replace(/0+$/, \"\");\r\n });\r\n\r\n // high precision float\r\n var hpf;\r\n if (typeof floatPrecision === \"number\") {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n return roundToPrecision(number, floatPrecision);\r\n };\r\n } else if (floatPrecision === \"smart\") {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n if (number > -1 && number < 1) {\r\n return roundToPrecision(number, 16);\r\n } else {\r\n return roundToPrecision(number, 5);\r\n }\r\n };\r\n } else {\r\n hpf = API.hpf = API.__private__.hpf = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.hpf\");\r\n }\r\n return roundToPrecision(number, 16);\r\n };\r\n }\r\n var f2 = (API.f2 = API.__private__.f2 = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.f2\");\r\n }\r\n return roundToPrecision(number, 2);\r\n });\r\n\r\n var f3 = (API.__private__.f3 = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.f3\");\r\n }\r\n return roundToPrecision(number, 3);\r\n });\r\n\r\n var scale = (API.scale = API.__private__.scale = function(number) {\r\n if (isNaN(number)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.scale\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return number * scaleFactor;\r\n } else if (apiMode === ApiMode.ADVANCED) {\r\n return number;\r\n }\r\n });\r\n\r\n var transformY = function(y) {\r\n if (apiMode === ApiMode.COMPAT) {\r\n return getPageHeight() - y;\r\n } else if (apiMode === ApiMode.ADVANCED) {\r\n return y;\r\n }\r\n };\r\n\r\n var transformScaleY = function(y) {\r\n return scale(transformY(y));\r\n };\r\n\r\n /**\r\n * @name setPrecision\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {string} precision\r\n * @returns {jsPDF}\r\n */\r\n API.__private__.setPrecision = API.setPrecision = function(value) {\r\n if (typeof parseInt(value, 10) === \"number\") {\r\n precision = parseInt(value, 10);\r\n }\r\n };\r\n\r\n var fileId = \"00000000000000000000000000000000\";\r\n\r\n var getFileId = (API.__private__.getFileId = function() {\r\n return fileId;\r\n });\r\n\r\n var setFileId = (API.__private__.setFileId = function(value) {\r\n if (typeof value !== \"undefined\" && /^[a-fA-F0-9]{32}$/.test(value)) {\r\n fileId = value.toUpperCase();\r\n } else {\r\n fileId = fileId\r\n .split(\"\")\r\n .map(function() {\r\n return \"ABCDEF0123456789\".charAt(Math.floor(Math.random() * 16));\r\n })\r\n .join(\"\");\r\n }\r\n\r\n if (encryptionOptions !== null) {\r\n encryption = new PDFSecurity(\r\n encryptionOptions.userPermissions,\r\n encryptionOptions.userPassword,\r\n encryptionOptions.ownerPassword,\r\n fileId\r\n );\r\n }\r\n return fileId;\r\n });\r\n\r\n /**\r\n * @name setFileId\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {string} value GUID.\r\n * @returns {jsPDF}\r\n */\r\n API.setFileId = function(value) {\r\n setFileId(value);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name getFileId\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n *\r\n * @returns {string} GUID.\r\n */\r\n API.getFileId = function() {\r\n return getFileId();\r\n };\r\n\r\n var creationDate;\r\n\r\n var convertDateToPDFDate = (API.__private__.convertDateToPDFDate = function(\r\n parmDate\r\n ) {\r\n var result = \"\";\r\n var tzoffset = parmDate.getTimezoneOffset(),\r\n tzsign = tzoffset < 0 ? \"+\" : \"-\",\r\n tzhour = Math.floor(Math.abs(tzoffset / 60)),\r\n tzmin = Math.abs(tzoffset % 60),\r\n timeZoneString = [tzsign, padd2(tzhour), \"'\", padd2(tzmin), \"'\"].join(\"\");\r\n\r\n result = [\r\n \"D:\",\r\n parmDate.getFullYear(),\r\n padd2(parmDate.getMonth() + 1),\r\n padd2(parmDate.getDate()),\r\n padd2(parmDate.getHours()),\r\n padd2(parmDate.getMinutes()),\r\n padd2(parmDate.getSeconds()),\r\n timeZoneString\r\n ].join(\"\");\r\n return result;\r\n });\r\n\r\n var convertPDFDateToDate = (API.__private__.convertPDFDateToDate = function(\r\n parmPDFDate\r\n ) {\r\n var year = parseInt(parmPDFDate.substr(2, 4), 10);\r\n var month = parseInt(parmPDFDate.substr(6, 2), 10) - 1;\r\n var date = parseInt(parmPDFDate.substr(8, 2), 10);\r\n var hour = parseInt(parmPDFDate.substr(10, 2), 10);\r\n var minutes = parseInt(parmPDFDate.substr(12, 2), 10);\r\n var seconds = parseInt(parmPDFDate.substr(14, 2), 10);\r\n // var timeZoneHour = parseInt(parmPDFDate.substr(16, 2), 10);\r\n // var timeZoneMinutes = parseInt(parmPDFDate.substr(20, 2), 10);\r\n\r\n var resultingDate = new Date(year, month, date, hour, minutes, seconds, 0);\r\n return resultingDate;\r\n });\r\n\r\n var setCreationDate = (API.__private__.setCreationDate = function(date) {\r\n var tmpCreationDateString;\r\n var regexPDFCreationDate = /^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/;\r\n if (typeof date === \"undefined\") {\r\n date = new Date();\r\n }\r\n\r\n if (date instanceof Date) {\r\n tmpCreationDateString = convertDateToPDFDate(date);\r\n } else if (regexPDFCreationDate.test(date)) {\r\n tmpCreationDateString = date;\r\n } else {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");\r\n }\r\n creationDate = tmpCreationDateString;\r\n return creationDate;\r\n });\r\n\r\n var getCreationDate = (API.__private__.getCreationDate = function(type) {\r\n var result = creationDate;\r\n if (type === \"jsDate\") {\r\n result = convertPDFDateToDate(creationDate);\r\n }\r\n return result;\r\n });\r\n\r\n /**\r\n * @name setCreationDate\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {Object} date\r\n * @returns {jsPDF}\r\n */\r\n API.setCreationDate = function(date) {\r\n setCreationDate(date);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name getCreationDate\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {Object} type\r\n * @returns {Object}\r\n */\r\n API.getCreationDate = function(type) {\r\n return getCreationDate(type);\r\n };\r\n\r\n var padd2 = (API.__private__.padd2 = function(number) {\r\n return (\"0\" + parseInt(number)).slice(-2);\r\n });\r\n\r\n var padd2Hex = (API.__private__.padd2Hex = function(hexString) {\r\n hexString = hexString.toString();\r\n return (\"00\" + hexString).substr(hexString.length);\r\n });\r\n\r\n var objectNumber = 0; // 'n' Current object number\r\n var offsets = []; // List of offsets. Activated and reset by buildDocument(). Pupulated by various calls buildDocument makes.\r\n var content = [];\r\n var contentLength = 0;\r\n var additionalObjects = [];\r\n\r\n var pages = [];\r\n var currentPage;\r\n var hasCustomDestination = false;\r\n var outputDestination = content;\r\n\r\n var resetDocument = function() {\r\n //reset fields relevant for objectNumber generation and xref.\r\n objectNumber = 0;\r\n contentLength = 0;\r\n content = [];\r\n offsets = [];\r\n additionalObjects = [];\r\n\r\n rootDictionaryObjId = newObjectDeferred();\r\n resourceDictionaryObjId = newObjectDeferred();\r\n };\r\n\r\n API.__private__.setCustomOutputDestination = function(destination) {\r\n hasCustomDestination = true;\r\n outputDestination = destination;\r\n };\r\n var setOutputDestination = function(destination) {\r\n if (!hasCustomDestination) {\r\n outputDestination = destination;\r\n }\r\n };\r\n\r\n API.__private__.resetCustomOutputDestination = function() {\r\n hasCustomDestination = false;\r\n outputDestination = content;\r\n };\r\n\r\n var out = (API.__private__.out = function(string) {\r\n string = string.toString();\r\n contentLength += string.length + 1;\r\n outputDestination.push(string);\r\n\r\n return outputDestination;\r\n });\r\n\r\n var write = (API.__private__.write = function(value) {\r\n return out(\r\n arguments.length === 1\r\n ? value.toString()\r\n : Array.prototype.join.call(arguments, \" \")\r\n );\r\n });\r\n\r\n var getArrayBuffer = (API.__private__.getArrayBuffer = function(data) {\r\n var len = data.length,\r\n ab = new ArrayBuffer(len),\r\n u8 = new Uint8Array(ab);\r\n\r\n while (len--) u8[len] = data.charCodeAt(len);\r\n return ab;\r\n });\r\n\r\n var standardFonts = [\r\n [\"Helvetica\", \"helvetica\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-Bold\", \"helvetica\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-Oblique\", \"helvetica\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Helvetica-BoldOblique\", \"helvetica\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"Courier\", \"courier\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Courier-Bold\", \"courier\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Courier-Oblique\", \"courier\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Courier-BoldOblique\", \"courier\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"Times-Roman\", \"times\", \"normal\", \"WinAnsiEncoding\"],\r\n [\"Times-Bold\", \"times\", \"bold\", \"WinAnsiEncoding\"],\r\n [\"Times-Italic\", \"times\", \"italic\", \"WinAnsiEncoding\"],\r\n [\"Times-BoldItalic\", \"times\", \"bolditalic\", \"WinAnsiEncoding\"],\r\n [\"ZapfDingbats\", \"zapfdingbats\", \"normal\", null],\r\n [\"Symbol\", \"symbol\", \"normal\", null]\r\n ];\r\n\r\n API.__private__.getStandardFonts = function() {\r\n return standardFonts;\r\n };\r\n\r\n var activeFontSize = options.fontSize || 16;\r\n\r\n /**\r\n * Sets font size for upcoming text elements.\r\n *\r\n * @param {number} size Font size in points.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFontSize\r\n */\r\n API.__private__.setFontSize = API.setFontSize = function(size) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n activeFontSize = size / scaleFactor;\r\n } else {\r\n activeFontSize = size;\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the fontsize for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number}\r\n * @memberof jsPDF#\r\n * @name getFontSize\r\n */\r\n var getFontSize = (API.__private__.getFontSize = API.getFontSize = function() {\r\n if (apiMode === ApiMode.COMPAT) {\r\n return activeFontSize;\r\n } else {\r\n return activeFontSize * scaleFactor;\r\n }\r\n });\r\n\r\n var R2L = options.R2L || false;\r\n\r\n /**\r\n * Set value of R2L functionality.\r\n *\r\n * @param {boolean} value\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setR2L\r\n */\r\n API.__private__.setR2L = API.setR2L = function(value) {\r\n R2L = value;\r\n return this;\r\n };\r\n\r\n /**\r\n * Get value of R2L functionality.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {boolean} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name getR2L\r\n */\r\n API.__private__.getR2L = API.getR2L = function() {\r\n return R2L;\r\n };\r\n\r\n var zoomMode; // default: 1;\r\n\r\n var setZoomMode = (API.__private__.setZoomMode = function(zoom) {\r\n var validZoomModes = [\r\n undefined,\r\n null,\r\n \"fullwidth\",\r\n \"fullheight\",\r\n \"fullpage\",\r\n \"original\"\r\n ];\r\n\r\n if (/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(zoom)) {\r\n zoomMode = zoom;\r\n } else if (!isNaN(zoom)) {\r\n zoomMode = parseInt(zoom, 10);\r\n } else if (validZoomModes.indexOf(zoom) !== -1) {\r\n zoomMode = zoom;\r\n } else {\r\n throw new Error(\r\n 'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"' +\r\n zoom +\r\n '\" is not recognized.'\r\n );\r\n }\r\n });\r\n\r\n API.__private__.getZoomMode = function() {\r\n return zoomMode;\r\n };\r\n\r\n var pageMode; // default: 'UseOutlines';\r\n var setPageMode = (API.__private__.setPageMode = function(pmode) {\r\n var validPageModes = [\r\n undefined,\r\n null,\r\n \"UseNone\",\r\n \"UseOutlines\",\r\n \"UseThumbs\",\r\n \"FullScreen\"\r\n ];\r\n\r\n if (validPageModes.indexOf(pmode) == -1) {\r\n throw new Error(\r\n 'Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"' +\r\n pmode +\r\n '\" is not recognized.'\r\n );\r\n }\r\n pageMode = pmode;\r\n });\r\n\r\n API.__private__.getPageMode = function() {\r\n return pageMode;\r\n };\r\n\r\n var layoutMode; // default: 'continuous';\r\n var setLayoutMode = (API.__private__.setLayoutMode = function(layout) {\r\n var validLayoutModes = [\r\n undefined,\r\n null,\r\n \"continuous\",\r\n \"single\",\r\n \"twoleft\",\r\n \"tworight\",\r\n \"two\"\r\n ];\r\n\r\n if (validLayoutModes.indexOf(layout) == -1) {\r\n throw new Error(\r\n 'Layout mode must be one of continuous, single, twoleft, tworight. \"' +\r\n layout +\r\n '\" is not recognized.'\r\n );\r\n }\r\n layoutMode = layout;\r\n });\r\n\r\n API.__private__.getLayoutMode = function() {\r\n return layoutMode;\r\n };\r\n\r\n /**\r\n * Set the display mode options of the page like zoom and layout.\r\n *\r\n * @name setDisplayMode\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {integer|String} zoom You can pass an integer or percentage as\r\n * a string. 2 will scale the document up 2x, '200%' will scale up by the\r\n * same amount. You can also set it to 'fullwidth', 'fullheight',\r\n * 'fullpage', or 'original'.\r\n *\r\n * Only certain PDF readers support this, such as Adobe Acrobat.\r\n *\r\n * @param {string} layout Layout mode can be: 'continuous' - this is the\r\n * default continuous scroll. 'single' - the single page mode only shows one\r\n * page at a time. 'twoleft' - two column left mode, first page starts on\r\n * the left, and 'tworight' - pages are laid out in two columns, with the\r\n * first page on the right. This would be used for books.\r\n * @param {string} pmode 'UseOutlines' - it shows the\r\n * outline of the document on the left. 'UseThumbs' - shows thumbnails along\r\n * the left. 'FullScreen' - prompts the user to enter fullscreen mode.\r\n *\r\n * @returns {jsPDF}\r\n */\r\n API.__private__.setDisplayMode = API.setDisplayMode = function(\r\n zoom,\r\n layout,\r\n pmode\r\n ) {\r\n setZoomMode(zoom);\r\n setLayoutMode(layout);\r\n setPageMode(pmode);\r\n return this;\r\n };\r\n\r\n var documentProperties = {\r\n title: \"\",\r\n subject: \"\",\r\n author: \"\",\r\n keywords: \"\",\r\n creator: \"\"\r\n };\r\n\r\n API.__private__.getDocumentProperty = function(key) {\r\n if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");\r\n }\r\n return documentProperties[key];\r\n };\r\n\r\n API.__private__.getDocumentProperties = function() {\r\n return documentProperties;\r\n };\r\n\r\n /**\r\n * Adds a properties to the PDF document.\r\n *\r\n * @param {Object} A property_name-to-property_value object structure.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDocumentProperties\r\n */\r\n API.__private__.setDocumentProperties = API.setProperties = API.setDocumentProperties = function(\r\n properties\r\n ) {\r\n // copying only those properties we can render.\r\n for (var property in documentProperties) {\r\n if (documentProperties.hasOwnProperty(property) && properties[property]) {\r\n documentProperties[property] = properties[property];\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n API.__private__.setDocumentProperty = function(key, value) {\r\n if (Object.keys(documentProperties).indexOf(key) === -1) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");\r\n }\r\n return (documentProperties[key] = value);\r\n };\r\n\r\n var fonts = {}; // collection of font objects, where key is fontKey - a dynamically created label for a given font.\r\n var fontmap = {}; // mapping structure fontName > fontStyle > font key - performance layer. See addFont()\r\n var activeFontKey; // will be string representing the KEY of the font as combination of fontName + fontStyle\r\n var fontStateStack = []; //\r\n var patterns = {}; // collection of pattern objects\r\n var patternMap = {}; // see fonts\r\n var gStates = {}; // collection of graphic state objects\r\n var gStatesMap = {}; // see fonts\r\n var activeGState = null;\r\n var scaleFactor; // Scale factor\r\n var page = 0;\r\n var pagesContext = [];\r\n var events = new PubSub(API);\r\n var hotfixes = options.hotfixes || [];\r\n\r\n var renderTargets = {};\r\n var renderTargetMap = {};\r\n var renderTargetStack = [];\r\n var pageX;\r\n var pageY;\r\n var pageMatrix; // only used for FormObjects\r\n\r\n /**\r\n * A matrix object for 2D homogenous transformations:
    \r\n * | a b 0 |
    \r\n * | c d 0 |
    \r\n * | e f 1 |
    \r\n * pdf multiplies matrices righthand: v' = v x m1 x m2 x ...\r\n *\r\n * @class\r\n * @name Matrix\r\n * @param {number} sx\r\n * @param {number} shy\r\n * @param {number} shx\r\n * @param {number} sy\r\n * @param {number} tx\r\n * @param {number} ty\r\n * @constructor\r\n */\r\n var Matrix = function(sx, shy, shx, sy, tx, ty) {\r\n if (!(this instanceof Matrix)) {\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n }\r\n\r\n if (isNaN(sx)) sx = 1;\r\n if (isNaN(shy)) shy = 0;\r\n if (isNaN(shx)) shx = 0;\r\n if (isNaN(sy)) sy = 1;\r\n if (isNaN(tx)) tx = 0;\r\n if (isNaN(ty)) ty = 0;\r\n\r\n this._matrix = [sx, shy, shx, sy, tx, ty];\r\n };\r\n\r\n /**\r\n * @name sx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"sx\", {\r\n get: function() {\r\n return this._matrix[0];\r\n },\r\n set: function(value) {\r\n this._matrix[0] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name shy\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"shy\", {\r\n get: function() {\r\n return this._matrix[1];\r\n },\r\n set: function(value) {\r\n this._matrix[1] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name shx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"shx\", {\r\n get: function() {\r\n return this._matrix[2];\r\n },\r\n set: function(value) {\r\n this._matrix[2] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name sy\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"sy\", {\r\n get: function() {\r\n return this._matrix[3];\r\n },\r\n set: function(value) {\r\n this._matrix[3] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name tx\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"tx\", {\r\n get: function() {\r\n return this._matrix[4];\r\n },\r\n set: function(value) {\r\n this._matrix[4] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ty\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"ty\", {\r\n get: function() {\r\n return this._matrix[5];\r\n },\r\n set: function(value) {\r\n this._matrix[5] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"a\", {\r\n get: function() {\r\n return this._matrix[0];\r\n },\r\n set: function(value) {\r\n this._matrix[0] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"b\", {\r\n get: function() {\r\n return this._matrix[1];\r\n },\r\n set: function(value) {\r\n this._matrix[1] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"c\", {\r\n get: function() {\r\n return this._matrix[2];\r\n },\r\n set: function(value) {\r\n this._matrix[2] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"d\", {\r\n get: function() {\r\n return this._matrix[3];\r\n },\r\n set: function(value) {\r\n this._matrix[3] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"e\", {\r\n get: function() {\r\n return this._matrix[4];\r\n },\r\n set: function(value) {\r\n this._matrix[4] = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(Matrix.prototype, \"f\", {\r\n get: function() {\r\n return this._matrix[5];\r\n },\r\n set: function(value) {\r\n this._matrix[5] = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name rotation\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"rotation\", {\r\n get: function() {\r\n return Math.atan2(this.shx, this.sx);\r\n }\r\n });\r\n\r\n /**\r\n * @name scaleX\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"scaleX\", {\r\n get: function() {\r\n return this.decompose().scale.sx;\r\n }\r\n });\r\n\r\n /**\r\n * @name scaleY\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"scaleY\", {\r\n get: function() {\r\n return this.decompose().scale.sy;\r\n }\r\n });\r\n\r\n /**\r\n * @name isIdentity\r\n * @memberof Matrix#\r\n */\r\n Object.defineProperty(Matrix.prototype, \"isIdentity\", {\r\n get: function() {\r\n if (this.sx !== 1) {\r\n return false;\r\n }\r\n if (this.shy !== 0) {\r\n return false;\r\n }\r\n if (this.shx !== 0) {\r\n return false;\r\n }\r\n if (this.sy !== 1) {\r\n return false;\r\n }\r\n if (this.tx !== 0) {\r\n return false;\r\n }\r\n if (this.ty !== 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n /**\r\n * Join the Matrix Values to a String\r\n *\r\n * @function join\r\n * @param {string} separator Specifies a string to separate each pair of adjacent elements of the array. The separator is converted to a string if necessary. If omitted, the array elements are separated with a comma (\",\"). If separator is an empty string, all elements are joined without any characters in between them.\r\n * @returns {string} A string with all array elements joined.\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.join = function(separator) {\r\n return [this.sx, this.shy, this.shx, this.sy, this.tx, this.ty]\r\n .map(hpf)\r\n .join(separator);\r\n };\r\n\r\n /**\r\n * Multiply the matrix with given Matrix\r\n *\r\n * @function multiply\r\n * @param matrix\r\n * @returns {Matrix}\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.multiply = function(matrix) {\r\n var sx = matrix.sx * this.sx + matrix.shy * this.shx;\r\n var shy = matrix.sx * this.shy + matrix.shy * this.sy;\r\n var shx = matrix.shx * this.sx + matrix.sy * this.shx;\r\n var sy = matrix.shx * this.shy + matrix.sy * this.sy;\r\n var tx = matrix.tx * this.sx + matrix.ty * this.shx + this.tx;\r\n var ty = matrix.tx * this.shy + matrix.ty * this.sy + this.ty;\r\n\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n };\r\n\r\n /**\r\n * @function decompose\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.decompose = function() {\r\n var a = this.sx;\r\n var b = this.shy;\r\n var c = this.shx;\r\n var d = this.sy;\r\n var e = this.tx;\r\n var f = this.ty;\r\n\r\n var scaleX = Math.sqrt(a * a + b * b);\r\n a /= scaleX;\r\n b /= scaleX;\r\n\r\n var shear = a * c + b * d;\r\n c -= a * shear;\r\n d -= b * shear;\r\n\r\n var scaleY = Math.sqrt(c * c + d * d);\r\n c /= scaleY;\r\n d /= scaleY;\r\n shear /= scaleY;\r\n\r\n if (a * d < b * c) {\r\n a = -a;\r\n b = -b;\r\n shear = -shear;\r\n scaleX = -scaleX;\r\n }\r\n\r\n return {\r\n scale: new Matrix(scaleX, 0, 0, scaleY, 0, 0),\r\n translate: new Matrix(1, 0, 0, 1, e, f),\r\n rotate: new Matrix(a, b, -b, a, 0, 0),\r\n skew: new Matrix(1, 0, shear, 1, 0, 0)\r\n };\r\n };\r\n\r\n /**\r\n * @function toString\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.toString = function(parmPrecision) {\r\n return this.join(\" \");\r\n };\r\n\r\n /**\r\n * @function inversed\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.inversed = function() {\r\n var a = this.sx,\r\n b = this.shy,\r\n c = this.shx,\r\n d = this.sy,\r\n e = this.tx,\r\n f = this.ty;\r\n\r\n var quot = 1 / (a * d - b * c);\r\n\r\n var aInv = d * quot;\r\n var bInv = -b * quot;\r\n var cInv = -c * quot;\r\n var dInv = a * quot;\r\n var eInv = -aInv * e - cInv * f;\r\n var fInv = -bInv * e - dInv * f;\r\n\r\n return new Matrix(aInv, bInv, cInv, dInv, eInv, fInv);\r\n };\r\n\r\n /**\r\n * @function applyToPoint\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.applyToPoint = function(pt) {\r\n var x = pt.x * this.sx + pt.y * this.shx + this.tx;\r\n var y = pt.x * this.shy + pt.y * this.sy + this.ty;\r\n return new Point(x, y);\r\n };\r\n\r\n /**\r\n * @function applyToRectangle\r\n * @memberof Matrix#\r\n */\r\n Matrix.prototype.applyToRectangle = function(rect) {\r\n var pt1 = this.applyToPoint(rect);\r\n var pt2 = this.applyToPoint(new Point(rect.x + rect.w, rect.y + rect.h));\r\n return new Rectangle(pt1.x, pt1.y, pt2.x - pt1.x, pt2.y - pt1.y);\r\n };\r\n\r\n /**\r\n * Clone the Matrix\r\n *\r\n * @function clone\r\n * @memberof Matrix#\r\n * @name clone\r\n * @instance\r\n */\r\n Matrix.prototype.clone = function() {\r\n var sx = this.sx;\r\n var shy = this.shy;\r\n var shx = this.shx;\r\n var sy = this.sy;\r\n var tx = this.tx;\r\n var ty = this.ty;\r\n\r\n return new Matrix(sx, shy, shx, sy, tx, ty);\r\n };\r\n\r\n API.Matrix = Matrix;\r\n\r\n /**\r\n * Multiplies two matrices. (see {@link Matrix})\r\n * @param {Matrix} m1\r\n * @param {Matrix} m2\r\n * @memberof jsPDF#\r\n * @name matrixMult\r\n */\r\n var matrixMult = (API.matrixMult = function(m1, m2) {\r\n return m2.multiply(m1);\r\n });\r\n\r\n /**\r\n * The identity matrix (equivalent to new Matrix(1, 0, 0, 1, 0, 0)).\r\n * @type {Matrix}\r\n * @memberof! jsPDF#\r\n * @name identityMatrix\r\n */\r\n var identityMatrix = new Matrix(1, 0, 0, 1, 0, 0);\r\n API.unitMatrix = API.identityMatrix = identityMatrix;\r\n\r\n /**\r\n * Adds a new pattern for later use.\r\n * @param {String} key The key by it can be referenced later. The keys must be unique!\r\n * @param {API.Pattern} pattern The pattern\r\n */\r\n var addPattern = function(key, pattern) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (patternMap[key]) return;\r\n\r\n var prefix = pattern instanceof ShadingPattern ? \"Sh\" : \"P\";\r\n var patternKey = prefix + (Object.keys(patterns).length + 1).toString(10);\r\n pattern.id = patternKey;\r\n\r\n patternMap[key] = patternKey;\r\n patterns[patternKey] = pattern;\r\n\r\n events.publish(\"addPattern\", pattern);\r\n };\r\n\r\n /**\r\n * A pattern describing a shading pattern.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {String} type One of \"axial\" or \"radial\"\r\n * @param {Array} coords Either [x1, y1, x2, y2] for \"axial\" type describing the two interpolation points\r\n * or [x1, y1, r, x2, y2, r2] for \"radial\" describing inner and the outer circle.\r\n * @param {Array} colors An array of objects with the fields \"offset\" and \"color\". \"offset\" describes\r\n * the offset in parameter space [0, 1]. \"color\" is an array of length 3 describing RGB values in [0, 255].\r\n * @param {GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n * and the use coordinate system (optional).\r\n * @constructor\r\n * @extends API.Pattern\r\n */\r\n API.ShadingPattern = ShadingPattern;\r\n\r\n /**\r\n * A PDF Tiling pattern.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {Array.} boundingBox The bounding box at which one pattern cell gets clipped.\r\n * @param {Number} xStep Horizontal spacing between pattern cells.\r\n * @param {Number} yStep Vertical spacing between pattern cells.\r\n * @param {API.GState=} gState An additional graphics state that gets applied to the pattern (optional).\r\n * @param {Matrix=} matrix A matrix that describes the transformation between the pattern coordinate system\r\n * and the use coordinate system (optional).\r\n * @constructor\r\n * @extends API.Pattern\r\n */\r\n API.TilingPattern = TilingPattern;\r\n\r\n /**\r\n * Adds a new {@link API.ShadingPattern} for later use. Only available in \"advanced\" API mode.\r\n * @param {String} key\r\n * @param {Pattern} pattern\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name addPattern\r\n */\r\n API.addShadingPattern = function(key, pattern) {\r\n advancedApiModeTrap(\"addShadingPattern()\");\r\n\r\n addPattern(key, pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Begins a new tiling pattern. All subsequent render calls are drawn to this pattern until {@link API.endTilingPattern}\r\n * gets called. Only available in \"advanced\" API mode.\r\n * @param {API.Pattern} pattern\r\n * @memberof jsPDF#\r\n * @name beginTilingPattern\r\n */\r\n API.beginTilingPattern = function(pattern) {\r\n advancedApiModeTrap(\"beginTilingPattern()\");\r\n\r\n beginNewRenderTarget(\r\n pattern.boundingBox[0],\r\n pattern.boundingBox[1],\r\n pattern.boundingBox[2] - pattern.boundingBox[0],\r\n pattern.boundingBox[3] - pattern.boundingBox[1],\r\n pattern.matrix\r\n );\r\n };\r\n\r\n /**\r\n * Ends a tiling pattern and sets the render target to the one active before {@link API.beginTilingPattern} has been called.\r\n *\r\n * Only available in \"advanced\" API mode.\r\n *\r\n * @param {string} key A unique key that is used to reference this pattern at later use.\r\n * @param {API.Pattern} pattern The pattern to end.\r\n * @memberof jsPDF#\r\n * @name endTilingPattern\r\n */\r\n API.endTilingPattern = function(key, pattern) {\r\n advancedApiModeTrap(\"endTilingPattern()\");\r\n\r\n // retrieve the stream\r\n pattern.stream = pages[currentPage].join(\"\\n\");\r\n\r\n addPattern(key, pattern);\r\n\r\n events.publish(\"endTilingPattern\", pattern);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n var newObject = (API.__private__.newObject = function() {\r\n var oid = newObjectDeferred();\r\n newObjectDeferredBegin(oid, true);\r\n return oid;\r\n });\r\n\r\n // Does not output the object. The caller must call newObjectDeferredBegin(oid) before outputing any data\r\n var newObjectDeferred = (API.__private__.newObjectDeferred = function() {\r\n objectNumber++;\r\n offsets[objectNumber] = function() {\r\n return contentLength;\r\n };\r\n return objectNumber;\r\n });\r\n\r\n var newObjectDeferredBegin = function(oid, doOutput) {\r\n doOutput = typeof doOutput === \"boolean\" ? doOutput : false;\r\n offsets[oid] = contentLength;\r\n if (doOutput) {\r\n out(oid + \" 0 obj\");\r\n }\r\n return oid;\r\n };\r\n // Does not output the object until after the pages have been output.\r\n // Returns an object containing the objectId and content.\r\n // All pages have been added so the object ID can be estimated to start right after.\r\n // This does not modify the current objectNumber; It must be updated after the newObjects are output.\r\n var newAdditionalObject = (API.__private__.newAdditionalObject = function() {\r\n var objId = newObjectDeferred();\r\n var obj = {\r\n objId: objId,\r\n content: \"\"\r\n };\r\n additionalObjects.push(obj);\r\n return obj;\r\n });\r\n\r\n var rootDictionaryObjId = newObjectDeferred();\r\n var resourceDictionaryObjId = newObjectDeferred();\r\n\r\n /////////////////////\r\n // Private functions\r\n /////////////////////\r\n\r\n var decodeColorString = (API.__private__.decodeColorString = function(color) {\r\n var colorEncoded = color.split(\" \");\r\n if (\r\n colorEncoded.length === 2 &&\r\n (colorEncoded[1] === \"g\" || colorEncoded[1] === \"G\")\r\n ) {\r\n // convert grayscale value to rgb so that it can be converted to hex for consistency\r\n var floatVal = parseFloat(colorEncoded[0]);\r\n colorEncoded = [floatVal, floatVal, floatVal, \"r\"];\r\n } else if (\r\n colorEncoded.length === 5 &&\r\n (colorEncoded[4] === \"k\" || colorEncoded[4] === \"K\")\r\n ) {\r\n // convert CMYK values to rbg so that it can be converted to hex for consistency\r\n var red = (1.0 - colorEncoded[0]) * (1.0 - colorEncoded[3]);\r\n var green = (1.0 - colorEncoded[1]) * (1.0 - colorEncoded[3]);\r\n var blue = (1.0 - colorEncoded[2]) * (1.0 - colorEncoded[3]);\r\n\r\n colorEncoded = [red, green, blue, \"r\"];\r\n }\r\n var colorAsRGB = \"#\";\r\n for (var i = 0; i < 3; i++) {\r\n colorAsRGB += (\r\n \"0\" + Math.floor(parseFloat(colorEncoded[i]) * 255).toString(16)\r\n ).slice(-2);\r\n }\r\n return colorAsRGB;\r\n });\r\n\r\n var encodeColorString = (API.__private__.encodeColorString = function(\r\n options\r\n ) {\r\n var color;\r\n\r\n if (typeof options === \"string\") {\r\n options = {\r\n ch1: options\r\n };\r\n }\r\n var ch1 = options.ch1;\r\n var ch2 = options.ch2;\r\n var ch3 = options.ch3;\r\n var ch4 = options.ch4;\r\n var letterArray =\r\n options.pdfColorType === \"draw\" ? [\"G\", \"RG\", \"K\"] : [\"g\", \"rg\", \"k\"];\r\n\r\n if (typeof ch1 === \"string\" && ch1.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(ch1);\r\n if (rgbColor.ok) {\r\n ch1 = rgbColor.toHex();\r\n } else if (!/^\\d*\\.?\\d*$/.test(ch1)) {\r\n throw new Error(\r\n 'Invalid color \"' + ch1 + '\" passed to jsPDF.encodeColorString.'\r\n );\r\n }\r\n }\r\n //convert short rgb to long form\r\n if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{3}$/.test(ch1)) {\r\n ch1 = \"#\" + ch1[1] + ch1[1] + ch1[2] + ch1[2] + ch1[3] + ch1[3];\r\n }\r\n\r\n if (typeof ch1 === \"string\" && /^#[0-9A-Fa-f]{6}$/.test(ch1)) {\r\n var hex = parseInt(ch1.substr(1), 16);\r\n ch1 = (hex >> 16) & 255;\r\n ch2 = (hex >> 8) & 255;\r\n ch3 = hex & 255;\r\n }\r\n\r\n if (\r\n typeof ch2 === \"undefined\" ||\r\n (typeof ch4 === \"undefined\" && ch1 === ch2 && ch2 === ch3)\r\n ) {\r\n // Gray color space.\r\n if (typeof ch1 === \"string\") {\r\n color = ch1 + \" \" + letterArray[0];\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = f2(ch1 / 255) + \" \" + letterArray[0];\r\n break;\r\n case 3:\r\n default:\r\n color = f3(ch1 / 255) + \" \" + letterArray[0];\r\n }\r\n }\r\n } else if (typeof ch4 === \"undefined\" || typeof ch4 === \"object\") {\r\n // assume RGBA\r\n if (ch4 && !isNaN(ch4.a)) {\r\n //TODO Implement transparency.\r\n //WORKAROUND use white for now, if transparent, otherwise handle as rgb\r\n if (ch4.a === 0) {\r\n color = [\"1.\", \"1.\", \"1.\", letterArray[1]].join(\" \");\r\n return color;\r\n }\r\n }\r\n // assume RGB\r\n if (typeof ch1 === \"string\") {\r\n color = [ch1, ch2, ch3, letterArray[1]].join(\" \");\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = [\r\n f2(ch1 / 255),\r\n f2(ch2 / 255),\r\n f2(ch3 / 255),\r\n letterArray[1]\r\n ].join(\" \");\r\n break;\r\n default:\r\n case 3:\r\n color = [\r\n f3(ch1 / 255),\r\n f3(ch2 / 255),\r\n f3(ch3 / 255),\r\n letterArray[1]\r\n ].join(\" \");\r\n }\r\n }\r\n } else {\r\n // assume CMYK\r\n if (typeof ch1 === \"string\") {\r\n color = [ch1, ch2, ch3, ch4, letterArray[2]].join(\" \");\r\n } else {\r\n switch (options.precision) {\r\n case 2:\r\n color = [f2(ch1), f2(ch2), f2(ch3), f2(ch4), letterArray[2]].join(\r\n \" \"\r\n );\r\n break;\r\n case 3:\r\n default:\r\n color = [f3(ch1), f3(ch2), f3(ch3), f3(ch4), letterArray[2]].join(\r\n \" \"\r\n );\r\n }\r\n }\r\n }\r\n return color;\r\n });\r\n\r\n var getFilters = (API.__private__.getFilters = function() {\r\n return filters;\r\n });\r\n\r\n var putStream = (API.__private__.putStream = function(options) {\r\n options = options || {};\r\n var data = options.data || \"\";\r\n var filters = options.filters || getFilters();\r\n var alreadyAppliedFilters = options.alreadyAppliedFilters || [];\r\n var addLength1 = options.addLength1 || false;\r\n var valueOfLength1 = data.length;\r\n var objectId = options.objectId;\r\n var encryptor = function(data) {\r\n return data;\r\n };\r\n if (encryptionOptions !== null && typeof objectId == \"undefined\") {\r\n throw new Error(\r\n \"ObjectId must be passed to putStream for file encryption\"\r\n );\r\n }\r\n if (encryptionOptions !== null) {\r\n encryptor = encryption.encryptor(objectId, 0);\r\n }\r\n\r\n var processedData = {};\r\n if (filters === true) {\r\n filters = [\"FlateEncode\"];\r\n }\r\n var keyValues = options.additionalKeyValues || [];\r\n if (typeof jsPDF.API.processDataByFilters !== \"undefined\") {\r\n processedData = jsPDF.API.processDataByFilters(data, filters);\r\n } else {\r\n processedData = { data: data, reverseChain: [] };\r\n }\r\n var filterAsString =\r\n processedData.reverseChain +\r\n (Array.isArray(alreadyAppliedFilters)\r\n ? alreadyAppliedFilters.join(\" \")\r\n : alreadyAppliedFilters.toString());\r\n\r\n if (processedData.data.length !== 0) {\r\n keyValues.push({\r\n key: \"Length\",\r\n value: processedData.data.length\r\n });\r\n if (addLength1 === true) {\r\n keyValues.push({\r\n key: \"Length1\",\r\n value: valueOfLength1\r\n });\r\n }\r\n }\r\n\r\n if (filterAsString.length != 0) {\r\n if (filterAsString.split(\"/\").length - 1 === 1) {\r\n keyValues.push({\r\n key: \"Filter\",\r\n value: filterAsString\r\n });\r\n } else {\r\n keyValues.push({\r\n key: \"Filter\",\r\n value: \"[\" + filterAsString + \"]\"\r\n });\r\n\r\n for (var j = 0; j < keyValues.length; j += 1) {\r\n if (keyValues[j].key === \"DecodeParms\") {\r\n var decodeParmsArray = [];\r\n\r\n for (\r\n var i = 0;\r\n i < processedData.reverseChain.split(\"/\").length - 1;\r\n i += 1\r\n ) {\r\n decodeParmsArray.push(\"null\");\r\n }\r\n\r\n decodeParmsArray.push(keyValues[j].value);\r\n keyValues[j].value = \"[\" + decodeParmsArray.join(\" \") + \"]\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n out(\"<<\");\r\n for (var k = 0; k < keyValues.length; k++) {\r\n out(\"/\" + keyValues[k].key + \" \" + keyValues[k].value);\r\n }\r\n out(\">>\");\r\n if (processedData.data.length !== 0) {\r\n out(\"stream\");\r\n out(encryptor(processedData.data));\r\n out(\"endstream\");\r\n }\r\n });\r\n\r\n var putPage = (API.__private__.putPage = function(page) {\r\n var pageNumber = page.number;\r\n var data = page.data;\r\n var pageObjectNumber = page.objId;\r\n var pageContentsObjId = page.contentsObjId;\r\n\r\n newObjectDeferredBegin(pageObjectNumber, true);\r\n out(\"<>\");\r\n out(\"endobj\");\r\n // Page content\r\n var pageContent = data.join(\"\\n\");\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n // if the user forgot to switch back to COMPAT mode, we must balance the graphics stack again\r\n pageContent += \"\\nQ\";\r\n }\r\n\r\n newObjectDeferredBegin(pageContentsObjId, true);\r\n putStream({\r\n data: pageContent,\r\n filters: getFilters(),\r\n objectId: pageContentsObjId\r\n });\r\n out(\"endobj\");\r\n return pageObjectNumber;\r\n });\r\n\r\n var putPages = (API.__private__.putPages = function() {\r\n var n,\r\n i,\r\n pageObjectNumbers = [];\r\n\r\n for (n = 1; n <= page; n++) {\r\n pagesContext[n].objId = newObjectDeferred();\r\n pagesContext[n].contentsObjId = newObjectDeferred();\r\n }\r\n\r\n for (n = 1; n <= page; n++) {\r\n pageObjectNumbers.push(\r\n putPage({\r\n number: n,\r\n data: pages[n],\r\n objId: pagesContext[n].objId,\r\n contentsObjId: pagesContext[n].contentsObjId,\r\n mediaBox: pagesContext[n].mediaBox,\r\n cropBox: pagesContext[n].cropBox,\r\n bleedBox: pagesContext[n].bleedBox,\r\n trimBox: pagesContext[n].trimBox,\r\n artBox: pagesContext[n].artBox,\r\n userUnit: pagesContext[n].userUnit,\r\n rootDictionaryObjId: rootDictionaryObjId,\r\n resourceDictionaryObjId: resourceDictionaryObjId\r\n })\r\n );\r\n }\r\n newObjectDeferredBegin(rootDictionaryObjId, true);\r\n out(\"<>\");\r\n out(\"endobj\");\r\n events.publish(\"postPutPages\");\r\n });\r\n\r\n var putFont = function(font) {\r\n events.publish(\"putFont\", {\r\n font: font,\r\n out: out,\r\n newObject: newObject,\r\n putStream: putStream\r\n });\r\n\r\n if (font.isAlreadyPutted !== true) {\r\n font.objectNumber = newObject();\r\n out(\"<<\");\r\n out(\"/Type /Font\");\r\n out(\"/BaseFont /\" + toPDFName(font.postScriptName));\r\n out(\"/Subtype /Type1\");\r\n if (typeof font.encoding === \"string\") {\r\n out(\"/Encoding /\" + font.encoding);\r\n }\r\n out(\"/FirstChar 32\");\r\n out(\"/LastChar 255\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n }\r\n };\r\n\r\n var putFonts = function() {\r\n for (var fontKey in fonts) {\r\n if (fonts.hasOwnProperty(fontKey)) {\r\n if (\r\n putOnlyUsedFonts === false ||\r\n (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n ) {\r\n putFont(fonts[fontKey]);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var putXObject = function(xObject) {\r\n xObject.objectNumber = newObject();\r\n\r\n var options = [];\r\n options.push({ key: \"Type\", value: \"/XObject\" });\r\n options.push({ key: \"Subtype\", value: \"/Form\" });\r\n options.push({\r\n key: \"BBox\",\r\n value:\r\n \"[\" +\r\n [\r\n hpf(xObject.x),\r\n hpf(xObject.y),\r\n hpf(xObject.x + xObject.width),\r\n hpf(xObject.y + xObject.height)\r\n ].join(\" \") +\r\n \"]\"\r\n });\r\n options.push({\r\n key: \"Matrix\",\r\n value: \"[\" + xObject.matrix.toString() + \"]\"\r\n });\r\n // TODO: /Resources\r\n\r\n var stream = xObject.pages[1].join(\"\\n\");\r\n putStream({\r\n data: stream,\r\n additionalKeyValues: options,\r\n objectId: xObject.objectNumber\r\n });\r\n out(\"endobj\");\r\n };\r\n\r\n var putXObjects = function() {\r\n for (var xObjectKey in renderTargets) {\r\n if (renderTargets.hasOwnProperty(xObjectKey)) {\r\n putXObject(renderTargets[xObjectKey]);\r\n }\r\n }\r\n };\r\n\r\n var interpolateAndEncodeRGBStream = function(colors, numberSamples) {\r\n var tValues = [];\r\n var t;\r\n var dT = 1.0 / (numberSamples - 1);\r\n for (t = 0.0; t < 1.0; t += dT) {\r\n tValues.push(t);\r\n }\r\n tValues.push(1.0);\r\n // add first and last control point if not present\r\n if (colors[0].offset != 0.0) {\r\n var c0 = {\r\n offset: 0.0,\r\n color: colors[0].color\r\n };\r\n colors.unshift(c0);\r\n }\r\n if (colors[colors.length - 1].offset != 1.0) {\r\n var c1 = {\r\n offset: 1.0,\r\n color: colors[colors.length - 1].color\r\n };\r\n colors.push(c1);\r\n }\r\n var out = \"\";\r\n var index = 0;\r\n\r\n for (var i = 0; i < tValues.length; i++) {\r\n t = tValues[i];\r\n while (t > colors[index + 1].offset) index++;\r\n var a = colors[index].offset;\r\n var b = colors[index + 1].offset;\r\n var d = (t - a) / (b - a);\r\n\r\n var aColor = colors[index].color;\r\n var bColor = colors[index + 1].color;\r\n\r\n out +=\r\n padd2Hex(Math.round((1 - d) * aColor[0] + d * bColor[0]).toString(16)) +\r\n padd2Hex(Math.round((1 - d) * aColor[1] + d * bColor[1]).toString(16)) +\r\n padd2Hex(Math.round((1 - d) * aColor[2] + d * bColor[2]).toString(16));\r\n }\r\n return out.trim();\r\n };\r\n\r\n var putShadingPattern = function(pattern, numberSamples) {\r\n /*\r\n Axial patterns shade between the two points specified in coords, radial patterns between the inner\r\n and outer circle.\r\n The user can specify an array (colors) that maps t-Values in [0, 1] to RGB colors. These are now\r\n interpolated to equidistant samples and written to pdf as a sample (type 0) function.\r\n */\r\n // The number of color samples that should be used to describe the shading.\r\n // The higher, the more accurate the gradient will be.\r\n numberSamples || (numberSamples = 21);\r\n var funcObjectNumber = newObject();\r\n var stream = interpolateAndEncodeRGBStream(pattern.colors, numberSamples);\r\n\r\n var options = [];\r\n options.push({ key: \"FunctionType\", value: \"0\" });\r\n options.push({ key: \"Domain\", value: \"[0.0 1.0]\" });\r\n options.push({ key: \"Size\", value: \"[\" + numberSamples + \"]\" });\r\n options.push({ key: \"BitsPerSample\", value: \"8\" });\r\n options.push({ key: \"Range\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n options.push({ key: \"Decode\", value: \"[0.0 1.0 0.0 1.0 0.0 1.0]\" });\r\n\r\n putStream({\r\n data: stream,\r\n additionalKeyValues: options,\r\n alreadyAppliedFilters: [\"/ASCIIHexDecode\"],\r\n objectId: funcObjectNumber\r\n });\r\n out(\"endobj\");\r\n\r\n pattern.objectNumber = newObject();\r\n out(\"<< /ShadingType \" + pattern.type);\r\n out(\"/ColorSpace /DeviceRGB\");\r\n var coords =\r\n \"/Coords [\" +\r\n hpf(parseFloat(pattern.coords[0])) +\r\n \" \" + // x1\r\n hpf(parseFloat(pattern.coords[1])) +\r\n \" \"; // y1\r\n if (pattern.type === 2) {\r\n // axial\r\n coords +=\r\n hpf(parseFloat(pattern.coords[2])) +\r\n \" \" + // x2\r\n hpf(parseFloat(pattern.coords[3])); // y2\r\n } else {\r\n // radial\r\n coords +=\r\n hpf(parseFloat(pattern.coords[2])) +\r\n \" \" + // r1\r\n hpf(parseFloat(pattern.coords[3])) +\r\n \" \" + // x2\r\n hpf(parseFloat(pattern.coords[4])) +\r\n \" \" + // y2\r\n hpf(parseFloat(pattern.coords[5])); // r2\r\n }\r\n coords += \"]\";\r\n out(coords);\r\n\r\n if (pattern.matrix) {\r\n out(\"/Matrix [\" + pattern.matrix.toString() + \"]\");\r\n }\r\n out(\"/Function \" + funcObjectNumber + \" 0 R\");\r\n out(\"/Extend [true true]\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putTilingPattern = function(pattern, deferredResourceDictionaryIds) {\r\n var resourcesObjectId = newObjectDeferred();\r\n var patternObjectId = newObject();\r\n\r\n deferredResourceDictionaryIds.push({\r\n resourcesOid: resourcesObjectId,\r\n objectOid: patternObjectId\r\n });\r\n\r\n pattern.objectNumber = patternObjectId;\r\n var options = [];\r\n options.push({ key: \"Type\", value: \"/Pattern\" });\r\n options.push({ key: \"PatternType\", value: \"1\" }); // tiling pattern\r\n options.push({ key: \"PaintType\", value: \"1\" }); // colored tiling pattern\r\n options.push({ key: \"TilingType\", value: \"1\" }); // constant spacing\r\n options.push({\r\n key: \"BBox\",\r\n value: \"[\" + pattern.boundingBox.map(hpf).join(\" \") + \"]\"\r\n });\r\n options.push({ key: \"XStep\", value: hpf(pattern.xStep) });\r\n options.push({ key: \"YStep\", value: hpf(pattern.yStep) });\r\n options.push({ key: \"Resources\", value: resourcesObjectId + \" 0 R\" });\r\n if (pattern.matrix) {\r\n options.push({\r\n key: \"Matrix\",\r\n value: \"[\" + pattern.matrix.toString() + \"]\"\r\n });\r\n }\r\n\r\n putStream({\r\n data: pattern.stream,\r\n additionalKeyValues: options,\r\n objectId: pattern.objectNumber\r\n });\r\n out(\"endobj\");\r\n };\r\n\r\n var putPatterns = function(deferredResourceDictionaryIds) {\r\n var patternKey;\r\n for (patternKey in patterns) {\r\n if (patterns.hasOwnProperty(patternKey)) {\r\n if (patterns[patternKey] instanceof ShadingPattern) {\r\n putShadingPattern(patterns[patternKey]);\r\n } else if (patterns[patternKey] instanceof TilingPattern) {\r\n putTilingPattern(patterns[patternKey], deferredResourceDictionaryIds);\r\n }\r\n }\r\n }\r\n };\r\n\r\n var putGState = function(gState) {\r\n gState.objectNumber = newObject();\r\n out(\"<<\");\r\n for (var p in gState) {\r\n switch (p) {\r\n case \"opacity\":\r\n out(\"/ca \" + f2(gState[p]));\r\n break;\r\n case \"stroke-opacity\":\r\n out(\"/CA \" + f2(gState[p]));\r\n break;\r\n }\r\n }\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putGStates = function() {\r\n var gStateKey;\r\n for (gStateKey in gStates) {\r\n if (gStates.hasOwnProperty(gStateKey)) {\r\n putGState(gStates[gStateKey]);\r\n }\r\n }\r\n };\r\n\r\n var putXobjectDict = function() {\r\n out(\"/XObject <<\");\r\n for (var xObjectKey in renderTargets) {\r\n if (\r\n renderTargets.hasOwnProperty(xObjectKey) &&\r\n renderTargets[xObjectKey].objectNumber >= 0\r\n ) {\r\n out(\r\n \"/\" +\r\n xObjectKey +\r\n \" \" +\r\n renderTargets[xObjectKey].objectNumber +\r\n \" 0 R\"\r\n );\r\n }\r\n }\r\n\r\n // Loop through images, or other data objects\r\n events.publish(\"putXobjectDict\");\r\n out(\">>\");\r\n };\r\n\r\n var putEncryptionDict = function() {\r\n encryption.oid = newObject();\r\n out(\"<<\");\r\n out(\"/Filter /Standard\");\r\n out(\"/V \" + encryption.v);\r\n out(\"/R \" + encryption.r);\r\n out(\"/U <\" + encryption.toHexString(encryption.U) + \">\");\r\n out(\"/O <\" + encryption.toHexString(encryption.O) + \">\");\r\n out(\"/P \" + encryption.P);\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putFontDict = function() {\r\n out(\"/Font <<\");\r\n\r\n for (var fontKey in fonts) {\r\n if (fonts.hasOwnProperty(fontKey)) {\r\n if (\r\n putOnlyUsedFonts === false ||\r\n (putOnlyUsedFonts === true && usedFonts.hasOwnProperty(fontKey))\r\n ) {\r\n out(\"/\" + fontKey + \" \" + fonts[fontKey].objectNumber + \" 0 R\");\r\n }\r\n }\r\n }\r\n out(\">>\");\r\n };\r\n\r\n var putShadingPatternDict = function() {\r\n if (Object.keys(patterns).length > 0) {\r\n out(\"/Shading <<\");\r\n for (var patternKey in patterns) {\r\n if (\r\n patterns.hasOwnProperty(patternKey) &&\r\n patterns[patternKey] instanceof ShadingPattern &&\r\n patterns[patternKey].objectNumber >= 0\r\n ) {\r\n out(\r\n \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n );\r\n }\r\n }\r\n\r\n events.publish(\"putShadingPatternDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putTilingPatternDict = function(objectOid) {\r\n if (Object.keys(patterns).length > 0) {\r\n out(\"/Pattern <<\");\r\n for (var patternKey in patterns) {\r\n if (\r\n patterns.hasOwnProperty(patternKey) &&\r\n patterns[patternKey] instanceof API.TilingPattern &&\r\n patterns[patternKey].objectNumber >= 0 &&\r\n patterns[patternKey].objectNumber < objectOid // prevent cyclic dependencies\r\n ) {\r\n out(\r\n \"/\" + patternKey + \" \" + patterns[patternKey].objectNumber + \" 0 R\"\r\n );\r\n }\r\n }\r\n events.publish(\"putTilingPatternDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putGStatesDict = function() {\r\n if (Object.keys(gStates).length > 0) {\r\n var gStateKey;\r\n out(\"/ExtGState <<\");\r\n for (gStateKey in gStates) {\r\n if (\r\n gStates.hasOwnProperty(gStateKey) &&\r\n gStates[gStateKey].objectNumber >= 0\r\n ) {\r\n out(\"/\" + gStateKey + \" \" + gStates[gStateKey].objectNumber + \" 0 R\");\r\n }\r\n }\r\n\r\n events.publish(\"putGStateDict\");\r\n out(\">>\");\r\n }\r\n };\r\n\r\n var putResourceDictionary = function(objectIds) {\r\n newObjectDeferredBegin(objectIds.resourcesOid, true);\r\n out(\"<<\");\r\n out(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\");\r\n putFontDict();\r\n putShadingPatternDict();\r\n putTilingPatternDict(objectIds.objectOid);\r\n putGStatesDict();\r\n putXobjectDict();\r\n out(\">>\");\r\n out(\"endobj\");\r\n };\r\n\r\n var putResources = function() {\r\n // FormObjects, Patterns etc. might use other FormObjects/Patterns/Images\r\n // which means their resource dictionaries must contain the already resolved\r\n // object ids. For this reason we defer the serialization of the resource\r\n // dicts until all objects have been serialized and have object ids.\r\n //\r\n // In order to prevent cyclic dependencies (which Adobe Reader doesn't like),\r\n // we only put all oids that are smaller than the oid of the object the\r\n // resource dict belongs to. This is correct behavior, since the streams\r\n // may only use other objects that have already been defined and thus appear\r\n // earlier in their respective collection.\r\n // Currently, this only affects tiling patterns, but a (more) correct\r\n // implementation of FormObjects would also define their own resource dicts.\r\n var deferredResourceDictionaryIds = [];\r\n\r\n putFonts();\r\n putGStates();\r\n putXObjects();\r\n putPatterns(deferredResourceDictionaryIds);\r\n\r\n events.publish(\"putResources\");\r\n deferredResourceDictionaryIds.forEach(putResourceDictionary);\r\n putResourceDictionary({\r\n resourcesOid: resourceDictionaryObjId,\r\n objectOid: Number.MAX_SAFE_INTEGER // output all objects\r\n });\r\n events.publish(\"postPutResources\");\r\n };\r\n\r\n var putAdditionalObjects = function() {\r\n events.publish(\"putAdditionalObjects\");\r\n for (var i = 0; i < additionalObjects.length; i++) {\r\n var obj = additionalObjects[i];\r\n newObjectDeferredBegin(obj.objId, true);\r\n out(obj.content);\r\n out(\"endobj\");\r\n }\r\n events.publish(\"postPutAdditionalObjects\");\r\n };\r\n\r\n var addFontToFontDictionary = function(font) {\r\n fontmap[font.fontName] = fontmap[font.fontName] || {};\r\n fontmap[font.fontName][font.fontStyle] = font.id;\r\n };\r\n\r\n var addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n encoding,\r\n isStandardFont\r\n ) {\r\n var font = {\r\n id: \"F\" + (Object.keys(fonts).length + 1).toString(10),\r\n postScriptName: postScriptName,\r\n fontName: fontName,\r\n fontStyle: fontStyle,\r\n encoding: encoding,\r\n isStandardFont: isStandardFont || false,\r\n metadata: {}\r\n };\r\n\r\n events.publish(\"addFont\", {\r\n font: font,\r\n instance: this\r\n });\r\n\r\n fonts[font.id] = font;\r\n addFontToFontDictionary(font);\r\n return font.id;\r\n };\r\n\r\n var addFonts = function(arrayOfFonts) {\r\n for (var i = 0, l = standardFonts.length; i < l; i++) {\r\n var fontKey = addFont.call(\r\n this,\r\n arrayOfFonts[i][0],\r\n arrayOfFonts[i][1],\r\n arrayOfFonts[i][2],\r\n standardFonts[i][3],\r\n true\r\n );\r\n\r\n if (putOnlyUsedFonts === false) {\r\n usedFonts[fontKey] = true;\r\n }\r\n // adding aliases for standard fonts, this time matching the capitalization\r\n var parts = arrayOfFonts[i][0].split(\"-\");\r\n addFontToFontDictionary({\r\n id: fontKey,\r\n fontName: parts[0],\r\n fontStyle: parts[1] || \"\"\r\n });\r\n }\r\n events.publish(\"addFonts\", {\r\n fonts: fonts,\r\n dictionary: fontmap\r\n });\r\n };\r\n\r\n var SAFE = function __safeCall(fn) {\r\n fn.foo = function __safeCallWrapper() {\r\n try {\r\n return fn.apply(this, arguments);\r\n } catch (e) {\r\n var stack = e.stack || \"\";\r\n if (~stack.indexOf(\" at \")) stack = stack.split(\" at \")[1];\r\n var m =\r\n \"Error in function \" +\r\n stack.split(\"\\n\")[0].split(\"<\")[0] +\r\n \": \" +\r\n e.message;\r\n if (globalObject.console) {\r\n globalObject.console.error(m, e);\r\n if (globalObject.alert) alert(m);\r\n } else {\r\n throw new Error(m);\r\n }\r\n }\r\n };\r\n fn.foo.bar = fn;\r\n return fn.foo;\r\n };\r\n\r\n var to8bitStream = function(text, flags) {\r\n /**\r\n * PDF 1.3 spec:\r\n * \"For text strings encoded in Unicode, the first two bytes must be 254 followed by\r\n * 255, representing the Unicode byte order marker, U+FEFF. (This sequence conflicts\r\n * with the PDFDocEncoding character sequence thorn ydieresis, which is unlikely\r\n * to be a meaningful beginning of a word or phrase.) The remainder of the\r\n * string consists of Unicode character codes, according to the UTF-16 encoding\r\n * specified in the Unicode standard, version 2.0. Commonly used Unicode values\r\n * are represented as 2 bytes per character, with the high-order byte appearing first\r\n * in the string.\"\r\n *\r\n * In other words, if there are chars in a string with char code above 255, we\r\n * recode the string to UCS2 BE - string doubles in length and BOM is prepended.\r\n *\r\n * HOWEVER!\r\n * Actual *content* (body) text (as opposed to strings used in document properties etc)\r\n * does NOT expect BOM. There, it is treated as a literal GID (Glyph ID)\r\n *\r\n * Because of Adobe's focus on \"you subset your fonts!\" you are not supposed to have\r\n * a font that maps directly Unicode (UCS2 / UTF16BE) code to font GID, but you could\r\n * fudge it with \"Identity-H\" encoding and custom CIDtoGID map that mimics Unicode\r\n * code page. There, however, all characters in the stream are treated as GIDs,\r\n * including BOM, which is the reason we need to skip BOM in content text (i.e. that\r\n * that is tied to a font).\r\n *\r\n * To signal this \"special\" PDFEscape / to8bitStream handling mode,\r\n * API.text() function sets (unless you overwrite it with manual values\r\n * given to API.text(.., flags) )\r\n * flags.autoencode = true\r\n * flags.noBOM = true\r\n *\r\n * ===================================================================================\r\n * `flags` properties relied upon:\r\n * .sourceEncoding = string with encoding label.\r\n * \"Unicode\" by default. = encoding of the incoming text.\r\n * pass some non-existing encoding name\r\n * (ex: 'Do not touch my strings! I know what I am doing.')\r\n * to make encoding code skip the encoding step.\r\n * .outputEncoding = Either valid PDF encoding name\r\n * (must be supported by jsPDF font metrics, otherwise no encoding)\r\n * or a JS object, where key = sourceCharCode, value = outputCharCode\r\n * missing keys will be treated as: sourceCharCode === outputCharCode\r\n * .noBOM\r\n * See comment higher above for explanation for why this is important\r\n * .autoencode\r\n * See comment higher above for explanation for why this is important\r\n */\r\n\r\n var i,\r\n l,\r\n sourceEncoding,\r\n encodingBlock,\r\n outputEncoding,\r\n newtext,\r\n isUnicode,\r\n ch,\r\n bch;\r\n\r\n flags = flags || {};\r\n sourceEncoding = flags.sourceEncoding || \"Unicode\";\r\n outputEncoding = flags.outputEncoding;\r\n\r\n // This 'encoding' section relies on font metrics format\r\n // attached to font objects by, among others,\r\n // \"Willow Systems' standard_font_metrics plugin\"\r\n // see jspdf.plugin.standard_font_metrics.js for format\r\n // of the font.metadata.encoding Object.\r\n // It should be something like\r\n // .encoding = {'codePages':['WinANSI....'], 'WinANSI...':{code:code, ...}}\r\n // .widths = {0:width, code:width, ..., 'fof':divisor}\r\n // .kerning = {code:{previous_char_code:shift, ..., 'fof':-divisor},...}\r\n if (\r\n (flags.autoencode || outputEncoding) &&\r\n fonts[activeFontKey].metadata &&\r\n fonts[activeFontKey].metadata[sourceEncoding] &&\r\n fonts[activeFontKey].metadata[sourceEncoding].encoding\r\n ) {\r\n encodingBlock = fonts[activeFontKey].metadata[sourceEncoding].encoding;\r\n\r\n // each font has default encoding. Some have it clearly defined.\r\n if (!outputEncoding && fonts[activeFontKey].encoding) {\r\n outputEncoding = fonts[activeFontKey].encoding;\r\n }\r\n\r\n // Hmmm, the above did not work? Let's try again, in different place.\r\n if (!outputEncoding && encodingBlock.codePages) {\r\n outputEncoding = encodingBlock.codePages[0]; // let's say, first one is the default\r\n }\r\n\r\n if (typeof outputEncoding === \"string\") {\r\n outputEncoding = encodingBlock[outputEncoding];\r\n }\r\n // we want output encoding to be a JS Object, where\r\n // key = sourceEncoding's character code and\r\n // value = outputEncoding's character code.\r\n if (outputEncoding) {\r\n isUnicode = false;\r\n newtext = [];\r\n for (i = 0, l = text.length; i < l; i++) {\r\n ch = outputEncoding[text.charCodeAt(i)];\r\n if (ch) {\r\n newtext.push(String.fromCharCode(ch));\r\n } else {\r\n newtext.push(text[i]);\r\n }\r\n\r\n // since we are looping over chars anyway, might as well\r\n // check for residual unicodeness\r\n if (newtext[i].charCodeAt(0) >> 8) {\r\n /* more than 255 */\r\n isUnicode = true;\r\n }\r\n }\r\n text = newtext.join(\"\");\r\n }\r\n }\r\n\r\n i = text.length;\r\n // isUnicode may be set to false above. Hence the triple-equal to undefined\r\n while (isUnicode === undefined && i !== 0) {\r\n if (text.charCodeAt(i - 1) >> 8) {\r\n /* more than 255 */\r\n isUnicode = true;\r\n }\r\n i--;\r\n }\r\n if (!isUnicode) {\r\n return text;\r\n }\r\n\r\n newtext = flags.noBOM ? [] : [254, 255];\r\n for (i = 0, l = text.length; i < l; i++) {\r\n ch = text.charCodeAt(i);\r\n bch = ch >> 8; // divide by 256\r\n if (bch >> 8) {\r\n /* something left after dividing by 256 second time */\r\n throw new Error(\r\n \"Character at position \" +\r\n i +\r\n \" of string '\" +\r\n text +\r\n \"' exceeds 16bits. Cannot be encoded into UCS-2 BE\"\r\n );\r\n }\r\n newtext.push(bch);\r\n newtext.push(ch - (bch << 8));\r\n }\r\n return String.fromCharCode.apply(undefined, newtext);\r\n };\r\n\r\n var pdfEscape = (API.__private__.pdfEscape = API.pdfEscape = function(\r\n text,\r\n flags\r\n ) {\r\n /**\r\n * Replace '/', '(', and ')' with pdf-safe versions\r\n *\r\n * Doing to8bitStream does NOT make this PDF display unicode text. For that\r\n * we also need to reference a unicode font and embed it - royal pain in the rear.\r\n *\r\n * There is still a benefit to to8bitStream - PDF simply cannot handle 16bit chars,\r\n * which JavaScript Strings are happy to provide. So, while we still cannot display\r\n * 2-byte characters property, at least CONDITIONALLY converting (entire string containing)\r\n * 16bit chars to (USC-2-BE) 2-bytes per char + BOM streams we ensure that entire PDF\r\n * is still parseable.\r\n * This will allow immediate support for unicode in document properties strings.\r\n */\r\n return to8bitStream(text, flags)\r\n .replace(/\\\\/g, \"\\\\\\\\\")\r\n .replace(/\\(/g, \"\\\\(\")\r\n .replace(/\\)/g, \"\\\\)\");\r\n });\r\n\r\n var beginPage = (API.__private__.beginPage = function(format) {\r\n pages[++page] = [];\r\n pagesContext[page] = {\r\n objId: 0,\r\n contentsObjId: 0,\r\n userUnit: Number(userUnit),\r\n artBox: null,\r\n bleedBox: null,\r\n cropBox: null,\r\n trimBox: null,\r\n mediaBox: {\r\n bottomLeftX: 0,\r\n bottomLeftY: 0,\r\n topRightX: Number(format[0]),\r\n topRightY: Number(format[1])\r\n }\r\n };\r\n _setPage(page);\r\n setOutputDestination(pages[currentPage]);\r\n });\r\n\r\n var _addPage = function(parmFormat, parmOrientation) {\r\n var dimensions, width, height;\r\n\r\n orientation = parmOrientation || orientation;\r\n\r\n if (typeof parmFormat === \"string\") {\r\n dimensions = getPageFormat(parmFormat.toLowerCase());\r\n if (Array.isArray(dimensions)) {\r\n width = dimensions[0];\r\n height = dimensions[1];\r\n }\r\n }\r\n\r\n if (Array.isArray(parmFormat)) {\r\n width = parmFormat[0] * scaleFactor;\r\n height = parmFormat[1] * scaleFactor;\r\n }\r\n\r\n if (isNaN(width)) {\r\n width = format[0];\r\n height = format[1];\r\n }\r\n\r\n if (width > 14400 || height > 14400) {\r\n console.warn(\r\n \"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"\r\n );\r\n width = Math.min(14400, width);\r\n height = Math.min(14400, height);\r\n }\r\n\r\n format = [width, height];\r\n\r\n switch (orientation.substr(0, 1)) {\r\n case \"l\":\r\n if (height > width) {\r\n format = [height, width];\r\n }\r\n break;\r\n case \"p\":\r\n if (width > height) {\r\n format = [height, width];\r\n }\r\n break;\r\n }\r\n\r\n beginPage(format);\r\n\r\n // Set line width\r\n setLineWidth(lineWidth);\r\n // Set draw color\r\n out(strokeColor);\r\n // resurrecting non-default line caps, joins\r\n if (lineCapID !== 0) {\r\n out(lineCapID + \" J\");\r\n }\r\n if (lineJoinID !== 0) {\r\n out(lineJoinID + \" j\");\r\n }\r\n events.publish(\"addPage\", {\r\n pageNumber: page\r\n });\r\n };\r\n\r\n var _deletePage = function(n) {\r\n if (n > 0 && n <= page) {\r\n pages.splice(n, 1);\r\n pagesContext.splice(n, 1);\r\n page--;\r\n if (currentPage > page) {\r\n currentPage = page;\r\n }\r\n this.setPage(currentPage);\r\n }\r\n };\r\n\r\n var _setPage = function(n) {\r\n if (n > 0 && n <= page) {\r\n currentPage = n;\r\n }\r\n };\r\n\r\n var getNumberOfPages = (API.__private__.getNumberOfPages = API.getNumberOfPages = function() {\r\n return pages.length - 1;\r\n });\r\n\r\n /**\r\n * Returns a document-specific font key - a label assigned to a\r\n * font name + font type combination at the time the font was added\r\n * to the font inventory.\r\n *\r\n * Font key is used as label for the desired font for a block of text\r\n * to be added to the PDF document stream.\r\n * @private\r\n * @function\r\n * @param fontName {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n * @param fontStyle {string} can be undefined on \"falthy\" to indicate \"use current\"\r\n * @returns {string} Font key.\r\n * @ignore\r\n */\r\n var getFont = function(fontName, fontStyle, options) {\r\n var key = undefined,\r\n fontNameLowerCase;\r\n options = options || {};\r\n\r\n fontName =\r\n fontName !== undefined ? fontName : fonts[activeFontKey].fontName;\r\n fontStyle =\r\n fontStyle !== undefined ? fontStyle : fonts[activeFontKey].fontStyle;\r\n fontNameLowerCase = fontName.toLowerCase();\r\n\r\n if (\r\n fontmap[fontNameLowerCase] !== undefined &&\r\n fontmap[fontNameLowerCase][fontStyle] !== undefined\r\n ) {\r\n key = fontmap[fontNameLowerCase][fontStyle];\r\n } else if (\r\n fontmap[fontName] !== undefined &&\r\n fontmap[fontName][fontStyle] !== undefined\r\n ) {\r\n key = fontmap[fontName][fontStyle];\r\n } else {\r\n if (options.disableWarning === false) {\r\n console.warn(\r\n \"Unable to look up font label for font '\" +\r\n fontName +\r\n \"', '\" +\r\n fontStyle +\r\n \"'. Refer to getFontList() for available fonts.\"\r\n );\r\n }\r\n }\r\n\r\n if (!key && !options.noFallback) {\r\n key = fontmap[\"times\"][fontStyle];\r\n if (key == null) {\r\n key = fontmap[\"times\"][\"normal\"];\r\n }\r\n }\r\n return key;\r\n };\r\n\r\n var putInfo = (API.__private__.putInfo = function() {\r\n var objectId = newObject();\r\n var encryptor = function(data) {\r\n return data;\r\n };\r\n if (encryptionOptions !== null) {\r\n encryptor = encryption.encryptor(objectId, 0);\r\n }\r\n out(\"<<\");\r\n out(\"/Producer (\" + pdfEscape(encryptor(\"jsPDF \" + jsPDF.version)) + \")\");\r\n for (var key in documentProperties) {\r\n if (documentProperties.hasOwnProperty(key) && documentProperties[key]) {\r\n out(\r\n \"/\" +\r\n key.substr(0, 1).toUpperCase() +\r\n key.substr(1) +\r\n \" (\" +\r\n pdfEscape(encryptor(documentProperties[key])) +\r\n \")\"\r\n );\r\n }\r\n }\r\n out(\"/CreationDate (\" + pdfEscape(encryptor(creationDate)) + \")\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n });\r\n\r\n var putCatalog = (API.__private__.putCatalog = function(options) {\r\n options = options || {};\r\n var tmpRootDictionaryObjId =\r\n options.rootDictionaryObjId || rootDictionaryObjId;\r\n newObject();\r\n out(\"<<\");\r\n out(\"/Type /Catalog\");\r\n out(\"/Pages \" + tmpRootDictionaryObjId + \" 0 R\");\r\n // PDF13ref Section 7.2.1\r\n if (!zoomMode) zoomMode = \"fullwidth\";\r\n switch (zoomMode) {\r\n case \"fullwidth\":\r\n out(\"/OpenAction [3 0 R /FitH null]\");\r\n break;\r\n case \"fullheight\":\r\n out(\"/OpenAction [3 0 R /FitV null]\");\r\n break;\r\n case \"fullpage\":\r\n out(\"/OpenAction [3 0 R /Fit]\");\r\n break;\r\n case \"original\":\r\n out(\"/OpenAction [3 0 R /XYZ null null 1]\");\r\n break;\r\n default:\r\n var pcn = \"\" + zoomMode;\r\n if (pcn.substr(pcn.length - 1) === \"%\")\r\n zoomMode = parseInt(zoomMode) / 100;\r\n if (typeof zoomMode === \"number\") {\r\n out(\"/OpenAction [3 0 R /XYZ null null \" + f2(zoomMode) + \"]\");\r\n }\r\n }\r\n if (!layoutMode) layoutMode = \"continuous\";\r\n switch (layoutMode) {\r\n case \"continuous\":\r\n out(\"/PageLayout /OneColumn\");\r\n break;\r\n case \"single\":\r\n out(\"/PageLayout /SinglePage\");\r\n break;\r\n case \"two\":\r\n case \"twoleft\":\r\n out(\"/PageLayout /TwoColumnLeft\");\r\n break;\r\n case \"tworight\":\r\n out(\"/PageLayout /TwoColumnRight\");\r\n break;\r\n }\r\n if (pageMode) {\r\n /**\r\n * A name object specifying how the document should be displayed when opened:\r\n * UseNone : Neither document outline nor thumbnail images visible -- DEFAULT\r\n * UseOutlines : Document outline visible\r\n * UseThumbs : Thumbnail images visible\r\n * FullScreen : Full-screen mode, with no menu bar, window controls, or any other window visible\r\n */\r\n out(\"/PageMode /\" + pageMode);\r\n }\r\n events.publish(\"putCatalog\");\r\n out(\">>\");\r\n out(\"endobj\");\r\n });\r\n\r\n var putTrailer = (API.__private__.putTrailer = function() {\r\n out(\"trailer\");\r\n out(\"<<\");\r\n out(\"/Size \" + (objectNumber + 1));\r\n // Root and Info must be the last and second last objects written respectively\r\n out(\"/Root \" + objectNumber + \" 0 R\");\r\n out(\"/Info \" + (objectNumber - 1) + \" 0 R\");\r\n if (encryptionOptions !== null) {\r\n out(\"/Encrypt \" + encryption.oid + \" 0 R\");\r\n }\r\n out(\"/ID [ <\" + fileId + \"> <\" + fileId + \"> ]\");\r\n out(\">>\");\r\n });\r\n\r\n var putHeader = (API.__private__.putHeader = function() {\r\n out(\"%PDF-\" + pdfVersion);\r\n out(\"%\\xBA\\xDF\\xAC\\xE0\");\r\n });\r\n\r\n var putXRef = (API.__private__.putXRef = function() {\r\n var p = \"0000000000\";\r\n\r\n out(\"xref\");\r\n out(\"0 \" + (objectNumber + 1));\r\n out(\"0000000000 65535 f \");\r\n for (var i = 1; i <= objectNumber; i++) {\r\n var offset = offsets[i];\r\n if (typeof offset === \"function\") {\r\n out((p + offsets[i]()).slice(-10) + \" 00000 n \");\r\n } else {\r\n if (typeof offsets[i] !== \"undefined\") {\r\n out((p + offsets[i]).slice(-10) + \" 00000 n \");\r\n } else {\r\n out(\"0000000000 00000 n \");\r\n }\r\n }\r\n }\r\n });\r\n\r\n var buildDocument = (API.__private__.buildDocument = function() {\r\n resetDocument();\r\n setOutputDestination(content);\r\n\r\n events.publish(\"buildDocument\");\r\n\r\n putHeader();\r\n putPages();\r\n putAdditionalObjects();\r\n putResources();\r\n if (encryptionOptions !== null) putEncryptionDict();\r\n putInfo();\r\n putCatalog();\r\n\r\n var offsetOfXRef = contentLength;\r\n putXRef();\r\n putTrailer();\r\n out(\"startxref\");\r\n out(\"\" + offsetOfXRef);\r\n out(\"%%EOF\");\r\n\r\n setOutputDestination(pages[currentPage]);\r\n\r\n return content.join(\"\\n\");\r\n });\r\n\r\n var getBlob = (API.__private__.getBlob = function(data) {\r\n return new Blob([getArrayBuffer(data)], {\r\n type: \"application/pdf\"\r\n });\r\n });\r\n\r\n /**\r\n * Generates the PDF document.\r\n *\r\n * If `type` argument is undefined, output is raw body of resulting PDF returned as a string.\r\n *\r\n * @param {string} type A string identifying one of the possible output types.
    \r\n * Possible values are:
    \r\n * 'arraybuffer' -> (ArrayBuffer)
    \r\n * 'blob' -> (Blob)
    \r\n * 'bloburi'/'bloburl' -> (string)
    \r\n * 'datauristring'/'dataurlstring' -> (string)
    \r\n * 'datauri'/'dataurl' -> (undefined) -> change location to generated datauristring/dataurlstring
    \r\n * 'dataurlnewwindow' -> (window | null | undefined) throws error if global isn't a window object(node)
    \r\n * 'pdfobjectnewwindow' -> (window | null) throws error if global isn't a window object(node)
    \r\n * 'pdfjsnewwindow' -> (wind | null)\r\n * @param {Object|string} options An object providing some additional signalling to PDF generator.
    \r\n * Possible options are 'filename'.
    \r\n * A string can be passed instead of {filename:string} and defaults to 'generated.pdf'\r\n * @function\r\n * @instance\r\n * @returns {string|window|ArrayBuffer|Blob|jsPDF|null|undefined}\r\n * @memberof jsPDF#\r\n * @name output\r\n */\r\n var output = (API.output = API.__private__.output = SAFE(function output(\r\n type,\r\n options\r\n ) {\r\n options = options || {};\r\n\r\n if (typeof options === \"string\") {\r\n options = {\r\n filename: options\r\n };\r\n } else {\r\n options.filename = options.filename || \"generated.pdf\";\r\n }\r\n\r\n switch (type) {\r\n case undefined:\r\n return buildDocument();\r\n case \"save\":\r\n API.save(options.filename);\r\n break;\r\n case \"arraybuffer\":\r\n return getArrayBuffer(buildDocument());\r\n case \"blob\":\r\n return getBlob(buildDocument());\r\n case \"bloburi\":\r\n case \"bloburl\":\r\n // Developer is responsible of calling revokeObjectURL\r\n if (\r\n typeof globalObject.URL !== \"undefined\" &&\r\n typeof globalObject.URL.createObjectURL === \"function\"\r\n ) {\r\n return (\r\n (globalObject.URL &&\r\n globalObject.URL.createObjectURL(getBlob(buildDocument()))) ||\r\n void 0\r\n );\r\n } else {\r\n console.warn(\r\n \"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\"\r\n );\r\n }\r\n break;\r\n case \"datauristring\":\r\n case \"dataurlstring\":\r\n var dataURI = \"\";\r\n var pdfDocument = buildDocument();\r\n try {\r\n dataURI = btoa(pdfDocument);\r\n } catch (e) {\r\n dataURI = btoa(unescape(encodeURIComponent(pdfDocument)));\r\n }\r\n return (\r\n \"data:application/pdf;filename=\" +\r\n options.filename +\r\n \";base64,\" +\r\n dataURI\r\n );\r\n case \"pdfobjectnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfObjectUrl =\r\n \"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\";\r\n var integrity =\r\n ' integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\" crossorigin=\"anonymous\"';\r\n\r\n if (options.pdfObjectUrl) {\r\n pdfObjectUrl = options.pdfObjectUrl;\r\n integrity = \"\";\r\n }\r\n\r\n var htmlForNewWindow =\r\n \"\" +\r\n '\";\r\n var nW = globalObject.open();\r\n\r\n if (nW !== null) {\r\n nW.document.write(htmlForNewWindow);\r\n }\r\n return nW;\r\n } else {\r\n throw new Error(\r\n \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n case \"pdfjsnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n var htmlForPDFjsNewWindow =\r\n \"\" +\r\n \"\" +\r\n '' +\r\n \"\";\r\n var dataURLNewWindow = globalObject.open();\r\n if (dataURLNewWindow !== null) {\r\n dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n dataURLNewWindow.document.title = options.filename;\r\n }\r\n if (dataURLNewWindow || typeof safari === \"undefined\")\r\n return dataURLNewWindow;\r\n } else {\r\n throw new Error(\r\n \"The option dataurlnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n break;\r\n case \"datauri\":\r\n case \"dataurl\":\r\n return (globalObject.document.location.href = this.output(\r\n \"datauristring\",\r\n options\r\n ));\r\n default:\r\n return null;\r\n }\r\n }));\r\n\r\n /**\r\n * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n * @param {string} hotfixName - The name of the hotfix to check.\r\n * @returns {boolean}\r\n */\r\n var hasHotfix = function(hotfixName) {\r\n return (\r\n Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n );\r\n };\r\n\r\n switch (unit) {\r\n case \"pt\":\r\n scaleFactor = 1;\r\n break;\r\n case \"mm\":\r\n scaleFactor = 72 / 25.4;\r\n break;\r\n case \"cm\":\r\n scaleFactor = 72 / 2.54;\r\n break;\r\n case \"in\":\r\n scaleFactor = 72;\r\n break;\r\n case \"px\":\r\n if (hasHotfix(\"px_scaling\") == true) {\r\n scaleFactor = 72 / 96;\r\n } else {\r\n scaleFactor = 96 / 72;\r\n }\r\n break;\r\n case \"pc\":\r\n scaleFactor = 12;\r\n break;\r\n case \"em\":\r\n scaleFactor = 12;\r\n break;\r\n case \"ex\":\r\n scaleFactor = 6;\r\n break;\r\n default:\r\n if (typeof unit === \"number\") {\r\n scaleFactor = unit;\r\n } else {\r\n throw new Error(\"Invalid unit: \" + unit);\r\n }\r\n }\r\n\r\n var encryption = null;\r\n setCreationDate();\r\n setFileId();\r\n\r\n var getEncryptor = function(objectId) {\r\n if (encryptionOptions !== null) {\r\n return encryption.encryptor(objectId, 0);\r\n }\r\n return function(data) {\r\n return data;\r\n };\r\n };\r\n\r\n //---------------------------------------\r\n // Public API\r\n\r\n var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n pageNumberOneBased\r\n ) {\r\n if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n }\r\n var objId = pagesContext[pageNumberOneBased].objId;\r\n return {\r\n objId: objId,\r\n pageNumber: pageNumberOneBased,\r\n pageContext: pagesContext[pageNumberOneBased]\r\n };\r\n });\r\n\r\n var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n objId\r\n ) {\r\n if (isNaN(objId) || objId % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n }\r\n for (var pageNumber in pagesContext) {\r\n if (pagesContext[pageNumber].objId === objId) {\r\n break;\r\n }\r\n }\r\n return getPageInfo(pageNumber);\r\n });\r\n\r\n var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n return {\r\n objId: pagesContext[currentPage].objId,\r\n pageNumber: currentPage,\r\n pageContext: pagesContext[currentPage]\r\n };\r\n });\r\n\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addPage\r\n */\r\n API.addPage = function() {\r\n _addPage.apply(this, arguments);\r\n return this;\r\n };\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name setPage\r\n * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n * @example\r\n * doc = jsPDF()\r\n * doc.addPage()\r\n * doc.addPage()\r\n * doc.text('I am on page 3', 10, 10)\r\n * doc.setPage(1)\r\n * doc.text('I am on page 1', 10, 10)\r\n */\r\n API.setPage = function() {\r\n _setPage.apply(this, arguments);\r\n setOutputDestination.call(this, pages[currentPage]);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name insertPage\r\n * @memberof jsPDF#\r\n *\r\n * @function\r\n * @instance\r\n * @param {Object} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.insertPage = function(beforePage) {\r\n this.addPage();\r\n this.movePage(currentPage, beforePage);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name movePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {number} targetPage\r\n * @param {number} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.movePage = function(targetPage, beforePage) {\r\n var tmpPages, tmpPagesContext;\r\n if (targetPage > beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var i = targetPage; i > beforePage; i--) {\r\n pages[i] = pages[i - 1];\r\n pagesContext[i] = pagesContext[i - 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n } else if (targetPage < beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var j = targetPage; j < beforePage; j++) {\r\n pages[j] = pages[j + 1];\r\n pagesContext[j] = pagesContext[j + 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Deletes a page from the PDF.\r\n * @name deletePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @param {number} targetPage\r\n * @instance\r\n * @returns {jsPDF}\r\n */\r\n API.deletePage = function() {\r\n _deletePage.apply(this, arguments);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n *\r\n * @function\r\n * @instance\r\n * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n * @param {number} [options.charSpace=0] - The space between each letter.\r\n * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n * @param {Object} [options.flags] - Flags for to8bitStream.\r\n * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n *\r\n * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name text\r\n */\r\n API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n /*\r\n * Inserts something like this into PDF\r\n * BT\r\n * /F1 16 Tf % Font name + size\r\n * 16 TL % How many units down for next line in multiline text\r\n * 0 g % color\r\n * 28.35 813.54 Td % position\r\n * (line one) Tj\r\n * T* (line two) Tj\r\n * T* (line three) Tj\r\n * ET\r\n */\r\n options = options || {};\r\n var scope = options.scope || this;\r\n var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n // in effort to make all calls have similar signature like\r\n // function(data, coordinates... , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (\r\n typeof text === \"number\" &&\r\n typeof x === \"number\" &&\r\n (typeof y === \"string\" || Array.isArray(y))\r\n ) {\r\n var tmp = y;\r\n y = x;\r\n x = text;\r\n text = tmp;\r\n }\r\n\r\n var transformationMatrix;\r\n\r\n if (arguments[3] instanceof Matrix === false) {\r\n flags = arguments[3];\r\n angle = arguments[4];\r\n align = arguments[5];\r\n\r\n if (typeof flags !== \"object\" || flags === null) {\r\n if (typeof angle === \"string\") {\r\n align = angle;\r\n angle = null;\r\n }\r\n if (typeof flags === \"string\") {\r\n align = flags;\r\n flags = null;\r\n }\r\n if (typeof flags === \"number\") {\r\n angle = flags;\r\n flags = null;\r\n }\r\n options = {\r\n flags: flags,\r\n angle: angle,\r\n align: align\r\n };\r\n }\r\n } else {\r\n advancedApiModeTrap(\r\n \"The transform parameter of text() with a Matrix value\"\r\n );\r\n transformationMatrix = transform;\r\n }\r\n\r\n if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n }\r\n\r\n if (text.length === 0) {\r\n return scope;\r\n }\r\n\r\n var xtra = \"\";\r\n var isHex = false;\r\n var lineHeight =\r\n typeof options.lineHeightFactor === \"number\"\r\n ? options.lineHeightFactor\r\n : lineHeightFactor;\r\n var scaleFactor = scope.internal.scaleFactor;\r\n\r\n function ESC(s) {\r\n s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n return pdfEscape(s, flags);\r\n }\r\n\r\n function transformTextToSpecialArray(text) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(curDa);\r\n } else {\r\n if (\r\n Array.isArray(text) &&\r\n (curDa.length === 1 ||\r\n (curDa[1] === undefined && curDa[2] === undefined))\r\n ) {\r\n da.push(curDa[0]);\r\n } else {\r\n da.push([curDa[0], curDa[1], curDa[2]]);\r\n }\r\n }\r\n }\r\n return da;\r\n }\r\n\r\n function processTextByFunction(text, processingFunction) {\r\n var result;\r\n if (typeof text === \"string\") {\r\n result = processingFunction(text)[0];\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n var tmpResult;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(processingFunction(curDa)[0]);\r\n } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n }\r\n }\r\n result = da;\r\n }\r\n return result;\r\n }\r\n\r\n //Check if text is of type String\r\n var textIsOfTypeString = false;\r\n var tmpTextIsOfTypeString = true;\r\n\r\n if (typeof text === \"string\") {\r\n textIsOfTypeString = true;\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (\r\n typeof curDa !== \"string\" ||\r\n (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n ) {\r\n tmpTextIsOfTypeString = false;\r\n }\r\n }\r\n textIsOfTypeString = tmpTextIsOfTypeString;\r\n }\r\n if (textIsOfTypeString === false) {\r\n throw new Error(\r\n 'Type of text must be string or Array. \"' +\r\n text +\r\n '\" is not recognized.'\r\n );\r\n }\r\n\r\n //If there are any newlines in text, we assume\r\n //the user wanted to print multiple lines, so break the\r\n //text up into an array. If the text is already an array,\r\n //we assume the user knows what they are doing.\r\n //Convert text into an array anyway to simplify\r\n //later code.\r\n\r\n if (typeof text === \"string\") {\r\n if (text.match(/[\\r?\\n]/)) {\r\n text = text.split(/\\r\\n|\\r|\\n/g);\r\n } else {\r\n text = [text];\r\n }\r\n }\r\n\r\n //baseline\r\n var height = activeFontSize / scope.internal.scaleFactor;\r\n var descent = height * (lineHeight - 1);\r\n\r\n switch (options.baseline) {\r\n case \"bottom\":\r\n y -= descent;\r\n break;\r\n case \"top\":\r\n y += height - descent;\r\n break;\r\n case \"hanging\":\r\n y += height - 2 * descent;\r\n break;\r\n case \"middle\":\r\n y += height / 2 - descent;\r\n break;\r\n case \"ideographic\":\r\n case \"alphabetic\":\r\n default:\r\n // do nothing, everything is fine\r\n break;\r\n }\r\n\r\n //multiline\r\n maxWidth = options.maxWidth || 0;\r\n\r\n if (maxWidth > 0) {\r\n if (typeof text === \"string\") {\r\n text = scope.splitTextToSize(text, maxWidth);\r\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n text = text.reduce(function(acc, textLine) {\r\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n }, []);\r\n }\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"preProcessText\", payload);\r\n\r\n text = payload.text;\r\n options = payload.options;\r\n\r\n //angle\r\n angle = options.angle;\r\n\r\n if (\r\n transformationMatrix instanceof Matrix === false &&\r\n angle &&\r\n typeof angle === \"number\"\r\n ) {\r\n angle *= Math.PI / 180;\r\n\r\n if (options.rotationDirection === 0) {\r\n angle = -angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n angle = -angle;\r\n }\r\n\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n } else if (angle && angle instanceof Matrix) {\r\n transformationMatrix = angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n transformationMatrix = identityMatrix;\r\n }\r\n\r\n //charSpace\r\n\r\n charSpace = options.charSpace || activeCharSpace;\r\n\r\n if (typeof charSpace !== \"undefined\") {\r\n xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n this.setCharSpace(this.getCharSpace() || 0);\r\n }\r\n\r\n horizontalScale = options.horizontalScale;\r\n if (typeof horizontalScale !== \"undefined\") {\r\n xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n }\r\n\r\n //lang\r\n\r\n var lang = options.lang;\r\n\r\n if (lang) {\r\n // xtra += \"/Lang (\" + lang +\")\\n\";\r\n }\r\n\r\n //renderingMode\r\n var renderingMode = -1;\r\n var parmRenderingMode =\r\n typeof options.renderingMode !== \"undefined\"\r\n ? options.renderingMode\r\n : options.stroke;\r\n var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n switch (parmRenderingMode) {\r\n case 0:\r\n case false:\r\n case \"fill\":\r\n renderingMode = 0;\r\n break;\r\n case 1:\r\n case true:\r\n case \"stroke\":\r\n renderingMode = 1;\r\n break;\r\n case 2:\r\n case \"fillThenStroke\":\r\n renderingMode = 2;\r\n break;\r\n case 3:\r\n case \"invisible\":\r\n renderingMode = 3;\r\n break;\r\n case 4:\r\n case \"fillAndAddForClipping\":\r\n renderingMode = 4;\r\n break;\r\n case 5:\r\n case \"strokeAndAddPathForClipping\":\r\n renderingMode = 5;\r\n break;\r\n case 6:\r\n case \"fillThenStrokeAndAddToPathForClipping\":\r\n renderingMode = 6;\r\n break;\r\n case 7:\r\n case \"addToPathForClipping\":\r\n renderingMode = 7;\r\n break;\r\n }\r\n\r\n var usedRenderingMode =\r\n typeof pageContext.usedRenderingMode !== \"undefined\"\r\n ? pageContext.usedRenderingMode\r\n : -1;\r\n\r\n //if the coder wrote it explicitly to use a specific\r\n //renderingMode, then use it\r\n if (renderingMode !== -1) {\r\n xtra += renderingMode + \" Tr\\n\";\r\n //otherwise check if we used the rendering Mode already\r\n //if so then set the rendering Mode...\r\n } else if (usedRenderingMode !== -1) {\r\n xtra += \"0 Tr\\n\";\r\n }\r\n\r\n if (renderingMode !== -1) {\r\n pageContext.usedRenderingMode = renderingMode;\r\n }\r\n\r\n //align\r\n align = options.align || \"left\";\r\n var leading = activeFontSize * lineHeight;\r\n var pageWidth = scope.internal.pageSize.getWidth();\r\n var activeFont = fonts[activeFontKey];\r\n charSpace = options.charSpace || activeCharSpace;\r\n maxWidth = options.maxWidth || 0;\r\n\r\n var lineWidths;\r\n flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n var wordSpacingPerLine = [];\r\n\r\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n da = transformTextToSpecialArray(text);\r\n var newY;\r\n if (align !== \"left\") {\r\n lineWidths = da.map(function(v) {\r\n return (\r\n (scope.getStringUnitWidth(v, {\r\n font: activeFont,\r\n charSpace: charSpace,\r\n fontSize: activeFontSize,\r\n doKerning: false\r\n }) *\r\n activeFontSize) /\r\n scaleFactor\r\n );\r\n });\r\n }\r\n //The first line uses the \"main\" Td setting,\r\n //and the subsequent lines are offset by the\r\n //previous line's x coordinate.\r\n var prevWidth = 0;\r\n var newX;\r\n if (align === \"right\") {\r\n //The passed in x coordinate defines the\r\n //rightmost point of the text.\r\n x -= lineWidths[0];\r\n text = [];\r\n len = da.length;\r\n for (var i = 0; i < len; i++) {\r\n if (i === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale(prevWidth - lineWidths[i]);\r\n newY = -leading;\r\n }\r\n text.push([da[i], newX, newY]);\r\n prevWidth = lineWidths[i];\r\n }\r\n } else if (align === \"center\") {\r\n //The passed in x coordinate defines\r\n //the center point.\r\n x -= lineWidths[0] / 2;\r\n text = [];\r\n len = da.length;\r\n for (var j = 0; j < len; j++) {\r\n if (j === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale((prevWidth - lineWidths[j]) / 2);\r\n newY = -leading;\r\n }\r\n text.push([da[j], newX, newY]);\r\n prevWidth = lineWidths[j];\r\n }\r\n } else if (align === \"left\") {\r\n text = [];\r\n len = da.length;\r\n for (var h = 0; h < len; h++) {\r\n text.push(da[h]);\r\n }\r\n } else if (align === \"justify\") {\r\n text = [];\r\n len = da.length;\r\n maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n for (var l = 0; l < len; l++) {\r\n newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n if (l < len - 1) {\r\n wordSpacingPerLine.push(\r\n hpf(\r\n scale(\r\n (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n )\r\n )\r\n );\r\n } else {\r\n wordSpacingPerLine.push(0);\r\n }\r\n text.push([da[l], newX, newY]);\r\n }\r\n } else {\r\n throw new Error(\r\n 'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n );\r\n }\r\n }\r\n\r\n //R2L\r\n var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n if (doReversing === true) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [\r\n text\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\"),\r\n posX,\r\n posY\r\n ];\r\n });\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"postProcessText\", payload);\r\n\r\n text = payload.text;\r\n isHex = payload.mutex.isHex || false;\r\n\r\n //Escaping\r\n var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n if (\r\n activeFontEncoding === \"WinAnsiEncoding\" ||\r\n activeFontEncoding === \"StandardEncoding\"\r\n ) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [ESC(text), posX, posY];\r\n });\r\n }\r\n\r\n da = transformTextToSpecialArray(text);\r\n\r\n text = [];\r\n var STRING = 0;\r\n var ARRAY = 1;\r\n var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n var posX;\r\n var posY;\r\n var content;\r\n var wordSpacing = \"\";\r\n\r\n var generatePosition = function(\r\n parmPosX,\r\n parmPosY,\r\n parmTransformationMatrix\r\n ) {\r\n var position = \"\";\r\n if (parmTransformationMatrix instanceof Matrix) {\r\n // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n // in the coordinate system established by this matrix\r\n if (typeof options.angle === \"number\") {\r\n parmTransformationMatrix = matrixMult(\r\n parmTransformationMatrix,\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n );\r\n } else {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, -1, 0, 0),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n } else {\r\n position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n }\r\n return position;\r\n };\r\n\r\n for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n wordSpacing = \"\";\r\n\r\n switch (variant) {\r\n case ARRAY:\r\n content =\r\n (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n posX = parseFloat(da[lineIndex][1]);\r\n posY = parseFloat(da[lineIndex][2]);\r\n break;\r\n case STRING:\r\n content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n posX = getHorizontalCoordinate(x);\r\n posY = getVerticalCoordinate(y);\r\n break;\r\n }\r\n\r\n if (\r\n typeof wordSpacingPerLine !== \"undefined\" &&\r\n typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n ) {\r\n wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n }\r\n\r\n if (lineIndex === 0) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n } else if (variant === STRING) {\r\n text.push(wordSpacing + content);\r\n } else if (variant === ARRAY) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n }\r\n }\r\n\r\n text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n text += \" Tj\\n\";\r\n\r\n var result = \"BT\\n/\";\r\n result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n result += textColor + \"\\n\";\r\n result += xtra;\r\n result += text;\r\n result += \"ET\";\r\n\r\n out(result);\r\n usedFonts[activeFontKey] = true;\r\n return scope;\r\n };\r\n\r\n // PDF supports these path painting and clip path operators:\r\n //\r\n // S - stroke\r\n // s - close/stroke\r\n // f (F) - fill non-zero\r\n // f* - fill evenodd\r\n // B - fill stroke nonzero\r\n // B* - fill stroke evenodd\r\n // b - close fill stroke nonzero\r\n // b* - close fill stroke evenodd\r\n // n - nothing (consume path)\r\n // W - clip nonzero\r\n // W* - clip evenodd\r\n //\r\n // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n // method.\r\n /**\r\n *\r\n * @name clip\r\n * @function\r\n * @instance\r\n * @param {string} rule Only possible value is 'evenodd'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description All .clip() after calling drawing ops with a style argument of null.\r\n */\r\n var clip = (API.__private__.clip = API.clip = function(rule) {\r\n // Call .clip() after calling drawing ops with a style argument of null\r\n // W is the PDF clipping op\r\n if (\"evenodd\" === rule) {\r\n out(\"W*\");\r\n } else {\r\n out(\"W\");\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * @name clipEvenOdd\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n * that this will NOT consume the current path. In order to only use this path for clipping call\r\n * {@link API.discardPath} afterwards.\r\n */\r\n API.clipEvenOdd = function() {\r\n return clip(\"evenodd\");\r\n };\r\n\r\n /**\r\n * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n * @name discardPath\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.discardPath = API.discardPath = function() {\r\n out(\"n\");\r\n return this;\r\n };\r\n\r\n var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n var validStyleVariants = [\r\n undefined,\r\n null,\r\n \"S\",\r\n \"D\",\r\n \"F\",\r\n \"DF\",\r\n \"FD\",\r\n \"f\",\r\n \"f*\",\r\n \"B\",\r\n \"B*\",\r\n \"n\"\r\n ];\r\n var result = false;\r\n if (validStyleVariants.indexOf(style) !== -1) {\r\n result = true;\r\n }\r\n return result;\r\n });\r\n\r\n API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n operator\r\n ) {\r\n if (isValidStyle(operator)) {\r\n defaultPathOperation = operator;\r\n }\r\n return this;\r\n };\r\n\r\n var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n // see path-painting operators in PDF spec\r\n var op = defaultPathOperation; // stroke\r\n\r\n switch (style) {\r\n case \"D\":\r\n case \"S\":\r\n op = \"S\"; // stroke\r\n break;\r\n case \"F\":\r\n op = \"f\"; // fill\r\n break;\r\n case \"FD\":\r\n case \"DF\":\r\n op = \"B\";\r\n break;\r\n case \"f\":\r\n case \"f*\":\r\n case \"B\":\r\n case \"B*\":\r\n /*\r\n Allow direct use of these PDF path-painting operators:\r\n - f fill using nonzero winding number rule\r\n - f* fill using even-odd rule\r\n - B fill then stroke with fill using non-zero winding number rule\r\n - B* fill then stroke with fill using even-odd rule\r\n */\r\n op = style;\r\n break;\r\n }\r\n return op;\r\n });\r\n\r\n /**\r\n * Close the current path. The PDF \"h\" operator.\r\n * @name close\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n var close = (API.close = function() {\r\n out(\"h\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Stroke the path. The PDF \"S\" operator.\r\n * @name stroke\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.stroke = function() {\r\n out(\"S\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n * @name fill\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fill = function(pattern) {\r\n fillWithOptionalPattern(\"f\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the even-odd rule. The PDF f* operator.\r\n * @see API.fill\r\n * @name fillEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"f*\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStroke\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStroke = function(pattern) {\r\n fillWithOptionalPattern(\"B\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStrokeEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStrokeEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"B*\", pattern);\r\n return this;\r\n };\r\n\r\n var fillWithOptionalPattern = function(style, pattern) {\r\n if (typeof pattern === \"object\") {\r\n fillWithPattern(pattern, style);\r\n } else {\r\n out(style);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n if (\r\n style === null ||\r\n (apiMode === ApiMode.ADVANCED && style === undefined)\r\n ) {\r\n return;\r\n }\r\n\r\n style = getStyle(style);\r\n\r\n // stroking / filling / both the path\r\n out(style);\r\n };\r\n\r\n function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n var clone = new TilingPattern(\r\n boundingBox || this.boundingBox,\r\n xStep || this.xStep,\r\n yStep || this.yStep,\r\n this.gState,\r\n matrix || this.matrix\r\n );\r\n clone.stream = this.stream;\r\n var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n addPattern(key, clone);\r\n return clone;\r\n }\r\n\r\n var fillWithPattern = function(patternData, style) {\r\n var patternId = patternMap[patternData.key];\r\n var pattern = patterns[patternId];\r\n\r\n if (pattern instanceof ShadingPattern) {\r\n out(\"q\");\r\n\r\n out(clipRuleFromStyle(style));\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n out(patternData.matrix.toString() + \" cm\");\r\n out(\"/\" + patternId + \" sh\");\r\n out(\"Q\");\r\n } else if (pattern instanceof TilingPattern) {\r\n // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n // so we must flip them\r\n var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n if (patternData.matrix) {\r\n matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n // for each use\r\n patternId = cloneTilingPattern.call(\r\n pattern,\r\n patternData.key,\r\n patternData.boundingBox,\r\n patternData.xStep,\r\n patternData.yStep,\r\n matrix\r\n ).id;\r\n }\r\n\r\n out(\"q\");\r\n out(\"/Pattern cs\");\r\n out(\"/\" + patternId + \" scn\");\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n\r\n out(style);\r\n out(\"Q\");\r\n }\r\n };\r\n\r\n var clipRuleFromStyle = function(style) {\r\n switch (style) {\r\n case \"f\":\r\n case \"F\":\r\n return \"W n\";\r\n case \"f*\":\r\n return \"W* n\";\r\n case \"B\":\r\n return \"W S\";\r\n case \"B*\":\r\n return \"W* S\";\r\n\r\n // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n case \"S\":\r\n return \"W S\";\r\n case \"n\":\r\n return \"W n\";\r\n }\r\n };\r\n\r\n /**\r\n * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @name moveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var moveTo = (API.moveTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @memberof jsPDF#\r\n * @name lineTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var lineTo = (API.lineTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x3\r\n * @param {number} y3\r\n * @memberof jsPDF#\r\n * @name curveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n out(\r\n [\r\n hpf(scale(x1)),\r\n hpf(transformScaleY(y1)),\r\n hpf(scale(x2)),\r\n hpf(transformScaleY(y2)),\r\n hpf(scale(x3)),\r\n hpf(transformScaleY(y3)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n return this;\r\n });\r\n\r\n /**\r\n * Draw a line on the current page.\r\n *\r\n * @name line\r\n * @function\r\n * @instance\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n } else {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n }\r\n };\r\n\r\n /**\r\n * @typedef {Object} PatternData\r\n * {Matrix|undefined} matrix\r\n * {Number|undefined} xStep\r\n * {Number|undefined} yStep\r\n * {Array.|undefined} boundingBox\r\n */\r\n\r\n /**\r\n * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n * All data points in `lines` are relative to last line origin.\r\n * `x`, `y` become x1,y1 for first line / curve in the set.\r\n * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n *\r\n * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name lines\r\n */\r\n API.__private__.lines = API.lines = function(\r\n lines,\r\n x,\r\n y,\r\n scale,\r\n style,\r\n closed\r\n ) {\r\n var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n // in effort to make all calls have similar signature like\r\n // function(content, coordinateX, coordinateY , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (typeof lines === \"number\") {\r\n tmp = y;\r\n y = x;\r\n x = lines;\r\n lines = tmp;\r\n }\r\n\r\n scale = scale || [1, 1];\r\n closed = closed || false;\r\n\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n !Array.isArray(lines) ||\r\n !Array.isArray(scale) ||\r\n !isValidStyle(style) ||\r\n typeof closed !== \"boolean\"\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n }\r\n\r\n // starting point\r\n moveTo(x, y);\r\n\r\n scalex = scale[0];\r\n scaley = scale[1];\r\n l = lines.length;\r\n //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n x4 = x; // last / ending point = starting point for first item.\r\n y4 = y; // last / ending point = starting point for first item.\r\n\r\n for (i = 0; i < l; i++) {\r\n leg = lines[i];\r\n if (leg.length === 2) {\r\n // simple line\r\n x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n lineTo(x4, y4);\r\n } else {\r\n // bezier curve\r\n x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n curveTo(x2, y2, x3, y3, x4, y4);\r\n }\r\n }\r\n\r\n if (closed) {\r\n close();\r\n }\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n * six and \"h\" an empty array (or undefined).\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name path\r\n */\r\n API.path = function(lines) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var leg = lines[i];\r\n var coords = leg.c;\r\n switch (leg.op) {\r\n case \"m\":\r\n moveTo(coords[0], coords[1]);\r\n break;\r\n case \"l\":\r\n lineTo(coords[0], coords[1]);\r\n break;\r\n case \"c\":\r\n curveTo.apply(this, coords);\r\n break;\r\n case \"h\":\r\n close();\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name rect\r\n */\r\n API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n h = -h;\r\n }\r\n\r\n out(\r\n [\r\n hpf(scale(x)),\r\n hpf(transformScaleY(y)),\r\n hpf(scale(w)),\r\n hpf(scale(h)),\r\n \"re\"\r\n ].join(\" \")\r\n );\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a triangle to PDF.\r\n *\r\n * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name triangle\r\n */\r\n API.__private__.triangle = API.triangle = function(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n style\r\n ) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n isNaN(x3) ||\r\n isNaN(y3) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n }\r\n this.lines(\r\n [\r\n [x2 - x1, y2 - y1], // vector to point 2\r\n [x3 - x2, y3 - y2], // vector to point 3\r\n [x1 - x3, y1 - y3] // closing vector back to point 1\r\n ],\r\n x1,\r\n y1, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle with rounded corners to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name roundedRect\r\n */\r\n API.__private__.roundedRect = API.roundedRect = function(\r\n x,\r\n y,\r\n w,\r\n h,\r\n rx,\r\n ry,\r\n style\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(w) ||\r\n isNaN(h) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n }\r\n var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n rx = Math.min(rx, w * 0.5);\r\n ry = Math.min(ry, h * 0.5);\r\n\r\n this.lines(\r\n [\r\n [w - 2 * rx, 0],\r\n [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n [0, h - 2 * ry],\r\n [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n [-w + 2 * rx, 0],\r\n [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n [0, -h + 2 * ry],\r\n [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n ],\r\n x + rx,\r\n y, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an ellipse to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name ellipse\r\n */\r\n API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n }\r\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n moveTo(x + rx, y);\r\n curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an circle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} r Radius (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name circle\r\n */\r\n API.__private__.circle = API.circle = function(x, y, r, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n }\r\n return this.ellipse(x, y, r, r, style);\r\n };\r\n\r\n /**\r\n * Sets text font face, variant for upcoming text elements.\r\n * See output of jsPDF.getFontList() for possible font names, styles.\r\n *\r\n * @param {string} fontName Font name or family. Example: \"times\".\r\n * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFont\r\n */\r\n API.setFont = function(fontName, fontStyle, fontWeight) {\r\n if (fontWeight) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n activeFontKey = getFont(fontName, fontStyle, {\r\n disableWarning: false\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets text font face, variant for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {Object}\r\n * @memberof jsPDF#\r\n * @name getFont\r\n */\r\n var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n return fonts[getFont.apply(API, arguments)];\r\n });\r\n\r\n /**\r\n * Returns an object - a tree of fontName to fontStyle relationships available to\r\n * active PDF document.\r\n *\r\n * @public\r\n * @function\r\n * @instance\r\n * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n * @memberof jsPDF#\r\n * @name getFontList\r\n */\r\n API.__private__.getFontList = API.getFontList = function() {\r\n var list = {},\r\n fontName,\r\n fontStyle;\r\n\r\n for (fontName in fontmap) {\r\n if (fontmap.hasOwnProperty(fontName)) {\r\n list[fontName] = [];\r\n for (fontStyle in fontmap[fontName]) {\r\n if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n list[fontName].push(fontStyle);\r\n }\r\n }\r\n }\r\n }\r\n return list;\r\n };\r\n\r\n /**\r\n * Add a custom font to the current instance.\r\n *\r\n * @param {string} postScriptName PDF specification full name for the font.\r\n * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n * @param {string} fontStyle Style of the Font.\r\n * @param {number | string} fontWeight Weight of the Font.\r\n * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @name addFont\r\n * @returns {string} fontId\r\n */\r\n API.addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n fontWeight,\r\n encoding\r\n ) {\r\n var encodingOptions = [\r\n \"StandardEncoding\",\r\n \"MacRomanEncoding\",\r\n \"Identity-H\",\r\n \"WinAnsiEncoding\"\r\n ];\r\n if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n //IE 11 fix\r\n encoding = arguments[3];\r\n } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n encoding = encoding || \"Identity-H\";\r\n return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n };\r\n\r\n var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n /**\r\n * Gets the line width, default: 0.200025.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineWidth\r\n * @memberof jsPDF#\r\n * @name getLineWidth\r\n */\r\n var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n return lineWidth;\r\n });\r\n\r\n /**\r\n * Sets line width for upcoming lines.\r\n *\r\n * @param {number} width Line width (in units declared at inception of PDF document).\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineWidth\r\n */\r\n var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n width\r\n ) {\r\n lineWidth = width;\r\n out(hpf(scale(width)) + \" w\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Sets the dash pattern for upcoming lines.\r\n *\r\n * To reset the settings simply call the method without any parameters.\r\n * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n * @param {number} dashPhase The phase lines start with.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineDashPattern\r\n */\r\n API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n dashArray,\r\n dashPhase\r\n ) {\r\n dashArray = dashArray || [];\r\n dashPhase = dashPhase || 0;\r\n\r\n if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n }\r\n\r\n dashArray = dashArray\r\n .map(function(x) {\r\n return hpf(scale(x));\r\n })\r\n .join(\" \");\r\n dashPhase = hpf(scale(dashPhase));\r\n\r\n out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n return this;\r\n };\r\n\r\n var lineHeightFactor;\r\n\r\n var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n });\r\n\r\n API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n };\r\n\r\n /**\r\n * Sets the LineHeightFactor of proportion.\r\n *\r\n * @param {number} value LineHeightFactor value. Default: 1.15.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineHeightFactor\r\n */\r\n var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n value\r\n ) {\r\n value = value || 1.15;\r\n if (typeof value === \"number\") {\r\n lineHeightFactor = value;\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * Gets the LineHeightFactor, default: 1.15.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineHeightFactor\r\n * @memberof jsPDF#\r\n * @name getLineHeightFactor\r\n */\r\n var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n return lineHeightFactor;\r\n });\r\n\r\n setLineHeightFactor(options.lineHeight);\r\n\r\n var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n value\r\n ) {\r\n return scale(value);\r\n });\r\n\r\n var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n value\r\n ) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n return value;\r\n } else {\r\n var pageHeight =\r\n pagesContext[currentPage].mediaBox.topRightY -\r\n pagesContext[currentPage].mediaBox.bottomLeftY;\r\n return pageHeight - scale(value);\r\n }\r\n });\r\n\r\n var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getHorizontalCoordinate(value));\r\n });\r\n\r\n var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getVerticalCoordinate(value));\r\n });\r\n\r\n var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n /**\r\n * Gets the stroke color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getDrawColor\r\n */\r\n API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n return decodeColorString(strokeColor);\r\n };\r\n\r\n /**\r\n * Sets the stroke color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDrawColor\r\n */\r\n API.__private__.setStrokeColor = API.setDrawColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"draw\",\r\n precision: 2\r\n };\r\n\r\n strokeColor = encodeColorString(options);\r\n out(strokeColor);\r\n return this;\r\n };\r\n\r\n var fillColor = options.fillColor || \"0 g\";\r\n\r\n /**\r\n * Gets the fill color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getFillColor\r\n */\r\n API.__private__.getFillColor = API.getFillColor = function() {\r\n return decodeColorString(fillColor);\r\n };\r\n\r\n /**\r\n * Sets the fill color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFillColor\r\n */\r\n API.__private__.setFillColor = API.setFillColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"fill\",\r\n precision: 2\r\n };\r\n\r\n fillColor = encodeColorString(options);\r\n out(fillColor);\r\n return this;\r\n };\r\n\r\n var textColor = options.textColor || \"0 g\";\r\n /**\r\n * Gets the text color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getTextColor\r\n */\r\n var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n return decodeColorString(textColor);\r\n });\r\n /**\r\n * Sets the text color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setTextColor\r\n */\r\n API.__private__.setTextColor = API.setTextColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"text\",\r\n precision: 3\r\n };\r\n textColor = encodeColorString(options);\r\n\r\n return this;\r\n };\r\n\r\n var activeCharSpace = options.charSpace;\r\n\r\n /**\r\n * Get global value of CharSpace.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} charSpace\r\n * @memberof jsPDF#\r\n * @name getCharSpace\r\n */\r\n var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n return parseFloat(activeCharSpace || 0);\r\n });\r\n\r\n /**\r\n * Set global value of CharSpace.\r\n *\r\n * @param {number} charSpace\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setCharSpace\r\n */\r\n API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n if (isNaN(charSpace)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n }\r\n activeCharSpace = charSpace;\r\n return this;\r\n };\r\n\r\n var lineCapID = 0;\r\n /**\r\n * Is an Object providing a mapping from human-readable to\r\n * integer flag values designating the varieties of line cap\r\n * and join styles.\r\n *\r\n * @memberof jsPDF#\r\n * @name CapJoinStyles\r\n */\r\n API.CapJoinStyles = {\r\n 0: 0,\r\n butt: 0,\r\n but: 0,\r\n miter: 0,\r\n 1: 1,\r\n round: 1,\r\n rounded: 1,\r\n circle: 1,\r\n 2: 2,\r\n projecting: 2,\r\n project: 2,\r\n square: 2,\r\n bevel: 2\r\n };\r\n\r\n /**\r\n * Sets the line cap styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line cap.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineCap\r\n */\r\n API.__private__.setLineCap = API.setLineCap = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line cap style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineCapID = id;\r\n out(id + \" J\");\r\n\r\n return this;\r\n };\r\n\r\n var lineJoinID = 0;\r\n /**\r\n * Sets the line join styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line join.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineJoin\r\n */\r\n API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line join style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineJoinID = id;\r\n out(id + \" j\");\r\n\r\n return this;\r\n };\r\n\r\n var miterLimit;\r\n /**\r\n * Sets the miterLimit property, which effects the maximum miter length.\r\n *\r\n * @param {number} length The length of the miter\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineMiterLimit\r\n */\r\n API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n length\r\n ) {\r\n length = length || 0;\r\n if (isNaN(length)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n }\r\n out(hpf(scale(length)) + \" M\");\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * An object representing a pdf graphics state.\r\n * @class GState\r\n */\r\n\r\n /**\r\n *\r\n * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n * Supported are: opacity, stroke-opacity\r\n * @constructor\r\n */\r\n API.GState = GState;\r\n\r\n /**\r\n * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n * it will be added before use.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setGState\r\n */\r\n API.setGState = function(gState) {\r\n if (typeof gState === \"string\") {\r\n gState = gStates[gStatesMap[gState]];\r\n } else {\r\n gState = addGState(null, gState);\r\n }\r\n\r\n if (!gState.equals(activeGState)) {\r\n out(\"/\" + gState.id + \" gs\");\r\n activeGState = gState;\r\n }\r\n };\r\n\r\n /**\r\n * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n * @param {String} key Might also be null, if no later reference to this gState is needed\r\n * @param {Object} gState The gState object\r\n */\r\n var addGState = function(key, gState) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (key && gStatesMap[key]) return;\r\n var duplicate = false;\r\n for (var s in gStates) {\r\n if (gStates.hasOwnProperty(s)) {\r\n if (gStates[s].equals(gState)) {\r\n duplicate = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (duplicate) {\r\n gState = gStates[s];\r\n } else {\r\n var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n gStates[gStateKey] = gState;\r\n gState.id = gStateKey;\r\n }\r\n\r\n // several user keys may point to the same GState object\r\n key && (gStatesMap[key] = gState.id);\r\n\r\n events.publish(\"addGState\", gState);\r\n\r\n return gState;\r\n };\r\n\r\n /**\r\n * Adds a new {@link GState} for later use. See {@link setGState}.\r\n * @param {String} key\r\n * @param {GState} gState\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addGState\r\n */\r\n API.addGState = function(key, gState) {\r\n addGState(key, gState);\r\n return this;\r\n };\r\n\r\n /**\r\n * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n * fill and stroke colors etc.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name saveGraphicsState\r\n */\r\n API.saveGraphicsState = function() {\r\n out(\"q\");\r\n // as we cannot set font key and size independently we must keep track of both\r\n fontStateStack.push({\r\n key: activeFontKey,\r\n size: activeFontSize,\r\n color: textColor\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name restoreGraphicsState\r\n */\r\n API.restoreGraphicsState = function() {\r\n out(\"Q\");\r\n\r\n // restore previous font state\r\n var fontState = fontStateStack.pop();\r\n activeFontKey = fontState.key;\r\n activeFontSize = fontState.size;\r\n textColor = fontState.color;\r\n\r\n activeGState = null;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Appends this matrix to the left of all previously applied matrices.\r\n *\r\n * @param {Matrix} matrix\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setCurrentTransformationMatrix\r\n */\r\n API.setCurrentTransformationMatrix = function(matrix) {\r\n out(matrix.toString() + \" cm\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Inserts a debug comment into the generated pdf.\r\n * @function\r\n * @instance\r\n * @param {String} text\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name comment\r\n */\r\n API.comment = function(text) {\r\n out(\"#\" + text);\r\n return this;\r\n };\r\n\r\n /**\r\n * Point\r\n */\r\n var Point = function(x, y) {\r\n var _x = x || 0;\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n get: function() {\r\n return _x;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _x = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _y = y || 0;\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n get: function() {\r\n return _y;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _y = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _type = \"pt\";\r\n Object.defineProperty(this, \"type\", {\r\n enumerable: true,\r\n get: function() {\r\n return _type;\r\n },\r\n set: function(value) {\r\n _type = value.toString();\r\n }\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Rectangle\r\n */\r\n var Rectangle = function(x, y, w, h) {\r\n Point.call(this, x, y);\r\n this.type = \"rect\";\r\n\r\n var _w = w || 0;\r\n Object.defineProperty(this, \"w\", {\r\n enumerable: true,\r\n get: function() {\r\n return _w;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _w = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _h = h || 0;\r\n Object.defineProperty(this, \"h\", {\r\n enumerable: true,\r\n get: function() {\r\n return _h;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _h = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * FormObject/RenderTarget\r\n */\r\n\r\n var RenderTarget = function() {\r\n this.page = page;\r\n this.currentPage = currentPage;\r\n this.pages = pages.slice(0);\r\n this.pagesContext = pagesContext.slice(0);\r\n this.x = pageX;\r\n this.y = pageY;\r\n this.matrix = pageMatrix;\r\n this.width = getPageWidth(currentPage);\r\n this.height = getPageHeight(currentPage);\r\n this.outputDestination = outputDestination;\r\n\r\n this.id = \"\"; // set by endFormObject()\r\n this.objectNumber = -1; // will be set by putXObject()\r\n };\r\n\r\n RenderTarget.prototype.restore = function() {\r\n page = this.page;\r\n currentPage = this.currentPage;\r\n pagesContext = this.pagesContext;\r\n pages = this.pages;\r\n pageX = this.x;\r\n pageY = this.y;\r\n pageMatrix = this.matrix;\r\n setPageWidth(currentPage, this.width);\r\n setPageHeight(currentPage, this.height);\r\n outputDestination = this.outputDestination;\r\n };\r\n\r\n var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n // save current state\r\n renderTargetStack.push(new RenderTarget());\r\n\r\n // clear pages\r\n page = currentPage = 0;\r\n pages = [];\r\n pageX = x;\r\n pageY = y;\r\n\r\n pageMatrix = matrix;\r\n\r\n beginPage([width, height]);\r\n };\r\n\r\n var endFormObject = function(key) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (renderTargetMap[key]) {\r\n renderTargetStack.pop().restore();\r\n return;\r\n }\r\n\r\n // save the created xObject\r\n var newXObject = new RenderTarget();\r\n\r\n var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n newXObject.id = xObjectId;\r\n\r\n renderTargetMap[key] = xObjectId;\r\n renderTargets[xObjectId] = newXObject;\r\n\r\n events.publish(\"addFormObject\", newXObject);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n /**\r\n * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n * {@link doFormObject}. Nested form objects are possible.\r\n * x, y, width, height set the bounding box that is used to clip the content.\r\n *\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n * the parent's.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name beginFormObject\r\n */\r\n API.beginFormObject = function(x, y, width, height, matrix) {\r\n // The user can set the output target to a new form object. Nested form objects are possible.\r\n // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n // the PDF-Spec states:\r\n // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n // recommended although not required\"\r\n beginNewRenderTarget(x, y, width, height, matrix);\r\n return this;\r\n };\r\n\r\n /**\r\n * Completes and saves the form object.\r\n * @param {String} key The key by which this form object can be referenced.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name endFormObject\r\n */\r\n API.endFormObject = function(key) {\r\n endFormObject(key);\r\n return this;\r\n };\r\n\r\n /**\r\n * Draws the specified form object by referencing to the respective pdf XObject created with\r\n * {@link API.beginFormObject} and {@link endFormObject}.\r\n * The location is determined by matrix.\r\n *\r\n * @param {String} key The key to the form object.\r\n * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name doFormObject\r\n */\r\n API.doFormObject = function(key, matrix) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n out(\"q\");\r\n out(matrix.toString() + \" cm\");\r\n out(\"/\" + xObject.id + \" Do\");\r\n out(\"Q\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Returns the form object specified by key.\r\n * @param key {String}\r\n * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name getFormObject\r\n */\r\n API.getFormObject = function(key) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n return {\r\n x: xObject.x,\r\n y: xObject.y,\r\n width: xObject.width,\r\n height: xObject.height,\r\n matrix: xObject.matrix\r\n };\r\n };\r\n\r\n /**\r\n * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n * Uses FileSaver.js-method saveAs.\r\n *\r\n * @memberof jsPDF#\r\n * @name save\r\n * @function\r\n * @instance\r\n * @param {string} filename The filename including extension.\r\n * @param {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n * @returns {jsPDF|Promise} jsPDF-instance */\r\n API.save = function(filename, options) {\r\n filename = filename || \"generated.pdf\";\r\n\r\n options = options || {};\r\n options.returnPromise = options.returnPromise || false;\r\n\r\n if (options.returnPromise === false) {\r\n saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n return this;\r\n } else {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n var result = saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n resolve(result);\r\n } catch (e) {\r\n reject(e.message);\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n // applying plugins (more methods) ON TOP of built-in API.\r\n // this is intentional as we allow plugins to override\r\n // built-ins\r\n for (var plugin in jsPDF.API) {\r\n if (jsPDF.API.hasOwnProperty(plugin)) {\r\n if (plugin === \"events\" && jsPDF.API.events.length) {\r\n (function(events, newEvents) {\r\n // jsPDF.API.events is a JS Array of Arrays\r\n // where each Array is a pair of event name, handler\r\n // Events were added by plugins to the jsPDF instantiator.\r\n // These are always added to the new instance and some ran\r\n // during instantiation.\r\n var eventname, handler_and_args, i;\r\n\r\n for (i = newEvents.length - 1; i !== -1; i--) {\r\n // subscribe takes 3 args: 'topic', function, runonce_flag\r\n // if undefined, runonce is false.\r\n // users can attach callback directly,\r\n // or they can attach an array with [callback, runonce_flag]\r\n // that's what the \"apply\" magic is for below.\r\n eventname = newEvents[i][0];\r\n handler_and_args = newEvents[i][1];\r\n events.subscribe.apply(\r\n events,\r\n [eventname].concat(\r\n typeof handler_and_args === \"function\"\r\n ? [handler_and_args]\r\n : handler_and_args\r\n )\r\n );\r\n }\r\n })(events, jsPDF.API.events);\r\n } else {\r\n API[plugin] = jsPDF.API[plugin];\r\n }\r\n }\r\n }\r\n\r\n var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightX -\r\n pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightX =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n });\r\n\r\n var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightY -\r\n pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightY =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n });\r\n\r\n /**\r\n * Object exposing internal API to plugins\r\n * @public\r\n * @ignore\r\n */\r\n API.internal = {\r\n pdfEscape: pdfEscape,\r\n getStyle: getStyle,\r\n getFont: getFontEntry,\r\n getFontSize: getFontSize,\r\n getCharSpace: getCharSpace,\r\n getTextColor: getTextColor,\r\n getLineHeight: getLineHeight,\r\n getLineHeightFactor: getLineHeightFactor,\r\n getLineWidth: getLineWidth,\r\n write: write,\r\n getHorizontalCoordinate: getHorizontalCoordinate,\r\n getVerticalCoordinate: getVerticalCoordinate,\r\n getCoordinateString: getHorizontalCoordinateString,\r\n getVerticalCoordinateString: getVerticalCoordinateString,\r\n collections: {},\r\n newObject: newObject,\r\n newAdditionalObject: newAdditionalObject,\r\n newObjectDeferred: newObjectDeferred,\r\n newObjectDeferredBegin: newObjectDeferredBegin,\r\n getFilters: getFilters,\r\n putStream: putStream,\r\n events: events,\r\n scaleFactor: scaleFactor,\r\n pageSize: {\r\n getWidth: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n setWidth: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n getHeight: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n setHeight: function(value) {\r\n setPageHeight(currentPage, value);\r\n }\r\n },\r\n encryptionOptions: encryptionOptions,\r\n encryption: encryption,\r\n getEncryptor: getEncryptor,\r\n output: output,\r\n getNumberOfPages: getNumberOfPages,\r\n pages: pages,\r\n out: out,\r\n f2: f2,\r\n f3: f3,\r\n getPageInfo: getPageInfo,\r\n getPageInfoByObjId: getPageInfoByObjId,\r\n getCurrentPageInfo: getCurrentPageInfo,\r\n getPDFVersion: getPdfVersion,\r\n Point: Point,\r\n Rectangle: Rectangle,\r\n Matrix: Matrix,\r\n hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n };\r\n\r\n Object.defineProperty(API.internal.pageSize, \"width\", {\r\n get: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n set: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(API.internal.pageSize, \"height\", {\r\n get: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n set: function(value) {\r\n setPageHeight(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // continuing initialization of jsPDF Document object\r\n //////////////////////////////////////////////////////\r\n // Add the first page automatically\r\n addFonts.call(API, standardFonts);\r\n activeFontKey = \"F1\";\r\n _addPage(format, orientation);\r\n\r\n events.publish(\"initialized\");\r\n return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n * // 'this' will be ref to internal API object. see jsPDF source\r\n * // , so you can refer to built-in methods like so:\r\n * // this.line(....)\r\n * // this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\(/g, \"\\\\(\")\n .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n return value\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\\(/g, \"(\")\n .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n var xobj = new AcroFormXObject();\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number |= bitMask;\n\n return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number &= ~bitMask;\n\n return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n );\n }\n return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n );\n }\n return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n );\n }\n return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n );\n }\n return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n args,\n scope\n) {\n var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n var x = args[0];\n var y = args[1];\n var w = args[2];\n var h = args[3];\n\n var coordinates = {};\n\n coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n return [\n Number(f2(coordinates.lowerLeft_X)),\n Number(f2(coordinates.lowerLeft_Y)),\n Number(f2(coordinates.upperRight_X)),\n Number(f2(coordinates.upperRight_Y))\n ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n if (formObject.appearanceStreamContent) {\n return formObject.appearanceStreamContent;\n }\n\n if (!formObject.V && !formObject.DV) {\n return;\n }\n\n // else calculate it\n\n var stream = [];\n var text = formObject._V || formObject.DV;\n var calcRes = calculateX(formObject, text);\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n\n //PDF 32000-1:2008, page 444\n stream.push(\"/Tx BMC\");\n stream.push(\"q\");\n stream.push(\"BT\"); // Begin Text\n stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n stream.push(calcRes.text);\n stream.push(\"ET\"); // End Text\n stream.push(\"Q\");\n stream.push(\"EMC\");\n\n var appearanceStreamContent = createFormXObject(formObject);\n appearanceStreamContent.scope = formObject.scope;\n appearanceStreamContent.stream = stream.join(\"\\n\");\n return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n var maxFontSize =\n formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n var returnValue = {\n text: \"\",\n fontSize: \"\"\n };\n // Remove Brackets\n text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n text =\n text.substr(text.length - 1) == \")\"\n ? text.substr(0, text.length - 1)\n : text;\n // split into array of words\n var textSplit = text.split(\" \");\n if (formObject.multiline) {\n textSplit = textSplit.map(word => word.split(\"\\n\"));\n } else {\n textSplit = textSplit.map(word => [word]);\n }\n\n var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n var lineSpacing = 2;\n var borderPadding = 2;\n\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n height = height < 0 ? -height : height;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n width = width < 0 ? -width : width;\n\n var isSmallerThanWidth = function(i, lastLine, fontSize) {\n if (i + 1 < textSplit.length) {\n var tmp = lastLine + \" \" + textSplit[i + 1][0];\n var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n var FieldWidth = width - 2 * borderPadding;\n return TextWidth <= FieldWidth;\n } else {\n return false;\n }\n };\n\n fontSize++;\n FontSize: while (fontSize > 0) {\n text = \"\";\n fontSize--;\n var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n var startY = formObject.multiline\n ? height - fontSize\n : (height - textHeight) / 2;\n startY += lineSpacing;\n var startX;\n\n var lastY = startY;\n var firstWordInLine = 0,\n lastWordInLine = 0;\n var lastLength;\n var currWord = 0;\n\n if (fontSize <= 0) {\n // In case, the Text doesn't fit at all\n fontSize = 12;\n text = \"(...) Tj\\n\";\n text +=\n \"% Width of Text: \" +\n calculateFontSpace(text, formObject, fontSize).width +\n \", FieldWidth:\" +\n width +\n \"\\n\";\n break;\n }\n\n var lastLine = \"\";\n var lineCount = 0;\n Line: for (var i = 0; i < textSplit.length; i++) {\n if (textSplit.hasOwnProperty(i)) {\n let isWithNewLine = false;\n if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n continue FontSize;\n }\n\n lastLine += textSplit[i][currWord];\n isWithNewLine = true;\n lastWordInLine = i;\n i--;\n } else {\n lastLine += textSplit[i][currWord] + \" \";\n lastLine =\n lastLine.substr(lastLine.length - 1) == \" \"\n ? lastLine.substr(0, lastLine.length - 1)\n : lastLine;\n var key = parseInt(i);\n var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n var isLastWord = i >= textSplit.length - 1;\n\n if (nextLineIsSmaller && !isLastWord) {\n lastLine += \" \";\n currWord = 0;\n continue; // Line\n } else if (!nextLineIsSmaller && !isLastWord) {\n if (!formObject.multiline) {\n continue FontSize;\n } else {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the\n // FieldObject\n continue FontSize;\n }\n lastWordInLine = key;\n // go on\n }\n } else if (isLastWord) {\n lastWordInLine = key;\n } else {\n if (\n formObject.multiline &&\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the FieldObject\n continue FontSize;\n }\n }\n }\n // Remove last blank\n\n var line = \"\";\n\n for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n var currLine = textSplit[x];\n if (formObject.multiline) {\n if (x === lastWordInLine) {\n line += currLine[currWord] + \" \";\n currWord = (currWord + 1) % currLine.length;\n continue;\n }\n if (x === firstWordInLine) {\n line += currLine[currLine.length - 1] + \" \";\n continue;\n }\n }\n line += currLine[0] + \" \";\n }\n\n // Remove last blank\n line =\n line.substr(line.length - 1) == \" \"\n ? line.substr(0, line.length - 1)\n : line;\n // lastLength -= blankSpace.width;\n lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n // Calculate startX\n switch (formObject.textAlign) {\n case \"right\":\n startX = width - lastLength - borderPadding;\n break;\n case \"center\":\n startX = (width - lastLength) / 2;\n break;\n case \"left\":\n default:\n startX = borderPadding;\n break;\n }\n text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n // reset X in PDF\n text += -f2(startX) + \" 0 Td\\n\";\n\n // After a Line, adjust y position\n lastY = -(fontSize + lineSpacing);\n\n // Reset for next iteration step\n lastLength = 0;\n firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n lineCount++;\n\n lastLine = \"\";\n continue Line;\n }\n }\n break;\n }\n\n returnValue.text = text;\n returnValue.fontSize = fontSize;\n\n return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n var font = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n );\n var width =\n formObject.scope.getStringUnitWidth(text, {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) * parseFloat(fontSize);\n var height =\n formObject.scope.getStringUnitWidth(\"3\", {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) *\n parseFloat(fontSize) *\n 1.5;\n return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n fields: [],\n xForms: [],\n /**\n * acroFormDictionaryRoot contains information about the AcroForm\n * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n * 1: The Object ID of the Root\n */\n acroFormDictionaryRoot: null,\n /**\n * After the PDF gets evaluated, the reference to the root has to be\n * reset, this indicates, whether the root has already been printed\n * out\n */\n printedOut: false,\n internal: null,\n isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n //set objId to undefined and force it to get a new objId on buildDocument\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n for (var i in fields) {\n if (fields.hasOwnProperty(i)) {\n var formObject = fields[i];\n //set objId to undefined and force it to get a new objId on buildDocument\n formObject.objId = undefined;\n // add Annot Reference!\n if (formObject.hasAnnotation) {\n // If theres an Annotation Widget in the Form Object, put the\n // Reference in the /Annot array\n createAnnotationReference(formObject, scope);\n }\n }\n }\n};\n\nvar putForm = function(formObject) {\n if (formObject.scope.internal.acroformPlugin.printedOut) {\n formObject.scope.internal.acroformPlugin.printedOut = false;\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n }\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n formObject\n );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n var options = {\n type: \"reference\",\n object: object\n };\n var findEntry = function(entry) {\n return entry.type === options.type && entry.object === options.object;\n };\n if (\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.find(findEntry) === undefined\n ) {\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.push(options);\n }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n // Put reference to AcroForm to DocumentCatalog\n if (\n typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n ) {\n // for safety, shouldn't normally be the case\n scope.internal.write(\n \"/AcroForm \" +\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n \" \" +\n 0 +\n \" R\"\n );\n } else {\n throw new Error(\"putCatalogCallback: Root missing.\");\n }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n // Remove event\n scope.internal.events.unsubscribe(\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n );\n delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n var standardFields = !fieldArray;\n\n if (!fieldArray) {\n // in case there is no fieldArray specified, we want to print out\n // the Fields of the AcroForm\n // Print out Root\n scope.internal.newObjectDeferredBegin(\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n true\n );\n scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n }\n\n fieldArray =\n fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var fieldObject = fieldArray[i];\n var keyValueList = [];\n var oldRect = fieldObject.Rect;\n\n if (fieldObject.Rect) {\n fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n }\n\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n fieldObject\n );\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.getKeyValueListForStream === \"function\"\n ) {\n keyValueList = fieldObject.getKeyValueListForStream();\n }\n\n fieldObject.Rect = oldRect;\n\n if (\n fieldObject.hasAppearanceStream &&\n !fieldObject.appearanceStreamContent\n ) {\n // Calculate Appearance\n var appearance = calculateAppearanceStream(fieldObject);\n keyValueList.push({ key: \"AP\", value: \"<>\" });\n\n scope.internal.acroformPlugin.xForms.push(appearance);\n }\n\n // Assume AppearanceStreamContent is a Array with N,R,D (at least\n // one of them!)\n if (fieldObject.appearanceStreamContent) {\n var appearanceStreamString = \"\";\n // Iterate over N,R and D\n for (var k in fieldObject.appearanceStreamContent) {\n if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n var value = fieldObject.appearanceStreamContent[k];\n appearanceStreamString += \"/\" + k + \" \";\n appearanceStreamString += \"<<\";\n if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n // appearanceStream is an Array or Object!\n for (var i in value) {\n if (value.hasOwnProperty(i)) {\n var obj = value[i];\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order\n // to get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n // In case the XForm is already used, e.g. OffState\n // of CheckBoxes, don't add it\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n }\n } else {\n obj = value;\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order to\n // get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj;\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n appearanceStreamString += \">>\";\n }\n }\n\n // appearance stream is a normal Object..\n keyValueList.push({\n key: \"AP\",\n value: \"<<\\n\" + appearanceStreamString + \">>\"\n });\n }\n\n scope.internal.putStream({\n additionalKeyValues: keyValueList,\n objectId: fieldObject.objId\n });\n\n scope.internal.out(\"endobj\");\n }\n }\n if (standardFields) {\n createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var key = i;\n var fieldObject = fieldArray[i];\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.putStream === \"function\"\n ) {\n fieldObject.putStream();\n }\n delete fieldArray[key];\n }\n }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n formObject.scope = scope;\n if (\n scope.internal !== undefined &&\n (scope.internal.acroformPlugin === undefined ||\n scope.internal.acroformPlugin.isInitialized === false)\n ) {\n AcroFormField.FieldNum = 0;\n scope.internal.acroformPlugin = JSON.parse(\n JSON.stringify(acroformPluginTemplate)\n );\n if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n throw new Error(\"Exception while creating AcroformDictionary\");\n }\n scaleFactor = scope.internal.scaleFactor;\n // The Object Number of the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n // add Callback for creating the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n \"postPutResources\",\n function() {\n AcroFormDictionaryCallback(scope);\n }\n );\n\n scope.internal.events.subscribe(\"buildDocument\", function() {\n annotReferenceCallback(scope);\n }); // buildDocument\n\n // Register event, that is triggered when the DocumentCatalog is\n // written, in order to add /AcroForm\n\n scope.internal.events.subscribe(\"putCatalog\", function() {\n putCatalogCallback(scope);\n });\n\n // Register event, that creates all Fields\n scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n createFieldCallback(fieldArray, scope);\n });\n\n scope.internal.acroformPlugin.isInitialized = true;\n }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n array,\n objId,\n scope\n) {\n var encryptor = function(data) {\n return data;\n };\n if (Array.isArray(array)) {\n var content = \"[\";\n for (var i = 0; i < array.length; i++) {\n if (i !== 0) {\n content += \" \";\n }\n switch (typeof array[i]) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n content += array[i].toString();\n break;\n case \"string\":\n if (array[i].substr(0, 1) !== \"/\") {\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n } else {\n content += array[i].toString();\n }\n break;\n }\n }\n content += \"]\";\n return content;\n }\n throw new Error(\n \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n );\n});\nfunction getMatches(string, regex, index) {\n index || (index = 1); // default to the first capturing group\n var matches = [];\n var match;\n while ((match = regex.exec(string))) {\n matches.push(match[index]);\n }\n return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n var result = [];\n if (typeof array === \"string\") {\n result = getMatches(array, /\\((.*?)\\)/g);\n }\n return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n var encryptor = function(data) {\n return data;\n };\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n string = string || \"\";\n string.toString();\n string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n this._objId = undefined;\n this._scope = undefined;\n\n /**\n * @name AcroFormPDFObject#objId\n * @type {any}\n */\n Object.defineProperty(this, \"objId\", {\n get: function() {\n if (typeof this._objId === \"undefined\") {\n if (typeof this.scope === \"undefined\") {\n return undefined;\n }\n this._objId = this.scope.internal.newObjectDeferred();\n }\n return this._objId;\n },\n set: function(value) {\n this._objId = value;\n }\n });\n Object.defineProperty(this, \"scope\", {\n value: this._scope,\n writable: true\n });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n var keyValueList = this.getKeyValueListForStream();\n this.scope.internal.putStream({\n data: this.stream,\n additionalKeyValues: keyValueList,\n objectId: this.objId\n });\n this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n var keyValueList = [];\n var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n return (\n key != \"content\" &&\n key != \"appearanceStreamContent\" &&\n key != \"scope\" &&\n key != \"objId\" &&\n key.substring(0, 1) != \"_\"\n );\n });\n\n for (var i in keys) {\n if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n var key = keys[i];\n var value = this[key];\n\n if (value) {\n if (Array.isArray(value)) {\n keyValueList.push({\n key: key,\n value: arrayToPdfArray(value, this.objId, this.scope)\n });\n } else if (value instanceof AcroFormPDFObject) {\n // In case it is a reference to another PDFObject,\n // take the reference number\n value.scope = this.scope;\n keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n } else if (typeof value !== \"function\") {\n keyValueList.push({ key: key, value: value });\n }\n }\n }\n }\n return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n AcroFormPDFObject.call(this);\n\n Object.defineProperty(this, \"Type\", {\n value: \"/XObject\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"Subtype\", {\n value: \"/Form\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"FormType\", {\n value: 1,\n configurable: false,\n writable: true\n });\n\n var _BBox = [];\n Object.defineProperty(this, \"BBox\", {\n configurable: false,\n get: function() {\n return _BBox;\n },\n set: function(value) {\n _BBox = value;\n }\n });\n\n Object.defineProperty(this, \"Resources\", {\n value: \"2 0 R\",\n configurable: false,\n writable: true\n });\n\n var _stream;\n Object.defineProperty(this, \"stream\", {\n enumerable: false,\n configurable: true,\n set: function(value) {\n _stream = value.trim();\n },\n get: function() {\n if (_stream) {\n return _stream;\n } else {\n return null;\n }\n }\n });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n AcroFormPDFObject.call(this);\n\n var _Kids = [];\n\n Object.defineProperty(this, \"Kids\", {\n enumerable: false,\n configurable: true,\n get: function() {\n if (_Kids.length > 0) {\n return _Kids;\n } else {\n return undefined;\n }\n }\n });\n Object.defineProperty(this, \"Fields\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Kids;\n }\n });\n\n // Default Appearance\n var _DA;\n Object.defineProperty(this, \"DA\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DA) {\n return undefined;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n },\n set: function(value) {\n _DA = value;\n }\n });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n AcroFormPDFObject.call(this);\n\n //Annotation-Flag See Table 165\n var _F = 4;\n Object.defineProperty(this, \"F\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _F;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _F = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute F supplied.'\n );\n }\n }\n });\n\n /**\n * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n *\n * @name AcroFormField#showWhenPrinted\n * @default true\n * @type {boolean}\n */\n Object.defineProperty(this, \"showWhenPrinted\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(_F, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.F = setBitForPdf(_F, 3);\n } else {\n this.F = clearBitForPdf(_F, 3);\n }\n }\n });\n\n var _Ff = 0;\n Object.defineProperty(this, \"Ff\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Ff;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _Ff = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Ff supplied.'\n );\n }\n }\n });\n\n var _Rect = [];\n Object.defineProperty(this, \"Rect\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (_Rect.length === 0) {\n return undefined;\n }\n return _Rect;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Rect = value;\n } else {\n _Rect = [];\n }\n }\n });\n\n /**\n * The x-position of the field.\n *\n * @name AcroFormField#x\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[0])) {\n return 0;\n }\n return _Rect[0];\n },\n set: function(value) {\n _Rect[0] = value;\n }\n });\n\n /**\n * The y-position of the field.\n *\n * @name AcroFormField#y\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[1])) {\n return 0;\n }\n return _Rect[1];\n },\n set: function(value) {\n _Rect[1] = value;\n }\n });\n\n /**\n * The width of the field.\n *\n * @name AcroFormField#width\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[2])) {\n return 0;\n }\n return _Rect[2];\n },\n set: function(value) {\n _Rect[2] = value;\n }\n });\n\n /**\n * The height of the field.\n *\n * @name AcroFormField#height\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[3])) {\n return 0;\n }\n return _Rect[3];\n },\n set: function(value) {\n _Rect[3] = value;\n }\n });\n\n var _FT = \"\";\n Object.defineProperty(this, \"FT\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _FT;\n },\n set: function(value) {\n switch (value) {\n case \"/Btn\":\n case \"/Tx\":\n case \"/Ch\":\n case \"/Sig\":\n _FT = value;\n break;\n default:\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute FT supplied.'\n );\n }\n }\n });\n\n var _T = null;\n\n Object.defineProperty(this, \"T\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (!_T || _T.length < 1) {\n // In case of a Child from a Radio´Group, you don't need a FieldName\n if (this instanceof AcroFormChildClass) {\n return undefined;\n }\n _T = \"FieldObject\" + AcroFormField.FieldNum++;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n },\n set: function(value) {\n _T = value.toString();\n }\n });\n\n /**\n * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n *\n * @name AcroFormField#fieldName\n * @default null\n * @type {string}\n */\n Object.defineProperty(this, \"fieldName\", {\n configurable: true,\n enumerable: true,\n get: function() {\n return _T;\n },\n set: function(value) {\n _T = value;\n }\n });\n\n var _fontName = \"helvetica\";\n /**\n * The fontName of the font to be used.\n *\n * @name AcroFormField#fontName\n * @default 'helvetica'\n * @type {string}\n */\n Object.defineProperty(this, \"fontName\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontName;\n },\n set: function(value) {\n _fontName = value;\n }\n });\n\n var _fontStyle = \"normal\";\n /**\n * The fontStyle of the font to be used.\n *\n * @name AcroFormField#fontStyle\n * @default 'normal'\n * @type {string}\n */\n Object.defineProperty(this, \"fontStyle\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontStyle;\n },\n set: function(value) {\n _fontStyle = value;\n }\n });\n\n var _fontSize = 0;\n /**\n * The fontSize of the font to be used.\n *\n * @name AcroFormField#fontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"fontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontSize;\n },\n set: function(value) {\n _fontSize = value;\n }\n });\n\n var _maxFontSize = undefined;\n /**\n * The maximum fontSize of the font to be used.\n *\n * @name AcroFormField#maxFontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"maxFontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (_maxFontSize === undefined) {\n // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n return 50 / scaleFactor;\n } else {\n return _maxFontSize;\n }\n },\n set: function(value) {\n _maxFontSize = value;\n }\n });\n\n var _color = \"black\";\n /**\n * The color of the text\n *\n * @name AcroFormField#color\n * @default 'black'\n * @type {string|rgba}\n */\n Object.defineProperty(this, \"color\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _color;\n },\n set: function(value) {\n _color = value;\n }\n });\n\n var _DA = \"/F1 0 Tf 0 g\";\n // Defines the default appearance (Needed for variable Text)\n Object.defineProperty(this, \"DA\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (\n !_DA ||\n this instanceof AcroFormChildClass ||\n this instanceof AcroFormTextField\n ) {\n return undefined;\n }\n return toPdfString(_DA, this.objId, this.scope);\n },\n set: function(value) {\n value = value.toString();\n _DA = value;\n }\n });\n\n var _DV = null;\n Object.defineProperty(this, \"DV\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DV) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_DV, this.objId, this.scope);\n }\n return _DV;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _DV = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _DV = pdfUnescape(value);\n }\n } else {\n _DV = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n *\n * @name AcroFormField#defaultValue\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"defaultValue\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_DV.substr(1, _DV.length - 1));\n } else {\n return _DV;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _DV = \"/\" + value;\n } else {\n _DV = value;\n }\n }\n });\n\n var _V = null;\n Object.defineProperty(this, \"_V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n return _V;\n },\n set: function(value) {\n this.V = value;\n }\n });\n Object.defineProperty(this, \"V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_V, this.objId, this.scope);\n }\n return _V;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _V = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _V = pdfUnescape(value);\n }\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n *\n * @name AcroFormField#value\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"value\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_V.substr(1, _V.length - 1));\n } else {\n return _V;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _V = \"/\" + value;\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * Check if field has annotations\n *\n * @name AcroFormField#hasAnnotation\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAnnotation\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.Rect;\n }\n });\n\n Object.defineProperty(this, \"Type\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Annot\" : null;\n }\n });\n\n Object.defineProperty(this, \"Subtype\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Widget\" : null;\n }\n });\n\n var _hasAppearanceStream = false;\n /**\n * true if field has an appearanceStream\n *\n * @name AcroFormField#hasAppearanceStream\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _hasAppearanceStream;\n },\n set: function(value) {\n value = Boolean(value);\n _hasAppearanceStream = value;\n }\n });\n\n /**\n * The page on which the AcroFormField is placed\n *\n * @name AcroFormField#page\n * @type {number}\n */\n var _page;\n Object.defineProperty(this, \"page\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_page) {\n return undefined;\n }\n return _page;\n },\n set: function(value) {\n _page = value;\n }\n });\n\n /**\n * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n *\n * @name AcroFormField#readOnly\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"readOnly\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 1));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 1);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 1);\n }\n }\n });\n\n /**\n * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n *\n * @name AcroFormField#required\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 2));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 2);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 2);\n }\n }\n });\n\n /**\n * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n *\n * @name AcroFormField#noExport\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"noExport\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 3);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 3);\n }\n }\n });\n\n var _Q = null;\n Object.defineProperty(this, \"Q\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (_Q === null) {\n return undefined;\n }\n return _Q;\n },\n set: function(value) {\n if ([0, 1, 2].indexOf(value) !== -1) {\n _Q = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Q supplied.'\n );\n }\n }\n });\n\n /**\n * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n * 'left', 'center', 'right'\n *\n * @name AcroFormField#textAlign\n * @default 'left'\n * @type {string}\n */\n Object.defineProperty(this, \"textAlign\", {\n get: function() {\n var result;\n switch (_Q) {\n case 0:\n default:\n result = \"left\";\n break;\n case 1:\n result = \"center\";\n break;\n case 2:\n result = \"right\";\n break;\n }\n return result;\n },\n configurable: true,\n enumerable: true,\n set: function(value) {\n switch (value) {\n case \"right\":\n case 2:\n _Q = 2;\n break;\n case \"center\":\n case 1:\n _Q = 1;\n break;\n case \"left\":\n case 0:\n default:\n _Q = 0;\n }\n }\n });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n AcroFormField.call(this);\n // Field Type = Choice Field\n this.FT = \"/Ch\";\n // options\n this.V = \"()\";\n\n this.fontName = \"zapfdingbats\";\n // Top Index\n var _TI = 0;\n\n Object.defineProperty(this, \"TI\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n /**\n * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n *\n * @name AcroFormChoiceField#topIndex\n * @default 0\n * @type {number}\n */\n Object.defineProperty(this, \"topIndex\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n var _Opt = [];\n Object.defineProperty(this, \"Opt\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return arrayToPdfArray(_Opt, this.objId, this.scope);\n },\n set: function(value) {\n _Opt = pdfArrayToStringArray(value);\n }\n });\n\n /**\n * @memberof AcroFormChoiceField\n * @name getOptions\n * @function\n * @instance\n * @returns {array} array of Options\n */\n this.getOptions = function() {\n return _Opt;\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name setOptions\n * @function\n * @instance\n * @param {array} value\n */\n this.setOptions = function(value) {\n _Opt = value;\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name addOption\n * @function\n * @instance\n * @param {string} value\n */\n this.addOption = function(value) {\n value = value || \"\";\n value = value.toString();\n _Opt.push(value);\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name removeOption\n * @function\n * @instance\n * @param {string} value\n * @param {boolean} allEntries (default: false)\n */\n this.removeOption = function(value, allEntries) {\n allEntries = allEntries || false;\n value = value || \"\";\n value = value.toString();\n\n while (_Opt.indexOf(value) !== -1) {\n _Opt.splice(_Opt.indexOf(value), 1);\n if (allEntries === false) {\n break;\n }\n }\n };\n\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n *\n * @name AcroFormChoiceField#combo\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"combo\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 18));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 18);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 18);\n }\n }\n });\n\n /**\n * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n *\n * @name AcroFormChoiceField#edit\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"edit\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 19));\n },\n set: function(value) {\n //PDF 32000-1:2008, page 444\n if (this.combo === true) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 19);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 19);\n }\n }\n }\n });\n\n /**\n * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n *\n * @name AcroFormChoiceField#sort\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"sort\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 20));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 20);\n _Opt.sort();\n } else {\n this.Ff = clearBitForPdf(this.Ff, 20);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n *\n * @name AcroFormChoiceField#multiSelect\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 22));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 22);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 22);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n *\n * @name AcroFormChoiceField#doNotSpellCheck\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n *\n * @name AcroFormChoiceField#commitOnSelChange\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"commitOnSelChange\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 27));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 27);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 27);\n }\n }\n });\n\n this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n AcroFormChoiceField.call(this);\n this.fontName = \"helvetica\";\n\n //PDF 32000-1:2008, page 444\n this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n AcroFormListBox.call(this);\n this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n AcroFormComboBox.call(this);\n this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n AcroFormField.call(this);\n this.FT = \"/Btn\";\n\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n *\n * @name AcroFormButton#noToggleToOff\n * @type {boolean}\n */\n Object.defineProperty(this, \"noToggleToOff\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 15));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 15);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 15);\n }\n }\n });\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n *\n * @name AcroFormButton#radio\n * @type {boolean}\n */\n Object.defineProperty(this, \"radio\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 16));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 16);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 16);\n }\n }\n });\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n *\n * @name AcroFormButton#pushButton\n * @type {boolean}\n */\n Object.defineProperty(this, \"pushButton\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 17));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 17);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 17);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n *\n * @name AcroFormButton#radioIsUnison\n * @type {boolean}\n */\n Object.defineProperty(this, \"radioIsUnison\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n if (Object.keys(_MK).length !== 0) {\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n }\n return undefined;\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n AcroFormButton.call(this);\n this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n AcroFormButton.call(this);\n this.radio = true;\n this.pushButton = false;\n\n var _Kids = [];\n Object.defineProperty(this, \"Kids\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _Kids;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Kids = value;\n } else {\n _Kids = [];\n }\n }\n });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n AcroFormField.call(this);\n\n var _parent;\n Object.defineProperty(this, \"Parent\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _parent;\n },\n set: function(value) {\n _parent = value;\n }\n });\n\n var _optionName;\n Object.defineProperty(this, \"optionName\", {\n enumerable: false,\n configurable: true,\n get: function() {\n return _optionName;\n },\n set: function(value) {\n _optionName = value;\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n this.caption = \"l\";\n this.appearanceState = \"Off\";\n // todo: set AppearanceType as variable that can be set from the\n // outside...\n this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n // The Default appearanceType is the Circle\n this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n this.optionName\n );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n throw new Error(\n \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n );\n }\n for (var objId in this.Kids) {\n if (this.Kids.hasOwnProperty(objId)) {\n var child = this.Kids[objId];\n child.appearanceStreamContent = appearance.createAppearanceStream(\n child.optionName\n );\n child.caption = appearance.getCA();\n }\n }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n // Create new Child for RadioGroup\n var child = new AcroFormChildClass();\n child.Parent = this;\n child.optionName = name;\n // Add to Parent\n this.Kids.push(child);\n\n addField.call(this.scope, child);\n\n return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n AcroFormButton.call(this);\n\n this.fontName = \"zapfdingbats\";\n this.caption = \"3\";\n this.appearanceState = \"On\";\n this.value = \"On\";\n this.textAlign = \"center\";\n this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n AcroFormField.call(this);\n this.FT = \"/Tx\";\n\n /**\n * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n *\n * @name AcroFormTextField#multiline\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiline\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 13));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 13);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 13);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n *\n * @name AcroFormTextField#fileSelect\n * @type {boolean}\n */\n Object.defineProperty(this, \"fileSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 21));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 21);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 21);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n *\n * @name AcroFormTextField#doNotSpellCheck\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n *\n * @name AcroFormTextField#doNotScroll\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotScroll\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 24));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 24);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 24);\n }\n }\n });\n\n /**\n * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n *\n * @name AcroFormTextField#comb\n * @type {boolean}\n */\n Object.defineProperty(this, \"comb\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 25));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 25);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 25);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n *\n * @name AcroFormTextField#richText\n * @type {boolean}\n */\n Object.defineProperty(this, \"richText\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MaxLen = null;\n Object.defineProperty(this, \"MaxLen\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n _MaxLen = value;\n }\n });\n\n /**\n * (Optional; inheritable) The maximum length of the field’s text, in characters.\n *\n * @name AcroFormTextField#maxLength\n * @type {number}\n */\n Object.defineProperty(this, \"maxLength\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n if (Number.isInteger(value)) {\n _MaxLen = value;\n }\n }\n });\n\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.V || this.DV;\n }\n });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n AcroFormTextField.call(this);\n\n /**\n * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n *\n * @name AcroFormTextField#password\n * @type {boolean}\n */\n Object.defineProperty(this, \"password\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 14));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 14);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 14);\n }\n }\n });\n this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n CheckBox: {\n createAppearanceStream: function() {\n var appearance = {\n N: {\n On: AcroFormAppearance.CheckBox.YesNormal\n },\n D: {\n On: AcroFormAppearance.CheckBox.YesPushDown,\n Off: AcroFormAppearance.CheckBox.OffPushDown\n }\n };\n\n return appearance;\n },\n /**\n * Returns the standard On Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"BMC\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(\"BT\");\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n stream.push(\"EMC\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var stream = [];\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"1 g\");\n stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(\"0 g\");\n stream.push(\"BT\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n /**\n * Returns the standard Off Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n RadioButton: {\n Circle: {\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Circle.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Circle.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"l\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n // Make the Radius of the Circle relative to min(height, width) of formObject\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n var c = AcroFormAppearance.internal.Bezier_C;\n var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n /*\n * The Following is a Circle created with Bezier-Curves.\n */\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n var dc = Number(\n (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n );\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n stream.push(\"0 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n \"\" +\n DotRadius +\n \" \" +\n dc +\n \" \" +\n dc +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n dc +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n dc +\n \" -\" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n dc +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n dc +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n Cross: {\n /**\n * Creates the Actual AppearanceDictionary-References\n *\n * @param {string} name\n * @returns {Object}\n * @ignore\n */\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Cross.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Cross.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"8\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n }\n },\n\n /**\n * Returns the standard Appearance\n *\n * @returns {AcroFormXObject}\n */\n createDefaultAppearanceStream: function(formObject) {\n // Set Helvetica to Standard Font (size: auto)\n // Color: Black\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var fontSize = formObject.fontSize;\n var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n return result;\n }\n};\n\nAcroFormAppearance.internal = {\n Bezier_C: 0.551915024494,\n\n calculateCross: function(formObject) {\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var a = Math.min(width, height);\n\n var cross = {\n x1: {\n // upperLeft\n x: (width - a) / 2,\n y: (height - a) / 2 + a // height - borderPadding\n },\n x2: {\n // lowerRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 // borderPadding\n },\n x3: {\n // lowerLeft\n x: (width - a) / 2,\n y: (height - a) / 2 // borderPadding\n },\n x4: {\n // upperRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 + a // height - borderPadding\n }\n };\n\n return cross;\n }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[2]);\n }\n return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[3]);\n }\n return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n initializeAcroForm(this, fieldObject);\n\n if (fieldObject instanceof AcroFormField) {\n putForm(fieldObject);\n } else {\n throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n }\n fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n AcroForm,\n AcroFormChoiceField,\n AcroFormListBox,\n AcroFormComboBox,\n AcroFormEditBox,\n AcroFormButton,\n AcroFormPushButton,\n AcroFormRadioButton,\n AcroFormCheckBox,\n AcroFormTextField,\n AcroFormPasswordField,\n AcroFormAppearance\n};\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namespace = \"addImage_\";\n jsPDFAPI.__addimage__ = {};\n\n var UNKNOWN = \"UNKNOWN\";\n\n // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n // With too small batch iteration will be slow as more calls are made,\n // higher values cause larger and slower garbage collection.\n var ARRAY_APPLY_BATCH = 8192;\n\n var imageFileTypeHeaders = {\n PNG: [[0x89, 0x50, 0x4e, 0x47]],\n TIFF: [\n [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n [0x49, 0x49, 0x2a, 0x00] //Intel\n ],\n JPEG: [\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe0,\n undefined,\n undefined,\n 0x4a,\n 0x46,\n 0x49,\n 0x46,\n 0x00\n ], //JFIF\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe1,\n undefined,\n undefined,\n 0x45,\n 0x78,\n 0x69,\n 0x66,\n 0x00,\n 0x00\n ], //Exif\n [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n ],\n JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n WEBP: [\n [\n 0x52,\n 0x49,\n 0x46,\n 0x46,\n undefined,\n undefined,\n undefined,\n undefined,\n 0x57,\n 0x45,\n 0x42,\n 0x50\n ]\n ],\n BMP: [\n [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n [0x42, 0x41], //BA - OS/2 struct bitmap array\n [0x43, 0x49], //CI - OS/2 struct color icon\n [0x43, 0x50], //CP - OS/2 const color pointer\n [0x49, 0x43], //IC - OS/2 struct icon\n [0x50, 0x54] //PT - OS/2 pointer\n ]\n };\n\n /**\n * Recognize filetype of Image by magic-bytes\n *\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n *\n * @name getImageFileTypeByImageData\n * @public\n * @function\n * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n *\n * @returns {string} filetype of Image\n */\n var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n imageData,\n fallbackFormat\n ) {\n fallbackFormat = fallbackFormat || UNKNOWN;\n var i;\n var j;\n var result = UNKNOWN;\n var headerSchemata;\n var compareResult;\n var fileType;\n\n if (\n fallbackFormat === \"RGBA\" ||\n (imageData.data !== undefined &&\n imageData.data instanceof Uint8ClampedArray &&\n \"height\" in imageData &&\n \"width\" in imageData)\n ) {\n return \"RGBA\";\n }\n\n if (isArrayBufferView(imageData)) {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData[j]) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n } else {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n }\n\n if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n result = fallbackFormat;\n }\n return result;\n });\n\n // Image functionality ported from pdf.js\n var putImage = function(image) {\n var out = this.internal.write;\n var putStream = this.internal.putStream;\n var getFilters = this.internal.getFilters;\n\n var filter = getFilters();\n while (filter.indexOf(\"FlateEncode\") !== -1) {\n filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n }\n\n image.objectId = this.internal.newObject();\n\n var additionalKeyValues = [];\n additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n additionalKeyValues.push({ key: \"Width\", value: image.width });\n additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n if (image.colorSpace === color_spaces.INDEXED) {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value:\n \"[/Indexed /DeviceRGB \" +\n // if an indexed png defines more than one colour with transparency, we've created a sMask\n (image.palette.length / 3 - 1) +\n \" \" +\n (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n ? image.objectId + 2\n : image.objectId + 1) +\n \" 0 R]\"\n });\n } else {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value: \"/\" + image.colorSpace\n });\n if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n }\n }\n additionalKeyValues.push({\n key: \"BitsPerComponent\",\n value: image.bitsPerComponent\n });\n if (\n \"decodeParameters\" in image &&\n typeof image.decodeParameters !== \"undefined\"\n ) {\n additionalKeyValues.push({\n key: \"DecodeParms\",\n value: \"<<\" + image.decodeParameters + \">>\"\n });\n }\n if (\"transparency\" in image && Array.isArray(image.transparency)) {\n var transparency = \"\",\n i = 0,\n len = image.transparency.length;\n for (; i < len; i++)\n transparency +=\n image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n additionalKeyValues.push({\n key: \"Mask\",\n value: \"[\" + transparency + \"]\"\n });\n }\n if (typeof image.sMask !== \"undefined\") {\n additionalKeyValues.push({\n key: \"SMask\",\n value: image.objectId + 1 + \" 0 R\"\n });\n }\n\n var alreadyAppliedFilters =\n typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n putStream({\n data: image.data,\n additionalKeyValues: additionalKeyValues,\n alreadyAppliedFilters: alreadyAppliedFilters,\n objectId: image.objectId\n });\n\n out(\"endobj\");\n\n // Soft mask\n if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n var decodeParameters =\n \"/Predictor \" +\n image.predictor +\n \" /Colors 1 /BitsPerComponent \" +\n image.bitsPerComponent +\n \" /Columns \" +\n image.width;\n var sMask = {\n width: image.width,\n height: image.height,\n colorSpace: \"DeviceGray\",\n bitsPerComponent: image.bitsPerComponent,\n decodeParameters: decodeParameters,\n data: image.sMask\n };\n if (\"filter\" in image) {\n sMask.filter = image.filter;\n }\n putImage.call(this, sMask);\n }\n\n //Palette\n if (image.colorSpace === color_spaces.INDEXED) {\n var objId = this.internal.newObject();\n //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n //putStream(zlib.compress(img['pal']));\n putStream({\n data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n objectId: objId\n });\n out(\"endobj\");\n }\n };\n var putResourcesCallback = function() {\n var images = this.internal.collections[namespace + \"images\"];\n for (var i in images) {\n putImage.call(this, images[i]);\n }\n };\n var putXObjectsDictCallback = function() {\n var images = this.internal.collections[namespace + \"images\"],\n out = this.internal.write,\n image;\n for (var i in images) {\n image = images[i];\n out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n }\n };\n\n var checkCompressValue = function(value) {\n if (value && typeof value === \"string\") value = value.toUpperCase();\n return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n };\n\n var initialize = function() {\n if (!this.internal.collections[namespace + \"images\"]) {\n this.internal.collections[namespace + \"images\"] = {};\n this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n }\n };\n\n var getImages = function() {\n var images = this.internal.collections[namespace + \"images\"];\n initialize.call(this);\n return images;\n };\n var getImageIndex = function() {\n return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n };\n var notDefined = function(value) {\n return typeof value === \"undefined\" || value === null || value.length === 0;\n };\n var generateAliasFromImageData = function(imageData) {\n if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n return sHashCode(imageData);\n } else if (isArrayBufferView(imageData.data)) {\n return sHashCode(imageData.data);\n }\n\n return null;\n };\n\n var isImageTypeSupported = function(type) {\n return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n };\n\n var isDOMElement = function(object) {\n return typeof object === \"object\" && object.nodeType === 1;\n };\n\n var getImageDataFromElement = function(element, format) {\n //if element is an image which uses data url definition, just return the dataurl\n if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n var src = \"\" + element.getAttribute(\"src\");\n\n //is base64 encoded dataUrl, directly process it\n if (src.indexOf(\"data:image/\") === 0) {\n return atob(\n unescape(src)\n .split(\"base64,\")\n .pop()\n );\n }\n\n //it is probably an url, try to load it\n var tmpImageData = jsPDFAPI.loadFile(src, true);\n if (tmpImageData !== undefined) {\n return tmpImageData;\n }\n }\n\n if (element.nodeName === \"CANVAS\") {\n if (element.width === 0 || element.height === 0) {\n throw new Error(\n \"Given canvas must have data. Canvas width: \" +\n element.width +\n \", height: \" +\n element.height\n );\n }\n var mimeType;\n switch (format) {\n case \"PNG\":\n mimeType = \"image/png\";\n break;\n case \"WEBP\":\n mimeType = \"image/webp\";\n break;\n case \"JPEG\":\n case \"JPG\":\n default:\n mimeType = \"image/jpeg\";\n break;\n }\n return atob(\n element\n .toDataURL(mimeType, 1.0)\n .split(\"base64,\")\n .pop()\n );\n }\n };\n\n var checkImagesForAlias = function(alias) {\n var images = this.internal.collections[namespace + \"images\"];\n if (images) {\n for (var e in images) {\n if (alias === images[e].alias) {\n return images[e];\n }\n }\n }\n };\n\n var determineWidthAndHeight = function(width, height, image) {\n if (!width && !height) {\n width = -96;\n height = -96;\n }\n if (width < 0) {\n width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n }\n if (height < 0) {\n height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n }\n if (width === 0) {\n width = (height * image.width) / image.height;\n }\n if (height === 0) {\n height = (width * image.height) / image.width;\n }\n\n return [width, height];\n };\n\n var writeImageToPDF = function(x, y, width, height, image, rotation) {\n var dims = determineWidthAndHeight.call(this, width, height, image),\n coord = this.internal.getCoordinateString,\n vcoord = this.internal.getVerticalCoordinateString;\n\n var images = getImages.call(this);\n\n width = dims[0];\n height = dims[1];\n images[image.index] = image;\n\n if (rotation) {\n rotation *= Math.PI / 180;\n var c = Math.cos(rotation);\n var s = Math.sin(rotation);\n //like in pdf Reference do it 4 digits instead of 2\n var f4 = function(number) {\n return number.toFixed(4);\n };\n var rotationTransformationMatrix = [\n f4(c),\n f4(s),\n f4(s * -1),\n f4(c),\n 0,\n 0,\n \"cm\"\n ];\n }\n this.internal.write(\"q\"); //Save graphics state\n if (rotation) {\n this.internal.write(\n [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n ); //Translate\n this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n this.internal.write(\n [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n ); //Scale\n } else {\n this.internal.write(\n [\n coord(width),\n \"0\",\n \"0\",\n coord(height),\n coord(x),\n vcoord(y + height),\n \"cm\"\n ].join(\" \")\n ); //Translate and Scale\n }\n\n if (this.isAdvancedAPI()) {\n // draw image bottom up when in \"advanced\" API mode\n this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n }\n\n this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n this.internal.write(\"Q\"); //Restore graphics state\n };\n\n /**\n * COLOR SPACES\n */\n var color_spaces = (jsPDFAPI.color_spaces = {\n DEVICE_RGB: \"DeviceRGB\",\n DEVICE_GRAY: \"DeviceGray\",\n DEVICE_CMYK: \"DeviceCMYK\",\n CAL_GREY: \"CalGray\",\n CAL_RGB: \"CalRGB\",\n LAB: \"Lab\",\n ICC_BASED: \"ICCBased\",\n INDEXED: \"Indexed\",\n PATTERN: \"Pattern\",\n SEPARATION: \"Separation\",\n DEVICE_N: \"DeviceN\"\n });\n\n /**\n * DECODE METHODS\n */\n jsPDFAPI.decode = {\n DCT_DECODE: \"DCTDecode\",\n FLATE_DECODE: \"FlateDecode\",\n LZW_DECODE: \"LZWDecode\",\n JPX_DECODE: \"JPXDecode\",\n JBIG2_DECODE: \"JBIG2Decode\",\n ASCII85_DECODE: \"ASCII85Decode\",\n ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n RUN_LENGTH_DECODE: \"RunLengthDecode\",\n CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n };\n\n /**\n * IMAGE COMPRESSION TYPES\n */\n var image_compression = (jsPDFAPI.image_compression = {\n NONE: \"NONE\",\n FAST: \"FAST\",\n MEDIUM: \"MEDIUM\",\n SLOW: \"SLOW\"\n });\n\n /**\n * @name sHashCode\n * @function\n * @param {string} data\n * @returns {string}\n */\n var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n var hash = 0,\n i,\n len;\n\n if (typeof data === \"string\") {\n len = data.length;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n } else if (isArrayBufferView(data)) {\n len = data.byteLength / 2;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data[i];\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n });\n\n /**\n * Validates if given String is a valid Base64-String\n *\n * @name validateStringAsBase64\n * @public\n * @function\n * @param {String} possible Base64-String\n *\n * @returns {boolean}\n */\n var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n possibleBase64String\n ) {\n possibleBase64String = possibleBase64String || \"\";\n possibleBase64String.toString().trim();\n\n var result = true;\n\n if (possibleBase64String.length === 0) {\n result = false;\n }\n\n if (possibleBase64String.length % 4 !== 0) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9+/]+$/.test(\n possibleBase64String.substr(0, possibleBase64String.length - 2)\n ) === false\n ) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n possibleBase64String.substr(-2)\n ) === false\n ) {\n result = false;\n }\n return result;\n });\n\n /**\n * Strips out and returns info from a valid base64 data URI\n *\n * @name extractImageFromDataUrl\n * @function\n * @param {string} dataUrl a valid data URI of format 'data:[][;base64],'\n * @returns {Array}an Array containing the following\n * [0] the complete data URI\n * [1] \n * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n * [4] \n */\n var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n dataUrl\n ) {\n dataUrl = dataUrl || \"\";\n var dataUrlParts = dataUrl.split(\"base64,\");\n var result = null;\n\n if (dataUrlParts.length === 2) {\n var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n dataUrlParts[0]\n );\n if (Array.isArray(extractedInfo)) {\n result = {\n mimeType: extractedInfo[1],\n charset: extractedInfo[2],\n data: dataUrlParts[1]\n };\n }\n }\n return result;\n });\n\n /**\n * Check to see if ArrayBuffer is supported\n *\n * @name supportsArrayBuffer\n * @function\n * @returns {boolean}\n */\n var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n return (\n typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n );\n });\n\n /**\n * Tests supplied object to determine if ArrayBuffer\n *\n * @name isArrayBuffer\n * @function\n * @param {Object} object an Object\n *\n * @returns {boolean}\n */\n jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n return supportsArrayBuffer() && object instanceof ArrayBuffer;\n };\n\n /**\n * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n *\n * @name isArrayBufferView\n * @function\n * @param {Object} object an Object\n * @returns {boolean}\n */\n var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n object\n ) {\n return (\n supportsArrayBuffer() &&\n typeof Uint32Array !== \"undefined\" &&\n (object instanceof Int8Array ||\n object instanceof Uint8Array ||\n (typeof Uint8ClampedArray !== \"undefined\" &&\n object instanceof Uint8ClampedArray) ||\n object instanceof Int16Array ||\n object instanceof Uint16Array ||\n object instanceof Int32Array ||\n object instanceof Uint32Array ||\n object instanceof Float32Array ||\n object instanceof Float64Array)\n );\n });\n\n /**\n * Convert Binary String to ArrayBuffer\n *\n * @name binaryStringToUint8Array\n * @public\n * @function\n * @param {string} BinaryString with ImageData\n * @returns {Uint8Array}\n */\n var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n binary_string\n ) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n });\n\n /**\n * Convert the Buffer to a Binary String\n *\n * @name arrayBufferToBinaryString\n * @public\n * @function\n * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n *\n * @returns {String}\n */\n var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n buffer\n ) {\n var out = \"\";\n // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n // Do not copy the array if input is already an array.\n var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n // Limit the amount of characters being parsed to prevent overflow.\n // Note that while TextDecoder would be faster, it does not have the same\n // functionality as fromCharCode with any provided encodings as of 3/2021.\n out += String.fromCharCode.apply(\n null,\n buf.subarray(i, i + ARRAY_APPLY_BATCH)\n );\n }\n return out;\n });\n\n /**\n * Possible parameter for addImage, an RGBA buffer with size.\n *\n * @typedef {Object} RGBAData\n * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n * @property {number} width - Image width as the data does not carry this information in itself.\n * @property {number} height - Image height as the data does not carry this information in itself.\n */\n\n /**\n * Adds an Image to the PDF.\n *\n * @name addImage\n * @public\n * @function\n * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width width of the image (in units declared at inception of PDF document)\n * @param {number} height height of the Image (in units declared at inception of PDF document)\n * @param {string} alias alias of the image (if used multiple times)\n * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation rotation of the image in degrees (0-359)\n *\n * @returns jsPDF\n */\n jsPDFAPI.addImage = function() {\n var imageData, format, x, y, w, h, alias, compression, rotation;\n\n imageData = arguments[0];\n if (typeof arguments[1] === \"number\") {\n format = UNKNOWN;\n x = arguments[1];\n y = arguments[2];\n w = arguments[3];\n h = arguments[4];\n alias = arguments[5];\n compression = arguments[6];\n rotation = arguments[7];\n } else {\n format = arguments[1];\n x = arguments[2];\n y = arguments[3];\n w = arguments[4];\n h = arguments[5];\n alias = arguments[6];\n compression = arguments[7];\n rotation = arguments[8];\n }\n\n if (\n typeof imageData === \"object\" &&\n !isDOMElement(imageData) &&\n \"imageData\" in imageData\n ) {\n var options = imageData;\n\n imageData = options.imageData;\n format = options.format || format || UNKNOWN;\n x = options.x || x || 0;\n y = options.y || y || 0;\n w = options.w || options.width || w;\n h = options.h || options.height || h;\n alias = options.alias || alias;\n compression = options.compression || compression;\n rotation = options.rotation || options.angle || rotation;\n }\n\n //If compression is not explicitly set, determine if we should use compression\n var filter = this.internal.getFilters();\n if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n compression = \"SLOW\";\n }\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n }\n\n initialize.call(this);\n\n var image = processImageData.call(\n this,\n imageData,\n format,\n alias,\n compression\n );\n\n writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n return this;\n };\n\n var processImageData = function(imageData, format, alias, compression) {\n var result, dataAsBinaryString;\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n imageData = unescape(imageData);\n var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData !== \"\") {\n imageData = tmpImageData;\n } else {\n tmpImageData = jsPDFAPI.loadFile(imageData, true);\n if (tmpImageData !== undefined) {\n imageData = tmpImageData;\n }\n }\n }\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData, format);\n }\n\n format = getImageFileTypeByImageData(imageData, format);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n // now do the heavy lifting\n\n if (notDefined(alias)) {\n alias = generateAliasFromImageData(imageData);\n }\n result = checkImagesForAlias.call(this, alias);\n\n if (!result) {\n if (supportsArrayBuffer()) {\n // no need to convert if imageData is already uint8array\n if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n dataAsBinaryString = imageData;\n imageData = binaryStringToUint8Array(imageData);\n }\n }\n\n result = this[\"process\" + format.toUpperCase()](\n imageData,\n getImageIndex.call(this),\n alias,\n checkCompressValue(compression),\n dataAsBinaryString\n );\n }\n\n if (!result) {\n throw new Error(\"An unknown error occurred whilst processing the image.\");\n }\n return result;\n };\n\n /**\n * @name convertBase64ToBinaryString\n * @function\n * @param {string} stringData\n * @returns {string} binary string\n */\n var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n stringData,\n throwError\n ) {\n throwError = typeof throwError === \"boolean\" ? throwError : true;\n var base64Info;\n var imageData = \"\";\n var rawData;\n\n if (typeof stringData === \"string\") {\n base64Info = extractImageFromDataUrl(stringData);\n rawData = base64Info !== null ? base64Info.data : stringData;\n\n try {\n imageData = atob(rawData);\n } catch (e) {\n if (throwError) {\n if (!validateStringAsBase64(rawData)) {\n throw new Error(\n \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n );\n } else {\n throw new Error(\n \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n );\n }\n }\n }\n }\n return imageData;\n });\n\n /**\n * @name getImageProperties\n * @function\n * @param {Object} imageData\n * @returns {Object}\n */\n jsPDFAPI.getImageProperties = function(imageData) {\n var image;\n var tmpImageData = \"\";\n var format;\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData);\n }\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData === \"\") {\n tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n }\n imageData = tmpImageData;\n }\n\n format = getImageFileTypeByImageData(imageData);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n imageData = binaryStringToUint8Array(imageData);\n }\n\n image = this[\"process\" + format.toUpperCase()](imageData);\n\n if (!image) {\n throw new Error(\"An unknown error occurred whilst processing the image\");\n }\n\n image.fileType = format;\n\n return image;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n *
    \n * This plugin current supports
    \n *
  41. Goto Page (set pageNumber and top in options)\n *
  42. Goto Name (set name and top in options)\n *
  43. Goto URL (set url in options)\n *

    \n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n * (set magFactor in options). XYZ is the default.\n *

    \n *

    \n * Links, Text, Popup, and FreeText are supported.\n *

    \n *

    \n * Options In PDF spec Not Implemented Yet\n *

  44. link border\n *
  45. named target\n *
  46. page coordinates\n *
  47. destination page scaling and layout\n *
  48. actions other than URL and GotoPage\n *
  49. background / hover actions\n *

    \n * @name annotations\n * @module\n */\n\n/*\n Destination Magnification Factors\n See PDF 1.3 Page 386 for meanings and options\n\n [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var notEmpty = function(obj) {\n if (typeof obj != \"undefined\") {\n if (obj != \"\") {\n return true;\n }\n }\n };\n\n jsPDF.API.events.push([\n \"addPage\",\n function(addPageData) {\n var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n pageInfo.pageContext.annotations = [];\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putPage\",\n function(putPageData) {\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal\n .getVerticalCoordinateString;\n var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n var pageAnnos = putPageData.pageContext.annotations;\n\n var anno, rect, line;\n var found = false;\n for (var a = 0; a < pageAnnos.length && !found; a++) {\n anno = pageAnnos[a];\n switch (anno.type) {\n case \"link\":\n if (\n notEmpty(anno.options.url) ||\n notEmpty(anno.options.pageNumber)\n ) {\n found = true;\n }\n break;\n case \"reference\":\n case \"text\":\n case \"freetext\":\n found = true;\n break;\n }\n }\n if (found == false) {\n return;\n }\n\n this.internal.write(\"/Annots [\");\n for (var i = 0; i < pageAnnos.length; i++) {\n anno = pageAnnos[i];\n var escape = this.internal.pdfEscape;\n var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n switch (anno.type) {\n case \"reference\":\n // References to Widget Annotations (for AcroForm Fields)\n this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n break;\n case \"text\":\n // Create a an object for both the text and the popup\n var objText = this.internal.newAdditionalObject();\n var objPopup = this.internal.newAdditionalObject();\n var encryptorText = this.internal.getEncryptor(objText.objId);\n\n var title = anno.title || \"Note\";\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n\n line =\n \"<>\";\n objText.content = line;\n\n var parent = objText.objId + \" 0 R\";\n var popoff = 30;\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x + popoff) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(\n anno.bounds.x + anno.bounds.w + popoff\n ) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n line =\n \"<>\";\n objPopup.content = line;\n\n this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n break;\n case \"freetext\":\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \"] \";\n var color = anno.color || \"#000000\";\n line =\n \"<>\";\n this.internal.write(line);\n break;\n case \"link\":\n if (anno.options.name) {\n var loc = this.annotations._nameMap[anno.options.name];\n anno.options.pageNumber = loc.page;\n anno.options.top = loc.y;\n } else {\n if (!anno.options.top) {\n anno.options.top = 0;\n }\n }\n\n rect =\n \"/Rect [\" +\n anno.finalBounds.x +\n \" \" +\n anno.finalBounds.y +\n \" \" +\n anno.finalBounds.w +\n \" \" +\n anno.finalBounds.h +\n \"] \";\n\n line = \"\";\n if (anno.options.url) {\n line =\n \"<>\";\n } else if (anno.options.pageNumber) {\n // first page is 0\n var info = this.internal.getPageInfo(anno.options.pageNumber);\n line =\n \"<>\";\n this.internal.write(line);\n }\n break;\n }\n }\n this.internal.write(\"]\");\n }\n ]);\n\n /**\n * @name createAnnotation\n * @function\n * @param {Object} options\n */\n jsPDFAPI.createAnnotation = function(options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n switch (options.type) {\n case \"link\":\n this.link(\n options.bounds.x,\n options.bounds.y,\n options.bounds.w,\n options.bounds.h,\n options\n );\n break;\n case \"text\":\n case \"freetext\":\n pageInfo.pageContext.annotations.push(options);\n break;\n }\n };\n\n /**\n * Create a link\n *\n * valid options\n *
  50. pageNumber or url [required]\n *

    If pageNumber is specified, top and zoom may also be specified

    \n * @name link\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {Object} options\n */\n jsPDFAPI.link = function(x, y, w, h, options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n pageInfo.pageContext.annotations.push({\n finalBounds: {\n x: getHorizontalCoordinateString(x),\n y: getVerticalCoordinateString(y),\n w: getHorizontalCoordinateString(x + w),\n h: getVerticalCoordinateString(y + h)\n },\n options: options,\n type: \"link\"\n });\n };\n\n /**\n * Currently only supports single line text.\n * Returns the width of the text/link\n *\n * @name textWithLink\n * @function\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {Object} options\n * @returns {number} width the width of the text/link\n */\n jsPDFAPI.textWithLink = function(text, x, y, options) {\n var totalLineWidth = this.getTextWidth(text);\n var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n var linkHeight, linkWidth;\n\n // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n if (options.maxWidth !== undefined) {\n var { maxWidth } = options;\n linkWidth = maxWidth;\n var numOfLines = this.splitTextToSize(text, linkWidth).length;\n linkHeight = Math.ceil(lineHeight * numOfLines);\n } else {\n linkWidth = totalLineWidth;\n linkHeight = lineHeight;\n }\n\n this.text(text, x, y, options);\n\n //TODO We really need the text baseline height to do this correctly.\n // Or ability to draw text on top, bottom, center, or baseline.\n y += lineHeight * 0.2;\n //handle x position based on the align option\n if (options.align === \"center\") {\n x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n }\n if (options.align === \"right\") {\n x = x - totalLineWidth;\n }\n this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n return totalLineWidth;\n };\n\n //TODO move into external library\n /**\n * @name getTextWidth\n * @function\n * @param {string} text\n * @returns {number} txtWidth\n */\n jsPDFAPI.getTextWidth = function(text) {\n var fontSize = this.internal.getFontSize();\n var txtWidth =\n (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n return txtWidth;\n };\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n * Arabic Substition A\n */\n var arabicSubstitionA = {\n 0x0621: [0xfe80], // ARABIC LETTER HAMZA\n 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n };\n\n /*\n var ligaturesSubstitutionA = {\n 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n };\n */\n\n var ligatures = {\n 0xfedf: {\n 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n },\n 0xfee0: {\n 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n },\n 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n 0x0651: {\n 0x064c: 0xfc5e, // Shadda + Dammatan\n 0x064d: 0xfc5f, // Shadda + Kasratan\n 0x064e: 0xfc60, // Shadda + Fatha\n 0x064f: 0xfc61, // Shadda + Damma\n 0x0650: 0xfc62 // Shadda + Kasra\n }\n };\n\n var arabic_diacritics = {\n 1612: 64606, // Shadda + Dammatan\n 1613: 64607, // Shadda + Kasratan\n 1614: 64608, // Shadda + Fatha\n 1615: 64609, // Shadda + Damma\n 1616: 64610 // Shadda + Kasra\n };\n\n var alfletter = [1570, 1571, 1573, 1575];\n\n var noChangeInForm = -1;\n var isolatedForm = 0;\n var finalForm = 1;\n var initialForm = 2;\n var medialForm = 3;\n\n jsPDFAPI.__arabicParser__ = {};\n\n //private\n var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n letter\n ) {\n return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n });\n\n var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n letter\n ) {\n return (\n typeof letter === \"string\" &&\n /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n letter\n )\n );\n });\n\n var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n );\n });\n\n var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n );\n };\n\n var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n );\n };\n\n var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length == 4\n );\n });\n\n var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n letters\n ) {\n var i = 0;\n var tmpLigatures = ligatures;\n var result = \"\";\n var effectedLetters = 0;\n\n for (i = 0; i < letters.length; i += 1) {\n if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n effectedLetters++;\n tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n if (typeof tmpLigatures === \"number\") {\n result += String.fromCharCode(tmpLigatures);\n tmpLigatures = ligatures;\n effectedLetters = 0;\n }\n if (i === letters.length - 1) {\n tmpLigatures = ligatures;\n result += letters.charAt(i - (effectedLetters - 1));\n i = i - (effectedLetters - 1);\n effectedLetters = 0;\n }\n } else {\n tmpLigatures = ligatures;\n result += letters.charAt(i - effectedLetters);\n i = i - effectedLetters;\n effectedLetters = 0;\n }\n }\n\n return result;\n });\n\n jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n return (\n letter !== undefined &&\n arabic_diacritics[letter.charCodeAt(0)] !== undefined\n );\n };\n\n var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n currentChar,\n beforeChar,\n nextChar\n ) {\n if (!isArabicLetter(currentChar)) {\n return -1;\n }\n\n if (isInArabicSubstitutionA(currentChar) === false) {\n return noChangeInForm;\n }\n if (\n !arabicLetterHasFinalForm(currentChar) ||\n (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n ) {\n return isolatedForm;\n }\n\n if (\n arabicLetterHasMedialForm(currentChar) &&\n isArabicLetter(beforeChar) &&\n !isArabicEndLetter(beforeChar) &&\n isArabicLetter(nextChar) &&\n arabicLetterHasFinalForm(nextChar)\n ) {\n return medialForm;\n }\n\n if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n return finalForm;\n }\n return initialForm;\n });\n\n /**\n * @name processArabic\n * @function\n * @param {string} text\n * @returns {string}\n */\n var parseArabic = function(text) {\n text = text || \"\";\n\n var result = \"\";\n var i = 0;\n var j = 0;\n var position = 0;\n var currentLetter = \"\";\n var prevLetter = \"\";\n var nextLetter = \"\";\n\n var words = text.split(\"\\\\s+\");\n var newWords = [];\n for (i = 0; i < words.length; i += 1) {\n newWords.push(\"\");\n for (j = 0; j < words[i].length; j += 1) {\n currentLetter = words[i][j];\n prevLetter = words[i][j - 1];\n nextLetter = words[i][j + 1];\n if (isArabicLetter(currentLetter)) {\n position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n if (position !== -1) {\n newWords[i] += String.fromCharCode(\n arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n );\n } else {\n newWords[i] += currentLetter;\n }\n } else {\n newWords[i] += currentLetter;\n }\n }\n\n newWords[i] = resolveLigatures(newWords[i]);\n }\n result = newWords.join(\" \");\n\n return result;\n };\n\n var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n var text =\n typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n var tmpText = [];\n var result;\n\n if (Array.isArray(text)) {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n } else {\n tmpText.push([parseArabic(text[i])]);\n }\n }\n result = tmpText;\n } else {\n result = parseArabic(text);\n }\n if (typeof arguments[0] === \"string\") {\n return result;\n } else {\n arguments[0].text = result;\n return arguments[0];\n }\n });\n\n jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n *\n * @name autoPrint\n * @function\n * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF();\n * doc.text(10, 10, 'This is a test');\n * doc.autoPrint({variant: 'non-conform'});\n * doc.save('autoprint.pdf');\n */\n jsPDFAPI.autoPrint = function(options) {\n \"use strict\";\n var refAutoPrintTag;\n options = options || {};\n options.variant = options.variant || \"non-conform\";\n\n switch (options.variant) {\n case \"javascript\":\n //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n this.addJS(\"print({});\");\n break;\n case \"non-conform\":\n default:\n this.internal.events.subscribe(\"postPutResources\", function() {\n refAutoPrintTag = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /Named\");\n this.internal.out(\"/Type /Action\");\n this.internal.out(\"/N /Print\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n });\n break;\n }\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @class Canvas\n * @classdesc A Canvas Wrapper for jsPDF\n */\n var Canvas = function() {\n var jsPdfInstance = undefined;\n Object.defineProperty(this, \"pdf\", {\n get: function() {\n return jsPdfInstance;\n },\n set: function(value) {\n jsPdfInstance = value;\n }\n });\n\n var _width = 150;\n /**\n * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n * This is one of the two properties, the other being width, that controls the size of the canvas.\n *\n * @name width\n */\n Object.defineProperty(this, \"width\", {\n get: function() {\n return _width;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _width = 150;\n } else {\n _width = value;\n }\n if (this.getContext(\"2d\").pageWrapXEnabled) {\n this.getContext(\"2d\").pageWrapX = _width + 1;\n }\n }\n });\n\n var _height = 300;\n /**\n * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n * This is one of the two properties, the other being height, that controls the size of the canvas.\n *\n * @name height\n */\n Object.defineProperty(this, \"height\", {\n get: function() {\n return _height;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _height = 300;\n } else {\n _height = value;\n }\n if (this.getContext(\"2d\").pageWrapYEnabled) {\n this.getContext(\"2d\").pageWrapY = _height + 1;\n }\n }\n });\n\n var _childNodes = [];\n Object.defineProperty(this, \"childNodes\", {\n get: function() {\n return _childNodes;\n },\n set: function(value) {\n _childNodes = value;\n }\n });\n\n var _style = {};\n Object.defineProperty(this, \"style\", {\n get: function() {\n return _style;\n },\n set: function(value) {\n _style = value;\n }\n });\n\n Object.defineProperty(this, \"parentNode\", {});\n };\n\n /**\n * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n *\n * @name getContext\n * @function\n * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n * @param {object} contextAttributes\n */\n Canvas.prototype.getContext = function(contextType, contextAttributes) {\n contextType = contextType || \"2d\";\n var key;\n\n if (contextType !== \"2d\") {\n return null;\n }\n for (key in contextAttributes) {\n if (this.pdf.context2d.hasOwnProperty(key)) {\n this.pdf.context2d[key] = contextAttributes[key];\n }\n }\n this.pdf.context2d._canvas = this;\n return this.pdf.context2d;\n };\n\n /**\n * The toDataURL() method is just a stub to throw an error if accidently called.\n *\n * @name toDataURL\n * @function\n */\n Canvas.prototype.toDataURL = function() {\n throw new Error(\"toDataURL is not implemented.\");\n };\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n this.canvas = new Canvas();\n this.canvas.pdf = this;\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n var px2pt = (0.264583 * 72) / 25.4;\n var printingHeaderRow = false;\n\n var _initialize = function() {\n if (typeof this.internal.__cell__ === \"undefined\") {\n this.internal.__cell__ = {};\n this.internal.__cell__.padding = 3;\n this.internal.__cell__.headerFunction = undefined;\n this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n this.internal.__cell__.margins.width = this.getPageWidth();\n _reset.call(this);\n }\n };\n\n var _reset = function() {\n this.internal.__cell__.lastCell = new Cell();\n this.internal.__cell__.pages = 1;\n };\n\n var Cell = function() {\n var _x = arguments[0];\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n get: function() {\n return _x;\n },\n set: function(value) {\n _x = value;\n }\n });\n var _y = arguments[1];\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n get: function() {\n return _y;\n },\n set: function(value) {\n _y = value;\n }\n });\n var _width = arguments[2];\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n _width = value;\n }\n });\n var _height = arguments[3];\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n get: function() {\n return _height;\n },\n set: function(value) {\n _height = value;\n }\n });\n var _text = arguments[4];\n Object.defineProperty(this, \"text\", {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = value;\n }\n });\n var _lineNumber = arguments[5];\n Object.defineProperty(this, \"lineNumber\", {\n enumerable: true,\n get: function() {\n return _lineNumber;\n },\n set: function(value) {\n _lineNumber = value;\n }\n });\n var _align = arguments[6];\n Object.defineProperty(this, \"align\", {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n _align = value;\n }\n });\n\n return this;\n };\n\n Cell.prototype.clone = function() {\n return new Cell(\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n );\n };\n\n Cell.prototype.toArray = function() {\n return [\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n ];\n };\n\n /**\n * @name setHeaderFunction\n * @function\n * @param {function} func\n */\n jsPDFAPI.setHeaderFunction = function(func) {\n _initialize.call(this);\n this.internal.__cell__.headerFunction =\n typeof func === \"function\" ? func : undefined;\n return this;\n };\n\n /**\n * @name getTextDimensions\n * @function\n * @param {string} txt\n * @returns {Object} dimensions\n */\n jsPDFAPI.getTextDimensions = function(text, options) {\n _initialize.call(this);\n options = options || {};\n var fontSize = options.fontSize || this.getFontSize();\n var font = options.font || this.getFont();\n var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n var width = 0;\n var amountOfLines = 0;\n var height = 0;\n var tempWidth = 0;\n var scope = this;\n\n if (!Array.isArray(text) && typeof text !== \"string\") {\n if (typeof text === \"number\") {\n text = String(text);\n } else {\n throw new Error(\n \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n );\n }\n }\n\n const maxWidth = options.maxWidth;\n if (maxWidth > 0) {\n if (typeof text === \"string\") {\n text = this.splitTextToSize(text, maxWidth);\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n text = text.reduce(function(acc, textLine) {\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n }, []);\n }\n } else {\n // Without the else clause, it will not work if you do not pass along maxWidth\n text = Array.isArray(text) ? text : [text];\n }\n\n for (var i = 0; i < text.length; i++) {\n tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n if (width < tempWidth) {\n width = tempWidth;\n }\n }\n\n if (width !== 0) {\n amountOfLines = text.length;\n }\n\n width = width / scaleFactor;\n height = Math.max(\n (amountOfLines * fontSize * this.getLineHeightFactor() -\n fontSize * (this.getLineHeightFactor() - 1)) /\n scaleFactor,\n 0\n );\n return { w: width, h: height };\n };\n\n /**\n * @name cellAddPage\n * @function\n */\n jsPDFAPI.cellAddPage = function() {\n _initialize.call(this);\n\n this.addPage();\n\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n this.internal.__cell__.lastCell = new Cell(\n margins.left,\n margins.top,\n undefined,\n undefined\n );\n this.internal.__cell__.pages += 1;\n\n return this;\n };\n\n /**\n * @name cell\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} text\n * @param {number} lineNumber lineNumber\n * @param {string} align\n * @return {jsPDF} jsPDF-instance\n */\n var cell = (jsPDFAPI.cell = function() {\n var currentCell;\n\n if (arguments[0] instanceof Cell) {\n currentCell = arguments[0];\n } else {\n currentCell = new Cell(\n arguments[0],\n arguments[1],\n arguments[2],\n arguments[3],\n arguments[4],\n arguments[5]\n );\n }\n _initialize.call(this);\n var lastCell = this.internal.__cell__.lastCell;\n var padding = this.internal.__cell__.padding;\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n var printHeaders = this.internal.__cell__.printHeaders;\n // If this is not the first cell, we must change its position\n if (typeof lastCell.lineNumber !== \"undefined\") {\n if (lastCell.lineNumber === currentCell.lineNumber) {\n //Same line\n currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n currentCell.y = lastCell.y || 0;\n } else {\n //New line\n if (\n lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n this.getPageHeight()\n ) {\n this.cellAddPage();\n currentCell.y = margins.top;\n if (printHeaders && tableHeaderRow) {\n this.printHeaderRow(currentCell.lineNumber, true);\n currentCell.y += tableHeaderRow[0].height;\n }\n } else {\n currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n }\n }\n }\n\n if (typeof currentCell.text[0] !== \"undefined\") {\n this.rect(\n currentCell.x,\n currentCell.y,\n currentCell.width,\n currentCell.height,\n printingHeaderRow === true ? \"FD\" : undefined\n );\n if (currentCell.align === \"right\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width - padding,\n currentCell.y + padding,\n { align: \"right\", baseline: \"top\" }\n );\n } else if (currentCell.align === \"center\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width / 2,\n currentCell.y + padding,\n {\n align: \"center\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n } else {\n this.text(\n currentCell.text,\n currentCell.x + padding,\n currentCell.y + padding,\n {\n align: \"left\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n }\n }\n this.internal.__cell__.lastCell = currentCell;\n return this;\n });\n\n /**\n * Create a table from a set of data.\n * @name table\n * @function\n * @param {Integer} [x] : left-position for top-left corner of table\n * @param {Integer} [y] top-position for top-left corner of table\n * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n * @param {Object} [config.margins] margin values for left, top, bottom, and width\n * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n * @param {Object} [config.padding] cell-padding in pt to use (optional)\n * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n * @param {Object} [config.headerTextColor] default is #000 (optional)\n * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.table = function(x, y, data, headers, config) {\n _initialize.call(this);\n if (!data) {\n throw new Error(\"No data for PDF table.\");\n }\n\n config = config || {};\n\n var headerNames = [],\n headerLabels = [],\n headerAligns = [],\n i,\n columnMatrix = {},\n columnWidths = {},\n column,\n columnMinWidths = [],\n j,\n tableHeaderConfigs = [],\n //set up defaults. If a value is provided in config, defaults will be overwritten:\n autoSize = config.autoSize || false,\n printHeaders = config.printHeaders === false ? false : true,\n fontSize =\n config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n ? config.css[\"font-size\"] * 16\n : config.fontSize || 12,\n margins =\n config.margins ||\n Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n padding = typeof config.padding === \"number\" ? config.padding : 3,\n headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n headerTextColor = config.headerTextColor || \"#000\";\n\n _reset.call(this);\n\n this.internal.__cell__.printHeaders = printHeaders;\n this.internal.__cell__.margins = margins;\n this.internal.__cell__.table_font_size = fontSize;\n this.internal.__cell__.padding = padding;\n this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n this.internal.__cell__.headerTextColor = headerTextColor;\n this.setFontSize(fontSize);\n\n // Set header values\n if (headers === undefined || headers === null) {\n // No headers defined so we derive from data\n headerNames = Object.keys(data[0]);\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n headerNames = headers.map(function(header) {\n return header.name;\n });\n headerLabels = headers.map(function(header) {\n return header.prompt || header.name || \"\";\n });\n headerAligns = headers.map(function(header) {\n return header.align || \"left\";\n });\n // Split header configs into names and prompts\n for (i = 0; i < headers.length; i += 1) {\n columnWidths[headers[i].name] = headers[i].width * px2pt;\n }\n } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n headerNames = headers;\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n }\n\n if (\n autoSize ||\n (Array.isArray(headers) && typeof headers[0] === \"string\")\n ) {\n var headerName;\n for (i = 0; i < headerNames.length; i += 1) {\n headerName = headerNames[i];\n\n // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n columnMatrix[headerName] = data.map(function(rec) {\n return rec[headerName];\n });\n\n // get header width\n this.setFont(undefined, \"bold\");\n columnMinWidths.push(\n this.getTextDimensions(headerLabels[i], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n column = columnMatrix[headerName];\n\n // get cell widths\n this.setFont(undefined, \"normal\");\n for (j = 0; j < column.length; j += 1) {\n columnMinWidths.push(\n this.getTextDimensions(column[j], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n }\n\n // get final column width\n columnWidths[headerName] =\n Math.max.apply(null, columnMinWidths) + padding + padding;\n\n //have to reset\n columnMinWidths = [];\n }\n }\n\n // -- Construct the table\n\n if (printHeaders) {\n var row = {};\n for (i = 0; i < headerNames.length; i += 1) {\n row[headerNames[i]] = {};\n row[headerNames[i]].text = headerLabels[i];\n row[headerNames[i]].align = headerAligns[i];\n }\n\n var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n // Construct the header row\n tableHeaderConfigs = headerNames.map(function(value) {\n return new Cell(\n x,\n y,\n columnWidths[value],\n rowHeight,\n row[value].text,\n undefined,\n row[value].align\n );\n });\n\n // Store the table header config\n this.setTableHeaderRow(tableHeaderConfigs);\n\n // Print the header for the start of the table\n this.printHeaderRow(1, false);\n }\n\n // Construct the data rows\n\n var align = headers.reduce(function(pv, cv) {\n pv[cv.name] = cv.align;\n return pv;\n }, {});\n for (i = 0; i < data.length; i += 1) {\n if (\"rowStart\" in config && config.rowStart instanceof Function) {\n config.rowStart(\n {\n row: i,\n data: data[i]\n },\n this\n );\n }\n var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n for (j = 0; j < headerNames.length; j += 1) {\n var cellData = data[i][headerNames[j]];\n if (\"cellStart\" in config && config.cellStart instanceof Function) {\n config.cellStart(\n {\n row: i,\n col: j,\n data: cellData\n },\n this\n );\n }\n cell.call(\n this,\n new Cell(\n x,\n y,\n columnWidths[headerNames[j]],\n lineHeight,\n cellData,\n i + 2,\n align[headerNames[j]]\n )\n );\n }\n }\n this.internal.__cell__.table_x = x;\n this.internal.__cell__.table_y = y;\n return this;\n };\n\n /**\n * Calculate the height for containing the highest column\n *\n * @name calculateLineHeight\n * @function\n * @param {Object[]} model is the line of data we want to calculate the height of\n * @param {Integer[]} columnWidths is size of each column\n * @returns {number} lineHeight\n * @private\n */\n var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n var padding = this.internal.__cell__.padding;\n var fontSize = this.internal.__cell__.table_font_size;\n var scaleFactor = this.internal.scaleFactor;\n\n return Object.keys(model)\n .map(function(key) {\n var value = model[key];\n return this.splitTextToSize(\n value.hasOwnProperty(\"text\") ? value.text : value,\n columnWidths[key] - padding - padding\n );\n }, this)\n .map(function(value) {\n return (\n (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n padding +\n padding\n );\n }, this)\n .reduce(function(pv, cv) {\n return Math.max(pv, cv);\n }, 0);\n };\n\n /**\n * Store the config for outputting a table header\n *\n * @name setTableHeaderRow\n * @function\n * @param {Object[]} config\n * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n * except the lineNumber parameter is excluded\n */\n jsPDFAPI.setTableHeaderRow = function(config) {\n _initialize.call(this);\n this.internal.__cell__.tableHeaderRow = config;\n };\n\n /**\n * Output the store header row\n *\n * @name printHeaderRow\n * @function\n * @param {number} lineNumber The line number to output the header at\n * @param {boolean} new_page\n */\n jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n _initialize.call(this);\n if (!this.internal.__cell__.tableHeaderRow) {\n throw new Error(\"Property tableHeaderRow does not exist.\");\n }\n\n var tableHeaderCell;\n\n printingHeaderRow = true;\n if (typeof this.internal.__cell__.headerFunction === \"function\") {\n var position = this.internal.__cell__.headerFunction(\n this,\n this.internal.__cell__.pages\n );\n this.internal.__cell__.lastCell = new Cell(\n position[0],\n position[1],\n position[2],\n position[3],\n undefined,\n -1\n );\n }\n this.setFont(undefined, \"bold\");\n\n var tempHeaderConf = [];\n for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n if (new_page) {\n tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n tempHeaderConf.push(tableHeaderCell);\n }\n tableHeaderCell.lineNumber = lineNumber;\n var currentTextColor = this.getTextColor();\n this.setTextColor(this.internal.__cell__.headerTextColor);\n this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n cell.call(this, tableHeaderCell);\n this.setTextColor(currentTextColor);\n }\n if (tempHeaderConf.length > 0) {\n this.setTableHeaderRow(tempHeaderConf);\n }\n this.setFont(undefined, \"normal\");\n printingHeaderRow = false;\n };\n})(jsPDF.API);\n","function toLookup(arr) {\n return arr.reduce(function(lookup, name, index) {\n lookup[name] = index;\n\n return lookup;\n }, {});\n}\n\nvar fontStyleOrder = {\n italic: [\"italic\", \"oblique\", \"normal\"],\n oblique: [\"oblique\", \"italic\", \"normal\"],\n normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n \"ultra-condensed\",\n \"extra-condensed\",\n \"condensed\",\n \"semi-condensed\",\n \"normal\",\n \"semi-expanded\",\n \"expanded\",\n \"extra-expanded\",\n \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n stretch = stretch || \"normal\";\n\n return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n style = style || \"normal\";\n\n return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n if (!weight) {\n return 400;\n }\n\n if (typeof weight === \"number\") {\n // Ignore values which aren't valid font-weights.\n return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n }\n\n if (/^\\d00$/.test(weight)) {\n return parseInt(weight);\n }\n\n switch (weight) {\n case \"bold\":\n return 700;\n\n case \"normal\":\n default:\n return 400;\n }\n}\n\nexport function normalizeFontFace(fontFace) {\n var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n var style = normalizeFontStyle(fontFace.style);\n var weight = normalizeFontWeight(fontFace.weight);\n var stretch = normalizeFontStretch(fontFace.stretch);\n\n return {\n family: family,\n style: style,\n weight: weight,\n stretch: stretch,\n src: fontFace.src || [],\n\n // The ref property maps this font-face to the font\n // added by the .addFont() method.\n ref: fontFace.ref || {\n name: family,\n style: [stretch, style, weight].join(\" \")\n }\n };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n var map = {};\n\n for (var i = 0; i < fontFaces.length; ++i) {\n var normalized = normalizeFontFace(fontFaces[i]);\n\n var name = normalized.family;\n var stretch = normalized.stretch;\n var style = normalized.style;\n var weight = normalized.weight;\n\n map[name] = map[name] || {};\n\n map[name][stretch] = map[name][stretch] || {};\n map[name][stretch][style] = map[name][stretch][style] || {};\n map[name][stretch][style][weight] = normalized;\n }\n\n return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n var i;\n\n for (i = pivot; i >= 0 && i < order.length; i += dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n\n for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n if (matchingSet[stretch]) {\n return matchingSet[stretch];\n }\n\n var pivot = fontStretchLookup[stretch];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-stretch value for \" + stretch\n );\n }\n\n return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n if (matchingSet[fontStyle]) {\n return matchingSet[fontStyle];\n }\n\n var ordering = fontStyleOrder[fontStyle];\n\n for (var i = 0; i < ordering.length; ++i) {\n if (matchingSet[ordering[i]]) {\n return matchingSet[ordering[i]];\n }\n }\n\n // Since a font-family cannot exist without having at least one style value\n // we should never reach this point.\n throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n if (matchingSet[weight]) {\n return matchingSet[weight];\n }\n\n if (weight === 400 && matchingSet[500]) {\n return matchingSet[500];\n }\n\n if (weight === 500 && matchingSet[400]) {\n return matchingSet[400];\n }\n\n var pivot = fontWeightsLookup[weight];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = weight < 400 ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-weight for value \" + weight\n );\n }\n\n return match;\n}\n\nvar defaultGenericFontFamilies = {\n \"sans-serif\": \"helvetica\",\n fixed: \"courier\",\n monospace: \"courier\",\n terminal: \"courier\",\n cursive: \"times\",\n fantasy: \"times\",\n serif: \"times\"\n};\n\nvar systemFonts = {\n caption: \"times\",\n icon: \"times\",\n menu: \"times\",\n \"message-box\": \"times\",\n \"small-caption\": \"times\",\n \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n opts = opts || {};\n\n var defaultFontFamily = opts.defaultFontFamily || \"times\";\n var genericFontFamilies = Object.assign(\n {},\n defaultGenericFontFamilies,\n opts.genericFontFamilies || {}\n );\n\n var rule = null;\n var matches = null;\n\n for (var i = 0; i < rules.length; ++i) {\n rule = normalizeFontFace(rules[i]);\n\n if (genericFontFamilies[rule.family]) {\n rule.family = genericFontFamilies[rule.family];\n }\n\n if (fontFaceMap.hasOwnProperty(rule.family)) {\n matches = fontFaceMap[rule.family];\n\n break;\n }\n }\n\n // Always fallback to a known font family.\n matches = matches || fontFaceMap[defaultFontFamily];\n\n if (!matches) {\n // At this point we should definitiely have a font family, but if we\n // don't there is something wrong with our configuration\n throw new Error(\n \"Could not find a font-family for the rule '\" +\n ruleToString(rule) +\n \"' and default family '\" +\n defaultFontFamily +\n \"'.\"\n );\n }\n\n matches = resolveFontStretch(rule.stretch, matches);\n matches = resolveFontStyle(rule.style, matches);\n matches = resolveFontWeight(rule.weight, matches);\n\n if (!matches) {\n // We should've fount\n throw new Error(\n \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n );\n }\n\n return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n var index = 0;\n\n while (index < input.length) {\n var current = input.charAt(index);\n\n if (current === quote) {\n return [input.substring(0, index), input.substring(index + 1)];\n }\n\n index += 1;\n }\n\n // Unexpected end of input\n return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n //\n // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n //\n // Breakdown of regexp:\n // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n // [a-z_] - allow a-z and underscore at beginning of input\n // [a-z0-9_-]* - after that, anything goes\n var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n // non quoted value contains illegal characters\n if (match === null) {\n return null;\n }\n\n return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n var result = [];\n var ch, parsed;\n var remaining = input.trim();\n\n if (remaining === \"\") {\n return defaultFont;\n }\n\n if (remaining in systemFonts) {\n return [systemFonts[remaining]];\n }\n\n while (remaining !== \"\") {\n parsed = null;\n remaining = eatWhiteSpace(remaining);\n ch = remaining.charAt(0);\n\n switch (ch) {\n case '\"':\n case \"'\":\n parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n break;\n\n default:\n parsed = parseNonQuotedFontFamily(remaining);\n break;\n }\n\n if (parsed === null) {\n return defaultFont;\n }\n\n result.push(parsed[0]);\n\n remaining = eatWhiteSpace(parsed[1]);\n\n // We expect end of input or a comma separator here\n if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n return defaultFont;\n }\n\n remaining = remaining.replace(/^,/, \"\");\n }\n\n return result;\n}\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n buildFontFaceMap,\r\n parseFontFamily,\r\n resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n \"use strict\";\r\n var ContextLayer = function(ctx) {\r\n ctx = ctx || {};\r\n this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n this.strokeOpacity = ctx.strokeOpacity || 1;\r\n this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n this.fillStyle = ctx.fillStyle || \"#000000\";\r\n this.isFillTransparent = ctx.isFillTransparent || false;\r\n this.fillOpacity = ctx.fillOpacity || 1;\r\n this.font = ctx.font || \"10px sans-serif\";\r\n this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n this.textAlign = ctx.textAlign || \"left\";\r\n this.lineWidth = ctx.lineWidth || 1;\r\n this.lineJoin = ctx.lineJoin || \"miter\";\r\n this.lineCap = ctx.lineCap || \"butt\";\r\n this.path = ctx.path || [];\r\n this.transform =\r\n typeof ctx.transform !== \"undefined\"\r\n ? ctx.transform.clone()\r\n : new Matrix();\r\n this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n this.globalAlpha = ctx.globalAlpha || 1.0;\r\n this.clip_path = ctx.clip_path || [];\r\n this.currentPoint = ctx.currentPoint || new Point();\r\n this.miterLimit = ctx.miterLimit || 10.0;\r\n this.lastPoint = ctx.lastPoint || new Point();\r\n this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n this.lineDash = ctx.lineDash || [];\r\n this.margin = ctx.margin || [0, 0, 0, 0];\r\n this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n this.ignoreClearRect =\r\n typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n return this;\r\n };\r\n\r\n //stub\r\n var f2,\r\n getHorizontalCoordinateString,\r\n getVerticalCoordinateString,\r\n getHorizontalCoordinate,\r\n getVerticalCoordinate,\r\n Point,\r\n Rectangle,\r\n Matrix,\r\n _ctx;\r\n jsPDFAPI.events.push([\r\n \"initialized\",\r\n function() {\r\n this.context2d = new Context2D(this);\r\n\r\n f2 = this.internal.f2;\r\n getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n Point = this.internal.Point;\r\n Rectangle = this.internal.Rectangle;\r\n Matrix = this.internal.Matrix;\r\n _ctx = new ContextLayer();\r\n }\r\n ]);\r\n\r\n var Context2D = function(pdf) {\r\n Object.defineProperty(this, \"canvas\", {\r\n get: function() {\r\n return { parentNode: false, style: false };\r\n }\r\n });\r\n\r\n var _pdf = pdf;\r\n Object.defineProperty(this, \"pdf\", {\r\n get: function() {\r\n return _pdf;\r\n }\r\n });\r\n\r\n var _pageWrapXEnabled = false;\r\n /**\r\n * @name pageWrapXEnabled\r\n * @type {boolean}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n get: function() {\r\n return _pageWrapXEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapXEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _pageWrapYEnabled = false;\r\n /**\r\n * @name pageWrapYEnabled\r\n * @type {boolean}\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n get: function() {\r\n return _pageWrapYEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapYEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _posX = 0;\r\n /**\r\n * @name posX\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posX\", {\r\n get: function() {\r\n return _posX;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posX = value;\r\n }\r\n }\r\n });\r\n\r\n var _posY = 0;\r\n /**\r\n * @name posY\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posY\", {\r\n get: function() {\r\n return _posY;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posY = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n * @name margin\r\n * @type {number|number[]}\r\n * @default [0, 0, 0, 0]\r\n */\r\n Object.defineProperty(this, \"margin\", {\r\n get: function() {\r\n return _ctx.margin;\r\n },\r\n set: function(value) {\r\n var margin;\r\n if (typeof value === \"number\") {\r\n margin = [value, value, value, value];\r\n } else {\r\n margin = new Array(4);\r\n margin[0] = value[0];\r\n margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n }\r\n _ctx.margin = margin;\r\n }\r\n });\r\n\r\n var _autoPaging = false;\r\n /**\r\n * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n * pages if required.\r\n *\r\n * Context2d supports different modes:\r\n *
      \r\n *
    • \r\n * false: Auto paging is disabled.\r\n *
    • \r\n *
    • \r\n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\r\n * slice text in half, making it difficult to read.\r\n *
    • \r\n *
    • \r\n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\r\n * mostly of a single column of text.\r\n *
    • \r\n *
    \r\n * @name Context2D#autoPaging\r\n * @type {boolean|\"slice\"|\"text\"}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"autoPaging\", {\r\n get: function() {\r\n return _autoPaging;\r\n },\r\n set: function(value) {\r\n _autoPaging = value;\r\n }\r\n });\r\n\r\n var lastBreak = 0;\r\n /**\r\n * @name lastBreak\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"lastBreak\", {\r\n get: function() {\r\n return lastBreak;\r\n },\r\n set: function(value) {\r\n lastBreak = value;\r\n }\r\n });\r\n\r\n var pageBreaks = [];\r\n /**\r\n * Y Position of page breaks.\r\n * @name pageBreaks\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"pageBreaks\", {\r\n get: function() {\r\n return pageBreaks;\r\n },\r\n set: function(value) {\r\n pageBreaks = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctx\r\n * @type {object}\r\n * @default {}\r\n */\r\n Object.defineProperty(this, \"ctx\", {\r\n get: function() {\r\n return _ctx;\r\n },\r\n set: function(value) {\r\n if (value instanceof ContextLayer) {\r\n _ctx = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * @name path\r\n * @type {array}\r\n * @default []\r\n */\r\n Object.defineProperty(this, \"path\", {\r\n get: function() {\r\n return _ctx.path;\r\n },\r\n set: function(value) {\r\n _ctx.path = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctxStack\r\n * @type {array}\r\n * @default []\r\n */\r\n var _ctxStack = [];\r\n Object.defineProperty(this, \"ctxStack\", {\r\n get: function() {\r\n return _ctxStack;\r\n },\r\n set: function(value) {\r\n _ctxStack = value;\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n *\r\n * @name fillStyle\r\n * @default #000000\r\n * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    \r\n * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    \r\n * A pattern object to use to fill the drawing (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"fillStyle\", {\r\n get: function() {\r\n return this.ctx.fillStyle;\r\n },\r\n set: function(value) {\r\n var rgba;\r\n rgba = getRGBA(value);\r\n\r\n this.ctx.fillStyle = rgba.style;\r\n this.ctx.isFillTransparent = rgba.a === 0;\r\n this.ctx.fillOpacity = rgba.a;\r\n\r\n this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used for strokes\r\n *\r\n * @name strokeStyle\r\n * @default #000000\r\n * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"strokeStyle\", {\r\n get: function() {\r\n return this.ctx.strokeStyle;\r\n },\r\n set: function(value) {\r\n var rgba = getRGBA(value);\r\n\r\n this.ctx.strokeStyle = rgba.style;\r\n this.ctx.isStrokeTransparent = rgba.a === 0;\r\n this.ctx.strokeOpacity = rgba.a;\r\n\r\n if (rgba.a === 0) {\r\n this.pdf.setDrawColor(255, 255, 255);\r\n } else if (rgba.a === 1) {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n } else {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the style of the end caps for a line\r\n *\r\n * @name lineCap\r\n * @default butt\r\n * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    \r\n * round A rounded end cap is added to each end of the line
    \r\n * square A square end cap is added to each end of the line
    \r\n */\r\n Object.defineProperty(this, \"lineCap\", {\r\n get: function() {\r\n return this.ctx.lineCap;\r\n },\r\n set: function(value) {\r\n if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n this.ctx.lineCap = value;\r\n this.pdf.setLineCap(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the current line width\r\n *\r\n * @name lineWidth\r\n * @default 1\r\n * @property {number} lineWidth The current line width, in pixels\r\n */\r\n Object.defineProperty(this, \"lineWidth\", {\r\n get: function() {\r\n return this.ctx.lineWidth;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.lineWidth = value;\r\n this.pdf.setLineWidth(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the type of corner created, when two lines meet\r\n */\r\n Object.defineProperty(this, \"lineJoin\", {\r\n get: function() {\r\n return this.ctx.lineJoin;\r\n },\r\n set: function(value) {\r\n if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n this.ctx.lineJoin = value;\r\n this.pdf.setLineJoin(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n *\r\n * @name miterLimit\r\n * @default 10\r\n */\r\n Object.defineProperty(this, \"miterLimit\", {\r\n get: function() {\r\n return this.ctx.miterLimit;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.miterLimit = value;\r\n this.pdf.setMiterLimit(value);\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textBaseline\", {\r\n get: function() {\r\n return this.ctx.textBaseline;\r\n },\r\n set: function(value) {\r\n this.ctx.textBaseline = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textAlign\", {\r\n get: function() {\r\n return this.ctx.textAlign;\r\n },\r\n set: function(value) {\r\n if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n this.ctx.textAlign = value;\r\n }\r\n }\r\n });\r\n\r\n var _fontFaceMap = null;\r\n\r\n function getFontFaceMap(pdf, fontFaces) {\r\n if (_fontFaceMap === null) {\r\n var fontMap = pdf.getFontList();\r\n\r\n var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n }\r\n\r\n return _fontFaceMap;\r\n }\r\n\r\n function convertToFontFaces(fontMap) {\r\n var fontFaces = [];\r\n\r\n Object.keys(fontMap).forEach(function(family) {\r\n var styles = fontMap[family];\r\n\r\n styles.forEach(function(style) {\r\n var fontFace = null;\r\n\r\n switch (style) {\r\n case \"bold\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\"\r\n };\r\n break;\r\n\r\n case \"italic\":\r\n fontFace = {\r\n family: family,\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"bolditalic\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\",\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"\":\r\n case \"normal\":\r\n fontFace = {\r\n family: family\r\n };\r\n break;\r\n }\r\n\r\n // If font-face is still null here, it is a font with some styling we don't recognize and\r\n // cannot map or it is a font added via the fontFaces option of .html().\r\n if (fontFace !== null) {\r\n fontFace.ref = {\r\n name: family,\r\n style: style\r\n };\r\n\r\n fontFaces.push(fontFace);\r\n }\r\n });\r\n });\r\n\r\n return fontFaces;\r\n }\r\n\r\n var _fontFaces = null;\r\n /**\r\n * A map of available font-faces, as passed in the options of\r\n * .html(). If set a limited implementation of the font style matching\r\n * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n * will be used. If not set it will fallback to previous behavior.\r\n */\r\n\r\n Object.defineProperty(this, \"fontFaces\", {\r\n get: function() {\r\n return _fontFaces;\r\n },\r\n set: function(value) {\r\n _fontFaceMap = null;\r\n _fontFaces = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"font\", {\r\n get: function() {\r\n return this.ctx.font;\r\n },\r\n set: function(value) {\r\n this.ctx.font = value;\r\n var rx, matches;\r\n\r\n //source: https://stackoverflow.com/a/10136041\r\n // eslint-disable-next-line no-useless-escape\r\n rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n matches = rx.exec(value);\r\n if (matches !== null) {\r\n var fontStyle = matches[1];\r\n var fontVariant = matches[2];\r\n var fontWeight = matches[3];\r\n var fontSize = matches[4];\r\n var lineHeight = matches[5];\r\n var fontFamily = matches[6];\r\n } else {\r\n return;\r\n }\r\n var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n if (\"px\" === fontSizeUnit) {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n } else if (\"em\" === fontSizeUnit) {\r\n fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n } else {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n }\r\n\r\n this.pdf.setFontSize(fontSize);\r\n var parts = parseFontFamily(fontFamily);\r\n\r\n if (this.fontFaces) {\r\n var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n var rules = parts.map(function(ff) {\r\n return {\r\n family: ff,\r\n stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n weight: fontWeight,\r\n style: fontStyle\r\n };\r\n });\r\n\r\n var font = resolveFontFace(fontFaceMap, rules);\r\n this.pdf.setFont(font.ref.name, font.ref.style);\r\n return;\r\n }\r\n\r\n var style = \"\";\r\n if (\r\n fontWeight === \"bold\" ||\r\n parseInt(fontWeight, 10) >= 700 ||\r\n fontStyle === \"bold\"\r\n ) {\r\n style = \"bold\";\r\n }\r\n\r\n if (fontStyle === \"italic\") {\r\n style += \"italic\";\r\n }\r\n\r\n if (style.length === 0) {\r\n style = \"normal\";\r\n }\r\n var jsPdfFontName = \"\";\r\n\r\n var fallbackFonts = {\r\n arial: \"Helvetica\",\r\n Arial: \"Helvetica\",\r\n verdana: \"Helvetica\",\r\n Verdana: \"Helvetica\",\r\n helvetica: \"Helvetica\",\r\n Helvetica: \"Helvetica\",\r\n \"sans-serif\": \"Helvetica\",\r\n fixed: \"Courier\",\r\n monospace: \"Courier\",\r\n terminal: \"Courier\",\r\n cursive: \"Times\",\r\n fantasy: \"Times\",\r\n serif: \"Times\"\r\n };\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n if (\r\n this.pdf.internal.getFont(parts[i], style, {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n break;\r\n } else if (\r\n style === \"bolditalic\" &&\r\n this.pdf.internal.getFont(parts[i], \"bold\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"bold\";\r\n } else if (\r\n this.pdf.internal.getFont(parts[i], \"normal\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"normal\";\r\n break;\r\n }\r\n }\r\n if (jsPdfFontName === \"\") {\r\n for (var j = 0; j < parts.length; j++) {\r\n if (fallbackFonts[parts[j]]) {\r\n jsPdfFontName = fallbackFonts[parts[j]];\r\n break;\r\n }\r\n }\r\n }\r\n jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n this.pdf.setFont(jsPdfFontName, style);\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalCompositeOperation\", {\r\n get: function() {\r\n return this.ctx.globalCompositeOperation;\r\n },\r\n set: function(value) {\r\n this.ctx.globalCompositeOperation = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalAlpha\", {\r\n get: function() {\r\n return this.ctx.globalAlpha;\r\n },\r\n set: function(value) {\r\n this.ctx.globalAlpha = value;\r\n }\r\n });\r\n\r\n /**\r\n * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n *\r\n * @name lineDashOffset\r\n * @default 0.0\r\n */\r\n Object.defineProperty(this, \"lineDashOffset\", {\r\n get: function() {\r\n return this.ctx.lineDashOffset;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDashOffset = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"lineDash\", {\r\n get: function() {\r\n return this.ctx.lineDash;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDash = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"ignoreClearRect\", {\r\n get: function() {\r\n return this.ctx.ignoreClearRect;\r\n },\r\n set: function(value) {\r\n this.ctx.ignoreClearRect = Boolean(value);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets the line dash pattern used when stroking lines.\r\n * @name setLineDash\r\n * @function\r\n * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n */\r\n Context2D.prototype.setLineDash = function(dashArray) {\r\n this.lineDash = dashArray;\r\n };\r\n\r\n /**\r\n * gets the current line dash pattern.\r\n * @name getLineDash\r\n * @function\r\n * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n */\r\n Context2D.prototype.getLineDash = function() {\r\n if (this.lineDash.length % 2) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n return this.lineDash.concat(this.lineDash);\r\n } else {\r\n // The copied value is returned to prevent contamination from outside.\r\n return this.lineDash.slice();\r\n }\r\n };\r\n\r\n Context2D.prototype.fill = function() {\r\n pathPreProcess.call(this, \"fill\", false);\r\n };\r\n\r\n /**\r\n * Actually draws the path you have defined\r\n *\r\n * @name stroke\r\n * @function\r\n * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n */\r\n Context2D.prototype.stroke = function() {\r\n pathPreProcess.call(this, \"stroke\", false);\r\n };\r\n\r\n /**\r\n * Begins a path, or resets the current\r\n *\r\n * @name beginPath\r\n * @function\r\n * @description The beginPath() method begins a path, or resets the current path.\r\n */\r\n Context2D.prototype.beginPath = function() {\r\n this.path = [\r\n {\r\n type: \"begin\"\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Moves the path to the specified point in the canvas, without creating a line\r\n *\r\n * @name moveTo\r\n * @function\r\n * @param x {Number} The x-coordinate of where to move the path to\r\n * @param y {Number} The y-coordinate of where to move the path to\r\n */\r\n Context2D.prototype.moveTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"mt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(x, y);\r\n };\r\n\r\n /**\r\n * Creates a path from the current point back to the starting point\r\n *\r\n * @name closePath\r\n * @function\r\n * @description The closePath() method creates a path from the current point back to the starting point.\r\n */\r\n Context2D.prototype.closePath = function() {\r\n var pathBegin = new Point(0, 0);\r\n var i = 0;\r\n for (i = this.path.length - 1; i !== -1; i--) {\r\n if (this.path[i].type === \"begin\") {\r\n if (\r\n typeof this.path[i + 1] === \"object\" &&\r\n typeof this.path[i + 1].x === \"number\"\r\n ) {\r\n pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n break;\r\n }\r\n }\r\n }\r\n this.path.push({\r\n type: \"close\"\r\n });\r\n this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n };\r\n\r\n /**\r\n * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n *\r\n * @name lineTo\r\n * @function\r\n * @param x The x-coordinate of where to create the line to\r\n * @param y The y-coordinate of where to create the line to\r\n * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n */\r\n Context2D.prototype.lineTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"lt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n };\r\n\r\n /**\r\n * Clips a region of any shape and size from the original canvas\r\n *\r\n * @name clip\r\n * @function\r\n * @description The clip() method clips a region of any shape and size from the original canvas.\r\n */\r\n Context2D.prototype.clip = function() {\r\n this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n pathPreProcess.call(this, null, true);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name quadraticCurveTo\r\n * @function\r\n * @param cpx {Number} The x-coordinate of the Bézier control point\r\n * @param cpy {Number} The y-coordinate of the Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n console.error(\r\n \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n );\r\n }\r\n\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n this.path.push({\r\n type: \"qct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name bezierCurveTo\r\n * @function\r\n * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(cp1x) ||\r\n isNaN(cp1y) ||\r\n isNaN(cp2x) ||\r\n isNaN(cp2y)\r\n ) {\r\n console.error(\r\n \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n );\r\n }\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n this.path.push({\r\n type: \"bct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x2: pt2.x,\r\n y2: pt2.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates an arc/curve (used to create circles, or parts of circles)\r\n *\r\n * @name arc\r\n * @function\r\n * @param x {Number} The x-coordinate of the center of the circle\r\n * @param y {Number} The y-coordinate of the center of the circle\r\n * @param radius {Number} The radius of the circle\r\n * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n * @param endAngle {Number} The ending angle, in radians\r\n * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n */\r\n Context2D.prototype.arc = function(\r\n x,\r\n y,\r\n radius,\r\n startAngle,\r\n endAngle,\r\n counterclockwise\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(radius) ||\r\n isNaN(startAngle) ||\r\n isNaN(endAngle)\r\n ) {\r\n console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n }\r\n counterclockwise = Boolean(counterclockwise);\r\n\r\n if (!this.ctx.transform.isIdentity) {\r\n var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n x = xpt.x;\r\n y = xpt.y;\r\n\r\n var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n radius = Math.sqrt(\r\n Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n );\r\n }\r\n if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n startAngle = 0;\r\n endAngle = 2 * Math.PI;\r\n }\r\n\r\n this.path.push({\r\n type: \"arc\",\r\n x: x,\r\n y: y,\r\n radius: radius,\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n counterclockwise: counterclockwise\r\n });\r\n // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n };\r\n\r\n /**\r\n * Creates an arc/curve between two tangents\r\n *\r\n * @name arcTo\r\n * @function\r\n * @param x1 {Number} The x-coordinate of the first tangent\r\n * @param y1 {Number} The y-coordinate of the first tangent\r\n * @param x2 {Number} The x-coordinate of the second tangent\r\n * @param y2 {Number} The y-coordinate of the second tangent\r\n * @param radius The radius of the arc\r\n * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n throw new Error(\"arcTo not implemented.\");\r\n };\r\n\r\n /**\r\n * Creates a rectangle\r\n *\r\n * @name rect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The rect() method creates a rectangle.\r\n */\r\n Context2D.prototype.rect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n }\r\n this.moveTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x + w, y + h);\r\n this.lineTo(x, y + h);\r\n this.lineTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x, y);\r\n };\r\n\r\n /**\r\n * Draws a \"filled\" rectangle\r\n *\r\n * @name fillRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n */\r\n Context2D.prototype.fillRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n }\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n var tmp = {};\r\n if (this.lineCap !== \"butt\") {\r\n tmp.lineCap = this.lineCap;\r\n this.lineCap = \"butt\";\r\n }\r\n if (this.lineJoin !== \"miter\") {\r\n tmp.lineJoin = this.lineJoin;\r\n this.lineJoin = \"miter\";\r\n }\r\n\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.fill();\r\n\r\n if (tmp.hasOwnProperty(\"lineCap\")) {\r\n this.lineCap = tmp.lineCap;\r\n }\r\n if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n this.lineJoin = tmp.lineJoin;\r\n }\r\n };\r\n\r\n /**\r\n * Draws a rectangle (no fill)\r\n *\r\n * @name strokeRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n */\r\n Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.stroke();\r\n };\r\n\r\n /**\r\n * Clears the specified pixels within a given rectangle\r\n *\r\n * @name clearRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle to clear, in pixels\r\n * @param h {Number} The height of the rectangle to clear, in pixels\r\n * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    \r\n * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n *\r\n */\r\n Context2D.prototype.clearRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n }\r\n if (this.ignoreClearRect) {\r\n return;\r\n }\r\n\r\n this.fillStyle = \"#ffffff\";\r\n this.fillRect(x, y, w, h);\r\n };\r\n\r\n /**\r\n * Saves the state of the current context\r\n *\r\n * @name save\r\n * @function\r\n */\r\n Context2D.prototype.save = function(doStackPush) {\r\n doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPush) {\r\n this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n var ctx = new ContextLayer(this.ctx);\r\n this.ctxStack.push(this.ctx);\r\n this.ctx = ctx;\r\n }\r\n };\r\n\r\n /**\r\n * Returns previously saved path state and attributes\r\n *\r\n * @name restore\r\n * @function\r\n */\r\n Context2D.prototype.restore = function(doStackPop) {\r\n doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"Q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPop && this.ctxStack.length !== 0) {\r\n this.ctx = this.ctxStack.pop();\r\n this.fillStyle = this.ctx.fillStyle;\r\n this.strokeStyle = this.ctx.strokeStyle;\r\n this.font = this.ctx.font;\r\n this.lineCap = this.ctx.lineCap;\r\n this.lineWidth = this.ctx.lineWidth;\r\n this.lineJoin = this.ctx.lineJoin;\r\n this.lineDash = this.ctx.lineDash;\r\n this.lineDashOffset = this.ctx.lineDashOffset;\r\n }\r\n };\r\n\r\n /**\r\n * @name toDataURL\r\n * @function\r\n */\r\n Context2D.prototype.toDataURL = function() {\r\n throw new Error(\"toDataUrl not implemented.\");\r\n };\r\n\r\n //helper functions\r\n\r\n /**\r\n * Get the decimal values of r, g, b and a\r\n *\r\n * @name getRGBA\r\n * @function\r\n * @private\r\n * @ignore\r\n */\r\n var getRGBA = function(style) {\r\n var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n var r, g, b, a;\r\n\r\n if (style.isCanvasGradient === true) {\r\n style = style.getColor();\r\n }\r\n\r\n if (!style) {\r\n return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n }\r\n\r\n if (rxTransparent.test(style)) {\r\n r = 0;\r\n g = 0;\r\n b = 0;\r\n a = 0;\r\n } else {\r\n var matches = rxRgb.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = 1;\r\n } else {\r\n matches = rxRgba.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = parseFloat(matches[4]);\r\n } else {\r\n a = 1;\r\n\r\n if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(style);\r\n if (rgbColor.ok) {\r\n style = rgbColor.toHex();\r\n } else {\r\n style = \"#000000\";\r\n }\r\n }\r\n\r\n if (style.length === 4) {\r\n r = style.substring(1, 2);\r\n r += r;\r\n g = style.substring(2, 3);\r\n g += g;\r\n b = style.substring(3, 4);\r\n b += b;\r\n } else {\r\n r = style.substring(1, 3);\r\n g = style.substring(3, 5);\r\n b = style.substring(5, 7);\r\n }\r\n r = parseInt(r, 16);\r\n g = parseInt(g, 16);\r\n b = parseInt(b, 16);\r\n }\r\n }\r\n }\r\n return { r: r, g: g, b: b, a: a, style: style };\r\n };\r\n\r\n /**\r\n * @name isFillTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isFillTransparent = function() {\r\n return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n };\r\n\r\n /**\r\n * @name isStrokeTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isStrokeTransparent = function() {\r\n return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n };\r\n\r\n /**\r\n * Draws \"filled\" text on the canvas\r\n *\r\n * @name fillText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n }\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n // We only use X axis as scale hint\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Draws text on the canvas (no fill)\r\n *\r\n * @name strokeText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n renderingMode: \"stroke\",\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Returns an object that contains the width of the specified text\r\n *\r\n * @name measureText\r\n * @function\r\n * @param text {String} The text to be measured\r\n * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n * @returns {Number}\r\n */\r\n Context2D.prototype.measureText = function(text) {\r\n if (typeof text !== \"string\") {\r\n console.error(\r\n \"jsPDF.context2d.measureText: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n );\r\n }\r\n var pdf = this.pdf;\r\n var k = this.pdf.internal.scaleFactor;\r\n\r\n var fontSize = pdf.internal.getFontSize();\r\n var txtWidth =\r\n (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n var TextMetrics = function(options) {\r\n options = options || {};\r\n var _width = options.width || 0;\r\n Object.defineProperty(this, \"width\", {\r\n get: function() {\r\n return _width;\r\n }\r\n });\r\n return this;\r\n };\r\n return new TextMetrics({ width: txtWidth });\r\n };\r\n\r\n //Transformations\r\n\r\n /**\r\n * Scales the current drawing bigger or smaller\r\n *\r\n * @name scale\r\n * @function\r\n * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @description The scale() method scales the current drawing, bigger or smaller.\r\n */\r\n Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n }\r\n var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Rotates the current drawing\r\n *\r\n * @name rotate\r\n * @function\r\n * @param angle {Number} The rotation angle, in radians.\r\n * @description To calculate from degrees to radians: degrees*Math.PI/180.
    \r\n * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n */\r\n Context2D.prototype.rotate = function(angle) {\r\n if (isNaN(angle)) {\r\n console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n }\r\n var matrix = new Matrix(\r\n Math.cos(angle),\r\n Math.sin(angle),\r\n -Math.sin(angle),\r\n Math.cos(angle),\r\n 0.0,\r\n 0.0\r\n );\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Remaps the (0,0) position on the canvas\r\n *\r\n * @name translate\r\n * @function\r\n * @param x {Number} The value to add to horizontal (x) coordinates\r\n * @param y {Number} The value to add to vertical (y) coordinates\r\n * @description The translate() method remaps the (0,0) position on the canvas.\r\n */\r\n Context2D.prototype.translate = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n }\r\n var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Replaces the current transformation matrix for the drawing\r\n *\r\n * @name transform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n }\r\n var matrix = new Matrix(a, b, c, d, e, f);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Resets the current transform to the identity matrix. Then runs transform()\r\n *\r\n * @name setTransform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n a = isNaN(a) ? 1 : a;\r\n b = isNaN(b) ? 0 : b;\r\n c = isNaN(c) ? 0 : c;\r\n d = isNaN(d) ? 1 : d;\r\n e = isNaN(e) ? 0 : e;\r\n f = isNaN(f) ? 0 : f;\r\n this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n };\r\n\r\n /**\r\n * Should only be used if pageWrapYEnabled is true\r\n *\r\n * @name setPageByYPosition\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns One-based Page Number\r\n */\r\n var setPageByYPosition = function(y) {\r\n if (this.pageWrapYEnabled) {\r\n this.lastBreak = 0;\r\n var manualBreaks = 0;\r\n var autoBreaks = 0;\r\n for (var i = 0; i < this.pageBreaks.length; i++) {\r\n if (y >= this.pageBreaks[i]) {\r\n manualBreaks++;\r\n if (this.lastBreak === 0) {\r\n autoBreaks++;\r\n }\r\n var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n this.lastBreak = this.pageBreaks[i];\r\n var pagesSinceLastBreak = Math.floor(\r\n spaceBetweenLastBreak / this.pageWrapY\r\n );\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n }\r\n if (this.lastBreak === 0) {\r\n var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n return autoBreaks + manualBreaks;\r\n } else {\r\n return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n }\r\n };\r\n\r\n var hasMargins = function() {\r\n return (\r\n this.margin[0] > 0 ||\r\n this.margin[1] > 0 ||\r\n this.margin[2] > 0 ||\r\n this.margin[3] > 0\r\n );\r\n };\r\n\r\n /**\r\n * Draws an image, canvas, or video onto the canvas\r\n *\r\n * @function\r\n * @param img {} Specifies the image, canvas, or video element to use\r\n * @param sx {Number} Optional. The x coordinate where to start clipping\r\n * @param sy {Number} Optional. The y coordinate where to start clipping\r\n * @param swidth {Number} Optional. The width of the clipped image\r\n * @param sheight {Number} Optional. The height of the clipped image\r\n * @param x {Number} The x coordinate where to place the image on the canvas\r\n * @param y {Number} The y coordinate where to place the image on the canvas\r\n * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n */\r\n Context2D.prototype.drawImage = function(\r\n img,\r\n sx,\r\n sy,\r\n swidth,\r\n sheight,\r\n x,\r\n y,\r\n width,\r\n height\r\n ) {\r\n var imageProperties = this.pdf.getImageProperties(img);\r\n var factorX = 1;\r\n var factorY = 1;\r\n var isClip;\r\n\r\n var clipFactorX = 1;\r\n var clipFactorY = 1;\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n isClip = true;\r\n clipFactorX = width / swidth;\r\n clipFactorY = height / sheight;\r\n factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n }\r\n\r\n //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n if (typeof x === \"undefined\") {\r\n x = sx;\r\n y = sy;\r\n sx = 0;\r\n sy = 0;\r\n }\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n width = swidth;\r\n height = sheight;\r\n }\r\n if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n width = imageProperties.width;\r\n height = imageProperties.height;\r\n }\r\n\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n var xRect = matrix.applyToRectangle(\r\n new Rectangle(\r\n x - sx * clipFactorX,\r\n y - sy * clipFactorY,\r\n swidth * factorX,\r\n sheight * factorY\r\n )\r\n );\r\n var pageArray = getPagesByPath.call(this, xRect);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n tmpRect = pathPositionRedo(\r\n [tmpRect],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n tmpRect.x,\r\n tmpRect.y,\r\n tmpRect.w,\r\n tmpRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n xRect.x,\r\n xRect.y,\r\n xRect.w,\r\n xRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n }\r\n };\r\n\r\n var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n var result = [];\r\n pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n pageWrapY =\r\n pageWrapY ||\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n switch (path.type) {\r\n default:\r\n case \"mt\":\r\n case \"lt\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n break;\r\n case \"arc\":\r\n result.push(\r\n Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n );\r\n break;\r\n case \"qct\":\r\n var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"bct\":\r\n var rectOfBezierCurve = getBezierCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x2,\r\n path.y2,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"rect\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n }\r\n\r\n for (var i = 0; i < result.length; i += 1) {\r\n while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n addPage.call(this);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var addPage = function() {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var font = this.font;\r\n var lineCap = this.lineCap;\r\n var lineWidth = this.lineWidth;\r\n var lineJoin = this.lineJoin;\r\n this.pdf.addPage();\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.font = font;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n };\r\n\r\n var pathPositionRedo = function(paths, x, y) {\r\n for (var i = 0; i < paths.length; i++) {\r\n switch (paths[i].type) {\r\n case \"bct\":\r\n paths[i].x2 += x;\r\n paths[i].y2 += y;\r\n case \"qct\":\r\n paths[i].x1 += x;\r\n paths[i].y1 += y;\r\n case \"mt\":\r\n case \"lt\":\r\n case \"arc\":\r\n default:\r\n paths[i].x += x;\r\n paths[i].y += y;\r\n }\r\n }\r\n return paths;\r\n };\r\n\r\n var sortPages = function(pages) {\r\n return pages.sort(function(a, b) {\r\n return a - b;\r\n });\r\n };\r\n\r\n var pathPreProcess = function(rule, isClip) {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var lineCap = this.lineCap;\r\n var oldLineWidth = this.lineWidth;\r\n var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n var lineJoin = this.lineJoin;\r\n\r\n var origPath = JSON.parse(JSON.stringify(this.path));\r\n var xPath = JSON.parse(JSON.stringify(this.path));\r\n var clipPath;\r\n var tmpPath;\r\n var pages = [];\r\n\r\n for (var i = 0; i < xPath.length; i++) {\r\n if (typeof xPath[i].x !== \"undefined\") {\r\n var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n for (var ii = 0; ii < page.length; ii += 1) {\r\n if (pages.indexOf(page[ii]) === -1) {\r\n pages.push(page[ii]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var j = 0; j < pages.length; j++) {\r\n while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n addPage.call(this);\r\n }\r\n }\r\n sortPages(pages);\r\n\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var k = min; k < max + 1; k++) {\r\n this.pdf.setPage(k);\r\n\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, rule, true);\r\n this.path = tmpPaths;\r\n }\r\n tmpPath = JSON.parse(JSON.stringify(origPath));\r\n this.path = pathPositionRedo(\r\n tmpPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n if (isClip === false || k === 0) {\r\n const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n drawPaths.call(this, rule, isClip);\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n this.lineWidth = oldLineWidth;\r\n }\r\n } else {\r\n this.lineWidth = lineWidth;\r\n drawPaths.call(this, rule, isClip);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n this.path = origPath;\r\n };\r\n\r\n /**\r\n * Processes the paths\r\n *\r\n * @function\r\n * @param rule {String}\r\n * @param isClip {Boolean}\r\n * @private\r\n * @ignore\r\n */\r\n var drawPaths = function(rule, isClip) {\r\n if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var moves = [];\r\n\r\n //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n var delta;\r\n var xPath = this.path;\r\n for (var i = 0; i < xPath.length; i++) {\r\n var pt = xPath[i];\r\n\r\n switch (pt.type) {\r\n case \"begin\":\r\n moves.push({\r\n begin: true\r\n });\r\n break;\r\n\r\n case \"close\":\r\n moves.push({\r\n close: true\r\n });\r\n break;\r\n\r\n case \"mt\":\r\n moves.push({\r\n start: pt,\r\n deltas: [],\r\n abs: []\r\n });\r\n break;\r\n\r\n case \"lt\":\r\n var iii = moves.length;\r\n if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n if (iii > 0) {\r\n for (iii; iii >= 0; iii--) {\r\n if (\r\n moves[iii - 1].close !== true &&\r\n moves[iii - 1].begin !== true\r\n ) {\r\n moves[iii - 1].deltas.push(delta);\r\n moves[iii - 1].abs.push(pt);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"bct\":\r\n delta = [\r\n pt.x1 - xPath[i - 1].x,\r\n pt.y1 - xPath[i - 1].y,\r\n pt.x2 - xPath[i - 1].x,\r\n pt.y2 - xPath[i - 1].y,\r\n pt.x - xPath[i - 1].x,\r\n pt.y - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"qct\":\r\n var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n var x3 = pt.x;\r\n var y3 = pt.y;\r\n delta = [\r\n x1 - xPath[i - 1].x,\r\n y1 - xPath[i - 1].y,\r\n x2 - xPath[i - 1].x,\r\n y2 - xPath[i - 1].y,\r\n x3 - xPath[i - 1].x,\r\n y3 - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"arc\":\r\n moves.push({\r\n deltas: [],\r\n abs: [],\r\n arc: true\r\n });\r\n\r\n if (Array.isArray(moves[moves.length - 1].abs)) {\r\n moves[moves.length - 1].abs.push(pt);\r\n }\r\n break;\r\n }\r\n }\r\n var style;\r\n if (!isClip) {\r\n if (rule === \"stroke\") {\r\n style = \"stroke\";\r\n } else {\r\n style = \"fill\";\r\n }\r\n } else {\r\n style = null;\r\n }\r\n\r\n var began = false;\r\n for (var k = 0; k < moves.length; k++) {\r\n if (moves[k].arc) {\r\n var arcs = moves[k].abs;\r\n\r\n for (var ii = 0; ii < arcs.length; ii++) {\r\n var arc = arcs[ii];\r\n\r\n if (arc.type === \"arc\") {\r\n drawArc.call(\r\n this,\r\n arc.x,\r\n arc.y,\r\n arc.radius,\r\n arc.startAngle,\r\n arc.endAngle,\r\n arc.counterclockwise,\r\n undefined,\r\n isClip,\r\n !began\r\n );\r\n } else {\r\n drawLine.call(this, arc.x, arc.y);\r\n }\r\n began = true;\r\n }\r\n } else if (moves[k].close === true) {\r\n this.pdf.internal.out(\"h\");\r\n began = false;\r\n } else if (moves[k].begin !== true) {\r\n var x = moves[k].start.x;\r\n var y = moves[k].start.y;\r\n drawLines.call(this, moves[k].deltas, x, y);\r\n began = true;\r\n }\r\n }\r\n\r\n if (style) {\r\n putStyle.call(this, style);\r\n }\r\n if (isClip) {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var getBaseline = function(y) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n switch (this.ctx.textBaseline) {\r\n case \"bottom\":\r\n return y - descent;\r\n case \"top\":\r\n return y + height - descent;\r\n case \"hanging\":\r\n return y + height - 2 * descent;\r\n case \"middle\":\r\n return y + height / 2 - descent;\r\n case \"ideographic\":\r\n // TODO not implemented\r\n return y;\r\n case \"alphabetic\":\r\n default:\r\n return y;\r\n }\r\n };\r\n\r\n var getTextBottom = function(yBaseLine) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n return yBaseLine + descent;\r\n };\r\n\r\n Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n var canvasGradient = function canvasGradient() {};\r\n\r\n canvasGradient.colorStops = [];\r\n canvasGradient.addColorStop = function(offset, color) {\r\n this.colorStops.push([offset, color]);\r\n };\r\n\r\n canvasGradient.getColor = function() {\r\n if (this.colorStops.length === 0) {\r\n return \"#000000\";\r\n }\r\n\r\n return this.colorStops[0][1];\r\n };\r\n\r\n canvasGradient.isCanvasGradient = true;\r\n return canvasGradient;\r\n };\r\n Context2D.prototype.createPattern = function createPattern() {\r\n return this.createLinearGradient();\r\n };\r\n Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n return this.createLinearGradient();\r\n };\r\n\r\n /**\r\n *\r\n * @param x Edge point X\r\n * @param y Edge point Y\r\n * @param r Radius\r\n * @param a1 start angle\r\n * @param a2 end angle\r\n * @param counterclockwise\r\n * @param style\r\n * @param isClip\r\n */\r\n var drawArc = function(\r\n x,\r\n y,\r\n r,\r\n a1,\r\n a2,\r\n counterclockwise,\r\n style,\r\n isClip,\r\n includeMove\r\n ) {\r\n // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n for (var i = 0; i < curves.length; i++) {\r\n var curve = curves[i];\r\n if (i === 0) {\r\n if (includeMove) {\r\n doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n } else {\r\n drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n }\r\n }\r\n drawCurve.call(\r\n this,\r\n x,\r\n y,\r\n curve.x2,\r\n curve.y2,\r\n curve.x3,\r\n curve.y3,\r\n curve.x4,\r\n curve.y4\r\n );\r\n }\r\n\r\n if (!isClip) {\r\n putStyle.call(this, style);\r\n } else {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n switch (style) {\r\n case \"stroke\":\r\n this.pdf.internal.out(\"S\");\r\n break;\r\n case \"fill\":\r\n this.pdf.internal.out(\"f\");\r\n break;\r\n }\r\n };\r\n\r\n var doClip = function() {\r\n this.pdf.clip();\r\n this.pdf.discardPath();\r\n };\r\n\r\n var doMove = function(x, y) {\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x) +\r\n \" \" +\r\n getVerticalCoordinateString(y) +\r\n \" m\"\r\n );\r\n };\r\n\r\n var putText = function(options) {\r\n var textAlign;\r\n switch (options.align) {\r\n case \"right\":\r\n case \"end\":\r\n textAlign = \"right\";\r\n break;\r\n case \"center\":\r\n textAlign = \"center\";\r\n break;\r\n case \"left\":\r\n case \"start\":\r\n default:\r\n textAlign = \"left\";\r\n break;\r\n }\r\n\r\n var textDimensions = this.pdf.getTextDimensions(options.text);\r\n var yBaseLine = getBaseline.call(this, options.y);\r\n var yBottom = getTextBottom.call(this, yBaseLine);\r\n var yTop = yBottom - textDimensions.h;\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n var baselineRect = this.ctx.transform.applyToRectangle(\r\n new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n );\r\n var textBounds = matrix.applyToRectangle(\r\n new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n );\r\n var pageArray = getPagesByPath.call(this, textBounds);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath, oldSize, oldLineWidth;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusBottomMargin =\r\n this.pdf.internal.pageSize.height - this.margin[2];\r\n var pageHeightMinusMargins =\r\n pageHeightMinusBottomMargin - this.margin[0];\r\n var pageWidthMinusRightMargin =\r\n this.pdf.internal.pageSize.width - this.margin[1];\r\n var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -1 * previousPageHeightSum + topMargin\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var textBoundsOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(textBounds))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n\r\n var doSlice = this.autoPaging !== \"text\";\r\n\r\n if (\r\n doSlice ||\r\n textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n ) {\r\n if (\r\n doSlice ||\r\n (textBoundsOnPage.y >= topMargin &&\r\n textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n ) {\r\n var croppedText = doSlice\r\n ? options.text\r\n : this.pdf.splitTextToSize(\r\n options.text,\r\n options.maxWidth ||\r\n pageWidthMinusRightMargin - textBoundsOnPage.x\r\n )[0];\r\n var baseLineRectOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(baselineRect))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum +\r\n topMargin +\r\n this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping =\r\n doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n\r\n this.pdf.text(\r\n croppedText,\r\n baseLineRectOnPage.x,\r\n baseLineRectOnPage.y,\r\n {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode\r\n }\r\n );\r\n\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n // This text is the last element of the page, but it got cut off due to the margin\r\n // so we render it in the next page\r\n\r\n if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n // As a result, all other elements have their y offset increased\r\n this.ctx.prevPageLastElemOffset +=\r\n pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n }\r\n }\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n } else {\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode,\r\n maxWidth: options.maxWidth\r\n });\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n };\r\n\r\n var drawLine = function(x, y, prevX, prevY) {\r\n prevX = prevX || 0;\r\n prevY = prevY || 0;\r\n\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x + prevX) +\r\n \" \" +\r\n getVerticalCoordinateString(y + prevY) +\r\n \" l\"\r\n );\r\n };\r\n\r\n var drawLines = function(lines, x, y) {\r\n return this.pdf.lines(lines, x, y, null, null);\r\n };\r\n\r\n var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n this.pdf.internal.out(\r\n [\r\n f2(getHorizontalCoordinate(x1 + x)),\r\n f2(getVerticalCoordinate(y1 + y)),\r\n f2(getHorizontalCoordinate(x2 + x)),\r\n f2(getVerticalCoordinate(y2 + y)),\r\n f2(getHorizontalCoordinate(x3 + x)),\r\n f2(getVerticalCoordinate(y3 + y)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n };\r\n\r\n /**\r\n * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n *\r\n * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n * @function createArc\r\n */\r\n var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n var twoPi = Math.PI * 2;\r\n var halfPi = Math.PI / 2.0;\r\n\r\n while (startAngle > endAngle) {\r\n startAngle = startAngle - twoPi;\r\n }\r\n var totalAngle = Math.abs(endAngle - startAngle);\r\n if (totalAngle < twoPi) {\r\n if (anticlockwise) {\r\n totalAngle = twoPi - totalAngle;\r\n }\r\n }\r\n\r\n // Compute the sequence of arc curves, up to PI/2 at a time.\r\n var curves = [];\r\n\r\n // clockwise or counterclockwise\r\n var sgn = anticlockwise ? -1 : +1;\r\n\r\n var a1 = startAngle;\r\n for (; totalAngle > EPSILON; ) {\r\n var remain = sgn * Math.min(totalAngle, halfPi);\r\n var a2 = a1 + remain;\r\n curves.push(createSmallArc.call(this, radius, a1, a2));\r\n totalAngle -= Math.abs(a2 - a1);\r\n a1 = a2;\r\n }\r\n\r\n return curves;\r\n };\r\n\r\n /**\r\n * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n *\r\n * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n *\r\n * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n */\r\n var createSmallArc = function(r, a1, a2) {\r\n var a = (a2 - a1) / 2.0;\r\n\r\n var x4 = r * Math.cos(a);\r\n var y4 = r * Math.sin(a);\r\n var x1 = x4;\r\n var y1 = -y4;\r\n\r\n var q1 = x1 * x1 + y1 * y1;\r\n var q2 = q1 + x1 * x4 + y1 * y4;\r\n var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n var x2 = x1 - k2 * y1;\r\n var y2 = y1 + k2 * x1;\r\n var x3 = x2;\r\n var y3 = -y2;\r\n\r\n var ar = a + a1;\r\n var cos_ar = Math.cos(ar);\r\n var sin_ar = Math.sin(ar);\r\n\r\n return {\r\n x1: r * Math.cos(a1),\r\n y1: r * Math.sin(a1),\r\n x2: x2 * cos_ar - y2 * sin_ar,\r\n y2: x2 * sin_ar + y2 * cos_ar,\r\n x3: x3 * cos_ar - y3 * sin_ar,\r\n y3: x3 * sin_ar + y3 * cos_ar,\r\n x4: r * Math.cos(a2),\r\n y4: r * Math.sin(a2)\r\n };\r\n };\r\n\r\n var rad2deg = function(value) {\r\n return (value * 180) / Math.PI;\r\n };\r\n\r\n var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n var midX1 = sx + (cpx - sx) * 0.5;\r\n var midY1 = sy + (cpy - sy) * 0.5;\r\n var midX2 = ex + (cpx - ex) * 0.5;\r\n var midY2 = ey + (cpy - ey) * 0.5;\r\n var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n return new Rectangle(\r\n resultX1,\r\n resultY1,\r\n resultX2 - resultX1,\r\n resultY2 - resultY1\r\n );\r\n };\r\n\r\n //De Casteljau algorithm\r\n var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n var tobx = bx - ax;\r\n var toby = by - ay;\r\n var tocx = cx - bx;\r\n var tocy = cy - by;\r\n var todx = dx - cx;\r\n var tody = dy - cy;\r\n var precision = 40;\r\n var d,\r\n i,\r\n px,\r\n py,\r\n qx,\r\n qy,\r\n rx,\r\n ry,\r\n tx,\r\n ty,\r\n sx,\r\n sy,\r\n x,\r\n y,\r\n minx,\r\n miny,\r\n maxx,\r\n maxy,\r\n toqx,\r\n toqy,\r\n torx,\r\n tory,\r\n totx,\r\n toty;\r\n for (i = 0; i < precision + 1; i++) {\r\n d = i / precision;\r\n px = ax + d * tobx;\r\n py = ay + d * toby;\r\n qx = bx + d * tocx;\r\n qy = by + d * tocy;\r\n rx = cx + d * todx;\r\n ry = cy + d * tody;\r\n toqx = qx - px;\r\n toqy = qy - py;\r\n torx = rx - qx;\r\n tory = ry - qy;\r\n\r\n sx = px + d * toqx;\r\n sy = py + d * toqy;\r\n tx = qx + d * torx;\r\n ty = qy + d * tory;\r\n totx = tx - sx;\r\n toty = ty - sy;\r\n\r\n x = sx + d * totx;\r\n y = sy + d * toty;\r\n if (i == 0) {\r\n minx = x;\r\n miny = y;\r\n maxx = x;\r\n maxy = y;\r\n } else {\r\n minx = Math.min(minx, x);\r\n miny = Math.min(miny, y);\r\n maxx = Math.max(maxx, x);\r\n maxy = Math.max(maxy, y);\r\n }\r\n }\r\n return new Rectangle(\r\n Math.round(minx),\r\n Math.round(miny),\r\n Math.round(maxx - minx),\r\n Math.round(maxy - miny)\r\n );\r\n };\r\n\r\n var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n return JSON.stringify({\r\n lineDash: lineDash,\r\n lineDashOffset: lineDashOffset\r\n });\r\n };\r\n\r\n var setLineDash = function() {\r\n // Avoid unnecessary line dash declarations.\r\n if (\r\n !this.prevLineDash &&\r\n !this.ctx.lineDash.length &&\r\n !this.ctx.lineDashOffset\r\n ) {\r\n return;\r\n }\r\n\r\n // Avoid unnecessary line dash declarations.\r\n const nextLineDash = getPrevLineDashValue(\r\n this.ctx.lineDash,\r\n this.ctx.lineDashOffset\r\n );\r\n if (this.prevLineDash !== nextLineDash) {\r\n this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n this.prevLineDash = nextLineDash;\r\n }\r\n };\r\n})(jsPDF.API);\r\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Much of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\n// Mediocre shim\nvar Worker;\nvar workerAdd = \";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global\";\ntry {\n Worker = require('worker_threads').Worker;\n}\ncatch (e) {\n}\nvar wk = Worker ? function (c, _, msg, transfer, cb) {\n var done = false;\n var w = new Worker(c + workerAdd, { eval: true })\n .on('error', function (e) { return cb(e, null); })\n .on('message', function (m) { return cb(null, m); })\n .on('exit', function (c) {\n if (c && !done)\n cb(new Error('exited with code ' + c), null);\n });\n w.postMessage(msg, transfer);\n w.terminate = function () {\n done = true;\n return Worker.prototype.terminate.call(w);\n };\n return w;\n} : function (_, __, ___, ____, cb) {\n setImmediate(function () { return cb(new Error('async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)'), null); });\n var NOP = function () { };\n return {\n terminate: NOP,\n postMessage: NOP\n };\n};\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([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, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([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, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i)\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n if (!noSt && pos + tl * (clb + 7) > tbts)\n break;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts)\n throw 'unexpected EOF';\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var mxa = lbt + dbt + 18;\n while (noSt || pos + mxa < tbts) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts)\n throw 'unexpected EOF';\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts)\n throw 'unexpected EOF';\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = pos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [new u8(0), 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768\n var imod = i & 32767;\n // previous index with this value\n var pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst)\n pos = wfblk(w, pos, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new u32(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = 0xFFFFFFFF;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return c ^ 0xFFFFFFFF; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 5552, l);\n for (; i < e; ++i)\n n += d[i], m += n;\n n %= 65521, m %= 65521;\n }\n a = n, b = m;\n },\n d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n if (!opts.consume)\n dat = new u8(dat);\n w.postMessage([dat, opts], [dat.buffer]);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16)) + (d[b + 3] << 23) * 2; };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) + (2 * (d[l - 1] << 23));\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n return dopt(data, opts, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) >> 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = gzs(this.p);\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n var l = str.length;\n if (!latin1 && typeof TextEncoder != 'undefined')\n return new TextEncoder().encode(str);\n var ar = new u8(str.length + (str.length >>> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >>> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n var r = '';\n if (!latin1 && typeof TextDecoder != 'undefined')\n return new TextDecoder().decode(dat);\n for (var i = 0; i < dat.length;) {\n var c = dat[i++];\n if (c < 128 || latin1)\n r += String.fromCharCode(c);\n else if (c < 224)\n r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n else if (c < 240)\n r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n else\n c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n return r;\n}\n;\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z ? z64e(d, es) : [b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b4(d, b + 12), b4(d, b + 4), b4(d, b + 20)];\n};\n// write zip header\nvar wzh = function (d, b, c, cmp, su, fn, u, o, ce, t) {\n var fl = fn.length, l = cmp.length;\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b] = 20, b += 2;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (t == 8 && (o.level == 1 ? 6 : o.level < 6 ? 4 : o.level == 9 ? 2 : 0)), d[b++] = u && 8;\n d[b] = t, b += 2;\n var dt = new Date(o.mtime || Date.now()), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, ((y << 24) * 2) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1));\n b += 4;\n wbytes(d, b, c);\n wbytes(d, b + 4, l);\n wbytes(d, b + 8, su);\n wbytes(d, b + 12, fl), b += 16; // skip extra field, comment\n if (ce != null)\n wbytes(d, b += 10, ce), b += 4;\n d.set(fn, b);\n b += fl;\n if (ce == null)\n d.set(cmp, b);\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n wzh(out, tot, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, tot, f.t), o += 46 + f.n.length, tot += 30 + f.n.length + f.d.length;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), m = file.length;\n c.p(file);\n var n = strToU8(fn), s = n.length;\n var t = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = {\n t: t,\n d: d,\n m: m,\n c: c.d(),\n u: fn.length != l,\n n: n,\n p: p\n };\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n if (!--lft)\n cbf();\n }\n };\n if (n.length > 65535)\n cbl('filename too long', null);\n if (!t)\n cbl(null, file);\n else if (m < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var t = p.level == 0 ? 0 : 8;\n var n = strToU8(fn), s = n.length;\n if (n.length > 65535)\n throw 'filename too long';\n var d = t ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push({\n t: t,\n d: d,\n m: file.length,\n c: c.d(),\n u: fn.length != s,\n n: n,\n o: o,\n p: p\n });\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, f.o, f.t), o += 46 + f.n.length;\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_2 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_2(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var ASCII85Encode = function(a) {\n var b, c, d, e, f, g, h, i, j, k;\n // eslint-disable-next-line no-control-regex\n for (\n !/[^\\x00-\\xFF]/.test(a),\n b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n a += b,\n c = [],\n d = 0,\n e = a.length;\n e > d;\n d += 4\n )\n (f =\n (a.charCodeAt(d) << 24) +\n (a.charCodeAt(d + 1) << 16) +\n (a.charCodeAt(d + 2) << 8) +\n a.charCodeAt(d + 3)),\n 0 !== f\n ? ((k = f % 85),\n (f = (f - k) / 85),\n (j = f % 85),\n (f = (f - j) / 85),\n (i = f % 85),\n (f = (f - i) / 85),\n (h = f % 85),\n (f = (f - h) / 85),\n (g = f % 85),\n c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n : c.push(122);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(c, b.length),\n String.fromCharCode.apply(String, c) + \"~>\"\n );\n };\n\n var ASCII85Decode = function(a) {\n var c,\n d,\n e,\n f,\n g,\n h = String,\n l = \"length\",\n w = 255,\n x = \"charCodeAt\",\n y = \"slice\",\n z = \"replace\";\n for (\n \"~>\" === a[y](-2),\n a = a[y](0, -2)\n [z](/\\s/g, \"\")\n [z](\"z\", \"!!!!!\"),\n c = \"uuuuu\"[y](a[l] % 5 || 5),\n a += c,\n e = [],\n f = 0,\n g = a[l];\n g > f;\n f += 5\n )\n (d =\n 52200625 * (a[x](f) - 33) +\n 614125 * (a[x](f + 1) - 33) +\n 7225 * (a[x](f + 2) - 33) +\n 85 * (a[x](f + 3) - 33) +\n (a[x](f + 4) - 33)),\n e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(e, c[l]),\n h.fromCharCode.apply(h, e)\n );\n };\n\n var ASCIIHexEncode = function(value) {\n return (\n value\n .split(\"\")\n .map(function(value) {\n return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n })\n .join(\"\") + \">\"\n );\n };\n\n var ASCIIHexDecode = function(value) {\n var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n value = value.replace(/\\s/g, \"\");\n if (value.indexOf(\">\") !== -1) {\n value = value.substr(0, value.indexOf(\">\"));\n }\n if (value.length % 2) {\n value += \"0\";\n }\n if (regexCheckIfHex.test(value) === false) {\n return \"\";\n }\n var result = \"\";\n for (var i = 0; i < value.length; i += 2) {\n result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n }\n return result;\n };\n /*\n var FlatePredictors = {\n None: 1,\n TIFF: 2,\n PNG_None: 10,\n PNG_Sub: 11,\n PNG_Up: 12,\n PNG_Average: 13,\n PNG_Paeth: 14,\n PNG_Optimum: 15\n };\n */\n\n var FlateEncode = function(data) {\n var arr = new Uint8Array(data.length);\n var i = data.length;\n while (i--) {\n arr[i] = data.charCodeAt(i);\n }\n arr = zlibSync(arr);\n data = arr.reduce(function(data, byte) {\n return data + String.fromCharCode(byte);\n }, \"\");\n return data;\n };\n\n jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n \"use strict\";\n var i = 0;\n var data = origData || \"\";\n var reverseChain = [];\n filterChain = filterChain || [];\n\n if (typeof filterChain === \"string\") {\n filterChain = [filterChain];\n }\n\n for (i = 0; i < filterChain.length; i += 1) {\n switch (filterChain[i]) {\n case \"ASCII85Decode\":\n case \"/ASCII85Decode\":\n data = ASCII85Decode(data);\n reverseChain.push(\"/ASCII85Encode\");\n break;\n case \"ASCII85Encode\":\n case \"/ASCII85Encode\":\n data = ASCII85Encode(data);\n reverseChain.push(\"/ASCII85Decode\");\n break;\n case \"ASCIIHexDecode\":\n case \"/ASCIIHexDecode\":\n data = ASCIIHexDecode(data);\n reverseChain.push(\"/ASCIIHexEncode\");\n break;\n case \"ASCIIHexEncode\":\n case \"/ASCIIHexEncode\":\n data = ASCIIHexEncode(data);\n reverseChain.push(\"/ASCIIHexDecode\");\n break;\n case \"FlateEncode\":\n case \"/FlateEncode\":\n data = FlateEncode(data);\n reverseChain.push(\"/FlateDecode\");\n break;\n default:\n throw new Error(\n 'The filter: \"' + filterChain[i] + '\" is not implemented'\n );\n }\n }\n\n return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name loadFile\n * @function\n * @param {string} url\n * @param {boolean} sync\n * @param {function} callback\n * @returns {string|undefined} result\n */\n jsPDFAPI.loadFile = function(url, sync, callback) {\n return browserRequest(url, sync, callback);\n\n };\n\n /**\n * @name loadImageFile\n * @function\n * @param {string} path\n * @param {boolean} sync\n * @param {function} callback\n */\n jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n function browserRequest(url, sync, callback) {\n sync = sync === false ? false : true;\n callback = typeof callback === \"function\" ? callback : function() {};\n var result = undefined;\n\n var xhr = function(url, sync, callback) {\n var request = new XMLHttpRequest();\n var i = 0;\n\n var sanitizeUnicode = function(data) {\n var dataLength = data.length;\n var charArray = [];\n var StringFromCharCode = String.fromCharCode;\n\n //Transform Unicode to ASCII\n for (i = 0; i < dataLength; i += 1) {\n charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n }\n return charArray.join(\"\");\n };\n\n request.open(\"GET\", url, !sync);\n // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n if (sync === false) {\n request.onload = function() {\n if (request.status === 200) {\n callback(sanitizeUnicode(this.responseText));\n } else {\n callback(undefined);\n }\n };\n }\n request.send(null);\n\n if (sync && request.status === 200) {\n return sanitizeUnicode(request.responseText);\n }\n };\n try {\n result = xhr(url, sync, callback);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return result;\n }\n\n function nodeReadFile(url, sync, callback) {\n sync = sync === false ? false : true;\n var result = undefined;\n\n var fs = require(\"fs\");\n var path = require(\"path\");\n\n url = path.resolve(url);\n if (sync) {\n try {\n result = fs.readFileSync(url, { encoding: \"latin1\" });\n } catch (e) {\n return undefined;\n }\n } else {\n fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n if (!callback) {\n return;\n }\n if (err) {\n callback(undefined);\n }\n callback(data);\n });\n }\n\n return result;\n }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadHtml2Canvas() {\n return (function() {\n if (globalObject[\"html2canvas\"]) {\n return Promise.resolve(globalObject[\"html2canvas\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"html2canvas\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"html2canvas\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load html2canvas\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n })\n .then(function(html2canvas) {\n return html2canvas.default ? html2canvas.default : html2canvas;\n });\n }\n\n function loadDomPurify() {\n return (function() {\n if (globalObject[\"DOMPurify\"]) {\n return Promise.resolve(globalObject[\"DOMPurify\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"dompurify\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"dompurify\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load dompurify\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n })\n .then(function(dompurify) {\n return dompurify.default ? dompurify.default : dompurify;\n });\n }\n\n /**\n * Determine the type of a variable/object.\n *\n * @private\n * @ignore\n */\n var objType = function(obj) {\n var type = typeof obj;\n if (type === \"undefined\") return \"undefined\";\n else if (type === \"string\" || obj instanceof String) return \"string\";\n else if (type === \"number\" || obj instanceof Number) return \"number\";\n else if (type === \"function\" || obj instanceof Function) return \"function\";\n else if (!!obj && obj.constructor === Array) return \"array\";\n else if (obj && obj.nodeType === 1) return \"element\";\n else if (type === \"object\") return \"object\";\n else return \"unknown\";\n };\n\n /**\n * Create an HTML element with optional className, innerHTML, and style.\n *\n * @private\n * @ignore\n */\n var createElement = function(tagName, opt) {\n var el = document.createElement(tagName);\n if (opt.className) el.className = opt.className;\n if (opt.innerHTML && opt.dompurify) {\n el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n }\n for (var key in opt.style) {\n el.style[key] = opt.style[key];\n }\n return el;\n };\n\n /**\n * Deep-clone a node and preserve contents/properties.\n *\n * @private\n * @ignore\n */\n var cloneNode = function(node, javascriptEnabled) {\n // Recursively clone the node.\n var clone =\n node.nodeType === 3\n ? document.createTextNode(node.nodeValue)\n : node.cloneNode(false);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (\n javascriptEnabled === true ||\n child.nodeType !== 1 ||\n child.nodeName !== \"SCRIPT\"\n ) {\n clone.appendChild(cloneNode(child, javascriptEnabled));\n }\n }\n\n if (node.nodeType === 1) {\n // Preserve contents/properties of special nodes.\n if (node.nodeName === \"CANVAS\") {\n clone.width = node.width;\n clone.height = node.height;\n clone.getContext(\"2d\").drawImage(node, 0, 0);\n } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n clone.value = node.value;\n }\n\n // Preserve the node's scroll position when it loads.\n clone.addEventListener(\n \"load\",\n function() {\n clone.scrollTop = node.scrollTop;\n clone.scrollLeft = node.scrollLeft;\n },\n true\n );\n }\n\n // Return the cloned node.\n return clone;\n };\n\n /* ----- CONSTRUCTOR ----- */\n\n var Worker = function Worker(opt) {\n // Create the root parent for the proto chain, and the starting Worker.\n var root = Object.assign(\n Worker.convert(Promise.resolve()),\n JSON.parse(JSON.stringify(Worker.template))\n );\n var self = Worker.convert(Promise.resolve(), root);\n\n // Set progress, optional settings, and return.\n self = self.setProgress(1, Worker, 1, [Worker]);\n self = self.set(opt);\n return self;\n };\n\n // Boilerplate for subclassing Promise.\n Worker.prototype = Object.create(Promise.prototype);\n Worker.prototype.constructor = Worker;\n\n // Converts/casts promises into Workers.\n Worker.convert = function convert(promise, inherit) {\n // Uses prototypal inheritance to receive changes made to ancestors' properties.\n promise.__proto__ = inherit || Worker.prototype;\n return promise;\n };\n\n Worker.template = {\n prop: {\n src: null,\n container: null,\n overlay: null,\n canvas: null,\n img: null,\n pdf: null,\n pageSize: null,\n callback: function() {}\n },\n progress: {\n val: 0,\n state: null,\n n: 0,\n stack: []\n },\n opt: {\n filename: \"file.pdf\",\n margin: [0, 0, 0, 0],\n enableLinks: true,\n x: 0,\n y: 0,\n html2canvas: {},\n jsPDF: {},\n backgroundColor: \"transparent\"\n }\n };\n\n /* ----- FROM / TO ----- */\n\n Worker.prototype.from = function from(src, type) {\n function getType(src) {\n switch (objType(src)) {\n case \"string\":\n return \"string\";\n case \"element\":\n return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n default:\n return \"unknown\";\n }\n }\n\n return this.then(function from_main() {\n type = type || getType(src);\n switch (type) {\n case \"string\":\n return this.then(loadDomPurify).then(function(dompurify) {\n return this.set({\n src: createElement(\"div\", {\n innerHTML: src,\n dompurify: dompurify\n })\n });\n });\n case \"element\":\n return this.set({ src: src });\n case \"canvas\":\n return this.set({ canvas: src });\n case \"img\":\n return this.set({ img: src });\n default:\n return this.error(\"Unknown source type.\");\n }\n });\n };\n\n Worker.prototype.to = function to(target) {\n // Route the 'to' request to the appropriate method.\n switch (target) {\n case \"container\":\n return this.toContainer();\n case \"canvas\":\n return this.toCanvas();\n case \"img\":\n return this.toImg();\n case \"pdf\":\n return this.toPdf();\n default:\n return this.error(\"Invalid target.\");\n }\n };\n\n Worker.prototype.toContainer = function toContainer() {\n // Set up function prerequisites.\n var prereqs = [\n function checkSrc() {\n return (\n this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n );\n },\n function checkPageSize() {\n return this.prop.pageSize || this.setPageSize();\n }\n ];\n return this.thenList(prereqs).then(function toContainer_main() {\n // Define the CSS styles for the container and its overlay parent.\n var overlayCSS = {\n position: \"fixed\",\n overflow: \"hidden\",\n zIndex: 1000,\n left: \"-100000px\",\n right: 0,\n bottom: 0,\n top: 0\n };\n var containerCSS = {\n position: \"relative\",\n display: \"inline-block\",\n width:\n (typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.windowWidth\n : Math.max(\n this.prop.src.clientWidth,\n this.prop.src.scrollWidth,\n this.prop.src.offsetWidth\n )) + \"px\",\n left: 0,\n right: 0,\n top: 0,\n margin: \"auto\",\n backgroundColor: this.opt.backgroundColor\n }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n var source = cloneNode(\n this.prop.src,\n this.opt.html2canvas.javascriptEnabled\n );\n\n if (source.tagName === \"BODY\") {\n containerCSS.height =\n Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) + \"px\";\n }\n\n this.prop.overlay = createElement(\"div\", {\n className: \"html2pdf__overlay\",\n style: overlayCSS\n });\n this.prop.container = createElement(\"div\", {\n className: \"html2pdf__container\",\n style: containerCSS\n });\n this.prop.container.appendChild(source);\n this.prop.container.firstChild.appendChild(\n createElement(\"div\", {\n style: {\n clear: \"both\",\n border: \"0 none transparent\",\n margin: 0,\n padding: 0,\n height: 0\n }\n })\n );\n this.prop.container.style.float = \"none\";\n this.prop.overlay.appendChild(this.prop.container);\n document.body.appendChild(this.prop.overlay);\n this.prop.container.firstChild.style.position = \"relative\";\n this.prop.container.height =\n Math.max(\n this.prop.container.firstChild.clientHeight,\n this.prop.container.firstChild.scrollHeight,\n this.prop.container.firstChild.offsetHeight\n ) + \"px\";\n });\n };\n\n Worker.prototype.toCanvas = function toCanvas() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toCanvas_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var options = Object.assign({}, this.opt.html2canvas);\n delete options.onrendered;\n\n return html2canvas(this.prop.container, options);\n })\n .then(function toCanvas_post(canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toContext2d = function toContext2d() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toContext2d_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n\n var pdf = this.opt.jsPDF;\n var fontFaces = this.opt.fontFaces;\n\n var scale =\n typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.width / this.opt.windowWidth\n : 1;\n\n var options = Object.assign(\n {\n async: true,\n allowTaint: true,\n scale: scale,\n scrollX: this.opt.scrollX || 0,\n scrollY: this.opt.scrollY || 0,\n backgroundColor: \"#ffffff\",\n imageTimeout: 15000,\n logging: true,\n proxy: null,\n removeContainer: true,\n foreignObjectRendering: false,\n useCORS: false\n },\n this.opt.html2canvas\n );\n delete options.onrendered;\n\n pdf.context2d.autoPaging =\n typeof this.opt.autoPaging === \"undefined\"\n ? true\n : this.opt.autoPaging;\n pdf.context2d.posX = this.opt.x;\n pdf.context2d.posY = this.opt.y;\n pdf.context2d.margin = this.opt.margin;\n pdf.context2d.fontFaces = fontFaces;\n\n if (fontFaces) {\n for (var i = 0; i < fontFaces.length; ++i) {\n var font = fontFaces[i];\n var src = font.src.find(function(src) {\n return src.format === \"truetype\";\n });\n\n if (src) {\n pdf.addFont(src.url, font.ref.name, font.ref.style);\n }\n }\n }\n\n options.windowHeight = options.windowHeight || 0;\n options.windowHeight =\n options.windowHeight == 0\n ? Math.max(\n this.prop.container.clientHeight,\n this.prop.container.scrollHeight,\n this.prop.container.offsetHeight\n )\n : options.windowHeight;\n\n pdf.context2d.save(true);\n return html2canvas(this.prop.container, options);\n })\n .then(function toContext2d_post(canvas) {\n this.opt.jsPDF.context2d.restore(true);\n\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toImg = function toImg() {\n // Set up function prerequisites.\n var prereqs = [\n function checkCanvas() {\n return this.prop.canvas || this.toCanvas();\n }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toImg_main() {\n var imgData = this.prop.canvas.toDataURL(\n \"image/\" + this.opt.image.type,\n this.opt.image.quality\n );\n this.prop.img = document.createElement(\"img\");\n this.prop.img.src = imgData;\n });\n };\n\n Worker.prototype.toPdf = function toPdf() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContext2d() {\n return this.toContext2d();\n }\n //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toPdf_main() {\n // Create local copies of frequently used properties.\n this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n });\n };\n\n /* ----- OUTPUT / SAVE ----- */\n\n Worker.prototype.output = function output(type, options, src) {\n // Redirect requests to the correct function (outputPdf / outputImg).\n src = src || \"pdf\";\n if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n return this.outputImg(type, options);\n } else {\n return this.outputPdf(type, options);\n }\n };\n\n Worker.prototype.outputPdf = function outputPdf(type, options) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputPdf_main() {\n /* Currently implemented output types:\n * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n * save(options), arraybuffer, blob, bloburi/bloburl,\n * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n */\n return this.prop.pdf.output(type, options);\n });\n };\n\n Worker.prototype.outputImg = function outputImg(type) {\n // Set up function prerequisites.\n var prereqs = [\n function checkImg() {\n return this.prop.img || this.toImg();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputImg_main() {\n switch (type) {\n case undefined:\n case \"img\":\n return this.prop.img;\n case \"datauristring\":\n case \"dataurlstring\":\n return this.prop.img.src;\n case \"datauri\":\n case \"dataurl\":\n return (document.location.href = this.prop.img.src);\n default:\n throw 'Image output type \"' + type + '\" is not supported.';\n }\n });\n };\n\n Worker.prototype.save = function save(filename) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs)\n .set(filename ? { filename: filename } : null)\n .then(function save_main() {\n this.prop.pdf.save(this.opt.filename);\n });\n };\n\n Worker.prototype.doCallback = function doCallback() {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs).then(function doCallback_main() {\n this.prop.callback(this.prop.pdf);\n });\n };\n\n /* ----- SET / GET ----- */\n\n Worker.prototype.set = function set(opt) {\n // TODO: Implement ordered pairs?\n\n // Silently ignore invalid or empty input.\n if (objType(opt) !== \"object\") {\n return this;\n }\n\n // Build an array of setter functions to queue.\n var fns = Object.keys(opt || {}).map(function(key) {\n if (key in Worker.template.prop) {\n // Set pre-defined properties.\n return function set_prop() {\n this.prop[key] = opt[key];\n };\n } else {\n switch (key) {\n case \"margin\":\n return this.setMargin.bind(this, opt.margin);\n case \"jsPDF\":\n return function set_jsPDF() {\n this.opt.jsPDF = opt.jsPDF;\n return this.setPageSize();\n };\n case \"pageSize\":\n return this.setPageSize.bind(this, opt.pageSize);\n default:\n // Set any other properties in opt.\n return function set_opt() {\n this.opt[key] = opt[key];\n };\n }\n }\n }, this);\n\n // Set properties within the promise chain.\n return this.then(function set_main() {\n return this.thenList(fns);\n });\n };\n\n Worker.prototype.get = function get(key, cbk) {\n return this.then(function get_main() {\n // Fetch the requested property, either as a predefined prop or in opt.\n var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n return cbk ? cbk(val) : val;\n });\n };\n\n Worker.prototype.setMargin = function setMargin(margin) {\n return this.then(function setMargin_main() {\n // Parse the margin property.\n switch (objType(margin)) {\n case \"number\":\n margin = [margin, margin, margin, margin];\n // eslint-disable-next-line no-fallthrough\n case \"array\":\n if (margin.length === 2) {\n margin = [margin[0], margin[1], margin[0], margin[1]];\n }\n if (margin.length === 4) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return this.error(\"Invalid margin array.\");\n }\n\n // Set the margin property, then update pageSize.\n this.opt.margin = margin;\n }).then(this.setPageSize);\n };\n\n Worker.prototype.setPageSize = function setPageSize(pageSize) {\n function toPx(val, k) {\n return Math.floor(((val * k) / 72) * 96);\n }\n\n return this.then(function setPageSize_main() {\n // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n // Add 'inner' field if not present.\n if (!pageSize.hasOwnProperty(\"inner\")) {\n pageSize.inner = {\n width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n };\n pageSize.inner.px = {\n width: toPx(pageSize.inner.width, pageSize.k),\n height: toPx(pageSize.inner.height, pageSize.k)\n };\n pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n }\n\n // Attach pageSize to this.\n this.prop.pageSize = pageSize;\n });\n };\n\n Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n // Immediately update all progress values.\n if (val != null) this.progress.val = val;\n if (state != null) this.progress.state = state;\n if (n != null) this.progress.n = n;\n if (stack != null) this.progress.stack = stack;\n this.progress.ratio = this.progress.val / this.progress.state;\n\n // Return this for command chaining.\n return this;\n };\n\n Worker.prototype.updateProgress = function updateProgress(\n val,\n state,\n n,\n stack\n ) {\n // Immediately update all progress values, using setProgress.\n return this.setProgress(\n val ? this.progress.val + val : null,\n state ? state : null,\n n ? this.progress.n + n : null,\n stack ? this.progress.stack.concat(stack) : null\n );\n };\n\n /* ----- PROMISE MAPPING ----- */\n\n Worker.prototype.then = function then(onFulfilled, onRejected) {\n // Wrap `this` for encapsulation.\n var self = this;\n\n return this.thenCore(onFulfilled, onRejected, function then_main(\n onFulfilled,\n onRejected\n ) {\n // Update progress while queuing, calling, and resolving `then`.\n self.updateProgress(null, null, 1, [onFulfilled]);\n return Promise.prototype.then\n .call(this, function then_pre(val) {\n self.updateProgress(null, onFulfilled);\n return val;\n })\n .then(onFulfilled, onRejected)\n .then(function then_post(val) {\n self.updateProgress(1);\n return val;\n });\n });\n };\n\n Worker.prototype.thenCore = function thenCore(\n onFulfilled,\n onRejected,\n thenBase\n ) {\n // Handle optional thenBase parameter.\n thenBase = thenBase || Promise.prototype.then;\n\n // Wrap `this` for encapsulation and bind it to the promise handlers.\n var self = this;\n if (onFulfilled) {\n onFulfilled = onFulfilled.bind(self);\n }\n if (onRejected) {\n onRejected = onRejected.bind(self);\n }\n\n // Cast self into a Promise to avoid polyfills recursively defining `then`.\n var isNative =\n Promise.toString().indexOf(\"[native code]\") !== -1 &&\n Promise.name === \"Promise\";\n var selfPromise = isNative\n ? self\n : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n // Return the promise, after casting it into a Worker and preserving props.\n var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n return Worker.convert(returnVal, self.__proto__);\n };\n\n Worker.prototype.thenExternal = function thenExternal(\n onFulfilled,\n onRejected\n ) {\n // Call `then` and return a standard promise (exits the Worker chain).\n return Promise.prototype.then.call(this, onFulfilled, onRejected);\n };\n\n Worker.prototype.thenList = function thenList(fns) {\n // Queue a series of promise 'factories' into the promise chain.\n var self = this;\n fns.forEach(function thenList_forEach(fn) {\n self = self.thenCore(fn);\n });\n return self;\n };\n\n Worker.prototype[\"catch\"] = function(onRejected) {\n // Bind `this` to the promise handler, call `catch`, and return a Worker.\n if (onRejected) {\n onRejected = onRejected.bind(this);\n }\n var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n return Worker.convert(returnVal, this);\n };\n\n Worker.prototype.catchExternal = function catchExternal(onRejected) {\n // Call `catch` and return a standard promise (exits the Worker chain).\n return Promise.prototype[\"catch\"].call(this, onRejected);\n };\n\n Worker.prototype.error = function error(msg) {\n // Throw the error in the Promise chain.\n return this.then(function error_main() {\n throw new Error(msg);\n });\n };\n\n /* ----- ALIASES ----- */\n\n Worker.prototype.using = Worker.prototype.set;\n Worker.prototype.saveAs = Worker.prototype.save;\n Worker.prototype.export = Worker.prototype.output;\n Worker.prototype.run = Worker.prototype.then;\n\n // Get dimensions of a PDF page, as determined by jsPDF.\n jsPDF.getPageSize = function(orientation, unit, format) {\n // Decode options object\n if (typeof orientation === \"object\") {\n var options = orientation;\n orientation = options.orientation;\n unit = options.unit || unit;\n format = options.format || format;\n }\n\n // Default options\n unit = unit || \"mm\";\n format = format || \"a4\";\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n var format_as_string = (\"\" + format).toLowerCase();\n\n // Size in pt of various paper formats\n var pageFormats = {\n a0: [2383.94, 3370.39],\n a1: [1683.78, 2383.94],\n a2: [1190.55, 1683.78],\n a3: [841.89, 1190.55],\n a4: [595.28, 841.89],\n a5: [419.53, 595.28],\n a6: [297.64, 419.53],\n a7: [209.76, 297.64],\n a8: [147.4, 209.76],\n a9: [104.88, 147.4],\n a10: [73.7, 104.88],\n b0: [2834.65, 4008.19],\n b1: [2004.09, 2834.65],\n b2: [1417.32, 2004.09],\n b3: [1000.63, 1417.32],\n b4: [708.66, 1000.63],\n b5: [498.9, 708.66],\n b6: [354.33, 498.9],\n b7: [249.45, 354.33],\n b8: [175.75, 249.45],\n b9: [124.72, 175.75],\n b10: [87.87, 124.72],\n c0: [2599.37, 3676.54],\n c1: [1836.85, 2599.37],\n c2: [1298.27, 1836.85],\n c3: [918.43, 1298.27],\n c4: [649.13, 918.43],\n c5: [459.21, 649.13],\n c6: [323.15, 459.21],\n c7: [229.61, 323.15],\n c8: [161.57, 229.61],\n c9: [113.39, 161.57],\n c10: [79.37, 113.39],\n dl: [311.81, 623.62],\n letter: [612, 792],\n \"government-letter\": [576, 756],\n legal: [612, 1008],\n \"junior-legal\": [576, 360],\n ledger: [1224, 792],\n tabloid: [792, 1224],\n \"credit-card\": [153, 243]\n };\n\n var k;\n // Unit conversion\n switch (unit) {\n case \"pt\":\n k = 1;\n break;\n case \"mm\":\n k = 72 / 25.4;\n break;\n case \"cm\":\n k = 72 / 2.54;\n break;\n case \"in\":\n k = 72;\n break;\n case \"px\":\n k = 72 / 96;\n break;\n case \"pc\":\n k = 12;\n break;\n case \"em\":\n k = 12;\n break;\n case \"ex\":\n k = 6;\n break;\n default:\n throw \"Invalid unit: \" + unit;\n }\n var pageHeight = 0;\n var pageWidth = 0;\n\n // Dimensions are stored as user units and converted to points on output\n if (pageFormats.hasOwnProperty(format_as_string)) {\n pageHeight = pageFormats[format_as_string][1] / k;\n pageWidth = pageFormats[format_as_string][0] / k;\n } else {\n try {\n pageHeight = format[1];\n pageWidth = format[0];\n } catch (err) {\n throw new Error(\"Invalid format: \" + format);\n }\n }\n\n var tmp;\n // Handle page orientation\n if (orientation === \"p\" || orientation === \"portrait\") {\n orientation = \"p\";\n if (pageWidth > pageHeight) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else if (orientation === \"l\" || orientation === \"landscape\") {\n orientation = \"l\";\n if (pageHeight > pageWidth) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else {\n throw \"Invalid orientation: \" + orientation;\n }\n\n // Return information (k is the unit conversion ratio from pts)\n var info = {\n width: pageWidth,\n height: pageHeight,\n unit: unit,\n k: k,\n orientation: orientation\n };\n return info;\n };\n\n /**\n * @typedef FontFace\n *\n * The font-face type implements an interface similar to that of the font-face CSS rule,\n * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n * is updated.\n *\n * All properties expect values similar to those in the font-face CSS rule. A difference\n * is the font-family, which do not need to be enclosed in double-quotes when containing\n * spaces like in CSS.\n *\n * @property {string} family The name of the font-family.\n * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n * @property {string} [src] url A URL to a font of a specific format.\n * @property {string} [src] format Format of the font referenced by the URL.\n */\n\n /**\n * Generate a PDF from an HTML element or string using.\n *\n * @name html\n * @function\n * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n * @param {Object} [options] Collection of settings\n * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n *
      \n *
    • \n * false: Auto paging is disabled.\n *
    • \n *
    • \n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\n * slice text in half, making it difficult to read.\n *
    • \n *
    • \n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\n * mostly of a single column of text.\n *
    • \n *
    \n * Default is true.\n * @param {string} [options.filename] name of the file\n * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n * @param {jsPDF} [options.jsPDF] jsPDF instance\n * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is\n * specified or the windowWidth option is NOT specified.\n * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n * html2canvas.windowWidth option, this option affects the actual container size while rendering and\n * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified.\n *\n * @example\n * var doc = new jsPDF();\n *\n * doc.html(document.body, {\n * callback: function (doc) {\n * doc.save();\n * },\n * x: 10,\n * y: 10\n * });\n */\n jsPDFAPI.html = function(src, options) {\n \"use strict\";\n\n options = options || {};\n options.callback = options.callback || function() {};\n options.html2canvas = options.html2canvas || {};\n options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n options.jsPDF = options.jsPDF || this;\n options.fontFaces = options.fontFaces\n ? options.fontFaces.map(normalizeFontFace)\n : null;\n\n // Create a new worker with the given options.\n var worker = new Worker(options);\n\n if (!options.worker) {\n // If worker is not set to true, perform the traditional 'simple' operation.\n return worker.from(src).doCallback();\n } else {\n // Otherwise, return the worker for new Promise-based operation.\n return worker;\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n var jsNamesObj, jsJsObj, text;\n /**\n * @name addJS\n * @function\n * @param {string} javascript The javascript to be embedded into the PDF-file.\n * @returns {jsPDF}\n */\n jsPDFAPI.addJS = function(javascript) {\n text = javascript;\n this.internal.events.subscribe(\"postPutResources\", function() {\n jsNamesObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n\n jsJsObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /JavaScript\");\n this.internal.out(\"/JS (\" + text + \")\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n this.internal.events.subscribe(\"putCatalog\", function() {\n if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n this.internal.out(\"/Names <>\");\n }\n });\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namesOid;\n //var destsGoto = [];\n\n jsPDFAPI.events.push([\n \"postPutResources\",\n function() {\n var pdf = this;\n var rx = /^(\\d+) 0 obj$/;\n\n // Write action goto objects for each page\n // this.outline.destsGoto = [];\n // for (var i = 0; i < totalPages; i++) {\n // var id = pdf.internal.newObject();\n // this.outline.destsGoto.push(id);\n // pdf.internal.write(\"<> endobj\");\n // }\n //\n // for (var i = 0; i < dests.length; i++) {\n // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n // R\");\n // }\n //\n if (this.outline.root.children.length > 0) {\n var lines = pdf.outline.render().split(/\\r\\n/);\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var m = rx.exec(line);\n if (m != null) {\n var oid = m[1];\n pdf.internal.newObjectDeferredBegin(oid, false);\n }\n pdf.internal.write(line);\n }\n }\n\n // This code will write named destination for each page reference\n // (page_1, etc)\n if (this.outline.createNamedDestinations) {\n var totalPages = this.internal.pages.length;\n // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n // follow 5, 7, 9, etc\n // Write destination objects for each page\n var dests = [];\n for (var i = 0; i < totalPages; i++) {\n var id = pdf.internal.newObject();\n dests.push(id);\n var info = pdf.internal.getPageInfo(i + 1);\n pdf.internal.write(\n \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n );\n }\n\n // assign a name for each destination\n var names2Oid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Names [ \");\n for (var i = 0; i < dests.length; i++) {\n pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n }\n pdf.internal.write(\" ] >>\", \"endobj\");\n\n // var kids = pdf.internal.newObject();\n // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n // pdf.internal.write(' ] >>', 'endobj');\n\n namesOid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n pdf.internal.write(\">>\", \"endobj\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putCatalog\",\n function() {\n var pdf = this;\n if (pdf.outline.root.children.length > 0) {\n pdf.internal.write(\n \"/Outlines\",\n this.outline.makeRef(this.outline.root)\n );\n if (this.outline.createNamedDestinations) {\n pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n }\n // Open with Bookmarks showing\n // pdf.internal.write(\"/PageMode /UseOutlines\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n var pdf = this;\n\n pdf.outline = {\n createNamedDestinations: false,\n root: {\n children: []\n }\n };\n\n /**\n * Options: pageNumber\n */\n pdf.outline.add = function(parent, title, options) {\n var item = {\n title: title,\n options: options,\n children: []\n };\n if (parent == null) {\n parent = this.root;\n }\n parent.children.push(item);\n return item;\n };\n\n pdf.outline.render = function() {\n this.ctx = {};\n this.ctx.val = \"\";\n this.ctx.pdf = pdf;\n\n this.genIds_r(this.root);\n this.renderRoot(this.root);\n this.renderItems(this.root);\n\n return this.ctx.val;\n };\n\n pdf.outline.genIds_r = function(node) {\n node.id = pdf.internal.newObjectDeferred();\n for (var i = 0; i < node.children.length; i++) {\n this.genIds_r(node.children[i]);\n }\n };\n\n pdf.outline.renderRoot = function(node) {\n this.objStart(node);\n this.line(\"/Type /Outlines\");\n if (node.children.length > 0) {\n this.line(\"/First \" + this.makeRef(node.children[0]));\n this.line(\n \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n );\n }\n this.line(\n \"/Count \" +\n this.count_r(\n {\n count: 0\n },\n node\n )\n );\n this.objEnd();\n };\n\n pdf.outline.renderItems = function(node) {\n var getVerticalCoordinateString = this.ctx.pdf.internal\n .getVerticalCoordinateString;\n for (var i = 0; i < node.children.length; i++) {\n var item = node.children[i];\n this.objStart(item);\n\n this.line(\"/Title \" + this.makeString(item.title));\n\n this.line(\"/Parent \" + this.makeRef(node));\n if (i > 0) {\n this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n }\n if (i < node.children.length - 1) {\n this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n }\n if (item.children.length > 0) {\n this.line(\"/First \" + this.makeRef(item.children[0]));\n this.line(\n \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n );\n }\n\n var count = (this.count = this.count_r(\n {\n count: 0\n },\n item\n ));\n if (count > 0) {\n this.line(\"/Count \" + count);\n }\n\n if (item.options) {\n if (item.options.pageNumber) {\n // Explicit Destination\n //WARNING this assumes page ids are 3,5,7, etc.\n var info = pdf.internal.getPageInfo(item.options.pageNumber);\n this.line(\n \"/Dest \" +\n \"[\" +\n info.objId +\n \" 0 R /XYZ 0 \" +\n getVerticalCoordinateString(0) +\n \" 0]\"\n );\n // this line does not work on all clients (pageNumber instead of page ref)\n //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n // Named Destination\n // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n // Action Destination\n // var id = pdf.internal.newObject();\n // pdf.internal.write('<> endobj');\n // this.line('/A ' + id + ' 0 R' );\n }\n }\n this.objEnd();\n }\n for (var z = 0; z < node.children.length; z++) {\n this.renderItems(node.children[z]);\n }\n };\n\n pdf.outline.line = function(text) {\n this.ctx.val += text + \"\\r\\n\";\n };\n\n pdf.outline.makeRef = function(node) {\n return node.id + \" 0 R\";\n };\n\n pdf.outline.makeString = function(val) {\n return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n };\n\n pdf.outline.objStart = function(node) {\n this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n };\n\n pdf.outline.objEnd = function() {\n this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n };\n\n pdf.outline.count_r = function(ctx, node) {\n for (var i = 0; i < node.children.length; i++) {\n ctx.count++;\n this.count_r(ctx, node.children[i]);\n }\n return ctx.count;\n };\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * 0xc0 (SOF) Huffman - Baseline DCT\n * 0xc1 (SOF) Huffman - Extended sequential DCT\n * 0xc2 Progressive DCT (SOF2)\n * 0xc3 Spatial (sequential) lossless (SOF3)\n * 0xc4 Differential sequential DCT (SOF5)\n * 0xc5 Differential progressive DCT (SOF6)\n * 0xc6 Differential spatial (SOF7)\n * 0xc7\n */\n var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n //takes a string imgData containing the raw bytes of\n //a jpeg image and returns [width, height]\n //Algorithm from: http://www.64lines.com/jpeg-width-height\n var getJpegInfo = function(imgData) {\n var width, height, numcomponents;\n var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n var len = imgData.length;\n var result = { width: 0, height: 0, numcomponents: 1 };\n for (var i = 4; i < len; i += 2) {\n i += blockLength;\n if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n numcomponents = imgData.charCodeAt(i + 9);\n result = { width: width, height: height, numcomponents: numcomponents };\n break;\n } else {\n blockLength =\n imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n }\n }\n return result;\n };\n\n /**\n * @ignore\n */\n jsPDFAPI.processJPEG = function(\n data,\n index,\n alias,\n compression,\n dataAsBinaryString,\n colorSpace\n ) {\n var filter = this.decode.DCT_DECODE,\n bpc = 8,\n dims,\n result = null;\n\n if (\n typeof data === \"string\" ||\n this.__addimage__.isArrayBuffer(data) ||\n this.__addimage__.isArrayBufferView(data)\n ) {\n // if we already have a stored binary string rep use that\n data = dataAsBinaryString || data;\n data = this.__addimage__.isArrayBuffer(data)\n ? new Uint8Array(data)\n : data;\n data = this.__addimage__.isArrayBufferView(data)\n ? this.__addimage__.arrayBufferToBinaryString(data)\n : data;\n\n dims = getJpegInfo(data);\n switch (dims.numcomponents) {\n case 1:\n colorSpace = this.color_spaces.DEVICE_GRAY;\n break;\n case 4:\n colorSpace = this.color_spaces.DEVICE_CMYK;\n break;\n case 3:\n colorSpace = this.color_spaces.DEVICE_RGB;\n break;\n }\n\n result = {\n data: data,\n width: dims.width,\n height: dims.height,\n colorSpace: colorSpace,\n bitsPerComponent: bpc,\n filter: filter,\n index: index,\n alias: alias\n };\n }\n return result;\n };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n var APNG_BLEND_OP_OVER,\n APNG_BLEND_OP_SOURCE,\n APNG_DISPOSE_OP_BACKGROUND,\n APNG_DISPOSE_OP_NONE,\n APNG_DISPOSE_OP_PREVIOUS,\n makeImage,\n scratchCanvas,\n scratchCtx;\n\n APNG_DISPOSE_OP_NONE = 0;\n\n APNG_DISPOSE_OP_BACKGROUND = 1;\n\n APNG_DISPOSE_OP_PREVIOUS = 2;\n\n APNG_BLEND_OP_SOURCE = 0;\n\n APNG_BLEND_OP_OVER = 1;\n\n function PNG(data) {\n var chunkSize,\n colors,\n palLen,\n delayDen,\n delayNum,\n frame,\n i,\n index,\n key,\n section,\n palShort,\n text,\n _i,\n _j,\n _ref;\n this.data = data;\n this.pos = 8;\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.animation = null;\n this.text = {};\n frame = null;\n while (true) {\n chunkSize = this.readUInt32();\n section = function() {\n var _i, _results;\n _results = [];\n for (i = _i = 0; _i < 4; i = ++_i) {\n _results.push(String.fromCharCode(this.data[this.pos++]));\n }\n return _results;\n }\n .call(this)\n .join(\"\");\n switch (section) {\n case \"IHDR\":\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n case \"acTL\":\n this.animation = {\n numFrames: this.readUInt32(),\n numPlays: this.readUInt32() || Infinity,\n frames: []\n };\n break;\n case \"PLTE\":\n this.palette = this.read(chunkSize);\n break;\n case \"fcTL\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.pos += 4;\n frame = {\n width: this.readUInt32(),\n height: this.readUInt32(),\n xOffset: this.readUInt32(),\n yOffset: this.readUInt32()\n };\n delayNum = this.readUInt16();\n delayDen = this.readUInt16() || 100;\n frame.delay = (1000 * delayNum) / delayDen;\n frame.disposeOp = this.data[this.pos++];\n frame.blendOp = this.data[this.pos++];\n frame.data = [];\n break;\n case \"IDAT\":\n case \"fdAT\":\n if (section === \"fdAT\") {\n this.pos += 4;\n chunkSize -= 4;\n }\n data = (frame != null ? frame.data : void 0) || this.imgData;\n for (\n i = _i = 0;\n 0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n i = 0 <= chunkSize ? ++_i : --_i\n ) {\n data.push(this.data[this.pos++]);\n }\n break;\n case \"tRNS\":\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n palLen = this.palette.length / 3;\n this.transparency.indexed = this.read(chunkSize);\n if (this.transparency.indexed.length > palLen)\n throw new Error(\"More transparent colors than palette size\");\n /*\n * According to the PNG spec trns should be increased to the same size as palette if shorter\n */\n //palShort = 255 - this.transparency.indexed.length;\n palShort = palLen - this.transparency.indexed.length;\n if (palShort > 0) {\n for (\n i = _j = 0;\n 0 <= palShort ? _j < palShort : _j > palShort;\n i = 0 <= palShort ? ++_j : --_j\n ) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n this.transparency.rgb = this.read(chunkSize);\n }\n break;\n case \"tEXt\":\n text = this.read(chunkSize);\n index = text.indexOf(0);\n key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n case \"IEND\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.colors = function() {\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n return 1;\n case 2:\n case 6:\n return 3;\n }\n }.call(this);\n this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n this.colorSpace = function() {\n switch (this.colors) {\n case 1:\n return \"DeviceGray\";\n case 3:\n return \"DeviceRGB\";\n }\n }.call(this);\n this.imgData = new Uint8Array(this.imgData);\n return;\n default:\n this.pos += chunkSize;\n }\n this.pos += 4;\n if (this.pos > this.data.length) {\n throw new Error(\"Incomplete or corrupt PNG file\");\n }\n }\n }\n\n PNG.prototype.read = function(bytes) {\n var i, _i, _results;\n _results = [];\n for (\n i = _i = 0;\n 0 <= bytes ? _i < bytes : _i > bytes;\n i = 0 <= bytes ? ++_i : --_i\n ) {\n _results.push(this.data[this.pos++]);\n }\n return _results;\n };\n\n PNG.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.data[this.pos++] << 24;\n b2 = this.data[this.pos++] << 16;\n b3 = this.data[this.pos++] << 8;\n b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n PNG.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.data[this.pos++] << 8;\n b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n PNG.prototype.decodePixels = function(data) {\n var pixelBytes = this.pixelBitlength / 8;\n var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n var pos = 0;\n var _this = this;\n\n if (data == null) {\n data = this.imgData;\n }\n if (data.length === 0) {\n return new Uint8Array(0);\n }\n\n data = unzlibSync(data);\n function pass(x0, y0, dx, dy) {\n var abyte,\n c,\n col,\n i,\n left,\n length,\n p,\n pa,\n paeth,\n pb,\n pc,\n pixels,\n row,\n scanlineLength,\n upper,\n upperLeft,\n _i,\n _j,\n _k,\n _l,\n _m;\n var w = Math.ceil((_this.width - x0) / dx),\n h = Math.ceil((_this.height - y0) / dy);\n var isFull = _this.width == w && _this.height == h;\n scanlineLength = pixelBytes * w;\n pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n length = data.length;\n row = 0;\n c = 0;\n while (row < h && pos < length) {\n switch (data[pos++]) {\n case 0:\n for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n pixels[c++] = data[pos++];\n }\n break;\n case 1:\n for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n abyte = data[pos++];\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n pixels[c++] = (abyte + left) % 256;\n }\n break;\n case 2:\n for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (upper + abyte) % 256;\n }\n break;\n case 3:\n for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n case 4:\n for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n pixels[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n p = left + upper - upperLeft;\n pa = Math.abs(p - left);\n pb = Math.abs(p - upper);\n pc = Math.abs(p - upperLeft);\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n pixels[c++] = (abyte + paeth) % 256;\n }\n break;\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n if (!isFull) {\n var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n var partPos = row * scanlineLength;\n for (i = 0; i < w; i += 1) {\n for (var j = 0; j < pixelBytes; j += 1)\n fullPixels[fullPos++] = pixels[partPos++];\n fullPos += (dx - 1) * pixelBytes;\n }\n }\n row++;\n }\n }\n if (_this.interlaceMethod == 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n /* NOTE these seem to follow the pattern:\n * pass(x, 0, 2*x, 2*x);\n * pass(0, x, x, 2*x);\n * with x being 4, 2, 1.\n */\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1);\n }\n return fullPixels;\n };\n\n PNG.prototype.decodePalette = function() {\n var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n palette = this.palette;\n transparency = this.transparency.indexed || [];\n ret = new Uint8Array((transparency.length || 0) + palette.length);\n pos = 0;\n length = palette.length;\n c = 0;\n for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n }\n return ret;\n };\n\n PNG.prototype.copyToImageData = function(imageData, pixels) {\n var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n colors = this.colors;\n palette = null;\n alpha = this.hasAlphaChannel;\n if (this.palette.length) {\n palette =\n (_ref = this._decodedPalette) != null\n ? _ref\n : (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n data = imageData.data || imageData;\n length = data.length;\n input = palette || pixels;\n i = j = 0;\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n PNG.prototype.decode = function() {\n var ret;\n ret = new Uint8Array(this.width * this.height * 4);\n this.copyToImageData(ret, this.decodePixels());\n return ret;\n };\n\n var hasBrowserCanvas = function() {\n if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n try {\n scratchCanvas = globalObject.document.createElement(\"canvas\");\n scratchCtx = scratchCanvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n };\n\n hasBrowserCanvas();\n\n makeImage = function(imageData) {\n if (hasBrowserCanvas() === true) {\n var img;\n scratchCtx.width = imageData.width;\n scratchCtx.height = imageData.height;\n scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n scratchCtx.putImageData(imageData, 0, 0);\n img = new Image();\n img.src = scratchCanvas.toDataURL();\n return img;\n }\n throw new Error(\"This method requires a Browser with Canvas-capability.\");\n };\n\n PNG.prototype.decodeFrames = function(ctx) {\n var frame, i, imageData, pixels, _i, _len, _ref, _results;\n if (!this.animation) {\n return;\n }\n _ref = this.animation.frames;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n frame = _ref[i];\n imageData = ctx.createImageData(frame.width, frame.height);\n pixels = this.decodePixels(new Uint8Array(frame.data));\n this.copyToImageData(imageData, pixels);\n frame.imageData = imageData;\n _results.push((frame.image = makeImage(imageData)));\n }\n return _results;\n };\n\n PNG.prototype.renderFrame = function(ctx, number) {\n var frame, frames, prev;\n frames = this.animation.frames;\n frame = frames[number];\n prev = frames[number - 1];\n if (number === 0) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n ) {\n ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n } else if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n ) {\n ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n }\n if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n }\n return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n };\n\n PNG.prototype.animate = function(ctx) {\n var doFrame,\n frameNumber,\n frames,\n numFrames,\n numPlays,\n _ref,\n _this = this;\n frameNumber = 0;\n (_ref = this.animation),\n (numFrames = _ref.numFrames),\n (frames = _ref.frames),\n (numPlays = _ref.numPlays);\n return (doFrame = function() {\n var f, frame;\n f = frameNumber++ % numFrames;\n frame = frames[f];\n _this.renderFrame(ctx, f);\n if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n }\n })();\n };\n\n PNG.prototype.stopAnimation = function() {\n var _ref;\n return clearTimeout(\n (_ref = this.animation) != null ? _ref._timeout : void 0\n );\n };\n\n PNG.prototype.render = function(canvas) {\n var ctx, data;\n if (canvas._png) {\n canvas._png.stopAnimation();\n }\n canvas._png = this;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx = canvas.getContext(\"2d\");\n if (this.animation) {\n this.decodeFrames(ctx);\n return this.animate(ctx);\n } else {\n data = ctx.createImageData(this.width, this.height);\n this.copyToImageData(data, this.decodePixels());\n return ctx.putImageData(data, 0, 0);\n }\n };\n\n return PNG;\n})();\n\nexport { PNG };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /*\n * @see http://www.w3.org/TR/PNG-Chunks.html\n *\n Color Allowed Interpretation\n Type Bit Depths\n\n 0 1,2,4,8,16 Each pixel is a grayscale sample.\n\n 2 8,16 Each pixel is an R,G,B triple.\n\n 3 1,2,4,8 Each pixel is a palette index;\n a PLTE chunk must appear.\n\n 4 8,16 Each pixel is a grayscale sample,\n followed by an alpha sample.\n\n 6 8,16 Each pixel is an R,G,B triple,\n followed by an alpha sample.\n */\n\n /*\n * PNG filter method types\n *\n * @see http://www.w3.org/TR/PNG-Filters.html\n * @see http://www.libpng.org/pub/png/book/chapter09.html\n *\n * This is what the value 'Predictor' in decode params relates to\n *\n * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n *\n 0 None\n 1 Sub\n 2 Up\n 3 Average\n 4 Paeth\n */\n\n var canCompress = function(value) {\n return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n };\n\n var hasCompressionJS = function() {\n return typeof zlibSync === \"function\";\n };\n var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n var level = 4;\n var filter_method = filterUp;\n\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n level = 1;\n filter_method = filterSub;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n level = 6;\n filter_method = filterAverage;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n level = 9;\n filter_method = filterPaeth;\n break;\n }\n\n bytes = applyPngFilterMethod(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n );\n var dat = zlibSync(bytes, { level: level });\n return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n };\n\n var applyPngFilterMethod = function(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n ) {\n var lines = bytes.length / lineLength,\n result = new Uint8Array(bytes.length + lines),\n filter_methods = getFilterMethods(),\n line,\n prevLine,\n offset;\n\n for (var i = 0; i < lines; i += 1) {\n offset = i * lineLength;\n line = bytes.subarray(offset, offset + lineLength);\n\n if (filter_method) {\n result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n } else {\n var len = filter_methods.length,\n results = [];\n\n for (var j; j < len; j += 1) {\n results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n }\n\n var ind = getIndexOfSmallestSum(results.concat());\n\n result.set(results[ind], offset + i);\n }\n\n prevLine = line;\n }\n\n return result;\n };\n\n var filterNone = function(line) {\n /*var result = new Uint8Array(line.length + 1);\n result[0] = 0;\n result.set(line, 1);*/\n\n var result = Array.apply([], line);\n result.unshift(0);\n\n return result;\n };\n\n var filterSub = function(line, colorsPerPixel) {\n var result = [],\n len = line.length,\n left;\n\n result[0] = 1;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterUp = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n up;\n\n result[0] = 2;\n\n for (var i = 0; i < len; i += 1) {\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterAverage = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up;\n\n result[0] = 3;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n }\n\n return result;\n };\n\n var filterPaeth = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up,\n upLeft,\n paeth;\n\n result[0] = 4;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n paeth = paethPredictor(left, up, upLeft);\n result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var paethPredictor = function(left, up, upLeft) {\n if (left === up && up === upLeft) {\n return left;\n }\n var pLeft = Math.abs(up - upLeft),\n pUp = Math.abs(left - upLeft),\n pUpLeft = Math.abs(left + up - upLeft - upLeft);\n return pLeft <= pUp && pLeft <= pUpLeft\n ? left\n : pUp <= pUpLeft\n ? up\n : upLeft;\n };\n\n var getFilterMethods = function() {\n return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n };\n\n var getIndexOfSmallestSum = function(arrays) {\n var sum = arrays.map(function(value) {\n return value.reduce(function(pv, cv) {\n return pv + Math.abs(cv);\n }, 0);\n });\n return sum.indexOf(Math.min.apply(null, sum));\n };\n\n var getPredictorFromCompression = function(compression) {\n var predictor;\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n predictor = 11;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n predictor = 13;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n predictor = 14;\n break;\n\n default:\n predictor = 12;\n break;\n }\n return predictor;\n };\n\n /**\n * @name processPNG\n * @function\n * @ignore\n */\n jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n \"use strict\";\n\n var colorSpace,\n filter = this.decode.FLATE_DECODE,\n bitsPerComponent,\n image,\n decodeParameters = \"\",\n trns,\n colors,\n pal,\n smask,\n pixels,\n len,\n alphaData,\n imgData,\n hasColors,\n pixel,\n i,\n n;\n\n if (this.__addimage__.isArrayBuffer(imageData))\n imageData = new Uint8Array(imageData);\n\n if (this.__addimage__.isArrayBufferView(imageData)) {\n image = new PNG(imageData);\n imageData = image.imgData;\n bitsPerComponent = image.bits;\n colorSpace = image.colorSpace;\n colors = image.colors;\n\n /*\n * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n *\n * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n *\n * Extract alpha to create two separate images, using the alpha as a sMask\n */\n if ([4, 6].indexOf(image.colorType) !== -1) {\n /*\n * processes 8 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 8) {\n pixels =\n image.pixelBitlength == 32\n ? new Uint32Array(image.decodePixels().buffer)\n : image.pixelBitlength == 16\n ? new Uint16Array(image.decodePixels().buffer)\n : new Uint8Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(len * image.colors);\n alphaData = new Uint8Array(len);\n var pDiff = image.pixelBitlength - image.bits;\n i = 0;\n n = 0;\n var pbl;\n\n for (; i < len; i++) {\n pixel = pixels[i];\n pbl = 0;\n\n while (pbl < pDiff) {\n imgData[n++] = (pixel >>> pbl) & 0xff;\n pbl = pbl + image.bits;\n }\n\n alphaData[i] = (pixel >>> pbl) & 0xff;\n }\n }\n\n /*\n * processes 16 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 16) {\n pixels = new Uint32Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(\n len * (32 / image.pixelBitlength) * image.colors\n );\n alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n hasColors = image.colors > 1;\n i = 0;\n n = 0;\n var a = 0;\n\n while (i < len) {\n pixel = pixels[i++];\n\n imgData[n++] = (pixel >>> 0) & 0xff;\n\n if (hasColors) {\n imgData[n++] = (pixel >>> 16) & 0xff;\n\n pixel = pixels[i++];\n imgData[n++] = (pixel >>> 0) & 0xff;\n }\n\n alphaData[a++] = (pixel >>> 16) & 0xff;\n }\n bitsPerComponent = 8;\n }\n\n if (canCompress(compression)) {\n imageData = compressBytes(\n imgData,\n image.width * image.colors,\n image.colors,\n compression\n );\n smask = compressBytes(alphaData, image.width, 1, compression);\n } else {\n imageData = imgData;\n smask = alphaData;\n filter = undefined;\n }\n }\n\n /*\n * Indexed png. Each pixel is a palette index.\n */\n if (image.colorType === 3) {\n colorSpace = this.color_spaces.INDEXED;\n pal = image.palette;\n\n if (image.transparency.indexed) {\n var trans = image.transparency.indexed;\n var total = 0;\n i = 0;\n len = trans.length;\n\n for (; i < len; ++i) {\n total += trans[i];\n }\n\n total = total / 255;\n\n /*\n * a single color is specified as 100% transparent (0),\n * so we set trns to use a /Mask with that index\n */\n if (total === len - 1 && trans.indexOf(0) !== -1) {\n trns = [trans.indexOf(0)];\n\n /*\n * there's more than one colour within the palette that specifies\n * a transparency value less than 255, so we unroll the pixels to create an image sMask\n */\n } else if (total !== len) {\n pixels = image.decodePixels();\n alphaData = new Uint8Array(pixels.length);\n i = 0;\n len = pixels.length;\n\n for (; i < len; i++) {\n alphaData[i] = trans[pixels[i]];\n }\n\n smask = compressBytes(alphaData, image.width, 1);\n }\n }\n }\n\n var predictor = getPredictorFromCompression(compression);\n\n if (filter === this.decode.FLATE_DECODE) {\n decodeParameters = \"/Predictor \" + predictor + \" \";\n }\n decodeParameters +=\n \"/Colors \" +\n colors +\n \" /BitsPerComponent \" +\n bitsPerComponent +\n \" /Columns \" +\n image.width;\n\n if (\n this.__addimage__.isArrayBuffer(imageData) ||\n this.__addimage__.isArrayBufferView(imageData)\n ) {\n imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n }\n\n if (\n (smask && this.__addimage__.isArrayBuffer(smask)) ||\n this.__addimage__.isArrayBufferView(smask)\n ) {\n smask = this.__addimage__.arrayBufferToBinaryString(smask);\n }\n\n return {\n alias: alias,\n data: imageData,\n index: index,\n filter: filter,\n decodeParameters: decodeParameters,\n transparency: trns,\n palette: pal,\n sMask: smask,\n predictor: predictor,\n width: image.width,\n height: image.height,\n bitsPerComponent: bitsPerComponent,\n colorSpace: colorSpace\n };\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee , 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n var p = 0;\n\n var gopts = gopts === undefined ? {} : gopts;\n var loop_count = gopts.loop === undefined ? null : gopts.loop;\n var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n function check_palette_and_num_colors(palette) {\n var num_colors = palette.length;\n if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n throw new Error(\n \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n );\n }\n return num_colors;\n }\n\n // - Header.\n buf[p++] = 0x47;\n buf[p++] = 0x49;\n buf[p++] = 0x46; // GIF\n buf[p++] = 0x38;\n buf[p++] = 0x39;\n buf[p++] = 0x61; // 89a\n\n // Handling of Global Color Table (palette) and background index.\n var gp_num_colors_pow2 = 0;\n var background = 0;\n if (global_palette !== null) {\n var gp_num_colors = check_palette_and_num_colors(global_palette);\n while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n gp_num_colors = 1 << gp_num_colors_pow2;\n --gp_num_colors_pow2;\n if (gopts.background !== undefined) {\n background = gopts.background;\n if (background >= gp_num_colors)\n throw new Error(\"Background index out of range.\");\n // The GIF spec states that a background index of 0 should be ignored, so\n // this is probably a mistake and you really want to set it to another\n // slot in the palette. But actually in the end most browsers, etc end\n // up ignoring this almost completely (including for dispose background).\n if (background === 0)\n throw new Error(\"Background index explicitly passed as 0.\");\n }\n }\n\n // - Logical Screen Descriptor.\n // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n buf[p++] = width & 0xff;\n buf[p++] = (width >> 8) & 0xff;\n buf[p++] = height & 0xff;\n buf[p++] = (height >> 8) & 0xff;\n // NOTE: Indicates 0-bpp original color resolution (unused?).\n buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n buf[p++] = background; // Background Color Index.\n buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n // - Global Color Table\n if (global_palette !== null) {\n for (var i = 0, il = global_palette.length; i < il; ++i) {\n var rgb = global_palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n if (loop_count !== null) {\n // Netscape block for looping.\n if (loop_count < 0 || loop_count > 65535)\n throw new Error(\"Loop count invalid.\");\n // Extension code, label, and length.\n buf[p++] = 0x21;\n buf[p++] = 0xff;\n buf[p++] = 0x0b;\n // NETSCAPE2.0\n buf[p++] = 0x4e;\n buf[p++] = 0x45;\n buf[p++] = 0x54;\n buf[p++] = 0x53;\n buf[p++] = 0x43;\n buf[p++] = 0x41;\n buf[p++] = 0x50;\n buf[p++] = 0x45;\n buf[p++] = 0x32;\n buf[p++] = 0x2e;\n buf[p++] = 0x30;\n // Sub-block\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loop_count & 0xff;\n buf[p++] = (loop_count >> 8) & 0xff;\n buf[p++] = 0x00; // Terminator.\n }\n\n var ended = false;\n\n this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n if (ended === true) {\n --p;\n ended = false;\n } // Un-end.\n\n opts = opts === undefined ? {} : opts;\n\n // TODO(deanm): Bounds check x, y. Do they need to be within the virtual\n // canvas width/height, I imagine?\n if (x < 0 || y < 0 || x > 65535 || y > 65535)\n throw new Error(\"x/y invalid.\");\n\n if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n if (indexed_pixels.length < w * h)\n throw new Error(\"Not enough pixels for the frame size.\");\n\n var using_local_palette = true;\n var palette = opts.palette;\n if (palette === undefined || palette === null) {\n using_local_palette = false;\n palette = global_palette;\n }\n\n if (palette === undefined || palette === null)\n throw new Error(\"Must supply either a local or global palette.\");\n\n var num_colors = check_palette_and_num_colors(palette);\n\n // Compute the min_code_size (power of 2), destroying num_colors.\n var min_code_size = 0;\n while ((num_colors >>= 1)) ++min_code_size;\n num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n var delay = opts.delay === undefined ? 0 : opts.delay;\n\n // From the spec:\n // 0 - No disposal specified. The decoder is\n // not required to take any action.\n // 1 - Do not dispose. The graphic is to be left\n // in place.\n // 2 - Restore to background color. The area used by the\n // graphic must be restored to the background color.\n // 3 - Restore to previous. The decoder is required to\n // restore the area overwritten by the graphic with\n // what was there prior to rendering the graphic.\n // 4-7 - To be defined.\n // NOTE(deanm): Dispose background doesn't really work, apparently most\n // browsers ignore the background palette index and clear to transparency.\n var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n if (disposal < 0 || disposal > 3)\n // 4-7 is reserved.\n throw new Error(\"Disposal out of range.\");\n\n var use_transparency = false;\n var transparent_index = 0;\n if (opts.transparent !== undefined && opts.transparent !== null) {\n use_transparency = true;\n transparent_index = opts.transparent;\n if (transparent_index < 0 || transparent_index >= num_colors)\n throw new Error(\"Transparent color index.\");\n }\n\n if (disposal !== 0 || use_transparency || delay !== 0) {\n // - Graphics Control Extension\n buf[p++] = 0x21;\n buf[p++] = 0xf9; // Extension / Label.\n buf[p++] = 4; // Byte size.\n\n buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n buf[p++] = delay & 0xff;\n buf[p++] = (delay >> 8) & 0xff;\n buf[p++] = transparent_index; // Transparent color index.\n buf[p++] = 0; // Block Terminator.\n }\n\n // - Image Descriptor\n buf[p++] = 0x2c; // Image Seperator.\n buf[p++] = x & 0xff;\n buf[p++] = (x >> 8) & 0xff; // Left.\n buf[p++] = y & 0xff;\n buf[p++] = (y >> 8) & 0xff; // Top.\n buf[p++] = w & 0xff;\n buf[p++] = (w >> 8) & 0xff;\n buf[p++] = h & 0xff;\n buf[p++] = (h >> 8) & 0xff;\n // NOTE: No sort flag (unused?).\n // TODO(deanm): Support interlace.\n buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n // - Local Color Table\n if (using_local_palette === true) {\n for (var i = 0, il = palette.length; i < il; ++i) {\n var rgb = palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n p = GifWriterOutputLZWCodeStream(\n buf,\n p,\n min_code_size < 2 ? 2 : min_code_size,\n indexed_pixels\n );\n\n return p;\n };\n\n this.end = function() {\n if (ended === false) {\n buf[p++] = 0x3b; // Trailer.\n ended = true;\n }\n return p;\n };\n\n this.getOutputBuffer = function() {\n return buf;\n };\n this.setOutputBuffer = function(v) {\n buf = v;\n };\n this.getOutputBufferPosition = function() {\n return p;\n };\n this.setOutputBufferPosition = function(v) {\n p = v;\n };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n buf[p++] = min_code_size;\n var cur_subblock = p++; // Pointing at the length field.\n\n var clear_code = 1 << min_code_size;\n var code_mask = clear_code - 1;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n var cur_shift = 0;\n // We have at most 12-bit codes, so we should have to hold a max of 19\n // bits here (and then we would write out).\n var cur = 0;\n\n function emit_bytes_to_buffer(bit_block_size) {\n while (cur_shift >= bit_block_size) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n }\n\n function emit_code(c) {\n cur |= c << cur_shift;\n cur_shift += cur_code_size;\n emit_bytes_to_buffer(8);\n }\n\n // I am not an expert on the topic, and I don't want to write a thesis.\n // However, it is good to outline here the basic algorithm and the few data\n // structures and optimizations here that make this implementation fast.\n // The basic idea behind LZW is to build a table of previously seen runs\n // addressed by a short id (herein called output code). All data is\n // referenced by a code, which represents one or more values from the\n // original input stream. All input bytes can be referenced as the same\n // value as an output code. So if you didn't want any compression, you\n // could more or less just output the original bytes as codes (there are\n // some details to this, but it is the idea). In order to achieve\n // compression, values greater then the input range (codes can be up to\n // 12-bit while input only 8-bit) represent a sequence of previously seen\n // inputs. The decompressor is able to build the same mapping while\n // decoding, so there is always a shared common knowledge between the\n // encoding and decoder, which is also important for \"timing\" aspects like\n // how to handle variable bit width code encoding.\n //\n // One obvious but very important consequence of the table system is there\n // is always a unique id (at most 12-bits) to map the runs. 'A' might be\n // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship\n // can be used for an effecient lookup strategy for the code mapping. We\n // need to know if a run has been seen before, and be able to map that run\n // to the output code. Since we start with known unique ids (input bytes),\n // and then from those build more unique ids (table entries), we can\n // continue this chain (almost like a linked list) to always have small\n // integer values that represent the current byte chains in the encoder.\n // This means instead of tracking the input bytes (AAAABCD) to know our\n // current state, we can track the table entry for AAAABC (it is guaranteed\n // to exist by the nature of the algorithm) and the next character D.\n // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n // unique. This allows us to create a simple lookup key for mapping input\n // sequences to codes (table indices) without having to store or search\n // any of the code sequences. So if 'AAAA' has a table entry of 12, the\n // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n // key. This leads to a integer value at most 20-bits, which can always\n // fit in an SMI value and be used as a fast sparse array / object key.\n\n // Output code for the current contents of the index buffer.\n var ib_code = index_stream[0] & code_mask; // Load first input index.\n var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n emit_code(clear_code); // Spec says first code should be a clear code.\n\n // First index already loaded, process the rest of the stream.\n for (var i = 1, il = index_stream.length; i < il; ++i) {\n var k = index_stream[i] & code_mask;\n var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n var cur_code = code_table[cur_key]; // buffer + k.\n\n // Check if we have to create a new code table entry.\n if (cur_code === undefined) {\n // We don't have buffer + k.\n // Emit index buffer (without k).\n // This is an inline version of emit_code, because this is the core\n // writing routine of the compressor (and V8 cannot inline emit_code\n // because it is a closure here in a different context). Additionally\n // we can call emit_byte_to_buffer less often, because we can have\n // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n // be 12-bits, so can safely have 18-bits there without overflow.\n // emit_code(ib_code);\n cur |= ib_code << cur_shift;\n cur_shift += cur_code_size;\n while (cur_shift >= 8) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n\n if (next_code === 4096) {\n // Table full, need a clear.\n emit_code(clear_code);\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_table = {};\n } else {\n // Table not full, insert a new entry.\n // Increase our variable bit code sizes if necessary. This is a bit\n // tricky as it is based on \"timing\" between the encoding and\n // decoder. From the encoders perspective this should happen after\n // we've already emitted the index buffer and are about to create the\n // first table entry that would overflow our current code bit size.\n if (next_code >= 1 << cur_code_size) ++cur_code_size;\n code_table[cur_key] = next_code++; // Insert into code table.\n }\n\n ib_code = k; // Index buffer to single input k.\n } else {\n ib_code = cur_code; // Index buffer to sequence in code table.\n }\n }\n\n emit_code(ib_code); // There will still be something in the index buffer.\n emit_code(eoi_code); // End Of Information.\n\n // Flush / finalize the sub-blocks stream to the buffer.\n emit_bytes_to_buffer(1);\n\n // Finish the sub-blocks, writing out any unfinished lengths and\n // terminating with a sub-block of length 0. If we have already started\n // but not yet used a sub-block it can just become the terminator.\n if (cur_subblock + 1 === p) {\n // Started but unused.\n buf[cur_subblock] = 0;\n } else {\n // Started and used, write length and additional terminator block.\n buf[cur_subblock] = p - cur_subblock - 1;\n buf[p++] = 0;\n }\n return p;\n}\n\nfunction GifReader(buf) {\n var p = 0;\n\n // - Header (GIF87a or GIF89a).\n if (\n buf[p++] !== 0x47 ||\n buf[p++] !== 0x49 ||\n buf[p++] !== 0x46 ||\n buf[p++] !== 0x38 ||\n ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n buf[p++] !== 0x61\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n // - Logical Screen Descriptor.\n var width = buf[p++] | (buf[p++] << 8);\n var height = buf[p++] | (buf[p++] << 8);\n var pf0 = buf[p++]; // .\n var global_palette_flag = pf0 >> 7;\n var num_global_colors_pow2 = pf0 & 0x7;\n var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n var background = buf[p++];\n buf[p++]; // Pixel aspect ratio (unused?).\n\n var global_palette_offset = null;\n var global_palette_size = null;\n\n if (global_palette_flag) {\n global_palette_offset = p;\n global_palette_size = num_global_colors;\n p += num_global_colors * 3; // Seek past palette.\n }\n\n var no_eof = true;\n\n var frames = [];\n\n var delay = 0;\n var transparent_index = null;\n var disposal = 0; // 0 - No disposal specified.\n var loop_count = null;\n\n this.width = width;\n this.height = height;\n\n while (no_eof && p < buf.length) {\n switch (buf[p++]) {\n case 0x21: // Graphics Control Extension Block\n switch (buf[p++]) {\n case 0xff: // Application specific block\n // Try if it's a Netscape block (with animation loop counter).\n if (\n buf[p] !== 0x0b || // 21 FF already read, check block size.\n // NETSCAPE2.0\n (buf[p + 1] == 0x4e &&\n buf[p + 2] == 0x45 &&\n buf[p + 3] == 0x54 &&\n buf[p + 4] == 0x53 &&\n buf[p + 5] == 0x43 &&\n buf[p + 6] == 0x41 &&\n buf[p + 7] == 0x50 &&\n buf[p + 8] == 0x45 &&\n buf[p + 9] == 0x32 &&\n buf[p + 10] == 0x2e &&\n buf[p + 11] == 0x30 &&\n // Sub-block\n buf[p + 12] == 0x03 &&\n buf[p + 13] == 0x01 &&\n buf[p + 16] == 0)\n ) {\n p += 14;\n loop_count = buf[p++] | (buf[p++] << 8);\n p++; // Skip terminator.\n } else {\n // We don't know what it is, just try to get past it.\n p += 12;\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n }\n break;\n\n case 0xf9: // Graphics Control Extension\n if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n var pf1 = buf[p++];\n delay = buf[p++] | (buf[p++] << 8);\n transparent_index = buf[p++];\n if ((pf1 & 1) === 0) transparent_index = null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // Skip terminator.\n break;\n\n case 0xfe: // Comment Extension.\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n // console.log(buf.slice(p, p+block_size).toString('ascii'));\n p += block_size;\n }\n break;\n\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n );\n }\n break;\n\n case 0x2c: // Image Descriptor.\n var x = buf[p++] | (buf[p++] << 8);\n var y = buf[p++] | (buf[p++] << 8);\n var w = buf[p++] | (buf[p++] << 8);\n var h = buf[p++] | (buf[p++] << 8);\n var pf2 = buf[p++];\n var local_palette_flag = pf2 >> 7;\n var interlace_flag = (pf2 >> 6) & 1;\n var num_local_colors_pow2 = pf2 & 0x7;\n var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n var palette_offset = global_palette_offset;\n var palette_size = global_palette_size;\n var has_local_palette = false;\n if (local_palette_flag) {\n var has_local_palette = true;\n palette_offset = p; // Override with local palette.\n palette_size = num_local_colors;\n p += num_local_colors * 3; // Seek past palette.\n }\n\n var data_offset = p;\n\n p++; // codesize\n while (true) {\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n\n frames.push({\n x: x,\n y: y,\n width: w,\n height: h,\n has_local_palette: has_local_palette,\n palette_offset: palette_offset,\n palette_size: palette_size,\n data_offset: data_offset,\n data_length: p - data_offset,\n transparent_index: transparent_index,\n interlaced: !!interlace_flag,\n delay: delay,\n disposal: disposal\n });\n break;\n\n case 0x3b: // Trailer Marker (end of file).\n no_eof = false;\n break;\n\n default:\n throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n break;\n }\n }\n\n this.numFrames = function() {\n return frames.length;\n };\n\n this.loopCount = function() {\n return loop_count;\n };\n\n this.frameInfo = function(frame_num) {\n if (frame_num < 0 || frame_num >= frames.length)\n throw new Error(\"Frame index out of range.\");\n return frames[frame_num];\n };\n\n this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = b;\n pixels[op++] = g;\n pixels[op++] = r;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n\n // I will go to copy and paste hell one day...\n this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = r;\n pixels[op++] = g;\n pixels[op++] = b;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n var min_code_size = code_stream[p++];\n\n var clear_code = 1 << min_code_size;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n // NOTE: This shares the same name as the encoder, but has a different\n // meaning here. Here this masks each code coming from the code stream.\n var code_mask = (1 << cur_code_size) - 1;\n var cur_shift = 0;\n var cur = 0;\n\n var op = 0; // Output pointer.\n\n var subblock_size = code_stream[p++];\n\n // TODO(deanm): Would using a TypedArray be any faster? At least it would\n // solve the fast mode / backing store uncertainty.\n // var code_table = Array(4096);\n var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n var prev_code = null; // Track code-1.\n\n while (true) {\n // Read up to two bytes, making sure we always 12-bits for max sized code.\n while (cur_shift < 16) {\n if (subblock_size === 0) break; // No more data to be read.\n\n cur |= code_stream[p++] << cur_shift;\n cur_shift += 8;\n\n if (subblock_size === 1) {\n // Never let it get to 0 to hold logic above.\n subblock_size = code_stream[p++]; // Next subblock.\n } else {\n --subblock_size;\n }\n }\n\n // TODO(deanm): We should never really get here, we should have received\n // and EOI.\n if (cur_shift < cur_code_size) break;\n\n var code = cur & code_mask;\n cur >>= cur_code_size;\n cur_shift -= cur_code_size;\n\n // TODO(deanm): Maybe should check that the first code was a clear code,\n // at least this is what you're supposed to do. But actually our encoder\n // now doesn't emit a clear code first anyway.\n if (code === clear_code) {\n // We don't actually have to clear the table. This could be a good idea\n // for greater error checking, but we don't really do any anyway. We\n // will just track it with next_code and overwrite old entries.\n\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_mask = (1 << cur_code_size) - 1;\n\n // Don't update prev_code ?\n prev_code = null;\n continue;\n } else if (code === eoi_code) {\n break;\n }\n\n // We have a similar situation as the decoder, where we want to store\n // variable length entries (code table entries), but we want to do in a\n // faster manner than an array of arrays. The code below stores sort of a\n // linked list within the code table, and then \"chases\" through it to\n // construct the dictionary entries. When a new entry is created, just the\n // last byte is stored, and the rest (prefix) of the entry is only\n // referenced by its table entry. Then the code chases through the\n // prefixes until it reaches a single byte code. We have to chase twice,\n // first to compute the length, and then to actually copy the data to the\n // output (backwards, since we know the length). The alternative would be\n // storing something in an intermediate stack, but that doesn't make any\n // more sense. I implemented an approach where it also stored the length\n // in the code table, although it's a bit tricky because you run out of\n // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n // entries are generally not the long). Even when I created benchmarks for\n // very long table entries the complexity did not seem worth it.\n // The code table stores the prefix entry in 12 bits and then the suffix\n // byte in 8 bits, so each entry is 20 bits.\n\n var chase_code = code < next_code ? code : prev_code;\n\n // Chase what we will output, either {CODE} or {CODE-1}.\n var chase_length = 0;\n var chase = chase_code;\n while (chase > clear_code) {\n chase = code_table[chase] >> 8;\n ++chase_length;\n }\n\n var k = chase;\n\n var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n if (op_end > output_length) {\n console.log(\"Warning, gif stream longer than expected.\");\n return;\n }\n\n // Already have the first byte from the chase, might as well write it fast.\n output[op++] = k;\n\n op += chase_length;\n var b = op; // Track pointer, writing backwards.\n\n if (chase_code !== code)\n // The case of emitting {CODE-1} + k.\n output[op++] = k;\n\n chase = chase_code;\n while (chase_length--) {\n chase = code_table[chase];\n output[--b] = chase & 0xff; // Write backwards.\n chase >>= 8; // Pull down to the prefix code.\n }\n\n if (prev_code !== null && next_code < 4096) {\n code_table[next_code++] = (prev_code << 8) | k;\n // TODO(deanm): Figure out this clearing vs code growth logic better. I\n // have an feeling that it should just happen somewhere else, for now it\n // is awkward between when we grow past the max and then hit a clear code.\n // For now just check if we hit the max 12-bits (then a clear code should\n // follow, also of course encoded in 12-bits).\n if (next_code >= code_mask + 1 && cur_code_size < 12) {\n ++cur_code_size;\n code_mask = (code_mask << 1) | 1;\n }\n }\n\n prev_code = code;\n }\n\n if (op !== output_length) {\n console.log(\"Warning, gif stream shorter than expected.\");\n }\n\n return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n var ffloor = Math.floor;\n var YTable = new Array(64);\n var UVTable = new Array(64);\n var fdtbl_Y = new Array(64);\n var fdtbl_UV = new Array(64);\n var YDC_HT;\n var UVDC_HT;\n var YAC_HT;\n var UVAC_HT;\n\n var bitcode = new Array(65535);\n var category = new Array(65535);\n var outputfDCTQuant = new Array(64);\n var DU = new Array(64);\n var byteout = [];\n var bytenew = 0;\n var bytepos = 7;\n\n var YDU = new Array(64);\n var UDU = new Array(64);\n var VDU = new Array(64);\n var clt = new Array(256);\n var RGB_YUV_TABLE = new Array(2048);\n var currentQuality;\n\n var ZigZag = [\n 0,\n 1,\n 5,\n 6,\n 14,\n 15,\n 27,\n 28,\n 2,\n 4,\n 7,\n 13,\n 16,\n 26,\n 29,\n 42,\n 3,\n 8,\n 12,\n 17,\n 25,\n 30,\n 41,\n 43,\n 9,\n 11,\n 18,\n 24,\n 31,\n 40,\n 44,\n 53,\n 10,\n 19,\n 23,\n 32,\n 39,\n 45,\n 52,\n 54,\n 20,\n 22,\n 33,\n 38,\n 46,\n 51,\n 55,\n 60,\n 21,\n 34,\n 37,\n 47,\n 50,\n 56,\n 59,\n 61,\n 35,\n 36,\n 48,\n 49,\n 57,\n 58,\n 62,\n 63\n ];\n\n var std_dc_luminance_nrcodes = [\n 0,\n 0,\n 1,\n 5,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_luminance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 3,\n 3,\n 2,\n 4,\n 3,\n 5,\n 5,\n 4,\n 4,\n 0,\n 0,\n 1,\n 0x7d\n ];\n var std_ac_luminance_values = [\n 0x01,\n 0x02,\n 0x03,\n 0x00,\n 0x04,\n 0x11,\n 0x05,\n 0x12,\n 0x21,\n 0x31,\n 0x41,\n 0x06,\n 0x13,\n 0x51,\n 0x61,\n 0x07,\n 0x22,\n 0x71,\n 0x14,\n 0x32,\n 0x81,\n 0x91,\n 0xa1,\n 0x08,\n 0x23,\n 0x42,\n 0xb1,\n 0xc1,\n 0x15,\n 0x52,\n 0xd1,\n 0xf0,\n 0x24,\n 0x33,\n 0x62,\n 0x72,\n 0x82,\n 0x09,\n 0x0a,\n 0x16,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x25,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x34,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe1,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf1,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n var std_dc_chrominance_nrcodes = [\n 0,\n 0,\n 3,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_chrominance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 2,\n 4,\n 4,\n 3,\n 4,\n 7,\n 5,\n 4,\n 4,\n 0,\n 1,\n 2,\n 0x77\n ];\n var std_ac_chrominance_values = [\n 0x00,\n 0x01,\n 0x02,\n 0x03,\n 0x11,\n 0x04,\n 0x05,\n 0x21,\n 0x31,\n 0x06,\n 0x12,\n 0x41,\n 0x51,\n 0x07,\n 0x61,\n 0x71,\n 0x13,\n 0x22,\n 0x32,\n 0x81,\n 0x08,\n 0x14,\n 0x42,\n 0x91,\n 0xa1,\n 0xb1,\n 0xc1,\n 0x09,\n 0x23,\n 0x33,\n 0x52,\n 0xf0,\n 0x15,\n 0x62,\n 0x72,\n 0xd1,\n 0x0a,\n 0x16,\n 0x24,\n 0x34,\n 0xe1,\n 0x25,\n 0xf1,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x82,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n function initQuantTables(sf) {\n var YQT = [\n 16,\n 11,\n 10,\n 16,\n 24,\n 40,\n 51,\n 61,\n 12,\n 12,\n 14,\n 19,\n 26,\n 58,\n 60,\n 55,\n 14,\n 13,\n 16,\n 24,\n 40,\n 57,\n 69,\n 56,\n 14,\n 17,\n 22,\n 29,\n 51,\n 87,\n 80,\n 62,\n 18,\n 22,\n 37,\n 56,\n 68,\n 109,\n 103,\n 77,\n 24,\n 35,\n 55,\n 64,\n 81,\n 104,\n 113,\n 92,\n 49,\n 64,\n 78,\n 87,\n 103,\n 121,\n 120,\n 101,\n 72,\n 92,\n 95,\n 98,\n 112,\n 100,\n 103,\n 99\n ];\n\n for (var i = 0; i < 64; i++) {\n var t = ffloor((YQT[i] * sf + 50) / 100);\n t = Math.min(Math.max(t, 1), 255);\n YTable[ZigZag[i]] = t;\n }\n var UVQT = [\n 17,\n 18,\n 24,\n 47,\n 99,\n 99,\n 99,\n 99,\n 18,\n 21,\n 26,\n 66,\n 99,\n 99,\n 99,\n 99,\n 24,\n 26,\n 56,\n 99,\n 99,\n 99,\n 99,\n 99,\n 47,\n 66,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99\n ];\n for (var j = 0; j < 64; j++) {\n var u = ffloor((UVQT[j] * sf + 50) / 100);\n u = Math.min(Math.max(u, 1), 255);\n UVTable[ZigZag[j]] = u;\n }\n var aasf = [\n 1.0,\n 1.387039845,\n 1.306562965,\n 1.175875602,\n 1.0,\n 0.785694958,\n 0.5411961,\n 0.275899379\n ];\n var k = 0;\n for (var row = 0; row < 8; row++) {\n for (var col = 0; col < 8; col++) {\n fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n k++;\n }\n }\n }\n\n function computeHuffmanTbl(nrcodes, std_table) {\n var codevalue = 0;\n var pos_in_table = 0;\n var HT = new Array();\n for (var k = 1; k <= 16; k++) {\n for (var j = 1; j <= nrcodes[k]; j++) {\n HT[std_table[pos_in_table]] = [];\n HT[std_table[pos_in_table]][0] = codevalue;\n HT[std_table[pos_in_table]][1] = k;\n pos_in_table++;\n codevalue++;\n }\n codevalue *= 2;\n }\n return HT;\n }\n\n function initHuffmanTbl() {\n YDC_HT = computeHuffmanTbl(\n std_dc_luminance_nrcodes,\n std_dc_luminance_values\n );\n UVDC_HT = computeHuffmanTbl(\n std_dc_chrominance_nrcodes,\n std_dc_chrominance_values\n );\n YAC_HT = computeHuffmanTbl(\n std_ac_luminance_nrcodes,\n std_ac_luminance_values\n );\n UVAC_HT = computeHuffmanTbl(\n std_ac_chrominance_nrcodes,\n std_ac_chrominance_values\n );\n }\n\n function initCategoryNumber() {\n var nrlower = 1;\n var nrupper = 2;\n for (var cat = 1; cat <= 15; cat++) {\n //Positive numbers\n for (var nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitcode[32767 + nr] = [];\n bitcode[32767 + nr][1] = cat;\n bitcode[32767 + nr][0] = nr;\n }\n //Negative numbers\n for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitcode[32767 + nrneg] = [];\n bitcode[32767 + nrneg][1] = cat;\n bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n function initRGBYUVTable() {\n for (var i = 0; i < 256; i++) {\n RGB_YUV_TABLE[i] = 19595 * i;\n RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n }\n }\n\n // IO functions\n function writeBits(bs) {\n var value = bs[0];\n var posval = bs[1] - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) {\n bytenew |= 1 << bytepos;\n }\n posval--;\n bytepos--;\n if (bytepos < 0) {\n if (bytenew == 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(bytenew);\n }\n bytepos = 7;\n bytenew = 0;\n }\n }\n }\n\n function writeByte(value) {\n //byteout.push(clt[value]); // write char directly instead of converting later\n byteout.push(value);\n }\n\n function writeWord(value) {\n writeByte((value >> 8) & 0xff);\n writeByte(value & 0xff);\n }\n\n // DCT & quantization core\n function fDCTQuant(data, fdtbl) {\n var d0, d1, d2, d3, d4, d5, d6, d7;\n /* Pass 1: process rows. */\n var dataOff = 0;\n var i;\n var I8 = 8;\n var I64 = 64;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 1];\n d2 = data[dataOff + 2];\n d3 = data[dataOff + 3];\n d4 = data[dataOff + 4];\n d5 = data[dataOff + 5];\n d6 = data[dataOff + 6];\n d7 = data[dataOff + 7];\n\n var tmp0 = d0 + d7;\n var tmp7 = d0 - d7;\n var tmp1 = d1 + d6;\n var tmp6 = d1 - d6;\n var tmp2 = d2 + d5;\n var tmp5 = d2 - d5;\n var tmp3 = d3 + d4;\n var tmp4 = d3 - d4;\n\n /* Even part */\n var tmp10 = tmp0 + tmp3; /* phase 2 */\n var tmp13 = tmp0 - tmp3;\n var tmp11 = tmp1 + tmp2;\n var tmp12 = tmp1 - tmp2;\n\n data[dataOff] = tmp10 + tmp11; /* phase 3 */\n data[dataOff + 4] = tmp10 - tmp11;\n\n var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n data[dataOff + 6] = tmp13 - z1;\n\n /* Odd part */\n tmp10 = tmp4 + tmp5; /* phase 2 */\n tmp11 = tmp5 + tmp6;\n tmp12 = tmp6 + tmp7;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n var z3 = tmp11 * 0.707106781; /* c4 */\n\n var z11 = tmp7 + z3; /* phase 5 */\n var z13 = tmp7 - z3;\n\n data[dataOff + 5] = z13 + z2; /* phase 6 */\n data[dataOff + 3] = z13 - z2;\n data[dataOff + 1] = z11 + z4;\n data[dataOff + 7] = z11 - z4;\n\n dataOff += 8; /* advance pointer to next row */\n }\n\n /* Pass 2: process columns. */\n dataOff = 0;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 8];\n d2 = data[dataOff + 16];\n d3 = data[dataOff + 24];\n d4 = data[dataOff + 32];\n d5 = data[dataOff + 40];\n d6 = data[dataOff + 48];\n d7 = data[dataOff + 56];\n\n var tmp0p2 = d0 + d7;\n var tmp7p2 = d0 - d7;\n var tmp1p2 = d1 + d6;\n var tmp6p2 = d1 - d6;\n var tmp2p2 = d2 + d5;\n var tmp5p2 = d2 - d5;\n var tmp3p2 = d3 + d4;\n var tmp4p2 = d3 - d4;\n\n /* Even part */\n var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n var tmp13p2 = tmp0p2 - tmp3p2;\n var tmp11p2 = tmp1p2 + tmp2p2;\n var tmp12p2 = tmp1p2 - tmp2p2;\n\n data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n data[dataOff + 48] = tmp13p2 - z1p2;\n\n /* Odd part */\n tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n tmp11p2 = tmp5p2 + tmp6p2;\n tmp12p2 = tmp6p2 + tmp7p2;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n var z13p2 = tmp7p2 - z3p2;\n\n data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n data[dataOff + 24] = z13p2 - z2p2;\n data[dataOff + 8] = z11p2 + z4p2;\n data[dataOff + 56] = z11p2 - z4p2;\n\n dataOff++; /* advance pointer to next column */\n }\n\n // Quantize/descale the coefficients\n var fDCTQuant;\n for (i = 0; i < I64; ++i) {\n // Apply the quantization and scaling factor & Round to nearest integer\n fDCTQuant = data[i] * fdtbl[i];\n outputfDCTQuant[i] =\n fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n //outputfDCTQuant[i] = fround(fDCTQuant);\n }\n return outputfDCTQuant;\n }\n\n function writeAPP0() {\n writeWord(0xffe0); // marker\n writeWord(16); // length\n writeByte(0x4a); // J\n writeByte(0x46); // F\n writeByte(0x49); // I\n writeByte(0x46); // F\n writeByte(0); // = \"JFIF\",'\\0'\n writeByte(1); // versionhi\n writeByte(1); // versionlo\n writeByte(0); // xyunits\n writeWord(1); // xdensity\n writeWord(1); // ydensity\n writeByte(0); // thumbnwidth\n writeByte(0); // thumbnheight\n }\n\n function writeSOF0(width, height) {\n writeWord(0xffc0); // marker\n writeWord(17); // length, truecolor YUV JPG\n writeByte(8); // precision\n writeWord(height);\n writeWord(width);\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0x11); // HVY\n writeByte(0); // QTY\n writeByte(2); // IdU\n writeByte(0x11); // HVU\n writeByte(1); // QTU\n writeByte(3); // IdV\n writeByte(0x11); // HVV\n writeByte(1); // QTV\n }\n\n function writeDQT() {\n writeWord(0xffdb); // marker\n writeWord(132); // length\n writeByte(0);\n for (var i = 0; i < 64; i++) {\n writeByte(YTable[i]);\n }\n writeByte(1);\n for (var j = 0; j < 64; j++) {\n writeByte(UVTable[j]);\n }\n }\n\n function writeDHT() {\n writeWord(0xffc4); // marker\n writeWord(0x01a2); // length\n\n writeByte(0); // HTYDCinfo\n for (var i = 0; i < 16; i++) {\n writeByte(std_dc_luminance_nrcodes[i + 1]);\n }\n for (var j = 0; j <= 11; j++) {\n writeByte(std_dc_luminance_values[j]);\n }\n\n writeByte(0x10); // HTYACinfo\n for (var k = 0; k < 16; k++) {\n writeByte(std_ac_luminance_nrcodes[k + 1]);\n }\n for (var l = 0; l <= 161; l++) {\n writeByte(std_ac_luminance_values[l]);\n }\n\n writeByte(1); // HTUDCinfo\n for (var m = 0; m < 16; m++) {\n writeByte(std_dc_chrominance_nrcodes[m + 1]);\n }\n for (var n = 0; n <= 11; n++) {\n writeByte(std_dc_chrominance_values[n]);\n }\n\n writeByte(0x11); // HTUACinfo\n for (var o = 0; o < 16; o++) {\n writeByte(std_ac_chrominance_nrcodes[o + 1]);\n }\n for (var p = 0; p <= 161; p++) {\n writeByte(std_ac_chrominance_values[p]);\n }\n }\n\n function writeSOS() {\n writeWord(0xffda); // marker\n writeWord(12); // length\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0); // HTY\n writeByte(2); // IdU\n writeByte(0x11); // HTU\n writeByte(3); // IdV\n writeByte(0x11); // HTV\n writeByte(0); // Ss\n writeByte(0x3f); // Se\n writeByte(0); // Bf\n }\n\n function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n var EOB = HTAC[0x00];\n var M16zeroes = HTAC[0xf0];\n var pos;\n var I16 = 16;\n var I63 = 63;\n var I64 = 64;\n var DU_DCT = fDCTQuant(CDU, fdtbl);\n //ZigZag reorder\n for (var j = 0; j < I64; ++j) {\n DU[ZigZag[j]] = DU_DCT[j];\n }\n var Diff = DU[0] - DC;\n DC = DU[0];\n //Encode DC\n if (Diff == 0) {\n writeBits(HTDC[0]); // Diff might be 0\n } else {\n pos = 32767 + Diff;\n writeBits(HTDC[category[pos]]);\n writeBits(bitcode[pos]);\n }\n //Encode ACs\n var end0pos = 63; // was const... which is crazy\n while (end0pos > 0 && DU[end0pos] == 0) {\n end0pos--;\n }\n //end0pos = first element in reverse order !=0\n if (end0pos == 0) {\n writeBits(EOB);\n return DC;\n }\n var i = 1;\n var lng;\n while (i <= end0pos) {\n var startpos = i;\n while (DU[i] == 0 && i <= end0pos) {\n ++i;\n }\n var nrzeroes = i - startpos;\n if (nrzeroes >= I16) {\n lng = nrzeroes >> 4;\n for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n writeBits(M16zeroes);\n nrzeroes = nrzeroes & 0xf;\n }\n pos = 32767 + DU[i];\n writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n writeBits(bitcode[pos]);\n i++;\n }\n if (end0pos != I63) {\n writeBits(EOB);\n }\n return DC;\n }\n\n function initCharLookupTable() {\n var sfcc = String.fromCharCode;\n for (var i = 0; i < 256; i++) {\n ///// ACHTUNG // 255\n clt[i] = sfcc(i);\n }\n }\n\n this.encode = function(\n image,\n quality // image data object\n ) {\n if (quality) setQuality(quality);\n\n // Initialize bit writer\n byteout = new Array();\n bytenew = 0;\n bytepos = 7;\n\n // Add JPEG headers\n writeWord(0xffd8); // SOI\n writeAPP0();\n writeDQT();\n writeSOF0(image.width, image.height);\n writeDHT();\n writeSOS();\n\n // Encode 8x8 macroblocks\n var DCY = 0;\n var DCU = 0;\n var DCV = 0;\n\n bytenew = 0;\n bytepos = 7;\n\n this.encode.displayName = \"_encode_\";\n\n var imageData = image.data;\n var width = image.width;\n var height = image.height;\n\n var quadWidth = width * 4;\n\n var x,\n y = 0;\n var r, g, b;\n var start, p, col, row, pos;\n while (y < height) {\n x = 0;\n while (x < quadWidth) {\n start = quadWidth * y + x;\n col = -1;\n row = 0;\n\n for (pos = 0; pos < 64; pos++) {\n row = pos >> 3; // /8\n col = (pos & 7) * 4; // %8\n p = start + row * quadWidth + col;\n\n if (y + row >= height) {\n // padding bottom\n p -= quadWidth * (y + 1 + row - height);\n }\n\n if (x + col >= quadWidth) {\n // padding right\n p -= x + col - quadWidth + 4;\n }\n\n r = imageData[p++];\n g = imageData[p++];\n b = imageData[p++];\n\n /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n // use lookup table (slightly faster)\n YDU[pos] =\n ((RGB_YUV_TABLE[r] +\n RGB_YUV_TABLE[(g + 256) >> 0] +\n RGB_YUV_TABLE[(b + 512) >> 0]) >>\n 16) -\n 128;\n UDU[pos] =\n ((RGB_YUV_TABLE[(r + 768) >> 0] +\n RGB_YUV_TABLE[(g + 1024) >> 0] +\n RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n 16) -\n 128;\n VDU[pos] =\n ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n RGB_YUV_TABLE[(g + 1536) >> 0] +\n RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n 16) -\n 128;\n }\n\n DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n x += 32;\n }\n y += 8;\n }\n\n ////////////////////////////////////////////////////////////////\n\n // Do the bit alignment of the EOI marker\n if (bytepos >= 0) {\n var fillbits = [];\n fillbits[1] = bytepos + 1;\n fillbits[0] = (1 << (bytepos + 1)) - 1;\n writeBits(fillbits);\n }\n\n writeWord(0xffd9); //EOI\n\n return new Uint8Array(byteout);\n };\n\n function setQuality(quality) {\n quality = Math.min(Math.max(quality, 1), 100);\n\n if (currentQuality == quality) return; // don't recalc if unchanged\n\n var sf =\n quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n initQuantTables(sf);\n currentQuality = quality;\n //console.log('Quality set to: '+quality +'%');\n }\n\n function init() {\n quality = quality || 50;\n // Create tables\n initCharLookupTable();\n initHuffmanTbl();\n initCategoryNumber();\n initRGBYUVTable();\n\n setQuality(quality);\n }\n init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n var reader = new GifReader(imageData);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = [];\n\n reader.decodeAndBlitFrameRGBA(0, pixels);\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n\n jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n this.pos = 0;\n this.buffer = buffer;\n this.datav = new DataView(buffer.buffer);\n this.is_with_alpha = !!is_with_alpha;\n this.bottom_up = true;\n this.flag =\n String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n this.pos += 2;\n if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n throw new Error(\"Invalid BMP File\");\n this.parseHeader();\n this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n this.fileSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.reserved = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.offset = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.headerSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.width = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.height = this.datav.getInt32(this.pos, true);\n this.pos += 4;\n this.planes = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.bitPP = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.compress = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.rawSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.hr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.vr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.colors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.importantColors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n\n if (this.bitPP === 16 && this.is_with_alpha) {\n this.bitPP = 15;\n }\n if (this.bitPP < 15) {\n var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n this.palette = new Array(len);\n for (var i = 0; i < len; i++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var quad = this.datav.getUint8(this.pos++, true);\n this.palette[i] = {\n red: red,\n green: green,\n blue: blue,\n quad: quad\n };\n }\n }\n if (this.height < 0) {\n this.height *= -1;\n this.bottom_up = false;\n }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n this.pos = this.offset;\n try {\n var bitn = \"bit\" + this.bitPP;\n var len = this.width * this.height * 4;\n this.data = new Uint8Array(len);\n\n this[bitn]();\n } catch (e) {\n console.log(\"bit decode error:\" + e);\n }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n var xlen = Math.ceil(this.width / 8);\n var mode = xlen % 4;\n var y;\n for (y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 8 * 4;\n for (var i = 0; i < 8; i++) {\n if (x * 8 + i < this.width) {\n var rgb = this.palette[(b >> (7 - i)) & 0x1];\n this.data[location + i * 4] = rgb.blue;\n this.data[location + i * 4 + 1] = rgb.green;\n this.data[location + i * 4 + 2] = rgb.red;\n this.data[location + i * 4 + 3] = 0xff;\n } else {\n break;\n }\n }\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n var xlen = Math.ceil(this.width / 2);\n var mode = xlen % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 2 * 4;\n\n var before = b >> 4;\n var after = b & 0x0f;\n\n var rgb = this.palette[before];\n this.data[location] = rgb.blue;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.red;\n this.data[location + 3] = 0xff;\n\n if (x * 2 + 1 >= this.width) break;\n\n rgb = this.palette[after];\n this.data[location + 4] = rgb.blue;\n this.data[location + 4 + 1] = rgb.green;\n this.data[location + 4 + 2] = rgb.red;\n this.data[location + 4 + 3] = 0xff;\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n var mode = this.width % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n if (b < this.palette.length) {\n var rgb = this.palette[b];\n this.data[location] = rgb.red;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.blue;\n this.data[location + 3] = 0xff;\n } else {\n this.data[location] = 0xff;\n this.data[location + 1] = 0xff;\n this.data[location + 2] = 0xff;\n this.data[location + 3] = 0xff;\n }\n }\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n var alpha = B >> 15 ? 0xff : 0x00;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n var _111111 = parseInt(\"111111\", 2),\n _1_6 = _111111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var alpha = 0xff;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n var red = (((B >> 11) / _1_5) * 255) | 0;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = 0xff;\n }\n //skip extra bytes\n this.pos += this.width % 4;\n }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var alpha = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n //this.pos += (this.width % 4);\n }\n};\n\nBmpDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { BmpDecoder };\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n var reader = new BmpDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","function WebPDecoder(imageData) {\n /** @license\n * Copyright 2011 Google Inc.\n *\n * This code is licensed under the same terms as WebM:\n * Software License Agreement: http://www.webmproject.org/license/software/\n * Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n * -----------------------------------------------------------------------------\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -----------------------------------------------------------------------------\n *\n * Copyright 2011-2017 Dominik Homberger\n * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n *\n * Author: Dominik Homberger (dominik.homberger@gmail.com)\n */\n\n var self = this;\n var UpsampleRgbLinePair,\n UpsampleBgrLinePair,\n UpsampleRgbaLinePair,\n UpsampleBgraLinePair,\n UpsampleArgbLinePair,\n UpsampleArgbLinePair,\n UpsampleRgba4444LinePair,\n UpsampleRgb565LinePair;\n\n function x(F) {\n if (!F) throw Error(\"assert :P\");\n }\n function fa(F, L, J) {\n for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n return !1;\n }\n function I(F, L, J, H, Z) {\n for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n }\n function M(F, L, J, H) {\n for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n }\n function V(F) {\n return new Int32Array(F);\n }\n function wa(F, L) {\n for (var J = [], H = 0; H < F; H++) J.push(new L());\n return J;\n }\n function wb() {\n function F(J, H, Z) {\n for (var O = Z[H], L = 0; L < O; L++) {\n J.push(Z.length > H + 1 ? [] : 0);\n if (Z.length < H + 1) break;\n F(J[L], H + 1, Z);\n }\n }\n var L = [];\n F(L, 0, [3, 11]);\n return L;\n }\n function Ed(F, L) {\n function J(H, O, F) {\n for (var Z = F[O], ma = 0; ma < Z; ma++) {\n H.push(F.length > O + 1 ? [] : new L());\n if (F.length < O + 1) break;\n J(H[ma], O + 1, F);\n }\n }\n var H = [];\n J(H, 0, F);\n return H;\n }\n var _WebPDecoder = function() {\n var self = this;\n function F() {\n V(55);\n }\n function L(a, b) {\n for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n return c ? (a & (c - 1)) + c : a;\n }\n function J(a, b, c, d, e) {\n x(!(d % c));\n do (d -= c), (a[b + d] = e);\n while (0 < d);\n }\n function H(a, b, c, d, e, f) {\n var g = b,\n h = 1 << c,\n k,\n l,\n m = V(16),\n n = V(16);\n x(0 != e);\n x(null != d);\n x(null != a);\n x(0 < c);\n for (l = 0; l < e; ++l) {\n if (15 < d[l]) return 0;\n ++m[d[l]];\n }\n if (m[0] == e) return 0;\n n[1] = 0;\n for (k = 1; 15 > k; ++k) {\n if (m[k] > 1 << k) return 0;\n n[k + 1] = n[k] + m[k];\n }\n for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n if (1 == n[15])\n return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n var r = -1,\n q = h - 1,\n t = 0,\n v = 1,\n p = 1,\n u,\n w = 1 << c;\n l = 0;\n k = 1;\n for (e = 2; k <= c; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k])\n (d = new O()),\n (d.g = k),\n (d.value = f[l++]),\n J(a, g + t, e, w, d),\n (t = L(t, k));\n }\n k = c + 1;\n for (e = 2; 15 >= k; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k]) {\n d = new O();\n if ((t & q) != r) {\n g += w;\n r = k;\n for (u = 1 << (r - c); 15 > r; ) {\n u -= m[r];\n if (0 >= u) break;\n ++r;\n u <<= 1;\n }\n u = r - c;\n w = 1 << u;\n h += w;\n r = t & q;\n a[b + r].g = u + c;\n a[b + r].value = g - b - r;\n }\n d.g = k - c;\n d.value = f[l++];\n J(a, g + (t >> c), e, w, d);\n t = L(t, k);\n }\n }\n return v != 2 * n[15] - 1 ? 0 : h;\n }\n function Z(a, b, c, d, e) {\n x(2328 >= e);\n if (512 >= e) var f = V(512);\n else if (((f = V(e)), null == f)) return 0;\n return H(a, b, c, d, e, f);\n }\n function O() {\n this.value = this.g = 0;\n }\n function Fd() {\n this.value = this.g = 0;\n }\n function Ub() {\n this.G = wa(5, O);\n this.H = V(5);\n this.jc = this.Qb = this.qb = this.nd = 0;\n this.pd = wa(xb, Fd);\n }\n function ma(a, b, c, d) {\n x(null != a);\n x(null != b);\n x(2147483648 > d);\n a.Ca = 254;\n a.I = 0;\n a.b = -8;\n a.Ka = 0;\n a.oa = b;\n a.pa = c;\n a.Jd = b;\n a.Yc = c + d;\n a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n Qa(a);\n }\n function na(a, b) {\n for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n return c;\n }\n function ca(a, b) {\n var c = na(a, b);\n return G(a) ? -c : c;\n }\n function cb(a, b, c, d) {\n var e,\n f = 0;\n x(null != a);\n x(null != b);\n x(4294967288 > d);\n a.Sb = d;\n a.Ra = 0;\n a.u = 0;\n a.h = 0;\n 4 < d && (d = 4);\n for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n a.Ra = f;\n a.bb = d;\n a.oa = b;\n a.pa = c;\n }\n function Vb(a) {\n for (; 8 <= a.u && a.bb < a.Sb; )\n (a.Ra >>>= 8),\n (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n ++a.bb,\n (a.u -= 8);\n db(a) && ((a.h = 1), (a.u = 0));\n }\n function D(a, b) {\n x(0 <= b);\n if (!a.h && b <= Gd) {\n var c = pb(a) & Hd[b];\n a.u += b;\n Vb(a);\n return c;\n }\n a.h = 1;\n return (a.u = 0);\n }\n function Wb() {\n this.b = this.Ca = this.I = 0;\n this.oa = [];\n this.pa = 0;\n this.Jd = [];\n this.Yc = 0;\n this.Zc = [];\n this.Ka = 0;\n }\n function Ra() {\n this.Ra = 0;\n this.oa = [];\n this.h = this.u = this.bb = this.Sb = this.pa = 0;\n }\n function pb(a) {\n return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n }\n function db(a) {\n x(a.bb <= a.Sb);\n return a.h || (a.bb == a.Sb && a.u > ob);\n }\n function qb(a, b) {\n a.u = b;\n a.h = db(a);\n }\n function Sa(a) {\n a.u >= Xb && (x(a.u >= Xb), Vb(a));\n }\n function Qa(a) {\n x(null != a && null != a.oa);\n a.pa < a.Zc\n ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n : (x(null != a && null != a.oa),\n a.pa < a.Yc\n ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n : a.Ka\n ? (a.b = 0)\n : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n }\n function G(a) {\n return na(a, 1);\n }\n function K(a, b) {\n var c = a.Ca;\n 0 > a.b && Qa(a);\n var d = a.b,\n e = (c * b) >>> 8,\n f = (a.I >>> d > e) + 0;\n f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n d = c;\n for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n d = 7 ^ (e + Id[d]);\n a.b -= d;\n a.Ca = (c << d) - 1;\n return f;\n }\n function ra(a, b, c) {\n a[b + 0] = (c >> 24) & 255;\n a[b + 1] = (c >> 16) & 255;\n a[b + 2] = (c >> 8) & 255;\n a[b + 3] = (c >> 0) & 255;\n }\n function Ta(a, b) {\n return (a[b + 0] << 0) | (a[b + 1] << 8);\n }\n function Yb(a, b) {\n return Ta(a, b) | (a[b + 2] << 16);\n }\n function Ha(a, b) {\n return Ta(a, b) | (Ta(a, b + 2) << 16);\n }\n function Zb(a, b) {\n var c = 1 << b;\n x(null != a);\n x(0 < b);\n a.X = V(c);\n if (null == a.X) return 0;\n a.Mb = 32 - b;\n a.Xa = b;\n return 1;\n }\n function $b(a, b) {\n x(null != a);\n x(null != b);\n x(a.Xa == b.Xa);\n I(b.X, 0, a.X, 0, 1 << b.Xa);\n }\n function ac() {\n this.X = [];\n this.Xa = this.Mb = 0;\n }\n function bc(a, b, c, d) {\n x(null != c);\n x(null != d);\n var e = c[0],\n f = d[0];\n 0 == e && (e = (a * f + b / 2) / b);\n 0 == f && (f = (b * e + a / 2) / a);\n if (0 >= e || 0 >= f) return 0;\n c[0] = e;\n d[0] = f;\n return 1;\n }\n function xa(a, b) {\n return (a + (1 << b) - 1) >>> b;\n }\n function yb(a, b) {\n return (\n (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n 0\n );\n }\n function X(a, b) {\n self[b] = function(b, d, e, f, g, h, k) {\n var c;\n for (c = 0; c < g; ++c) {\n var m = self[a](h[k + c - 1], e, f + c);\n h[k + c] = yb(b[d + c], m);\n }\n };\n }\n function Jd() {\n this.ud = this.hd = this.jd = 0;\n }\n function aa(a, b) {\n return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n }\n function sa(a) {\n if (0 <= a && 256 > a) return a;\n if (0 > a) return 0;\n if (255 < a) return 255;\n }\n function eb(a, b) {\n return sa(a + ((a - b + 0.5) >> 1));\n }\n function Ia(a, b, c) {\n return Math.abs(b - c) - Math.abs(a - c);\n }\n function cc(a, b, c, d, e, f, g) {\n d = f[g - 1];\n for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n }\n function Kd(a, b, c, d, e) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + f],\n h = (g >> 8) & 255,\n k = g & 16711935,\n k = k + ((h << 16) + h),\n k = k & 16711935;\n d[e + f] = ((g & 4278255360) + k) >>> 0;\n }\n }\n function dc(a, b) {\n b.jd = (a >> 0) & 255;\n b.hd = (a >> 8) & 255;\n b.ud = (a >> 16) & 255;\n }\n function Ld(a, b, c, d, e, f) {\n var g;\n for (g = 0; g < d; ++g) {\n var h = b[c + g],\n k = h >>> 8,\n l = h >>> 16,\n m = h,\n l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n l = l & 255,\n m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n m = m & 255;\n e[f + g] = (h & 4278255360) + (l << 16) + m;\n }\n }\n function ec(a, b, c, d, e) {\n self[b] = function(a, b, c, k, l, m, n, r, q) {\n for (k = n; k < r; ++k)\n for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n };\n self[a] = function(a, b, h, k, l, m, n) {\n var f = 8 >> a.b,\n g = a.Ea,\n t = a.K[0],\n v = a.w;\n if (8 > f)\n for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n var p = 0,\n u;\n for (u = 0; u < g; ++u)\n u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n }\n else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n };\n }\n function Md(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n }\n }\n function Nd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 24) & 255;\n }\n }\n function Od(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 240) | ((f >> 12) & 15),\n f = ((f >> 0) & 240) | ((f >> 28) & 15);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Pd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 248) | ((f >> 13) & 7),\n f = ((f >> 5) & 224) | ((f >> 3) & 31);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Qd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 16) & 255;\n }\n }\n function fb(a, b, c, d, e, f) {\n if (0 == f)\n for (c = b + c; b < c; )\n (f = a[b++]),\n ra(\n d,\n ((f[0] >> 24) |\n ((f[1] >> 8) & 65280) |\n ((f[2] << 8) & 16711680) |\n (f[3] << 24)) >>>\n 0\n ),\n (e += 32);\n else I(d, e, a, b, c);\n }\n function gb(a, b) {\n self[b][0] = self[a + \"0\"];\n self[b][1] = self[a + \"1\"];\n self[b][2] = self[a + \"2\"];\n self[b][3] = self[a + \"3\"];\n self[b][4] = self[a + \"4\"];\n self[b][5] = self[a + \"5\"];\n self[b][6] = self[a + \"6\"];\n self[b][7] = self[a + \"7\"];\n self[b][8] = self[a + \"8\"];\n self[b][9] = self[a + \"9\"];\n self[b][10] = self[a + \"10\"];\n self[b][11] = self[a + \"11\"];\n self[b][12] = self[a + \"12\"];\n self[b][13] = self[a + \"13\"];\n self[b][14] = self[a + \"0\"];\n self[b][15] = self[a + \"0\"];\n }\n function hb(a) {\n return a == zb || a == Ab || a == Ja || a == Bb;\n }\n function Rd() {\n this.eb = [];\n this.size = this.A = this.fb = 0;\n }\n function Sd() {\n this.y = [];\n this.f = [];\n this.ea = [];\n this.F = [];\n this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n }\n function Cb() {\n this.Rd = this.height = this.width = this.S = 0;\n this.f = {};\n this.f.RGBA = new Rd();\n this.f.kb = new Sd();\n this.sd = null;\n }\n function Td() {\n this.width = [0];\n this.height = [0];\n this.Pd = [0];\n this.Qd = [0];\n this.format = [0];\n }\n function Ud() {\n this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n }\n function Vd(a) {\n alert(\"todo:WebPSamplerProcessPlane\");\n return a.T;\n }\n function Wd(a, b) {\n var c = a.T,\n d = b.ba.f.RGBA,\n e = d.eb,\n f = d.fb + a.ka * d.A,\n g = P[b.ba.S],\n h = a.y,\n k = a.O,\n l = a.f,\n m = a.N,\n n = a.ea,\n r = a.W,\n q = b.cc,\n t = b.dc,\n v = b.Mc,\n p = b.Nc,\n u = a.ka,\n w = a.ka + a.T,\n y = a.U,\n A = (y + 1) >> 1;\n 0 == u\n ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n ++c);\n for (; u + 2 < w; u += 2)\n (q = l),\n (t = m),\n (v = n),\n (p = r),\n (m += a.Rc),\n (r += a.Rc),\n (f += 2 * d.A),\n (k += 2 * a.fa),\n g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n k += a.fa;\n a.j + w < a.o\n ? (I(b.ec, b.fc, h, k, y),\n I(b.cc, b.dc, l, m, A),\n I(b.Mc, b.Nc, n, r, A),\n c--)\n : w & 1 ||\n g(\n h,\n k,\n null,\n null,\n l,\n m,\n n,\n r,\n l,\n m,\n n,\n r,\n e,\n f + d.A,\n null,\n null,\n y\n );\n return c;\n }\n function Xd(a, b, c) {\n var d = a.F,\n e = [a.J];\n if (null != d) {\n var f = a.U,\n g = b.ba.S,\n h = g == ya || g == Ja;\n b = b.ba.f.RGBA;\n var k = [0],\n l = a.ka;\n k[0] = a.T;\n a.Kb &&\n (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n var m = b.eb,\n l = b.fb + l * b.A;\n a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n x(c == k);\n a && hb(g) && za(m, l, h, f, k, b.A);\n }\n return 0;\n }\n function gc(a) {\n var b = a.ma,\n c = b.ba.S,\n d = 11 > c,\n e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n b.memory = null;\n b.Ib = null;\n b.Jb = null;\n b.Nd = null;\n if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n e && hb(c) && ic();\n if (a.da) alert(\"todo:use_scaling\");\n else {\n if (d) {\n if (((b.Ib = Vd), a.Kb)) {\n c = (a.U + 1) >> 1;\n b.memory = V(a.U + 2 * c);\n if (null == b.memory) return 0;\n b.ec = b.memory;\n b.fc = 0;\n b.cc = b.ec;\n b.dc = b.fc + a.U;\n b.Mc = b.cc;\n b.Nc = b.dc + c;\n b.Ib = Wd;\n ic();\n }\n } else alert(\"todo:EmitYUV\");\n e && ((b.Jb = Xd), d && Aa());\n }\n if (d && !jc) {\n for (a = 0; 256 > a; ++a)\n (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n (Zd[a] = -22014 * (a - 128) + Ba),\n ($d[a] = -45773 * (a - 128)),\n (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n for (a = ta; a < Eb; ++a)\n (b = (76283 * (a - 16) + Ba) >> Wa),\n (be[a - ta] = ga(b, 255)),\n (ce[a - ta] = ga((b + 8) >> 4, 15));\n jc = 1;\n }\n return 1;\n }\n function kc(a) {\n var b = a.ma,\n c = a.U,\n d = a.T;\n x(!(a.ka & 1));\n if (0 >= c || 0 >= d) return 0;\n c = b.Ib(a, b);\n null != b.Jb && b.Jb(a, b, c);\n b.Dc += c;\n return 1;\n }\n function lc(a) {\n a.ma.memory = null;\n }\n function mc(a, b, c, d) {\n if (47 != D(a, 8)) return 0;\n b[0] = D(a, 14) + 1;\n c[0] = D(a, 14) + 1;\n d[0] = D(a, 1);\n return 0 != D(a, 3) ? 0 : !a.h;\n }\n function ib(a, b) {\n if (4 > a) return a + 1;\n var c = (a - 2) >> 1;\n return ((2 + (a & 1)) << c) + D(b, c) + 1;\n }\n function nc(a, b) {\n if (120 < b) return b - 120;\n var c = de[b - 1],\n c = (c >> 4) * a + (8 - (c & 15));\n return 1 <= c ? c : 1;\n }\n function ua(a, b, c) {\n var d = pb(c);\n b += d & 255;\n var e = a[b].g - 8;\n 0 < e &&\n (qb(c, c.u + 8),\n (d = pb(c)),\n (b += a[b].value),\n (b += d & ((1 << e) - 1)));\n qb(c, c.u + a[b].g);\n return a[b].value;\n }\n function ub(a, b, c) {\n c.g += a.g;\n c.value += (a.value << b) >>> 0;\n x(8 >= c.g);\n return a.g;\n }\n function ha(a, b, c) {\n var d = a.xc;\n b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n x(b < a.Wb);\n return a.Ya[b];\n }\n function oc(a, b, c, d) {\n var e = a.ab,\n f = a.c * b,\n g = a.C;\n b = g + b;\n var h = c,\n k = d;\n d = a.Ta;\n for (c = a.Ua; 0 < e--; ) {\n var l = a.gc[e],\n m = g,\n n = b,\n r = h,\n q = k,\n k = d,\n h = c,\n t = l.Ea;\n x(m < n);\n x(n <= l.nc);\n switch (l.hc) {\n case 2:\n pc(r, q, (n - m) * t, k, h);\n break;\n case 0:\n var v = l,\n p = m,\n u = n,\n w = k,\n y = h,\n A = v.Ea;\n 0 == p &&\n (ee(r, q, null, null, 1, w, y),\n cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n (q += A),\n (y += A),\n ++p);\n for (\n var E = 1 << v.b,\n B = E - 1,\n C = xa(A, v.b),\n N = v.K,\n v = v.w + (p >> v.b) * C;\n p < u;\n\n ) {\n var z = N,\n Q = v,\n S = 1;\n for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n var K = qc[(z[Q++] >> 8) & 15],\n D = (S & ~B) + E;\n D > A && (D = A);\n K(r, q + +S, w, y + S - A, D - S, w, y + S);\n S = D;\n }\n q += A;\n y += A;\n ++p;\n p & B || (v += C);\n }\n n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n break;\n case 1:\n t = r;\n u = q;\n r = l.Ea;\n q = 1 << l.b;\n w = q - 1;\n y = r & ~w;\n A = r - y;\n p = xa(r, l.b);\n E = l.K;\n for (l = l.w + (m >> l.b) * p; m < n; ) {\n B = E;\n C = l;\n N = new Jd();\n v = u + y;\n for (z = u + r; u < v; )\n dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n u < z &&\n (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n ++m;\n m & w || (l += p);\n }\n break;\n case 3:\n if (r == k && q == h && 0 < l.b) {\n y = (n - m) * xa(l.Ea, l.b);\n t = h + (n - m) * t - y;\n u = k;\n r = t;\n q = k;\n w = h;\n A = y;\n p = [];\n for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n rc(l, m, n, k, t, k, h);\n } else rc(l, m, n, r, q, k, h);\n }\n h = d;\n k = c;\n }\n k != c && I(d, c, h, k, f);\n }\n function ge(a, b) {\n var c = a.V,\n d = a.Ba + a.c * a.C,\n e = b - a.C;\n x(b <= a.l.o);\n x(16 >= e);\n if (0 < e) {\n var f = a.l,\n g = a.Ta,\n h = a.Ua,\n k = f.width;\n oc(a, e, c, d);\n h = [h];\n c = a.C;\n d = b;\n e = h;\n x(c < d);\n x(f.v < f.va);\n d > f.o && (d = f.o);\n if (c < f.j) {\n var l = f.j - c,\n c = f.j;\n e[0] += l * k;\n }\n c >= d\n ? (c = 0)\n : ((e[0] += 4 * f.v),\n (f.ka = c - f.j),\n (f.U = f.va - f.v),\n (f.T = d - c),\n (c = 1));\n if (c) {\n h = h[0];\n c = a.ca;\n if (11 > c.S) {\n for (\n var m = c.f.RGBA,\n d = c.S,\n e = f.U,\n f = f.T,\n l = m.eb,\n n = m.A,\n r = f,\n m = m.fb + a.Ma * m.A;\n 0 < r--;\n\n ) {\n var q = g,\n t = h,\n v = e,\n p = l,\n u = m;\n switch (d) {\n case Ca:\n sc(q, t, v, p, u);\n break;\n case Ua:\n Gb(q, t, v, p, u);\n break;\n case zb:\n Gb(q, t, v, p, u);\n za(p, u, 0, v, 1, 0);\n break;\n case tc:\n uc(q, t, v, p, u);\n break;\n case Va:\n fb(q, t, v, p, u, 1);\n break;\n case Ab:\n fb(q, t, v, p, u, 1);\n za(p, u, 0, v, 1, 0);\n break;\n case ya:\n fb(q, t, v, p, u, 0);\n break;\n case Ja:\n fb(q, t, v, p, u, 0);\n za(p, u, 1, v, 1, 0);\n break;\n case Db:\n Hb(q, t, v, p, u);\n break;\n case Bb:\n Hb(q, t, v, p, u);\n vc(p, u, v, 1, 0);\n break;\n case wc:\n xc(q, t, v, p, u);\n break;\n default:\n x(0);\n }\n h += k;\n m += n;\n }\n a.Ma += f;\n } else alert(\"todo:EmitRescaledRowsYUVA\");\n x(a.Ma <= c.height);\n }\n }\n a.C = b;\n x(a.C <= a.i);\n }\n function yc(a) {\n var b;\n if (0 < a.ua) return 0;\n for (b = 0; b < a.Wb; ++b) {\n var c = a.Ya[b].G,\n d = a.Ya[b].H;\n if (\n 0 < c[1][d[1] + 0].g ||\n 0 < c[2][d[2] + 0].g ||\n 0 < c[3][d[3] + 0].g\n )\n return 0;\n }\n return 1;\n }\n function zc(a, b, c, d, e, f) {\n if (0 != a.Z) {\n var g = a.qd,\n h = a.rd;\n for (x(null != ia[a.Z]); b < c; ++b)\n ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n a.qd = g;\n a.rd = h;\n }\n }\n function Ib(a, b) {\n var c = a.l.ma,\n d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n d = a.C < d ? d : a.C;\n x(b <= a.l.o);\n if (b > d) {\n var e = a.l.width,\n f = c.ca,\n g = c.tb + e * d,\n h = a.V,\n k = a.Ba + a.c * d,\n l = a.gc;\n x(1 == a.ab);\n x(3 == l[0].hc);\n he(l[0], d, b, h, k, f, g);\n zc(c, d, b, f, g, e);\n }\n a.C = a.Ma = b;\n }\n function Jb(a, b, c, d, e, f, g) {\n var h = a.$ / d,\n k = a.$ % d,\n l = a.m,\n m = a.s,\n n = c + a.$,\n r = n;\n e = c + d * e;\n var q = c + d * f,\n t = 280 + m.ua,\n v = a.Pb ? h : 16777216,\n p = 0 < m.ua ? m.Wa : null,\n u = m.wc,\n w = n < q ? ha(m, k, h) : null;\n x(a.C < f);\n x(q <= e);\n var y = !1;\n a: for (;;) {\n for (; y || n < q; ) {\n var A = 0;\n if (h >= v) {\n var v = a,\n E = n - c;\n x(v.Pb);\n v.wd = v.m;\n v.xd = E;\n 0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n v = h + ie;\n }\n k & u || (w = ha(m, k, h));\n x(null != w);\n w.Qb && ((b[n] = w.qb), (y = !0));\n if (!y)\n if ((Sa(l), w.jc)) {\n var A = l,\n E = b,\n B = n,\n C = w.pd[pb(A) & (xb - 1)];\n x(w.jc);\n 256 > C.g\n ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n 0 == A && (y = !0);\n } else A = ua(w.G[0], w.H[0], l);\n if (l.h) break;\n if (y || 256 > A) {\n if (!y)\n if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n else {\n Sa(l);\n y = ua(w.G[1], w.H[1], l);\n Sa(l);\n E = ua(w.G[2], w.H[2], l);\n B = ua(w.G[3], w.H[3], l);\n if (l.h) break;\n b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n }\n y = !1;\n ++n;\n ++k;\n if (\n k >= d &&\n ((k = 0),\n ++h,\n null != g && h <= f && !(h % 16) && g(a, h),\n null != p)\n )\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (280 > A) {\n A = ib(A - 256, l);\n E = ua(w.G[4], w.H[4], l);\n Sa(l);\n E = ib(E, l);\n E = nc(d, E);\n if (l.h) break;\n if (n - c < E || e - n < A) break a;\n else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n n += A;\n for (k += A; k >= d; )\n (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n x(n <= e);\n k & u && (w = ha(m, k, h));\n if (null != p)\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (A < t) {\n y = A - 280;\n for (x(null != p); r < n; )\n (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n A = n;\n E = p;\n x(!(y >>> E.Xa));\n b[A] = E.X[y];\n y = !0;\n } else break a;\n y || x(l.h == db(l));\n }\n if (a.Pb && l.h && n < e)\n x(a.m.h),\n (a.a = 5),\n (a.m = a.wd),\n (a.$ = a.xd),\n 0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n else if (l.h) break a;\n else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n return 1;\n }\n a.a = 3;\n return 0;\n }\n function Ac(a) {\n x(null != a);\n a.vc = null;\n a.yc = null;\n a.Ya = null;\n var b = a.Wa;\n null != b && (b.X = null);\n a.vb = null;\n x(null != a);\n }\n function Bc() {\n var a = new je();\n if (null == a) return null;\n a.a = 0;\n a.xb = Cc;\n gb(\"Predictor\", \"VP8LPredictors\");\n gb(\"Predictor\", \"VP8LPredictors_C\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n pc = Kd;\n Fb = Ld;\n sc = Md;\n Gb = Nd;\n Hb = Od;\n xc = Pd;\n uc = Qd;\n self.VP8LMapColor32b = ke;\n self.VP8LMapColor8b = le;\n return a;\n }\n function rb(a, b, c, d, e) {\n var f = 1,\n g = [a],\n h = [b],\n k = d.m,\n l = d.s,\n m = null,\n n = 0;\n a: for (;;) {\n if (c)\n for (; f && D(k, 1); ) {\n var r = g,\n q = h,\n t = d,\n v = 1,\n p = t.m,\n u = t.gc[t.ab],\n w = D(p, 2);\n if (t.Oc & (1 << w)) f = 0;\n else {\n t.Oc |= 1 << w;\n u.hc = w;\n u.Ea = r[0];\n u.nc = q[0];\n u.K = [null];\n ++t.ab;\n x(4 >= t.ab);\n switch (w) {\n case 0:\n case 1:\n u.b = D(p, 3) + 2;\n v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n u.K = u.K[0];\n break;\n case 3:\n var y = D(p, 8) + 1,\n A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n r[0] = xa(u.Ea, A);\n u.b = A;\n var v = rb(y, 1, 0, t, u.K),\n E;\n if ((E = v)) {\n var B,\n C = y,\n N = u,\n z = 1 << (8 >> N.b),\n Q = V(z);\n if (null == Q) E = 0;\n else {\n var S = N.K[0],\n K = N.w;\n Q[0] = N.K[0][0];\n for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n for (; B < 4 * z; ++B) Q[B] = 0;\n N.K[0] = null;\n N.K[0] = Q;\n E = 1;\n }\n }\n v = E;\n break;\n case 2:\n break;\n default:\n x(0);\n }\n f = v;\n }\n }\n g = g[0];\n h = h[0];\n if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n d.a = 3;\n break a;\n }\n var H;\n if ((H = f))\n b: {\n var F = d,\n G = g,\n L = h,\n J = n,\n T = c,\n Da,\n ba,\n X = F.m,\n R = F.s,\n P = [null],\n U,\n W = 1,\n aa = 0,\n na = me[J];\n c: for (;;) {\n if (T && D(X, 1)) {\n var ca = D(X, 3) + 2,\n ga = xa(G, ca),\n ka = xa(L, ca),\n qa = ga * ka;\n if (!rb(ga, ka, 0, F, P)) break c;\n P = P[0];\n R.xc = ca;\n for (Da = 0; Da < qa; ++Da) {\n var ia = (P[Da] >> 8) & 65535;\n P[Da] = ia;\n ia >= W && (W = ia + 1);\n }\n }\n if (X.h) break c;\n for (ba = 0; 5 > ba; ++ba) {\n var Y = Dc[ba];\n !ba && 0 < J && (Y += 1 << J);\n aa < Y && (aa = Y);\n }\n var ma = wa(W * na, O);\n var ua = W,\n va = wa(ua, Ub);\n if (null == va) var la = null;\n else x(65536 >= ua), (la = va);\n var ha = V(aa);\n if (null == la || null == ha || null == ma) {\n F.a = 1;\n break c;\n }\n var pa = ma;\n for (Da = U = 0; Da < W; ++Da) {\n var ja = la[Da],\n da = ja.G,\n ea = ja.H,\n Fa = 0,\n ra = 1,\n Ha = 0;\n for (ba = 0; 5 > ba; ++ba) {\n Y = Dc[ba];\n da[ba] = pa;\n ea[ba] = U;\n !ba && 0 < J && (Y += 1 << J);\n d: {\n var sa,\n za = Y,\n ta = F,\n oa = ha,\n db = pa,\n eb = U,\n Ia = 0,\n Ka = ta.m,\n fb = D(Ka, 1);\n M(oa, 0, 0, za);\n if (fb) {\n var gb = D(Ka, 1) + 1,\n hb = D(Ka, 1),\n Ja = D(Ka, 0 == hb ? 1 : 8);\n oa[Ja] = 1;\n 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n var ya = 1;\n } else {\n var Ua = V(19),\n Va = D(Ka, 4) + 4;\n if (19 < Va) {\n ta.a = 3;\n var Aa = 0;\n break d;\n }\n for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n var Ba = void 0,\n sb = void 0,\n Wa = ta,\n ib = Ua,\n Ca = za,\n Xa = oa,\n Oa = 0,\n La = Wa.m,\n Ya = 8,\n Za = wa(128, O);\n e: for (;;) {\n if (!Z(Za, 0, 7, ib, 19)) break e;\n if (D(La, 1)) {\n var kb = 2 + 2 * D(La, 3),\n Ba = 2 + D(La, kb);\n if (Ba > Ca) break e;\n } else Ba = Ca;\n for (sb = 0; sb < Ca && Ba--; ) {\n Sa(La);\n var $a = Za[0 + (pb(La) & 127)];\n qb(La, La.u + $a.g);\n var jb = $a.value;\n if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n else {\n var lb = 16 == jb,\n ab = jb - 16,\n mb = oe[ab],\n bb = D(La, pe[ab]) + mb;\n if (sb + bb > Ca) break e;\n else\n for (var nb = lb ? Ya : 0; 0 < bb--; )\n Xa[sb++] = nb;\n }\n }\n Oa = 1;\n break e;\n }\n Oa || (Wa.a = 3);\n ya = Oa;\n }\n (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n }\n if (0 == Aa) break c;\n ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n Fa += pa[U].g;\n U += Aa;\n if (3 >= ba) {\n var Pa = ha[0],\n tb;\n for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n Ha += Pa;\n }\n }\n ja.nd = ra;\n ja.Qb = 0;\n ra &&\n ((ja.qb =\n ((da[3][ea[3] + 0].value << 24) |\n (da[1][ea[1] + 0].value << 16) |\n da[2][ea[2] + 0].value) >>>\n 0),\n 0 == Fa &&\n 256 > da[0][ea[0] + 0].value &&\n ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n ja.jc = !ja.Qb && 6 > Ha;\n if (ja.jc) {\n var Ga,\n Ea = ja;\n for (Ga = 0; Ga < xb; ++Ga) {\n var Ma = Ga,\n Na = Ea.pd[Ma],\n vb = Ea.G[0][Ea.H[0] + Ma];\n 256 <= vb.value\n ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n : ((Na.g = 0),\n (Na.value = 0),\n (Ma >>= ub(vb, 8, Na)),\n (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n }\n }\n }\n R.vc = P;\n R.Wb = W;\n R.Ya = la;\n R.yc = ma;\n H = 1;\n break b;\n }\n H = 0;\n }\n f = H;\n if (!f) {\n d.a = 3;\n break a;\n }\n if (0 < n) {\n if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n d.a = 1;\n f = 0;\n break a;\n }\n } else l.ua = 0;\n var Qa = d,\n cb = g,\n ob = h,\n Ra = Qa.s,\n Ta = Ra.xc;\n Qa.c = cb;\n Qa.i = ob;\n Ra.md = xa(cb, Ta);\n Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n if (c) {\n d.xb = re;\n break a;\n }\n m = V(g * h);\n if (null == m) {\n d.a = 1;\n f = 0;\n break a;\n }\n f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n break a;\n }\n f\n ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n : Ac(l);\n return f;\n }\n function Ec(a, b) {\n var c = a.c * a.i,\n d = c + b + 16 * b;\n x(a.c <= b);\n a.V = V(d);\n if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n a.Ta = a.V;\n a.Ua = a.Ba + c + b;\n return 1;\n }\n function se(a, b) {\n var c = a.C,\n d = b - c,\n e = a.V,\n f = a.Ba + a.c * c;\n for (x(b <= a.l.o); 0 < d; ) {\n var g = 16 < d ? 16 : d,\n h = a.l.ma,\n k = a.l.width,\n l = k * g,\n m = h.ca,\n n = h.tb + k * c,\n r = a.Ta,\n q = a.Ua;\n oc(a, g, e, f);\n Fc(r, q, m, n, l);\n zc(h, c, c + g, m, n, k);\n d -= g;\n e += g * a.c;\n c += g;\n }\n x(c == b);\n a.C = a.Ma = b;\n }\n function te(a, b) {\n var c = [0],\n d = [0],\n e = [0];\n a: for (;;) {\n if (null == a) return 0;\n if (null == b) return (a.a = 2), 0;\n a.l = b;\n a.a = 0;\n cb(a.m, b.data, b.w, b.ha);\n if (!mc(a.m, c, d, e)) {\n a.a = 3;\n break a;\n }\n a.xb = Cc;\n b.width = c[0];\n b.height = d[0];\n if (!rb(c[0], d[0], 1, a, null)) break a;\n return 1;\n }\n x(0 != a.a);\n return 0;\n }\n function ue() {\n this.ub = this.yd = this.td = this.Rb = 0;\n }\n function ve() {\n this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n }\n function we() {\n this.Fb = this.Bb = this.Cb = 0;\n this.Zb = V(4);\n this.Lb = V(4);\n }\n function Gc() {\n this.Yb = wb();\n }\n function xe() {\n this.jb = V(3);\n this.Wc = Ed([4, 8], Gc);\n this.Xc = Ed([4, 17], Gc);\n }\n function ye() {\n this.Pc = this.wb = this.Tb = this.zd = 0;\n this.vd = new V(4);\n this.od = new V(4);\n }\n function Xa() {\n this.ld = this.La = this.dd = this.tc = 0;\n }\n function Hc() {\n this.Na = this.la = 0;\n }\n function ze() {\n this.Sc = [0, 0];\n this.Eb = [0, 0];\n this.Qc = [0, 0];\n this.ia = this.lc = 0;\n }\n function Kb() {\n this.ad = V(384);\n this.Za = 0;\n this.Ob = V(16);\n this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n }\n function Ae() {\n this.uc = this.M = this.Nb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.ya = Array(new Kb());\n this.aa = 0;\n this.l = new Oa();\n }\n function Ic() {\n this.y = V(16);\n this.f = V(8);\n this.ea = V(8);\n }\n function Be() {\n this.cb = this.a = 0;\n this.sc = \"\";\n this.m = new Wb();\n this.Od = new ue();\n this.Kc = new ve();\n this.ed = new ye();\n this.Qa = new we();\n this.Ic = this.$c = this.Aa = 0;\n this.D = new Ae();\n this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n this.Jc = wa(8, Wb);\n this.ia = 0;\n new F();\n this.pb = wa(4, ze);\n this.Pa = new xe();\n this.Bd = this.kc = 0;\n this.Ac = [];\n this.Bc = 0;\n this.zc = [0, 0, 0, 0];\n this.Gd = Array(new Ic());\n this.Hd = 0;\n this.rb = Array(new Hc());\n this.sb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.oc = [];\n this.pc = 0;\n this.sa = [];\n this.ta = 0;\n this.qa = [];\n this.ra = 0;\n this.Ha = [];\n this.B = this.R = this.Ia = 0;\n this.Ec = [];\n this.M = this.ja = this.Vb = this.Fc = 0;\n this.ya = Array(new Kb());\n this.L = this.aa = 0;\n this.gd = Ed([4, 2], Xa);\n this.ga = null;\n this.Fa = [];\n this.Cc = this.qc = this.P = 0;\n this.Gb = [];\n this.Uc = 0;\n this.mb = [];\n this.nb = 0;\n this.rc = [];\n this.Ga = this.Vc = 0;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function Oa() {\n this.T = this.U = this.ka = this.height = this.width = 0;\n this.y = [];\n this.f = [];\n this.ea = [];\n this.Rc = this.fa = this.W = this.N = this.O = 0;\n this.ma = \"void\";\n this.put = \"VP8IoPutHook\";\n this.ac = \"VP8IoSetupHook\";\n this.bc = \"VP8IoTeardownHook\";\n this.ha = this.Kb = 0;\n this.data = [];\n this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n this.F = [];\n this.J = 0;\n }\n function Ce() {\n var a = new Be();\n null != a &&\n ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n return a;\n }\n function T(a, b, c) {\n 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n return 0;\n }\n function Jc(a, b, c) {\n return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n }\n function Kc(a, b) {\n if (null == a) return 0;\n a.a = 0;\n a.sc = \"OK\";\n if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n var c = b.data;\n var d = b.w;\n var e = b.ha;\n if (4 > e) return T(a, 7, \"Truncated header.\");\n var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n var g = a.Od;\n g.Rb = !(f & 1);\n g.td = (f >> 1) & 7;\n g.yd = (f >> 4) & 1;\n g.ub = f >> 5;\n if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n d += 3;\n e -= 3;\n var h = a.Kc;\n if (g.Rb) {\n if (7 > e) return T(a, 7, \"cannot parse picture header\");\n if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n h.Td = c[d + 4] >> 6;\n h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n h.Ud = c[d + 6] >> 6;\n d += 7;\n e -= 7;\n a.za = (h.c + 15) >> 4;\n a.Ub = (h.i + 15) >> 4;\n b.width = h.c;\n b.height = h.i;\n b.Da = 0;\n b.j = 0;\n b.v = 0;\n b.va = b.width;\n b.o = b.height;\n b.da = 0;\n b.ib = b.width;\n b.hb = b.height;\n b.U = b.width;\n b.T = b.height;\n f = a.Pa;\n M(f.jb, 0, 255, f.jb.length);\n f = a.Qa;\n x(null != f);\n f.Cb = 0;\n f.Bb = 0;\n f.Fb = 1;\n M(f.Zb, 0, 0, f.Zb.length);\n M(f.Lb, 0, 0, f.Lb);\n }\n if (g.ub > e) return T(a, 7, \"bad partition length\");\n f = a.m;\n ma(f, c, d, g.ub);\n d += g.ub;\n e -= g.ub;\n g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n h = a.Qa;\n var k = a.Pa,\n l;\n x(null != f);\n x(null != h);\n h.Cb = G(f);\n if (h.Cb) {\n h.Bb = G(f);\n if (G(f)) {\n h.Fb = G(f);\n for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n }\n if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n } else h.Bb = 0;\n if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n h = a.ed;\n h.zd = G(f);\n h.Tb = na(f, 6);\n h.wb = na(f, 3);\n h.Pc = G(f);\n if (h.Pc && G(f)) {\n for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n }\n a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n l = d;\n var m = e;\n e = l;\n d = l + m;\n h = m;\n a.Xb = (1 << na(a.m, 2)) - 1;\n k = a.Xb;\n if (m < 3 * k) c = 7;\n else {\n l += 3 * k;\n h -= 3 * k;\n for (m = 0; m < k; ++m) {\n var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n n > h && (n = h);\n ma(a.Jc[+m], c, l, n);\n l += n;\n h -= n;\n e += 3;\n }\n ma(a.Jc[+k], c, l, h);\n c = l < d ? 0 : 5;\n }\n if (0 != c) return T(a, c, \"cannot parse partitions\");\n l = a.m;\n c = na(l, 7);\n e = G(l) ? ca(l, 4) : 0;\n d = G(l) ? ca(l, 4) : 0;\n h = G(l) ? ca(l, 4) : 0;\n k = G(l) ? ca(l, 4) : 0;\n l = G(l) ? ca(l, 4) : 0;\n m = a.Qa;\n for (n = 0; 4 > n; ++n) {\n if (m.Cb) {\n var r = m.Zb[n];\n m.Fb || (r += c);\n } else if (0 < n) {\n a.pb[n] = a.pb[0];\n continue;\n } else r = c;\n var q = a.pb[n];\n q.Sc[0] = Lb[ga(r + e, 127)];\n q.Sc[1] = Mb[ga(r + 0, 127)];\n q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n 8 > q.Eb[1] && (q.Eb[1] = 8);\n q.Qc[0] = Lb[ga(r + k, 117)];\n q.Qc[1] = Mb[ga(r + l, 127)];\n q.lc = r + l;\n }\n if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n G(f);\n g = a.Pa;\n for (c = 0; 4 > c; ++c) {\n for (e = 0; 8 > e; ++e)\n for (d = 0; 3 > d; ++d)\n for (h = 0; 11 > h; ++h)\n (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n (g.Wc[c][e].Yb[d][h] = k);\n for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n }\n a.kc = G(f);\n a.kc && (a.Bd = na(f, 8));\n return (a.cb = 1);\n }\n function De(a, b, c, d, e, f, g) {\n var h = b[e].Yb[c];\n for (c = 0; 16 > e; ++e) {\n if (!K(a, h[c + 0])) return e;\n for (; !K(a, h[c + 1]); )\n if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n var k = b[e + 1].Yb;\n if (K(a, h[c + 2])) {\n var l = a,\n m = h,\n n = c;\n var r = 0;\n if (K(l, m[n + 3]))\n if (K(l, m[n + 6])) {\n h = 0;\n r = K(l, m[n + 8]);\n m = K(l, m[n + 9 + r]);\n n = 2 * r + m;\n r = 0;\n for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n r += 3 + (8 << n);\n } else\n K(l, m[n + 7])\n ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n : (r = 5 + K(l, 159));\n else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n h = k[2];\n } else (r = 1), (h = k[1]);\n k = g + Ie[e];\n l = a;\n 0 > l.b && Qa(l);\n var m = l.b,\n n = l.Ca >> 1,\n q = (n - (l.I >> m)) >> 31;\n --l.b;\n l.Ca += q;\n l.Ca |= 1;\n l.I -= ((n + 1) & q) << m;\n f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n }\n return 16;\n }\n function Lc(a) {\n var b = a.rb[a.sb - 1];\n b.la = 0;\n b.Na = 0;\n M(a.zc, 0, 0, a.zc.length);\n a.ja = 0;\n }\n function Je(a, b) {\n for (a.M = 0; a.M < a.Va; ++a.M) {\n var c = a.Jc[a.M & a.Xb],\n d = a.m,\n e = a,\n f;\n for (f = 0; f < e.za; ++f) {\n var g = d;\n var h = e;\n var k = h.Ac,\n l = h.Bc + 4 * f,\n m = h.zc,\n n = h.ya[h.aa + f];\n h.Qa.Bb\n ? (n.$b = K(g, h.Pa.jb[0])\n ? 2 + K(g, h.Pa.jb[2])\n : K(g, h.Pa.jb[1]))\n : (n.$b = 0);\n h.kc && (n.Ad = K(g, h.Bd));\n n.Za = !K(g, 145) + 0;\n if (n.Za) {\n var r = n.Ob,\n q = 0;\n for (h = 0; 4 > h; ++h) {\n var t = m[0 + h];\n var v;\n for (v = 0; 4 > v; ++v) {\n t = Ke[k[l + v]][t];\n for (var p = Mc[K(g, t[0])]; 0 < p; )\n p = Mc[2 * p + K(g, t[p])];\n t = -p;\n k[l + v] = t;\n }\n I(r, q, k, l, 4);\n q += 4;\n m[0 + h] = t;\n }\n } else\n (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n (n.Ob[0] = t),\n M(k, l, t, 4),\n M(m, 0, t, 4);\n n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n }\n if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n for (; a.ja < a.za; ++a.ja) {\n d = a;\n e = c;\n g = d.rb[d.sb - 1];\n k = d.rb[d.sb + d.ja];\n f = d.ya[d.aa + d.ja];\n if ((l = d.kc ? f.Ad : 0))\n (g.la = k.la = 0),\n f.Za || (g.Na = k.Na = 0),\n (f.Hc = 0),\n (f.Gc = 0),\n (f.ia = 0);\n else {\n var u,\n w,\n g = k,\n k = e,\n l = d.Pa.Xc,\n m = d.ya[d.aa + d.ja],\n n = d.pb[m.$b];\n h = m.ad;\n r = 0;\n q = d.rb[d.sb - 1];\n t = v = 0;\n M(h, r, 0, 384);\n if (m.Za) {\n var y = 0;\n var A = l[3];\n } else {\n p = V(16);\n var E = g.Na + q.Na;\n E = oa(k, l[1], E, n.Eb, 0, p, 0);\n g.Na = q.Na = (0 < E) + 0;\n if (1 < E) Nc(p, 0, h, r);\n else {\n var B = (p[0] + 3) >> 3;\n for (p = 0; 256 > p; p += 16) h[r + p] = B;\n }\n y = 1;\n A = l[0];\n }\n var C = g.la & 15;\n var N = q.la & 15;\n for (p = 0; 4 > p; ++p) {\n var z = N & 1;\n for (B = w = 0; 4 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, A, E, n.Sc, y, h, r)),\n (z = E > y),\n (C = (C >> 1) | (z << 7)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 4;\n N = (N >> 1) | (z << 7);\n v = ((v << 8) | w) >>> 0;\n }\n A = C;\n y = N >> 4;\n for (u = 0; 4 > u; u += 2) {\n w = 0;\n C = g.la >> (4 + u);\n N = q.la >> (4 + u);\n for (p = 0; 2 > p; ++p) {\n z = N & 1;\n for (B = 0; 2 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n (z = 0 < E),\n (C = (C >> 1) | (z << 3)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 2;\n N = (N >> 1) | (z << 5);\n }\n t |= w << (4 * u);\n A |= (C << 4) << u;\n y |= (N & 240) << u;\n }\n g.la = A;\n q.la = y;\n m.Hc = v;\n m.Gc = t;\n m.ia = t & 43690 ? 0 : n.ia;\n l = !(v | t);\n }\n 0 < d.L &&\n ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n (d.wa[d.Y + d.ja].La |= !l));\n if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n }\n Lc(a);\n c = a;\n d = b;\n e = 1;\n f = c.D;\n g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n if (0 == c.Aa)\n a: {\n (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n w = c.D;\n f = w.Nb;\n t = Ya[c.L];\n g = t * c.R;\n k = (t / 2) * c.B;\n p = 16 * f * c.R;\n B = 8 * f * c.B;\n l = c.sa;\n m = c.ta - g + p;\n n = c.qa;\n h = c.ra - k + B;\n r = c.Ha;\n q = c.Ia - k + B;\n C = w.M;\n N = 0 == C;\n v = C >= c.Va - 1;\n 2 == c.Aa && Oc(c, w);\n if (w.uc)\n for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n var Q = E;\n y = w;\n A = z;\n var S = Q.D,\n D = S.Nb;\n u = Q.R;\n var S = S.wa[S.Y + y],\n F = Q.sa,\n H = Q.ta + 16 * D * u + 16 * y,\n J = S.dd,\n G = S.tc;\n if (0 != G)\n if ((x(3 <= G), 1 == Q.L))\n 0 < y && Pc(F, H, u, G + 4),\n S.La && Qc(F, H, u, G),\n 0 < A && Rc(F, H, u, G + 4),\n S.La && Sc(F, H, u, G);\n else {\n var L = Q.B,\n O = Q.qa,\n P = Q.ra + 8 * D * L + 8 * y,\n R = Q.Ha,\n Q = Q.Ia + 8 * D * L + 8 * y,\n D = S.ld;\n 0 < y &&\n (Tc(F, H, u, G + 4, J, D),\n Uc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n 0 < A &&\n (Xc(F, H, u, G + 4, J, D),\n Yc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n }\n }\n c.ia && alert(\"todo:DitherRow\");\n if (null != d.put) {\n w = 16 * C;\n C = 16 * (C + 1);\n N\n ? ((d.y = c.sa),\n (d.O = c.ta + p),\n (d.f = c.qa),\n (d.N = c.ra + B),\n (d.ea = c.Ha),\n (d.W = c.Ia + B))\n : ((w -= t),\n (d.y = l),\n (d.O = m),\n (d.f = n),\n (d.N = h),\n (d.ea = r),\n (d.W = q));\n v || (C -= t);\n C > d.o && (C = d.o);\n d.F = null;\n d.J = null;\n if (\n null != c.Fa &&\n 0 < c.Fa.length &&\n w < C &&\n ((d.J = Le(c, d, w, C - w)),\n (d.F = c.mb),\n null == d.F && 0 == d.F.length)\n ) {\n e = T(c, 3, \"Could not decode alpha data.\");\n break a;\n }\n w < d.j &&\n ((t = d.j - w),\n (w = d.j),\n x(!(t & 1)),\n (d.O += c.R * t),\n (d.N += c.B * (t >> 1)),\n (d.W += c.B * (t >> 1)),\n null != d.F && (d.J += d.width * t));\n w < C &&\n ((d.O += d.v),\n (d.N += d.v >> 1),\n (d.W += d.v >> 1),\n null != d.F && (d.J += d.v),\n (d.ka = w - d.j),\n (d.U = d.va - d.v),\n (d.T = C - w),\n (e = d.put(d)));\n }\n f + 1 != c.Ic ||\n v ||\n (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n }\n if (!e) return T(a, 6, \"Output aborted.\");\n }\n return 1;\n }\n function Me(a, b) {\n if (null == a) return 0;\n if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n if (!a.cb && !Kc(a, b)) return 0;\n x(a.cb);\n if (null == b.ac || b.ac(b)) {\n b.ob && (a.L = 0);\n var c = Ya[a.L];\n 2 == a.L\n ? ((a.yb = 0), (a.zb = 0))\n : ((a.yb = (b.v - c) >> 4),\n (a.zb = (b.j - c) >> 4),\n 0 > a.yb && (a.yb = 0),\n 0 > a.zb && (a.zb = 0));\n a.Va = (b.o + 15 + c) >> 4;\n a.Hb = (b.va + 15 + c) >> 4;\n a.Hb > a.za && (a.Hb = a.za);\n a.Va > a.Ub && (a.Va = a.Ub);\n if (0 < a.L) {\n var d = a.ed;\n for (c = 0; 4 > c; ++c) {\n var e;\n if (a.Qa.Cb) {\n var f = a.Qa.Lb[c];\n a.Qa.Fb || (f += d.Tb);\n } else f = d.Tb;\n for (e = 0; 1 >= e; ++e) {\n var g = a.gd[c][e],\n h = f;\n d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n h = 0 > h ? 0 : 63 < h ? 63 : h;\n if (0 < h) {\n var k = h;\n 0 < d.wb &&\n ((k = 4 < d.wb ? k >> 2 : k >> 1),\n k > 9 - d.wb && (k = 9 - d.wb));\n 1 > k && (k = 1);\n g.dd = k;\n g.tc = 2 * h + k;\n g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n } else g.tc = 0;\n g.La = e;\n }\n }\n }\n c = 0;\n } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n if ((c = 0 == c)) {\n if (c) {\n a.$c = 0;\n 0 < a.Aa || (a.Ic = Ne);\n b: {\n c = a.Ic;\n var k = a.za,\n d = 4 * k,\n l = 32 * k,\n m = k + 1,\n n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n r = (2 == a.Aa ? 2 : 1) * k;\n e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n g = d + 832 + e + f;\n if (g != g) c = 0;\n else {\n if (g > a.Vb) {\n a.Vb = 0;\n a.Ec = V(g);\n a.Fc = 0;\n if (null == a.Ec) {\n c = T(a, 1, \"no memory during frame initialization.\");\n break b;\n }\n a.Vb = g;\n }\n g = a.Ec;\n h = a.Fc;\n a.Ac = g;\n a.Bc = h;\n h += d;\n a.Gd = wa(l, Ic);\n a.Hd = 0;\n a.rb = wa(m + 1, Hc);\n a.sb = 1;\n a.wa = n ? wa(n, Xa) : null;\n a.Y = 0;\n a.D.Nb = 0;\n a.D.wa = a.wa;\n a.D.Y = a.Y;\n 0 < a.Aa && (a.D.Y += k);\n x(!0);\n a.oc = g;\n a.pc = h;\n h += 832;\n a.ya = wa(r, Kb);\n a.aa = 0;\n a.D.ya = a.ya;\n a.D.aa = a.aa;\n 2 == a.Aa && (a.D.aa += k);\n a.R = 16 * k;\n a.B = 8 * k;\n l = Ya[a.L];\n k = l * a.R;\n l = (l / 2) * a.B;\n a.sa = g;\n a.ta = h + k;\n a.qa = a.sa;\n a.ra = a.ta + 16 * c * a.R + l;\n a.Ha = a.qa;\n a.Ia = a.ra + 8 * c * a.B + l;\n a.$c = 0;\n h += e;\n a.mb = f ? g : null;\n a.nb = f ? h : null;\n x(h + f <= a.Fc + a.Vb);\n Lc(a);\n M(a.Ac, a.Bc, 0, d);\n c = 1;\n }\n }\n if (c) {\n b.ka = 0;\n b.y = a.sa;\n b.O = a.ta;\n b.f = a.qa;\n b.N = a.ra;\n b.ea = a.Ha;\n b.Vd = a.Ia;\n b.fa = a.R;\n b.Rc = a.B;\n b.F = null;\n b.J = 0;\n if (!ad) {\n for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n for (c = -1020; 1020 >= c; ++c)\n cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n for (c = -112; 112 >= c; ++c)\n dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n for (c = -255; 510 >= c; ++c)\n ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n ad = 1;\n }\n Nc = Oe;\n Za = Pe;\n Nb = Qe;\n pa = Re;\n Ob = Se;\n fd = Te;\n Xc = Ue;\n Tc = Ve;\n Yc = We;\n Uc = Xe;\n Zc = Ye;\n Vc = Ze;\n $c = $e;\n Wc = af;\n Rc = gd;\n Pc = hd;\n Sc = bf;\n Qc = cf;\n W[0] = df;\n W[1] = ef;\n W[2] = ff;\n W[3] = gf;\n W[4] = hf;\n W[5] = jf;\n W[6] = kf;\n W[7] = lf;\n W[8] = mf;\n W[9] = nf;\n Y[0] = of;\n Y[1] = pf;\n Y[2] = qf;\n Y[3] = rf;\n Y[4] = sf;\n Y[5] = tf;\n Y[6] = uf;\n ka[0] = vf;\n ka[1] = wf;\n ka[2] = xf;\n ka[3] = yf;\n ka[4] = zf;\n ka[5] = Af;\n ka[6] = Bf;\n c = 1;\n } else c = 0;\n }\n c && (c = Je(a, b));\n null != b.bc && b.bc(b);\n c &= 1;\n }\n if (!c) return 0;\n a.cb = 0;\n return c;\n }\n function qa(a, b, c, d, e) {\n e = a[b + c + 32 * d] + (e >> 3);\n a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n }\n function kb(a, b, c, d, e, f) {\n qa(a, b, 0, c, d + e);\n qa(a, b, 1, c, d + f);\n qa(a, b, 2, c, d - f);\n qa(a, b, 3, c, d - e);\n }\n function da(a) {\n return ((20091 * a) >> 16) + a;\n }\n function id(a, b, c, d) {\n var e = 0,\n f;\n var g = V(16);\n for (f = 0; 4 > f; ++f) {\n var h = a[b + 0] + a[b + 8];\n var k = a[b + 0] - a[b + 8];\n var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n g[e + 0] = h + m;\n g[e + 1] = k + l;\n g[e + 2] = k - l;\n g[e + 3] = h - m;\n e += 4;\n b++;\n }\n for (f = e = 0; 4 > f; ++f)\n (a = g[e + 0] + 4),\n (h = a + g[e + 8]),\n (k = a - g[e + 8]),\n (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n qa(c, d, 0, 0, h + m),\n qa(c, d, 1, 0, k + l),\n qa(c, d, 2, 0, k - l),\n qa(c, d, 3, 0, h - m),\n e++,\n (d += 32);\n }\n function Te(a, b, c, d) {\n var e = a[b + 0] + 4,\n f = (35468 * a[b + 4]) >> 16,\n g = da(a[b + 4]),\n h = (35468 * a[b + 1]) >> 16;\n a = da(a[b + 1]);\n kb(c, d, 0, e + g, a, h);\n kb(c, d, 1, e + f, a, h);\n kb(c, d, 2, e - f, a, h);\n kb(c, d, 3, e - g, a, h);\n }\n function Pe(a, b, c, d, e) {\n id(a, b, c, d);\n e && id(a, b + 16, c, d + 4);\n }\n function Qe(a, b, c, d) {\n Za(a, b + 0, c, d, 1);\n Za(a, b + 32, c, d + 128, 1);\n }\n function Re(a, b, c, d) {\n a = a[b + 0] + 4;\n var e;\n for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n }\n function Se(a, b, c, d) {\n a[b + 0] && pa(a, b + 0, c, d);\n a[b + 16] && pa(a, b + 16, c, d + 4);\n a[b + 32] && pa(a, b + 32, c, d + 128);\n a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n }\n function Oe(a, b, c, d) {\n var e = V(16),\n f;\n for (f = 0; 4 > f; ++f) {\n var g = a[b + 0 + f] + a[b + 12 + f];\n var h = a[b + 4 + f] + a[b + 8 + f];\n var k = a[b + 4 + f] - a[b + 8 + f];\n var l = a[b + 0 + f] - a[b + 12 + f];\n e[0 + f] = g + h;\n e[8 + f] = g - h;\n e[4 + f] = l + k;\n e[12 + f] = l - k;\n }\n for (f = 0; 4 > f; ++f)\n (a = e[0 + 4 * f] + 3),\n (g = a + e[3 + 4 * f]),\n (h = e[1 + 4 * f] + e[2 + 4 * f]),\n (k = e[1 + 4 * f] - e[2 + 4 * f]),\n (l = a - e[3 + 4 * f]),\n (c[d + 0] = (g + h) >> 3),\n (c[d + 16] = (l + k) >> 3),\n (c[d + 32] = (g - h) >> 3),\n (c[d + 48] = (l - k) >> 3),\n (d += 64);\n }\n function Pb(a, b, c) {\n var d = b - 32,\n e = R,\n f = 255 - a[d - 1],\n g;\n for (g = 0; g < c; ++g) {\n var h = e,\n k = f + a[b - 1],\n l;\n for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n b += 32;\n }\n }\n function ef(a, b) {\n Pb(a, b, 4);\n }\n function wf(a, b) {\n Pb(a, b, 8);\n }\n function pf(a, b) {\n Pb(a, b, 16);\n }\n function qf(a, b) {\n var c;\n for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n }\n function rf(a, b) {\n var c;\n for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n }\n function $a(a, b, c) {\n var d;\n for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n }\n function of(a, b) {\n var c = 16,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n $a(c >> 5, a, b);\n }\n function sf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n $a(c >> 4, a, b);\n }\n function tf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n $a(c >> 4, a, b);\n }\n function uf(a, b) {\n $a(128, a, b);\n }\n function z(a, b, c) {\n return (a + 2 * b + c + 2) >> 2;\n }\n function ff(a, b) {\n var c = b - 32,\n c = new Uint8Array([\n z(a[c - 1], a[c + 0], a[c + 1]),\n z(a[c + 0], a[c + 1], a[c + 2]),\n z(a[c + 1], a[c + 2], a[c + 3]),\n z(a[c + 2], a[c + 3], a[c + 4])\n ]),\n d;\n for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n }\n function gf(a, b) {\n var c = a[b - 1],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n ra(a, b + 32, 16843009 * z(c, d, e));\n ra(a, b + 64, 16843009 * z(d, e, f));\n ra(a, b + 96, 16843009 * z(e, f, f));\n }\n function df(a, b) {\n var c = 4,\n d;\n for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n c >>= 3;\n for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n }\n function hf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n a[b + 3 + 0] = z(l, k, h);\n }\n function kf(a, b) {\n var c = a[b + 1 - 32],\n d = a[b + 2 - 32],\n e = a[b + 3 - 32],\n f = a[b + 4 - 32],\n g = a[b + 5 - 32],\n h = a[b + 6 - 32],\n k = a[b + 7 - 32];\n a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, k);\n }\n function jf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n a[b + 3 + 0] = (k + l + 1) >> 1;\n a[b + 0 + 96] = z(e, d, c);\n a[b + 0 + 64] = z(d, c, f);\n a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n a[b + 3 + 32] = z(h, k, l);\n }\n function lf(a, b) {\n var c = a[b + 0 - 32],\n d = a[b + 1 - 32],\n e = a[b + 2 - 32],\n f = a[b + 3 - 32],\n g = a[b + 4 - 32],\n h = a[b + 5 - 32],\n k = a[b + 6 - 32],\n l = a[b + 7 - 32];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n a[b + 0 + 32] = z(c, d, e);\n a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 3 + 64] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, l);\n }\n function nf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n a[b + 1 + 0] = z(c, d, e);\n a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n b + 2 + 96\n ] = a[b + 3 + 96] = f;\n }\n function mf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96],\n g = a[b - 1 - 32],\n h = a[b + 0 - 32],\n k = a[b + 1 - 32],\n l = a[b + 2 - 32];\n a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n a[b + 0 + 96] = (f + e + 1) >> 1;\n a[b + 3 + 0] = z(h, k, l);\n a[b + 2 + 0] = z(g, h, k);\n a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n a[b + 1 + 96] = z(f, e, d);\n }\n function xf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n }\n function yf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n }\n function lb(a, b, c) {\n var d;\n for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n }\n function vf(a, b) {\n var c = 8,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n lb(c >> 4, a, b);\n }\n function Af(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n lb(c >> 3, a, b);\n }\n function zf(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n lb(c >> 3, a, b);\n }\n function Bf(a, b) {\n lb(128, a, b);\n }\n function ab(a, b, c) {\n var d = a[b - c],\n e = a[b + 0],\n f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n g = mb[112 + ((f + 4) >> 3)];\n a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n a[b + 0] = R[255 + e - g];\n }\n function jd(a, b, c, d) {\n var e = a[b + 0],\n f = a[b + c];\n return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n }\n function kd(a, b, c, d) {\n return (\n 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n );\n }\n function ld(a, b, c, d, e) {\n var f = a[b - 3 * c],\n g = a[b - 2 * c],\n h = a[b - c],\n k = a[b + 0],\n l = a[b + c],\n m = a[b + 2 * c],\n n = a[b + 3 * c];\n return 4 * U[255 + h - k] + U[255 + g - l] > d\n ? 0\n : U[255 + a[b - 4 * c] - f] <= e &&\n U[255 + f - g] <= e &&\n U[255 + g - h] <= e &&\n U[255 + n - m] <= e &&\n U[255 + m - l] <= e &&\n U[255 + l - k] <= e;\n }\n function gd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n }\n function hd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n }\n function bf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n }\n function cf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n }\n function ea(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - 2 * m],\n r = k[l - m],\n q = k[l + 0],\n t = k[l + m],\n v = k[l + 2 * m],\n p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n u = (27 * p + 63) >> 7,\n w = (18 * p + 63) >> 7,\n p = (9 * p + 63) >> 7;\n k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n k[l - 2 * m] = R[255 + n + w];\n k[l - m] = R[255 + r + u];\n k[l + 0] = R[255 + q - u];\n k[l + m] = R[255 + t - w];\n k[l + 2 * m] = R[255 + v - p];\n }\n b += d;\n }\n }\n function Fa(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - m],\n r = k[l + 0],\n q = k[l + m],\n t = 3 * (r - n),\n v = mb[112 + ((t + 4) >> 3)],\n t = mb[112 + ((t + 3) >> 3)],\n p = (v + 1) >> 1;\n k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n k[l - m] = R[255 + n + t];\n k[l + 0] = R[255 + r - v];\n k[l + m] = R[255 + q - p];\n }\n b += d;\n }\n }\n function Ue(a, b, c, d, e, f) {\n ea(a, b, c, 1, 16, d, e, f);\n }\n function Ve(a, b, c, d, e, f) {\n ea(a, b, 1, c, 16, d, e, f);\n }\n function Ye(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n }\n function Ze(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n }\n function We(a, b, c, d, e, f, g, h) {\n ea(a, b, e, 1, 8, f, g, h);\n ea(c, d, e, 1, 8, f, g, h);\n }\n function Xe(a, b, c, d, e, f, g, h) {\n ea(a, b, 1, e, 8, f, g, h);\n ea(c, d, 1, e, 8, f, g, h);\n }\n function $e(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n }\n function af(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4, 1, e, 8, f, g, h);\n Fa(c, d + 4, 1, e, 8, f, g, h);\n }\n function Cf() {\n this.ba = new Cb();\n this.ec = [];\n this.cc = [];\n this.Mc = [];\n this.Dc = this.Nc = this.dc = this.fc = 0;\n this.Oa = new Ud();\n this.memory = 0;\n this.Ib = \"OutputFunc\";\n this.Jb = \"OutputAlphaFunc\";\n this.Nd = \"OutputRowFunc\";\n }\n function md() {\n this.data = [];\n this.offset = this.kd = this.ha = this.w = 0;\n this.na = [];\n this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n }\n function Df() {\n this.nc = this.Ea = this.b = this.hc = 0;\n this.K = [];\n this.w = 0;\n }\n function Ef() {\n this.ua = 0;\n this.Wa = new ac();\n this.vb = new ac();\n this.md = this.xc = this.wc = 0;\n this.vc = [];\n this.Wb = 0;\n this.Ya = new Ub();\n this.yc = new O();\n }\n function je() {\n this.xb = this.a = 0;\n this.l = new Oa();\n this.ca = new Cb();\n this.V = [];\n this.Ba = 0;\n this.Ta = [];\n this.Ua = 0;\n this.m = new Ra();\n this.Pb = 0;\n this.wd = new Ra();\n this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n this.s = new Ef();\n this.ab = 0;\n this.gc = wa(4, Df);\n this.Oc = 0;\n }\n function Ff() {\n this.Lc = this.Z = this.$a = this.i = this.c = 0;\n this.l = new Oa();\n this.ic = 0;\n this.ca = [];\n this.tb = 0;\n this.qd = null;\n this.rd = 0;\n }\n function Rb(a, b, c, d, e, f, g) {\n a = null == a ? 0 : a[b + 0];\n for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n }\n function Gf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h;\n for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n }\n }\n function Hf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h = a[b + 0],\n k = h,\n l = h,\n m;\n for (m = 0; m < g; ++m)\n (h = a[b + m]),\n (k = l + h - k),\n (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n (k = h),\n (e[f + m] = l);\n }\n }\n function Le(a, b, c, d) {\n var e = b.width,\n f = b.o;\n x(null != a && null != b);\n if (0 > c || 0 >= d || c + d > f) return null;\n if (!a.Cc) {\n if (null == a.ga) {\n a.ga = new Ff();\n var g;\n (g = null == a.ga) ||\n ((g = b.width * b.o),\n x(0 == a.Gb.length),\n (a.Gb = V(g)),\n (a.Uc = 0),\n null == a.Gb\n ? (g = 0)\n : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n (g = !g));\n if (!g) {\n g = a.ga;\n var h = a.Fa,\n k = a.P,\n l = a.qc,\n m = a.mb,\n n = a.nb,\n r = k + 1,\n q = l - 1,\n t = g.l;\n x(null != h && null != m && null != b);\n ia[0] = null;\n ia[1] = Rb;\n ia[2] = Gf;\n ia[3] = Hf;\n g.ca = m;\n g.tb = n;\n g.c = b.width;\n g.i = b.height;\n x(0 < g.c && 0 < g.i);\n if (1 >= l) b = 0;\n else if (\n ((g.$a = (h[k + 0] >> 0) & 3),\n (g.Z = (h[k + 0] >> 2) & 3),\n (g.Lc = (h[k + 0] >> 4) & 3),\n (k = (h[k + 0] >> 6) & 3),\n 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n )\n b = 0;\n else if (\n ((t.put = kc),\n (t.ac = gc),\n (t.bc = lc),\n (t.ma = g),\n (t.width = b.width),\n (t.height = b.height),\n (t.Da = b.Da),\n (t.v = b.v),\n (t.va = b.va),\n (t.j = b.j),\n (t.o = b.o),\n g.$a)\n )\n b: {\n x(1 == g.$a), (b = Bc());\n c: for (;;) {\n if (null == b) {\n b = 0;\n break b;\n }\n x(null != g);\n g.mc = b;\n b.c = g.c;\n b.i = g.i;\n b.l = g.l;\n b.l.ma = g;\n b.l.width = g.c;\n b.l.height = g.i;\n b.a = 0;\n cb(b.m, h, r, q);\n if (!rb(g.c, g.i, 1, b, null)) break c;\n 1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n ? ((g.ic = 1),\n (h = b.c * b.i),\n (b.Ta = null),\n (b.Ua = 0),\n (b.V = V(h)),\n (b.Ba = 0),\n null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n : ((g.ic = 0), (b = Ec(b, g.c)));\n if (!b) break c;\n b = 1;\n break b;\n }\n g.mc = null;\n b = 0;\n }\n else b = q >= g.c * g.i;\n g = !b;\n }\n if (g) return null;\n 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n }\n x(null != a.ga);\n x(c + d <= f);\n a: {\n h = a.ga;\n b = h.c;\n f = h.l.o;\n if (0 == h.$a) {\n r = a.rc;\n q = a.Vc;\n t = a.Fa;\n k = a.P + 1 + c * b;\n l = a.mb;\n m = a.nb + c * b;\n x(k <= a.P + a.qc);\n if (0 != h.Z)\n for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n ia[h.Z](r, q, t, k, l, m, b),\n (r = l),\n (q = m),\n (m += b),\n (k += b);\n else\n for (g = 0; g < d; ++g)\n I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n a.rc = r;\n a.Vc = q;\n } else {\n x(null != h.mc);\n b = c + d;\n g = h.mc;\n x(null != g);\n x(b <= g.i);\n if (g.C >= b) b = 1;\n else if ((h.ic || Aa(), h.ic)) {\n var h = g.V,\n r = g.Ba,\n q = g.c,\n v = g.i,\n t = 1,\n k = g.$ / q,\n l = g.$ % q,\n m = g.m,\n n = g.s,\n p = g.$,\n u = q * v,\n w = q * b,\n y = n.wc,\n A = p < w ? ha(n, l, k) : null;\n x(p <= u);\n x(b <= v);\n x(yc(n));\n c: for (;;) {\n for (; !m.h && p < w; ) {\n l & y || (A = ha(n, l, k));\n x(null != A);\n Sa(m);\n v = ua(A.G[0], A.H[0], m);\n if (256 > v)\n (h[r + p] = v),\n ++p,\n ++l,\n l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n else if (280 > v) {\n var v = ib(v - 256, m);\n var E = ua(A.G[4], A.H[4], m);\n Sa(m);\n E = ib(E, m);\n E = nc(q, E);\n if (p >= E && u - p >= v) {\n var B;\n for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n } else {\n t = 0;\n break c;\n }\n p += v;\n for (l += v; l >= q; )\n (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n p < w && l & y && (A = ha(n, l, k));\n } else {\n t = 0;\n break c;\n }\n x(m.h == db(m));\n }\n Ib(g, k > b ? b : k);\n break c;\n }\n !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n b = t;\n } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n if (!b) {\n d = 0;\n break a;\n }\n }\n c + d >= f && (a.Cc = 1);\n d = 1;\n }\n if (!d) return null;\n if (\n a.Cc &&\n ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n )\n return alert(\"todo:WebPDequantizeLevels\"), null;\n }\n return a.nb + c * e;\n }\n function If(a, b, c, d, e, f) {\n for (; 0 < e--; ) {\n var g = a,\n h = b + (c ? 1 : 0),\n k = a,\n l = b + (c ? 0 : 3),\n m;\n for (m = 0; m < d; ++m) {\n var n = k[l + 4 * m];\n 255 != n &&\n ((n *= 32897),\n (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n }\n b += f;\n }\n }\n function Jf(a, b, c, d, e) {\n for (; 0 < d--; ) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + 2 * f + 0],\n h = a[b + 2 * f + 1],\n k = h & 15,\n l = 4369 * k,\n h = (((h & 240) | (h >> 4)) * l) >> 16;\n a[b + 2 * f + 0] =\n (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n a[b + 2 * f + 1] = (h & 240) | k;\n }\n b += e;\n }\n }\n function Kf(a, b, c, d, e, f, g, h) {\n var k = 255,\n l,\n m;\n for (m = 0; m < e; ++m) {\n for (l = 0; l < d; ++l) {\n var n = a[b + l];\n f[g + 4 * l] = n;\n k &= n;\n }\n b += c;\n g += h;\n }\n return 255 != k;\n }\n function Lf(a, b, c, d, e) {\n var f;\n for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n }\n function Aa() {\n za = If;\n vc = Jf;\n fc = Kf;\n Fc = Lf;\n }\n function va(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n var d,\n E = (y - 1) >> 1;\n var B = h[k + 0] | (l[m + 0] << 16);\n var C = n[r + 0] | (q[t + 0] << 16);\n x(null != a);\n var z = (3 * B + C + 131074) >> 2;\n b(a[e + 0], z & 255, z >> 16, v, p);\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + 0], z & 255, z >> 16, u, w));\n for (d = 1; d <= E; ++d) {\n var D = h[k + d] | (l[m + d] << 16);\n var G = n[r + d] | (q[t + d] << 16);\n var F = B + D + C + G + 524296;\n var H = (F + 2 * (D + C)) >> 3;\n F = (F + 2 * (B + G)) >> 3;\n z = (H + B) >> 1;\n B = (F + D) >> 1;\n b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n null != f &&\n ((z = (F + C) >> 1),\n (B = (H + G) >> 1),\n b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n B = D;\n C = G;\n }\n y & 1 ||\n ((z = (3 * B + C + 131074) >> 2),\n b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n };\n }\n function ic() {\n P[Ca] = Mf;\n P[Ua] = nd;\n P[tc] = Nf;\n P[Va] = od;\n P[ya] = pd;\n P[Db] = qd;\n P[wc] = Of;\n P[zb] = nd;\n P[Ab] = od;\n P[Ja] = pd;\n P[Bb] = qd;\n }\n function Sb(a) {\n return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n }\n function bb(a, b) {\n return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n }\n function nb(a, b, c) {\n return Sb(\n ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n );\n }\n function Pa(a, b) {\n return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n }\n function Ga(a, b, c, d, e) {\n d[e + 0] = bb(a, c);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = Pa(a, b);\n }\n function Tb(a, b, c, d, e) {\n d[e + 0] = Pa(a, b);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = bb(a, c);\n }\n function sd(a, b, c, d, e) {\n var f = nb(a, b, c);\n b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n d[e + 1] = b;\n }\n function td(a, b, c, d, e) {\n var f = (Pa(a, b) & 240) | 15;\n d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n d[e + 1] = f;\n }\n function ud(a, b, c, d, e) {\n d[e + 0] = 255;\n Ga(a, b, c, d, e + 1);\n }\n function vd(a, b, c, d, e) {\n Tb(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function wd(a, b, c, d, e) {\n Ga(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function la(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n) {\n for (var d = m + (n & -2) * c; m != d; )\n b(a[e + 0], f[g + 0], h[k + 0], l, m),\n b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n (e += 2),\n ++g,\n ++k,\n (m += 2 * c);\n n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n };\n }\n function xd(a, b, c) {\n return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n }\n function yd(a, b, c, d, e) {\n switch (a >>> 30) {\n case 3:\n Za(b, c, d, e, 0);\n break;\n case 2:\n fd(b, c, d, e);\n break;\n case 1:\n pa(b, c, d, e);\n }\n }\n function Oc(a, b) {\n var c,\n d,\n e = b.M,\n f = b.Nb,\n g = a.oc,\n h = a.pc + 40,\n k = a.oc,\n l = a.pc + 584,\n m = a.oc,\n n = a.pc + 600;\n for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n for (c = 0; 8 > c; ++c)\n (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n 0 < e\n ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n : (M(g, h - 32 - 1, 127, 21),\n M(k, l - 32 - 1, 127, 9),\n M(m, n - 32 - 1, 127, 9));\n for (d = 0; d < a.za; ++d) {\n var r = b.ya[b.aa + d];\n if (0 < d) {\n for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n for (c = -1; 8 > c; ++c)\n I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n }\n var q = a.Gd,\n t = a.Hd + d,\n v = r.ad,\n p = r.Hc;\n 0 < e &&\n (I(g, h - 32, q[t].y, 0, 16),\n I(k, l - 32, q[t].f, 0, 8),\n I(m, n - 32, q[t].ea, 0, 8));\n if (r.Za) {\n var u = g;\n var w = h - 32 + 16;\n 0 < e &&\n (d >= a.za - 1\n ? M(u, w, q[t].y[15], 4)\n : I(u, w, q[t + 1].y, 0, 4));\n for (c = 0; 4 > c; c++)\n u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n for (c = 0; 16 > c; ++c, p <<= 2)\n (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n c = r.Gc;\n u = xd(d, e, r.Dd);\n ka[u](k, l);\n ka[u](m, n);\n r = c >> 0;\n p = v;\n u = k;\n w = l;\n r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n c >>= 8;\n r = m;\n p = n;\n c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n e < a.Ub - 1 &&\n (I(q[t].y, 0, g, h + 480, 16),\n I(q[t].f, 0, k, l + 224, 8),\n I(q[t].ea, 0, m, n + 224, 8));\n c = 8 * f * a.B;\n q = a.sa;\n t = a.ta + 16 * d + 16 * f * a.R;\n v = a.qa;\n r = a.ra + 8 * d + c;\n p = a.Ha;\n u = a.Ia + 8 * d + c;\n for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n for (c = 0; 8 > c; ++c)\n I(v, r + c * a.B, k, l + 32 * c, 8),\n I(p, u + c * a.B, m, n + 32 * c, 8);\n }\n }\n function Ad(a, b, c, d, e, f, g, h, k) {\n var l = [0],\n m = [0],\n n = 0,\n r = null != k ? k.kd : 0,\n q = null != k ? k : new md();\n if (null == a || 12 > c) return 7;\n q.data = a;\n q.w = b;\n q.ha = c;\n b = [b];\n c = [c];\n q.gb = [q.gb];\n a: {\n var t = b;\n var v = c;\n var p = q.gb;\n x(null != a);\n x(null != v);\n x(null != p);\n p[0] = 0;\n if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n if (fa(a, t[0] + 8, \"WEBP\")) {\n p = 3;\n break a;\n }\n var u = Ha(a, t[0] + 4);\n if (12 > u || 4294967286 < u) {\n p = 3;\n break a;\n }\n if (r && u > v[0] - 8) {\n p = 7;\n break a;\n }\n p[0] = u;\n t[0] += 12;\n v[0] -= 12;\n }\n p = 0;\n }\n if (0 != p) return p;\n u = 0 < q.gb[0];\n for (c = c[0]; ; ) {\n t = [0];\n n = [n];\n a: {\n var w = a;\n v = b;\n p = c;\n var y = n,\n A = l,\n z = m,\n B = t;\n y[0] = 0;\n if (8 > p[0]) p = 7;\n else {\n if (!fa(w, v[0], \"VP8X\")) {\n if (10 != Ha(w, v[0] + 4)) {\n p = 3;\n break a;\n }\n if (18 > p[0]) {\n p = 7;\n break a;\n }\n var C = Ha(w, v[0] + 8);\n var D = 1 + Yb(w, v[0] + 12);\n w = 1 + Yb(w, v[0] + 15);\n if (2147483648 <= D * w) {\n p = 3;\n break a;\n }\n null != B && (B[0] = C);\n null != A && (A[0] = D);\n null != z && (z[0] = w);\n v[0] += 18;\n p[0] -= 18;\n y[0] = 1;\n }\n p = 0;\n }\n }\n n = n[0];\n t = t[0];\n if (0 != p) return p;\n v = !!(t & 2);\n if (!u && n) return 3;\n null != f && (f[0] = !!(t & 16));\n null != g && (g[0] = v);\n null != h && (h[0] = 0);\n g = l[0];\n t = m[0];\n if (n && v && null == k) {\n p = 0;\n break;\n }\n if (4 > c) {\n p = 7;\n break;\n }\n if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n c = [c];\n q.na = [q.na];\n q.P = [q.P];\n q.Sa = [q.Sa];\n a: {\n C = a;\n p = b;\n u = c;\n var y = q.gb,\n A = q.na,\n z = q.P,\n B = q.Sa;\n D = 22;\n x(null != C);\n x(null != u);\n w = p[0];\n var F = u[0];\n x(null != A);\n x(null != B);\n A[0] = null;\n z[0] = null;\n for (B[0] = 0; ; ) {\n p[0] = w;\n u[0] = F;\n if (8 > F) {\n p = 7;\n break a;\n }\n var G = Ha(C, w + 4);\n if (4294967286 < G) {\n p = 3;\n break a;\n }\n var H = (8 + G + 1) & -2;\n D += H;\n if (0 < y && D > y) {\n p = 3;\n break a;\n }\n if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n p = 0;\n break a;\n }\n if (F[0] < H) {\n p = 7;\n break a;\n }\n fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n w += H;\n F -= H;\n }\n }\n c = c[0];\n q.na = q.na[0];\n q.P = q.P[0];\n q.Sa = q.Sa[0];\n if (0 != p) break;\n }\n c = [c];\n q.Ja = [q.Ja];\n q.xa = [q.xa];\n a: if (\n ((y = a),\n (p = b),\n (u = c),\n (A = q.gb[0]),\n (z = q.Ja),\n (B = q.xa),\n (C = p[0]),\n (w = !fa(y, C, \"VP8 \")),\n (D = !fa(y, C, \"VP8L\")),\n x(null != y),\n x(null != u),\n x(null != z),\n x(null != B),\n 8 > u[0])\n )\n p = 7;\n else {\n if (w || D) {\n y = Ha(y, C + 4);\n if (12 <= A && y > A - 12) {\n p = 3;\n break a;\n }\n if (r && y > u[0] - 8) {\n p = 7;\n break a;\n }\n z[0] = y;\n p[0] += 8;\n u[0] -= 8;\n B[0] = D;\n } else\n (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n (z[0] = u[0]);\n p = 0;\n }\n c = c[0];\n q.Ja = q.Ja[0];\n q.xa = q.xa[0];\n b = b[0];\n if (0 != p) break;\n if (4294967286 < q.Ja) return 3;\n null == h || v || (h[0] = q.xa ? 2 : 1);\n g = [g];\n t = [t];\n if (q.xa) {\n if (5 > c) {\n p = 7;\n break;\n }\n h = g;\n r = t;\n v = f;\n null == a || 5 > c\n ? (a = 0)\n : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n ? ((u = [0]),\n (y = [0]),\n (A = [0]),\n (z = new Ra()),\n cb(z, a, b, c),\n mc(z, u, y, A)\n ? (null != h && (h[0] = u[0]),\n null != r && (r[0] = y[0]),\n null != v && (v[0] = A[0]),\n (a = 1))\n : (a = 0))\n : (a = 0);\n } else {\n if (10 > c) {\n p = 7;\n break;\n }\n h = t;\n null == a || 10 > c || !Jc(a, b + 3, c - 3)\n ? (a = 0)\n : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n r & 1 ||\n 3 < ((r >> 1) & 7) ||\n !((r >> 4) & 1) ||\n r >> 5 >= q.Ja ||\n !v ||\n !a\n ? (a = 0)\n : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n }\n if (!a) return 3;\n g = g[0];\n t = t[0];\n if (n && (l[0] != g || m[0] != t)) return 3;\n null != k &&\n ((k[0] = q),\n (k.offset = b - k.w),\n x(4294967286 > b - k.w),\n x(k.offset == k.ha - c));\n break;\n }\n return 0 == p || (7 == p && n && null == k)\n ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n null != d && (d[0] = g),\n null != e && (e[0] = t),\n 0)\n : p;\n }\n function hc(a, b, c) {\n var d = b.width,\n e = b.height,\n f = 0,\n g = 0,\n h = d,\n k = e;\n b.Da = null != a && 0 < a.Da;\n if (\n b.Da &&\n ((h = a.cd),\n (k = a.bd),\n (f = a.v),\n (g = a.j),\n 11 > c || ((f &= -2), (g &= -2)),\n 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n )\n return 0;\n b.v = f;\n b.j = g;\n b.va = f + h;\n b.o = g + k;\n b.U = h;\n b.T = k;\n b.da = null != a && 0 < a.da;\n if (b.da) {\n c = [a.ib];\n f = [a.hb];\n if (!bc(h, k, c, f)) return 0;\n b.ib = c[0];\n b.hb = f[0];\n }\n b.ob = null != a && a.ob;\n b.Kb = null == a || !a.Sd;\n b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n return 1;\n }\n function Bd(a) {\n if (null == a) return 2;\n if (11 > a.S) {\n var b = a.f.RGBA;\n b.fb += (a.height - 1) * b.A;\n b.A = -b.A;\n } else\n (b = a.f.kb),\n (a = a.height),\n (b.O += (a - 1) * b.fa),\n (b.fa = -b.fa),\n (b.N += ((a - 1) >> 1) * b.Ab),\n (b.Ab = -b.Ab),\n (b.W += ((a - 1) >> 1) * b.Db),\n (b.Db = -b.Db),\n null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n return 0;\n }\n function Cd(a, b, c, d) {\n if (null == d || 0 >= a || 0 >= b) return 2;\n if (null != c) {\n if (c.Da) {\n var e = c.cd,\n f = c.bd,\n g = c.v & -2,\n h = c.j & -2;\n if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n return 2;\n a = e;\n b = f;\n }\n if (c.da) {\n e = [c.ib];\n f = [c.hb];\n if (!bc(a, b, e, f)) return 2;\n a = e[0];\n b = f[0];\n }\n }\n d.width = a;\n d.height = b;\n a: {\n var k = d.width;\n var l = d.height;\n a = d.S;\n if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n else {\n if (0 >= d.Rd && null == d.sd) {\n var g = (f = e = b = 0),\n h = k * Dd[a],\n m = h * l;\n 11 > a ||\n ((b = (k + 1) / 2),\n (f = ((l + 1) / 2) * b),\n 12 == a && ((e = k), (g = e * l)));\n l = V(m + 2 * f + g);\n if (null == l) {\n a = 1;\n break a;\n }\n d.sd = l;\n 11 > a\n ? ((k = d.f.RGBA),\n (k.eb = l),\n (k.fb = 0),\n (k.A = h),\n (k.size = m))\n : ((k = d.f.kb),\n (k.y = l),\n (k.O = 0),\n (k.fa = h),\n (k.Fd = m),\n (k.f = l),\n (k.N = 0 + m),\n (k.Ab = b),\n (k.Cd = f),\n (k.ea = l),\n (k.W = 0 + m + f),\n (k.Db = b),\n (k.Ed = f),\n 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n (k.Tc = g),\n (k.lb = e));\n }\n b = 1;\n e = d.S;\n f = d.width;\n g = d.height;\n if (e >= Ca && 13 > e)\n if (11 > e)\n (a = d.f.RGBA),\n (h = Math.abs(a.A)),\n (b &= h * (g - 1) + f <= a.size),\n (b &= h >= f * Dd[e]),\n (b &= null != a.eb);\n else {\n a = d.f.kb;\n h = (f + 1) / 2;\n m = (g + 1) / 2;\n k = Math.abs(a.fa);\n var l = Math.abs(a.Ab),\n n = Math.abs(a.Db),\n r = Math.abs(a.lb),\n q = r * (g - 1) + f;\n b &= k * (g - 1) + f <= a.Fd;\n b &= l * (m - 1) + h <= a.Cd;\n b &= n * (m - 1) + h <= a.Ed;\n b = b & (k >= f) & (l >= h) & (n >= h);\n b &= null != a.y;\n b &= null != a.f;\n b &= null != a.ea;\n 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n }\n else b = 0;\n a = b ? 0 : 2;\n }\n }\n if (0 != a) return a;\n null != c && c.fd && (a = Bd(d));\n return a;\n }\n var xb = 64,\n Hd = [\n 0,\n 1,\n 3,\n 7,\n 15,\n 31,\n 63,\n 127,\n 255,\n 511,\n 1023,\n 2047,\n 4095,\n 8191,\n 16383,\n 32767,\n 65535,\n 131071,\n 262143,\n 524287,\n 1048575,\n 2097151,\n 4194303,\n 8388607,\n 16777215\n ],\n Gd = 24,\n ob = 32,\n Xb = 8,\n Id = [\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7\n ];\n X(\"Predictor0\", \"PredictorAdd0\");\n self.Predictor0 = function() {\n return 4278190080;\n };\n self.Predictor1 = function(a) {\n return a;\n };\n self.Predictor2 = function(a, b, c) {\n return b[c + 0];\n };\n self.Predictor3 = function(a, b, c) {\n return b[c + 1];\n };\n self.Predictor4 = function(a, b, c) {\n return b[c - 1];\n };\n self.Predictor5 = function(a, b, c) {\n return aa(aa(a, b[c + 1]), b[c + 0]);\n };\n self.Predictor6 = function(a, b, c) {\n return aa(a, b[c - 1]);\n };\n self.Predictor7 = function(a, b, c) {\n return aa(a, b[c + 0]);\n };\n self.Predictor8 = function(a, b, c) {\n return aa(b[c - 1], b[c + 0]);\n };\n self.Predictor9 = function(a, b, c) {\n return aa(b[c + 0], b[c + 1]);\n };\n self.Predictor10 = function(a, b, c) {\n return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n };\n self.Predictor11 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return 0 >=\n Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n Ia(d & 255, a & 255, b & 255)\n ? d\n : a;\n };\n self.Predictor12 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return (\n ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n 16) |\n (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n sa((a & 255) + (d & 255) - (b & 255))) >>>\n 0\n );\n };\n self.Predictor13 = function(a, b, c) {\n var d = b[c - 1];\n a = aa(a, b[c + 0]);\n return (\n ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n 0\n );\n };\n var ee = self.PredictorAdd0;\n self.PredictorAdd1 = cc;\n X(\"Predictor2\", \"PredictorAdd2\");\n X(\"Predictor3\", \"PredictorAdd3\");\n X(\"Predictor4\", \"PredictorAdd4\");\n X(\"Predictor5\", \"PredictorAdd5\");\n X(\"Predictor6\", \"PredictorAdd6\");\n X(\"Predictor7\", \"PredictorAdd7\");\n X(\"Predictor8\", \"PredictorAdd8\");\n X(\"Predictor9\", \"PredictorAdd9\");\n X(\"Predictor10\", \"PredictorAdd10\");\n X(\"Predictor11\", \"PredictorAdd11\");\n X(\"Predictor12\", \"PredictorAdd12\");\n X(\"Predictor13\", \"PredictorAdd13\");\n var fe = self.PredictorAdd2;\n ec(\n \"ColorIndexInverseTransform\",\n \"MapARGB\",\n \"32b\",\n function(a) {\n return (a >> 8) & 255;\n },\n function(a) {\n return a;\n }\n );\n ec(\n \"VP8LColorIndexInverseTransformAlpha\",\n \"MapAlpha\",\n \"8b\",\n function(a) {\n return a;\n },\n function(a) {\n return (a >> 8) & 255;\n }\n );\n var rc = self.ColorIndexInverseTransform,\n ke = self.MapARGB,\n he = self.VP8LColorIndexInverseTransformAlpha,\n le = self.MapAlpha,\n pc,\n qc = (self.VP8LPredictorsAdd = []);\n qc.length = 16;\n (self.VP8LPredictors = []).length = 16;\n (self.VP8LPredictorsAdd_C = []).length = 16;\n (self.VP8LPredictors_C = []).length = 16;\n var Fb,\n sc,\n Gb,\n Hb,\n xc,\n uc,\n bd = V(511),\n cd = V(2041),\n dd = V(225),\n ed = V(767),\n ad = 0,\n Qb = cd,\n mb = dd,\n R = ed,\n U = bd,\n Ca = 0,\n Ua = 1,\n tc = 2,\n Va = 3,\n ya = 4,\n Db = 5,\n wc = 6,\n zb = 7,\n Ab = 8,\n Ja = 9,\n Bb = 10,\n pe = [2, 3, 7],\n oe = [3, 3, 11],\n Dc = [280, 256, 256, 256, 40],\n qe = [0, 1, 1, 1, 0],\n ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n de = [\n 24,\n 7,\n 23,\n 25,\n 40,\n 6,\n 39,\n 41,\n 22,\n 26,\n 38,\n 42,\n 56,\n 5,\n 55,\n 57,\n 21,\n 27,\n 54,\n 58,\n 37,\n 43,\n 72,\n 4,\n 71,\n 73,\n 20,\n 28,\n 53,\n 59,\n 70,\n 74,\n 36,\n 44,\n 88,\n 69,\n 75,\n 52,\n 60,\n 3,\n 87,\n 89,\n 19,\n 29,\n 86,\n 90,\n 35,\n 45,\n 68,\n 76,\n 85,\n 91,\n 51,\n 61,\n 104,\n 2,\n 103,\n 105,\n 18,\n 30,\n 102,\n 106,\n 34,\n 46,\n 84,\n 92,\n 67,\n 77,\n 101,\n 107,\n 50,\n 62,\n 120,\n 1,\n 119,\n 121,\n 83,\n 93,\n 17,\n 31,\n 100,\n 108,\n 66,\n 78,\n 118,\n 122,\n 33,\n 47,\n 117,\n 123,\n 49,\n 63,\n 99,\n 109,\n 82,\n 94,\n 0,\n 116,\n 124,\n 65,\n 79,\n 16,\n 32,\n 98,\n 110,\n 48,\n 115,\n 125,\n 81,\n 95,\n 64,\n 114,\n 126,\n 97,\n 111,\n 80,\n 113,\n 127,\n 96,\n 112\n ],\n me = [\n 2954,\n 2956,\n 2958,\n 2962,\n 2970,\n 2986,\n 3018,\n 3082,\n 3212,\n 3468,\n 3980,\n 5004\n ],\n ie = 8,\n Lb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 17,\n 18,\n 19,\n 20,\n 20,\n 21,\n 21,\n 22,\n 22,\n 23,\n 23,\n 24,\n 25,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70,\n 71,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 79,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 91,\n 93,\n 95,\n 96,\n 98,\n 100,\n 101,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 118,\n 122,\n 124,\n 126,\n 128,\n 130,\n 132,\n 134,\n 136,\n 138,\n 140,\n 143,\n 145,\n 148,\n 151,\n 154,\n 157\n ],\n Mb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 60,\n 62,\n 64,\n 66,\n 68,\n 70,\n 72,\n 74,\n 76,\n 78,\n 80,\n 82,\n 84,\n 86,\n 88,\n 90,\n 92,\n 94,\n 96,\n 98,\n 100,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 119,\n 122,\n 125,\n 128,\n 131,\n 134,\n 137,\n 140,\n 143,\n 146,\n 149,\n 152,\n 155,\n 158,\n 161,\n 164,\n 167,\n 170,\n 173,\n 177,\n 181,\n 185,\n 189,\n 193,\n 197,\n 201,\n 205,\n 209,\n 213,\n 217,\n 221,\n 225,\n 229,\n 234,\n 239,\n 245,\n 249,\n 254,\n 259,\n 264,\n 269,\n 274,\n 279,\n 284\n ],\n oa = null,\n He = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n ],\n Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n Fe = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ]\n ],\n Ke = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36]\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111, 32, 75, 80],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22]\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22, 64, 171, 36, 225, 114],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51]\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82]\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73, 154],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47]\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98]\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26]\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160, 1],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40]\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128]\n ],\n [\n [190, 80, 35, 99, 180, 80, 126, 54, 45],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24]\n ]\n ],\n Ee = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ]\n ],\n Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n Nc,\n Y = [],\n W = [],\n ka = [],\n Za,\n fd,\n Nb,\n pa,\n Ob,\n Xc,\n Tc,\n Yc,\n Uc,\n Zc,\n Vc,\n $c,\n Wc,\n Rc,\n Pc,\n Sc,\n Qc,\n re = 1,\n Cc = 2,\n ia = [],\n za,\n vc,\n fc,\n Fc,\n P = [];\n va(\"UpsampleRgbLinePair\", Ga, 3);\n va(\"UpsampleBgrLinePair\", Tb, 3);\n va(\"UpsampleRgbaLinePair\", wd, 4);\n va(\"UpsampleBgraLinePair\", vd, 4);\n va(\"UpsampleArgbLinePair\", ud, 4);\n va(\"UpsampleRgba4444LinePair\", td, 2);\n va(\"UpsampleRgb565LinePair\", sd, 2);\n var Mf = self.UpsampleRgbLinePair,\n Nf = self.UpsampleBgrLinePair,\n nd = self.UpsampleRgbaLinePair,\n od = self.UpsampleBgraLinePair,\n pd = self.UpsampleArgbLinePair,\n qd = self.UpsampleRgba4444LinePair,\n Of = self.UpsampleRgb565LinePair,\n Wa = 16,\n Ba = 1 << (Wa - 1),\n ta = -227,\n Eb = 482,\n rd = 6,\n Pf = (256 << rd) - 1,\n jc = 0,\n Yd = V(256),\n ae = V(256),\n $d = V(256),\n Zd = V(256),\n be = V(Eb - ta),\n ce = V(Eb - ta);\n la(\"YuvToRgbRow\", Ga, 3);\n la(\"YuvToBgrRow\", Tb, 3);\n la(\"YuvToRgbaRow\", wd, 4);\n la(\"YuvToBgraRow\", vd, 4);\n la(\"YuvToArgbRow\", ud, 4);\n la(\"YuvToRgba4444Row\", td, 2);\n la(\"YuvToRgb565Row\", sd, 2);\n var zd = [\n 0,\n 4,\n 8,\n 12,\n 128,\n 132,\n 136,\n 140,\n 256,\n 260,\n 264,\n 268,\n 384,\n 388,\n 392,\n 396\n ],\n Ya = [0, 2, 8],\n Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n Ne = 1;\n this.WebPDecodeRGBA = function(a, b, c, d, e) {\n var f = Ua;\n var g = new Cf(),\n h = new Cb();\n g.ba = h;\n h.S = f;\n h.width = [h.width];\n h.height = [h.height];\n var k = h.width;\n var l = h.height,\n m = new Td();\n if (null == m || null == a) var n = 2;\n else\n x(null != m),\n (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n 0 != n\n ? (k = 0)\n : (null != k && (k[0] = m.width[0]),\n null != l && (l[0] = m.height[0]),\n (k = 1));\n if (k) {\n h.width = h.width[0];\n h.height = h.height[0];\n null != d && (d[0] = h.width);\n null != e && (e[0] = h.height);\n b: {\n d = new Oa();\n e = new md();\n e.data = a;\n e.w = b;\n e.ha = c;\n e.kd = 1;\n b = [0];\n x(null != e);\n a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n (0 == a || 7 == a) && b[0] && (a = 4);\n b = a;\n if (0 == b) {\n x(null != g);\n d.data = e.data;\n d.w = e.w + e.offset;\n d.ha = e.ha - e.offset;\n d.put = kc;\n d.ac = gc;\n d.bc = lc;\n d.ma = g;\n if (e.xa) {\n a = Bc();\n if (null == a) {\n g = 1;\n break b;\n }\n if (te(a, d)) {\n b = Cd(d.width, d.height, g.Oa, g.ba);\n if ((d = 0 == b)) {\n c: {\n d = a;\n d: for (;;) {\n if (null == d) {\n d = 0;\n break c;\n }\n x(null != d.s.yc);\n x(null != d.s.Ya);\n x(0 < d.s.Wb);\n c = d.l;\n x(null != c);\n e = c.ma;\n x(null != e);\n if (0 != d.xb) {\n d.ca = e.ba;\n d.tb = e.tb;\n x(null != d.ca);\n if (!hc(e.Oa, c, Va)) {\n d.a = 2;\n break d;\n }\n if (!Ec(d, c.width)) break d;\n if (c.da) break d;\n (c.da || hb(d.ca.S)) && Aa();\n 11 > d.ca.S ||\n (alert(\"todo:WebPInitConvertARGBToYUV\"),\n null != d.ca.f.kb.F && Aa());\n if (\n d.Pb &&\n 0 < d.s.ua &&\n null == d.s.vb.X &&\n !Zb(d.s.vb, d.s.Wa.Xa)\n ) {\n d.a = 1;\n break d;\n }\n d.xb = 0;\n }\n if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n e.Dc = d.Ma;\n d = 1;\n break c;\n }\n x(0 != d.a);\n d = 0;\n }\n d = !d;\n }\n d && (b = a.a);\n } else b = a.a;\n } else {\n a = new Ce();\n if (null == a) {\n g = 1;\n break b;\n }\n a.Fa = e.na;\n a.P = e.P;\n a.qc = e.Sa;\n if (Kc(a, d)) {\n if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n a.Aa = 0;\n c = g.Oa;\n e = a;\n x(null != e);\n if (null != c) {\n k = c.Md;\n k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n if (0 < k) {\n for (l = m = 0; 4 > l; ++l)\n (n = e.pb[l]),\n 12 > n.lc &&\n (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n (m |= n.ia);\n m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n }\n e.Ga = c.Id;\n 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n }\n Me(a, d) || (b = a.a);\n }\n } else b = a.a;\n }\n 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n }\n g = b;\n }\n f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n } else f = null;\n return f;\n };\n var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n };\n new _WebPDecoder();\n\n /** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n function memcmp(data, data_off, str, size) {\n for (var i = 0; i < size; i++)\n if (data[data_off + i] != str.charCodeAt(i)) return true;\n return false;\n }\n\n function GetTag(data, data_off) {\n var str = \"\";\n for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n return str;\n }\n\n function GetLE16(data, data_off) {\n return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n }\n\n function GetLE24(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16)) >>>\n 0\n );\n }\n\n function GetLE32(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16) |\n (data[data_off + 3] << 24)) >>>\n 0\n );\n }\n\n function WebPRiffParser(src, src_off) {\n var imagearray = {};\n var i = 0;\n var alpha_chunk = false;\n var alpha_size = 0;\n var alpha_offset = 0;\n imagearray[\"frames\"] = [];\n if (memcmp(src, src_off, \"RIFF\", 4)) return;\n src_off += 4;\n var riff_size = GetLE32(src, src_off) + 8;\n src_off += 8;\n\n while (src_off < src.length) {\n var fourcc = GetTag(src, src_off);\n src_off += 4;\n\n var payload_size = GetLE32(src, src_off);\n src_off += 4;\n var payload_size_padded = payload_size + (payload_size & 1);\n\n switch (fourcc) {\n case \"VP8 \":\n case \"VP8L\":\n if (typeof imagearray[\"frames\"][i] === \"undefined\")\n imagearray[\"frames\"][i] = {};\n var obj = imagearray[\"frames\"][i];\n var height = [0];\n var width = [0];\n obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n obj[\"src_size\"] = alpha_size + payload_size + 8;\n //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n i++;\n if (alpha_chunk) {\n alpha_chunk = false;\n alpha_size = 0;\n alpha_offset = 0;\n }\n break;\n case \"VP8X\":\n var obj = (imagearray[\"header\"] = {});\n var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n var src_off_ = src_off + 4;\n var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n var canvas_height = (obj[\"canvas_height\"] =\n 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n break;\n case \"ALPH\":\n alpha_chunk = true;\n alpha_size = payload_size_padded + 8;\n alpha_offset = src_off - 8;\n break;\n\n case \"ANIM\":\n var obj = imagearray[\"header\"];\n var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n src_off_ = src_off + 4;\n\n var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n src_off_ += 2;\n break;\n case \"ANMF\":\n var offset_x = 0,\n offset_y = 0,\n width = 0,\n height = 0,\n duration = 0,\n blend = 0,\n dispose = 0,\n temp = 0;\n var obj = (imagearray[\"frames\"][i] = {});\n obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"duration\"] = duration = GetLE24(src, src_off);\n src_off += 3;\n temp = src[src_off++];\n obj[\"dispose\"] = dispose = temp & 1;\n obj[\"blend\"] = blend = (temp >> 1) & 1;\n break;\n default:\n }\n if (fourcc != \"ANMF\") src_off += payload_size_padded;\n }\n return imagearray;\n }\n\n var height = [0];\n var width = [0];\n var pixels = [];\n var webpdecoder = new _WebPDecoder();\n\n var response = imageData;\n var imagearray = WebPRiffParser(response, 0);\n imagearray[\"response\"] = response;\n imagearray[\"rgbaoutput\"] = true;\n imagearray[\"dataurl\"] = false;\n\n var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n if (header) {\n header[\"loop_counter\"] = header[\"loop_count\"];\n height = [header[\"canvas_height\"]];\n width = [header[\"canvas_width\"]];\n\n var blend = false;\n for (var f = 0; f < frames.length; f++)\n if (frames[f][\"blend\"] == 0) {\n blend = true;\n break;\n }\n }\n\n var frame = frames[0];\n var rgba = webpdecoder.WebPDecodeRGBA(\n response,\n frame[\"src_off\"],\n frame[\"src_size\"],\n width,\n height\n );\n frame[\"rgba\"] = rgba;\n frame[\"imgwidth\"] = width[0];\n frame[\"imgheight\"] = height[0];\n\n for (var i = 0; i < width[0] * height[0] * 4; i++) {\n pixels[i] = rgba[i];\n }\n\n this.width = width;\n this.height = height;\n this.data = pixels;\n return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n var reader = new WebPDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name processRGBA\n * @function\n *\n * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n * RGBA array data can be obtained from DOM canvas getImageData.\n * @ignore\n */\n jsPDFAPI.processRGBA = function(imageData, index, alias) {\n \"use strict\";\n\n var imagePixels = imageData.data;\n var length = imagePixels.length;\n // jsPDF takes alpha data separately so extract that.\n var rgbOut = new Uint8Array((length / 4) * 3);\n var alphaOut = new Uint8Array(length / 4);\n var outIndex = 0;\n var alphaIndex = 0;\n\n for (var i = 0; i < length; i += 4) {\n var r = imagePixels[i];\n var g = imagePixels[i + 1];\n var b = imagePixels[i + 2];\n var alpha = imagePixels[i + 3];\n rgbOut[outIndex++] = r;\n rgbOut[outIndex++] = g;\n rgbOut[outIndex++] = b;\n alphaOut[alphaIndex++] = alpha;\n }\n\n var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n return {\n alpha: alphaData,\n data: rgbData,\n index: index,\n alias: alias,\n colorSpace: \"DeviceRGB\",\n bitsPerComponent: 8,\n width: imageData.width,\n height: imageData.height\n };\n };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Add Language Tag to the generated PDF\n *\n * @name setLanguage\n * @function\n * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF()\n * doc.text(10, 10, 'This is a test')\n * doc.setLanguage(\"en-US\")\n * doc.save('english.pdf')\n */\n jsPDFAPI.setLanguage = function(langCode) {\n \"use strict\";\n\n var langCodes = {\n af: \"Afrikaans\",\n sq: \"Albanian\",\n ar: \"Arabic (Standard)\",\n \"ar-DZ\": \"Arabic (Algeria)\",\n \"ar-BH\": \"Arabic (Bahrain)\",\n \"ar-EG\": \"Arabic (Egypt)\",\n \"ar-IQ\": \"Arabic (Iraq)\",\n \"ar-JO\": \"Arabic (Jordan)\",\n \"ar-KW\": \"Arabic (Kuwait)\",\n \"ar-LB\": \"Arabic (Lebanon)\",\n \"ar-LY\": \"Arabic (Libya)\",\n \"ar-MA\": \"Arabic (Morocco)\",\n \"ar-OM\": \"Arabic (Oman)\",\n \"ar-QA\": \"Arabic (Qatar)\",\n \"ar-SA\": \"Arabic (Saudi Arabia)\",\n \"ar-SY\": \"Arabic (Syria)\",\n \"ar-TN\": \"Arabic (Tunisia)\",\n \"ar-AE\": \"Arabic (U.A.E.)\",\n \"ar-YE\": \"Arabic (Yemen)\",\n an: \"Aragonese\",\n hy: \"Armenian\",\n as: \"Assamese\",\n ast: \"Asturian\",\n az: \"Azerbaijani\",\n eu: \"Basque\",\n be: \"Belarusian\",\n bn: \"Bengali\",\n bs: \"Bosnian\",\n br: \"Breton\",\n bg: \"Bulgarian\",\n my: \"Burmese\",\n ca: \"Catalan\",\n ch: \"Chamorro\",\n ce: \"Chechen\",\n zh: \"Chinese\",\n \"zh-HK\": \"Chinese (Hong Kong)\",\n \"zh-CN\": \"Chinese (PRC)\",\n \"zh-SG\": \"Chinese (Singapore)\",\n \"zh-TW\": \"Chinese (Taiwan)\",\n cv: \"Chuvash\",\n co: \"Corsican\",\n cr: \"Cree\",\n hr: \"Croatian\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch (Standard)\",\n \"nl-BE\": \"Dutch (Belgian)\",\n en: \"English\",\n \"en-AU\": \"English (Australia)\",\n \"en-BZ\": \"English (Belize)\",\n \"en-CA\": \"English (Canada)\",\n \"en-IE\": \"English (Ireland)\",\n \"en-JM\": \"English (Jamaica)\",\n \"en-NZ\": \"English (New Zealand)\",\n \"en-PH\": \"English (Philippines)\",\n \"en-ZA\": \"English (South Africa)\",\n \"en-TT\": \"English (Trinidad & Tobago)\",\n \"en-GB\": \"English (United Kingdom)\",\n \"en-US\": \"English (United States)\",\n \"en-ZW\": \"English (Zimbabwe)\",\n eo: \"Esperanto\",\n et: \"Estonian\",\n fo: \"Faeroese\",\n fj: \"Fijian\",\n fi: \"Finnish\",\n fr: \"French (Standard)\",\n \"fr-BE\": \"French (Belgium)\",\n \"fr-CA\": \"French (Canada)\",\n \"fr-FR\": \"French (France)\",\n \"fr-LU\": \"French (Luxembourg)\",\n \"fr-MC\": \"French (Monaco)\",\n \"fr-CH\": \"French (Switzerland)\",\n fy: \"Frisian\",\n fur: \"Friulian\",\n gd: \"Gaelic (Scots)\",\n \"gd-IE\": \"Gaelic (Irish)\",\n gl: \"Galacian\",\n ka: \"Georgian\",\n de: \"German (Standard)\",\n \"de-AT\": \"German (Austria)\",\n \"de-DE\": \"German (Germany)\",\n \"de-LI\": \"German (Liechtenstein)\",\n \"de-LU\": \"German (Luxembourg)\",\n \"de-CH\": \"German (Switzerland)\",\n el: \"Greek\",\n gu: \"Gujurati\",\n ht: \"Haitian\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n is: \"Icelandic\",\n id: \"Indonesian\",\n iu: \"Inuktitut\",\n ga: \"Irish\",\n it: \"Italian (Standard)\",\n \"it-CH\": \"Italian (Switzerland)\",\n ja: \"Japanese\",\n kn: \"Kannada\",\n ks: \"Kashmiri\",\n kk: \"Kazakh\",\n km: \"Khmer\",\n ky: \"Kirghiz\",\n tlh: \"Klingon\",\n ko: \"Korean\",\n \"ko-KP\": \"Korean (North Korea)\",\n \"ko-KR\": \"Korean (South Korea)\",\n la: \"Latin\",\n lv: \"Latvian\",\n lt: \"Lithuanian\",\n lb: \"Luxembourgish\",\n mk: \"North Macedonia\",\n ms: \"Malay\",\n ml: \"Malayalam\",\n mt: \"Maltese\",\n mi: \"Maori\",\n mr: \"Marathi\",\n mo: \"Moldavian\",\n nv: \"Navajo\",\n ng: \"Ndonga\",\n ne: \"Nepali\",\n no: \"Norwegian\",\n nb: \"Norwegian (Bokmal)\",\n nn: \"Norwegian (Nynorsk)\",\n oc: \"Occitan\",\n or: \"Oriya\",\n om: \"Oromo\",\n fa: \"Persian\",\n \"fa-IR\": \"Persian/Iran\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n \"pt-BR\": \"Portuguese (Brazil)\",\n pa: \"Punjabi\",\n \"pa-IN\": \"Punjabi (India)\",\n \"pa-PK\": \"Punjabi (Pakistan)\",\n qu: \"Quechua\",\n rm: \"Rhaeto-Romanic\",\n ro: \"Romanian\",\n \"ro-MO\": \"Romanian (Moldavia)\",\n ru: \"Russian\",\n \"ru-MO\": \"Russian (Moldavia)\",\n sz: \"Sami (Lappish)\",\n sg: \"Sango\",\n sa: \"Sanskrit\",\n sc: \"Sardinian\",\n sd: \"Sindhi\",\n si: \"Singhalese\",\n sr: \"Serbian\",\n sk: \"Slovak\",\n sl: \"Slovenian\",\n so: \"Somani\",\n sb: \"Sorbian\",\n es: \"Spanish\",\n \"es-AR\": \"Spanish (Argentina)\",\n \"es-BO\": \"Spanish (Bolivia)\",\n \"es-CL\": \"Spanish (Chile)\",\n \"es-CO\": \"Spanish (Colombia)\",\n \"es-CR\": \"Spanish (Costa Rica)\",\n \"es-DO\": \"Spanish (Dominican Republic)\",\n \"es-EC\": \"Spanish (Ecuador)\",\n \"es-SV\": \"Spanish (El Salvador)\",\n \"es-GT\": \"Spanish (Guatemala)\",\n \"es-HN\": \"Spanish (Honduras)\",\n \"es-MX\": \"Spanish (Mexico)\",\n \"es-NI\": \"Spanish (Nicaragua)\",\n \"es-PA\": \"Spanish (Panama)\",\n \"es-PY\": \"Spanish (Paraguay)\",\n \"es-PE\": \"Spanish (Peru)\",\n \"es-PR\": \"Spanish (Puerto Rico)\",\n \"es-ES\": \"Spanish (Spain)\",\n \"es-UY\": \"Spanish (Uruguay)\",\n \"es-VE\": \"Spanish (Venezuela)\",\n sx: \"Sutu\",\n sw: \"Swahili\",\n sv: \"Swedish\",\n \"sv-FI\": \"Swedish (Finland)\",\n \"sv-SV\": \"Swedish (Sweden)\",\n ta: \"Tamil\",\n tt: \"Tatar\",\n te: \"Teluga\",\n th: \"Thai\",\n tig: \"Tigre\",\n ts: \"Tsonga\",\n tn: \"Tswana\",\n tr: \"Turkish\",\n tk: \"Turkmen\",\n uk: \"Ukrainian\",\n hsb: \"Upper Sorbian\",\n ur: \"Urdu\",\n ve: \"Venda\",\n vi: \"Vietnamese\",\n vo: \"Volapuk\",\n wa: \"Walloon\",\n cy: \"Welsh\",\n xh: \"Xhosa\",\n ji: \"Yiddish\",\n zu: \"Zulu\"\n };\n\n if (this.internal.languageSettings === undefined) {\n this.internal.languageSettings = {};\n this.internal.languageSettings.isSubscribed = false;\n }\n\n if (langCodes[langCode] !== undefined) {\n this.internal.languageSettings.languageCode = langCode;\n if (this.internal.languageSettings.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.write(\n \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n );\n });\n this.internal.languageSettings.isSubscribed = true;\n }\n }\n return this;\n };\n})(jsPDF.API);\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n \"use strict\";\n /**\n * Returns an array of length matching length of the 'word' string, with each\n * cell occupied by the width of the char in that position.\n *\n * @name getCharWidthsArray\n * @function\n * @param {string} text\n * @param {Object} options\n * @returns {Array}\n */\n var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n options = options || {};\n\n var activeFont = options.font || this.internal.getFont();\n var fontSize = options.fontSize || this.internal.getFontSize();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n\n var widths = options.widths\n ? options.widths\n : activeFont.metadata.Unicode.widths;\n var widthsFractionOf = widths.fof ? widths.fof : 1;\n var kerning = options.kerning\n ? options.kerning\n : activeFont.metadata.Unicode.kerning;\n var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n var doKerning = options.doKerning === false ? false : true;\n var kerningValue = 0;\n\n var i;\n var length = text.length;\n var char_code;\n var prior_char_code = 0; //for kerning\n var default_char_width = widths[0] || widthsFractionOf;\n var output = [];\n\n for (i = 0; i < length; i++) {\n char_code = text.charCodeAt(i);\n\n if (typeof activeFont.metadata.widthOfString === \"function\") {\n output.push(\n (activeFont.metadata.widthOfGlyph(\n activeFont.metadata.characterToGlyph(char_code)\n ) +\n charSpace * (1000 / fontSize) || 0) / 1000\n );\n } else {\n if (\n doKerning &&\n typeof kerning[char_code] === \"object\" &&\n !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n ) {\n kerningValue =\n kerning[char_code][prior_char_code] / kerningFractionOf;\n } else {\n kerningValue = 0;\n }\n output.push(\n (widths[char_code] || default_char_width) / widthsFractionOf +\n kerningValue\n );\n }\n prior_char_code = char_code;\n }\n\n return output;\n });\n\n /**\n * Returns a widths of string in a given font, if the font size is set as 1 point.\n *\n * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n * of the string will be that much.\n *\n * Multiply by font size to get actual width in *points*\n * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n *\n * @name getStringUnitWidth\n * @public\n * @function\n * @param {string} text\n * @param {string} options\n * @returns {number} result\n */\n var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n options = options || {};\n\n var fontSize = options.fontSize || this.internal.getFontSize();\n var font = options.font || this.internal.getFont();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n var result = 0;\n\n if (API.processArabic) {\n text = API.processArabic(text);\n }\n\n if (typeof font.metadata.widthOfString === \"function\") {\n result =\n font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n } else {\n result = getCharWidthsArray\n .apply(this, arguments)\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n }\n return result;\n });\n\n /**\n returns array of lines\n */\n var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n var answer = [];\n\n // 1st, chop off the piece that can fit on the hanging line.\n var i = 0,\n l = word.length,\n workingLen = 0;\n while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n workingLen += widths_array[i];\n i++;\n }\n // this is first line.\n answer.push(word.slice(0, i));\n\n // 2nd. Split the rest into maxLen pieces.\n var startOfLine = i;\n workingLen = 0;\n while (i !== l) {\n if (workingLen + widths_array[i] > maxLen) {\n answer.push(word.slice(startOfLine, i));\n workingLen = 0;\n startOfLine = i;\n }\n workingLen += widths_array[i];\n i++;\n }\n if (startOfLine !== i) {\n answer.push(word.slice(startOfLine, i));\n }\n\n return answer;\n };\n\n // Note, all sizing inputs for this function must be in \"font measurement units\"\n // By default, for PDF, it's \"point\".\n var splitParagraphIntoLines = function(text, maxlen, options) {\n // at this time works only on Western scripts, ones with space char\n // separating the words. Feel free to expand.\n\n if (!options) {\n options = {};\n }\n\n var line = [],\n lines = [line],\n line_length = options.textIndent || 0,\n separator_length = 0,\n current_word_length = 0,\n word,\n widths_array,\n words = text.split(\" \"),\n spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n i,\n l,\n tmp,\n lineIndent;\n\n if (options.lineIndent === -1) {\n lineIndent = words[0].length + 2;\n } else {\n lineIndent = options.lineIndent || 0;\n }\n if (lineIndent) {\n var pad = Array(lineIndent).join(\" \"),\n wrds = [];\n words.map(function(wrd) {\n wrd = wrd.split(/\\s*\\n/);\n if (wrd.length > 1) {\n wrds = wrds.concat(\n wrd.map(function(wrd, idx) {\n return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n })\n );\n } else {\n wrds.push(wrd[0]);\n }\n });\n words = wrds;\n lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n }\n\n for (i = 0, l = words.length; i < l; i++) {\n var force = 0;\n\n word = words[i];\n if (lineIndent && word[0] == \"\\n\") {\n word = word.substr(1);\n force = 1;\n }\n widths_array = getCharWidthsArray.apply(this, [word, options]);\n current_word_length = widths_array.reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n\n if (\n line_length + separator_length + current_word_length > maxlen ||\n force\n ) {\n if (current_word_length > maxlen) {\n // this happens when you have space-less long URLs for example.\n // we just chop these to size. We do NOT insert hiphens\n tmp = splitLongWord.apply(this, [\n word,\n widths_array,\n maxlen - (line_length + separator_length),\n maxlen\n ]);\n // first line we add to existing line object\n line.push(tmp.shift()); // it's ok to have extra space indicator there\n // last line we make into new line object\n line = [tmp.pop()];\n // lines in the middle we apped to lines object as whole lines\n while (tmp.length) {\n lines.push([tmp.shift()]); // single fragment occupies whole line\n }\n current_word_length = widths_array\n .slice(word.length - (line[0] ? line[0].length : 0))\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n } else {\n // just put it on a new line\n line = [word];\n }\n\n // now we attach new line to lines\n lines.push(line);\n line_length = current_word_length + lineIndent;\n separator_length = spaceCharWidth;\n } else {\n line.push(word);\n\n line_length += separator_length + current_word_length;\n separator_length = spaceCharWidth;\n }\n }\n\n var postProcess;\n if (lineIndent) {\n postProcess = function(ln, idx) {\n return (idx ? pad : \"\") + ln.join(\" \");\n };\n } else {\n postProcess = function(ln) {\n return ln.join(\" \");\n };\n }\n\n return lines.map(postProcess);\n };\n\n /**\n * Splits a given string into an array of strings. Uses 'size' value\n * (in measurement units declared as default for the jsPDF instance)\n * and the font's \"widths\" and \"Kerning\" tables, where available, to\n * determine display length of a given string for a given font.\n *\n * We use character's 100% of unit size (height) as width when Width\n * table or other default width is not available.\n *\n * @name splitTextToSize\n * @public\n * @function\n * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n * @param {Object} options Optional flags needed for chopper to do the right thing.\n * @returns {Array} array Array with strings chopped to size.\n */\n API.splitTextToSize = function(text, maxlen, options) {\n \"use strict\";\n\n options = options || {};\n\n var fsize = options.fontSize || this.internal.getFontSize(),\n newOptions = function(options) {\n var widths = {\n 0: 1\n },\n kerning = {};\n\n if (!options.widths || !options.kerning) {\n var f = this.internal.getFont(options.fontName, options.fontStyle),\n encoding = \"Unicode\";\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n // Actual JavaScript-native String's 16bit char codes used.\n // no multi-byte logic here\n\n if (f.metadata[encoding]) {\n return {\n widths: f.metadata[encoding].widths || widths,\n kerning: f.metadata[encoding].kerning || kerning\n };\n } else {\n return {\n font: f.metadata,\n fontSize: this.internal.getFontSize(),\n charSpace: this.internal.getCharSpace()\n };\n }\n } else {\n return {\n widths: options.widths,\n kerning: options.kerning\n };\n }\n }.call(this, options);\n\n // first we split on end-of-line chars\n var paragraphs;\n if (Array.isArray(text)) {\n paragraphs = text;\n } else {\n paragraphs = String(text).split(/\\r?\\n/);\n }\n\n // now we convert size (max length of line) into \"font size units\"\n // at present time, the \"font size unit\" is always 'point'\n // 'proportional' means, \"in proportion to font size\"\n var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n // this may change in the future?\n // until then, proportional_maxlen is likely to be in 'points'\n\n // If first line is to be indented (shorter or longer) than maxLen\n // we indicate that by using CSS-style \"text-indent\" option.\n // here it's in font units too (which is likely 'points')\n // it can be negative (which makes the first line longer than maxLen)\n newOptions.textIndent = options.textIndent\n ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n : 0;\n newOptions.lineIndent = options.lineIndent;\n\n var i,\n l,\n output = [];\n for (i = 0, l = paragraphs.length; i < l; i++) {\n output = output.concat(\n splitParagraphIntoLines.apply(this, [\n paragraphs[i],\n fontUnit_maxLen,\n newOptions\n ])\n );\n }\n\n return output;\n };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n \"use strict\";\n API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n var decoded = \"0123456789abcdef\",\n encoded = \"klmnopqrstuvwxyz\",\n mappingUncompress = {},\n mappingCompress = {};\n\n for (var i = 0; i < encoded.length; i++) {\n mappingUncompress[encoded[i]] = decoded[i];\n mappingCompress[decoded[i]] = encoded[i];\n }\n\n var hex = function(value) {\n return \"0x\" + parseInt(value, 10).toString(16);\n };\n\n var compress = (API.__fontmetrics__.compress = function(data) {\n var vals = [\"{\"];\n var value, keystring, valuestring, numberprefix;\n\n for (var key in data) {\n value = data[key];\n\n if (!isNaN(parseInt(key, 10))) {\n key = parseInt(key, 10);\n keystring = hex(key).slice(2);\n keystring =\n keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n } else {\n keystring = \"'\" + key + \"'\";\n }\n\n if (typeof value == \"number\") {\n if (value < 0) {\n valuestring = hex(value).slice(3);\n numberprefix = \"-\";\n } else {\n valuestring = hex(value).slice(2);\n numberprefix = \"\";\n }\n valuestring =\n numberprefix +\n valuestring.slice(0, -1) +\n mappingCompress[valuestring.slice(-1)];\n } else {\n if (typeof value === \"object\") {\n valuestring = compress(value);\n } else {\n throw new Error(\n \"Don't know what to do with value type \" + typeof value + \".\"\n );\n }\n }\n vals.push(keystring + valuestring);\n }\n vals.push(\"}\");\n return vals.join(\"\");\n });\n\n /**\n * Uncompresses data compressed into custom, base16-like format.\n *\n * @public\n * @function\n * @param\n * @returns {Type}\n */\n var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n if (typeof data !== \"string\") {\n throw new Error(\"Invalid argument passed to uncompress.\");\n }\n\n var output = {},\n sign = 1,\n stringparts, // undef. will be [] in string mode\n activeobject = output,\n parentchain = [],\n parent_key_pair,\n keyparts = \"\",\n valueparts = \"\",\n key, // undef. will be Truthy when Key is resolved.\n datalen = data.length - 1, // stripping ending }\n ch;\n\n for (var i = 1; i < datalen; i += 1) {\n // - { } ' are special.\n\n ch = data[i];\n\n if (ch == \"'\") {\n if (stringparts) {\n // end of string mode\n key = stringparts.join(\"\");\n stringparts = undefined;\n } else {\n // start of string mode\n stringparts = [];\n }\n } else if (stringparts) {\n stringparts.push(ch);\n } else if (ch == \"{\") {\n // start of object\n parentchain.push([activeobject, key]);\n activeobject = {};\n key = undefined;\n } else if (ch == \"}\") {\n // end of object\n parent_key_pair = parentchain.pop();\n parent_key_pair[0][parent_key_pair[1]] = activeobject;\n key = undefined;\n activeobject = parent_key_pair[0];\n } else if (ch == \"-\") {\n sign = -1;\n } else {\n // must be number\n if (key === undefined) {\n if (mappingUncompress.hasOwnProperty(ch)) {\n keyparts += mappingUncompress[ch];\n key = parseInt(keyparts, 16) * sign;\n sign = +1;\n keyparts = \"\";\n } else {\n keyparts += ch;\n }\n } else {\n if (mappingUncompress.hasOwnProperty(ch)) {\n valueparts += mappingUncompress[ch];\n activeobject[key] = parseInt(valueparts, 16) * sign;\n sign = +1;\n key = undefined;\n valueparts = \"\";\n } else {\n valueparts += ch;\n }\n }\n }\n }\n return output;\n });\n\n // encoding = 'Unicode'\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n // Actual 16bit char codes used.\n // no multi-byte logic here\n\n // Unicode characters to WinAnsiEncoding:\n // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n // as well as give strings with some (supported by these fonts) Unicode characters and\n // these will be mapped to win cp1252\n // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n var encodingBlock = {\n codePages: [\"WinAnsiEncoding\"],\n WinAnsiEncoding: uncompress(\n \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n )\n };\n var encodings = {\n Unicode: {\n Courier: encodingBlock,\n \"Courier-Bold\": encodingBlock,\n \"Courier-BoldOblique\": encodingBlock,\n \"Courier-Oblique\": encodingBlock,\n Helvetica: encodingBlock,\n \"Helvetica-Bold\": encodingBlock,\n \"Helvetica-BoldOblique\": encodingBlock,\n \"Helvetica-Oblique\": encodingBlock,\n \"Times-Roman\": encodingBlock,\n \"Times-Bold\": encodingBlock,\n \"Times-BoldItalic\": encodingBlock,\n \"Times-Italic\": encodingBlock\n //\t, 'Symbol'\n //\t, 'ZapfDingbats'\n }\n };\n\n var fontMetrics = {\n Unicode: {\n // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n // width is 476/1000 or 47.6% of its height (regardless of font size)\n // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n \"Courier-Oblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-BoldItalic\": uncompress(\n \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n \"Helvetica-Bold\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-BoldOblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-Bold\": uncompress(\n \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n Symbol: uncompress(\n \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n ),\n Helvetica: uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n ),\n \"Helvetica-BoldOblique\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Times-Italic\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n ),\n \"Times-Roman\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n ),\n \"Helvetica-Oblique\": uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n )\n }\n };\n\n /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n API.events.push([\n \"addFont\",\n function(data) {\n var font = data.font;\n\n var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n if (metrics) {\n font.metadata[\"Unicode\"] = {};\n font.metadata[\"Unicode\"].widths = metrics.widths;\n font.metadata[\"Unicode\"].kerning = metrics.kerning;\n }\n\n var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n if (encodingBlock) {\n font.metadata[\"Unicode\"].encoding = encodingBlock;\n font.encoding = encodingBlock.codePages[0];\n }\n }\n ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n\n var binaryStringToUint8Array = function(binary_string) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n };\n\n var addFont = function(font, file) {\n // eslint-disable-next-line no-control-regex\n if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n file = binaryStringToUint8Array(file);\n } else {\n file = binaryStringToUint8Array(atob(file));\n }\n font.metadata = jsPDF.API.TTFFont.open(file);\n font.metadata.Unicode = font.metadata.Unicode || {\n encoding: {},\n kerning: {},\n widths: []\n };\n font.metadata.glyIdsUsed = [0];\n };\n\n jsPDF.API.events.push([\n \"addFont\",\n function(data) {\n var file = undefined;\n var font = data.font;\n var instance = data.instance;\n if (font.isStandardFont) {\n return;\n }\n if (typeof instance !== \"undefined\") {\n if (instance.existsFileInVFS(font.postScriptName) === false) {\n file = instance.loadFile(font.postScriptName);\n } else {\n file = instance.getFileFromVFS(font.postScriptName);\n }\n if (typeof file !== \"string\") {\n throw new Error(\n \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n addFont(font, file);\n } else {\n throw new Error(\n \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n }\n ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadCanvg() {\n return (function() {\n if (globalObject[\"canvg\"]) {\n return Promise.resolve(globalObject[\"canvg\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"canvg\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"canvg\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load canvg\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load canvg: \" + e));\n })\n .then(function(canvg) {\n return canvg.default ? canvg.default : canvg;\n });\n }\n\n /**\n * Parses SVG XML and saves it as image into the PDF.\n *\n * Depends on canvas-element and canvg\n *\n * @name addSvgAsImage\n * @public\n * @function\n * @param {string} SVG-Data as Text\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n * @param {string} alias of SVG-Image (if used multiple times)\n * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation of the image in degrees (0-359)\n *\n * @returns jsPDF jsPDF-instance\n */\n jsPDFAPI.addSvgAsImage = function(\n svg,\n x,\n y,\n w,\n h,\n alias,\n compression,\n rotation\n ) {\n if (isNaN(x) || isNaN(y)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n }\n\n if (isNaN(w) || isNaN(h)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n throw new Error(\n \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n );\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"#fff\"; /// set white fill style\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var options = {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true\n };\n var doc = this;\n return loadCanvg()\n .then(\n function(canvg) {\n return canvg.fromString(ctx, svg, options);\n },\n function() {\n return Promise.reject(new Error(\"Could not load canvg.\"));\n }\n )\n .then(function(instance) {\n return instance.render(options);\n })\n .then(function() {\n doc.addImage(\n canvas.toDataURL(\"image/jpeg\", 1.0),\n x,\n y,\n w,\n h,\n compression,\n rotation\n );\n });\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * @name putTotalPages\n * @function\n * @param {string} pageExpression Regular Expression\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.putTotalPages = function(pageExpression) {\n \"use strict\";\n\n var replaceExpression;\n var totalNumberOfPages = 0;\n if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n replaceExpression = new RegExp(pageExpression, \"g\");\n totalNumberOfPages = this.internal.getNumberOfPages();\n } else {\n replaceExpression = new RegExp(\n this.pdfEscape16(pageExpression, this.internal.getFont()),\n \"g\"\n );\n totalNumberOfPages = this.pdfEscape16(\n this.internal.getNumberOfPages() + \"\",\n this.internal.getFont()\n );\n }\n\n for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n for (var i = 0; i < this.internal.pages[n].length; i++) {\n this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n replaceExpression,\n totalNumberOfPages\n );\n }\n }\n\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * Set the ViewerPreferences of the generated PDF\n *\n * @name viewerPreferences\n * @function\n * @public\n * @param {Object} options Array with the ViewerPreferences
    \n * Example: doc.viewerPreferences({\"FitWindow\":true});
    \n *
    \n * You can set following preferences:
    \n *
    \n * HideToolbar (boolean)
    \n * Default value: false
    \n *
    \n * HideMenubar (boolean)
    \n * Default value: false.
    \n *
    \n * HideWindowUI (boolean)
    \n * Default value: false.
    \n *
    \n * FitWindow (boolean)
    \n * Default value: false.
    \n *
    \n * CenterWindow (boolean)
    \n * Default value: false
    \n *
    \n * DisplayDocTitle (boolean)
    \n * Default value: false.
    \n *
    \n * NonFullScreenPageMode (string)
    \n * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    \n * Default value: UseNone
    \n *
    \n * Direction (string)
    \n * Possible values: L2R, R2L
    \n * Default value: L2R.
    \n *
    \n * ViewArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * ViewClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * PrintScaling (string)
    \n * Possible values: AppDefault, None
    \n * Default value: AppDefault.
    \n *
    \n * Duplex (string)
    \n * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n * Default value: none
    \n *
    \n * PickTrayByPDFSize (boolean)
    \n * Default value: false
    \n *
    \n * PrintPageRange (Array)
    \n * Example: [[1,5], [7,9]]
    \n * Default value: as defined by PDF viewer application
    \n *
    \n * NumCopies (Number)
    \n * Possible values: 1, 2, 3, 4, 5
    \n * Default value: 1
    \n *
    \n * For more information see the PDF Reference, sixth edition on Page 577\n * @param {boolean} doReset True to reset the settings\n * @function\n * @returns jsPDF jsPDF-instance\n * @example\n * var doc = new jsPDF()\n * doc.text('This is a test', 10, 10)\n * doc.viewerPreferences({'FitWindow': true}, true)\n * doc.save(\"viewerPreferences.pdf\")\n *\n * // Example printing 10 copies, using cropbox, and hiding UI.\n * doc.viewerPreferences({\n * 'HideWindowUI': true,\n * 'PrintArea': 'CropBox',\n * 'NumCopies': 10\n * })\n */\n jsPDFAPI.viewerPreferences = function(options, doReset) {\n options = options || {};\n doReset = doReset || false;\n\n var configuration;\n var configurationTemplate = {\n HideToolbar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideMenubar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideWindowUI: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n FitWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n CenterWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n DisplayDocTitle: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.4\n },\n NonFullScreenPageMode: {\n defaultValue: \"UseNone\",\n value: \"UseNone\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n pdfVersion: 1.3\n },\n Direction: {\n defaultValue: \"L2R\",\n value: \"L2R\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"L2R\", \"R2L\"],\n pdfVersion: 1.3\n },\n ViewArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n ViewClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintScaling: {\n defaultValue: \"AppDefault\",\n value: \"AppDefault\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"AppDefault\", \"None\"],\n pdfVersion: 1.6\n },\n Duplex: {\n defaultValue: \"\",\n value: \"none\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\n \"Simplex\",\n \"DuplexFlipShortEdge\",\n \"DuplexFlipLongEdge\",\n \"none\"\n ],\n pdfVersion: 1.7\n },\n PickTrayByPDFSize: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.7\n },\n PrintPageRange: {\n defaultValue: \"\",\n value: \"\",\n type: \"array\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n },\n NumCopies: {\n defaultValue: 1,\n value: 1,\n type: \"integer\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n }\n };\n\n var configurationKeys = Object.keys(configurationTemplate);\n\n var rangeArray = [];\n var i = 0;\n var j = 0;\n var k = 0;\n var isValid;\n\n var method;\n var value;\n\n function arrayContainsElement(array, element) {\n var iterator;\n var result = false;\n\n for (iterator = 0; iterator < array.length; iterator += 1) {\n if (array[iterator] === element) {\n result = true;\n }\n }\n return result;\n }\n\n if (this.internal.viewerpreferences === undefined) {\n this.internal.viewerpreferences = {};\n this.internal.viewerpreferences.configuration = JSON.parse(\n JSON.stringify(configurationTemplate)\n );\n this.internal.viewerpreferences.isSubscribed = false;\n }\n configuration = this.internal.viewerpreferences.configuration;\n\n if (options === \"reset\" || doReset === true) {\n var len = configurationKeys.length;\n\n for (k = 0; k < len; k += 1) {\n configuration[configurationKeys[k]].value =\n configuration[configurationKeys[k]].defaultValue;\n configuration[configurationKeys[k]].explicitSet = false;\n }\n }\n\n if (typeof options === \"object\") {\n for (method in options) {\n value = options[method];\n if (\n arrayContainsElement(configurationKeys, method) &&\n value !== undefined\n ) {\n if (\n configuration[method].type === \"boolean\" &&\n typeof value === \"boolean\"\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"name\" &&\n arrayContainsElement(configuration[method].valueSet, value)\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"integer\" &&\n Number.isInteger(value)\n ) {\n configuration[method].value = value;\n } else if (configuration[method].type === \"array\") {\n for (i = 0; i < value.length; i += 1) {\n isValid = true;\n if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n rangeArray.push(String(value[i] - 1));\n } else if (value[i].length > 1) {\n for (j = 0; j < value[i].length; j += 1) {\n if (typeof value[i][j] !== \"number\") {\n isValid = false;\n }\n }\n if (isValid === true) {\n rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n }\n }\n }\n configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n } else {\n configuration[method].value = configuration[method].defaultValue;\n }\n\n configuration[method].explicitSet = true;\n }\n }\n }\n\n if (this.internal.viewerpreferences.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n var pdfDict = [];\n var vPref;\n for (vPref in configuration) {\n if (configuration[vPref].explicitSet === true) {\n if (configuration[vPref].type === \"name\") {\n pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n } else {\n pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n }\n }\n }\n if (pdfDict.length !== 0) {\n this.internal.write(\n \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n );\n }\n });\n this.internal.viewerpreferences.isSubscribed = true;\n }\n\n this.internal.viewerpreferences.configuration = configuration;\n return this;\n };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var postPutResources = function() {\n var xmpmeta_beginning = '';\n var rdf_beginning =\n '';\n var rdf_ending = \"\";\n var xmpmeta_ending = \"\";\n var utf8_xmpmeta_beginning = unescape(\n encodeURIComponent(xmpmeta_beginning)\n );\n var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n var utf8_metadata = unescape(\n encodeURIComponent(this.internal.__metadata__.metadata)\n );\n var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n var total_len =\n utf8_rdf_beginning.length +\n utf8_metadata.length +\n utf8_rdf_ending.length +\n utf8_xmpmeta_beginning.length +\n utf8_xmpmeta_ending.length;\n\n this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n this.internal.write(\n \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n );\n this.internal.write(\"stream\");\n this.internal.write(\n utf8_xmpmeta_beginning +\n utf8_rdf_beginning +\n utf8_metadata +\n utf8_rdf_ending +\n utf8_xmpmeta_ending\n );\n this.internal.write(\"endstream\");\n this.internal.write(\"endobj\");\n };\n\n var putCatalog = function() {\n if (this.internal.__metadata__.metadata_object_number) {\n this.internal.write(\n \"/Metadata \" +\n this.internal.__metadata__.metadata_object_number +\n \" 0 R\"\n );\n }\n };\n\n /**\n * Adds XMP formatted metadata to PDF\n *\n * @name addMetadata\n * @function\n * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n * @returns {jsPDF} jsPDF-instance\n */\n jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n if (typeof this.internal.__metadata__ === \"undefined\") {\n this.internal.__metadata__ = {\n metadata: metadata,\n namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n };\n this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n this.internal.events.subscribe(\"postPutResources\", postPutResources);\n }\n return this;\n };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n var jsPDFAPI = jsPDF.API;\n\n /***************************************************************************************************/\n /* function : pdfEscape16 */\n /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n /* the corresponding glyph id and width, and then adding padding to the string. */\n /***************************************************************************************************/\n var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n var widths = font.metadata.Unicode.widths;\n var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n var ar = [\"\"];\n for (var i = 0, l = text.length, t; i < l; ++i) {\n t = font.metadata.characterToGlyph(text.charCodeAt(i));\n font.metadata.glyIdsUsed.push(t);\n font.metadata.toUnicode[t] = text.charCodeAt(i);\n if (widths.indexOf(t) == -1) {\n widths.push(t);\n widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n }\n if (t == \"0\") {\n //Spaces are not allowed in cmap.\n return ar.join(\"\");\n } else {\n t = t.toString(16);\n ar.push(padz[4 - t.length], t);\n }\n }\n return ar.join(\"\");\n });\n\n var toUnicodeCmap = function(map) {\n var code, codes, range, unicode, unicodeMap, _i, _len;\n unicodeMap =\n \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\";\n codes = Object.keys(map).sort(function(a, b) {\n return a - b;\n });\n\n range = [];\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (range.length >= 100) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\";\n range = [];\n }\n\n if (\n map[code] !== undefined &&\n map[code] !== null &&\n typeof map[code].toString === \"function\"\n ) {\n unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n code = (\"0000\" + (+code).toString(16)).slice(-4);\n range.push(\"<\" + code + \"><\" + unicode + \">\");\n }\n }\n\n if (range.length) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\\n\";\n }\n unicodeMap +=\n \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n return unicodeMap;\n };\n\n var identityHFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"Identity-H\"\n ) {\n //Tag with Identity-H\n var widths = font.metadata.Unicode.widths;\n var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Type /FontDescriptor\");\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/Flags \" + font.metadata.flags);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\">>\");\n out(\"endobj\");\n\n var DescendantFont = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n out(\"/CIDToGIDMap /Identity\");\n out(\"/DW 1000\");\n out(\"/Subtype /CIDFontType2\");\n out(\"/CIDSystemInfo\");\n out(\"<<\");\n out(\"/Supplement 0\");\n out(\"/Registry (Adobe)\");\n out(\"/Ordering (\" + font.encoding + \")\");\n out(\">>\");\n out(\">>\");\n out(\"endobj\");\n\n font.objectNumber = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/Subtype /Type0\");\n out(\"/ToUnicode \" + cmap + \" 0 R\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/Encoding /\" + font.encoding);\n out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n out(\">>\");\n out(\"endobj\");\n\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n identityHFunction(args);\n }\n ]);\n\n var winAnsiEncodingFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"WinAnsiEncoding\"\n ) {\n //Tag with WinAnsi encoding\n var data = font.metadata.rawData;\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/Type /FontDescriptor\");\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/Flags 96\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\">>\");\n out(\"endobj\");\n font.objectNumber = newObject();\n for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n font.metadata.hmtx.widths[j] = parseInt(\n font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n ); //Change the width of Em units to Point units.\n }\n out(\n \"<>\"\n );\n out(\"endobj\");\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n winAnsiEncodingFunction(args);\n }\n ]);\n\n var utf8TextFunction = function(args) {\n var text = args.text || \"\";\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n\n var pdfEscape = mutex.pdfEscape;\n var activeFontKey = mutex.activeFontKey;\n var fonts = mutex.fonts;\n var key = activeFontKey;\n\n var str = \"\",\n s = 0,\n cmapConfirm;\n var strText = \"\";\n var encoding = fonts[key].encoding;\n\n if (fonts[key].encoding !== \"Identity-H\") {\n return {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n }\n strText = text;\n\n key = activeFontKey;\n if (Array.isArray(text)) {\n strText = text[0];\n }\n for (s = 0; s < strText.length; s += 1) {\n if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n cmapConfirm =\n fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n /*\n if (Object.prototype.toString.call(text) === '[object Array]') {\n var i = 0;\n // for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n } else {\n\n }\n //}\n\n } else {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n }*/\n }\n if (!cmapConfirm) {\n if (\n strText[s].charCodeAt(0) < 256 &&\n fonts[key].metadata.hasOwnProperty(\"Unicode\")\n ) {\n str += strText[s];\n } else {\n str += \"\";\n }\n } else {\n str += strText[s];\n }\n }\n var result = \"\";\n if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n //For the default 13 font\n result = pdfEscape(str, key)\n .split(\"\")\n .map(function(cv) {\n return cv.charCodeAt(0).toString(16);\n })\n .join(\"\");\n } else if (encoding === \"Identity-H\") {\n result = pdfEscape16(str, fonts[key]);\n }\n mutex.isHex = true;\n\n return {\n text: result,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n };\n\n var utf8EscapeFunction = function(parms) {\n var text = parms.text || \"\",\n x = parms.x,\n y = parms.y,\n options = parms.options,\n mutex = parms.mutex;\n var tmpText = [];\n var args = {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n\n if (Array.isArray(text)) {\n var i = 0;\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n if (text[i].length === 3) {\n tmpText.push([\n utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n .text,\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n }\n parms.text = tmpText;\n } else {\n parms.text = utf8TextFunction(\n Object.assign({}, args, { text: text })\n ).text;\n }\n };\n\n jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var _initializeVFS = function() {\n if (typeof this.internal.vFS === \"undefined\") {\n this.internal.vFS = {};\n }\n return true;\n };\n\n /**\n * Check if the file exists in the vFS\n *\n * @name existsFileInVFS\n * @function\n * @param {string} Possible filename in the vFS.\n * @returns {boolean}\n * @example\n * doc.existsFileInVFS(\"someFile.txt\");\n */\n jsPDFAPI.existsFileInVFS = function(filename) {\n _initializeVFS.call(this);\n return typeof this.internal.vFS[filename] !== \"undefined\";\n };\n\n /**\n * Add a file to the vFS\n *\n * @name addFileToVFS\n * @function\n * @param {string} filename The name of the file which should be added.\n * @param {string} filecontent The content of the file.\n * @returns {jsPDF}\n * @example\n * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n */\n jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n _initializeVFS.call(this);\n this.internal.vFS[filename] = filecontent;\n return this;\n };\n\n /**\n * Get the file from the vFS\n *\n * @name getFileFromVFS\n * @function\n * @param {string} The name of the file which gets requested.\n * @returns {string}\n * @example\n * doc.getFileFromVFS(\"someFile.txt\");\n */\n jsPDFAPI.getFileFromVFS = function(filename) {\n _initializeVFS.call(this);\n\n if (typeof this.internal.vFS[filename] !== \"undefined\") {\n return this.internal.vFS[filename];\n }\n return null;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n \"use strict\";\n /**\n * Table of Unicode types.\n *\n * Generated by:\n *\n * var bidi = require(\"./bidi/index\");\n * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n *\n * for( var i = 0; i < bidi_accumulate.length; i++) {\n * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n * }\n * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n *\n * Based on:\n * https://github.com/mathiasbynens/unicode-8.0.0\n */\n var bidiUnicodeTypes = [\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"S\",\n \"B\",\n \"S\",\n \"WS\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"B\",\n \"B\",\n \"S\",\n \"WS\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"CS\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"EN\",\n \"EN\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"N\",\n \"N\",\n \"AL\",\n \"ET\",\n \"ET\",\n \"AL\",\n \"CS\",\n \"AL\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"ET\",\n \"AN\",\n \"AN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"L\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"B\",\n \"LRE\",\n \"RLE\",\n \"PDF\",\n \"LRO\",\n \"RLO\",\n \"CS\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"N\",\n \"LRI\",\n \"RLI\",\n \"FSI\",\n \"PDI\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"NSM\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"ES\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"N\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\"\n ];\n\n /**\n * Unicode Bidi algorithm compliant Bidi engine.\n * For reference see http://unicode.org/reports/tr9/\n */\n\n /**\n * constructor ( options )\n *\n * Initializes Bidi engine\n *\n * @param {Object} See 'setOptions' below for detailed description.\n * options are cashed between invocation of 'doBidiReorder' method\n *\n * sample usage pattern of BidiEngine:\n * var opt = {\n * \tisInputVisual: true,\n * \tisInputRtl: false,\n * \tisOutputVisual: false,\n * \tisOutputRtl: false,\n * \tisSymmetricSwapping: true\n * }\n * var sourceToTarget = [], levels = [];\n * var bidiEng = Globalize.bidiEngine(opt);\n * var src = \"text string to be reordered\";\n * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n */\n\n jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n var _STATE_TABLE_LTR = [\n [0, 3, 0, 1, 0, 0, 0],\n [0, 3, 0, 1, 2, 2, 0],\n [0, 3, 0, 0x11, 2, 0, 1],\n [0, 3, 5, 5, 4, 1, 0],\n [0, 3, 0x15, 0x15, 4, 0, 1],\n [0, 3, 5, 5, 4, 2, 0]\n ];\n\n var _STATE_TABLE_RTL = [\n [2, 0, 1, 1, 0, 1, 0],\n [2, 0, 1, 1, 0, 2, 0],\n [2, 0, 2, 1, 3, 2, 0],\n [2, 0, 2, 0x21, 3, 1, 1]\n ];\n\n var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n var _UNICODE_RANGES_MAP = {\n 0: 0,\n 5: 1,\n 6: 2,\n 7: 3,\n 0x20: 4,\n 0xfb: 5,\n 0xfe: 6,\n 0xff: 7\n };\n\n var _SWAP_TABLE = [\n \"\\u0028\",\n \"\\u0029\",\n \"\\u0028\",\n \"\\u003C\",\n \"\\u003E\",\n \"\\u003C\",\n \"\\u005B\",\n \"\\u005D\",\n \"\\u005B\",\n \"\\u007B\",\n \"\\u007D\",\n \"\\u007B\",\n \"\\u00AB\",\n \"\\u00BB\",\n \"\\u00AB\",\n \"\\u2039\",\n \"\\u203A\",\n \"\\u2039\",\n \"\\u2045\",\n \"\\u2046\",\n \"\\u2045\",\n \"\\u207D\",\n \"\\u207E\",\n \"\\u207D\",\n \"\\u208D\",\n \"\\u208E\",\n \"\\u208D\",\n \"\\u2264\",\n \"\\u2265\",\n \"\\u2264\",\n \"\\u2329\",\n \"\\u232A\",\n \"\\u2329\",\n \"\\uFE59\",\n \"\\uFE5A\",\n \"\\uFE59\",\n \"\\uFE5B\",\n \"\\uFE5C\",\n \"\\uFE5B\",\n \"\\uFE5D\",\n \"\\uFE5E\",\n \"\\uFE5D\",\n \"\\uFE64\",\n \"\\uFE65\",\n \"\\uFE64\"\n ];\n\n var _LTR_RANGES_REG_EXPR = new RegExp(\n /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n );\n\n var _lastArabic = false,\n _hasUbatAl,\n _hasUbatB,\n _hasUbatS,\n DIR_LTR = 0,\n DIR_RTL = 1,\n _isInVisual,\n _isInRtl,\n _isOutVisual,\n _isOutRtl,\n _isSymmetricSwapping,\n _dir = DIR_LTR;\n\n this.__bidiEngine__ = {};\n\n var _init = function(text, sourceToTargetMap) {\n if (sourceToTargetMap) {\n for (var i = 0; i < text.length; i++) {\n sourceToTargetMap[i] = i;\n }\n }\n if (_isInRtl === undefined) {\n _isInRtl = _isContextualDirRtl(text);\n }\n if (_isOutRtl === undefined) {\n _isOutRtl = _isContextualDirRtl(text);\n }\n };\n\n // for reference see 3.2 in http://unicode.org/reports/tr9/\n //\n var _getCharType = function(ch) {\n var charCode = ch.charCodeAt(),\n range = charCode >> 8,\n rangeIdx = _UNICODE_RANGES_MAP[range];\n\n if (rangeIdx !== undefined) {\n return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n } else if (range === 0xfc || range === 0xfd) {\n return \"AL\";\n } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n //unlikely case\n return \"L\";\n } else if (range === 8) {\n // even less likely\n return \"R\";\n }\n return \"N\"; //undefined type, mark as neutral\n };\n\n var _isContextualDirRtl = function(text) {\n for (var i = 0, charType; i < text.length; i++) {\n charType = _getCharType(text.charAt(i));\n if (charType === \"L\") {\n return false;\n } else if (charType === \"R\") {\n return true;\n }\n }\n return false;\n };\n\n // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n //\n var _resolveCharType = function(chars, types, resolvedTypes, index) {\n var cType = types[index],\n wType,\n nType,\n i,\n len;\n switch (cType) {\n case \"L\":\n case \"R\":\n _lastArabic = false;\n break;\n case \"N\":\n case \"AN\":\n break;\n\n case \"EN\":\n if (_lastArabic) {\n cType = \"AN\";\n }\n break;\n\n case \"AL\":\n _lastArabic = true;\n _hasUbatAl = true;\n cType = \"R\";\n break;\n\n case \"WS\":\n cType = \"N\";\n break;\n\n case \"CS\":\n if (\n index < 1 ||\n index + 1 >= types.length ||\n ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n ) {\n cType = \"N\";\n } else if (_lastArabic) {\n nType = \"AN\";\n }\n cType = nType === wType ? nType : \"N\";\n break;\n\n case \"ES\":\n wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n cType =\n wType === \"EN\" &&\n index + 1 < types.length &&\n types[index + 1] === \"EN\"\n ? \"EN\"\n : \"N\";\n break;\n\n case \"ET\":\n if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n cType = \"EN\";\n break;\n } else if (_lastArabic) {\n cType = \"N\";\n break;\n }\n i = index + 1;\n len = types.length;\n while (i < len && types[i] === \"ET\") {\n i++;\n }\n if (i < len && types[i] === \"EN\") {\n cType = \"EN\";\n } else {\n cType = \"N\";\n }\n break;\n\n case \"NSM\":\n if (_isInVisual && !_isInRtl) {\n //V->L\n len = types.length;\n i = index + 1;\n while (i < len && types[i] === \"NSM\") {\n i++;\n }\n if (i < len) {\n var c = chars[index];\n var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n wType = types[i];\n if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n cType = \"R\";\n break;\n }\n }\n }\n if (index < 1 || (wType = types[index - 1]) === \"B\") {\n cType = \"N\";\n } else {\n cType = resolvedTypes[index - 1];\n }\n break;\n\n case \"B\":\n _lastArabic = false;\n _hasUbatB = true;\n cType = _dir;\n break;\n\n case \"S\":\n _hasUbatS = true;\n cType = \"N\";\n break;\n\n case \"LRE\":\n case \"RLE\":\n case \"LRO\":\n case \"RLO\":\n case \"PDF\":\n _lastArabic = false;\n break;\n case \"BN\":\n cType = \"N\";\n break;\n }\n return cType;\n };\n\n var _handleUbatS = function(types, levels, length) {\n for (var i = 0; i < length; i++) {\n if (types[i] === \"S\") {\n levels[i] = _dir;\n for (var j = i - 1; j >= 0; j--) {\n if (types[j] === \"WS\") {\n levels[j] = _dir;\n } else {\n break;\n }\n }\n }\n }\n };\n\n var _invertString = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\");\n if (levels) {\n _computeLevels(charArray, levels, { hiLevel: _dir });\n }\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return charArray.join(\"\");\n };\n\n // For reference see 3.3 in http://unicode.org/reports/tr9/\n //\n var _computeLevels = function(chars, levels, params) {\n var action,\n condition,\n i,\n index,\n newLevel,\n prevState,\n condPos = -1,\n len = chars.length,\n newState = 0,\n resolvedTypes = [],\n stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n types = [];\n\n _lastArabic = false;\n _hasUbatAl = false;\n _hasUbatB = false;\n _hasUbatS = false;\n for (i = 0; i < len; i++) {\n types[i] = _getCharType(chars[i]);\n }\n for (index = 0; index < len; index++) {\n prevState = newState;\n resolvedTypes[index] = _resolveCharType(\n chars,\n types,\n resolvedTypes,\n index\n );\n newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n action = newState & 0xf0;\n newState &= 0x0f;\n levels[index] = newLevel = stateTable[newState][5];\n if (action > 0) {\n if (action === 0x10) {\n for (i = condPos; i < index; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n condition = stateTable[newState][6];\n if (condition) {\n if (condPos === -1) {\n condPos = index;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < index; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (types[index] === \"B\") {\n levels[index] = 0;\n }\n params.hiLevel |= newLevel;\n }\n if (_hasUbatS) {\n _handleUbatS(types, levels, len);\n }\n };\n\n // for reference see 3.4 in http://unicode.org/reports/tr9/\n //\n var _invertByLevel = function(\n level,\n charArray,\n sourceToTargetMap,\n levels,\n params\n ) {\n if (params.hiLevel < level) {\n return;\n }\n if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return;\n }\n var ch,\n high,\n end,\n low,\n len = charArray.length,\n start = 0;\n\n while (start < len) {\n if (levels[start] >= level) {\n end = start + 1;\n while (end < len && levels[end] >= level) {\n end++;\n }\n for (low = start, high = end - 1; low < high; low++, high--) {\n ch = charArray[low];\n charArray[low] = charArray[high];\n charArray[high] = ch;\n if (sourceToTargetMap) {\n ch = sourceToTargetMap[low];\n sourceToTargetMap[low] = sourceToTargetMap[high];\n sourceToTargetMap[high] = ch;\n }\n }\n start = end;\n }\n start++;\n }\n };\n\n // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n //\n var _symmetricSwap = function(charArray, levels, params) {\n if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n for (var i = 0, index; i < charArray.length; i++) {\n if (levels[i] === 1) {\n index = _SWAP_TABLE.indexOf(charArray[i]);\n if (index >= 0) {\n charArray[i] = _SWAP_TABLE[index + 1];\n }\n }\n }\n }\n };\n\n var _reorder = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\"),\n params = { hiLevel: _dir };\n\n if (!levels) {\n levels = [];\n }\n _computeLevels(charArray, levels, params);\n _symmetricSwap(charArray, levels, params);\n _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n return charArray.join(\"\");\n };\n\n // doBidiReorder( text, sourceToTargetMap, levels )\n // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n // Returns reordered string\n // @text [String]:\n // - input string to be reordered, this is input parameter\n // $sourceToTargetMap [Array] (optional)\n // - resultant mapping between input and output strings, this is output parameter\n // $levels [Array] (optional)\n // - array of calculated Bidi levels, , this is output parameter\n this.__bidiEngine__.doBidiReorder = function(\n text,\n sourceToTargetMap,\n levels\n ) {\n _init(text, sourceToTargetMap);\n if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n // LLTR->VLTR, LRTL->VLTR\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n // VRTL->VLTR, VLTR->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _invertString(text, sourceToTargetMap, levels);\n } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n // LLTR->VRTL, LRTL->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n // VLTR->LLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // VLTR->LRTL, VRTL->LLTR\n text = _invertString(text, sourceToTargetMap);\n if (_isInRtl) {\n //LLTR -> VLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else {\n //LRTL -> VRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n }\n } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n // VRTL->LRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // LRTL->LLTR, LLTR->LRTL\n var isSymmetricSwappingOrig = _isSymmetricSwapping;\n if (_isInRtl) {\n //LRTL->LLTR\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n _dir = DIR_LTR;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n } else {\n //LLTR->LRTL\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n _dir = DIR_RTL;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n text = _invertString(text, sourceToTargetMap);\n }\n }\n return text;\n };\n\n /**\n * @name setOptions( options )\n * @function\n * Sets options for Bidi conversion\n * @param {Object}:\n * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n */\n this.__bidiEngine__.setOptions = function(options) {\n if (options) {\n _isInVisual = options.isInputVisual;\n _isOutVisual = options.isOutputVisual;\n _isInRtl = options.isInputRtl;\n _isOutRtl = options.isOutputRtl;\n _isSymmetricSwapping = options.isSymmetricSwapping;\n }\n };\n\n this.__bidiEngine__.setOptions(options);\n return this.__bidiEngine__;\n };\n\n var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n var bidiEngineFunction = function(args) {\n var text = args.text;\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n var lang = options.lang;\n var tmpText = [];\n\n options.isInputVisual =\n typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n bidiEngine.setOptions(options);\n\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n tmpText.push([\n bidiEngine.doBidiReorder(text[i][0]),\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n }\n }\n args.text = tmpText;\n } else {\n args.text = bidiEngine.doBidiReorder(text);\n }\n bidiEngine.setOptions({ isInputVisual: true });\n };\n\n jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font *\n * Start Data : 2017. 01. 22. *\n * Comment : TEXT API *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n /************************************************************************/\n /* function : open */\n /* comment : Decode the encoded ttf content and create a TTFFont object. */\n /************************************************************************/\n TTFFont.open = function(file) {\n return new TTFFont(file);\n };\n /***************************************************************/\n /* function : TTFFont gernerator */\n /* comment : Decode TTF contents are parsed, Data, */\n /* Subset object is created, and registerTTF function is called.*/\n /***************************************************************/\n function TTFFont(rawData) {\n var data;\n this.rawData = rawData;\n data = this.contents = new Data(rawData);\n this.contents.pos = 4;\n if (data.readString(4) === \"ttcf\") {\n throw new Error(\"TTCF not supported.\");\n } else {\n data.pos = 0;\n this.parse();\n this.subset = new Subset(this);\n this.registerTTF();\n }\n }\n /********************************************************/\n /* function : parse */\n /* comment : TTF Parses the file contents by each table.*/\n /********************************************************/\n TTFFont.prototype.parse = function() {\n this.directory = new Directory(this.contents);\n this.head = new HeadTable(this);\n this.name = new NameTable(this);\n this.cmap = new CmapTable(this);\n this.toUnicode = {};\n this.hhea = new HheaTable(this);\n this.maxp = new MaxpTable(this);\n this.hmtx = new HmtxTable(this);\n this.post = new PostTable(this);\n this.os2 = new OS2Table(this);\n this.loca = new LocaTable(this);\n this.glyf = new GlyfTable(this);\n this.ascender =\n (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n this.decender =\n (this.os2.exists && this.os2.decender) || this.hhea.decender;\n this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n return (this.bbox = [\n this.head.xMin,\n this.head.yMin,\n this.head.xMax,\n this.head.yMax\n ]);\n };\n /***************************************************************/\n /* function : registerTTF */\n /* comment : Get the value to assign pdf font descriptors. */\n /***************************************************************/\n TTFFont.prototype.registerTTF = function() {\n var e, hi, low, raw, _ref;\n this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n this.bbox = function() {\n var _i, _len, _ref, _results;\n _ref = this.bbox;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n e = _ref[_i];\n _results.push(Math.round(e * this.scaleFactor));\n }\n return _results;\n }.call(this);\n this.stemV = 0;\n if (this.post.exists) {\n raw = this.post.italic_angle;\n hi = raw >> 16;\n low = raw & 0xff;\n if ((hi & 0x8000) !== 0) {\n hi = -((hi ^ 0xffff) + 1);\n }\n this.italicAngle = +(\"\" + hi + \".\" + low);\n } else {\n this.italicAngle = 0;\n }\n this.ascender = Math.round(this.ascender * this.scaleFactor);\n this.decender = Math.round(this.decender * this.scaleFactor);\n this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n this.isSerif =\n (_ref = this.familyClass) === 1 ||\n _ref === 2 ||\n _ref === 3 ||\n _ref === 4 ||\n _ref === 5 ||\n _ref === 7;\n this.isScript = this.familyClass === 10;\n this.flags = 0;\n if (this.post.isFixedPitch) {\n this.flags |= 1 << 0;\n }\n if (this.isSerif) {\n this.flags |= 1 << 1;\n }\n if (this.isScript) {\n this.flags |= 1 << 3;\n }\n if (this.italicAngle !== 0) {\n this.flags |= 1 << 6;\n }\n this.flags |= 1 << 5;\n if (!this.cmap.unicode) {\n throw new Error(\"No unicode cmap for font\");\n }\n };\n TTFFont.prototype.characterToGlyph = function(character) {\n var _ref;\n return (\n ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n 0\n );\n };\n TTFFont.prototype.widthOfGlyph = function(glyph) {\n var scale;\n scale = 1000.0 / this.head.unitsPerEm;\n return this.hmtx.forGlyph(glyph).advance * scale;\n };\n TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n var charCode, i, scale, width, _ref;\n string = \"\" + string;\n width = 0;\n for (\n i = 0, _ref = string.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n charCode = string.charCodeAt(i);\n width +=\n this.widthOfGlyph(this.characterToGlyph(charCode)) +\n charSpace * (1000 / size) || 0;\n }\n scale = size / 1000;\n return width * scale;\n };\n TTFFont.prototype.lineHeight = function(size, includeGap) {\n var gap;\n if (includeGap == null) {\n includeGap = false;\n }\n gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.decender) / 1000) * size;\n };\n return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n function Data(data) {\n this.data = data != null ? data : [];\n this.pos = 0;\n this.length = this.data.length;\n }\n Data.prototype.readByte = function() {\n return this.data[this.pos++];\n };\n Data.prototype.writeByte = function(byte) {\n return (this.data[this.pos++] = byte);\n };\n Data.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.readByte() * 0x1000000;\n b2 = this.readByte() << 16;\n b3 = this.readByte() << 8;\n b4 = this.readByte();\n return b1 + b2 + b3 + b4;\n };\n Data.prototype.writeUInt32 = function(val) {\n this.writeByte((val >>> 24) & 0xff);\n this.writeByte((val >> 16) & 0xff);\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt32 = function() {\n var int;\n int = this.readUInt32();\n if (int >= 0x80000000) {\n return int - 0x100000000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt32 = function(val) {\n if (val < 0) {\n val += 0x100000000;\n }\n return this.writeUInt32(val);\n };\n Data.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.readByte() << 8;\n b2 = this.readByte();\n return b1 | b2;\n };\n Data.prototype.writeUInt16 = function(val) {\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt16 = function() {\n var int;\n int = this.readUInt16();\n if (int >= 0x8000) {\n return int - 0x10000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt16 = function(val) {\n if (val < 0) {\n val += 0x10000;\n }\n return this.writeUInt16(val);\n };\n Data.prototype.readString = function(length) {\n var i, ret;\n ret = [];\n for (\n i = 0;\n 0 <= length ? i < length : i > length;\n i = 0 <= length ? ++i : --i\n ) {\n ret[i] = String.fromCharCode(this.readByte());\n }\n return ret.join(\"\");\n };\n Data.prototype.writeString = function(val) {\n var i, _ref, _results;\n _results = [];\n for (\n i = 0, _ref = val.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n _results.push(this.writeByte(val.charCodeAt(i)));\n }\n return _results;\n };\n /*Data.prototype.stringAt = function (pos, length) {\n this.pos = pos;\n return this.readString(length);\n };*/\n Data.prototype.readShort = function() {\n return this.readInt16();\n };\n Data.prototype.writeShort = function(val) {\n return this.writeInt16(val);\n };\n Data.prototype.readLongLong = function() {\n var b1, b2, b3, b4, b5, b6, b7, b8;\n b1 = this.readByte();\n b2 = this.readByte();\n b3 = this.readByte();\n b4 = this.readByte();\n b5 = this.readByte();\n b6 = this.readByte();\n b7 = this.readByte();\n b8 = this.readByte();\n if (b1 & 0x80) {\n return (\n ((b1 ^ 0xff) * 0x100000000000000 +\n (b2 ^ 0xff) * 0x1000000000000 +\n (b3 ^ 0xff) * 0x10000000000 +\n (b4 ^ 0xff) * 0x100000000 +\n (b5 ^ 0xff) * 0x1000000 +\n (b6 ^ 0xff) * 0x10000 +\n (b7 ^ 0xff) * 0x100 +\n (b8 ^ 0xff) +\n 1) *\n -1\n );\n }\n return (\n b1 * 0x100000000000000 +\n b2 * 0x1000000000000 +\n b3 * 0x10000000000 +\n b4 * 0x100000000 +\n b5 * 0x1000000 +\n b6 * 0x10000 +\n b7 * 0x100 +\n b8\n );\n };\n Data.prototype.writeLongLong = function(val) {\n var high, low;\n high = Math.floor(val / 0x100000000);\n low = val & 0xffffffff;\n this.writeByte((high >> 24) & 0xff);\n this.writeByte((high >> 16) & 0xff);\n this.writeByte((high >> 8) & 0xff);\n this.writeByte(high & 0xff);\n this.writeByte((low >> 24) & 0xff);\n this.writeByte((low >> 16) & 0xff);\n this.writeByte((low >> 8) & 0xff);\n return this.writeByte(low & 0xff);\n };\n Data.prototype.readInt = function() {\n return this.readInt32();\n };\n Data.prototype.writeInt = function(val) {\n return this.writeInt32(val);\n };\n /*Data.prototype.slice = function (start, end) {\n return this.data.slice(start, end);\n };*/\n Data.prototype.read = function(bytes) {\n var buf, i;\n buf = [];\n for (\n i = 0;\n 0 <= bytes ? i < bytes : i > bytes;\n i = 0 <= bytes ? ++i : --i\n ) {\n buf.push(this.readByte());\n }\n return buf;\n };\n Data.prototype.write = function(bytes) {\n var byte, i, _len, _results;\n _results = [];\n for (i = 0, _len = bytes.length; i < _len; i++) {\n byte = bytes[i];\n _results.push(this.writeByte(byte));\n }\n return _results;\n };\n return Data;\n})();\n\nvar Directory = (function() {\n var checksum;\n\n /*****************************************************************************************************/\n /* function : Directory generator */\n /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n /*****************************************************************************************************/\n function Directory(data) {\n var entry, i, _ref;\n this.scalarType = data.readInt();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n this.tables = {};\n for (\n i = 0, _ref = this.tableCount;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n entry = {\n tag: data.readString(4),\n checksum: data.readInt(),\n offset: data.readInt(),\n length: data.readInt()\n };\n this.tables[entry.tag] = entry;\n }\n }\n /********************************************************************************************************/\n /* function : encode */\n /* comment : It encodes and stores the font table object and information used for the directory object. */\n /********************************************************************************************************/\n Directory.prototype.encode = function(tables) {\n var adjustment,\n directory,\n directoryLength,\n entrySelector,\n headOffset,\n log2,\n offset,\n rangeShift,\n searchRange,\n sum,\n table,\n tableCount,\n tableData,\n tag;\n tableCount = Object.keys(tables).length;\n log2 = Math.log(2);\n searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n entrySelector = Math.floor(searchRange / log2);\n rangeShift = tableCount * 16 - searchRange;\n directory = new Data();\n directory.writeInt(this.scalarType);\n directory.writeShort(tableCount);\n directory.writeShort(searchRange);\n directory.writeShort(entrySelector);\n directory.writeShort(rangeShift);\n directoryLength = tableCount * 16;\n offset = directory.pos + directoryLength;\n headOffset = null;\n tableData = [];\n for (tag in tables) {\n table = tables[tag];\n directory.writeString(tag);\n directory.writeInt(checksum(table));\n directory.writeInt(offset);\n directory.writeInt(table.length);\n tableData = tableData.concat(table);\n if (tag === \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.push(0);\n offset++;\n }\n }\n directory.write(tableData);\n sum = checksum(directory.data);\n adjustment = 0xb1b0afba - sum;\n directory.pos = headOffset + 8;\n directory.writeUInt32(adjustment);\n return directory.data;\n };\n /***************************************************************/\n /* function : checksum */\n /* comment : Duplicate the table for the tag. */\n /***************************************************************/\n checksum = function(data) {\n var i, sum, tmp, _ref;\n data = __slice.call(data);\n while (data.length % 4) {\n data.push(0);\n }\n tmp = new Data(data);\n sum = 0;\n for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n sum += tmp.readUInt32();\n }\n return sum & 0xffffffff;\n };\n return Directory;\n})();\n\nvar Table,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) {\n for (var key in parent) {\n if (__hasProp.call(parent, key)) child[key] = parent[key];\n }\n\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n\n/***************************************************************/\n/* function : Table */\n/* comment : Save info for each table, and parse the table. */\n/***************************************************************/\nTable = (function() {\n function Table(file) {\n var info;\n this.file = file;\n info = this.file.directory.tables[this.tag];\n this.exists = !!info;\n if (info) {\n (this.offset = info.offset), (this.length = info.length);\n this.parse(this.file.contents);\n }\n }\n Table.prototype.parse = function() {};\n Table.prototype.encode = function() {};\n Table.prototype.raw = function() {\n if (!this.exists) {\n return null;\n }\n this.file.contents.pos = this.offset;\n return this.file.contents.read(this.length);\n };\n return Table;\n})();\n\nvar HeadTable = (function(_super) {\n __extends(HeadTable, _super);\n\n function HeadTable() {\n return HeadTable.__super__.constructor.apply(this, arguments);\n }\n HeadTable.prototype.tag = \"head\";\n HeadTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.revision = data.readInt();\n this.checkSumAdjustment = data.readInt();\n this.magicNumber = data.readInt();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.readLongLong();\n this.modified = data.readLongLong();\n this.xMin = data.readShort();\n this.yMin = data.readShort();\n this.xMax = data.readShort();\n this.yMax = data.readShort();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort();\n this.indexToLocFormat = data.readShort();\n return (this.glyphDataFormat = data.readShort());\n };\n HeadTable.prototype.encode = function(indexToLocFormat) {\n var table;\n table = new Data();\n table.writeInt(this.version);\n table.writeInt(this.revision);\n table.writeInt(this.checkSumAdjustment);\n table.writeInt(this.magicNumber);\n table.writeShort(this.flags);\n table.writeShort(this.unitsPerEm);\n table.writeLongLong(this.created);\n table.writeLongLong(this.modified);\n table.writeShort(this.xMin);\n table.writeShort(this.yMin);\n table.writeShort(this.xMax);\n table.writeShort(this.yMax);\n table.writeShort(this.macStyle);\n table.writeShort(this.lowestRecPPEM);\n table.writeShort(this.fontDirectionHint);\n table.writeShort(indexToLocFormat);\n table.writeShort(this.glyphDataFormat);\n return table.data;\n };\n return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n function CmapEntry(data, offset) {\n var code,\n count,\n endCode,\n glyphId,\n glyphIds,\n i,\n idDelta,\n idRangeOffset,\n index,\n saveOffset,\n segCount,\n segCountX2,\n start,\n startCode,\n tail,\n _j,\n _k,\n _len;\n this.platformID = data.readUInt16();\n this.encodingID = data.readShort();\n this.offset = offset + data.readInt();\n saveOffset = data.pos;\n data.pos = this.offset;\n this.format = data.readUInt16();\n this.length = data.readUInt16();\n this.language = data.readUInt16();\n this.isUnicode =\n (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n (this.platformID === 0 && this.format === 4);\n this.codeMap = {};\n switch (this.format) {\n case 0:\n for (i = 0; i < 256; ++i) {\n this.codeMap[i] = data.readByte();\n }\n break;\n case 4:\n segCountX2 = data.readUInt16();\n segCount = segCountX2 / 2;\n data.pos += 6;\n endCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n data.pos += 2;\n startCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idDelta = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idRangeOffset = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n count = (this.length - data.pos + this.offset) / 2;\n glyphIds = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= count ? _j < count : _j > count;\n i = 0 <= count ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n tail = endCode[i];\n start = startCode[i];\n for (\n code = _k = start;\n start <= tail ? _k <= tail : _k >= tail;\n code = start <= tail ? ++_k : --_k\n ) {\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n this.codeMap[code] = glyphId & 0xffff;\n }\n }\n }\n data.pos = saveOffset;\n }\n CmapEntry.encode = function(charmap, encoding) {\n var charMap,\n code,\n codeMap,\n codes,\n delta,\n deltas,\n diff,\n endCode,\n endCodes,\n entrySelector,\n glyphIDs,\n i,\n id,\n indexes,\n last,\n map,\n nextID,\n offset,\n old,\n rangeOffsets,\n rangeShift,\n searchRange,\n segCount,\n segCountX2,\n startCode,\n startCodes,\n startGlyph,\n subtable,\n _i,\n _j,\n _k,\n _l,\n _len,\n _len1,\n _len2,\n _len3,\n _len4,\n _len5,\n _len6,\n _len7,\n _m,\n _n,\n _name,\n _o,\n _p,\n _q;\n subtable = new Data();\n codes = Object.keys(charmap).sort(function(a, b) {\n return a - b;\n });\n switch (encoding) {\n case \"macroman\":\n id = 0;\n indexes = (function() {\n var _results = [];\n for (i = 0; i < 256; ++i) {\n _results.push(0);\n }\n return _results;\n })();\n map = {\n 0: 0\n };\n codeMap = {};\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (map[(_name = charmap[code])] == null) {\n map[_name] = ++id;\n }\n codeMap[code] = {\n old: charmap[code],\n new: map[charmap[code]]\n };\n indexes[code] = map[charmap[code]];\n }\n subtable.writeUInt16(1);\n subtable.writeUInt16(0);\n subtable.writeUInt32(12);\n subtable.writeUInt16(0);\n subtable.writeUInt16(262);\n subtable.writeUInt16(0);\n subtable.write(indexes);\n return {\n charMap: codeMap,\n subtable: subtable.data,\n maxGlyphID: id + 1\n };\n case \"unicode\":\n startCodes = [];\n endCodes = [];\n nextID = 0;\n map = {};\n charMap = {};\n last = diff = null;\n for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n code = codes[_j];\n old = charmap[code];\n if (map[old] == null) {\n map[old] = ++nextID;\n }\n charMap[code] = {\n old: old,\n new: map[old]\n };\n delta = map[old] - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xffff);\n startCodes.push(0xffff);\n segCount = startCodes.length;\n segCountX2 = segCount * 2;\n searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n entrySelector = Math.log(searchRange / 2) / Math.LN2;\n rangeShift = 2 * segCount - searchRange;\n deltas = [];\n rangeOffsets = [];\n glyphIDs = [];\n for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n startCode = startCodes[i];\n endCode = endCodes[i];\n if (startCode === 0xffff) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n startGlyph = charMap[startCode][\"new\"];\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n for (\n code = _l = startCode;\n startCode <= endCode ? _l <= endCode : _l >= endCode;\n code = startCode <= endCode ? ++_l : --_l\n ) {\n glyphIDs.push(charMap[code][\"new\"]);\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n subtable.writeUInt16(3);\n subtable.writeUInt16(1);\n subtable.writeUInt32(12);\n subtable.writeUInt16(4);\n subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n subtable.writeUInt16(0);\n subtable.writeUInt16(segCountX2);\n subtable.writeUInt16(searchRange);\n subtable.writeUInt16(entrySelector);\n subtable.writeUInt16(rangeShift);\n for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n code = endCodes[_m];\n subtable.writeUInt16(code);\n }\n subtable.writeUInt16(0);\n for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n code = startCodes[_n];\n subtable.writeUInt16(code);\n }\n for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n delta = deltas[_o];\n subtable.writeUInt16(delta);\n }\n for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n offset = rangeOffsets[_p];\n subtable.writeUInt16(offset);\n }\n for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n id = glyphIDs[_q];\n subtable.writeUInt16(id);\n }\n return {\n charMap: charMap,\n subtable: subtable.data,\n maxGlyphID: nextID + 1\n };\n }\n };\n return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n __extends(CmapTable, _super);\n\n function CmapTable() {\n return CmapTable.__super__.constructor.apply(this, arguments);\n }\n CmapTable.prototype.tag = \"cmap\";\n CmapTable.prototype.parse = function(data) {\n var entry, i, tableCount;\n data.pos = this.offset;\n this.version = data.readUInt16();\n tableCount = data.readUInt16();\n this.tables = [];\n this.unicode = null;\n for (\n i = 0;\n 0 <= tableCount ? i < tableCount : i > tableCount;\n i = 0 <= tableCount ? ++i : --i\n ) {\n entry = new CmapEntry(data, this.offset);\n this.tables.push(entry);\n if (entry.isUnicode) {\n if (this.unicode == null) {\n this.unicode = entry;\n }\n }\n }\n return true;\n };\n /*************************************************************************/\n /* function : encode */\n /* comment : Encode the cmap table corresponding to the input character. */\n /*************************************************************************/\n CmapTable.encode = function(charmap, encoding) {\n var result, table;\n if (encoding == null) {\n encoding = \"macroman\";\n }\n result = CmapEntry.encode(charmap, encoding);\n table = new Data();\n table.writeUInt16(0);\n table.writeUInt16(1);\n result.table = table.data.concat(result.subtable);\n return result;\n };\n return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n __extends(HheaTable, _super);\n\n function HheaTable() {\n return HheaTable.__super__.constructor.apply(this, arguments);\n }\n HheaTable.prototype.tag = \"hhea\";\n HheaTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.ascender = data.readShort();\n this.decender = data.readShort();\n this.lineGap = data.readShort();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort();\n this.minRightSideBearing = data.readShort();\n this.xMaxExtent = data.readShort();\n this.caretSlopeRise = data.readShort();\n this.caretSlopeRun = data.readShort();\n this.caretOffset = data.readShort();\n data.pos += 4 * 2;\n this.metricDataFormat = data.readShort();\n return (this.numberOfMetrics = data.readUInt16());\n };\n /*HheaTable.prototype.encode = function (ids) {\n var i, table, _i, _ref;\n table = new Data;\n table.writeInt(this.version);\n table.writeShort(this.ascender);\n table.writeShort(this.decender);\n table.writeShort(this.lineGap);\n table.writeShort(this.advanceWidthMax);\n table.writeShort(this.minLeftSideBearing);\n table.writeShort(this.minRightSideBearing);\n table.writeShort(this.xMaxExtent);\n table.writeShort(this.caretSlopeRise);\n table.writeShort(this.caretSlopeRun);\n table.writeShort(this.caretOffset);\n for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n table.writeByte(0);\n }\n table.writeShort(this.metricDataFormat);\n table.writeUInt16(ids.length);\n return table.data;\n };*/\n return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n __extends(OS2Table, _super);\n\n function OS2Table() {\n return OS2Table.__super__.constructor.apply(this, arguments);\n }\n OS2Table.prototype.tag = \"OS/2\";\n OS2Table.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readUInt16();\n this.averageCharWidth = data.readShort();\n this.weightClass = data.readUInt16();\n this.widthClass = data.readUInt16();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort();\n this.ySubscriptYSize = data.readShort();\n this.ySubscriptXOffset = data.readShort();\n this.ySubscriptYOffset = data.readShort();\n this.ySuperscriptXSize = data.readShort();\n this.ySuperscriptYSize = data.readShort();\n this.ySuperscriptXOffset = data.readShort();\n this.ySuperscriptYOffset = data.readShort();\n this.yStrikeoutSize = data.readShort();\n this.yStrikeoutPosition = data.readShort();\n this.familyClass = data.readShort();\n this.panose = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 10; ++i) {\n _results.push(data.readByte());\n }\n return _results;\n })();\n this.charRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 4; ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort();\n this.descent = data.readShort();\n this.lineGap = data.readShort();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 2; i = ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n return (this.maxContext = data.readShort());\n }\n }\n };\n /*OS2Table.prototype.encode = function () {\n return this.raw();\n };*/\n return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n var POSTSCRIPT_GLYPHS;\n __extends(PostTable, _super);\n\n function PostTable() {\n return PostTable.__super__.constructor.apply(this, arguments);\n }\n PostTable.prototype.tag = \"post\";\n PostTable.prototype.parse = function(data) {\n var length, numberOfGlyphs, _results;\n data.pos = this.offset;\n this.format = data.readInt();\n this.italicAngle = data.readInt();\n this.underlinePosition = data.readShort();\n this.underlineThickness = data.readShort();\n this.isFixedPitch = data.readInt();\n this.minMemType42 = data.readInt();\n this.maxMemType42 = data.readInt();\n this.minMemType1 = data.readInt();\n this.maxMemType1 = data.readInt();\n switch (this.format) {\n case 0x00010000:\n break;\n case 0x00020000:\n numberOfGlyphs = data.readUInt16();\n this.glyphNameIndex = [];\n var i;\n for (\n i = 0;\n 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n i = 0 <= numberOfGlyphs ? ++i : --i\n ) {\n this.glyphNameIndex.push(data.readUInt16());\n }\n this.names = [];\n _results = [];\n while (data.pos < this.offset + this.length) {\n length = data.readByte();\n _results.push(this.names.push(data.readString(length)));\n }\n return _results;\n case 0x00025000:\n numberOfGlyphs = data.readUInt16();\n return (this.offsets = data.read(numberOfGlyphs));\n case 0x00030000:\n break;\n case 0x00040000:\n return (this.map = function() {\n var _j, _ref, _results1;\n _results1 = [];\n for (\n i = _j = 0, _ref = this.file.maxp.numGlyphs;\n 0 <= _ref ? _j < _ref : _j > _ref;\n i = 0 <= _ref ? ++_j : --_j\n ) {\n _results1.push(data.readUInt32());\n }\n return _results1;\n }.call(this));\n }\n };\n /*PostTable.prototype.glyphFor = function (code) {\n var index;\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 0x00020000:\n index = this.glyphNameIndex[code];\n if (index <= 257) {\n return POSTSCRIPT_GLYPHS[index];\n }\n else {\n return this.names[index - 258] || '.notdef';\n }\n break;\n case 0x00025000:\n return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n case 0x00030000:\n return '.notdef';\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };*/\n /*PostTable.prototype.encode = function (mapping) {\n var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n if (!this.exists) {\n return null;\n }\n raw = this.raw();\n if (this.format === 0x00030000) {\n return raw;\n }\n table = new Data(raw.slice(0, 32));\n table.writeUInt32(0x00020000);\n table.pos = 32;\n indexes = [];\n strings = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n post = this.glyphFor(id);\n position = POSTSCRIPT_GLYPHS.indexOf(post);\n if (position !== -1) {\n indexes.push(position);\n }\n else {\n indexes.push(257 + strings.length);\n strings.push(post);\n }\n }\n table.writeUInt16(Object.keys(mapping).length);\n for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n index = indexes[_j];\n table.writeUInt16(index);\n }\n for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n string = strings[_k];\n table.writeByte(string.length);\n table.writeString(string);\n }\n return table.data;\n };*/\n POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\\nbracketleft backslash bracketright asciicircum underscore grave\\na b c d e f g h i j k l m n o p q r s t u v w x y z\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n /\\s+/g\n );\n return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n function NameEntry(raw, entry) {\n this.raw = raw;\n this.length = raw.length;\n this.platformID = entry.platformID;\n this.encodingID = entry.encodingID;\n this.languageID = entry.languageID;\n }\n return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n var subsetTag;\n __extends(NameTable, _super);\n\n function NameTable() {\n return NameTable.__super__.constructor.apply(this, arguments);\n }\n NameTable.prototype.tag = \"name\";\n NameTable.prototype.parse = function(data) {\n var count,\n entries,\n entry,\n i,\n name,\n stringOffset,\n strings,\n text,\n _j,\n _len,\n _name;\n data.pos = this.offset;\n data.readShort(); //format\n count = data.readShort();\n stringOffset = data.readShort();\n entries = [];\n for (\n i = 0;\n 0 <= count ? i < count : i > count;\n i = 0 <= count ? ++i : --i\n ) {\n entries.push({\n platformID: data.readShort(),\n encodingID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: this.offset + stringOffset + data.readShort()\n });\n }\n strings = {};\n for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n entry = entries[i];\n data.pos = entry.offset;\n text = data.readString(entry.length);\n name = new NameEntry(text, entry);\n if (strings[(_name = entry.nameID)] == null) {\n strings[_name] = [];\n }\n strings[entry.nameID].push(name);\n }\n this.strings = strings;\n this.copyright = strings[0];\n this.fontFamily = strings[1];\n this.fontSubfamily = strings[2];\n this.uniqueSubfamily = strings[3];\n this.fontName = strings[4];\n this.version = strings[5];\n try {\n this.postscriptName = strings[6][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n } catch (e) {\n this.postscriptName = strings[4][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n }\n this.trademark = strings[7];\n this.manufacturer = strings[8];\n this.designer = strings[9];\n this.description = strings[10];\n this.vendorUrl = strings[11];\n this.designerUrl = strings[12];\n this.license = strings[13];\n this.licenseUrl = strings[14];\n this.preferredFamily = strings[15];\n this.preferredSubfamily = strings[17];\n this.compatibleFull = strings[18];\n return (this.sampleText = strings[19]);\n };\n subsetTag = \"AAAAAA\";\n /*NameTable.prototype.encode = function () {\n var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n strings = {};\n _ref = this.strings;\n for (id in _ref) {\n val = _ref[id];\n strings[id] = val;\n }\n postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n platformID: 1\n , encodingID: 0\n , languageID: 0\n });\n strings[6] = [postscriptName];\n subsetTag = successorOf(subsetTag);\n strCount = 0;\n for (id in strings) {\n list = strings[id];\n if (list != null) {\n strCount += list.length;\n }\n }\n table = new Data;\n strTable = new Data;\n table.writeShort(0);\n table.writeShort(strCount);\n table.writeShort(6 + 12 * strCount);\n for (nameID in strings) {\n list = strings[nameID];\n if (list != null) {\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n string = list[_i];\n table.writeShort(string.platformID);\n table.writeShort(string.encodingID);\n table.writeShort(string.languageID);\n table.writeShort(nameID);\n table.writeShort(string.length);\n table.writeShort(strTable.pos);\n strTable.writeString(string.raw);\n }\n }\n }\n return nameTable = {\n postscriptName: postscriptName.raw\n , table: table.data.concat(strTable.data)\n };\n };*/\n return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n __extends(MaxpTable, _super);\n\n function MaxpTable() {\n return MaxpTable.__super__.constructor.apply(this, arguments);\n }\n MaxpTable.prototype.tag = \"maxp\";\n MaxpTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.numGlyphs = data.readUInt16();\n this.maxPoints = data.readUInt16();\n this.maxContours = data.readUInt16();\n this.maxCompositePoints = data.readUInt16();\n this.maxComponentContours = data.readUInt16();\n this.maxZones = data.readUInt16();\n this.maxTwilightPoints = data.readUInt16();\n this.maxStorage = data.readUInt16();\n this.maxFunctionDefs = data.readUInt16();\n this.maxInstructionDefs = data.readUInt16();\n this.maxStackElements = data.readUInt16();\n this.maxSizeOfInstructions = data.readUInt16();\n this.maxComponentElements = data.readUInt16();\n return (this.maxComponentDepth = data.readUInt16());\n };\n /*MaxpTable.prototype.encode = function (ids) {\n var table;\n table = new Data;\n table.writeInt(this.version);\n table.writeUInt16(ids.length);\n table.writeUInt16(this.maxPoints);\n table.writeUInt16(this.maxContours);\n table.writeUInt16(this.maxCompositePoints);\n table.writeUInt16(this.maxComponentContours);\n table.writeUInt16(this.maxZones);\n table.writeUInt16(this.maxTwilightPoints);\n table.writeUInt16(this.maxStorage);\n table.writeUInt16(this.maxFunctionDefs);\n table.writeUInt16(this.maxInstructionDefs);\n table.writeUInt16(this.maxStackElements);\n table.writeUInt16(this.maxSizeOfInstructions);\n table.writeUInt16(this.maxComponentElements);\n table.writeUInt16(this.maxComponentDepth);\n return table.data;\n };*/\n return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n __extends(HmtxTable, _super);\n\n function HmtxTable() {\n return HmtxTable.__super__.constructor.apply(this, arguments);\n }\n HmtxTable.prototype.tag = \"hmtx\";\n HmtxTable.prototype.parse = function(data) {\n var i, last, lsbCount, m, _j, _ref, _results;\n data.pos = this.offset;\n this.metrics = [];\n for (\n i = 0, _ref = this.file.hhea.numberOfMetrics;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n this.metrics.push({\n advance: data.readUInt16(),\n lsb: data.readInt16()\n });\n }\n lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n this.leftSideBearings = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(data.readInt16());\n }\n return _results;\n })();\n this.widths = function() {\n var _j, _len, _ref1, _results;\n _ref1 = this.metrics;\n _results = [];\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n m = _ref1[_j];\n _results.push(m.advance);\n }\n return _results;\n }.call(this);\n last = this.widths[this.widths.length - 1];\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(this.widths.push(last));\n }\n return _results;\n };\n /***************************************************************/\n /* function : forGlyph */\n /* comment : Returns the advance width and lsb for this glyph. */\n /***************************************************************/\n HmtxTable.prototype.forGlyph = function(id) {\n if (id in this.metrics) {\n return this.metrics[id];\n }\n return {\n advance: this.metrics[this.metrics.length - 1].advance,\n lsb: this.leftSideBearings[id - this.metrics.length]\n };\n };\n /*HmtxTable.prototype.encode = function (mapping) {\n var id, metric, table, _i, _len;\n table = new Data;\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n metric = this.forGlyph(id);\n table.writeUInt16(metric.advance);\n table.writeUInt16(metric.lsb);\n }\n return table.data;\n };*/\n return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n __extends(GlyfTable, _super);\n\n function GlyfTable() {\n return GlyfTable.__super__.constructor.apply(this, arguments);\n }\n GlyfTable.prototype.tag = \"glyf\";\n GlyfTable.prototype.parse = function() {\n return (this.cache = {});\n };\n GlyfTable.prototype.glyphFor = function(id) {\n var data,\n index,\n length,\n loca,\n numberOfContours,\n raw,\n xMax,\n xMin,\n yMax,\n yMin;\n if (id in this.cache) {\n return this.cache[id];\n }\n loca = this.file.loca;\n data = this.file.contents;\n index = loca.indexOf(id);\n length = loca.lengthOf(id);\n if (length === 0) {\n return (this.cache[id] = null);\n }\n data.pos = this.offset + index;\n raw = new Data(data.read(length));\n numberOfContours = raw.readShort();\n xMin = raw.readShort();\n yMin = raw.readShort();\n xMax = raw.readShort();\n yMax = raw.readShort();\n if (numberOfContours === -1) {\n this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n } else {\n this.cache[id] = new SimpleGlyph(\n raw,\n numberOfContours,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n return this.cache[id];\n };\n GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n var glyph, id, offsets, table, _i, _len;\n table = [];\n offsets = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n glyph = glyphs[id];\n offsets.push(table.length);\n if (glyph) {\n table = table.concat(glyph.encode(old2new));\n }\n }\n offsets.push(table.length);\n return {\n table: table,\n offsets: offsets\n };\n };\n return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n /**************************************************************************/\n /* function : SimpleGlyph */\n /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n /**************************************************************************/\n function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n this.raw = raw;\n this.numberOfContours = numberOfContours;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = false;\n }\n SimpleGlyph.prototype.encode = function() {\n return this.raw.data;\n };\n return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n var ARG_1_AND_2_ARE_WORDS,\n MORE_COMPONENTS,\n WE_HAVE_AN_X_AND_Y_SCALE,\n WE_HAVE_A_SCALE,\n WE_HAVE_A_TWO_BY_TWO,\n WE_HAVE_INSTRUCTIONS;\n ARG_1_AND_2_ARE_WORDS = 0x0001;\n WE_HAVE_A_SCALE = 0x0008;\n MORE_COMPONENTS = 0x0020;\n WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n WE_HAVE_A_TWO_BY_TWO = 0x0080;\n WE_HAVE_INSTRUCTIONS = 0x0100;\n\n /********************************************************************************************************************/\n /* function : CompoundGlypg generator */\n /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n /********************************************************************************************************************/\n function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n var data, flags;\n this.raw = raw;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = true;\n this.glyphIDs = [];\n this.glyphOffsets = [];\n data = this.raw;\n while (true) {\n flags = data.readShort();\n this.glyphOffsets.push(data.pos);\n this.glyphIDs.push(data.readUInt16());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n data.pos += 4;\n } else {\n data.pos += 2;\n }\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.pos += 8;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.pos += 4;\n } else if (flags & WE_HAVE_A_SCALE) {\n data.pos += 2;\n }\n }\n }\n /****************************************************************************************************************/\n /* function : CompoundGlypg encode */\n /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n /****************************************************************************************************************/\n CompoundGlyph.prototype.encode = function() {\n var i, result, _len, _ref;\n result = new Data(__slice.call(this.raw.data));\n _ref = this.glyphIDs;\n for (i = 0, _len = _ref.length; i < _len; ++i) {\n result.pos = this.glyphOffsets[i];\n }\n return result.data;\n };\n return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n __extends(LocaTable, _super);\n\n function LocaTable() {\n return LocaTable.__super__.constructor.apply(this, arguments);\n }\n LocaTable.prototype.tag = \"loca\";\n LocaTable.prototype.parse = function(data) {\n var format, i;\n data.pos = this.offset;\n format = this.file.head.indexToLocFormat;\n if (format === 0) {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 2) {\n _results.push(data.readUInt16() * 2);\n }\n return _results;\n }.call(this));\n } else {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 4) {\n _results.push(data.readUInt32());\n }\n return _results;\n }.call(this));\n }\n };\n LocaTable.prototype.indexOf = function(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n var LocaTable = new Uint32Array(this.offsets.length);\n var glyfPtr = 0;\n var listGlyf = 0;\n for (var k = 0; k < LocaTable.length; ++k) {\n LocaTable[k] = glyfPtr;\n if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n ++listGlyf;\n LocaTable[k] = glyfPtr;\n var start = this.offsets[k];\n var len = this.offsets[k + 1] - start;\n if (len > 0) {\n glyfPtr += len;\n }\n }\n }\n var newLocaTable = new Array(LocaTable.length * 4);\n for (var j = 0; j < LocaTable.length; ++j) {\n newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n }\n return newLocaTable;\n };\n return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n var key, ret, val;\n ret = {};\n for (key in object) {\n val = object[key];\n ret[val] = key;\n }\n return ret;\n};\n\n/*var successorOf = function (input) {\n var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n alphabet = 'abcdefghijklmnopqrstuvwxyz';\n length = alphabet.length;\n result = input;\n i = input.length;\n while (i >= 0) {\n last = input.charAt(--i);\n if (isNaN(last)) {\n index = alphabet.indexOf(last.toLowerCase());\n if (index === -1) {\n next = last;\n carry = true;\n }\n else {\n next = alphabet.charAt((index + 1) % length);\n isUpperCase = last === last.toUpperCase();\n if (isUpperCase) {\n next = next.toUpperCase();\n }\n carry = index + 1 >= length;\n if (carry && i === 0) {\n added = isUpperCase ? 'A' : 'a';\n result = added + next + result.slice(1);\n break;\n }\n }\n }\n else {\n next = +last + 1;\n carry = next > 9;\n if (carry) {\n next = 0;\n }\n if (carry && i === 0) {\n result = '1' + next + result.slice(1);\n break;\n }\n }\n result = result.slice(0, i) + next + result.slice(i + 1);\n if (!carry) {\n break;\n }\n }\n return result;\n };*/\n\nvar Subset = (function() {\n function Subset(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.next = 33;\n }\n /*Subset.prototype.use = function (character) {\n var i, _i, _ref;\n if (typeof character === 'string') {\n for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.use(character.charCodeAt(i));\n }\n return;\n }\n if (!this.unicodes[character]) {\n this.subset[this.next] = character;\n return this.unicodes[character] = this.next++;\n }\n };*/\n /*Subset.prototype.encodeText = function (text) {\n var char, i, string, _i, _ref;\n string = '';\n for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n char = this.unicodes[text.charCodeAt(i)];\n string += String.fromCharCode(char);\n }\n return string;\n };*/\n /***************************************************************/\n /* function : generateCmap */\n /* comment : Returns the unicode cmap for this font. */\n /***************************************************************/\n Subset.prototype.generateCmap = function() {\n var mapping, roman, unicode, unicodeCmap, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n mapping = {};\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n mapping[roman] = unicodeCmap[unicode];\n }\n return mapping;\n };\n /*Subset.prototype.glyphIDs = function () {\n var ret, roman, unicode, unicodeCmap, val, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n ret = [0];\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n val = unicodeCmap[unicode];\n if ((val != null) && __indexOf.call(ret, val) < 0) {\n ret.push(val);\n }\n }\n return ret.sort();\n };*/\n /******************************************************************/\n /* function : glyphsFor */\n /* comment : Returns simple glyph objects for the input character.*/\n /******************************************************************/\n Subset.prototype.glyphsFor = function(glyphIDs) {\n var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n glyphs = {};\n for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n id = glyphIDs[_i];\n glyphs[id] = this.font.glyf.glyphFor(id);\n }\n additionalIDs = [];\n for (id in glyphs) {\n glyph = glyphs[id];\n if (glyph != null ? glyph.compound : void 0) {\n additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n }\n }\n if (additionalIDs.length > 0) {\n _ref = this.glyphsFor(additionalIDs);\n for (id in _ref) {\n glyph = _ref[id];\n glyphs[id] = glyph;\n }\n }\n return glyphs;\n };\n /***************************************************************/\n /* function : encode */\n /* comment : Encode various tables for the characters you use. */\n /***************************************************************/\n Subset.prototype.encode = function(glyID, indexToLocFormat) {\n var cmap,\n code,\n glyf,\n glyphs,\n id,\n ids,\n loca,\n new2old,\n newIDs,\n nextGlyphID,\n old2new,\n oldID,\n oldIDs,\n tables,\n _ref;\n cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n glyphs = this.glyphsFor(glyID);\n old2new = {\n 0: 0\n };\n _ref = cmap.charMap;\n for (code in _ref) {\n ids = _ref[code];\n old2new[ids.old] = ids[\"new\"];\n }\n nextGlyphID = cmap.maxGlyphID;\n for (oldID in glyphs) {\n if (!(oldID in old2new)) {\n old2new[oldID] = nextGlyphID++;\n }\n }\n new2old = invert(old2new);\n newIDs = Object.keys(new2old).sort(function(a, b) {\n return a - b;\n });\n oldIDs = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n id = newIDs[_i];\n _results.push(new2old[id]);\n }\n return _results;\n })();\n glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n loca = this.font.loca.encode(glyf.offsets, oldIDs);\n tables = {\n cmap: this.font.cmap.raw(),\n glyf: glyf.table,\n loca: loca,\n hmtx: this.font.hmtx.raw(),\n hhea: this.font.hhea.raw(),\n maxp: this.font.maxp.raw(),\n post: this.font.post.raw(),\n name: this.font.name.raw(),\n head: this.font.head.encode(indexToLocFormat)\n };\n if (this.font.os2.exists) {\n tables[\"OS/2\"] = this.font.os2.raw();\n }\n return this.font.directory.encode(tables);\n };\n return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n var pad;\n\n function PDFObject() {}\n pad = function(str, length) {\n return (Array(length + 1).join(\"0\") + str).slice(-length);\n };\n /*****************************************************************************/\n /* function : convert */\n /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n /*****************************************************************************/\n PDFObject.convert = function(object) {\n var e, items, key, out, val;\n if (Array.isArray(object)) {\n items = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = object.length; _i < _len; _i++) {\n e = object[_i];\n _results.push(PDFObject.convert(e));\n }\n return _results;\n })().join(\" \");\n return \"[\" + items + \"]\";\n } else if (typeof object === \"string\") {\n return \"/\" + object;\n } else if (object != null ? object.isString : void 0) {\n return \"(\" + object + \")\";\n } else if (object instanceof Date) {\n return (\n \"(D:\" +\n pad(object.getUTCFullYear(), 4) +\n pad(object.getUTCMonth(), 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n \"Z)\"\n );\n } else if ({}.toString.call(object) === \"[object Object]\") {\n out = [\"<<\"];\n for (key in object) {\n val = object[key];\n out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n }\n out.push(\">>\");\n return out.join(\"\\n\");\n } else {\n return \"\" + object;\n }\n };\n return PDFObject;\n})();\n"],"names":["globalObject","window","global","self","consoleLog","console","log","apply","arguments","consoleWarn","str","warn","call","consoleError","error","bom","blob","opts","autoBom","test","type","Blob","String","fromCharCode","download","url","name","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","_global","HTMLAnchorElement","prototype","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","navigator","msSaveOrOpenBlob","popup","title","body","innerText","force","isSafari","HTMLElement","safari","isChromeIOS","userAgent","FileReader","reader","onloadend","result","replace","readAsDataURL","RGBColor","color_string","ok","charAt","substr","toLowerCase","channels","simple_colors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","color_defs","re","example","process","bits","parseInt","i","length","processor","exec","r","g","b","isNaN","toRGB","toHex","toString","atob","btoa","bind","md5cycle","x","k","c","d","ff","gg","hh","ii","add32","cmn","q","s","t","md51","n","state","md5blk","substring","tail","charCodeAt","md5blks","hex_chr","split","rhex","j","hex","join","singleToByteString","toByteString","map","md5Bin","md5","md5Check","lsw","msw","repeat","num","Array","rc4","key","data","lastKey","lastState","out","permissionOptions","print","modify","copy","PDFSecurity","permissions","userPassword","ownerPassword","fileId","v","protection","forEach","perm","Error","padding","paddedUserPassword","paddedOwnerPassword","O","processOwnerPassword","P","encryptionKey","lsbFirstWord","hexToBytes","U","toHexString","byteString","byte","slice","bytes","push","encryptor","objectId","generation","toPDFName","strLength","charCode","hexStr","paddingHexStr","PubSub","context","topics","subscribe","topic","callback","once","hasOwnProperty","token","Math","random","unsubscribe","Object","keys","publish","args","tokens","sub","ex","message","getTopics","GState","parameters","supported","p","indexOf","id","objectNumber","equals","other","ignore","count","Pattern","gState","matrix","ShadingPattern","coords","colors","TilingPattern","boundingBox","xStep","yStep","stream","cloneIndex","jsPDF","options","orientation","unit","format","compressPdf","filters","userUnit","precision","floatPrecision","defaultPathOperation","encryptionOptions","compress","encryption","userPermissions","abs","putOnlyUsedFonts","usedFonts","API","internal","__private__","pdfVersion","getPdfVersion","setPdfVersion","value","pageFormats","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","dl","letter","legal","ledger","tabloid","getPageFormats","getPageFormat","ApiMode","COMPAT","ADVANCED","apiMode","advancedAPI","saveGraphicsState","Matrix","scaleFactor","getPageHeight","setFontSize","getFontSize","compatAPI","restoreGraphicsState","combineFontStyleAndFontWeight","fontStyle","fontWeight","doSwitch","isAdvancedAPI","advancedApiModeTrap","methodName","roundToPrecision","number","parmPrecision","tmpPrecision","toFixed","hpf","f2","f3","scale","transformY","y","transformScaleY","setPrecision","getFileId","setFileId","toUpperCase","floor","creationDate","convertDateToPDFDate","parmDate","tzoffset","getTimezoneOffset","tzsign","tzhour","tzmin","timeZoneString","padd2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","parmPDFDate","year","month","date","hour","minutes","seconds","resultingDate","Date","setCreationDate","tmpCreationDateString","regexPDFCreationDate","getCreationDate","padd2Hex","hexString","offsets","content","contentLength","additionalObjects","pages","currentPage","hasCustomDestination","outputDestination","resetDocument","rootDictionaryObjId","newObjectDeferred","resourceDictionaryObjId","setCustomOutputDestination","destination","setOutputDestination","resetCustomOutputDestination","string","write","getArrayBuffer","len","ab","ArrayBuffer","u8","Uint8Array","standardFonts","getStandardFonts","activeFontSize","fontSize","size","R2L","setR2L","getR2L","zoomMode","setZoomMode","zoom","validZoomModes","undefined","getZoomMode","pageMode","setPageMode","pmode","validPageModes","getPageMode","layoutMode","setLayoutMode","layout","validLayoutModes","getLayoutMode","setDisplayMode","documentProperties","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","properties","property","setDocumentProperty","fonts","fontmap","activeFontKey","fontStateStack","patterns","patternMap","gStates","gStatesMap","activeGState","page","pagesContext","events","hotfixes","renderTargets","renderTargetMap","renderTargetStack","pageX","pageY","pageMatrix","sx","shy","shx","sy","tx","ty","_matrix","defineProperty","get","set","atan2","decompose","separator","multiply","f","scaleX","sqrt","shear","scaleY","translate","rotate","skew","inversed","quot","aInv","bInv","cInv","dInv","eInv","fInv","applyToPoint","pt","Point","applyToRectangle","rect","pt1","pt2","w","h","Rectangle","clone","matrixMult","m1","m2","identityMatrix","unitMatrix","addPattern","pattern","prefix","patternKey","addShadingPattern","beginTilingPattern","beginNewRenderTarget","endTilingPattern","pop","restore","newObject","oid","newObjectDeferredBegin","doOutput","newAdditionalObject","objId","obj","decodeColorString","color","colorEncoded","floatVal","parseFloat","colorAsRGB","encodeColorString","ch1","ch2","ch3","ch4","letterArray","pdfColorType","rgbColor","getFilters","putStream","alreadyAppliedFilters","addLength1","valueOfLength1","processedData","keyValues","additionalKeyValues","processDataByFilters","reverseChain","filterAsString","isArray","decodeParmsArray","putPage","pageNumber","pageObjectNumber","pageContentsObjId","contentsObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageContent","putPages","pageObjectNumbers","kids","putFont","font","isAlreadyPutted","postScriptName","encoding","putFonts","fontKey","putXObject","xObject","width","height","putXObjects","xObjectKey","interpolateAndEncodeRGBStream","numberSamples","tValues","dT","offset","unshift","index","aColor","bColor","round","trim","putShadingPattern","funcObjectNumber","putTilingPattern","deferredResourceDictionaryIds","resourcesObjectId","patternObjectId","resourcesOid","objectOid","putPatterns","putGState","putGStates","gStateKey","putXobjectDict","putEncryptionDict","putFontDict","putShadingPatternDict","putTilingPatternDict","putGStatesDict","putResourceDictionary","objectIds","putResources","Number","MAX_SAFE_INTEGER","putAdditionalObjects","addFontToFontDictionary","fontName","addFont","isStandardFont","metadata","instance","addFonts","arrayOfFonts","l","parts","dictionary","SAFE","__safeCall","fn","foo","__safeCallWrapper","stack","m","alert","bar","to8bitStream","text","flags","sourceEncoding","encodingBlock","outputEncoding","newtext","isUnicode","ch","bch","autoencode","codePages","noBOM","pdfEscape","beginPage","_setPage","_addPage","parmFormat","parmOrientation","dimensions","min","setLineWidth","lineWidth","strokeColor","lineCapID","lineJoinID","_deletePage","splice","setPage","getNumberOfPages","getFont","fontNameLowerCase","disableWarning","noFallback","putInfo","version","putCatalog","tmpRootDictionaryObjId","pcn","putTrailer","putHeader","putXRef","buildDocument","offsetOfXRef","getBlob","output","filename","save","dataURI","pdfDocument","unescape","encodeURIComponent","pdfObjectUrl","integrity","htmlForNewWindow","JSON","stringify","nW","pdfJsUrl","htmlForPDFjsNewWindow","PDFjsNewWindow","scope","documentElement","querySelector","contentWindow","PDFViewerApplication","htmlForDataURLNewWindow","dataURLNewWindow","hasHotfix","hotfixName","getEncryptor","getPageInfo","pageNumberOneBased","getPageInfoByObjId","getCurrentPageInfo","addPage","insertPage","beforePage","movePage","targetPage","tmpPages","tmpPagesContext","deletePage","transform","payload","da","angle","align","charSpace","maxWidth","horizontalScale","tmp","transformationMatrix","xtra","isHex","lineHeight","lineHeightFactor","ESC","TabLen","transformTextToSpecialArray","sa","concat","curDa","shift","processTextByFunction","processingFunction","tmpResult","textIsOfTypeString","tmpTextIsOfTypeString","match","descent","baseline","splitTextToSize","reduce","acc","textLine","mutex","PI","rotationDirection","cos","sin","activeCharSpace","setCharSpace","getCharSpace","lang","renderingMode","parmRenderingMode","stroke","usedRenderingMode","leading","pageWidth","pageSize","getWidth","activeFont","lineWidths","assign","wordSpacingPerLine","newY","getStringUnitWidth","doKerning","prevWidth","newX","getHorizontalCoordinate","getVerticalCoordinate","doReversing","posX","posY","reverse","activeFontEncoding","STRING","ARRAY","variant","wordSpacing","generatePosition","parmPosX","parmPosY","parmTransformationMatrix","position","lineIndex","textColor","clip","rule","clipEvenOdd","discardPath","isValidStyle","style","validStyleVariants","setDefaultPathOperation","operator","getStyle","op","close","fill","fillWithOptionalPattern","fillEvenOdd","fillStroke","fillStrokeEvenOdd","fillWithPattern","putStyle","cloneTilingPattern","patternData","patternId","clipRuleFromStyle","setGState","moveTo","lineTo","curveTo","x1","y1","x2","y2","x3","y3","line","lines","closed","scalex","scaley","leg","x4","y4","path","triangle","roundedRect","rx","ry","MyArc","SQRT2","ellipse","lx","ly","circle","setFont","getFontEntry","getFontList","list","encodingOptions","getLineWidth","setLineDash","setLineDashPattern","dashArray","dashPhase","getLineHeight","setLineHeightFactor","getLineHeightFactor","pageHeight","getHorizontalCoordinateString","getVerticalCoordinateString","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","getTextColor","setTextColor","CapJoinStyles","butt","but","miter","rounded","projecting","project","square","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","addGState","duplicate","fontState","setCurrentTransformationMatrix","comment","_x","enumerable","_y","_type","_w","_h","RenderTarget","getPageWidth","setPageWidth","setPageHeight","endFormObject","newXObject","xObjectId","beginFormObject","doFormObject","getFormObject","returnPromise","unload","Promise","resolve","reject","plugin","newEvents","eventname","handler_and_args","getCoordinateString","collections","setWidth","getHeight","setHeight","getPDFVersion","configurable","jsPDFAPI","pdfUnescape","f5","__acroform__","inherit","child","parent","create","constructor","createFormXObject","formObject","xobj","AcroFormXObject","AcroFormAppearance","BBox","setBit","bitPosition","bitMask","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","coordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","calculateAppearanceStream","appearanceStreamContent","V","DV","_V","calcRes","calculateX","maxFontSize","returnValue","textSplit","multiline","word","lineSpacing","borderPadding","isSmallerThanWidth","lastLine","TextWidth","calculateFontSpace","FieldWidth","FontSize","textHeight","startY","startX","lastY","firstWordInLine","lastWordInLine","lastLength","currWord","lineCount","Line","isWithNewLine","nextLineIsSmaller","isLastWord","currLine","textAlign","acroformPluginTemplate","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","annotReferenceCallback","acroformPlugin","Fields","hasAnnotation","createAnnotationReference","putForm","object","findEntry","entry","annotations","find","putCatalogCallback","AcroFormDictionaryCallback","_eventID","createFieldCallback","fieldArray","standardFields","Kids","fieldObject","keyValueList","oldRect","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","appearance","appearanceStreamString","createXFormObjectCallback","initializeAcroForm","AcroFormField","FieldNum","parse","AcroFormDictionary","arrayToPdfArray","array","getMatches","regex","matches","pdfArrayToStringArray","toPdfString","AcroFormPDFObject","_objId","_scope","writable","getOwnPropertyNames","filter","getOwnPropertyDescriptor","_BBox","_stream","_Kids","_DA","_F","Boolean","F","_Ff","_Rect","_FT","_T","AcroFormChildClass","_fontName","_fontStyle","_fontSize","_maxFontSize","_color","AcroFormTextField","_DV","AcroFormButton","_hasAppearanceStream","_page","Ff","_Q","AcroFormChoiceField","FT","_TI","_Opt","getOptions","setOptions","sort","addOption","removeOption","allEntries","combo","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","edit","_MK","CA","_AS","AcroFormPushButton","pushButton","AcroFormRadioButton","radio","_parent","_optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","Parent","addField","AcroFormCheckBox","CheckBox","_MaxLen","isInteger","AcroFormPasswordField","password","N","On","YesNormal","D","YesPushDown","Off","OffPushDown","encodedColor","DotRadius","Bezier_C","DotRadiusBezier","kc","dc","Cross","cross","calculateCross","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","namespace","__addimage__","UNKNOWN","ARRAY_APPLY_BATCH","imageFileTypeHeaders","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","imageData","fallbackFormat","headerSchemata","compareResult","fileType","Uint8ClampedArray","isArrayBufferView","putImage","image","colorSpace","color_spaces","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","arrayBufferToBinaryString","putResourcesCallback","images","putXObjectsDictCallback","checkCompressValue","image_compression","NONE","initialize","getImages","getImageIndex","notDefined","generateAliasFromImageData","sHashCode","isImageTypeSupported","isDOMElement","nodeType","getImageDataFromElement","element","nodeName","hasAttribute","src","getAttribute","tmpImageData","loadFile","mimeType","toDataURL","checkImagesForAlias","alias","determineWidthAndHeight","writeImageToPDF","rotation","dims","coord","vcoord","f4","rotationTransformationMatrix","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","FAST","MEDIUM","SLOW","hash","byteLength","validateStringAsBase64","possibleBase64String","extractImageFromDataUrl","dataUrl","dataUrlParts","extractedInfo","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","binary_string","buffer","buf","subarray","addImage","compression","processImageData","dataAsBinaryString","convertBase64ToBinaryString","stringData","throwError","base64Info","rawData","getImageProperties","notEmpty","addPageData","pageInfo","putPageData","pageAnnos","anno","found","escape","objText","objPopup","encryptorText","bounds","contents","popoff","loc","_nameMap","top","finalBounds","info","magFactor","left","createAnnotation","link","textWithLink","totalLineWidth","getTextWidth","linkHeight","linkWidth","numOfLines","ceil","txtWidth","arabicSubstitionA","ligatures","arabic_diacritics","alfletter","noChangeInForm","isolatedForm","finalForm","initialForm","medialForm","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","letters","tmpLigatures","effectedLetters","isArabicDiacritic","getCorrectForm","currentChar","beforeChar","nextChar","parseArabic","currentLetter","prevLetter","nextLetter","words","newWords","processArabic","tmpText","autoPrint","refAutoPrintTag","addJS","Canvas","jsPdfInstance","_width","getContext","pageWrapXEnabled","pageWrapX","_height","pageWrapYEnabled","pageWrapY","_childNodes","_style","contextType","contextAttributes","pdf","context2d","_canvas","canvas","NO_MARGINS","bottom","right","px2pt","printingHeaderRow","_initialize","__cell__","headerFunction","margins","_reset","lastCell","Cell","_text","_lineNumber","_align","lineNumber","toArray","setHeaderFunction","func","getTextDimensions","amountOfLines","tempWidth","max","cellAddPage","cell","currentCell","tableHeaderRow","printHeaders","printHeaderRow","table","headers","config","headerNames","headerLabels","headerAligns","columnMatrix","columnWidths","column","columnMinWidths","tableHeaderConfigs","autoSize","css","headerBackgroundColor","headerTextColor","table_font_size","header","prompt","headerName","rec","row","rowHeight","calculateLineHeight","setTableHeaderRow","pv","cv","rowStart","Function","cellData","cellStart","col","table_x","table_y","model","new_page","tableHeaderCell","tempHeaderConf","currentTextColor","toLookup","arr","lookup","fontStyleOrder","italic","oblique","normal","fontStretchOrder","fontStretchLookup","fontWeights","fontWeightsLookup","normalizeFontStretch","stretch","normalizeFontStyle","normalizeFontWeight","weight","normalizeFontFace","fontFace","family","ref","buildFontFaceMap","fontFaces","normalized","searchFromPivot","matchingSet","order","pivot","dir","resolveFontStretch","resolveFontStyle","ordering","resolveFontWeight","defaultGenericFontFamilies","fixed","monospace","terminal","cursive","fantasy","serif","systemFonts","icon","menu","ruleToString","resolveFontFace","fontFaceMap","rules","defaultFontFamily","genericFontFamilies","eatWhiteSpace","input","trimLeft","parseQuotedFontFamily","quote","current","parseNonQuotedFontFamily","defaultFont","parseFontFamily","parsed","remaining","ContextLayer","ctx","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","margin","prevPageLastElemOffset","ignoreClearRect","_ctx","Context2D","parentNode","_pdf","_pageWrapXEnabled","_pageWrapYEnabled","_posX","_posY","_autoPaging","lastBreak","pageBreaks","_ctxStack","rgba","getRGBA","_fontFaceMap","getFontFaceMap","fontMap","convertedFontFaces","convertToFontFaces","styles","_fontFaces","fontVariant","fontFamily","rxFontSize","fontSizeUnit","jsPdfFontName","fallbackFonts","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","pathPreProcess","beginPath","closePath","pathBegin","quadraticCurveTo","cpx","cpy","pt0","bezierCurveTo","cp1x","cp1y","cp2x","cp2y","arc","radius","startAngle","endAngle","counterclockwise","isIdentity","xpt","x_radPt","x_radPt0","pow","arcTo","fillRect","strokeRect","clearRect","doStackPush","tmpPageNumber","ctxStack","doStackPop","rxRgb","rxRgba","rxTransparent","isCanvasGradient","getColor","fillText","degs","rad2deg","putText","strokeText","measureText","TextMetrics","scalewidth","scaleheight","setTransform","hasMargins","drawImage","img","swidth","sheight","imageProperties","factorX","factorY","clipFactorX","clipFactorY","decomposedTransformationMatrix","xRect","pageArray","getPagesByPath","sortPages","clipPath","autoPaging","pageWidthMinusMargins","topMargin","firstPageHeight","pageHeightMinusMargins","previousPageHeightSum","tmpPaths","pathPositionRedo","drawPaths","tmpRect","needsClipping","yOffset","rectOfQuadraticCurve","getQuadraticCurveBoundary","rectOfBezierCurve","getBezierCurveBoundary","paths","isClip","oldLineWidth","origPath","xPath","tmpPath","moves","delta","begin","start","deltas","iii","began","arcs","drawArc","drawLine","drawLines","doClip","getBaseline","getTextBottom","yBaseLine","createLinearGradient","canvasGradient","colorStops","addColorStop","createPattern","createRadialGradient","includeMove","curves","createArc","curve","doMove","drawCurve","textDimensions","yBottom","yTop","baselineRect","textBounds","oldSize","pageHeightMinusBottomMargin","pageWidthMinusRightMargin","textBoundsOnPage","doSlice","croppedText","baseLineRectOnPage","prevX","prevY","anticlockwise","EPSILON","twoPi","halfPi","totalAngle","sgn","remain","createSmallArc","q1","q2","k2","ar","cos_ar","sin_ar","ey","midX1","midY1","midX2","midY2","resultX1","resultX2","resultY1","resultY2","ax","ay","bx","by","cx","cy","dx","dy","tobx","toby","tocx","tocy","todx","tody","px","py","qx","qy","minx","miny","maxx","maxy","toqx","toqy","torx","tory","totx","toty","getPrevLineDashValue","prevLineDash","nextLineDash","Worker","require","u16","u32","fleb","fdeb","clim","freb","eb","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","le","co","rvb","sv","r_1","flt","fdt","flm","flrm","fdm","fdrm","o","bits16","shft","slc","inflt","dat","st","sl","noBuf","noSt","cbuf","bl","nbuf","final","pos","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","mxa","sym","add","dsym","end","wbits","wbits16","hTree","t2","i0","i1","i2","maxSym","tr","mbt","ln","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","wblk","syms","lf","df","li","bs","dlt","mlb","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","flen","ftlen","dtlen","ll","llm","lcts","it","clct","dst","deo","et","dflt","lvl","plvl","pre","post","lst","opt","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","pti","lin","din","adler","dopt","level","mem","wbytes","zlh","lv","zlv","zlibSync","unzlibSync","ASCII85Encode","ASCII85Decode","z","ASCIIHexEncode","ASCIIHexDecode","regexCheckIfHex","RegExp","FlateEncode","origData","filterChain","sync","browserRequest","loadImageFile","request","sanitizeUnicode","dataLength","charArray","StringFromCharCode","overrideMimeType","responseText","loadHtml2Canvas","exports","module","define","amd","catch","then","html2canvas","default","loadDomPurify","dompurify","objType","tagName","el","className","innerHTML","sanitize","cloneNode","javascriptEnabled","createTextNode","nodeValue","firstChild","nextSibling","appendChild","addEventListener","scrollTop","scrollLeft","root","convert","template","setProgress","promise","__proto__","prop","container","overlay","progress","val","enableLinks","backgroundColor","from","getType","from_main","to","toContainer","toCanvas","toImg","toPdf","prereqs","checkSrc","checkPageSize","setPageSize","thenList","toContainer_main","overlayCSS","overflow","zIndex","containerCSS","display","windowWidth","clientWidth","scrollWidth","offsetWidth","source","scrollHeight","offsetHeight","clientHeight","clear","border","float","checkContainer","contains","toCanvas_main","onrendered","toCanvas_post","onRendered","removeChild","toContext2d","toContext2d_main","async","allowTaint","scrollX","scrollY","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","toContext2d_post","checkCanvas","toImg_main","imgData","quality","checkContext2d","toPdf_main","outputImg","outputPdf","checkPdf","outputPdf_main","checkImg","outputImg_main","save_main","doCallback","doCallback_main","fns","set_prop","setMargin","set_jsPDF","set_opt","set_main","cbk","get_main","setMargin_main","toPx","setPageSize_main","getPageSize","inner","ratio","updateProgress","onFulfilled","onRejected","thenCore","then_main","then_pre","then_post","thenBase","isNative","selfPromise","returnVal","thenExternal","thenList_forEach","catchExternal","msg","error_main","using","export","run","format_as_string","err","html","worker","jsNamesObj","jsJsObj","javascript","namesOid","outline","children","render","createNamedDestinations","totalPages","dests","names2Oid","makeRef","item","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","markers","getJpegInfo","numcomponents","blockLength","processJPEG","bpc","APNG_BLEND_OP_SOURCE","APNG_DISPOSE_OP_BACKGROUND","APNG_DISPOSE_OP_PREVIOUS","makeImage","scratchCanvas","scratchCtx","chunkSize","palLen","delayDen","delayNum","frame","section","palShort","_i","_j","_ref","animation","readUInt32","_results","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","Infinity","frames","read","xOffset","readUInt16","delay","disposeOp","blendOp","indexed","grayscale","rgb","hasAlphaChannel","pixelBitlength","decodePixels","pixelBytes","fullPixels","_this","pass","x0","y0","abyte","pa","paeth","pb","pc","pixels","scanlineLength","upper","upperLeft","_k","_l","_m","isFull","fullPos","partPos","decodePalette","ret","_ref1","copyToImageData","alpha","_decodedPalette","hasBrowserCanvas","putImageData","Image","decodeFrames","_len","createImageData","renderFrame","animate","doFrame","frameNumber","_timeout","stopAnimation","clearTimeout","_png","canCompress","hasCompressionJS","compressBytes","lineLength","colorsPerPixel","filter_method","filterUp","filterSub","filterAverage","filterPaeth","applyPngFilterMethod","filter_methods","getFilterMethods","prevLine","results","ind","getIndexOfSmallestSum","filterNone","up","upLeft","paethPredictor","pLeft","pUp","pUpLeft","arrays","sum","getPredictorFromCompression","processPNG","trns","pal","smask","alphaData","hasColors","pixel","pDiff","pbl","trans","total","GifReader","pf0","global_palette_flag","num_global_colors_pow2","num_global_colors","background","global_palette_offset","global_palette_size","no_eof","transparent_index","disposal","loop_count","block_size","pf1","pf2","local_palette_flag","interlace_flag","num_local_colors_pow2","num_local_colors","palette_offset","palette_size","has_local_palette","data_offset","data_length","interlaced","loopCount","frameInfo","frame_num","decodeAndBlitFrameBGRA","num_pixels","index_stream","GifReaderLZWOutputIndexStream","framewidth","framestride","xleft","opbeg","opend","scanstride","interlaceskip","il","decodeAndBlitFrameRGBA","code_stream","output_length","min_code_size","clear_code","eoi_code","next_code","cur_code_size","code_mask","cur_shift","cur","subblock_size","code_table","prev_code","code","chase_code","chase_length","chase","op_end","JPEGEncoder","ffloor","YTable","UVTable","fdtbl_Y","fdtbl_UV","YDC_HT","UVDC_HT","YAC_HT","UVAC_HT","bitcode","category","outputfDCTQuant","DU","byteout","bytenew","bytepos","YDU","UDU","VDU","RGB_YUV_TABLE","currentQuality","ZigZag","std_dc_luminance_nrcodes","std_dc_luminance_values","std_ac_luminance_nrcodes","std_ac_luminance_values","std_dc_chrominance_nrcodes","std_dc_chrominance_values","std_ac_chrominance_nrcodes","std_ac_chrominance_values","initQuantTables","sf","YQT","UVQT","u","aasf","computeHuffmanTbl","nrcodes","std_table","codevalue","pos_in_table","HT","initHuffmanTbl","initCategoryNumber","nrlower","nrupper","cat","nr","nrneg","initRGBYUVTable","writeBits","posval","writeByte","writeWord","fDCTQuant","fdtbl","d0","d1","d2","d3","d4","d5","d6","d7","dataOff","I8","I64","tmp0","tmp7","tmp1","tmp6","tmp2","tmp5","tmp3","tmp4","tmp10","tmp13","tmp11","tmp12","z1","z5","z2","z4","z3","z11","z13","tmp0p2","tmp7p2","tmp1p2","tmp6p2","tmp2p2","tmp5p2","tmp3p2","tmp4p2","tmp10p2","tmp13p2","tmp11p2","tmp12p2","z1p2","z5p2","z2p2","z4p2","z3p2","z11p2","z13p2","writeAPP0","writeSOF0","writeDQT","writeDHT","writeSOS","processDU","CDU","DC","HTDC","HTAC","EOB","M16zeroes","I16","I63","DU_DCT","Diff","end0pos","lng","startpos","nrzeroes","nrmarker","initCharLookupTable","sfcc","encode","setQuality","DCY","DCU","DCV","displayName","quadWidth","fillbits","init","processGIF89A","qu","rawImageData","encoder","processGIF87A","BmpDecoder","is_with_alpha","datav","DataView","bottom_up","flag","parseHeader","parseBGR","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","hr","vr","importantColors","getUint8","quad","bitn","bit1","xlen","mode","bit4","before","after","bit8","bit15","dif_w","_11111","_1_5","B","bit16","_111111","_1_6","bit24","bit32","getData","processBMP","WebPDecoder","fa","L","J","H","I","Z","M","wa","wb","Ed","ma","_WebPDecoder","Fd","Ub","G","jc","Qb","qb","nd","pd","xb","Ca","Ka","oa","Jd","Yc","Zc","Qa","na","K","ca","cb","Sb","Ra","bb","Vb","ob","db","Gd","Hd","Wb","Sa","Xb","Id","ra","Ta","Yb","Ha","Zb","X","Mb","Xa","$b","ac","bc","xa","yb","ud","hd","jd","aa","Ia","cc","Kd","Ld","ec","Ea","Md","Nd","Od","Pd","Qd","fb","gb","hb","zb","Ab","Ja","Bb","Rd","A","Sd","ea","Tc","Cd","lb","Db","W","Cb","S","RGBA","kb","sd","Td","Ud","ib","bd","Da","Vd","T","Wd","ba","ka","Mc","Nc","fc","Rc","Xd","ya","Kb","za","gc","Ua","Va","memory","Ib","Jb","hc","Oa","ic","Aa","Yd","Ba","Wa","Zd","$d","ae","ta","Eb","be","ga","ce","Dc","mc","nc","de","ua","ub","ha","xc","vc","Ya","oc","C","ee","E","Q","fe","qc","Fb","rc","ge","va","Ma","sc","Gb","tc","uc","Hb","wc","yc","zc","qd","rd","ia","tb","he","$","Pb","wd","xd","vb","ie","Ac","Bc","je","Cc","VP8LMapColor32b","ke","VP8LMapColor8b","rb","Oc","R","me","qa","Y","la","ja","Fa","ne","sb","La","Za","$a","jb","oe","pe","nb","qe","Pa","Ga","Na","Ec","se","Fc","te","ue","yd","td","Rb","ve","we","Lb","Gc","xe","Wc","Xc","ye","Pc","Tb","zd","vd","od","ld","dd","Hc","ze","Sc","Qc","ad","Ob","Ad","Dd","Ae","Nb","Ic","Be","Kc","ed","$c","Jc","Bd","gd","Uc","Vc","put","Ce","De","Ee","Fe","Ge","He","Ie","Lc","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","ef","gf","hf","jf","kf","mf","nf","of","pf","qf","rf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","kd","Cf","Df","Ef","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Qf","WebPDecodeRGBA","memcmp","data_off","GetTag","GetLE16","GetLE24","GetLE32","WebPRiffParser","src_off","imagearray","alpha_chunk","alpha_size","alpha_offset","riff_size","fourcc","payload_size","payload_size_padded","feature_flags","src_off_","canvas_width","canvas_height","bgcolor","offset_x","offset_y","duration","blend","dispose","temp","webpdecoder","processWEBP","processRGBA","imagePixels","rgbOut","alphaOut","outIndex","alphaIndex","rgbData","setLanguage","langCode","langCodes","sq","an","hy","as","ast","az","eu","bn","br","bg","my","zh","cr","cs","en","eo","fo","fj","fi","fr","fy","fur","gl","gu","ht","hi","hu","is","iu","kn","ks","kk","km","ky","tlh","ko","mk","ms","mt","mi","mr","mo","nv","ng","no","nn","or","om","pl","rm","ro","ru","sz","sg","si","sr","sk","so","es","sw","tt","th","tig","ts","tn","tk","uk","hsb","ur","vi","vo","xh","ji","zu","languageSettings","isSubscribed","languageCode","getCharWidthsArray","widths","Unicode","widthsFractionOf","fof","kerning","kerningFractionOf","kerningValue","char_code","prior_char_code","default_char_width","widthOfString","widthOfGlyph","characterToGlyph","splitLongWord","widths_array","firstLineMaxLen","maxLen","answer","workingLen","startOfLine","splitParagraphIntoLines","maxlen","line_length","textIndent","separator_length","current_word_length","spaceCharWidth","lineIndent","pad","wrds","wrd","idx","postProcess","fsize","newOptions","paragraphs","fontUnit_maxLen","__fontmetrics__","decoded","encoded","mappingUncompress","mappingCompress","vals","keystring","valuestring","numberprefix","uncompress","sign","stringparts","activeobject","parentchain","parent_key_pair","keyparts","valueparts","datalen","WinAnsiEncoding","encodings","Courier","fontMetrics","Symbol","ZapfDingbats","metrics","file","TTFFont","glyIdsUsed","existsFileInVFS","getFileFromVFS","loadCanvg","canvg","addSvgAsImage","svg","ignoreMouse","ignoreAnimation","ignoreDimensions","doc","fromString","putTotalPages","pageExpression","replaceExpression","totalNumberOfPages","pdfEscape16","viewerPreferences","doReset","configuration","configurationTemplate","HideToolbar","defaultValue","explicitSet","valueSet","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","configurationKeys","rangeArray","isValid","method","arrayContainsElement","iterator","viewerpreferences","pdfDict","vPref","postPutResources","xmpmeta_beginning","rdf_beginning","__metadata__","namespaceuri","rdf_ending","xmpmeta_ending","utf8_xmpmeta_beginning","utf8_rdf_beginning","utf8_metadata","utf8_rdf_ending","utf8_xmpmeta_ending","total_len","metadata_object_number","addMetadata","padz","toUnicode","toUnicodeCmap","codes","range","unicode","unicodeMap","identityHFunction","subset","pdfOutput","pdfOutput2","fontTable","cmap","cmapData","fontDescriptor","PDFObject","bbox","stemV","italicAngle","ascender","decender","capHeight","DescendantFont","winAnsiEncodingFunction","hmtx","unitsPerEm","utf8TextFunction","cmapConfirm","strText","codeMap","utf8EscapeFunction","parms","_initializeVFS","vFS","addFileToVFS","filecontent","bidiUnicodeTypes","__bidiEngine__","_UNICODE_TYPES","_bidiUnicodeTypes","_STATE_TABLE_LTR","_STATE_TABLE_RTL","_TYPE_NAMES_MAP","EN","AN","_UNICODE_RANGES_MAP","_SWAP_TABLE","_LTR_RANGES_REG_EXPR","_lastArabic","_hasUbatB","_hasUbatS","DIR_LTR","DIR_RTL","_isInVisual","_isInRtl","_isOutVisual","_isOutRtl","_isSymmetricSwapping","_dir","_init","sourceToTargetMap","_isContextualDirRtl","_getCharType","rangeIdx","charType","_resolveCharType","chars","types","resolvedTypes","cType","wType","nType","rtlCandidate","_handleUbatS","levels","_invertString","_computeLevels","hiLevel","params","action","condition","newLevel","prevState","condPos","newState","stateTable","_invertByLevel","high","low","_symmetricSwap","_reorder","doBidiReorder","isSymmetricSwappingOrig","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","bidiEngine","bidiEngineFunction","Data","readString","Subset","registerTTF","directory","Directory","HeadTable","NameTable","CmapTable","hhea","HheaTable","maxp","MaxpTable","HmtxTable","PostTable","os2","OS2Table","loca","LocaTable","glyf","GlyfTable","exists","lineGap","xMin","yMin","xMax","yMax","raw","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","character","glyph","forGlyph","advance","includeGap","gap","readByte","writeUInt32","readInt32","int","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","checksum","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","adjustment","directoryLength","headOffset","log2","tableData","__slice","Table","__hasProp","__extends","ctor","__super__","_super","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","CmapEntry","endCode","glyphId","glyphIds","idDelta","idRangeOffset","saveOffset","segCount","segCountX2","startCode","platformID","encodingID","language","charmap","charMap","diff","endCodes","glyphIDs","indexes","last","nextID","old","rangeOffsets","startCodes","startGlyph","subtable","_len1","_len2","_len3","_len4","_len5","_len6","_len7","_n","_name","_o","_p","_q","new","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","numberOfGlyphs","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","_results1","numGlyphs","NameEntry","languageID","entries","stringOffset","strings","nameID","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","lsbCount","lsb","leftSideBearings","cache","glyphFor","numberOfContours","lengthOf","CompoundGlyph","SimpleGlyph","glyphs","mapping","old2new","compound","ARG_1_AND_2_ARE_WORDS","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_SCALE","WE_HAVE_A_TWO_BY_TWO","glyphOffsets","activeGlyphs","glyfPtr","listGlyf","newLocaTable","invert","unicodes","next","generateCmap","roman","unicodeCmap","glyphsFor","additionalIDs","glyID","ids","new2old","newIDs","nextGlyphID","oldID","oldIDs","items","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"mappings":"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"} \ No newline at end of file diff --git a/lib/jspdf/jspdf.umd.min.js b/lib/jspdf/jspdf.umd.min.js new file mode 100644 index 0000000..a9781f1 --- /dev/null +++ b/lib/jspdf/jspdf.umd.min.js @@ -0,0 +1,398 @@ +/** @license + * + * jsPDF - PDF Document creation from JavaScript + * Version 2.5.1 Built on 2022-01-28T15:37:57.789Z + * CommitID 00000000 + * + * Copyright (c) 2010-2021 James Hall , https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).jspdf={})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=function(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this}();function n(){r.console&&"function"==typeof r.console.log&&r.console.log.apply(r.console,arguments)}var i={log:n,warn:function(t){r.console&&("function"==typeof r.console.warn?r.console.warn.apply(r.console,arguments):n.call(null,arguments))},error:function(t){r.console&&("function"==typeof r.console.error?r.console.error.apply(r.console,arguments):n(t))}};function a(t,e,r){var n=new XMLHttpRequest;n.open("GET",t),n.responseType="blob",n.onload=function(){l(n.response,e,r)},n.onerror=function(){i.error("could not download file")},n.send()}function o(t){var e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch(t){}return e.status>=200&&e.status<=299}function s(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(r){var e=document.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}var c,u,l=r.saveAs||("object"!==("undefined"==typeof window?"undefined":e(window))||window!==r?function(){}:"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype?function(t,e,n){var i=r.URL||r.webkitURL,c=document.createElement("a");e=e||t.name||"download",c.download=e,c.rel="noopener","string"==typeof t?(c.href=t,c.origin!==location.origin?o(c.href)?a(t,e,n):s(c,c.target="_blank"):s(c)):(c.href=i.createObjectURL(t),setTimeout((function(){i.revokeObjectURL(c.href)}),4e4),setTimeout((function(){s(c)}),0))}:"msSaveOrOpenBlob"in navigator?function(t,r,n){if(r=r||t.name||"download","string"==typeof t)if(o(t))a(t,r,n);else{var c=document.createElement("a");c.href=t,c.target="_blank",setTimeout((function(){s(c)}))}else navigator.msSaveOrOpenBlob(function(t,r){return void 0===r?r={autoBom:!1}:"object"!==e(r)&&(i.warn("Deprecated: Expected third argument to be a object"),r={autoBom:!r}),r.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t}(t,n),r)}:function(t,n,i,o){if((o=o||open("","_blank"))&&(o.document.title=o.document.body.innerText="downloading..."),"string"==typeof t)return a(t,n,i);var s="application/octet-stream"===t.type,c=/constructor/i.test(r.HTMLElement)||r.safari,u=/CriOS\/[\d]+/.test(navigator.userAgent);if((u||s&&c)&&"object"===("undefined"==typeof FileReader?"undefined":e(FileReader))){var l=new FileReader;l.onloadend=function(){var t=l.result;t=u?t:t.replace(/^data:[^;]*;/,"data:attachment/file;"),o?o.location.href=t:location=t,o=null},l.readAsDataURL(t)}else{var h=r.URL||r.webkitURL,f=h.createObjectURL(t);o?o.location=f:location.href=f,o=null,setTimeout((function(){h.revokeObjectURL(f)}),4e4)}}); +/** + * A class to parse color values + * @author Stoyan Stefanov + * {@link http://www.phpied.com/rgb-color-parser-in-javascript/} + * @license Use it if you like it + */function h(t){var e;t=t||"",this.ok=!1,"#"==t.charAt(0)&&(t=t.substr(1,6));t={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"}[t=(t=t.replace(/ /g,"")).toLowerCase()]||t;for(var r=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],n=0;n255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),r=this.b.toString(16);return 1==t.length&&(t="0"+t),1==e.length&&(e="0"+e),1==r.length&&(r="0"+r),"#"+t+e+r}} +/** + * @license + * Joseph Myers does not specify a particular license for his work. + * + * Author: Joseph Myers + * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js + * + * Modified by: Owen Leong + */ +function f(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r=p(r,n,i,a,e[0],7,-680876936),a=p(a,r,n,i,e[1],12,-389564586),i=p(i,a,r,n,e[2],17,606105819),n=p(n,i,a,r,e[3],22,-1044525330),r=p(r,n,i,a,e[4],7,-176418897),a=p(a,r,n,i,e[5],12,1200080426),i=p(i,a,r,n,e[6],17,-1473231341),n=p(n,i,a,r,e[7],22,-45705983),r=p(r,n,i,a,e[8],7,1770035416),a=p(a,r,n,i,e[9],12,-1958414417),i=p(i,a,r,n,e[10],17,-42063),n=p(n,i,a,r,e[11],22,-1990404162),r=p(r,n,i,a,e[12],7,1804603682),a=p(a,r,n,i,e[13],12,-40341101),i=p(i,a,r,n,e[14],17,-1502002290),r=g(r,n=p(n,i,a,r,e[15],22,1236535329),i,a,e[1],5,-165796510),a=g(a,r,n,i,e[6],9,-1069501632),i=g(i,a,r,n,e[11],14,643717713),n=g(n,i,a,r,e[0],20,-373897302),r=g(r,n,i,a,e[5],5,-701558691),a=g(a,r,n,i,e[10],9,38016083),i=g(i,a,r,n,e[15],14,-660478335),n=g(n,i,a,r,e[4],20,-405537848),r=g(r,n,i,a,e[9],5,568446438),a=g(a,r,n,i,e[14],9,-1019803690),i=g(i,a,r,n,e[3],14,-187363961),n=g(n,i,a,r,e[8],20,1163531501),r=g(r,n,i,a,e[13],5,-1444681467),a=g(a,r,n,i,e[2],9,-51403784),i=g(i,a,r,n,e[7],14,1735328473),r=m(r,n=g(n,i,a,r,e[12],20,-1926607734),i,a,e[5],4,-378558),a=m(a,r,n,i,e[8],11,-2022574463),i=m(i,a,r,n,e[11],16,1839030562),n=m(n,i,a,r,e[14],23,-35309556),r=m(r,n,i,a,e[1],4,-1530992060),a=m(a,r,n,i,e[4],11,1272893353),i=m(i,a,r,n,e[7],16,-155497632),n=m(n,i,a,r,e[10],23,-1094730640),r=m(r,n,i,a,e[13],4,681279174),a=m(a,r,n,i,e[0],11,-358537222),i=m(i,a,r,n,e[3],16,-722521979),n=m(n,i,a,r,e[6],23,76029189),r=m(r,n,i,a,e[9],4,-640364487),a=m(a,r,n,i,e[12],11,-421815835),i=m(i,a,r,n,e[15],16,530742520),r=v(r,n=m(n,i,a,r,e[2],23,-995338651),i,a,e[0],6,-198630844),a=v(a,r,n,i,e[7],10,1126891415),i=v(i,a,r,n,e[14],15,-1416354905),n=v(n,i,a,r,e[5],21,-57434055),r=v(r,n,i,a,e[12],6,1700485571),a=v(a,r,n,i,e[3],10,-1894986606),i=v(i,a,r,n,e[10],15,-1051523),n=v(n,i,a,r,e[1],21,-2054922799),r=v(r,n,i,a,e[8],6,1873313359),a=v(a,r,n,i,e[15],10,-30611744),i=v(i,a,r,n,e[6],15,-1560198380),n=v(n,i,a,r,e[13],21,1309151649),r=v(r,n,i,a,e[4],6,-145523070),a=v(a,r,n,i,e[11],10,-1120210379),i=v(i,a,r,n,e[2],15,718787259),n=v(n,i,a,r,e[9],21,-343485551),t[0]=S(r,t[0]),t[1]=S(n,t[1]),t[2]=S(i,t[2]),t[3]=S(a,t[3])}function d(t,e,r,n,i,a){return e=S(S(e,t),S(n,a)),S(e<>>32-i,r)}function p(t,e,r,n,i,a,o){return d(e&r|~e&n,t,e,i,a,o)}function g(t,e,r,n,i,a,o){return d(e&n|r&~n,t,e,i,a,o)}function m(t,e,r,n,i,a,o){return d(e^r^n,t,e,i,a,o)}function v(t,e,r,n,i,a,o){return d(r^(e|~n),t,e,i,a,o)}function b(t){var e,r=t.length,n=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=t.length;e+=64)f(n,y(t.substring(e-64,e)));t=t.substring(e-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e>2]|=t.charCodeAt(e)<<(e%4<<3);if(i[e>>2]|=128<<(e%4<<3),e>55)for(f(n,i),e=0;e<16;e++)i[e]=0;return i[14]=8*r,f(n,i),n}function y(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}c=r.atob.bind(r),u=r.btoa.bind(r);var w="0123456789abcdef".split("");function N(t){for(var e="",r=0;r<4;r++)e+=w[t>>8*r+4&15]+w[t>>8*r&15];return e}function L(t){return String.fromCharCode((255&t)>>0,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function A(t){return function(t){return t.map(L).join("")}(b(t))}var x="5d41402abc4b2a76b9719d911017c592"!=function(t){for(var e=0;e>16)+(e>>16)+(r>>16)<<16|65535&r}return t+e&4294967295} +/** + * @license + * FPDF is released under a permissive license: there is no usage restriction. + * You may embed it freely in your application (commercial or not), with or + * without modifications. + * + * Reference: http://www.fpdf.org/en/script/script37.php + */function _(t,e){var r,n,i,a;if(t!==r){for(var o=(i=t,a=1+(256/t.length>>0),new Array(a+1).join(i)),s=[],c=0;c<256;c++)s[c]=c;var u=0;for(c=0;c<256;c++){var l=s[c];u=(u+l+o.charCodeAt(c))%256,s[c]=s[u],s[u]=l}r=t,n=s}else s=n;var h=e.length,f=0,d=0,p="";for(c=0;c€/\f©þdSiz";var a=(e+this.padding).substr(0,32),o=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=A(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=_(this.encryptionKey,this.padding)}function F(t){if(/[^\u0000-\u00ff]/.test(t))throw new Error("Invalid PDF Name Object: "+t+", Only accept ASCII characters.");for(var e="",r=t.length,n=0;n126)e+="#"+("0"+i.toString(16)).slice(-2);else e+=t[n]}return e}function I(t){if("object"!==e(t))throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)");var n={};this.subscribe=function(t,e,r){if(r=r||!1,"string"!=typeof t||"function"!=typeof e||"boolean"!=typeof r)throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)");n.hasOwnProperty(t)||(n[t]={});var i=Math.random().toString(35);return n[t][i]=[e,!!r],i},this.unsubscribe=function(t){for(var e in n)if(n[e][t])return delete n[e][t],0===Object.keys(n[e]).length&&delete n[e],!0;return!1},this.publish=function(e){if(n.hasOwnProperty(e)){var a=Array.prototype.slice.call(arguments,1),o=[];for(var s in n[e]){var c=n[e][s];try{c[0].apply(t,a)}catch(t){r.console&&i.error("jsPDF PubSub Error",t.message,t)}c[1]&&o.push(s)}o.length&&o.forEach(this.unsubscribe)}},this.getTopics=function(){return n}}function C(t){if(!(this instanceof C))return new C(t);var e="opacity,stroke-opacity".split(",");for(var r in t)t.hasOwnProperty(r)&&e.indexOf(r)>=0&&(this[r]=t[r]);this.id="",this.objectNumber=-1}function j(t,e){this.gState=t,this.matrix=e,this.id="",this.objectNumber=-1}function O(t,e,r,n,i){if(!(this instanceof O))return new O(t,e,r,n,i);this.type="axial"===t?2:3,this.coords=e,this.colors=r,j.call(this,n,i)}function B(t,e,r,n,i){if(!(this instanceof B))return new B(t,e,r,n,i);this.boundingBox=t,this.xStep=e,this.yStep=r,this.stream="",this.cloneIndex=0,j.call(this,n,i)}function M(t){var n,a="string"==typeof arguments[0]?arguments[0]:"p",o=arguments[1],s=arguments[2],c=arguments[3],f=[],d=1,p=16,g="S",m=null;"object"===e(t=t||{})&&(a=t.orientation,o=t.unit||o,s=t.format||s,c=t.compress||t.compressPdf||c,null!==(m=t.encryption||null)&&(m.userPassword=m.userPassword||"",m.ownerPassword=m.ownerPassword||"",m.userPermissions=m.userPermissions||[]),d="number"==typeof t.userUnit?Math.abs(t.userUnit):1,void 0!==t.precision&&(n=t.precision),void 0!==t.floatPrecision&&(p=t.floatPrecision),g=t.defaultPathOperation||"S"),f=t.filters||(!0===c?["FlateEncode"]:f),o=o||"mm",a=(""+(a||"P")).toLowerCase();var v=t.putOnlyUsedFonts||!1,b={},y={internal:{},__private__:{}};y.__private__.PubSub=I;var w="1.3",N=y.__private__.getPdfVersion=function(){return w};y.__private__.setPdfVersion=function(t){w=t};var L={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};y.__private__.getPageFormats=function(){return L};var A=y.__private__.getPageFormat=function(t){return L[t]};s=s||"a4";var x={COMPAT:"compat",ADVANCED:"advanced"},S=x.COMPAT;function _(){this.saveGraphicsState(),ht(new Vt(_t,0,0,-_t,0,Rr()*_t).toString()+" cm"),this.setFontSize(this.getFontSize()/_t),g="n",S=x.ADVANCED}function P(){this.restoreGraphicsState(),g="S",S=x.COMPAT}var j=y.__private__.combineFontStyleAndFontWeight=function(t,e){if("bold"==t&&"normal"==e||"bold"==t&&400==e||"normal"==t&&"italic"==e||"bold"==t&&"italic"==e)throw new Error("Invalid Combination of fontweight and fontstyle");return e&&(t=400==e||"normal"===e?"italic"===t?"italic":"normal":700!=e&&"bold"!==e||"normal"!==t?(700==e?"bold":e)+""+t:"bold"),t};y.advancedAPI=function(t){var e=S===x.COMPAT;return e&&_.call(this),"function"!=typeof t||(t(this),e&&P.call(this)),this},y.compatAPI=function(t){var e=S===x.ADVANCED;return e&&P.call(this),"function"!=typeof t||(t(this),e&&_.call(this)),this},y.isAdvancedAPI=function(){return S===x.ADVANCED};var E,q=function(t){if(S!==x.ADVANCED)throw new Error(t+" is only available in 'advanced' API mode. You need to call advancedAPI() first.")},D=y.roundToPrecision=y.__private__.roundToPrecision=function(t,e){var r=n||e;if(isNaN(t)||isNaN(r))throw new Error("Invalid argument passed to jsPDF.roundToPrecision");return t.toFixed(r).replace(/0+$/,"")};E=y.hpf=y.__private__.hpf="number"==typeof p?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,p)}:"smart"===p?function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,t>-1&&t<1?16:5)}:function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.hpf");return D(t,16)};var R=y.f2=y.__private__.f2=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f2");return D(t,2)},T=y.__private__.f3=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.f3");return D(t,3)},U=y.scale=y.__private__.scale=function(t){if(isNaN(t))throw new Error("Invalid argument passed to jsPDF.scale");return S===x.COMPAT?t*_t:S===x.ADVANCED?t:void 0},z=function(t){return S===x.COMPAT?Rr()-t:S===x.ADVANCED?t:void 0},H=function(t){return U(z(t))};y.__private__.setPrecision=y.setPrecision=function(t){"number"==typeof parseInt(t,10)&&(n=parseInt(t,10))};var W,V="00000000000000000000000000000000",G=y.__private__.getFileId=function(){return V},Y=y.__private__.setFileId=function(t){return V=void 0!==t&&/^[a-fA-F0-9]{32}$/.test(t)?t.toUpperCase():V.split("").map((function(){return"ABCDEF0123456789".charAt(Math.floor(16*Math.random()))})).join(""),null!==m&&(Ye=new k(m.userPermissions,m.userPassword,m.ownerPassword,V)),V};y.setFileId=function(t){return Y(t),this},y.getFileId=function(){return G()};var J=y.__private__.convertDateToPDFDate=function(t){var e=t.getTimezoneOffset(),r=e<0?"+":"-",n=Math.floor(Math.abs(e/60)),i=Math.abs(e%60),a=[r,Q(n),"'",Q(i),"'"].join("");return["D:",t.getFullYear(),Q(t.getMonth()+1),Q(t.getDate()),Q(t.getHours()),Q(t.getMinutes()),Q(t.getSeconds()),a].join("")},X=y.__private__.convertPDFDateToDate=function(t){var e=parseInt(t.substr(2,4),10),r=parseInt(t.substr(6,2),10)-1,n=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),a=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return new Date(e,r,n,i,a,o,0)},K=y.__private__.setCreationDate=function(t){var e;if(void 0===t&&(t=new Date),t instanceof Date)e=J(t);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t))throw new Error("Invalid argument passed to jsPDF.setCreationDate");e=t}return W=e},Z=y.__private__.getCreationDate=function(t){var e=W;return"jsDate"===t&&(e=X(W)),e};y.setCreationDate=function(t){return K(t),this},y.getCreationDate=function(t){return Z(t)};var $,Q=y.__private__.padd2=function(t){return("0"+parseInt(t)).slice(-2)},tt=y.__private__.padd2Hex=function(t){return("00"+(t=t.toString())).substr(t.length)},et=0,rt=[],nt=[],it=0,at=[],ot=[],st=!1,ct=nt,ut=function(){et=0,it=0,nt=[],rt=[],at=[],Qt=Kt(),te=Kt()};y.__private__.setCustomOutputDestination=function(t){st=!0,ct=t};var lt=function(t){st||(ct=t)};y.__private__.resetCustomOutputDestination=function(){st=!1,ct=nt};var ht=y.__private__.out=function(t){return t=t.toString(),it+=t.length+1,ct.push(t),ct},ft=y.__private__.write=function(t){return ht(1===arguments.length?t.toString():Array.prototype.join.call(arguments," "))},dt=y.__private__.getArrayBuffer=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r);e--;)n[e]=t.charCodeAt(e);return r},pt=[["Helvetica","helvetica","normal","WinAnsiEncoding"],["Helvetica-Bold","helvetica","bold","WinAnsiEncoding"],["Helvetica-Oblique","helvetica","italic","WinAnsiEncoding"],["Helvetica-BoldOblique","helvetica","bolditalic","WinAnsiEncoding"],["Courier","courier","normal","WinAnsiEncoding"],["Courier-Bold","courier","bold","WinAnsiEncoding"],["Courier-Oblique","courier","italic","WinAnsiEncoding"],["Courier-BoldOblique","courier","bolditalic","WinAnsiEncoding"],["Times-Roman","times","normal","WinAnsiEncoding"],["Times-Bold","times","bold","WinAnsiEncoding"],["Times-Italic","times","italic","WinAnsiEncoding"],["Times-BoldItalic","times","bolditalic","WinAnsiEncoding"],["ZapfDingbats","zapfdingbats","normal",null],["Symbol","symbol","normal",null]];y.__private__.getStandardFonts=function(){return pt};var gt=t.fontSize||16;y.__private__.setFontSize=y.setFontSize=function(t){return gt=S===x.ADVANCED?t/_t:t,this};var mt,vt=y.__private__.getFontSize=y.getFontSize=function(){return S===x.COMPAT?gt:gt*_t},bt=t.R2L||!1;y.__private__.setR2L=y.setR2L=function(t){return bt=t,this},y.__private__.getR2L=y.getR2L=function(){return bt};var yt,wt=y.__private__.setZoomMode=function(t){var e=[void 0,null,"fullwidth","fullheight","fullpage","original"];if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(t))mt=t;else if(isNaN(t)){if(-1===e.indexOf(t))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "'+t+'" is not recognized.');mt=t}else mt=parseInt(t,10)};y.__private__.getZoomMode=function(){return mt};var Nt,Lt=y.__private__.setPageMode=function(t){if(-1==[void 0,null,"UseNone","UseOutlines","UseThumbs","FullScreen"].indexOf(t))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "'+t+'" is not recognized.');yt=t};y.__private__.getPageMode=function(){return yt};var At=y.__private__.setLayoutMode=function(t){if(-1==[void 0,null,"continuous","single","twoleft","tworight","two"].indexOf(t))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "'+t+'" is not recognized.');Nt=t};y.__private__.getLayoutMode=function(){return Nt},y.__private__.setDisplayMode=y.setDisplayMode=function(t,e,r){return wt(t),At(e),Lt(r),this};var xt={title:"",subject:"",author:"",keywords:"",creator:""};y.__private__.getDocumentProperty=function(t){if(-1===Object.keys(xt).indexOf(t))throw new Error("Invalid argument passed to jsPDF.getDocumentProperty");return xt[t]},y.__private__.getDocumentProperties=function(){return xt},y.__private__.setDocumentProperties=y.setProperties=y.setDocumentProperties=function(t){for(var e in xt)xt.hasOwnProperty(e)&&t[e]&&(xt[e]=t[e]);return this},y.__private__.setDocumentProperty=function(t,e){if(-1===Object.keys(xt).indexOf(t))throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty");return xt[t]=e};var St,_t,Pt,kt,Ft,It={},Ct={},jt=[],Ot={},Bt={},Mt={},Et={},qt=null,Dt=0,Rt=[],Tt=new I(y),Ut=t.hotfixes||[],zt={},Ht={},Wt=[],Vt=function t(e,r,n,i,a,o){if(!(this instanceof t))return new t(e,r,n,i,a,o);isNaN(e)&&(e=1),isNaN(r)&&(r=0),isNaN(n)&&(n=0),isNaN(i)&&(i=1),isNaN(a)&&(a=0),isNaN(o)&&(o=0),this._matrix=[e,r,n,i,a,o]};Object.defineProperty(Vt.prototype,"sx",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Vt.prototype,"shy",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Vt.prototype,"shx",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Vt.prototype,"sy",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Vt.prototype,"tx",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Vt.prototype,"ty",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Vt.prototype,"a",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Vt.prototype,"b",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Vt.prototype,"c",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Vt.prototype,"d",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Vt.prototype,"e",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Vt.prototype,"f",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Vt.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Vt.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Vt.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Vt.prototype,"isIdentity",{get:function(){return 1===this.sx&&(0===this.shy&&(0===this.shx&&(1===this.sy&&(0===this.tx&&0===this.ty))))}}),Vt.prototype.join=function(t){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(E).join(t)},Vt.prototype.multiply=function(t){var e=t.sx*this.sx+t.shy*this.shx,r=t.sx*this.shy+t.shy*this.sy,n=t.shx*this.sx+t.sy*this.shx,i=t.shx*this.shy+t.sy*this.sy,a=t.tx*this.sx+t.ty*this.shx+this.tx,o=t.tx*this.shy+t.ty*this.sy+this.ty;return new Vt(e,r,n,i,a,o)},Vt.prototype.decompose=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(t*t+e*e),s=(t/=o)*r+(e/=o)*n;r-=t*s,n-=e*s;var c=Math.sqrt(r*r+n*n);return s/=c,t*(n/=c)>16&255,i=u>>8&255,a=255&u}if(void 0===i||void 0===o&&n===i&&i===a)if("string"==typeof n)r=n+" "+s[0];else switch(t.precision){case 2:r=R(n/255)+" "+s[0];break;case 3:default:r=T(n/255)+" "+s[0]}else if(void 0===o||"object"===e(o)){if(o&&!isNaN(o.a)&&0===o.a)return r=["1.","1.","1.",s[1]].join(" ");if("string"==typeof n)r=[n,i,a,s[1]].join(" ");else switch(t.precision){case 2:r=[R(n/255),R(i/255),R(a/255),s[1]].join(" ");break;default:case 3:r=[T(n/255),T(i/255),T(a/255),s[1]].join(" ")}}else if("string"==typeof n)r=[n,i,a,o,s[2]].join(" ");else switch(t.precision){case 2:r=[R(n),R(i),R(a),R(o),s[2]].join(" ");break;case 3:default:r=[T(n),T(i),T(a),T(o),s[2]].join(" ")}return r},ne=y.__private__.getFilters=function(){return f},ie=y.__private__.putStream=function(t){var e=(t=t||{}).data||"",r=t.filters||ne(),n=t.alreadyAppliedFilters||[],i=t.addLength1||!1,a=e.length,o=t.objectId,s=function(t){return t};if(null!==m&&void 0===o)throw new Error("ObjectId must be passed to putStream for file encryption");null!==m&&(s=Ye.encryptor(o,0));var c={};!0===r&&(r=["FlateEncode"]);var u=t.additionalKeyValues||[],l=(c=void 0!==M.API.processDataByFilters?M.API.processDataByFilters(e,r):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(" "):n.toString());if(0!==c.data.length&&(u.push({key:"Length",value:c.data.length}),!0===i&&u.push({key:"Length1",value:a})),0!=l.length)if(l.split("/").length-1==1)u.push({key:"Filter",value:l});else{u.push({key:"Filter",value:"["+l+"]"});for(var h=0;h>"),0!==c.data.length&&(ht("stream"),ht(s(c.data)),ht("endstream"))},ae=y.__private__.putPage=function(t){var e=t.number,r=t.data,n=t.objId,i=t.contentsObjId;Zt(n,!0),ht("<>"),ht("endobj");var a=r.join("\n");return S===x.ADVANCED&&(a+="\nQ"),Zt(i,!0),ie({data:a,filters:ne(),objectId:i}),ht("endobj"),n},oe=y.__private__.putPages=function(){var t,e,r=[];for(t=1;t<=Dt;t++)Rt[t].objId=Kt(),Rt[t].contentsObjId=Kt();for(t=1;t<=Dt;t++)r.push(ae({number:t,data:ot[t],objId:Rt[t].objId,contentsObjId:Rt[t].contentsObjId,mediaBox:Rt[t].mediaBox,cropBox:Rt[t].cropBox,bleedBox:Rt[t].bleedBox,trimBox:Rt[t].trimBox,artBox:Rt[t].artBox,userUnit:Rt[t].userUnit,rootDictionaryObjId:Qt,resourceDictionaryObjId:te}));Zt(Qt,!0),ht("<>"),ht("endobj"),Tt.publish("postPutPages")},se=function(t){Tt.publish("putFont",{font:t,out:ht,newObject:Xt,putStream:ie}),!0!==t.isAlreadyPutted&&(t.objectNumber=Xt(),ht("<<"),ht("/Type /Font"),ht("/BaseFont /"+F(t.postScriptName)),ht("/Subtype /Type1"),"string"==typeof t.encoding&&ht("/Encoding /"+t.encoding),ht("/FirstChar 32"),ht("/LastChar 255"),ht(">>"),ht("endobj"))},ce=function(){for(var t in It)It.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&se(It[t])},ue=function(t){t.objectNumber=Xt();var e=[];e.push({key:"Type",value:"/XObject"}),e.push({key:"Subtype",value:"/Form"}),e.push({key:"BBox",value:"["+[E(t.x),E(t.y),E(t.x+t.width),E(t.y+t.height)].join(" ")+"]"}),e.push({key:"Matrix",value:"["+t.matrix.toString()+"]"});var r=t.pages[1].join("\n");ie({data:r,additionalKeyValues:e,objectId:t.objectNumber}),ht("endobj")},le=function(){for(var t in zt)zt.hasOwnProperty(t)&&ue(zt[t])},he=function(t,e){var r,n=[],i=1/(e-1);for(r=0;r<1;r+=i)n.push(r);if(n.push(1),0!=t[0].offset){var a={offset:0,color:t[0].color};t.unshift(a)}if(1!=t[t.length-1].offset){var o={offset:1,color:t[t.length-1].color};t.push(o)}for(var s="",c=0,u=0;ut[c+1].offset;)c++;var l=t[c].offset,h=(r-l)/(t[c+1].offset-l),f=t[c].color,d=t[c+1].color;s+=tt(Math.round((1-h)*f[0]+h*d[0]).toString(16))+tt(Math.round((1-h)*f[1]+h*d[1]).toString(16))+tt(Math.round((1-h)*f[2]+h*d[2]).toString(16))}return s.trim()},fe=function(t,e){e||(e=21);var r=Xt(),n=he(t.colors,e),i=[];i.push({key:"FunctionType",value:"0"}),i.push({key:"Domain",value:"[0.0 1.0]"}),i.push({key:"Size",value:"["+e+"]"}),i.push({key:"BitsPerSample",value:"8"}),i.push({key:"Range",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),i.push({key:"Decode",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),ie({data:n,additionalKeyValues:i,alreadyAppliedFilters:["/ASCIIHexDecode"],objectId:r}),ht("endobj"),t.objectNumber=Xt(),ht("<< /ShadingType "+t.type),ht("/ColorSpace /DeviceRGB");var a="/Coords ["+E(parseFloat(t.coords[0]))+" "+E(parseFloat(t.coords[1]))+" ";2===t.type?a+=E(parseFloat(t.coords[2]))+" "+E(parseFloat(t.coords[3])):a+=E(parseFloat(t.coords[2]))+" "+E(parseFloat(t.coords[3]))+" "+E(parseFloat(t.coords[4]))+" "+E(parseFloat(t.coords[5])),ht(a+="]"),t.matrix&&ht("/Matrix ["+t.matrix.toString()+"]"),ht("/Function "+r+" 0 R"),ht("/Extend [true true]"),ht(">>"),ht("endobj")},de=function(t,e){var r=Kt(),n=Xt();e.push({resourcesOid:r,objectOid:n}),t.objectNumber=n;var i=[];i.push({key:"Type",value:"/Pattern"}),i.push({key:"PatternType",value:"1"}),i.push({key:"PaintType",value:"1"}),i.push({key:"TilingType",value:"1"}),i.push({key:"BBox",value:"["+t.boundingBox.map(E).join(" ")+"]"}),i.push({key:"XStep",value:E(t.xStep)}),i.push({key:"YStep",value:E(t.yStep)}),i.push({key:"Resources",value:r+" 0 R"}),t.matrix&&i.push({key:"Matrix",value:"["+t.matrix.toString()+"]"}),ie({data:t.stream,additionalKeyValues:i,objectId:t.objectNumber}),ht("endobj")},pe=function(t){var e;for(e in Ot)Ot.hasOwnProperty(e)&&(Ot[e]instanceof O?fe(Ot[e]):Ot[e]instanceof B&&de(Ot[e],t))},ge=function(t){for(var e in t.objectNumber=Xt(),ht("<<"),t)switch(e){case"opacity":ht("/ca "+R(t[e]));break;case"stroke-opacity":ht("/CA "+R(t[e]))}ht(">>"),ht("endobj")},me=function(){var t;for(t in Mt)Mt.hasOwnProperty(t)&&ge(Mt[t])},ve=function(){for(var t in ht("/XObject <<"),zt)zt.hasOwnProperty(t)&&zt[t].objectNumber>=0&&ht("/"+t+" "+zt[t].objectNumber+" 0 R");Tt.publish("putXobjectDict"),ht(">>")},be=function(){Ye.oid=Xt(),ht("<<"),ht("/Filter /Standard"),ht("/V "+Ye.v),ht("/R "+Ye.r),ht("/U <"+Ye.toHexString(Ye.U)+">"),ht("/O <"+Ye.toHexString(Ye.O)+">"),ht("/P "+Ye.P),ht(">>"),ht("endobj")},ye=function(){for(var t in ht("/Font <<"),It)It.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&ht("/"+t+" "+It[t].objectNumber+" 0 R");ht(">>")},we=function(){if(Object.keys(Ot).length>0){for(var t in ht("/Shading <<"),Ot)Ot.hasOwnProperty(t)&&Ot[t]instanceof O&&Ot[t].objectNumber>=0&&ht("/"+t+" "+Ot[t].objectNumber+" 0 R");Tt.publish("putShadingPatternDict"),ht(">>")}},Ne=function(t){if(Object.keys(Ot).length>0){for(var e in ht("/Pattern <<"),Ot)Ot.hasOwnProperty(e)&&Ot[e]instanceof y.TilingPattern&&Ot[e].objectNumber>=0&&Ot[e].objectNumber>")}},Le=function(){if(Object.keys(Mt).length>0){var t;for(t in ht("/ExtGState <<"),Mt)Mt.hasOwnProperty(t)&&Mt[t].objectNumber>=0&&ht("/"+t+" "+Mt[t].objectNumber+" 0 R");Tt.publish("putGStateDict"),ht(">>")}},Ae=function(t){Zt(t.resourcesOid,!0),ht("<<"),ht("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"),ye(),we(),Ne(t.objectOid),Le(),ve(),ht(">>"),ht("endobj")},xe=function(){var t=[];ce(),me(),le(),pe(t),Tt.publish("putResources"),t.forEach(Ae),Ae({resourcesOid:te,objectOid:Number.MAX_SAFE_INTEGER}),Tt.publish("postPutResources")},Se=function(){Tt.publish("putAdditionalObjects");for(var t=0;t>8&&(c=!0);t=s.join("")}for(r=t.length;void 0===c&&0!==r;)t.charCodeAt(r-1)>>8&&(c=!0),r--;if(!c)return t;for(s=e.noBOM?[]:[254,255],r=0,n=t.length;r>8)>>8)throw new Error("Character at position "+r+" of string '"+t+"' exceeds 16bits. Cannot be encoded into UCS-2 BE");s.push(l),s.push(u-(l<<8))}return String.fromCharCode.apply(void 0,s)},Ce=y.__private__.pdfEscape=y.pdfEscape=function(t,e){return Ie(t,e).replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},je=y.__private__.beginPage=function(t){ot[++Dt]=[],Rt[Dt]={objId:0,contentsObjId:0,userUnit:Number(d),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(t[0]),topRightY:Number(t[1])}},Me(Dt),lt(ot[$])},Oe=function(t,e){var r,n,o;switch(a=e||a,"string"==typeof t&&(r=A(t.toLowerCase()),Array.isArray(r)&&(n=r[0],o=r[1])),Array.isArray(t)&&(n=t[0]*_t,o=t[1]*_t),isNaN(n)&&(n=s[0],o=s[1]),(n>14400||o>14400)&&(i.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"),n=Math.min(14400,n),o=Math.min(14400,o)),s=[n,o],a.substr(0,1)){case"l":o>n&&(s=[o,n]);break;case"p":n>o&&(s=[o,n])}je(s),pr(fr),ht(Lr),0!==kr&&ht(kr+" J"),0!==Fr&&ht(Fr+" j"),Tt.publish("addPage",{pageNumber:Dt})},Be=function(t){t>0&&t<=Dt&&(ot.splice(t,1),Rt.splice(t,1),Dt--,$>Dt&&($=Dt),this.setPage($))},Me=function(t){t>0&&t<=Dt&&($=t)},Ee=y.__private__.getNumberOfPages=y.getNumberOfPages=function(){return ot.length-1},qe=function(t,e,r){var n,a=void 0;return r=r||{},t=void 0!==t?t:It[St].fontName,e=void 0!==e?e:It[St].fontStyle,n=t.toLowerCase(),void 0!==Ct[n]&&void 0!==Ct[n][e]?a=Ct[n][e]:void 0!==Ct[t]&&void 0!==Ct[t][e]?a=Ct[t][e]:!1===r.disableWarning&&i.warn("Unable to look up font label for font '"+t+"', '"+e+"'. Refer to getFontList() for available fonts."),a||r.noFallback||null==(a=Ct.times[e])&&(a=Ct.times.normal),a},De=y.__private__.putInfo=function(){var t=Xt(),e=function(t){return t};for(var r in null!==m&&(e=Ye.encryptor(t,0)),ht("<<"),ht("/Producer ("+Ce(e("jsPDF "+M.version))+")"),xt)xt.hasOwnProperty(r)&&xt[r]&&ht("/"+r.substr(0,1).toUpperCase()+r.substr(1)+" ("+Ce(e(xt[r]))+")");ht("/CreationDate ("+Ce(e(W))+")"),ht(">>"),ht("endobj")},Re=y.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||Qt;switch(Xt(),ht("<<"),ht("/Type /Catalog"),ht("/Pages "+e+" 0 R"),mt||(mt="fullwidth"),mt){case"fullwidth":ht("/OpenAction [3 0 R /FitH null]");break;case"fullheight":ht("/OpenAction [3 0 R /FitV null]");break;case"fullpage":ht("/OpenAction [3 0 R /Fit]");break;case"original":ht("/OpenAction [3 0 R /XYZ null null 1]");break;default:var r=""+mt;"%"===r.substr(r.length-1)&&(mt=parseInt(mt)/100),"number"==typeof mt&&ht("/OpenAction [3 0 R /XYZ null null "+R(mt)+"]")}switch(Nt||(Nt="continuous"),Nt){case"continuous":ht("/PageLayout /OneColumn");break;case"single":ht("/PageLayout /SinglePage");break;case"two":case"twoleft":ht("/PageLayout /TwoColumnLeft");break;case"tworight":ht("/PageLayout /TwoColumnRight")}yt&&ht("/PageMode /"+yt),Tt.publish("putCatalog"),ht(">>"),ht("endobj")},Te=y.__private__.putTrailer=function(){ht("trailer"),ht("<<"),ht("/Size "+(et+1)),ht("/Root "+et+" 0 R"),ht("/Info "+(et-1)+" 0 R"),null!==m&&ht("/Encrypt "+Ye.oid+" 0 R"),ht("/ID [ <"+V+"> <"+V+"> ]"),ht(">>")},Ue=y.__private__.putHeader=function(){ht("%PDF-"+w),ht("%ºß¬à")},ze=y.__private__.putXRef=function(){var t="0000000000";ht("xref"),ht("0 "+(et+1)),ht("0000000000 65535 f ");for(var e=1;e<=et;e++){"function"==typeof rt[e]?ht((t+rt[e]()).slice(-10)+" 00000 n "):void 0!==rt[e]?ht((t+rt[e]).slice(-10)+" 00000 n "):ht("0000000000 00000 n ")}},He=y.__private__.buildDocument=function(){ut(),lt(nt),Tt.publish("buildDocument"),Ue(),oe(),Se(),xe(),null!==m&&be(),De(),Re();var t=it;return ze(),Te(),ht("startxref"),ht(""+t),ht("%%EOF"),lt(ot[$]),nt.join("\n")},We=y.__private__.getBlob=function(t){return new Blob([dt(t)],{type:"application/pdf"})},Ve=y.output=y.__private__.output=Fe((function(t,e){switch("string"==typeof(e=e||{})?e={filename:e}:e.filename=e.filename||"generated.pdf",t){case void 0:return He();case"save":y.save(e.filename);break;case"arraybuffer":return dt(He());case"blob":return We(He());case"bloburi":case"bloburl":if(void 0!==r.URL&&"function"==typeof r.URL.createObjectURL)return r.URL&&r.URL.createObjectURL(We(He()))||void 0;i.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.");break;case"datauristring":case"dataurlstring":var n="",a=He();try{n=u(a)}catch(t){n=u(unescape(encodeURIComponent(a)))}return"data:application/pdf;filename="+e.filename+";base64,"+n;case"pdfobjectnewwindow":if("[object Window]"===Object.prototype.toString.call(r)){var o="https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js",s=' integrity="sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==" crossorigin="anonymous"';e.pdfObjectUrl&&(o=e.pdfObjectUrl,s="");var c='\";\r\n var nW = globalObject.open();\r\n\r\n if (nW !== null) {\r\n nW.document.write(htmlForNewWindow);\r\n }\r\n return nW;\r\n } else {\r\n throw new Error(\r\n \"The option pdfobjectnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n case \"pdfjsnewwindow\":\r\n if (\r\n Object.prototype.toString.call(globalObject) === \"[object Window]\"\r\n ) {\r\n var pdfJsUrl = options.pdfJsUrl || \"examples/PDF.js/web/viewer.html\";\r\n var htmlForPDFjsNewWindow =\r\n \"\" +\r\n \"\" +\r\n '' +\r\n \"\";\r\n var dataURLNewWindow = globalObject.open();\r\n if (dataURLNewWindow !== null) {\r\n dataURLNewWindow.document.write(htmlForDataURLNewWindow);\r\n dataURLNewWindow.document.title = options.filename;\r\n }\r\n if (dataURLNewWindow || typeof safari === \"undefined\")\r\n return dataURLNewWindow;\r\n } else {\r\n throw new Error(\r\n \"The option dataurlnewwindow just works in a browser-environment.\"\r\n );\r\n }\r\n break;\r\n case \"datauri\":\r\n case \"dataurl\":\r\n return (globalObject.document.location.href = this.output(\r\n \"datauristring\",\r\n options\r\n ));\r\n default:\r\n return null;\r\n }\r\n }));\r\n\r\n /**\r\n * Used to see if a supplied hotfix was requested when the pdf instance was created.\r\n * @param {string} hotfixName - The name of the hotfix to check.\r\n * @returns {boolean}\r\n */\r\n var hasHotfix = function(hotfixName) {\r\n return (\r\n Array.isArray(hotfixes) === true && hotfixes.indexOf(hotfixName) > -1\r\n );\r\n };\r\n\r\n switch (unit) {\r\n case \"pt\":\r\n scaleFactor = 1;\r\n break;\r\n case \"mm\":\r\n scaleFactor = 72 / 25.4;\r\n break;\r\n case \"cm\":\r\n scaleFactor = 72 / 2.54;\r\n break;\r\n case \"in\":\r\n scaleFactor = 72;\r\n break;\r\n case \"px\":\r\n if (hasHotfix(\"px_scaling\") == true) {\r\n scaleFactor = 72 / 96;\r\n } else {\r\n scaleFactor = 96 / 72;\r\n }\r\n break;\r\n case \"pc\":\r\n scaleFactor = 12;\r\n break;\r\n case \"em\":\r\n scaleFactor = 12;\r\n break;\r\n case \"ex\":\r\n scaleFactor = 6;\r\n break;\r\n default:\r\n if (typeof unit === \"number\") {\r\n scaleFactor = unit;\r\n } else {\r\n throw new Error(\"Invalid unit: \" + unit);\r\n }\r\n }\r\n\r\n var encryption = null;\r\n setCreationDate();\r\n setFileId();\r\n\r\n var getEncryptor = function(objectId) {\r\n if (encryptionOptions !== null) {\r\n return encryption.encryptor(objectId, 0);\r\n }\r\n return function(data) {\r\n return data;\r\n };\r\n };\r\n\r\n //---------------------------------------\r\n // Public API\r\n\r\n var getPageInfo = (API.__private__.getPageInfo = API.getPageInfo = function(\r\n pageNumberOneBased\r\n ) {\r\n if (isNaN(pageNumberOneBased) || pageNumberOneBased % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");\r\n }\r\n var objId = pagesContext[pageNumberOneBased].objId;\r\n return {\r\n objId: objId,\r\n pageNumber: pageNumberOneBased,\r\n pageContext: pagesContext[pageNumberOneBased]\r\n };\r\n });\r\n\r\n var getPageInfoByObjId = (API.__private__.getPageInfoByObjId = function(\r\n objId\r\n ) {\r\n if (isNaN(objId) || objId % 1 !== 0) {\r\n throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");\r\n }\r\n for (var pageNumber in pagesContext) {\r\n if (pagesContext[pageNumber].objId === objId) {\r\n break;\r\n }\r\n }\r\n return getPageInfo(pageNumber);\r\n });\r\n\r\n var getCurrentPageInfo = (API.__private__.getCurrentPageInfo = API.getCurrentPageInfo = function() {\r\n return {\r\n objId: pagesContext[currentPage].objId,\r\n pageNumber: currentPage,\r\n pageContext: pagesContext[currentPage]\r\n };\r\n });\r\n\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @param format {String/Array} The format of the new page. Can be:
    • a0 - a10
    • b0 - b10
    • c0 - c10
    • dl
    • letter
    • government-letter
    • legal
    • junior-legal
    • ledger
    • tabloid
    • credit-card

    \r\n * Default is \"a4\". If you want to use your own format just pass instead of one of the above predefined formats the size as an number-array, e.g. [595.28, 841.89]\r\n * @param orientation {string} Orientation of the new page. Possible values are \"portrait\" or \"landscape\" (or shortcuts \"p\" (Default), \"l\").\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addPage\r\n */\r\n API.addPage = function() {\r\n _addPage.apply(this, arguments);\r\n return this;\r\n };\r\n /**\r\n * Adds (and transfers the focus to) new page to the PDF document.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name setPage\r\n * @param {number} page Switch the active page to the page number specified (indexed starting at 1).\r\n * @example\r\n * doc = jsPDF()\r\n * doc.addPage()\r\n * doc.addPage()\r\n * doc.text('I am on page 3', 10, 10)\r\n * doc.setPage(1)\r\n * doc.text('I am on page 1', 10, 10)\r\n */\r\n API.setPage = function() {\r\n _setPage.apply(this, arguments);\r\n setOutputDestination.call(this, pages[currentPage]);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name insertPage\r\n * @memberof jsPDF#\r\n *\r\n * @function\r\n * @instance\r\n * @param {Object} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.insertPage = function(beforePage) {\r\n this.addPage();\r\n this.movePage(currentPage, beforePage);\r\n return this;\r\n };\r\n\r\n /**\r\n * @name movePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @instance\r\n * @param {number} targetPage\r\n * @param {number} beforePage\r\n * @returns {jsPDF}\r\n */\r\n API.movePage = function(targetPage, beforePage) {\r\n var tmpPages, tmpPagesContext;\r\n if (targetPage > beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var i = targetPage; i > beforePage; i--) {\r\n pages[i] = pages[i - 1];\r\n pagesContext[i] = pagesContext[i - 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n } else if (targetPage < beforePage) {\r\n tmpPages = pages[targetPage];\r\n tmpPagesContext = pagesContext[targetPage];\r\n for (var j = targetPage; j < beforePage; j++) {\r\n pages[j] = pages[j + 1];\r\n pagesContext[j] = pagesContext[j + 1];\r\n }\r\n pages[beforePage] = tmpPages;\r\n pagesContext[beforePage] = tmpPagesContext;\r\n this.setPage(beforePage);\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Deletes a page from the PDF.\r\n * @name deletePage\r\n * @memberof jsPDF#\r\n * @function\r\n * @param {number} targetPage\r\n * @instance\r\n * @returns {jsPDF}\r\n */\r\n API.deletePage = function() {\r\n _deletePage.apply(this, arguments);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds text to page. Supports adding multiline text when 'text' argument is an Array of Strings.\r\n *\r\n * @function\r\n * @instance\r\n * @param {String|Array} text String or array of strings to be added to the page. Each line is shifted one line down per font, spacing settings declared before this call.\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page.\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page.\r\n * @param {Object} [options] - Collection of settings signaling how the text must be encoded.\r\n * @param {string} [options.align=left] - The alignment of the text, possible values: left, center, right, justify.\r\n * @param {string} [options.baseline=alphabetic] - Sets text baseline used when drawing the text, possible values: alphabetic, ideographic, bottom, top, middle, hanging\r\n * @param {number|Matrix} [options.angle=0] - Rotate the text clockwise or counterclockwise. Expects the angle in degree.\r\n * @param {number} [options.rotationDirection=1] - Direction of the rotation. 0 = clockwise, 1 = counterclockwise.\r\n * @param {number} [options.charSpace=0] - The space between each letter.\r\n * @param {number} [options.horizontalScale=1] - Horizontal scale of the text as a factor of the regular size.\r\n * @param {number} [options.lineHeightFactor=1.15] - The lineheight of each line.\r\n * @param {Object} [options.flags] - Flags for to8bitStream.\r\n * @param {boolean} [options.flags.noBOM=true] - Don't add BOM to Unicode-text.\r\n * @param {boolean} [options.flags.autoencode=true] - Autoencode the Text.\r\n * @param {number} [options.maxWidth=0] - Split the text by given width, 0 = no split.\r\n * @param {string} [options.renderingMode=fill] - Set how the text should be rendered, possible values: fill, stroke, fillThenStroke, invisible, fillAndAddForClipping, strokeAndAddPathForClipping, fillThenStrokeAndAddToPathForClipping, addToPathForClipping.\r\n * @param {boolean} [options.isInputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputVisual] - Option for the BidiEngine\r\n * @param {boolean} [options.isInputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isOutputRtl] - Option for the BidiEngine\r\n * @param {boolean} [options.isSymmetricSwapping] - Option for the BidiEngine\r\n * @param {number|Matrix} transform If transform is a number the text will be rotated by this value around the anchor set by x and y.\r\n *\r\n * If it is a Matrix, this matrix gets directly applied to the text, which allows shearing\r\n * effects etc.; the x and y offsets are then applied AFTER the coordinate system has been established by this\r\n * matrix. This means passing a rotation matrix that is equivalent to some rotation angle will in general yield a\r\n * DIFFERENT result. A matrix is only allowed in \"advanced\" API mode.\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name text\r\n */\r\n API.__private__.text = API.text = function(text, x, y, options, transform) {\r\n /*\r\n * Inserts something like this into PDF\r\n * BT\r\n * /F1 16 Tf % Font name + size\r\n * 16 TL % How many units down for next line in multiline text\r\n * 0 g % color\r\n * 28.35 813.54 Td % position\r\n * (line one) Tj\r\n * T* (line two) Tj\r\n * T* (line three) Tj\r\n * ET\r\n */\r\n options = options || {};\r\n var scope = options.scope || this;\r\n var payload, da, angle, align, charSpace, maxWidth, flags, horizontalScale;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, text, flags)\r\n // in effort to make all calls have similar signature like\r\n // function(data, coordinates... , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (\r\n typeof text === \"number\" &&\r\n typeof x === \"number\" &&\r\n (typeof y === \"string\" || Array.isArray(y))\r\n ) {\r\n var tmp = y;\r\n y = x;\r\n x = text;\r\n text = tmp;\r\n }\r\n\r\n var transformationMatrix;\r\n\r\n if (arguments[3] instanceof Matrix === false) {\r\n flags = arguments[3];\r\n angle = arguments[4];\r\n align = arguments[5];\r\n\r\n if (typeof flags !== \"object\" || flags === null) {\r\n if (typeof angle === \"string\") {\r\n align = angle;\r\n angle = null;\r\n }\r\n if (typeof flags === \"string\") {\r\n align = flags;\r\n flags = null;\r\n }\r\n if (typeof flags === \"number\") {\r\n angle = flags;\r\n flags = null;\r\n }\r\n options = {\r\n flags: flags,\r\n angle: angle,\r\n align: align\r\n };\r\n }\r\n } else {\r\n advancedApiModeTrap(\r\n \"The transform parameter of text() with a Matrix value\"\r\n );\r\n transformationMatrix = transform;\r\n }\r\n\r\n if (isNaN(x) || isNaN(y) || typeof text === \"undefined\" || text === null) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.text\");\r\n }\r\n\r\n if (text.length === 0) {\r\n return scope;\r\n }\r\n\r\n var xtra = \"\";\r\n var isHex = false;\r\n var lineHeight =\r\n typeof options.lineHeightFactor === \"number\"\r\n ? options.lineHeightFactor\r\n : lineHeightFactor;\r\n var scaleFactor = scope.internal.scaleFactor;\r\n\r\n function ESC(s) {\r\n s = s.split(\"\\t\").join(Array(options.TabLen || 9).join(\" \"));\r\n return pdfEscape(s, flags);\r\n }\r\n\r\n function transformTextToSpecialArray(text) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(curDa);\r\n } else {\r\n if (\r\n Array.isArray(text) &&\r\n (curDa.length === 1 ||\r\n (curDa[1] === undefined && curDa[2] === undefined))\r\n ) {\r\n da.push(curDa[0]);\r\n } else {\r\n da.push([curDa[0], curDa[1], curDa[2]]);\r\n }\r\n }\r\n }\r\n return da;\r\n }\r\n\r\n function processTextByFunction(text, processingFunction) {\r\n var result;\r\n if (typeof text === \"string\") {\r\n result = processingFunction(text)[0];\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n var da = [];\r\n var len = sa.length;\r\n var curDa;\r\n var tmpResult;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (typeof curDa === \"string\") {\r\n da.push(processingFunction(curDa)[0]);\r\n } else if (Array.isArray(curDa) && typeof curDa[0] === \"string\") {\r\n tmpResult = processingFunction(curDa[0], curDa[1], curDa[2]);\r\n da.push([tmpResult[0], tmpResult[1], tmpResult[2]]);\r\n }\r\n }\r\n result = da;\r\n }\r\n return result;\r\n }\r\n\r\n //Check if text is of type String\r\n var textIsOfTypeString = false;\r\n var tmpTextIsOfTypeString = true;\r\n\r\n if (typeof text === \"string\") {\r\n textIsOfTypeString = true;\r\n } else if (Array.isArray(text)) {\r\n //we don't want to destroy original text array, so cloning it\r\n var sa = text.concat();\r\n da = [];\r\n var len = sa.length;\r\n var curDa;\r\n //we do array.join('text that must not be PDFescaped\")\r\n //thus, pdfEscape each component separately\r\n while (len--) {\r\n curDa = sa.shift();\r\n if (\r\n typeof curDa !== \"string\" ||\r\n (Array.isArray(curDa) && typeof curDa[0] !== \"string\")\r\n ) {\r\n tmpTextIsOfTypeString = false;\r\n }\r\n }\r\n textIsOfTypeString = tmpTextIsOfTypeString;\r\n }\r\n if (textIsOfTypeString === false) {\r\n throw new Error(\r\n 'Type of text must be string or Array. \"' +\r\n text +\r\n '\" is not recognized.'\r\n );\r\n }\r\n\r\n //If there are any newlines in text, we assume\r\n //the user wanted to print multiple lines, so break the\r\n //text up into an array. If the text is already an array,\r\n //we assume the user knows what they are doing.\r\n //Convert text into an array anyway to simplify\r\n //later code.\r\n\r\n if (typeof text === \"string\") {\r\n if (text.match(/[\\r?\\n]/)) {\r\n text = text.split(/\\r\\n|\\r|\\n/g);\r\n } else {\r\n text = [text];\r\n }\r\n }\r\n\r\n //baseline\r\n var height = activeFontSize / scope.internal.scaleFactor;\r\n var descent = height * (lineHeight - 1);\r\n\r\n switch (options.baseline) {\r\n case \"bottom\":\r\n y -= descent;\r\n break;\r\n case \"top\":\r\n y += height - descent;\r\n break;\r\n case \"hanging\":\r\n y += height - 2 * descent;\r\n break;\r\n case \"middle\":\r\n y += height / 2 - descent;\r\n break;\r\n case \"ideographic\":\r\n case \"alphabetic\":\r\n default:\r\n // do nothing, everything is fine\r\n break;\r\n }\r\n\r\n //multiline\r\n maxWidth = options.maxWidth || 0;\r\n\r\n if (maxWidth > 0) {\r\n if (typeof text === \"string\") {\r\n text = scope.splitTextToSize(text, maxWidth);\r\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n text = text.reduce(function(acc, textLine) {\r\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\r\n }, []);\r\n }\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"preProcessText\", payload);\r\n\r\n text = payload.text;\r\n options = payload.options;\r\n\r\n //angle\r\n angle = options.angle;\r\n\r\n if (\r\n transformationMatrix instanceof Matrix === false &&\r\n angle &&\r\n typeof angle === \"number\"\r\n ) {\r\n angle *= Math.PI / 180;\r\n\r\n if (options.rotationDirection === 0) {\r\n angle = -angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n angle = -angle;\r\n }\r\n\r\n var c = Math.cos(angle);\r\n var s = Math.sin(angle);\r\n transformationMatrix = new Matrix(c, s, -s, c, 0, 0);\r\n } else if (angle && angle instanceof Matrix) {\r\n transformationMatrix = angle;\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED && !transformationMatrix) {\r\n transformationMatrix = identityMatrix;\r\n }\r\n\r\n //charSpace\r\n\r\n charSpace = options.charSpace || activeCharSpace;\r\n\r\n if (typeof charSpace !== \"undefined\") {\r\n xtra += hpf(scale(charSpace)) + \" Tc\\n\";\r\n this.setCharSpace(this.getCharSpace() || 0);\r\n }\r\n\r\n horizontalScale = options.horizontalScale;\r\n if (typeof horizontalScale !== \"undefined\") {\r\n xtra += hpf(horizontalScale * 100) + \" Tz\\n\";\r\n }\r\n\r\n //lang\r\n\r\n var lang = options.lang;\r\n\r\n if (lang) {\r\n // xtra += \"/Lang (\" + lang +\")\\n\";\r\n }\r\n\r\n //renderingMode\r\n var renderingMode = -1;\r\n var parmRenderingMode =\r\n typeof options.renderingMode !== \"undefined\"\r\n ? options.renderingMode\r\n : options.stroke;\r\n var pageContext = scope.internal.getCurrentPageInfo().pageContext;\r\n\r\n switch (parmRenderingMode) {\r\n case 0:\r\n case false:\r\n case \"fill\":\r\n renderingMode = 0;\r\n break;\r\n case 1:\r\n case true:\r\n case \"stroke\":\r\n renderingMode = 1;\r\n break;\r\n case 2:\r\n case \"fillThenStroke\":\r\n renderingMode = 2;\r\n break;\r\n case 3:\r\n case \"invisible\":\r\n renderingMode = 3;\r\n break;\r\n case 4:\r\n case \"fillAndAddForClipping\":\r\n renderingMode = 4;\r\n break;\r\n case 5:\r\n case \"strokeAndAddPathForClipping\":\r\n renderingMode = 5;\r\n break;\r\n case 6:\r\n case \"fillThenStrokeAndAddToPathForClipping\":\r\n renderingMode = 6;\r\n break;\r\n case 7:\r\n case \"addToPathForClipping\":\r\n renderingMode = 7;\r\n break;\r\n }\r\n\r\n var usedRenderingMode =\r\n typeof pageContext.usedRenderingMode !== \"undefined\"\r\n ? pageContext.usedRenderingMode\r\n : -1;\r\n\r\n //if the coder wrote it explicitly to use a specific\r\n //renderingMode, then use it\r\n if (renderingMode !== -1) {\r\n xtra += renderingMode + \" Tr\\n\";\r\n //otherwise check if we used the rendering Mode already\r\n //if so then set the rendering Mode...\r\n } else if (usedRenderingMode !== -1) {\r\n xtra += \"0 Tr\\n\";\r\n }\r\n\r\n if (renderingMode !== -1) {\r\n pageContext.usedRenderingMode = renderingMode;\r\n }\r\n\r\n //align\r\n align = options.align || \"left\";\r\n var leading = activeFontSize * lineHeight;\r\n var pageWidth = scope.internal.pageSize.getWidth();\r\n var activeFont = fonts[activeFontKey];\r\n charSpace = options.charSpace || activeCharSpace;\r\n maxWidth = options.maxWidth || 0;\r\n\r\n var lineWidths;\r\n flags = Object.assign({ autoencode: true, noBOM: true }, options.flags);\r\n\r\n var wordSpacingPerLine = [];\r\n\r\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\r\n da = transformTextToSpecialArray(text);\r\n var newY;\r\n if (align !== \"left\") {\r\n lineWidths = da.map(function(v) {\r\n return (\r\n (scope.getStringUnitWidth(v, {\r\n font: activeFont,\r\n charSpace: charSpace,\r\n fontSize: activeFontSize,\r\n doKerning: false\r\n }) *\r\n activeFontSize) /\r\n scaleFactor\r\n );\r\n });\r\n }\r\n //The first line uses the \"main\" Td setting,\r\n //and the subsequent lines are offset by the\r\n //previous line's x coordinate.\r\n var prevWidth = 0;\r\n var newX;\r\n if (align === \"right\") {\r\n //The passed in x coordinate defines the\r\n //rightmost point of the text.\r\n x -= lineWidths[0];\r\n text = [];\r\n len = da.length;\r\n for (var i = 0; i < len; i++) {\r\n if (i === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale(prevWidth - lineWidths[i]);\r\n newY = -leading;\r\n }\r\n text.push([da[i], newX, newY]);\r\n prevWidth = lineWidths[i];\r\n }\r\n } else if (align === \"center\") {\r\n //The passed in x coordinate defines\r\n //the center point.\r\n x -= lineWidths[0] / 2;\r\n text = [];\r\n len = da.length;\r\n for (var j = 0; j < len; j++) {\r\n if (j === 0) {\r\n newX = getHorizontalCoordinate(x);\r\n newY = getVerticalCoordinate(y);\r\n } else {\r\n newX = scale((prevWidth - lineWidths[j]) / 2);\r\n newY = -leading;\r\n }\r\n text.push([da[j], newX, newY]);\r\n prevWidth = lineWidths[j];\r\n }\r\n } else if (align === \"left\") {\r\n text = [];\r\n len = da.length;\r\n for (var h = 0; h < len; h++) {\r\n text.push(da[h]);\r\n }\r\n } else if (align === \"justify\") {\r\n text = [];\r\n len = da.length;\r\n maxWidth = maxWidth !== 0 ? maxWidth : pageWidth;\r\n\r\n for (var l = 0; l < len; l++) {\r\n newY = l === 0 ? getVerticalCoordinate(y) : -leading;\r\n newX = l === 0 ? getHorizontalCoordinate(x) : 0;\r\n if (l < len - 1) {\r\n wordSpacingPerLine.push(\r\n hpf(\r\n scale(\r\n (maxWidth - lineWidths[l]) / (da[l].split(\" \").length - 1)\r\n )\r\n )\r\n );\r\n } else {\r\n wordSpacingPerLine.push(0);\r\n }\r\n text.push([da[l], newX, newY]);\r\n }\r\n } else {\r\n throw new Error(\r\n 'Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".'\r\n );\r\n }\r\n }\r\n\r\n //R2L\r\n var doReversing = typeof options.R2L === \"boolean\" ? options.R2L : R2L;\r\n if (doReversing === true) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [\r\n text\r\n .split(\"\")\r\n .reverse()\r\n .join(\"\"),\r\n posX,\r\n posY\r\n ];\r\n });\r\n }\r\n\r\n //creating Payload-Object to make text byRef\r\n payload = {\r\n text: text,\r\n x: x,\r\n y: y,\r\n options: options,\r\n mutex: {\r\n pdfEscape: pdfEscape,\r\n activeFontKey: activeFontKey,\r\n fonts: fonts,\r\n activeFontSize: activeFontSize\r\n }\r\n };\r\n events.publish(\"postProcessText\", payload);\r\n\r\n text = payload.text;\r\n isHex = payload.mutex.isHex || false;\r\n\r\n //Escaping\r\n var activeFontEncoding = fonts[activeFontKey].encoding;\r\n\r\n if (\r\n activeFontEncoding === \"WinAnsiEncoding\" ||\r\n activeFontEncoding === \"StandardEncoding\"\r\n ) {\r\n text = processTextByFunction(text, function(text, posX, posY) {\r\n return [ESC(text), posX, posY];\r\n });\r\n }\r\n\r\n da = transformTextToSpecialArray(text);\r\n\r\n text = [];\r\n var STRING = 0;\r\n var ARRAY = 1;\r\n var variant = Array.isArray(da[0]) ? ARRAY : STRING;\r\n var posX;\r\n var posY;\r\n var content;\r\n var wordSpacing = \"\";\r\n\r\n var generatePosition = function(\r\n parmPosX,\r\n parmPosY,\r\n parmTransformationMatrix\r\n ) {\r\n var position = \"\";\r\n if (parmTransformationMatrix instanceof Matrix) {\r\n // It is kind of more intuitive to apply a plain rotation around the text anchor set by x and y\r\n // but when the user supplies an arbitrary transformation matrix, the x and y offsets should be applied\r\n // in the coordinate system established by this matrix\r\n if (typeof options.angle === \"number\") {\r\n parmTransformationMatrix = matrixMult(\r\n parmTransformationMatrix,\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY)\r\n );\r\n } else {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, 1, parmPosX, parmPosY),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n if (apiMode === ApiMode.ADVANCED) {\r\n parmTransformationMatrix = matrixMult(\r\n new Matrix(1, 0, 0, -1, 0, 0),\r\n parmTransformationMatrix\r\n );\r\n }\r\n\r\n position = parmTransformationMatrix.join(\" \") + \" Tm\\n\";\r\n } else {\r\n position = hpf(parmPosX) + \" \" + hpf(parmPosY) + \" Td\\n\";\r\n }\r\n return position;\r\n };\r\n\r\n for (var lineIndex = 0; lineIndex < da.length; lineIndex++) {\r\n wordSpacing = \"\";\r\n\r\n switch (variant) {\r\n case ARRAY:\r\n content =\r\n (isHex ? \"<\" : \"(\") + da[lineIndex][0] + (isHex ? \">\" : \")\");\r\n posX = parseFloat(da[lineIndex][1]);\r\n posY = parseFloat(da[lineIndex][2]);\r\n break;\r\n case STRING:\r\n content = (isHex ? \"<\" : \"(\") + da[lineIndex] + (isHex ? \">\" : \")\");\r\n posX = getHorizontalCoordinate(x);\r\n posY = getVerticalCoordinate(y);\r\n break;\r\n }\r\n\r\n if (\r\n typeof wordSpacingPerLine !== \"undefined\" &&\r\n typeof wordSpacingPerLine[lineIndex] !== \"undefined\"\r\n ) {\r\n wordSpacing = wordSpacingPerLine[lineIndex] + \" Tw\\n\";\r\n }\r\n\r\n if (lineIndex === 0) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n } else if (variant === STRING) {\r\n text.push(wordSpacing + content);\r\n } else if (variant === ARRAY) {\r\n text.push(\r\n wordSpacing +\r\n generatePosition(posX, posY, transformationMatrix) +\r\n content\r\n );\r\n }\r\n }\r\n\r\n text = variant === STRING ? text.join(\" Tj\\nT* \") : text.join(\" Tj\\n\");\r\n text += \" Tj\\n\";\r\n\r\n var result = \"BT\\n/\";\r\n result += activeFontKey + \" \" + activeFontSize + \" Tf\\n\"; // font face, style, size\r\n result += hpf(activeFontSize * lineHeight) + \" TL\\n\"; // line spacing\r\n result += textColor + \"\\n\";\r\n result += xtra;\r\n result += text;\r\n result += \"ET\";\r\n\r\n out(result);\r\n usedFonts[activeFontKey] = true;\r\n return scope;\r\n };\r\n\r\n // PDF supports these path painting and clip path operators:\r\n //\r\n // S - stroke\r\n // s - close/stroke\r\n // f (F) - fill non-zero\r\n // f* - fill evenodd\r\n // B - fill stroke nonzero\r\n // B* - fill stroke evenodd\r\n // b - close fill stroke nonzero\r\n // b* - close fill stroke evenodd\r\n // n - nothing (consume path)\r\n // W - clip nonzero\r\n // W* - clip evenodd\r\n //\r\n // In order to keep the API small, we omit the close-and-fill/stroke operators and provide a separate close()\r\n // method.\r\n /**\r\n *\r\n * @name clip\r\n * @function\r\n * @instance\r\n * @param {string} rule Only possible value is 'evenodd'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description All .clip() after calling drawing ops with a style argument of null.\r\n */\r\n var clip = (API.__private__.clip = API.clip = function(rule) {\r\n // Call .clip() after calling drawing ops with a style argument of null\r\n // W is the PDF clipping op\r\n if (\"evenodd\" === rule) {\r\n out(\"W*\");\r\n } else {\r\n out(\"W\");\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * @name clipEvenOdd\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @description Modify the current clip path by intersecting it with the current path using the even-odd rule. Note\r\n * that this will NOT consume the current path. In order to only use this path for clipping call\r\n * {@link API.discardPath} afterwards.\r\n */\r\n API.clipEvenOdd = function() {\r\n return clip(\"evenodd\");\r\n };\r\n\r\n /**\r\n * Consumes the current path without any effect. Mainly used in combination with {@link clip} or\r\n * {@link clipEvenOdd}. The PDF \"n\" operator.\r\n * @name discardPath\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.discardPath = API.discardPath = function() {\r\n out(\"n\");\r\n return this;\r\n };\r\n\r\n var isValidStyle = (API.__private__.isValidStyle = function(style) {\r\n var validStyleVariants = [\r\n undefined,\r\n null,\r\n \"S\",\r\n \"D\",\r\n \"F\",\r\n \"DF\",\r\n \"FD\",\r\n \"f\",\r\n \"f*\",\r\n \"B\",\r\n \"B*\",\r\n \"n\"\r\n ];\r\n var result = false;\r\n if (validStyleVariants.indexOf(style) !== -1) {\r\n result = true;\r\n }\r\n return result;\r\n });\r\n\r\n API.__private__.setDefaultPathOperation = API.setDefaultPathOperation = function(\r\n operator\r\n ) {\r\n if (isValidStyle(operator)) {\r\n defaultPathOperation = operator;\r\n }\r\n return this;\r\n };\r\n\r\n var getStyle = (API.__private__.getStyle = API.getStyle = function(style) {\r\n // see path-painting operators in PDF spec\r\n var op = defaultPathOperation; // stroke\r\n\r\n switch (style) {\r\n case \"D\":\r\n case \"S\":\r\n op = \"S\"; // stroke\r\n break;\r\n case \"F\":\r\n op = \"f\"; // fill\r\n break;\r\n case \"FD\":\r\n case \"DF\":\r\n op = \"B\";\r\n break;\r\n case \"f\":\r\n case \"f*\":\r\n case \"B\":\r\n case \"B*\":\r\n /*\r\n Allow direct use of these PDF path-painting operators:\r\n - f fill using nonzero winding number rule\r\n - f* fill using even-odd rule\r\n - B fill then stroke with fill using non-zero winding number rule\r\n - B* fill then stroke with fill using even-odd rule\r\n */\r\n op = style;\r\n break;\r\n }\r\n return op;\r\n });\r\n\r\n /**\r\n * Close the current path. The PDF \"h\" operator.\r\n * @name close\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n var close = (API.close = function() {\r\n out(\"h\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Stroke the path. The PDF \"S\" operator.\r\n * @name stroke\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.stroke = function() {\r\n out(\"S\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the nonzero winding number rule. If a pattern is provided, the path will be filled\r\n * with this pattern, otherwise with the current fill color. Equivalent to the PDF \"f\" operator.\r\n * @name fill\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fill = function(pattern) {\r\n fillWithOptionalPattern(\"f\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill the current path using the even-odd rule. The PDF f* operator.\r\n * @see API.fill\r\n * @name fillEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be filled with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"f*\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the nonzero winding number rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStroke\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStroke = function(pattern) {\r\n fillWithOptionalPattern(\"B\", pattern);\r\n return this;\r\n };\r\n\r\n /**\r\n * Fill using the even-odd rule and then stroke the current Path. The PDF \"B\" operator.\r\n * @see API.fill\r\n * @name fillStrokeEvenOdd\r\n * @function\r\n * @instance\r\n * @param {PatternData=} pattern If provided the path will be fill-stroked with this pattern\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.fillStrokeEvenOdd = function(pattern) {\r\n fillWithOptionalPattern(\"B*\", pattern);\r\n return this;\r\n };\r\n\r\n var fillWithOptionalPattern = function(style, pattern) {\r\n if (typeof pattern === \"object\") {\r\n fillWithPattern(pattern, style);\r\n } else {\r\n out(style);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n if (\r\n style === null ||\r\n (apiMode === ApiMode.ADVANCED && style === undefined)\r\n ) {\r\n return;\r\n }\r\n\r\n style = getStyle(style);\r\n\r\n // stroking / filling / both the path\r\n out(style);\r\n };\r\n\r\n function cloneTilingPattern(patternKey, boundingBox, xStep, yStep, matrix) {\r\n var clone = new TilingPattern(\r\n boundingBox || this.boundingBox,\r\n xStep || this.xStep,\r\n yStep || this.yStep,\r\n this.gState,\r\n matrix || this.matrix\r\n );\r\n clone.stream = this.stream;\r\n var key = patternKey + \"$$\" + this.cloneIndex++ + \"$$\";\r\n addPattern(key, clone);\r\n return clone;\r\n }\r\n\r\n var fillWithPattern = function(patternData, style) {\r\n var patternId = patternMap[patternData.key];\r\n var pattern = patterns[patternId];\r\n\r\n if (pattern instanceof ShadingPattern) {\r\n out(\"q\");\r\n\r\n out(clipRuleFromStyle(style));\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n out(patternData.matrix.toString() + \" cm\");\r\n out(\"/\" + patternId + \" sh\");\r\n out(\"Q\");\r\n } else if (pattern instanceof TilingPattern) {\r\n // pdf draws patterns starting at the bottom left corner and they are not affected by the global transformation,\r\n // so we must flip them\r\n var matrix = new Matrix(1, 0, 0, -1, 0, getPageHeight());\r\n\r\n if (patternData.matrix) {\r\n matrix = matrix.multiply(patternData.matrix || identityMatrix);\r\n // we cannot apply a matrix to the pattern on use so we must abuse the pattern matrix and create new instances\r\n // for each use\r\n patternId = cloneTilingPattern.call(\r\n pattern,\r\n patternData.key,\r\n patternData.boundingBox,\r\n patternData.xStep,\r\n patternData.yStep,\r\n matrix\r\n ).id;\r\n }\r\n\r\n out(\"q\");\r\n out(\"/Pattern cs\");\r\n out(\"/\" + patternId + \" scn\");\r\n\r\n if (pattern.gState) {\r\n API.setGState(pattern.gState);\r\n }\r\n\r\n out(style);\r\n out(\"Q\");\r\n }\r\n };\r\n\r\n var clipRuleFromStyle = function(style) {\r\n switch (style) {\r\n case \"f\":\r\n case \"F\":\r\n return \"W n\";\r\n case \"f*\":\r\n return \"W* n\";\r\n case \"B\":\r\n return \"W S\";\r\n case \"B*\":\r\n return \"W* S\";\r\n\r\n // these two are for compatibility reasons (in the past, calling any primitive method with a shading pattern\r\n // and \"n\"/\"S\" as style would still fill/fill and stroke the path)\r\n case \"S\":\r\n return \"W S\";\r\n case \"n\":\r\n return \"W n\";\r\n }\r\n };\r\n\r\n /**\r\n * Begin a new subpath by moving the current point to coordinates (x, y). The PDF \"m\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @name moveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var moveTo = (API.moveTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" m\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a straight line segment from the current point to the point (x, y). The PDF \"l\" operator.\r\n * @param {number} x\r\n * @param {number} y\r\n * @memberof jsPDF#\r\n * @name lineTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var lineTo = (API.lineTo = function(x, y) {\r\n out(hpf(scale(x)) + \" \" + hpf(transformScaleY(y)) + \" l\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Append a cubic Bézier curve to the current path. The curve shall extend from the current point to the point\r\n * (x3, y3), using (x1, y1) and (x2, y2) as Bézier control points. The new current point shall be (x3, x3).\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {number} x3\r\n * @param {number} y3\r\n * @memberof jsPDF#\r\n * @name curveTo\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @returns {jsPDF}\r\n */\r\n var curveTo = (API.curveTo = function(x1, y1, x2, y2, x3, y3) {\r\n out(\r\n [\r\n hpf(scale(x1)),\r\n hpf(transformScaleY(y1)),\r\n hpf(scale(x2)),\r\n hpf(transformScaleY(y2)),\r\n hpf(scale(x3)),\r\n hpf(transformScaleY(y3)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n return this;\r\n });\r\n\r\n /**\r\n * Draw a line on the current page.\r\n *\r\n * @name line\r\n * @function\r\n * @instance\r\n * @param {number} x1\r\n * @param {number} y1\r\n * @param {number} x2\r\n * @param {number} y2\r\n * @param {string} style A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke. A null value postpones setting the style so that a shape may be composed using multiple method calls. The last drawing method call used to define the shape should not have a null style argument. default: 'S'\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n */\r\n API.__private__.line = API.line = function(x1, y1, x2, y2, style) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.line\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1], style || \"S\");\r\n } else {\r\n return this.lines([[x2 - x1, y2 - y1]], x1, y1, [1, 1]).stroke();\r\n }\r\n };\r\n\r\n /**\r\n * @typedef {Object} PatternData\r\n * {Matrix|undefined} matrix\r\n * {Number|undefined} xStep\r\n * {Number|undefined} yStep\r\n * {Array.|undefined} boundingBox\r\n */\r\n\r\n /**\r\n * Adds series of curves (straight lines or cubic bezier curves) to canvas, starting at `x`, `y` coordinates.\r\n * All data points in `lines` are relative to last line origin.\r\n * `x`, `y` become x1,y1 for first line / curve in the set.\r\n * For lines you only need to specify [x2, y2] - (ending point) vector against x1, y1 starting point.\r\n * For bezier curves you need to specify [x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All vectors are against the start of the curve - x1,y1.\r\n *\r\n * @example .lines([[2,2],[-2,2],[1,1,2,2,3,3],[2,1]], 212,110, [1,1], 'F', false) // line, line, bezier curve, line\r\n * @param {Array} lines Array of *vector* shifts as pairs (lines) or sextets (cubic bezier curves).\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} scale (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can be any floating number Sub-one makes drawing smaller. Over-one grows the drawing. Negative flips the direction.\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @param {Boolean=} closed If true, the path is closed with a straight line from the end of the last curve to the starting point.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name lines\r\n */\r\n API.__private__.lines = API.lines = function(\r\n lines,\r\n x,\r\n y,\r\n scale,\r\n style,\r\n closed\r\n ) {\r\n var scalex, scaley, i, l, leg, x2, y2, x3, y3, x4, y4, tmp;\r\n\r\n // Pre-August-2012 the order of arguments was function(x, y, lines, scale, style)\r\n // in effort to make all calls have similar signature like\r\n // function(content, coordinateX, coordinateY , miscellaneous)\r\n // this method had its args flipped.\r\n // code below allows backward compatibility with old arg order.\r\n if (typeof lines === \"number\") {\r\n tmp = y;\r\n y = x;\r\n x = lines;\r\n lines = tmp;\r\n }\r\n\r\n scale = scale || [1, 1];\r\n closed = closed || false;\r\n\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n !Array.isArray(lines) ||\r\n !Array.isArray(scale) ||\r\n !isValidStyle(style) ||\r\n typeof closed !== \"boolean\"\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.lines\");\r\n }\r\n\r\n // starting point\r\n moveTo(x, y);\r\n\r\n scalex = scale[0];\r\n scaley = scale[1];\r\n l = lines.length;\r\n //, x2, y2 // bezier only. In page default measurement \"units\", *after* scaling\r\n //, x3, y3 // bezier only. In page default measurement \"units\", *after* scaling\r\n // ending point for all, lines and bezier. . In page default measurement \"units\", *after* scaling\r\n x4 = x; // last / ending point = starting point for first item.\r\n y4 = y; // last / ending point = starting point for first item.\r\n\r\n for (i = 0; i < l; i++) {\r\n leg = lines[i];\r\n if (leg.length === 2) {\r\n // simple line\r\n x4 = leg[0] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[1] * scaley + y4; // here last y4 was prior ending point\r\n lineTo(x4, y4);\r\n } else {\r\n // bezier curve\r\n x2 = leg[0] * scalex + x4; // here last x4 is prior ending point\r\n y2 = leg[1] * scaley + y4; // here last y4 is prior ending point\r\n x3 = leg[2] * scalex + x4; // here last x4 is prior ending point\r\n y3 = leg[3] * scaley + y4; // here last y4 is prior ending point\r\n x4 = leg[4] * scalex + x4; // here last x4 was prior ending point\r\n y4 = leg[5] * scaley + y4; // here last y4 was prior ending point\r\n curveTo(x2, y2, x3, y3, x4, y4);\r\n }\r\n }\r\n\r\n if (closed) {\r\n close();\r\n }\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Similar to {@link API.lines} but all coordinates are interpreted as absolute coordinates instead of relative.\r\n * @param {Array} lines An array of {op: operator, c: coordinates} object, where op is one of \"m\" (move to), \"l\" (line to)\r\n * \"c\" (cubic bezier curve) and \"h\" (close (sub)path)). c is an array of coordinates. \"m\" and \"l\" expect two, \"c\"\r\n * six and \"h\" an empty array (or undefined).\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name path\r\n */\r\n API.path = function(lines) {\r\n for (var i = 0; i < lines.length; i++) {\r\n var leg = lines[i];\r\n var coords = leg.c;\r\n switch (leg.op) {\r\n case \"m\":\r\n moveTo(coords[0], coords[1]);\r\n break;\r\n case \"l\":\r\n lineTo(coords[0], coords[1]);\r\n break;\r\n case \"c\":\r\n curveTo.apply(this, coords);\r\n break;\r\n case \"h\":\r\n close();\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name rect\r\n */\r\n API.__private__.rect = API.rect = function(x, y, w, h, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.rect\");\r\n }\r\n if (apiMode === ApiMode.COMPAT) {\r\n h = -h;\r\n }\r\n\r\n out(\r\n [\r\n hpf(scale(x)),\r\n hpf(transformScaleY(y)),\r\n hpf(scale(w)),\r\n hpf(scale(h)),\r\n \"re\"\r\n ].join(\" \")\r\n );\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a triangle to PDF.\r\n *\r\n * @param {number} x1 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y1 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x2 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y2 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} x3 Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y3 Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name triangle\r\n */\r\n API.__private__.triangle = API.triangle = function(\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n style\r\n ) {\r\n if (\r\n isNaN(x1) ||\r\n isNaN(y1) ||\r\n isNaN(x2) ||\r\n isNaN(y2) ||\r\n isNaN(x3) ||\r\n isNaN(y3) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.triangle\");\r\n }\r\n this.lines(\r\n [\r\n [x2 - x1, y2 - y1], // vector to point 2\r\n [x3 - x2, y3 - y2], // vector to point 3\r\n [x1 - x3, y1 - y3] // closing vector back to point 1\r\n ],\r\n x1,\r\n y1, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds a rectangle with rounded corners to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} w Width (in units declared at inception of PDF document)\r\n * @param {number} h Height (in units declared at inception of PDF document)\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name roundedRect\r\n */\r\n API.__private__.roundedRect = API.roundedRect = function(\r\n x,\r\n y,\r\n w,\r\n h,\r\n rx,\r\n ry,\r\n style\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(w) ||\r\n isNaN(h) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");\r\n }\r\n var MyArc = (4 / 3) * (Math.SQRT2 - 1);\r\n\r\n rx = Math.min(rx, w * 0.5);\r\n ry = Math.min(ry, h * 0.5);\r\n\r\n this.lines(\r\n [\r\n [w - 2 * rx, 0],\r\n [rx * MyArc, 0, rx, ry - ry * MyArc, rx, ry],\r\n [0, h - 2 * ry],\r\n [0, ry * MyArc, -(rx * MyArc), ry, -rx, ry],\r\n [-w + 2 * rx, 0],\r\n [-(rx * MyArc), 0, -rx, -(ry * MyArc), -rx, -ry],\r\n [0, -h + 2 * ry],\r\n [0, -(ry * MyArc), rx * MyArc, -ry, rx, -ry]\r\n ],\r\n x + rx,\r\n y, // start of path\r\n [1, 1],\r\n style,\r\n true\r\n );\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an ellipse to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} rx Radius along x axis (in units declared at inception of PDF document)\r\n * @param {number} ry Radius along y axis (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name ellipse\r\n */\r\n API.__private__.ellipse = API.ellipse = function(x, y, rx, ry, style) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(rx) ||\r\n isNaN(ry) ||\r\n !isValidStyle(style)\r\n ) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");\r\n }\r\n var lx = (4 / 3) * (Math.SQRT2 - 1) * rx,\r\n ly = (4 / 3) * (Math.SQRT2 - 1) * ry;\r\n\r\n moveTo(x + rx, y);\r\n curveTo(x + rx, y - ly, x + lx, y - ry, x, y - ry);\r\n curveTo(x - lx, y - ry, x - rx, y - ly, x - rx, y);\r\n curveTo(x - rx, y + ly, x - lx, y + ry, x, y + ry);\r\n curveTo(x + lx, y + ry, x + rx, y + ly, x + rx, y);\r\n\r\n putStyle(style);\r\n return this;\r\n };\r\n\r\n /**\r\n * Adds an circle to PDF.\r\n *\r\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\r\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\r\n * @param {number} r Radius (in units declared at inception of PDF document)\r\n * @param {string=} style A string specifying the painting style or null. Valid styles include:\r\n * 'S' [default] - stroke,\r\n * 'F' - fill,\r\n * and 'DF' (or 'FD') - fill then stroke.\r\n * In \"compat\" API mode, a null value postpones setting the style so that a shape may be composed using multiple\r\n * method calls. The last drawing method call used to define the shape should not have a null style argument.\r\n *\r\n * In \"advanced\" API mode this parameter is deprecated.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name circle\r\n */\r\n API.__private__.circle = API.circle = function(x, y, r, style) {\r\n if (isNaN(x) || isNaN(y) || isNaN(r) || !isValidStyle(style)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.circle\");\r\n }\r\n return this.ellipse(x, y, r, r, style);\r\n };\r\n\r\n /**\r\n * Sets text font face, variant for upcoming text elements.\r\n * See output of jsPDF.getFontList() for possible font names, styles.\r\n *\r\n * @param {string} fontName Font name or family. Example: \"times\".\r\n * @param {string} fontStyle Font style or variant. Example: \"italic\".\r\n * @param {number | string} fontWeight Weight of the Font. Example: \"normal\" | 400\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFont\r\n */\r\n API.setFont = function(fontName, fontStyle, fontWeight) {\r\n if (fontWeight) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n activeFontKey = getFont(fontName, fontStyle, {\r\n disableWarning: false\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets text font face, variant for upcoming text elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {Object}\r\n * @memberof jsPDF#\r\n * @name getFont\r\n */\r\n var getFontEntry = (API.__private__.getFont = API.getFont = function() {\r\n return fonts[getFont.apply(API, arguments)];\r\n });\r\n\r\n /**\r\n * Returns an object - a tree of fontName to fontStyle relationships available to\r\n * active PDF document.\r\n *\r\n * @public\r\n * @function\r\n * @instance\r\n * @returns {Object} Like {'times':['normal', 'italic', ... ], 'arial':['normal', 'bold', ... ], ... }\r\n * @memberof jsPDF#\r\n * @name getFontList\r\n */\r\n API.__private__.getFontList = API.getFontList = function() {\r\n var list = {},\r\n fontName,\r\n fontStyle;\r\n\r\n for (fontName in fontmap) {\r\n if (fontmap.hasOwnProperty(fontName)) {\r\n list[fontName] = [];\r\n for (fontStyle in fontmap[fontName]) {\r\n if (fontmap[fontName].hasOwnProperty(fontStyle)) {\r\n list[fontName].push(fontStyle);\r\n }\r\n }\r\n }\r\n }\r\n return list;\r\n };\r\n\r\n /**\r\n * Add a custom font to the current instance.\r\n *\r\n * @param {string} postScriptName PDF specification full name for the font.\r\n * @param {string} id PDF-document-instance-specific label assinged to the font.\r\n * @param {string} fontStyle Style of the Font.\r\n * @param {number | string} fontWeight Weight of the Font.\r\n * @param {Object} encoding Encoding_name-to-Font_metrics_object mapping.\r\n * @function\r\n * @instance\r\n * @memberof jsPDF#\r\n * @name addFont\r\n * @returns {string} fontId\r\n */\r\n API.addFont = function(\r\n postScriptName,\r\n fontName,\r\n fontStyle,\r\n fontWeight,\r\n encoding\r\n ) {\r\n var encodingOptions = [\r\n \"StandardEncoding\",\r\n \"MacRomanEncoding\",\r\n \"Identity-H\",\r\n \"WinAnsiEncoding\"\r\n ];\r\n if (arguments[3] && encodingOptions.indexOf(arguments[3]) !== -1) {\r\n //IE 11 fix\r\n encoding = arguments[3];\r\n } else if (arguments[3] && encodingOptions.indexOf(arguments[3]) == -1) {\r\n fontStyle = combineFontStyleAndFontWeight(fontStyle, fontWeight);\r\n }\r\n encoding = encoding || \"Identity-H\";\r\n return addFont.call(this, postScriptName, fontName, fontStyle, encoding);\r\n };\r\n\r\n var lineWidth = options.lineWidth || 0.200025; // 2mm\r\n /**\r\n * Gets the line width, default: 0.200025.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineWidth\r\n * @memberof jsPDF#\r\n * @name getLineWidth\r\n */\r\n var getLineWidth = (API.__private__.getLineWidth = API.getLineWidth = function() {\r\n return lineWidth;\r\n });\r\n\r\n /**\r\n * Sets line width for upcoming lines.\r\n *\r\n * @param {number} width Line width (in units declared at inception of PDF document).\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineWidth\r\n */\r\n var setLineWidth = (API.__private__.setLineWidth = API.setLineWidth = function(\r\n width\r\n ) {\r\n lineWidth = width;\r\n out(hpf(scale(width)) + \" w\");\r\n return this;\r\n });\r\n\r\n /**\r\n * Sets the dash pattern for upcoming lines.\r\n *\r\n * To reset the settings simply call the method without any parameters.\r\n * @param {Array} dashArray An array containing 0-2 numbers. The first number sets the length of the\r\n * dashes, the second number the length of the gaps. If the second number is missing, the gaps are considered\r\n * to be as long as the dashes. An empty array means solid, unbroken lines.\r\n * @param {number} dashPhase The phase lines start with.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineDashPattern\r\n */\r\n API.__private__.setLineDash = jsPDF.API.setLineDash = jsPDF.API.setLineDashPattern = function(\r\n dashArray,\r\n dashPhase\r\n ) {\r\n dashArray = dashArray || [];\r\n dashPhase = dashPhase || 0;\r\n\r\n if (isNaN(dashPhase) || !Array.isArray(dashArray)) {\r\n throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");\r\n }\r\n\r\n dashArray = dashArray\r\n .map(function(x) {\r\n return hpf(scale(x));\r\n })\r\n .join(\" \");\r\n dashPhase = hpf(scale(dashPhase));\r\n\r\n out(\"[\" + dashArray + \"] \" + dashPhase + \" d\");\r\n return this;\r\n };\r\n\r\n var lineHeightFactor;\r\n\r\n var getLineHeight = (API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n });\r\n\r\n API.__private__.getLineHeight = API.getLineHeight = function() {\r\n return activeFontSize * lineHeightFactor;\r\n };\r\n\r\n /**\r\n * Sets the LineHeightFactor of proportion.\r\n *\r\n * @param {number} value LineHeightFactor value. Default: 1.15.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineHeightFactor\r\n */\r\n var setLineHeightFactor = (API.__private__.setLineHeightFactor = API.setLineHeightFactor = function(\r\n value\r\n ) {\r\n value = value || 1.15;\r\n if (typeof value === \"number\") {\r\n lineHeightFactor = value;\r\n }\r\n return this;\r\n });\r\n\r\n /**\r\n * Gets the LineHeightFactor, default: 1.15.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} lineHeightFactor\r\n * @memberof jsPDF#\r\n * @name getLineHeightFactor\r\n */\r\n var getLineHeightFactor = (API.__private__.getLineHeightFactor = API.getLineHeightFactor = function() {\r\n return lineHeightFactor;\r\n });\r\n\r\n setLineHeightFactor(options.lineHeight);\r\n\r\n var getHorizontalCoordinate = (API.__private__.getHorizontalCoordinate = function(\r\n value\r\n ) {\r\n return scale(value);\r\n });\r\n\r\n var getVerticalCoordinate = (API.__private__.getVerticalCoordinate = function(\r\n value\r\n ) {\r\n if (apiMode === ApiMode.ADVANCED) {\r\n return value;\r\n } else {\r\n var pageHeight =\r\n pagesContext[currentPage].mediaBox.topRightY -\r\n pagesContext[currentPage].mediaBox.bottomLeftY;\r\n return pageHeight - scale(value);\r\n }\r\n });\r\n\r\n var getHorizontalCoordinateString = (API.__private__.getHorizontalCoordinateString = API.getHorizontalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getHorizontalCoordinate(value));\r\n });\r\n\r\n var getVerticalCoordinateString = (API.__private__.getVerticalCoordinateString = API.getVerticalCoordinateString = function(\r\n value\r\n ) {\r\n return hpf(getVerticalCoordinate(value));\r\n });\r\n\r\n var strokeColor = options.strokeColor || \"0 G\";\r\n\r\n /**\r\n * Gets the stroke color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getDrawColor\r\n */\r\n API.__private__.getStrokeColor = API.getDrawColor = function() {\r\n return decodeColorString(strokeColor);\r\n };\r\n\r\n /**\r\n * Sets the stroke color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setDrawColor\r\n */\r\n API.__private__.setStrokeColor = API.setDrawColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"draw\",\r\n precision: 2\r\n };\r\n\r\n strokeColor = encodeColorString(options);\r\n out(strokeColor);\r\n return this;\r\n };\r\n\r\n var fillColor = options.fillColor || \"0 g\";\r\n\r\n /**\r\n * Gets the fill color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getFillColor\r\n */\r\n API.__private__.getFillColor = API.getFillColor = function() {\r\n return decodeColorString(fillColor);\r\n };\r\n\r\n /**\r\n * Sets the fill color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setFillColor\r\n */\r\n API.__private__.setFillColor = API.setFillColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"fill\",\r\n precision: 2\r\n };\r\n\r\n fillColor = encodeColorString(options);\r\n out(fillColor);\r\n return this;\r\n };\r\n\r\n var textColor = options.textColor || \"0 g\";\r\n /**\r\n * Gets the text color for upcoming elements.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {string} colorAsHex\r\n * @memberof jsPDF#\r\n * @name getTextColor\r\n */\r\n var getTextColor = (API.__private__.getTextColor = API.getTextColor = function() {\r\n return decodeColorString(textColor);\r\n });\r\n /**\r\n * Sets the text color for upcoming elements.\r\n *\r\n * Depending on the number of arguments given, Gray, RGB, or CMYK\r\n * color space is implied.\r\n *\r\n * When only ch1 is given, \"Gray\" color space is implied and it\r\n * must be a value in the range from 0.00 (solid black) to to 1.00 (white)\r\n * if values are communicated as String types, or in range from 0 (black)\r\n * to 255 (white) if communicated as Number type.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When only ch1,ch2,ch3 are given, \"RGB\" color space is implied and each\r\n * value must be in the range from 0.00 (minimum intensity) to to 1.00\r\n * (max intensity) if values are communicated as String types, or\r\n * from 0 (min intensity) to to 255 (max intensity) if values are communicated\r\n * as Number types.\r\n * The RGB-like 0-255 range is provided for backward compatibility.\r\n *\r\n * When ch1,ch2,ch3,ch4 are given, \"CMYK\" color space is implied and each\r\n * value must be a in the range from 0.00 (0% concentration) to to\r\n * 1.00 (100% concentration)\r\n *\r\n * Because JavaScript treats fixed point numbers badly (rounds to\r\n * floating point nearest to binary representation) it is highly advised to\r\n * communicate the fractional numbers as String types, not JavaScript Number type.\r\n *\r\n * @param {Number|String} ch1 Color channel value or {string} ch1 color value in hexadecimal, example: '#FFFFFF'.\r\n * @param {Number} ch2 Color channel value.\r\n * @param {Number} ch3 Color channel value.\r\n * @param {Number} ch4 Color channel value.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setTextColor\r\n */\r\n API.__private__.setTextColor = API.setTextColor = function(\r\n ch1,\r\n ch2,\r\n ch3,\r\n ch4\r\n ) {\r\n var options = {\r\n ch1: ch1,\r\n ch2: ch2,\r\n ch3: ch3,\r\n ch4: ch4,\r\n pdfColorType: \"text\",\r\n precision: 3\r\n };\r\n textColor = encodeColorString(options);\r\n\r\n return this;\r\n };\r\n\r\n var activeCharSpace = options.charSpace;\r\n\r\n /**\r\n * Get global value of CharSpace.\r\n *\r\n * @function\r\n * @instance\r\n * @returns {number} charSpace\r\n * @memberof jsPDF#\r\n * @name getCharSpace\r\n */\r\n var getCharSpace = (API.__private__.getCharSpace = API.getCharSpace = function() {\r\n return parseFloat(activeCharSpace || 0);\r\n });\r\n\r\n /**\r\n * Set global value of CharSpace.\r\n *\r\n * @param {number} charSpace\r\n * @function\r\n * @instance\r\n * @returns {jsPDF} jsPDF-instance\r\n * @memberof jsPDF#\r\n * @name setCharSpace\r\n */\r\n API.__private__.setCharSpace = API.setCharSpace = function(charSpace) {\r\n if (isNaN(charSpace)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");\r\n }\r\n activeCharSpace = charSpace;\r\n return this;\r\n };\r\n\r\n var lineCapID = 0;\r\n /**\r\n * Is an Object providing a mapping from human-readable to\r\n * integer flag values designating the varieties of line cap\r\n * and join styles.\r\n *\r\n * @memberof jsPDF#\r\n * @name CapJoinStyles\r\n */\r\n API.CapJoinStyles = {\r\n 0: 0,\r\n butt: 0,\r\n but: 0,\r\n miter: 0,\r\n 1: 1,\r\n round: 1,\r\n rounded: 1,\r\n circle: 1,\r\n 2: 2,\r\n projecting: 2,\r\n project: 2,\r\n square: 2,\r\n bevel: 2\r\n };\r\n\r\n /**\r\n * Sets the line cap styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line cap.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineCap\r\n */\r\n API.__private__.setLineCap = API.setLineCap = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line cap style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineCapID = id;\r\n out(id + \" J\");\r\n\r\n return this;\r\n };\r\n\r\n var lineJoinID = 0;\r\n /**\r\n * Sets the line join styles.\r\n * See {jsPDF.CapJoinStyles} for variants.\r\n *\r\n * @param {String|Number} style A string or number identifying the type of line join.\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineJoin\r\n */\r\n API.__private__.setLineJoin = API.setLineJoin = function(style) {\r\n var id = API.CapJoinStyles[style];\r\n if (id === undefined) {\r\n throw new Error(\r\n \"Line join style of '\" +\r\n style +\r\n \"' is not recognized. See or extend .CapJoinStyles property for valid styles\"\r\n );\r\n }\r\n lineJoinID = id;\r\n out(id + \" j\");\r\n\r\n return this;\r\n };\r\n\r\n var miterLimit;\r\n /**\r\n * Sets the miterLimit property, which effects the maximum miter length.\r\n *\r\n * @param {number} length The length of the miter\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setLineMiterLimit\r\n */\r\n API.__private__.setLineMiterLimit = API.__private__.setMiterLimit = API.setLineMiterLimit = API.setMiterLimit = function(\r\n length\r\n ) {\r\n length = length || 0;\r\n if (isNaN(length)) {\r\n throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");\r\n }\r\n out(hpf(scale(length)) + \" M\");\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * An object representing a pdf graphics state.\r\n * @class GState\r\n */\r\n\r\n /**\r\n *\r\n * @param parameters A parameter object that contains all properties this graphics state wants to set.\r\n * Supported are: opacity, stroke-opacity\r\n * @constructor\r\n */\r\n API.GState = GState;\r\n\r\n /**\r\n * Sets a either previously added {@link GState} (via {@link addGState}) or a new {@link GState}.\r\n * @param {String|GState} gState If type is string, a previously added GState is used, if type is GState\r\n * it will be added before use.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setGState\r\n */\r\n API.setGState = function(gState) {\r\n if (typeof gState === \"string\") {\r\n gState = gStates[gStatesMap[gState]];\r\n } else {\r\n gState = addGState(null, gState);\r\n }\r\n\r\n if (!gState.equals(activeGState)) {\r\n out(\"/\" + gState.id + \" gs\");\r\n activeGState = gState;\r\n }\r\n };\r\n\r\n /**\r\n * Adds a new Graphics State. Duplicates are automatically eliminated.\r\n * @param {String} key Might also be null, if no later reference to this gState is needed\r\n * @param {Object} gState The gState object\r\n */\r\n var addGState = function(key, gState) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (key && gStatesMap[key]) return;\r\n var duplicate = false;\r\n for (var s in gStates) {\r\n if (gStates.hasOwnProperty(s)) {\r\n if (gStates[s].equals(gState)) {\r\n duplicate = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (duplicate) {\r\n gState = gStates[s];\r\n } else {\r\n var gStateKey = \"GS\" + (Object.keys(gStates).length + 1).toString(10);\r\n gStates[gStateKey] = gState;\r\n gState.id = gStateKey;\r\n }\r\n\r\n // several user keys may point to the same GState object\r\n key && (gStatesMap[key] = gState.id);\r\n\r\n events.publish(\"addGState\", gState);\r\n\r\n return gState;\r\n };\r\n\r\n /**\r\n * Adds a new {@link GState} for later use. See {@link setGState}.\r\n * @param {String} key\r\n * @param {GState} gState\r\n * @function\r\n * @instance\r\n * @returns {jsPDF}\r\n *\r\n * @memberof jsPDF#\r\n * @name addGState\r\n */\r\n API.addGState = function(key, gState) {\r\n addGState(key, gState);\r\n return this;\r\n };\r\n\r\n /**\r\n * Saves the current graphics state (\"pushes it on the stack\"). It can be restored by {@link restoreGraphicsState}\r\n * later. Here, the general pdf graphics state is meant, also including the current transformation matrix,\r\n * fill and stroke colors etc.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name saveGraphicsState\r\n */\r\n API.saveGraphicsState = function() {\r\n out(\"q\");\r\n // as we cannot set font key and size independently we must keep track of both\r\n fontStateStack.push({\r\n key: activeFontKey,\r\n size: activeFontSize,\r\n color: textColor\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Restores a previously saved graphics state saved by {@link saveGraphicsState} (\"pops the stack\").\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name restoreGraphicsState\r\n */\r\n API.restoreGraphicsState = function() {\r\n out(\"Q\");\r\n\r\n // restore previous font state\r\n var fontState = fontStateStack.pop();\r\n activeFontKey = fontState.key;\r\n activeFontSize = fontState.size;\r\n textColor = fontState.color;\r\n\r\n activeGState = null;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Appends this matrix to the left of all previously applied matrices.\r\n *\r\n * @param {Matrix} matrix\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name setCurrentTransformationMatrix\r\n */\r\n API.setCurrentTransformationMatrix = function(matrix) {\r\n out(matrix.toString() + \" cm\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Inserts a debug comment into the generated pdf.\r\n * @function\r\n * @instance\r\n * @param {String} text\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name comment\r\n */\r\n API.comment = function(text) {\r\n out(\"#\" + text);\r\n return this;\r\n };\r\n\r\n /**\r\n * Point\r\n */\r\n var Point = function(x, y) {\r\n var _x = x || 0;\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n get: function() {\r\n return _x;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _x = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _y = y || 0;\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n get: function() {\r\n return _y;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _y = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _type = \"pt\";\r\n Object.defineProperty(this, \"type\", {\r\n enumerable: true,\r\n get: function() {\r\n return _type;\r\n },\r\n set: function(value) {\r\n _type = value.toString();\r\n }\r\n });\r\n return this;\r\n };\r\n\r\n /**\r\n * Rectangle\r\n */\r\n var Rectangle = function(x, y, w, h) {\r\n Point.call(this, x, y);\r\n this.type = \"rect\";\r\n\r\n var _w = w || 0;\r\n Object.defineProperty(this, \"w\", {\r\n enumerable: true,\r\n get: function() {\r\n return _w;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _w = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n var _h = h || 0;\r\n Object.defineProperty(this, \"h\", {\r\n enumerable: true,\r\n get: function() {\r\n return _h;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _h = parseFloat(value);\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * FormObject/RenderTarget\r\n */\r\n\r\n var RenderTarget = function() {\r\n this.page = page;\r\n this.currentPage = currentPage;\r\n this.pages = pages.slice(0);\r\n this.pagesContext = pagesContext.slice(0);\r\n this.x = pageX;\r\n this.y = pageY;\r\n this.matrix = pageMatrix;\r\n this.width = getPageWidth(currentPage);\r\n this.height = getPageHeight(currentPage);\r\n this.outputDestination = outputDestination;\r\n\r\n this.id = \"\"; // set by endFormObject()\r\n this.objectNumber = -1; // will be set by putXObject()\r\n };\r\n\r\n RenderTarget.prototype.restore = function() {\r\n page = this.page;\r\n currentPage = this.currentPage;\r\n pagesContext = this.pagesContext;\r\n pages = this.pages;\r\n pageX = this.x;\r\n pageY = this.y;\r\n pageMatrix = this.matrix;\r\n setPageWidth(currentPage, this.width);\r\n setPageHeight(currentPage, this.height);\r\n outputDestination = this.outputDestination;\r\n };\r\n\r\n var beginNewRenderTarget = function(x, y, width, height, matrix) {\r\n // save current state\r\n renderTargetStack.push(new RenderTarget());\r\n\r\n // clear pages\r\n page = currentPage = 0;\r\n pages = [];\r\n pageX = x;\r\n pageY = y;\r\n\r\n pageMatrix = matrix;\r\n\r\n beginPage([width, height]);\r\n };\r\n\r\n var endFormObject = function(key) {\r\n // only add it if it is not already present (the keys provided by the user must be unique!)\r\n if (renderTargetMap[key]) {\r\n renderTargetStack.pop().restore();\r\n return;\r\n }\r\n\r\n // save the created xObject\r\n var newXObject = new RenderTarget();\r\n\r\n var xObjectId = \"Xo\" + (Object.keys(renderTargets).length + 1).toString(10);\r\n newXObject.id = xObjectId;\r\n\r\n renderTargetMap[key] = xObjectId;\r\n renderTargets[xObjectId] = newXObject;\r\n\r\n events.publish(\"addFormObject\", newXObject);\r\n\r\n // restore state from stack\r\n renderTargetStack.pop().restore();\r\n };\r\n\r\n /**\r\n * Starts a new pdf form object, which means that all consequent draw calls target a new independent object\r\n * until {@link endFormObject} is called. The created object can be referenced and drawn later using\r\n * {@link doFormObject}. Nested form objects are possible.\r\n * x, y, width, height set the bounding box that is used to clip the content.\r\n *\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {Matrix} matrix The matrix that will be applied to convert the form objects coordinate system to\r\n * the parent's.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name beginFormObject\r\n */\r\n API.beginFormObject = function(x, y, width, height, matrix) {\r\n // The user can set the output target to a new form object. Nested form objects are possible.\r\n // Currently, they use the resource dictionary of the surrounding stream. This should be changed, as\r\n // the PDF-Spec states:\r\n // \"In PDF 1.2 and later versions, form XObjects may be independent of the content streams in which\r\n // they appear, and this is strongly recommended although not requiredIn PDF 1.2 and later versions,\r\n // form XObjects may be independent of the content streams in which they appear, and this is strongly\r\n // recommended although not required\"\r\n beginNewRenderTarget(x, y, width, height, matrix);\r\n return this;\r\n };\r\n\r\n /**\r\n * Completes and saves the form object.\r\n * @param {String} key The key by which this form object can be referenced.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name endFormObject\r\n */\r\n API.endFormObject = function(key) {\r\n endFormObject(key);\r\n return this;\r\n };\r\n\r\n /**\r\n * Draws the specified form object by referencing to the respective pdf XObject created with\r\n * {@link API.beginFormObject} and {@link endFormObject}.\r\n * The location is determined by matrix.\r\n *\r\n * @param {String} key The key to the form object.\r\n * @param {Matrix} matrix The matrix applied before drawing the form object.\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name doFormObject\r\n */\r\n API.doFormObject = function(key, matrix) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n out(\"q\");\r\n out(matrix.toString() + \" cm\");\r\n out(\"/\" + xObject.id + \" Do\");\r\n out(\"Q\");\r\n return this;\r\n };\r\n\r\n /**\r\n * Returns the form object specified by key.\r\n * @param key {String}\r\n * @returns {{x: number, y: number, width: number, height: number, matrix: Matrix}}\r\n * @function\r\n * @returns {jsPDF}\r\n * @memberof jsPDF#\r\n * @name getFormObject\r\n */\r\n API.getFormObject = function(key) {\r\n var xObject = renderTargets[renderTargetMap[key]];\r\n return {\r\n x: xObject.x,\r\n y: xObject.y,\r\n width: xObject.width,\r\n height: xObject.height,\r\n matrix: xObject.matrix\r\n };\r\n };\r\n\r\n /**\r\n * Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').\r\n * Uses FileSaver.js-method saveAs.\r\n *\r\n * @memberof jsPDF#\r\n * @name save\r\n * @function\r\n * @instance\r\n * @param {string} filename The filename including extension.\r\n * @param {Object} options An Object with additional options, possible options: 'returnPromise'.\r\n * @returns {jsPDF|Promise} jsPDF-instance */\r\n API.save = function(filename, options) {\r\n filename = filename || \"generated.pdf\";\r\n\r\n options = options || {};\r\n options.returnPromise = options.returnPromise || false;\r\n\r\n if (options.returnPromise === false) {\r\n saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n return this;\r\n } else {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n var result = saveAs(getBlob(buildDocument()), filename);\r\n if (typeof saveAs.unload === \"function\") {\r\n if (globalObject.setTimeout) {\r\n setTimeout(saveAs.unload, 911);\r\n }\r\n }\r\n resolve(result);\r\n } catch (e) {\r\n reject(e.message);\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n // applying plugins (more methods) ON TOP of built-in API.\r\n // this is intentional as we allow plugins to override\r\n // built-ins\r\n for (var plugin in jsPDF.API) {\r\n if (jsPDF.API.hasOwnProperty(plugin)) {\r\n if (plugin === \"events\" && jsPDF.API.events.length) {\r\n (function(events, newEvents) {\r\n // jsPDF.API.events is a JS Array of Arrays\r\n // where each Array is a pair of event name, handler\r\n // Events were added by plugins to the jsPDF instantiator.\r\n // These are always added to the new instance and some ran\r\n // during instantiation.\r\n var eventname, handler_and_args, i;\r\n\r\n for (i = newEvents.length - 1; i !== -1; i--) {\r\n // subscribe takes 3 args: 'topic', function, runonce_flag\r\n // if undefined, runonce is false.\r\n // users can attach callback directly,\r\n // or they can attach an array with [callback, runonce_flag]\r\n // that's what the \"apply\" magic is for below.\r\n eventname = newEvents[i][0];\r\n handler_and_args = newEvents[i][1];\r\n events.subscribe.apply(\r\n events,\r\n [eventname].concat(\r\n typeof handler_and_args === \"function\"\r\n ? [handler_and_args]\r\n : handler_and_args\r\n )\r\n );\r\n }\r\n })(events, jsPDF.API.events);\r\n } else {\r\n API[plugin] = jsPDF.API[plugin];\r\n }\r\n }\r\n }\r\n\r\n var getPageWidth = (API.getPageWidth = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightX -\r\n pagesContext[pageNumber].mediaBox.bottomLeftX) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageWidth = (API.setPageWidth = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightX =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftX;\r\n });\r\n\r\n var getPageHeight = (API.getPageHeight = function(pageNumber) {\r\n pageNumber = pageNumber || currentPage;\r\n return (\r\n (pagesContext[pageNumber].mediaBox.topRightY -\r\n pagesContext[pageNumber].mediaBox.bottomLeftY) /\r\n scaleFactor\r\n );\r\n });\r\n\r\n var setPageHeight = (API.setPageHeight = function(pageNumber, value) {\r\n pagesContext[pageNumber].mediaBox.topRightY =\r\n value * scaleFactor + pagesContext[pageNumber].mediaBox.bottomLeftY;\r\n });\r\n\r\n /**\r\n * Object exposing internal API to plugins\r\n * @public\r\n * @ignore\r\n */\r\n API.internal = {\r\n pdfEscape: pdfEscape,\r\n getStyle: getStyle,\r\n getFont: getFontEntry,\r\n getFontSize: getFontSize,\r\n getCharSpace: getCharSpace,\r\n getTextColor: getTextColor,\r\n getLineHeight: getLineHeight,\r\n getLineHeightFactor: getLineHeightFactor,\r\n getLineWidth: getLineWidth,\r\n write: write,\r\n getHorizontalCoordinate: getHorizontalCoordinate,\r\n getVerticalCoordinate: getVerticalCoordinate,\r\n getCoordinateString: getHorizontalCoordinateString,\r\n getVerticalCoordinateString: getVerticalCoordinateString,\r\n collections: {},\r\n newObject: newObject,\r\n newAdditionalObject: newAdditionalObject,\r\n newObjectDeferred: newObjectDeferred,\r\n newObjectDeferredBegin: newObjectDeferredBegin,\r\n getFilters: getFilters,\r\n putStream: putStream,\r\n events: events,\r\n scaleFactor: scaleFactor,\r\n pageSize: {\r\n getWidth: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n setWidth: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n getHeight: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n setHeight: function(value) {\r\n setPageHeight(currentPage, value);\r\n }\r\n },\r\n encryptionOptions: encryptionOptions,\r\n encryption: encryption,\r\n getEncryptor: getEncryptor,\r\n output: output,\r\n getNumberOfPages: getNumberOfPages,\r\n pages: pages,\r\n out: out,\r\n f2: f2,\r\n f3: f3,\r\n getPageInfo: getPageInfo,\r\n getPageInfoByObjId: getPageInfoByObjId,\r\n getCurrentPageInfo: getCurrentPageInfo,\r\n getPDFVersion: getPdfVersion,\r\n Point: Point,\r\n Rectangle: Rectangle,\r\n Matrix: Matrix,\r\n hasHotfix: hasHotfix //Expose the hasHotfix check so plugins can also check them.\r\n };\r\n\r\n Object.defineProperty(API.internal.pageSize, \"width\", {\r\n get: function() {\r\n return getPageWidth(currentPage);\r\n },\r\n set: function(value) {\r\n setPageWidth(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(API.internal.pageSize, \"height\", {\r\n get: function() {\r\n return getPageHeight(currentPage);\r\n },\r\n set: function(value) {\r\n setPageHeight(currentPage, value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n\r\n //////////////////////////////////////////////////////\r\n // continuing initialization of jsPDF Document object\r\n //////////////////////////////////////////////////////\r\n // Add the first page automatically\r\n addFonts.call(API, standardFonts);\r\n activeFontKey = \"F1\";\r\n _addPage(format, orientation);\r\n\r\n events.publish(\"initialized\");\r\n return API;\r\n}\r\n\r\n/**\r\n * jsPDF.API is a STATIC property of jsPDF class.\r\n * jsPDF.API is an object you can add methods and properties to.\r\n * The methods / properties you add will show up in new jsPDF objects.\r\n *\r\n * One property is prepopulated. It is the 'events' Object. Plugin authors can add topics,\r\n * callbacks to this object. These will be reassigned to all new instances of jsPDF.\r\n *\r\n * @static\r\n * @public\r\n * @memberof jsPDF#\r\n * @name API\r\n *\r\n * @example\r\n * jsPDF.API.mymethod = function(){\r\n * // 'this' will be ref to internal API object. see jsPDF source\r\n * // , so you can refer to built-in methods like so:\r\n * // this.line(....)\r\n * // this.text(....)\r\n * }\r\n * var pdfdoc = new jsPDF()\r\n * pdfdoc.mymethod() // <- !!!!!!\r\n */\r\njsPDF.API = {\r\n events: []\r\n};\r\n/**\r\n * The version of jsPDF.\r\n * @name version\r\n * @type {string}\r\n * @memberof jsPDF#\r\n */\r\njsPDF.version = \"0.0.0\";\r\n\r\nexport { jsPDF, ShadingPattern, TilingPattern, GState };\r\nexport default jsPDF;\r\n","/* global jsPDF */\n/**\n * @license\n * Copyright (c) 2016 Alexander Weidt,\n * https://github.com/BiggA94\n *\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF AcroForm Plugin\n * @module AcroForm\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\nvar jsPDFAPI = jsPDF.API;\nvar scaleFactor = 1;\n\nvar pdfEscape = function(value) {\n return value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\(/g, \"\\\\(\")\n .replace(/\\)/g, \"\\\\)\");\n};\nvar pdfUnescape = function(value) {\n return value\n .replace(/\\\\\\\\/g, \"\\\\\")\n .replace(/\\\\\\(/g, \"(\")\n .replace(/\\\\\\)/g, \")\");\n};\n\nvar f2 = function(number) {\n return number.toFixed(2); // Ie, %.2f\n};\n\nvar f5 = function(number) {\n return number.toFixed(5); // Ie, %.2f\n};\n\njsPDFAPI.__acroform__ = {};\nvar inherit = function(child, parent) {\n child.prototype = Object.create(parent.prototype);\n child.prototype.constructor = child;\n};\n\nvar scale = function(x) {\n return x * scaleFactor;\n};\n\nvar createFormXObject = function(formObject) {\n var xobj = new AcroFormXObject();\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n xobj.BBox = [0, 0, Number(f2(width)), Number(f2(height))];\n return xobj;\n};\n\n/**\n * Bit-Operations\n */\nvar setBit = (jsPDFAPI.__acroform__.setBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number |= bitMask;\n\n return number;\n});\n\nvar clearBit = (jsPDFAPI.__acroform__.clearBit = function(number, bitPosition) {\n number = number || 0;\n bitPosition = bitPosition || 0;\n\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\"\n );\n }\n var bitMask = 1 << bitPosition;\n\n number &= ~bitMask;\n\n return number;\n});\n\nvar getBit = (jsPDFAPI.__acroform__.getBit = function(number, bitPosition) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBit\"\n );\n }\n return (number & (1 << bitPosition)) === 0 ? 0 : 1;\n});\n\n/*\n * Ff starts counting the bit position at 1 and not like javascript at 0\n */\nvar getBitForPdf = (jsPDFAPI.__acroform__.getBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\"\n );\n }\n return getBit(number, bitPosition - 1);\n});\n\nvar setBitForPdf = (jsPDFAPI.__acroform__.setBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\"\n );\n }\n return setBit(number, bitPosition - 1);\n});\n\nvar clearBitForPdf = (jsPDFAPI.__acroform__.clearBitForPdf = function(\n number,\n bitPosition\n) {\n if (isNaN(number) || isNaN(bitPosition)) {\n throw new Error(\n \"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\"\n );\n }\n return clearBit(number, bitPosition - 1);\n});\n\nvar calculateCoordinates = (jsPDFAPI.__acroform__.calculateCoordinates = function(\n args,\n scope\n) {\n var getHorizontalCoordinate = scope.internal.getHorizontalCoordinate;\n var getVerticalCoordinate = scope.internal.getVerticalCoordinate;\n var x = args[0];\n var y = args[1];\n var w = args[2];\n var h = args[3];\n\n var coordinates = {};\n\n coordinates.lowerLeft_X = getHorizontalCoordinate(x) || 0;\n coordinates.lowerLeft_Y = getVerticalCoordinate(y + h) || 0;\n coordinates.upperRight_X = getHorizontalCoordinate(x + w) || 0;\n coordinates.upperRight_Y = getVerticalCoordinate(y) || 0;\n\n return [\n Number(f2(coordinates.lowerLeft_X)),\n Number(f2(coordinates.lowerLeft_Y)),\n Number(f2(coordinates.upperRight_X)),\n Number(f2(coordinates.upperRight_Y))\n ];\n});\n\nvar calculateAppearanceStream = function(formObject) {\n if (formObject.appearanceStreamContent) {\n return formObject.appearanceStreamContent;\n }\n\n if (!formObject.V && !formObject.DV) {\n return;\n }\n\n // else calculate it\n\n var stream = [];\n var text = formObject._V || formObject.DV;\n var calcRes = calculateX(formObject, text);\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n\n //PDF 32000-1:2008, page 444\n stream.push(\"/Tx BMC\");\n stream.push(\"q\");\n stream.push(\"BT\"); // Begin Text\n stream.push(formObject.scope.__private__.encodeColorString(formObject.color));\n stream.push(\"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf\");\n stream.push(\"1 0 0 1 0 0 Tm\"); // Transformation Matrix\n stream.push(calcRes.text);\n stream.push(\"ET\"); // End Text\n stream.push(\"Q\");\n stream.push(\"EMC\");\n\n var appearanceStreamContent = createFormXObject(formObject);\n appearanceStreamContent.scope = formObject.scope;\n appearanceStreamContent.stream = stream.join(\"\\n\");\n return appearanceStreamContent;\n};\n\nvar calculateX = function(formObject, text) {\n var maxFontSize =\n formObject.fontSize === 0 ? formObject.maxFontSize : formObject.fontSize;\n var returnValue = {\n text: \"\",\n fontSize: \"\"\n };\n // Remove Brackets\n text = text.substr(0, 1) == \"(\" ? text.substr(1) : text;\n text =\n text.substr(text.length - 1) == \")\"\n ? text.substr(0, text.length - 1)\n : text;\n // split into array of words\n var textSplit = text.split(\" \");\n if (formObject.multiline) {\n textSplit = textSplit.map(word => word.split(\"\\n\"));\n } else {\n textSplit = textSplit.map(word => [word]);\n }\n\n var fontSize = maxFontSize; // The Starting fontSize (The Maximum)\n var lineSpacing = 2;\n var borderPadding = 2;\n\n var height = AcroFormAppearance.internal.getHeight(formObject) || 0;\n height = height < 0 ? -height : height;\n var width = AcroFormAppearance.internal.getWidth(formObject) || 0;\n width = width < 0 ? -width : width;\n\n var isSmallerThanWidth = function(i, lastLine, fontSize) {\n if (i + 1 < textSplit.length) {\n var tmp = lastLine + \" \" + textSplit[i + 1][0];\n var TextWidth = calculateFontSpace(tmp, formObject, fontSize).width;\n var FieldWidth = width - 2 * borderPadding;\n return TextWidth <= FieldWidth;\n } else {\n return false;\n }\n };\n\n fontSize++;\n FontSize: while (fontSize > 0) {\n text = \"\";\n fontSize--;\n var textHeight = calculateFontSpace(\"3\", formObject, fontSize).height;\n var startY = formObject.multiline\n ? height - fontSize\n : (height - textHeight) / 2;\n startY += lineSpacing;\n var startX;\n\n var lastY = startY;\n var firstWordInLine = 0,\n lastWordInLine = 0;\n var lastLength;\n var currWord = 0;\n\n if (fontSize <= 0) {\n // In case, the Text doesn't fit at all\n fontSize = 12;\n text = \"(...) Tj\\n\";\n text +=\n \"% Width of Text: \" +\n calculateFontSpace(text, formObject, fontSize).width +\n \", FieldWidth:\" +\n width +\n \"\\n\";\n break;\n }\n\n var lastLine = \"\";\n var lineCount = 0;\n Line: for (var i = 0; i < textSplit.length; i++) {\n if (textSplit.hasOwnProperty(i)) {\n let isWithNewLine = false;\n if (textSplit[i].length !== 1 && currWord !== textSplit[i].length - 1) {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n continue FontSize;\n }\n\n lastLine += textSplit[i][currWord];\n isWithNewLine = true;\n lastWordInLine = i;\n i--;\n } else {\n lastLine += textSplit[i][currWord] + \" \";\n lastLine =\n lastLine.substr(lastLine.length - 1) == \" \"\n ? lastLine.substr(0, lastLine.length - 1)\n : lastLine;\n var key = parseInt(i);\n var nextLineIsSmaller = isSmallerThanWidth(key, lastLine, fontSize);\n var isLastWord = i >= textSplit.length - 1;\n\n if (nextLineIsSmaller && !isLastWord) {\n lastLine += \" \";\n currWord = 0;\n continue; // Line\n } else if (!nextLineIsSmaller && !isLastWord) {\n if (!formObject.multiline) {\n continue FontSize;\n } else {\n if (\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the\n // FieldObject\n continue FontSize;\n }\n lastWordInLine = key;\n // go on\n }\n } else if (isLastWord) {\n lastWordInLine = key;\n } else {\n if (\n formObject.multiline &&\n (textHeight + lineSpacing) * (lineCount + 2) + lineSpacing >\n height\n ) {\n // If the Text is higher than the FieldObject\n continue FontSize;\n }\n }\n }\n // Remove last blank\n\n var line = \"\";\n\n for (var x = firstWordInLine; x <= lastWordInLine; x++) {\n var currLine = textSplit[x];\n if (formObject.multiline) {\n if (x === lastWordInLine) {\n line += currLine[currWord] + \" \";\n currWord = (currWord + 1) % currLine.length;\n continue;\n }\n if (x === firstWordInLine) {\n line += currLine[currLine.length - 1] + \" \";\n continue;\n }\n }\n line += currLine[0] + \" \";\n }\n\n // Remove last blank\n line =\n line.substr(line.length - 1) == \" \"\n ? line.substr(0, line.length - 1)\n : line;\n // lastLength -= blankSpace.width;\n lastLength = calculateFontSpace(line, formObject, fontSize).width;\n\n // Calculate startX\n switch (formObject.textAlign) {\n case \"right\":\n startX = width - lastLength - borderPadding;\n break;\n case \"center\":\n startX = (width - lastLength) / 2;\n break;\n case \"left\":\n default:\n startX = borderPadding;\n break;\n }\n text += f2(startX) + \" \" + f2(lastY) + \" Td\\n\";\n text += \"(\" + pdfEscape(line) + \") Tj\\n\";\n // reset X in PDF\n text += -f2(startX) + \" 0 Td\\n\";\n\n // After a Line, adjust y position\n lastY = -(fontSize + lineSpacing);\n\n // Reset for next iteration step\n lastLength = 0;\n firstWordInLine = isWithNewLine ? lastWordInLine : lastWordInLine + 1;\n lineCount++;\n\n lastLine = \"\";\n continue Line;\n }\n }\n break;\n }\n\n returnValue.text = text;\n returnValue.fontSize = fontSize;\n\n return returnValue;\n};\n\n/**\n * Small workaround for calculating the TextMetric approximately.\n *\n * @param text\n * @param fontsize\n * @returns {TextMetrics} (Has Height and Width)\n */\nvar calculateFontSpace = function(text, formObject, fontSize) {\n var font = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n );\n var width =\n formObject.scope.getStringUnitWidth(text, {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) * parseFloat(fontSize);\n var height =\n formObject.scope.getStringUnitWidth(\"3\", {\n font: font,\n fontSize: parseFloat(fontSize),\n charSpace: 0\n }) *\n parseFloat(fontSize) *\n 1.5;\n return { height: height, width: width };\n};\n\nvar acroformPluginTemplate = {\n fields: [],\n xForms: [],\n /**\n * acroFormDictionaryRoot contains information about the AcroForm\n * Dictionary 0: The Event-Token, the AcroFormDictionaryCallback has\n * 1: The Object ID of the Root\n */\n acroFormDictionaryRoot: null,\n /**\n * After the PDF gets evaluated, the reference to the root has to be\n * reset, this indicates, whether the root has already been printed\n * out\n */\n printedOut: false,\n internal: null,\n isInitialized: false\n};\n\nvar annotReferenceCallback = function(scope) {\n //set objId to undefined and force it to get a new objId on buildDocument\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId = undefined;\n var fields = scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields;\n for (var i in fields) {\n if (fields.hasOwnProperty(i)) {\n var formObject = fields[i];\n //set objId to undefined and force it to get a new objId on buildDocument\n formObject.objId = undefined;\n // add Annot Reference!\n if (formObject.hasAnnotation) {\n // If theres an Annotation Widget in the Form Object, put the\n // Reference in the /Annot array\n createAnnotationReference(formObject, scope);\n }\n }\n }\n};\n\nvar putForm = function(formObject) {\n if (formObject.scope.internal.acroformPlugin.printedOut) {\n formObject.scope.internal.acroformPlugin.printedOut = false;\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot = null;\n }\n formObject.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(\n formObject\n );\n};\n/**\n * Create the Reference to the widgetAnnotation, so that it gets referenced\n * in the Annot[] int the+ (Requires the Annotation Plugin)\n */\nvar createAnnotationReference = function(object, scope) {\n var options = {\n type: \"reference\",\n object: object\n };\n var findEntry = function(entry) {\n return entry.type === options.type && entry.object === options.object;\n };\n if (\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.find(findEntry) === undefined\n ) {\n scope.internal\n .getPageInfo(object.page)\n .pageContext.annotations.push(options);\n }\n};\n\n// Callbacks\n\nvar putCatalogCallback = function(scope) {\n // Put reference to AcroForm to DocumentCatalog\n if (\n typeof scope.internal.acroformPlugin.acroFormDictionaryRoot !== \"undefined\"\n ) {\n // for safety, shouldn't normally be the case\n scope.internal.write(\n \"/AcroForm \" +\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId +\n \" \" +\n 0 +\n \" R\"\n );\n } else {\n throw new Error(\"putCatalogCallback: Root missing.\");\n }\n};\n\n/**\n * Adds /Acroform X 0 R to Document Catalog, and creates the AcroForm\n * Dictionary\n */\nvar AcroFormDictionaryCallback = function(scope) {\n // Remove event\n scope.internal.events.unsubscribe(\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID\n );\n delete scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID;\n scope.internal.acroformPlugin.printedOut = true;\n};\n\n/**\n * Creates the single Fields and writes them into the Document\n *\n * If fieldArray is set, use the fields that are inside it instead of the\n * fields from the AcroRoot (for the FormXObjects...)\n */\nvar createFieldCallback = function(fieldArray, scope) {\n var standardFields = !fieldArray;\n\n if (!fieldArray) {\n // in case there is no fieldArray specified, we want to print out\n // the Fields of the AcroForm\n // Print out Root\n scope.internal.newObjectDeferredBegin(\n scope.internal.acroformPlugin.acroFormDictionaryRoot.objId,\n true\n );\n scope.internal.acroformPlugin.acroFormDictionaryRoot.putStream();\n }\n\n fieldArray =\n fieldArray || scope.internal.acroformPlugin.acroFormDictionaryRoot.Kids;\n\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var fieldObject = fieldArray[i];\n var keyValueList = [];\n var oldRect = fieldObject.Rect;\n\n if (fieldObject.Rect) {\n fieldObject.Rect = calculateCoordinates(fieldObject.Rect, scope);\n }\n\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n fieldObject.DA = AcroFormAppearance.createDefaultAppearanceStream(\n fieldObject\n );\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.getKeyValueListForStream === \"function\"\n ) {\n keyValueList = fieldObject.getKeyValueListForStream();\n }\n\n fieldObject.Rect = oldRect;\n\n if (\n fieldObject.hasAppearanceStream &&\n !fieldObject.appearanceStreamContent\n ) {\n // Calculate Appearance\n var appearance = calculateAppearanceStream(fieldObject);\n keyValueList.push({ key: \"AP\", value: \"<>\" });\n\n scope.internal.acroformPlugin.xForms.push(appearance);\n }\n\n // Assume AppearanceStreamContent is a Array with N,R,D (at least\n // one of them!)\n if (fieldObject.appearanceStreamContent) {\n var appearanceStreamString = \"\";\n // Iterate over N,R and D\n for (var k in fieldObject.appearanceStreamContent) {\n if (fieldObject.appearanceStreamContent.hasOwnProperty(k)) {\n var value = fieldObject.appearanceStreamContent[k];\n appearanceStreamString += \"/\" + k + \" \";\n appearanceStreamString += \"<<\";\n if (Object.keys(value).length >= 1 || Array.isArray(value)) {\n // appearanceStream is an Array or Object!\n for (var i in value) {\n if (value.hasOwnProperty(i)) {\n var obj = value[i];\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order\n // to get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj + \" \";\n\n // In case the XForm is already used, e.g. OffState\n // of CheckBoxes, don't add it\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n }\n } else {\n obj = value;\n if (typeof obj === \"function\") {\n // if Function is referenced, call it in order to\n // get the FormXObject\n obj = obj.call(scope, fieldObject);\n }\n appearanceStreamString += \"/\" + i + \" \" + obj;\n if (!(scope.internal.acroformPlugin.xForms.indexOf(obj) >= 0))\n scope.internal.acroformPlugin.xForms.push(obj);\n }\n appearanceStreamString += \">>\";\n }\n }\n\n // appearance stream is a normal Object..\n keyValueList.push({\n key: \"AP\",\n value: \"<<\\n\" + appearanceStreamString + \">>\"\n });\n }\n\n scope.internal.putStream({\n additionalKeyValues: keyValueList,\n objectId: fieldObject.objId\n });\n\n scope.internal.out(\"endobj\");\n }\n }\n if (standardFields) {\n createXFormObjectCallback(scope.internal.acroformPlugin.xForms, scope);\n }\n};\n\nvar createXFormObjectCallback = function(fieldArray, scope) {\n for (var i in fieldArray) {\n if (fieldArray.hasOwnProperty(i)) {\n var key = i;\n var fieldObject = fieldArray[i];\n // Start Writing the Object\n scope.internal.newObjectDeferredBegin(fieldObject.objId, true);\n\n if (\n typeof fieldObject === \"object\" &&\n typeof fieldObject.putStream === \"function\"\n ) {\n fieldObject.putStream();\n }\n delete fieldArray[key];\n }\n }\n};\n\nvar initializeAcroForm = function(scope, formObject) {\n formObject.scope = scope;\n if (\n scope.internal !== undefined &&\n (scope.internal.acroformPlugin === undefined ||\n scope.internal.acroformPlugin.isInitialized === false)\n ) {\n AcroFormField.FieldNum = 0;\n scope.internal.acroformPlugin = JSON.parse(\n JSON.stringify(acroformPluginTemplate)\n );\n if (scope.internal.acroformPlugin.acroFormDictionaryRoot) {\n throw new Error(\"Exception while creating AcroformDictionary\");\n }\n scaleFactor = scope.internal.scaleFactor;\n // The Object Number of the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot = new AcroFormDictionary();\n scope.internal.acroformPlugin.acroFormDictionaryRoot.scope = scope;\n\n // add Callback for creating the AcroForm Dictionary\n scope.internal.acroformPlugin.acroFormDictionaryRoot._eventID = scope.internal.events.subscribe(\n \"postPutResources\",\n function() {\n AcroFormDictionaryCallback(scope);\n }\n );\n\n scope.internal.events.subscribe(\"buildDocument\", function() {\n annotReferenceCallback(scope);\n }); // buildDocument\n\n // Register event, that is triggered when the DocumentCatalog is\n // written, in order to add /AcroForm\n\n scope.internal.events.subscribe(\"putCatalog\", function() {\n putCatalogCallback(scope);\n });\n\n // Register event, that creates all Fields\n scope.internal.events.subscribe(\"postPutPages\", function(fieldArray) {\n createFieldCallback(fieldArray, scope);\n });\n\n scope.internal.acroformPlugin.isInitialized = true;\n }\n};\n\n//PDF 32000-1:2008, page 26, 7.3.6\nvar arrayToPdfArray = (jsPDFAPI.__acroform__.arrayToPdfArray = function(\n array,\n objId,\n scope\n) {\n var encryptor = function(data) {\n return data;\n };\n if (Array.isArray(array)) {\n var content = \"[\";\n for (var i = 0; i < array.length; i++) {\n if (i !== 0) {\n content += \" \";\n }\n switch (typeof array[i]) {\n case \"boolean\":\n case \"number\":\n case \"object\":\n content += array[i].toString();\n break;\n case \"string\":\n if (array[i].substr(0, 1) !== \"/\") {\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n content += \"(\" + pdfEscape(encryptor(array[i].toString())) + \")\";\n } else {\n content += array[i].toString();\n }\n break;\n }\n }\n content += \"]\";\n return content;\n }\n throw new Error(\n \"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\"\n );\n});\nfunction getMatches(string, regex, index) {\n index || (index = 1); // default to the first capturing group\n var matches = [];\n var match;\n while ((match = regex.exec(string))) {\n matches.push(match[index]);\n }\n return matches;\n}\nvar pdfArrayToStringArray = function(array) {\n var result = [];\n if (typeof array === \"string\") {\n result = getMatches(array, /\\((.*?)\\)/g);\n }\n return result;\n};\n\nvar toPdfString = function(string, objId, scope) {\n var encryptor = function(data) {\n return data;\n };\n if (typeof objId !== \"undefined\" && scope)\n encryptor = scope.internal.getEncryptor(objId);\n string = string || \"\";\n string.toString();\n string = \"(\" + pdfEscape(encryptor(string)) + \")\";\n return string;\n};\n\n// ##########################\n// Classes\n// ##########################\n\n/**\n * @class AcroFormPDFObject\n * @classdesc A AcroFormPDFObject\n */\nvar AcroFormPDFObject = function() {\n this._objId = undefined;\n this._scope = undefined;\n\n /**\n * @name AcroFormPDFObject#objId\n * @type {any}\n */\n Object.defineProperty(this, \"objId\", {\n get: function() {\n if (typeof this._objId === \"undefined\") {\n if (typeof this.scope === \"undefined\") {\n return undefined;\n }\n this._objId = this.scope.internal.newObjectDeferred();\n }\n return this._objId;\n },\n set: function(value) {\n this._objId = value;\n }\n });\n Object.defineProperty(this, \"scope\", {\n value: this._scope,\n writable: true\n });\n};\n\n/**\n * @function AcroFormPDFObject.toString\n */\nAcroFormPDFObject.prototype.toString = function() {\n return this.objId + \" 0 R\";\n};\n\nAcroFormPDFObject.prototype.putStream = function() {\n var keyValueList = this.getKeyValueListForStream();\n this.scope.internal.putStream({\n data: this.stream,\n additionalKeyValues: keyValueList,\n objectId: this.objId\n });\n this.scope.internal.out(\"endobj\");\n};\n\n/**\n * Returns an key-value-List of all non-configurable Variables from the Object\n *\n * @name getKeyValueListForStream\n * @returns {string}\n */\nAcroFormPDFObject.prototype.getKeyValueListForStream = function() {\n var keyValueList = [];\n var keys = Object.getOwnPropertyNames(this).filter(function(key) {\n return (\n key != \"content\" &&\n key != \"appearanceStreamContent\" &&\n key != \"scope\" &&\n key != \"objId\" &&\n key.substring(0, 1) != \"_\"\n );\n });\n\n for (var i in keys) {\n if (Object.getOwnPropertyDescriptor(this, keys[i]).configurable === false) {\n var key = keys[i];\n var value = this[key];\n\n if (value) {\n if (Array.isArray(value)) {\n keyValueList.push({\n key: key,\n value: arrayToPdfArray(value, this.objId, this.scope)\n });\n } else if (value instanceof AcroFormPDFObject) {\n // In case it is a reference to another PDFObject,\n // take the reference number\n value.scope = this.scope;\n keyValueList.push({ key: key, value: value.objId + \" 0 R\" });\n } else if (typeof value !== \"function\") {\n keyValueList.push({ key: key, value: value });\n }\n }\n }\n }\n return keyValueList;\n};\n\nvar AcroFormXObject = function() {\n AcroFormPDFObject.call(this);\n\n Object.defineProperty(this, \"Type\", {\n value: \"/XObject\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"Subtype\", {\n value: \"/Form\",\n configurable: false,\n writable: true\n });\n\n Object.defineProperty(this, \"FormType\", {\n value: 1,\n configurable: false,\n writable: true\n });\n\n var _BBox = [];\n Object.defineProperty(this, \"BBox\", {\n configurable: false,\n get: function() {\n return _BBox;\n },\n set: function(value) {\n _BBox = value;\n }\n });\n\n Object.defineProperty(this, \"Resources\", {\n value: \"2 0 R\",\n configurable: false,\n writable: true\n });\n\n var _stream;\n Object.defineProperty(this, \"stream\", {\n enumerable: false,\n configurable: true,\n set: function(value) {\n _stream = value.trim();\n },\n get: function() {\n if (_stream) {\n return _stream;\n } else {\n return null;\n }\n }\n });\n};\n\ninherit(AcroFormXObject, AcroFormPDFObject);\n\nvar AcroFormDictionary = function() {\n AcroFormPDFObject.call(this);\n\n var _Kids = [];\n\n Object.defineProperty(this, \"Kids\", {\n enumerable: false,\n configurable: true,\n get: function() {\n if (_Kids.length > 0) {\n return _Kids;\n } else {\n return undefined;\n }\n }\n });\n Object.defineProperty(this, \"Fields\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Kids;\n }\n });\n\n // Default Appearance\n var _DA;\n Object.defineProperty(this, \"DA\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DA) {\n return undefined;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_DA)) + \")\";\n },\n set: function(value) {\n _DA = value;\n }\n });\n};\n\ninherit(AcroFormDictionary, AcroFormPDFObject);\n\n/**\n * The Field Object contains the Variables, that every Field needs\n *\n * @class AcroFormField\n * @classdesc An AcroForm FieldObject\n */\nvar AcroFormField = function() {\n AcroFormPDFObject.call(this);\n\n //Annotation-Flag See Table 165\n var _F = 4;\n Object.defineProperty(this, \"F\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _F;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _F = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute F supplied.'\n );\n }\n }\n });\n\n /**\n * (PDF 1.2) If set, print the annotation when the page is printed. If clear, never print the annotation, regardless of wether is is displayed on the screen.\n * NOTE 2 This can be useful for annotations representing interactive pushbuttons, which would serve no meaningful purpose on the printed page.\n *\n * @name AcroFormField#showWhenPrinted\n * @default true\n * @type {boolean}\n */\n Object.defineProperty(this, \"showWhenPrinted\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(_F, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.F = setBitForPdf(_F, 3);\n } else {\n this.F = clearBitForPdf(_F, 3);\n }\n }\n });\n\n var _Ff = 0;\n Object.defineProperty(this, \"Ff\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _Ff;\n },\n set: function(value) {\n if (!isNaN(value)) {\n _Ff = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Ff supplied.'\n );\n }\n }\n });\n\n var _Rect = [];\n Object.defineProperty(this, \"Rect\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (_Rect.length === 0) {\n return undefined;\n }\n return _Rect;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Rect = value;\n } else {\n _Rect = [];\n }\n }\n });\n\n /**\n * The x-position of the field.\n *\n * @name AcroFormField#x\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[0])) {\n return 0;\n }\n return _Rect[0];\n },\n set: function(value) {\n _Rect[0] = value;\n }\n });\n\n /**\n * The y-position of the field.\n *\n * @name AcroFormField#y\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[1])) {\n return 0;\n }\n return _Rect[1];\n },\n set: function(value) {\n _Rect[1] = value;\n }\n });\n\n /**\n * The width of the field.\n *\n * @name AcroFormField#width\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[2])) {\n return 0;\n }\n return _Rect[2];\n },\n set: function(value) {\n _Rect[2] = value;\n }\n });\n\n /**\n * The height of the field.\n *\n * @name AcroFormField#height\n * @default null\n * @type {number}\n */\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_Rect || isNaN(_Rect[3])) {\n return 0;\n }\n return _Rect[3];\n },\n set: function(value) {\n _Rect[3] = value;\n }\n });\n\n var _FT = \"\";\n Object.defineProperty(this, \"FT\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _FT;\n },\n set: function(value) {\n switch (value) {\n case \"/Btn\":\n case \"/Tx\":\n case \"/Ch\":\n case \"/Sig\":\n _FT = value;\n break;\n default:\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute FT supplied.'\n );\n }\n }\n });\n\n var _T = null;\n\n Object.defineProperty(this, \"T\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (!_T || _T.length < 1) {\n // In case of a Child from a Radio´Group, you don't need a FieldName\n if (this instanceof AcroFormChildClass) {\n return undefined;\n }\n _T = \"FieldObject\" + AcroFormField.FieldNum++;\n }\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n return \"(\" + pdfEscape(encryptor(_T)) + \")\";\n },\n set: function(value) {\n _T = value.toString();\n }\n });\n\n /**\n * (Optional) The partial field name (see 12.7.3.2, “Field Names”).\n *\n * @name AcroFormField#fieldName\n * @default null\n * @type {string}\n */\n Object.defineProperty(this, \"fieldName\", {\n configurable: true,\n enumerable: true,\n get: function() {\n return _T;\n },\n set: function(value) {\n _T = value;\n }\n });\n\n var _fontName = \"helvetica\";\n /**\n * The fontName of the font to be used.\n *\n * @name AcroFormField#fontName\n * @default 'helvetica'\n * @type {string}\n */\n Object.defineProperty(this, \"fontName\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontName;\n },\n set: function(value) {\n _fontName = value;\n }\n });\n\n var _fontStyle = \"normal\";\n /**\n * The fontStyle of the font to be used.\n *\n * @name AcroFormField#fontStyle\n * @default 'normal'\n * @type {string}\n */\n Object.defineProperty(this, \"fontStyle\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontStyle;\n },\n set: function(value) {\n _fontStyle = value;\n }\n });\n\n var _fontSize = 0;\n /**\n * The fontSize of the font to be used.\n *\n * @name AcroFormField#fontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"fontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _fontSize;\n },\n set: function(value) {\n _fontSize = value;\n }\n });\n\n var _maxFontSize = undefined;\n /**\n * The maximum fontSize of the font to be used.\n *\n * @name AcroFormField#maxFontSize\n * @default 0 (for auto)\n * @type {number}\n */\n Object.defineProperty(this, \"maxFontSize\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (_maxFontSize === undefined) {\n // use the old default value here - the value is some kind of random as it depends on the scaleFactor (user unit)\n // (\"50\" is transformed to the \"user space\" but then used in \"pdf space\")\n return 50 / scaleFactor;\n } else {\n return _maxFontSize;\n }\n },\n set: function(value) {\n _maxFontSize = value;\n }\n });\n\n var _color = \"black\";\n /**\n * The color of the text\n *\n * @name AcroFormField#color\n * @default 'black'\n * @type {string|rgba}\n */\n Object.defineProperty(this, \"color\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _color;\n },\n set: function(value) {\n _color = value;\n }\n });\n\n var _DA = \"/F1 0 Tf 0 g\";\n // Defines the default appearance (Needed for variable Text)\n Object.defineProperty(this, \"DA\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (\n !_DA ||\n this instanceof AcroFormChildClass ||\n this instanceof AcroFormTextField\n ) {\n return undefined;\n }\n return toPdfString(_DA, this.objId, this.scope);\n },\n set: function(value) {\n value = value.toString();\n _DA = value;\n }\n });\n\n var _DV = null;\n Object.defineProperty(this, \"DV\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_DV) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_DV, this.objId, this.scope);\n }\n return _DV;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _DV = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _DV = pdfUnescape(value);\n }\n } else {\n _DV = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The default value to which the field reverts when a reset-form action is executed (see 12.7.5.3, “Reset-Form Action”). The format of this value is the same as that of value.\n *\n * @name AcroFormField#defaultValue\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"defaultValue\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_DV.substr(1, _DV.length - 1));\n } else {\n return _DV;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _DV = \"/\" + value;\n } else {\n _DV = value;\n }\n }\n });\n\n var _V = null;\n Object.defineProperty(this, \"_V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n return _V;\n },\n set: function(value) {\n this.V = value;\n }\n });\n Object.defineProperty(this, \"V\", {\n enumerable: false,\n configurable: false,\n get: function() {\n if (!_V) {\n return undefined;\n }\n if (this instanceof AcroFormButton === false) {\n return toPdfString(_V, this.objId, this.scope);\n }\n return _V;\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === false) {\n if (value.substr(0, 1) === \"(\") {\n _V = pdfUnescape(value.substr(1, value.length - 2));\n } else {\n _V = pdfUnescape(value);\n }\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * (Optional; inheritable) The field’s value, whose format varies depending on the field type. See the descriptions of individual field types for further information.\n *\n * @name AcroFormField#value\n * @default null\n * @type {any}\n */\n Object.defineProperty(this, \"value\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (this instanceof AcroFormButton === true) {\n return pdfUnescape(_V.substr(1, _V.length - 1));\n } else {\n return _V;\n }\n },\n set: function(value) {\n value = value.toString();\n if (this instanceof AcroFormButton === true) {\n _V = \"/\" + value;\n } else {\n _V = value;\n }\n }\n });\n\n /**\n * Check if field has annotations\n *\n * @name AcroFormField#hasAnnotation\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAnnotation\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.Rect;\n }\n });\n\n Object.defineProperty(this, \"Type\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Annot\" : null;\n }\n });\n\n Object.defineProperty(this, \"Subtype\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return this.hasAnnotation ? \"/Widget\" : null;\n }\n });\n\n var _hasAppearanceStream = false;\n /**\n * true if field has an appearanceStream\n *\n * @name AcroFormField#hasAppearanceStream\n * @readonly\n * @type {boolean}\n */\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _hasAppearanceStream;\n },\n set: function(value) {\n value = Boolean(value);\n _hasAppearanceStream = value;\n }\n });\n\n /**\n * The page on which the AcroFormField is placed\n *\n * @name AcroFormField#page\n * @type {number}\n */\n var _page;\n Object.defineProperty(this, \"page\", {\n enumerable: true,\n configurable: true,\n get: function() {\n if (!_page) {\n return undefined;\n }\n return _page;\n },\n set: function(value) {\n _page = value;\n }\n });\n\n /**\n * If set, the user may not change the value of the field. Any associated widget annotations will not interact with the user; that is, they will not respond to mouse clicks or change their appearance in response to mouse motions. This flag is useful for fields whose values are computed or imported from a database.\n *\n * @name AcroFormField#readOnly\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"readOnly\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 1));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 1);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 1);\n }\n }\n });\n\n /**\n * If set, the field shall have a value at the time it is exported by a submitform action (see 12.7.5.2, “Submit-Form Action”).\n *\n * @name AcroFormField#required\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 2));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 2);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 2);\n }\n }\n });\n\n /**\n * If set, the field shall not be exported by a submit-form action (see 12.7.5.2, “Submit-Form Action”)\n *\n * @name AcroFormField#noExport\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"noExport\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 3));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 3);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 3);\n }\n }\n });\n\n var _Q = null;\n Object.defineProperty(this, \"Q\", {\n enumerable: true,\n configurable: false,\n get: function() {\n if (_Q === null) {\n return undefined;\n }\n return _Q;\n },\n set: function(value) {\n if ([0, 1, 2].indexOf(value) !== -1) {\n _Q = value;\n } else {\n throw new Error(\n 'Invalid value \"' + value + '\" for attribute Q supplied.'\n );\n }\n }\n });\n\n /**\n * (Optional; inheritable) A code specifying the form of quadding (justification) that shall be used in displaying the text:\n * 'left', 'center', 'right'\n *\n * @name AcroFormField#textAlign\n * @default 'left'\n * @type {string}\n */\n Object.defineProperty(this, \"textAlign\", {\n get: function() {\n var result;\n switch (_Q) {\n case 0:\n default:\n result = \"left\";\n break;\n case 1:\n result = \"center\";\n break;\n case 2:\n result = \"right\";\n break;\n }\n return result;\n },\n configurable: true,\n enumerable: true,\n set: function(value) {\n switch (value) {\n case \"right\":\n case 2:\n _Q = 2;\n break;\n case \"center\":\n case 1:\n _Q = 1;\n break;\n case \"left\":\n case 0:\n default:\n _Q = 0;\n }\n }\n });\n};\n\ninherit(AcroFormField, AcroFormPDFObject);\n\n/**\n * @class AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormChoiceField = function() {\n AcroFormField.call(this);\n // Field Type = Choice Field\n this.FT = \"/Ch\";\n // options\n this.V = \"()\";\n\n this.fontName = \"zapfdingbats\";\n // Top Index\n var _TI = 0;\n\n Object.defineProperty(this, \"TI\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n /**\n * (Optional) For scrollable list boxes, the top index (the index in the Opt array of the first option visible in the list). Default value: 0.\n *\n * @name AcroFormChoiceField#topIndex\n * @default 0\n * @type {number}\n */\n Object.defineProperty(this, \"topIndex\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _TI;\n },\n set: function(value) {\n _TI = value;\n }\n });\n\n var _Opt = [];\n Object.defineProperty(this, \"Opt\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return arrayToPdfArray(_Opt, this.objId, this.scope);\n },\n set: function(value) {\n _Opt = pdfArrayToStringArray(value);\n }\n });\n\n /**\n * @memberof AcroFormChoiceField\n * @name getOptions\n * @function\n * @instance\n * @returns {array} array of Options\n */\n this.getOptions = function() {\n return _Opt;\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name setOptions\n * @function\n * @instance\n * @param {array} value\n */\n this.setOptions = function(value) {\n _Opt = value;\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name addOption\n * @function\n * @instance\n * @param {string} value\n */\n this.addOption = function(value) {\n value = value || \"\";\n value = value.toString();\n _Opt.push(value);\n if (this.sort) {\n _Opt.sort();\n }\n };\n\n /**\n * @memberof AcroFormChoiceField\n * @name removeOption\n * @function\n * @instance\n * @param {string} value\n * @param {boolean} allEntries (default: false)\n */\n this.removeOption = function(value, allEntries) {\n allEntries = allEntries || false;\n value = value || \"\";\n value = value.toString();\n\n while (_Opt.indexOf(value) !== -1) {\n _Opt.splice(_Opt.indexOf(value), 1);\n if (allEntries === false) {\n break;\n }\n }\n };\n\n /**\n * If set, the field is a combo box; if clear, the field is a list box.\n *\n * @name AcroFormChoiceField#combo\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"combo\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 18));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 18);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 18);\n }\n }\n });\n\n /**\n * If set, the combo box shall include an editable text box as well as a drop-down list; if clear, it shall include only a drop-down list. This flag shall be used only if the Combo flag is set.\n *\n * @name AcroFormChoiceField#edit\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"edit\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 19));\n },\n set: function(value) {\n //PDF 32000-1:2008, page 444\n if (this.combo === true) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 19);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 19);\n }\n }\n }\n });\n\n /**\n * If set, the field’s option items shall be sorted alphabetically. This flag is intended for use by writers, not by readers. Conforming readers shall display the options in the order in which they occur in the Opt array (see Table 231).\n *\n * @name AcroFormChoiceField#sort\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"sort\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 20));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 20);\n _Opt.sort();\n } else {\n this.Ff = clearBitForPdf(this.Ff, 20);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, more than one of the field’s option items may be selected simultaneously; if clear, at most one item shall be selected\n *\n * @name AcroFormChoiceField#multiSelect\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 22));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 22);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 22);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spellchecked. This flag shall not be used unless the Combo and Edit flags are both set.\n *\n * @name AcroFormChoiceField#doNotSpellCheck\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the new value shall be committed as soon as a selection is made (commonly with the pointing device). In this case, supplying a value for a field involves three actions: selecting the field for fill-in, selecting a choice for the fill-in value, and leaving that field, which finalizes or “commits” the data choice and triggers any actions associated with the entry or changing of this data. If this flag is on, then processing does not wait for leaving the field action to occur, but immediately proceeds to the third step.\n * This option enables applications to perform an action once a selection is made, without requiring the user to exit the field. If clear, the new value is not committed until the user exits the field.\n *\n * @name AcroFormChoiceField#commitOnSelChange\n * @default false\n * @type {boolean}\n */\n Object.defineProperty(this, \"commitOnSelChange\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 27));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 27);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 27);\n }\n }\n });\n\n this.hasAppearanceStream = false;\n};\ninherit(AcroFormChoiceField, AcroFormField);\n\n/**\n * @class AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormListBox = function() {\n AcroFormChoiceField.call(this);\n this.fontName = \"helvetica\";\n\n //PDF 32000-1:2008, page 444\n this.combo = false;\n};\ninherit(AcroFormListBox, AcroFormChoiceField);\n\n/**\n * @class AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormComboBox = function() {\n AcroFormListBox.call(this);\n this.combo = true;\n};\ninherit(AcroFormComboBox, AcroFormListBox);\n\n/**\n * @class AcroFormEditBox\n * @extends AcroFormComboBox\n * @extends AcroFormListBox\n * @extends AcroFormChoiceField\n * @extends AcroFormField\n */\nvar AcroFormEditBox = function() {\n AcroFormComboBox.call(this);\n this.edit = true;\n};\ninherit(AcroFormEditBox, AcroFormComboBox);\n\n/**\n * @class AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormButton = function() {\n AcroFormField.call(this);\n this.FT = \"/Btn\";\n\n /**\n * (Radio buttons only) If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. If clear, clicking the selected button deselects it, leaving no button selected.\n *\n * @name AcroFormButton#noToggleToOff\n * @type {boolean}\n */\n Object.defineProperty(this, \"noToggleToOff\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 15));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 15);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 15);\n }\n }\n });\n\n /**\n * If set, the field is a set of radio buttons; if clear, the field is a checkbox. This flag may be set only if the Pushbutton flag is clear.\n *\n * @name AcroFormButton#radio\n * @type {boolean}\n */\n Object.defineProperty(this, \"radio\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 16));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 16);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 16);\n }\n }\n });\n\n /**\n * If set, the field is a pushbutton that does not retain a permanent value.\n *\n * @name AcroFormButton#pushButton\n * @type {boolean}\n */\n Object.defineProperty(this, \"pushButton\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 17));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 17);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 17);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, a group of radio buttons within a radio button field that use the same value for the on state will turn on and off in unison; that is if one is checked, they are all checked. If clear, the buttons are mutually exclusive (the same behavior as HTML radio buttons).\n *\n * @name AcroFormButton#radioIsUnison\n * @type {boolean}\n */\n Object.defineProperty(this, \"radioIsUnison\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n if (Object.keys(_MK).length !== 0) {\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n }\n return undefined;\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n};\ninherit(AcroFormButton, AcroFormField);\n\n/**\n * @class AcroFormPushButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormPushButton = function() {\n AcroFormButton.call(this);\n this.pushButton = true;\n};\ninherit(AcroFormPushButton, AcroFormButton);\n\n/**\n * @class AcroFormRadioButton\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormRadioButton = function() {\n AcroFormButton.call(this);\n this.radio = true;\n this.pushButton = false;\n\n var _Kids = [];\n Object.defineProperty(this, \"Kids\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _Kids;\n },\n set: function(value) {\n if (typeof value !== \"undefined\") {\n _Kids = value;\n } else {\n _Kids = [];\n }\n }\n });\n};\ninherit(AcroFormRadioButton, AcroFormButton);\n\n/**\n * The Child class of a RadioButton (the radioGroup) -> The single Buttons\n *\n * @class AcroFormChildClass\n * @extends AcroFormField\n * @ignore\n */\nvar AcroFormChildClass = function() {\n AcroFormField.call(this);\n\n var _parent;\n Object.defineProperty(this, \"Parent\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _parent;\n },\n set: function(value) {\n _parent = value;\n }\n });\n\n var _optionName;\n Object.defineProperty(this, \"optionName\", {\n enumerable: false,\n configurable: true,\n get: function() {\n return _optionName;\n },\n set: function(value) {\n _optionName = value;\n }\n });\n\n var _MK = {};\n Object.defineProperty(this, \"MK\", {\n enumerable: false,\n configurable: false,\n get: function() {\n var encryptor = function(data) {\n return data;\n };\n if (this.scope) encryptor = this.scope.internal.getEncryptor(this.objId);\n var result = [];\n result.push(\"<<\");\n var key;\n for (key in _MK) {\n result.push(\"/\" + key + \" (\" + pdfEscape(encryptor(_MK[key])) + \")\");\n }\n result.push(\">>\");\n return result.join(\"\\n\");\n },\n set: function(value) {\n if (typeof value === \"object\") {\n _MK = value;\n }\n }\n });\n\n /**\n * From the PDF reference:\n * (Optional, button fields only) The widget annotation's normal caption which shall be displayed when it is not interacting with the user.\n * Unlike the remaining entries listed in this Table which apply only to widget annotations associated with pushbutton fields (see Pushbuttons in 12.7.4.2, \"Button Fields\"), the CA entry may be used with any type of button field, including check boxes (see Check Boxes in 12.7.4.2, \"Button Fields\") and radio buttons (Radio Buttons in 12.7.4.2, \"Button Fields\").\n *\n * - '8' = Cross,\n * - 'l' = Circle,\n * - '' = nothing\n * @name AcroFormButton#caption\n * @type {string}\n */\n Object.defineProperty(this, \"caption\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MK.CA || \"\";\n },\n set: function(value) {\n if (typeof value === \"string\") {\n _MK.CA = value;\n }\n }\n });\n\n var _AS;\n Object.defineProperty(this, \"AS\", {\n enumerable: false,\n configurable: false,\n get: function() {\n return _AS;\n },\n set: function(value) {\n _AS = value;\n }\n });\n\n /**\n * (Required if the appearance dictionary AP contains one or more subdictionaries; PDF 1.2) The annotation's appearance state, which selects the applicable appearance stream from an appearance subdictionary (see Section 12.5.5, \"Appearance Streams\")\n *\n * @name AcroFormButton#appearanceState\n * @type {any}\n */\n Object.defineProperty(this, \"appearanceState\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _AS.substr(1, _AS.length - 1);\n },\n set: function(value) {\n _AS = \"/\" + value;\n }\n });\n this.caption = \"l\";\n this.appearanceState = \"Off\";\n // todo: set AppearanceType as variable that can be set from the\n // outside...\n this._AppearanceType = AcroFormAppearance.RadioButton.Circle;\n // The Default appearanceType is the Circle\n this.appearanceStreamContent = this._AppearanceType.createAppearanceStream(\n this.optionName\n );\n};\ninherit(AcroFormChildClass, AcroFormField);\n\nAcroFormRadioButton.prototype.setAppearance = function(appearance) {\n if (!(\"createAppearanceStream\" in appearance && \"getCA\" in appearance)) {\n throw new Error(\n \"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\"\n );\n }\n for (var objId in this.Kids) {\n if (this.Kids.hasOwnProperty(objId)) {\n var child = this.Kids[objId];\n child.appearanceStreamContent = appearance.createAppearanceStream(\n child.optionName\n );\n child.caption = appearance.getCA();\n }\n }\n};\n\nAcroFormRadioButton.prototype.createOption = function(name) {\n // Create new Child for RadioGroup\n var child = new AcroFormChildClass();\n child.Parent = this;\n child.optionName = name;\n // Add to Parent\n this.Kids.push(child);\n\n addField.call(this.scope, child);\n\n return child;\n};\n\n/**\n * @class AcroFormCheckBox\n * @extends AcroFormButton\n * @extends AcroFormField\n */\nvar AcroFormCheckBox = function() {\n AcroFormButton.call(this);\n\n this.fontName = \"zapfdingbats\";\n this.caption = \"3\";\n this.appearanceState = \"On\";\n this.value = \"On\";\n this.textAlign = \"center\";\n this.appearanceStreamContent = AcroFormAppearance.CheckBox.createAppearanceStream();\n};\ninherit(AcroFormCheckBox, AcroFormButton);\n\n/**\n * @class AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormTextField = function() {\n AcroFormField.call(this);\n this.FT = \"/Tx\";\n\n /**\n * If set, the field may contain multiple lines of text; if clear, the field’s text shall be restricted to a single line.\n *\n * @name AcroFormTextField#multiline\n * @type {boolean}\n */\n Object.defineProperty(this, \"multiline\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 13));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 13);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 13);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the text entered in the field represents the pathname of a file whose contents shall be submitted as the value of the field.\n *\n * @name AcroFormTextField#fileSelect\n * @type {boolean}\n */\n Object.defineProperty(this, \"fileSelect\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 21));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 21);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 21);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, text entered in the field shall not be spell-checked.\n *\n * @name AcroFormTextField#doNotSpellCheck\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotSpellCheck\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 23));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 23);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 23);\n }\n }\n });\n\n /**\n * (PDF 1.4) If set, the field shall not scroll (horizontally for single-line fields, vertically for multiple-line fields) to accommodate more text than fits within its annotation rectangle. Once the field is full, no further text shall be accepted for interactive form filling; for noninteractive form filling, the filler should take care not to add more character than will visibly fit in the defined area.\n *\n * @name AcroFormTextField#doNotScroll\n * @type {boolean}\n */\n Object.defineProperty(this, \"doNotScroll\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 24));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 24);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 24);\n }\n }\n });\n\n /**\n * (PDF 1.5) May be set only if the MaxLen entry is present in the text field dictionary (see Table 229) and if the Multiline, Password, and FileSelect flags are clear. If set, the field shall be automatically divided into as many equally spaced positions, or combs, as the value of MaxLen, and the text is laid out into those combs.\n *\n * @name AcroFormTextField#comb\n * @type {boolean}\n */\n Object.defineProperty(this, \"comb\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 25));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 25);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 25);\n }\n }\n });\n\n /**\n * (PDF 1.5) If set, the value of this field shall be a rich text string (see 12.7.3.4, “Rich Text Strings”). If the field has a value, the RV entry of the field dictionary (Table 222) shall specify the rich text string.\n *\n * @name AcroFormTextField#richText\n * @type {boolean}\n */\n Object.defineProperty(this, \"richText\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 26));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 26);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 26);\n }\n }\n });\n\n var _MaxLen = null;\n Object.defineProperty(this, \"MaxLen\", {\n enumerable: true,\n configurable: false,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n _MaxLen = value;\n }\n });\n\n /**\n * (Optional; inheritable) The maximum length of the field’s text, in characters.\n *\n * @name AcroFormTextField#maxLength\n * @type {number}\n */\n Object.defineProperty(this, \"maxLength\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return _MaxLen;\n },\n set: function(value) {\n if (Number.isInteger(value)) {\n _MaxLen = value;\n }\n }\n });\n\n Object.defineProperty(this, \"hasAppearanceStream\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return this.V || this.DV;\n }\n });\n};\ninherit(AcroFormTextField, AcroFormField);\n\n/**\n * @class AcroFormPasswordField\n * @extends AcroFormTextField\n * @extends AcroFormField\n */\nvar AcroFormPasswordField = function() {\n AcroFormTextField.call(this);\n\n /**\n * If set, the field is intended for entering a secure password that should not be echoed visibly to the screen. Characters typed from the keyboard shall instead be echoed in some unreadable form, such as asterisks or bullet characters.\n * NOTE To protect password confidentiality, readers should never store the value of the text field in the PDF file if this flag is set.\n *\n * @name AcroFormTextField#password\n * @type {boolean}\n */\n Object.defineProperty(this, \"password\", {\n enumerable: true,\n configurable: true,\n get: function() {\n return Boolean(getBitForPdf(this.Ff, 14));\n },\n set: function(value) {\n if (Boolean(value) === true) {\n this.Ff = setBitForPdf(this.Ff, 14);\n } else {\n this.Ff = clearBitForPdf(this.Ff, 14);\n }\n }\n });\n this.password = true;\n};\ninherit(AcroFormPasswordField, AcroFormTextField);\n\n// Contains Methods for creating standard appearances\nvar AcroFormAppearance = {\n CheckBox: {\n createAppearanceStream: function() {\n var appearance = {\n N: {\n On: AcroFormAppearance.CheckBox.YesNormal\n },\n D: {\n On: AcroFormAppearance.CheckBox.YesPushDown,\n Off: AcroFormAppearance.CheckBox.OffPushDown\n }\n };\n\n return appearance;\n },\n /**\n * Returns the standard On Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"BMC\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(\"BT\");\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n stream.push(\"EMC\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var stream = [];\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var calcRes = calculateX(formObject, formObject.caption);\n stream.push(\"1 g\");\n stream.push(\"0 0 \" + f2(width) + \" \" + f2(height) + \" re\");\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\"0 0 1 rg\");\n stream.push(\"0 0 \" + f2(width - 1) + \" \" + f2(height - 1) + \" re\");\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(\"0 g\");\n stream.push(\"BT\");\n stream.push(\n \"/\" + fontKey + \" \" + f2(calcRes.fontSize) + \" Tf \" + encodedColor\n );\n stream.push(calcRes.text);\n stream.push(\"ET\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n\n /**\n * Returns the standard Off Appearance for a CheckBox\n *\n * @returns {AcroFormXObject}\n */\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n RadioButton: {\n Circle: {\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Circle.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Circle.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Circle.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"l\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n // Make the Radius of the Circle relative to min(height, width) of formObject\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n var c = AcroFormAppearance.internal.Bezier_C;\n var DotRadiusBezier = Number((DotRadius * c).toFixed(5));\n /*\n * The Following is a Circle created with Bezier-Curves.\n */\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n DotRadiusBezier +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadiusBezier +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n var dc = Number(\n (DotRadius * AcroFormAppearance.internal.Bezier_C).toFixed(5)\n );\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n stream.push(\"0 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(DotRadius + \" 0 m\");\n stream.push(\n \"\" +\n DotRadius +\n \" \" +\n dc +\n \" \" +\n dc +\n \" \" +\n DotRadius +\n \" 0 \" +\n DotRadius +\n \" c\"\n );\n stream.push(\n \"-\" +\n dc +\n \" \" +\n DotRadius +\n \" -\" +\n DotRadius +\n \" \" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\n \"-\" +\n DotRadius +\n \" -\" +\n dc +\n \" -\" +\n dc +\n \" -\" +\n DotRadius +\n \" 0 -\" +\n DotRadius +\n \" c\"\n );\n stream.push(\n dc +\n \" -\" +\n DotRadius +\n \" \" +\n DotRadius +\n \" -\" +\n dc +\n \" \" +\n DotRadius +\n \" 0 c\"\n );\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var DotRadius =\n AcroFormAppearance.internal.getWidth(formObject) <=\n AcroFormAppearance.internal.getHeight(formObject)\n ? AcroFormAppearance.internal.getWidth(formObject) / 4\n : AcroFormAppearance.internal.getHeight(formObject) / 4;\n // The Borderpadding...\n DotRadius = Number((DotRadius * 0.9).toFixed(5));\n // Save results for later use; no need to waste\n // processor ticks on doing math\n var k = Number((DotRadius * 2).toFixed(5));\n var kc = Number((k * AcroFormAppearance.internal.Bezier_C).toFixed(5));\n\n stream.push(\"0.749023 g\");\n stream.push(\"q\");\n stream.push(\n \"1 0 0 1 \" +\n f5(AcroFormAppearance.internal.getWidth(formObject) / 2) +\n \" \" +\n f5(AcroFormAppearance.internal.getHeight(formObject) / 2) +\n \" cm\"\n );\n stream.push(k + \" 0 m\");\n stream.push(k + \" \" + kc + \" \" + kc + \" \" + k + \" 0 \" + k + \" c\");\n stream.push(\n \"-\" + kc + \" \" + k + \" -\" + k + \" \" + kc + \" -\" + k + \" 0 c\"\n );\n stream.push(\n \"-\" + k + \" -\" + kc + \" -\" + kc + \" -\" + k + \" 0 -\" + k + \" c\"\n );\n stream.push(kc + \" -\" + k + \" \" + k + \" -\" + kc + \" \" + k + \" 0 c\");\n stream.push(\"f\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n },\n\n Cross: {\n /**\n * Creates the Actual AppearanceDictionary-References\n *\n * @param {string} name\n * @returns {Object}\n * @ignore\n */\n createAppearanceStream: function(name) {\n var appearanceStreamContent = {\n D: {\n Off: AcroFormAppearance.RadioButton.Cross.OffPushDown\n },\n N: {}\n };\n appearanceStreamContent.N[name] =\n AcroFormAppearance.RadioButton.Cross.YesNormal;\n appearanceStreamContent.D[name] =\n AcroFormAppearance.RadioButton.Cross.YesPushDown;\n return appearanceStreamContent;\n },\n getCA: function() {\n return \"8\";\n },\n\n YesNormal: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n YesPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var cross = AcroFormAppearance.internal.calculateCross(formObject);\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n stream.push(\"q\");\n stream.push(\n \"1 1 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject) - 2) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject) - 2) +\n \" re\"\n );\n stream.push(\"W\");\n stream.push(\"n\");\n stream.push(f2(cross.x1.x) + \" \" + f2(cross.x1.y) + \" m\");\n stream.push(f2(cross.x2.x) + \" \" + f2(cross.x2.y) + \" l\");\n stream.push(f2(cross.x4.x) + \" \" + f2(cross.x4.y) + \" m\");\n stream.push(f2(cross.x3.x) + \" \" + f2(cross.x3.y) + \" l\");\n stream.push(\"s\");\n stream.push(\"Q\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n },\n OffPushDown: function(formObject) {\n var xobj = createFormXObject(formObject);\n xobj.scope = formObject.scope;\n var stream = [];\n stream.push(\"0.749023 g\");\n stream.push(\n \"0 0 \" +\n f2(AcroFormAppearance.internal.getWidth(formObject)) +\n \" \" +\n f2(AcroFormAppearance.internal.getHeight(formObject)) +\n \" re\"\n );\n stream.push(\"f\");\n xobj.stream = stream.join(\"\\n\");\n return xobj;\n }\n }\n },\n\n /**\n * Returns the standard Appearance\n *\n * @returns {AcroFormXObject}\n */\n createDefaultAppearanceStream: function(formObject) {\n // Set Helvetica to Standard Font (size: auto)\n // Color: Black\n var fontKey = formObject.scope.internal.getFont(\n formObject.fontName,\n formObject.fontStyle\n ).id;\n var encodedColor = formObject.scope.__private__.encodeColorString(\n formObject.color\n );\n var fontSize = formObject.fontSize;\n var result = \"/\" + fontKey + \" \" + fontSize + \" Tf \" + encodedColor;\n return result;\n }\n};\n\nAcroFormAppearance.internal = {\n Bezier_C: 0.551915024494,\n\n calculateCross: function(formObject) {\n var width = AcroFormAppearance.internal.getWidth(formObject);\n var height = AcroFormAppearance.internal.getHeight(formObject);\n var a = Math.min(width, height);\n\n var cross = {\n x1: {\n // upperLeft\n x: (width - a) / 2,\n y: (height - a) / 2 + a // height - borderPadding\n },\n x2: {\n // lowerRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 // borderPadding\n },\n x3: {\n // lowerLeft\n x: (width - a) / 2,\n y: (height - a) / 2 // borderPadding\n },\n x4: {\n // upperRight\n x: (width - a) / 2 + a,\n y: (height - a) / 2 + a // height - borderPadding\n }\n };\n\n return cross;\n }\n};\nAcroFormAppearance.internal.getWidth = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[2]);\n }\n return result;\n};\nAcroFormAppearance.internal.getHeight = function(formObject) {\n var result = 0;\n if (typeof formObject === \"object\") {\n result = scale(formObject.Rect[3]);\n }\n return result;\n};\n\n// Public:\n\n/**\n * Add an AcroForm-Field to the jsPDF-instance\n *\n * @name addField\n * @function\n * @instance\n * @param {Object} fieldObject\n * @returns {jsPDF}\n */\nvar addField = (jsPDFAPI.addField = function(fieldObject) {\n initializeAcroForm(this, fieldObject);\n\n if (fieldObject instanceof AcroFormField) {\n putForm(fieldObject);\n } else {\n throw new Error(\"Invalid argument passed to jsPDF.addField.\");\n }\n fieldObject.page = fieldObject.scope.internal.getCurrentPageInfo().pageNumber;\n return this;\n});\n\njsPDFAPI.AcroFormChoiceField = AcroFormChoiceField;\njsPDFAPI.AcroFormListBox = AcroFormListBox;\njsPDFAPI.AcroFormComboBox = AcroFormComboBox;\njsPDFAPI.AcroFormEditBox = AcroFormEditBox;\njsPDFAPI.AcroFormButton = AcroFormButton;\njsPDFAPI.AcroFormPushButton = AcroFormPushButton;\njsPDFAPI.AcroFormRadioButton = AcroFormRadioButton;\njsPDFAPI.AcroFormCheckBox = AcroFormCheckBox;\njsPDFAPI.AcroFormTextField = AcroFormTextField;\njsPDFAPI.AcroFormPasswordField = AcroFormPasswordField;\njsPDFAPI.AcroFormAppearance = AcroFormAppearance;\n\njsPDFAPI.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\njsPDF.AcroForm = {\n ChoiceField: AcroFormChoiceField,\n ListBox: AcroFormListBox,\n ComboBox: AcroFormComboBox,\n EditBox: AcroFormEditBox,\n Button: AcroFormButton,\n PushButton: AcroFormPushButton,\n RadioButton: AcroFormRadioButton,\n CheckBox: AcroFormCheckBox,\n TextField: AcroFormTextField,\n PasswordField: AcroFormPasswordField,\n Appearance: AcroFormAppearance\n};\n\nvar AcroForm = jsPDF.AcroForm;\n\nexport {\n AcroForm,\n AcroFormChoiceField,\n AcroFormListBox,\n AcroFormComboBox,\n AcroFormEditBox,\n AcroFormButton,\n AcroFormPushButton,\n AcroFormRadioButton,\n AcroFormCheckBox,\n AcroFormTextField,\n AcroFormPasswordField,\n AcroFormAppearance\n};\n","function toLookup(arr) {\n return arr.reduce(function(lookup, name, index) {\n lookup[name] = index;\n\n return lookup;\n }, {});\n}\n\nvar fontStyleOrder = {\n italic: [\"italic\", \"oblique\", \"normal\"],\n oblique: [\"oblique\", \"italic\", \"normal\"],\n normal: [\"normal\", \"oblique\", \"italic\"]\n};\n\nvar fontStretchOrder = [\n \"ultra-condensed\",\n \"extra-condensed\",\n \"condensed\",\n \"semi-condensed\",\n \"normal\",\n \"semi-expanded\",\n \"expanded\",\n \"extra-expanded\",\n \"ultra-expanded\"\n];\n\n// For a given font-stretch value, we need to know where to start our search\n// from in the fontStretchOrder list.\nvar fontStretchLookup = toLookup(fontStretchOrder);\n\nvar fontWeights = [100, 200, 300, 400, 500, 600, 700, 800, 900];\nvar fontWeightsLookup = toLookup(fontWeights);\n\nfunction normalizeFontStretch(stretch) {\n stretch = stretch || \"normal\";\n\n return typeof fontStretchLookup[stretch] === \"number\" ? stretch : \"normal\";\n}\n\nfunction normalizeFontStyle(style) {\n style = style || \"normal\";\n\n return fontStyleOrder[style] ? style : \"normal\";\n}\n\nfunction normalizeFontWeight(weight) {\n if (!weight) {\n return 400;\n }\n\n if (typeof weight === \"number\") {\n // Ignore values which aren't valid font-weights.\n return weight >= 100 && weight <= 900 && weight % 100 === 0 ? weight : 400;\n }\n\n if (/^\\d00$/.test(weight)) {\n return parseInt(weight);\n }\n\n switch (weight) {\n case \"bold\":\n return 700;\n\n case \"normal\":\n default:\n return 400;\n }\n}\n\nexport function normalizeFontFace(fontFace) {\n var family = fontFace.family.replace(/\"|'/g, \"\").toLowerCase();\n\n var style = normalizeFontStyle(fontFace.style);\n var weight = normalizeFontWeight(fontFace.weight);\n var stretch = normalizeFontStretch(fontFace.stretch);\n\n return {\n family: family,\n style: style,\n weight: weight,\n stretch: stretch,\n src: fontFace.src || [],\n\n // The ref property maps this font-face to the font\n // added by the .addFont() method.\n ref: fontFace.ref || {\n name: family,\n style: [stretch, style, weight].join(\" \")\n }\n };\n}\n\n/**\n * Turns a list of font-faces into a map, for easier lookup when resolving\n * fonts.\n * @private\n */\nexport function buildFontFaceMap(fontFaces) {\n var map = {};\n\n for (var i = 0; i < fontFaces.length; ++i) {\n var normalized = normalizeFontFace(fontFaces[i]);\n\n var name = normalized.family;\n var stretch = normalized.stretch;\n var style = normalized.style;\n var weight = normalized.weight;\n\n map[name] = map[name] || {};\n\n map[name][stretch] = map[name][stretch] || {};\n map[name][stretch][style] = map[name][stretch][style] || {};\n map[name][stretch][style][weight] = normalized;\n }\n\n return map;\n}\n\n/**\n * Searches a map of stretches, weights, etc. in the given direction and\n * then, if no match has been found, in the opposite directions.\n *\n * @param {Object.} matchingSet A map of the various font variations.\n * @param {any[]} order The order of the different variations\n * @param {number} pivot The starting point of the search in the order list.\n * @param {number} dir The initial direction of the search (desc = -1, asc = 1)\n * @private\n */\n\nfunction searchFromPivot(matchingSet, order, pivot, dir) {\n var i;\n\n for (i = pivot; i >= 0 && i < order.length; i += dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n\n for (i = pivot; i >= 0 && i < order.length; i -= dir) {\n if (matchingSet[order[i]]) {\n return matchingSet[order[i]];\n }\n }\n}\n\nfunction resolveFontStretch(stretch, matchingSet) {\n if (matchingSet[stretch]) {\n return matchingSet[stretch];\n }\n\n var pivot = fontStretchLookup[stretch];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = pivot <= fontStretchLookup[\"normal\"] ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontStretchOrder, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-stretch value for \" + stretch\n );\n }\n\n return match;\n}\n\nfunction resolveFontStyle(fontStyle, matchingSet) {\n if (matchingSet[fontStyle]) {\n return matchingSet[fontStyle];\n }\n\n var ordering = fontStyleOrder[fontStyle];\n\n for (var i = 0; i < ordering.length; ++i) {\n if (matchingSet[ordering[i]]) {\n return matchingSet[ordering[i]];\n }\n }\n\n // Since a font-family cannot exist without having at least one style value\n // we should never reach this point.\n throw new Error(\"Could not find a matching font-style for \" + fontStyle);\n}\n\nfunction resolveFontWeight(weight, matchingSet) {\n if (matchingSet[weight]) {\n return matchingSet[weight];\n }\n\n if (weight === 400 && matchingSet[500]) {\n return matchingSet[500];\n }\n\n if (weight === 500 && matchingSet[400]) {\n return matchingSet[400];\n }\n\n var pivot = fontWeightsLookup[weight];\n\n // If the font-stretch value is normal or more condensed, we want to\n // start with a descending search, otherwise we should do ascending.\n var dir = weight < 400 ? -1 : 1;\n var match = searchFromPivot(matchingSet, fontWeights, pivot, dir);\n\n if (!match) {\n // Since a font-family cannot exist without having at least one stretch value\n // we should never reach this point.\n throw new Error(\n \"Could not find a matching font-weight for value \" + weight\n );\n }\n\n return match;\n}\n\nvar defaultGenericFontFamilies = {\n \"sans-serif\": \"helvetica\",\n fixed: \"courier\",\n monospace: \"courier\",\n terminal: \"courier\",\n cursive: \"times\",\n fantasy: \"times\",\n serif: \"times\"\n};\n\nvar systemFonts = {\n caption: \"times\",\n icon: \"times\",\n menu: \"times\",\n \"message-box\": \"times\",\n \"small-caption\": \"times\",\n \"status-bar\": \"times\"\n};\n\nfunction ruleToString(rule) {\n return [rule.stretch, rule.style, rule.weight, rule.family].join(\" \");\n}\n\nexport function resolveFontFace(fontFaceMap, rules, opts) {\n opts = opts || {};\n\n var defaultFontFamily = opts.defaultFontFamily || \"times\";\n var genericFontFamilies = Object.assign(\n {},\n defaultGenericFontFamilies,\n opts.genericFontFamilies || {}\n );\n\n var rule = null;\n var matches = null;\n\n for (var i = 0; i < rules.length; ++i) {\n rule = normalizeFontFace(rules[i]);\n\n if (genericFontFamilies[rule.family]) {\n rule.family = genericFontFamilies[rule.family];\n }\n\n if (fontFaceMap.hasOwnProperty(rule.family)) {\n matches = fontFaceMap[rule.family];\n\n break;\n }\n }\n\n // Always fallback to a known font family.\n matches = matches || fontFaceMap[defaultFontFamily];\n\n if (!matches) {\n // At this point we should definitiely have a font family, but if we\n // don't there is something wrong with our configuration\n throw new Error(\n \"Could not find a font-family for the rule '\" +\n ruleToString(rule) +\n \"' and default family '\" +\n defaultFontFamily +\n \"'.\"\n );\n }\n\n matches = resolveFontStretch(rule.stretch, matches);\n matches = resolveFontStyle(rule.style, matches);\n matches = resolveFontWeight(rule.weight, matches);\n\n if (!matches) {\n // We should've fount\n throw new Error(\n \"Failed to resolve a font for the rule '\" + ruleToString(rule) + \"'.\"\n );\n }\n\n return matches;\n}\n\n/**\n * Builds a style id for use with the addFont() method.\n * @param {FontFace} font\n * @private\n */\nexport function toStyleName(font) {\n return [font.weight, font.style, font.stretch].join(\" \");\n}\n\nfunction eatWhiteSpace(input) {\n return input.trimLeft();\n}\n\nfunction parseQuotedFontFamily(input, quote) {\n var index = 0;\n\n while (index < input.length) {\n var current = input.charAt(index);\n\n if (current === quote) {\n return [input.substring(0, index), input.substring(index + 1)];\n }\n\n index += 1;\n }\n\n // Unexpected end of input\n return null;\n}\n\nfunction parseNonQuotedFontFamily(input) {\n // It implements part of the identifier parser here: https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n //\n // NOTE: This parser pretty much ignores escaped identifiers and that there is a thing called unicode.\n //\n // Breakdown of regexp:\n // -[a-z_] - when identifier starts with a hyphen, you're not allowed to have another hyphen or a digit\n // [a-z_] - allow a-z and underscore at beginning of input\n // [a-z0-9_-]* - after that, anything goes\n var match = input.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);\n\n // non quoted value contains illegal characters\n if (match === null) {\n return null;\n }\n\n return [match[0], input.substring(match[0].length)];\n}\n\nvar defaultFont = [\"times\"];\n\nexport function parseFontFamily(input) {\n var result = [];\n var ch, parsed;\n var remaining = input.trim();\n\n if (remaining === \"\") {\n return defaultFont;\n }\n\n if (remaining in systemFonts) {\n return [systemFonts[remaining]];\n }\n\n while (remaining !== \"\") {\n parsed = null;\n remaining = eatWhiteSpace(remaining);\n ch = remaining.charAt(0);\n\n switch (ch) {\n case '\"':\n case \"'\":\n parsed = parseQuotedFontFamily(remaining.substring(1), ch);\n break;\n\n default:\n parsed = parseNonQuotedFontFamily(remaining);\n break;\n }\n\n if (parsed === null) {\n return defaultFont;\n }\n\n result.push(parsed[0]);\n\n remaining = eatWhiteSpace(parsed[1]);\n\n // We expect end of input or a comma separator here\n if (remaining !== \"\" && remaining.charAt(0) !== \",\") {\n return defaultFont;\n }\n\n remaining = remaining.replace(/^,/, \"\");\n }\n\n return result;\n}\n","/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n/**\n * @name addImage\n * @module\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob, btoa } from \"../libs/AtobBtoa.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namespace = \"addImage_\";\n jsPDFAPI.__addimage__ = {};\n\n var UNKNOWN = \"UNKNOWN\";\n\n // Heuristic selection of a good batch for large array .apply. Not limiting make the call overflow.\n // With too small batch iteration will be slow as more calls are made,\n // higher values cause larger and slower garbage collection.\n var ARRAY_APPLY_BATCH = 8192;\n\n var imageFileTypeHeaders = {\n PNG: [[0x89, 0x50, 0x4e, 0x47]],\n TIFF: [\n [0x4d, 0x4d, 0x00, 0x2a], //Motorola\n [0x49, 0x49, 0x2a, 0x00] //Intel\n ],\n JPEG: [\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe0,\n undefined,\n undefined,\n 0x4a,\n 0x46,\n 0x49,\n 0x46,\n 0x00\n ], //JFIF\n [\n 0xff,\n 0xd8,\n 0xff,\n 0xe1,\n undefined,\n undefined,\n 0x45,\n 0x78,\n 0x69,\n 0x66,\n 0x00,\n 0x00\n ], //Exif\n [0xff, 0xd8, 0xff, 0xdb], //JPEG RAW\n [0xff, 0xd8, 0xff, 0xee] //EXIF RAW\n ],\n JPEG2000: [[0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20]],\n GIF87a: [[0x47, 0x49, 0x46, 0x38, 0x37, 0x61]],\n GIF89a: [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61]],\n WEBP: [\n [\n 0x52,\n 0x49,\n 0x46,\n 0x46,\n undefined,\n undefined,\n undefined,\n undefined,\n 0x57,\n 0x45,\n 0x42,\n 0x50\n ]\n ],\n BMP: [\n [0x42, 0x4d], //BM - Windows 3.1x, 95, NT, ... etc.\n [0x42, 0x41], //BA - OS/2 struct bitmap array\n [0x43, 0x49], //CI - OS/2 struct color icon\n [0x43, 0x50], //CP - OS/2 const color pointer\n [0x49, 0x43], //IC - OS/2 struct icon\n [0x50, 0x54] //PT - OS/2 pointer\n ]\n };\n\n /**\n * Recognize filetype of Image by magic-bytes\n *\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n *\n * @name getImageFileTypeByImageData\n * @public\n * @function\n * @param {string|arraybuffer} imageData imageData as binary String or arraybuffer\n * @param {string} format format of file if filetype-recognition fails, e.g. 'JPEG'\n *\n * @returns {string} filetype of Image\n */\n var getImageFileTypeByImageData = (jsPDFAPI.__addimage__.getImageFileTypeByImageData = function(\n imageData,\n fallbackFormat\n ) {\n fallbackFormat = fallbackFormat || UNKNOWN;\n var i;\n var j;\n var result = UNKNOWN;\n var headerSchemata;\n var compareResult;\n var fileType;\n\n if (\n fallbackFormat === \"RGBA\" ||\n (imageData.data !== undefined &&\n imageData.data instanceof Uint8ClampedArray &&\n \"height\" in imageData &&\n \"width\" in imageData)\n ) {\n return \"RGBA\";\n }\n\n if (isArrayBufferView(imageData)) {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData[j]) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n } else {\n for (fileType in imageFileTypeHeaders) {\n headerSchemata = imageFileTypeHeaders[fileType];\n for (i = 0; i < headerSchemata.length; i += 1) {\n compareResult = true;\n for (j = 0; j < headerSchemata[i].length; j += 1) {\n if (headerSchemata[i][j] === undefined) {\n continue;\n }\n if (headerSchemata[i][j] !== imageData.charCodeAt(j)) {\n compareResult = false;\n break;\n }\n }\n if (compareResult === true) {\n result = fileType;\n break;\n }\n }\n }\n }\n\n if (result === UNKNOWN && fallbackFormat !== UNKNOWN) {\n result = fallbackFormat;\n }\n return result;\n });\n\n // Image functionality ported from pdf.js\n var putImage = function(image) {\n var out = this.internal.write;\n var putStream = this.internal.putStream;\n var getFilters = this.internal.getFilters;\n\n var filter = getFilters();\n while (filter.indexOf(\"FlateEncode\") !== -1) {\n filter.splice(filter.indexOf(\"FlateEncode\"), 1);\n }\n\n image.objectId = this.internal.newObject();\n\n var additionalKeyValues = [];\n additionalKeyValues.push({ key: \"Type\", value: \"/XObject\" });\n additionalKeyValues.push({ key: \"Subtype\", value: \"/Image\" });\n additionalKeyValues.push({ key: \"Width\", value: image.width });\n additionalKeyValues.push({ key: \"Height\", value: image.height });\n\n if (image.colorSpace === color_spaces.INDEXED) {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value:\n \"[/Indexed /DeviceRGB \" +\n // if an indexed png defines more than one colour with transparency, we've created a sMask\n (image.palette.length / 3 - 1) +\n \" \" +\n (\"sMask\" in image && typeof image.sMask !== \"undefined\"\n ? image.objectId + 2\n : image.objectId + 1) +\n \" 0 R]\"\n });\n } else {\n additionalKeyValues.push({\n key: \"ColorSpace\",\n value: \"/\" + image.colorSpace\n });\n if (image.colorSpace === color_spaces.DEVICE_CMYK) {\n additionalKeyValues.push({ key: \"Decode\", value: \"[1 0 1 0 1 0 1 0]\" });\n }\n }\n additionalKeyValues.push({\n key: \"BitsPerComponent\",\n value: image.bitsPerComponent\n });\n if (\n \"decodeParameters\" in image &&\n typeof image.decodeParameters !== \"undefined\"\n ) {\n additionalKeyValues.push({\n key: \"DecodeParms\",\n value: \"<<\" + image.decodeParameters + \">>\"\n });\n }\n if (\"transparency\" in image && Array.isArray(image.transparency)) {\n var transparency = \"\",\n i = 0,\n len = image.transparency.length;\n for (; i < len; i++)\n transparency +=\n image.transparency[i] + \" \" + image.transparency[i] + \" \";\n\n additionalKeyValues.push({\n key: \"Mask\",\n value: \"[\" + transparency + \"]\"\n });\n }\n if (typeof image.sMask !== \"undefined\") {\n additionalKeyValues.push({\n key: \"SMask\",\n value: image.objectId + 1 + \" 0 R\"\n });\n }\n\n var alreadyAppliedFilters =\n typeof image.filter !== \"undefined\" ? [\"/\" + image.filter] : undefined;\n\n putStream({\n data: image.data,\n additionalKeyValues: additionalKeyValues,\n alreadyAppliedFilters: alreadyAppliedFilters,\n objectId: image.objectId\n });\n\n out(\"endobj\");\n\n // Soft mask\n if (\"sMask\" in image && typeof image.sMask !== \"undefined\") {\n var decodeParameters =\n \"/Predictor \" +\n image.predictor +\n \" /Colors 1 /BitsPerComponent \" +\n image.bitsPerComponent +\n \" /Columns \" +\n image.width;\n var sMask = {\n width: image.width,\n height: image.height,\n colorSpace: \"DeviceGray\",\n bitsPerComponent: image.bitsPerComponent,\n decodeParameters: decodeParameters,\n data: image.sMask\n };\n if (\"filter\" in image) {\n sMask.filter = image.filter;\n }\n putImage.call(this, sMask);\n }\n\n //Palette\n if (image.colorSpace === color_spaces.INDEXED) {\n var objId = this.internal.newObject();\n //out('<< /Filter / ' + img['f'] +' /Length ' + img['pal'].length + '>>');\n //putStream(zlib.compress(img['pal']));\n putStream({\n data: arrayBufferToBinaryString(new Uint8Array(image.palette)),\n objectId: objId\n });\n out(\"endobj\");\n }\n };\n var putResourcesCallback = function() {\n var images = this.internal.collections[namespace + \"images\"];\n for (var i in images) {\n putImage.call(this, images[i]);\n }\n };\n var putXObjectsDictCallback = function() {\n var images = this.internal.collections[namespace + \"images\"],\n out = this.internal.write,\n image;\n for (var i in images) {\n image = images[i];\n out(\"/I\" + image.index, image.objectId, \"0\", \"R\");\n }\n };\n\n var checkCompressValue = function(value) {\n if (value && typeof value === \"string\") value = value.toUpperCase();\n return value in jsPDFAPI.image_compression ? value : image_compression.NONE;\n };\n\n var initialize = function() {\n if (!this.internal.collections[namespace + \"images\"]) {\n this.internal.collections[namespace + \"images\"] = {};\n this.internal.events.subscribe(\"putResources\", putResourcesCallback);\n this.internal.events.subscribe(\"putXobjectDict\", putXObjectsDictCallback);\n }\n };\n\n var getImages = function() {\n var images = this.internal.collections[namespace + \"images\"];\n initialize.call(this);\n return images;\n };\n var getImageIndex = function() {\n return Object.keys(this.internal.collections[namespace + \"images\"]).length;\n };\n var notDefined = function(value) {\n return typeof value === \"undefined\" || value === null || value.length === 0;\n };\n var generateAliasFromImageData = function(imageData) {\n if (typeof imageData === \"string\" || isArrayBufferView(imageData)) {\n return sHashCode(imageData);\n } else if (isArrayBufferView(imageData.data)) {\n return sHashCode(imageData.data);\n }\n\n return null;\n };\n\n var isImageTypeSupported = function(type) {\n return typeof jsPDFAPI[\"process\" + type.toUpperCase()] === \"function\";\n };\n\n var isDOMElement = function(object) {\n return typeof object === \"object\" && object.nodeType === 1;\n };\n\n var getImageDataFromElement = function(element, format) {\n //if element is an image which uses data url definition, just return the dataurl\n if (element.nodeName === \"IMG\" && element.hasAttribute(\"src\")) {\n var src = \"\" + element.getAttribute(\"src\");\n\n //is base64 encoded dataUrl, directly process it\n if (src.indexOf(\"data:image/\") === 0) {\n return atob(\n unescape(src)\n .split(\"base64,\")\n .pop()\n );\n }\n\n //it is probably an url, try to load it\n var tmpImageData = jsPDFAPI.loadFile(src, true);\n if (tmpImageData !== undefined) {\n return tmpImageData;\n }\n }\n\n if (element.nodeName === \"CANVAS\") {\n if (element.width === 0 || element.height === 0) {\n throw new Error(\n \"Given canvas must have data. Canvas width: \" +\n element.width +\n \", height: \" +\n element.height\n );\n }\n var mimeType;\n switch (format) {\n case \"PNG\":\n mimeType = \"image/png\";\n break;\n case \"WEBP\":\n mimeType = \"image/webp\";\n break;\n case \"JPEG\":\n case \"JPG\":\n default:\n mimeType = \"image/jpeg\";\n break;\n }\n return atob(\n element\n .toDataURL(mimeType, 1.0)\n .split(\"base64,\")\n .pop()\n );\n }\n };\n\n var checkImagesForAlias = function(alias) {\n var images = this.internal.collections[namespace + \"images\"];\n if (images) {\n for (var e in images) {\n if (alias === images[e].alias) {\n return images[e];\n }\n }\n }\n };\n\n var determineWidthAndHeight = function(width, height, image) {\n if (!width && !height) {\n width = -96;\n height = -96;\n }\n if (width < 0) {\n width = (-1 * image.width * 72) / width / this.internal.scaleFactor;\n }\n if (height < 0) {\n height = (-1 * image.height * 72) / height / this.internal.scaleFactor;\n }\n if (width === 0) {\n width = (height * image.width) / image.height;\n }\n if (height === 0) {\n height = (width * image.height) / image.width;\n }\n\n return [width, height];\n };\n\n var writeImageToPDF = function(x, y, width, height, image, rotation) {\n var dims = determineWidthAndHeight.call(this, width, height, image),\n coord = this.internal.getCoordinateString,\n vcoord = this.internal.getVerticalCoordinateString;\n\n var images = getImages.call(this);\n\n width = dims[0];\n height = dims[1];\n images[image.index] = image;\n\n if (rotation) {\n rotation *= Math.PI / 180;\n var c = Math.cos(rotation);\n var s = Math.sin(rotation);\n //like in pdf Reference do it 4 digits instead of 2\n var f4 = function(number) {\n return number.toFixed(4);\n };\n var rotationTransformationMatrix = [\n f4(c),\n f4(s),\n f4(s * -1),\n f4(c),\n 0,\n 0,\n \"cm\"\n ];\n }\n this.internal.write(\"q\"); //Save graphics state\n if (rotation) {\n this.internal.write(\n [1, \"0\", \"0\", 1, coord(x), vcoord(y + height), \"cm\"].join(\" \")\n ); //Translate\n this.internal.write(rotationTransformationMatrix.join(\" \")); //Rotate\n this.internal.write(\n [coord(width), \"0\", \"0\", coord(height), \"0\", \"0\", \"cm\"].join(\" \")\n ); //Scale\n } else {\n this.internal.write(\n [\n coord(width),\n \"0\",\n \"0\",\n coord(height),\n coord(x),\n vcoord(y + height),\n \"cm\"\n ].join(\" \")\n ); //Translate and Scale\n }\n\n if (this.isAdvancedAPI()) {\n // draw image bottom up when in \"advanced\" API mode\n this.internal.write([1, 0, 0, -1, 0, 0, \"cm\"].join(\" \"));\n }\n\n this.internal.write(\"/I\" + image.index + \" Do\"); //Paint Image\n this.internal.write(\"Q\"); //Restore graphics state\n };\n\n /**\n * COLOR SPACES\n */\n var color_spaces = (jsPDFAPI.color_spaces = {\n DEVICE_RGB: \"DeviceRGB\",\n DEVICE_GRAY: \"DeviceGray\",\n DEVICE_CMYK: \"DeviceCMYK\",\n CAL_GREY: \"CalGray\",\n CAL_RGB: \"CalRGB\",\n LAB: \"Lab\",\n ICC_BASED: \"ICCBased\",\n INDEXED: \"Indexed\",\n PATTERN: \"Pattern\",\n SEPARATION: \"Separation\",\n DEVICE_N: \"DeviceN\"\n });\n\n /**\n * DECODE METHODS\n */\n jsPDFAPI.decode = {\n DCT_DECODE: \"DCTDecode\",\n FLATE_DECODE: \"FlateDecode\",\n LZW_DECODE: \"LZWDecode\",\n JPX_DECODE: \"JPXDecode\",\n JBIG2_DECODE: \"JBIG2Decode\",\n ASCII85_DECODE: \"ASCII85Decode\",\n ASCII_HEX_DECODE: \"ASCIIHexDecode\",\n RUN_LENGTH_DECODE: \"RunLengthDecode\",\n CCITT_FAX_DECODE: \"CCITTFaxDecode\"\n };\n\n /**\n * IMAGE COMPRESSION TYPES\n */\n var image_compression = (jsPDFAPI.image_compression = {\n NONE: \"NONE\",\n FAST: \"FAST\",\n MEDIUM: \"MEDIUM\",\n SLOW: \"SLOW\"\n });\n\n /**\n * @name sHashCode\n * @function\n * @param {string} data\n * @returns {string}\n */\n var sHashCode = (jsPDFAPI.__addimage__.sHashCode = function(data) {\n var hash = 0,\n i,\n len;\n\n if (typeof data === \"string\") {\n len = data.length;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n } else if (isArrayBufferView(data)) {\n len = data.byteLength / 2;\n for (i = 0; i < len; i++) {\n hash = (hash << 5) - hash + data[i];\n hash |= 0; // Convert to 32bit integer\n }\n }\n return hash;\n });\n\n /**\n * Validates if given String is a valid Base64-String\n *\n * @name validateStringAsBase64\n * @public\n * @function\n * @param {String} possible Base64-String\n *\n * @returns {boolean}\n */\n var validateStringAsBase64 = (jsPDFAPI.__addimage__.validateStringAsBase64 = function(\n possibleBase64String\n ) {\n possibleBase64String = possibleBase64String || \"\";\n possibleBase64String.toString().trim();\n\n var result = true;\n\n if (possibleBase64String.length === 0) {\n result = false;\n }\n\n if (possibleBase64String.length % 4 !== 0) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9+/]+$/.test(\n possibleBase64String.substr(0, possibleBase64String.length - 2)\n ) === false\n ) {\n result = false;\n }\n\n if (\n /^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(\n possibleBase64String.substr(-2)\n ) === false\n ) {\n result = false;\n }\n return result;\n });\n\n /**\n * Strips out and returns info from a valid base64 data URI\n *\n * @name extractImageFromDataUrl\n * @function\n * @param {string} dataUrl a valid data URI of format 'data:[][;base64],'\n * @returns {Array}an Array containing the following\n * [0] the complete data URI\n * [1] \n * [2] format - the second part of the mime-type i.e 'png' in 'image/png'\n * [4] \n */\n var extractImageFromDataUrl = (jsPDFAPI.__addimage__.extractImageFromDataUrl = function(\n dataUrl\n ) {\n dataUrl = dataUrl || \"\";\n var dataUrlParts = dataUrl.split(\"base64,\");\n var result = null;\n\n if (dataUrlParts.length === 2) {\n var extractedInfo = /^data:(\\w*\\/\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$/.exec(\n dataUrlParts[0]\n );\n if (Array.isArray(extractedInfo)) {\n result = {\n mimeType: extractedInfo[1],\n charset: extractedInfo[2],\n data: dataUrlParts[1]\n };\n }\n }\n return result;\n });\n\n /**\n * Check to see if ArrayBuffer is supported\n *\n * @name supportsArrayBuffer\n * @function\n * @returns {boolean}\n */\n var supportsArrayBuffer = (jsPDFAPI.__addimage__.supportsArrayBuffer = function() {\n return (\n typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\"\n );\n });\n\n /**\n * Tests supplied object to determine if ArrayBuffer\n *\n * @name isArrayBuffer\n * @function\n * @param {Object} object an Object\n *\n * @returns {boolean}\n */\n jsPDFAPI.__addimage__.isArrayBuffer = function(object) {\n return supportsArrayBuffer() && object instanceof ArrayBuffer;\n };\n\n /**\n * Tests supplied object to determine if it implements the ArrayBufferView (TypedArray) interface\n *\n * @name isArrayBufferView\n * @function\n * @param {Object} object an Object\n * @returns {boolean}\n */\n var isArrayBufferView = (jsPDFAPI.__addimage__.isArrayBufferView = function(\n object\n ) {\n return (\n supportsArrayBuffer() &&\n typeof Uint32Array !== \"undefined\" &&\n (object instanceof Int8Array ||\n object instanceof Uint8Array ||\n (typeof Uint8ClampedArray !== \"undefined\" &&\n object instanceof Uint8ClampedArray) ||\n object instanceof Int16Array ||\n object instanceof Uint16Array ||\n object instanceof Int32Array ||\n object instanceof Uint32Array ||\n object instanceof Float32Array ||\n object instanceof Float64Array)\n );\n });\n\n /**\n * Convert Binary String to ArrayBuffer\n *\n * @name binaryStringToUint8Array\n * @public\n * @function\n * @param {string} BinaryString with ImageData\n * @returns {Uint8Array}\n */\n var binaryStringToUint8Array = (jsPDFAPI.__addimage__.binaryStringToUint8Array = function(\n binary_string\n ) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n });\n\n /**\n * Convert the Buffer to a Binary String\n *\n * @name arrayBufferToBinaryString\n * @public\n * @function\n * @param {ArrayBuffer|ArrayBufferView} ArrayBuffer buffer or bufferView with ImageData\n *\n * @returns {String}\n */\n var arrayBufferToBinaryString = (jsPDFAPI.__addimage__.arrayBufferToBinaryString = function(\n buffer\n ) {\n var out = \"\";\n // There are calls with both ArrayBuffer and already converted Uint8Array or other BufferView.\n // Do not copy the array if input is already an array.\n var buf = isArrayBufferView(buffer) ? buffer : new Uint8Array(buffer);\n for (var i = 0; i < buf.length; i += ARRAY_APPLY_BATCH) {\n // Limit the amount of characters being parsed to prevent overflow.\n // Note that while TextDecoder would be faster, it does not have the same\n // functionality as fromCharCode with any provided encodings as of 3/2021.\n out += String.fromCharCode.apply(\n null,\n buf.subarray(i, i + ARRAY_APPLY_BATCH)\n );\n }\n return out;\n });\n\n /**\n * Possible parameter for addImage, an RGBA buffer with size.\n *\n * @typedef {Object} RGBAData\n * @property {Uint8ClampedArray} data - Single dimensional array of RGBA values. For example from canvas getImageData.\n * @property {number} width - Image width as the data does not carry this information in itself.\n * @property {number} height - Image height as the data does not carry this information in itself.\n */\n\n /**\n * Adds an Image to the PDF.\n *\n * @name addImage\n * @public\n * @function\n * @param {string|HTMLImageElement|HTMLCanvasElement|Uint8Array|RGBAData} imageData imageData as base64 encoded DataUrl or Image-HTMLElement or Canvas-HTMLElement or object containing RGBA array (like output from canvas.getImageData).\n * @param {string} format format of file if filetype-recognition fails or in case of a Canvas-Element needs to be specified (default for Canvas is JPEG), e.g. 'JPEG', 'PNG', 'WEBP'\n * @param {number} x x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width width of the image (in units declared at inception of PDF document)\n * @param {number} height height of the Image (in units declared at inception of PDF document)\n * @param {string} alias alias of the image (if used multiple times)\n * @param {string} compression compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation rotation of the image in degrees (0-359)\n *\n * @returns jsPDF\n */\n jsPDFAPI.addImage = function() {\n var imageData, format, x, y, w, h, alias, compression, rotation;\n\n imageData = arguments[0];\n if (typeof arguments[1] === \"number\") {\n format = UNKNOWN;\n x = arguments[1];\n y = arguments[2];\n w = arguments[3];\n h = arguments[4];\n alias = arguments[5];\n compression = arguments[6];\n rotation = arguments[7];\n } else {\n format = arguments[1];\n x = arguments[2];\n y = arguments[3];\n w = arguments[4];\n h = arguments[5];\n alias = arguments[6];\n compression = arguments[7];\n rotation = arguments[8];\n }\n\n if (\n typeof imageData === \"object\" &&\n !isDOMElement(imageData) &&\n \"imageData\" in imageData\n ) {\n var options = imageData;\n\n imageData = options.imageData;\n format = options.format || format || UNKNOWN;\n x = options.x || x || 0;\n y = options.y || y || 0;\n w = options.w || options.width || w;\n h = options.h || options.height || h;\n alias = options.alias || alias;\n compression = options.compression || compression;\n rotation = options.rotation || options.angle || rotation;\n }\n\n //If compression is not explicitly set, determine if we should use compression\n var filter = this.internal.getFilters();\n if (compression === undefined && filter.indexOf(\"FlateEncode\") !== -1) {\n compression = \"SLOW\";\n }\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");\n }\n\n initialize.call(this);\n\n var image = processImageData.call(\n this,\n imageData,\n format,\n alias,\n compression\n );\n\n writeImageToPDF.call(this, x, y, w, h, image, rotation);\n\n return this;\n };\n\n var processImageData = function(imageData, format, alias, compression) {\n var result, dataAsBinaryString;\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n imageData = unescape(imageData);\n var tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData !== \"\") {\n imageData = tmpImageData;\n } else {\n tmpImageData = jsPDFAPI.loadFile(imageData, true);\n if (tmpImageData !== undefined) {\n imageData = tmpImageData;\n }\n }\n }\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData, format);\n }\n\n format = getImageFileTypeByImageData(imageData, format);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n // now do the heavy lifting\n\n if (notDefined(alias)) {\n alias = generateAliasFromImageData(imageData);\n }\n result = checkImagesForAlias.call(this, alias);\n\n if (!result) {\n if (supportsArrayBuffer()) {\n // no need to convert if imageData is already uint8array\n if (!(imageData instanceof Uint8Array) && format !== \"RGBA\") {\n dataAsBinaryString = imageData;\n imageData = binaryStringToUint8Array(imageData);\n }\n }\n\n result = this[\"process\" + format.toUpperCase()](\n imageData,\n getImageIndex.call(this),\n alias,\n checkCompressValue(compression),\n dataAsBinaryString\n );\n }\n\n if (!result) {\n throw new Error(\"An unknown error occurred whilst processing the image.\");\n }\n return result;\n };\n\n /**\n * @name convertBase64ToBinaryString\n * @function\n * @param {string} stringData\n * @returns {string} binary string\n */\n var convertBase64ToBinaryString = (jsPDFAPI.__addimage__.convertBase64ToBinaryString = function(\n stringData,\n throwError\n ) {\n throwError = typeof throwError === \"boolean\" ? throwError : true;\n var base64Info;\n var imageData = \"\";\n var rawData;\n\n if (typeof stringData === \"string\") {\n base64Info = extractImageFromDataUrl(stringData);\n rawData = base64Info !== null ? base64Info.data : stringData;\n\n try {\n imageData = atob(rawData);\n } catch (e) {\n if (throwError) {\n if (!validateStringAsBase64(rawData)) {\n throw new Error(\n \"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \"\n );\n } else {\n throw new Error(\n \"atob-Error in jsPDF.convertBase64ToBinaryString \" + e.message\n );\n }\n }\n }\n }\n return imageData;\n });\n\n /**\n * @name getImageProperties\n * @function\n * @param {Object} imageData\n * @returns {Object}\n */\n jsPDFAPI.getImageProperties = function(imageData) {\n var image;\n var tmpImageData = \"\";\n var format;\n\n if (isDOMElement(imageData)) {\n imageData = getImageDataFromElement(imageData);\n }\n\n if (\n typeof imageData === \"string\" &&\n getImageFileTypeByImageData(imageData) === UNKNOWN\n ) {\n tmpImageData = convertBase64ToBinaryString(imageData, false);\n\n if (tmpImageData === \"\") {\n tmpImageData = jsPDFAPI.loadFile(imageData) || \"\";\n }\n imageData = tmpImageData;\n }\n\n format = getImageFileTypeByImageData(imageData);\n if (!isImageTypeSupported(format)) {\n throw new Error(\n \"addImage does not support files of type '\" +\n format +\n \"', please ensure that a plugin for '\" +\n format +\n \"' support is added.\"\n );\n }\n\n if (supportsArrayBuffer() && !(imageData instanceof Uint8Array)) {\n imageData = binaryStringToUint8Array(imageData);\n }\n\n image = this[\"process\" + format.toUpperCase()](imageData);\n\n if (!image) {\n throw new Error(\"An unknown error occurred whilst processing the image\");\n }\n\n image.fileType = format;\n\n return image;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF Annotations PlugIn\n *\n * There are many types of annotations in a PDF document. Annotations are placed\n * on a page at a particular location. They are not 'attached' to an object.\n *
    \n * This plugin current supports
    \n *
  51. Goto Page (set pageNumber and top in options)\n *
  52. Goto Name (set name and top in options)\n *
  53. Goto URL (set url in options)\n *

    \n * \tThe destination magnification factor can also be specified when goto is a page number or a named destination. (see documentation below)\n * (set magFactor in options). XYZ is the default.\n *

    \n *

    \n * Links, Text, Popup, and FreeText are supported.\n *

    \n *

    \n * Options In PDF spec Not Implemented Yet\n *

  54. link border\n *
  55. named target\n *
  56. page coordinates\n *
  57. destination page scaling and layout\n *
  58. actions other than URL and GotoPage\n *
  59. background / hover actions\n *

    \n * @name annotations\n * @module\n */\n\n/*\n Destination Magnification Factors\n See PDF 1.3 Page 386 for meanings and options\n\n [supported]\n\tXYZ (options; left top zoom)\n\tFit (no options)\n\tFitH (options: top)\n\tFitV (options: left)\n\n\t[not supported]\n\tFitR\n\tFitB\n\tFitBH\n\tFitBV\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var notEmpty = function(obj) {\n if (typeof obj != \"undefined\") {\n if (obj != \"\") {\n return true;\n }\n }\n };\n\n jsPDF.API.events.push([\n \"addPage\",\n function(addPageData) {\n var pageInfo = this.internal.getPageInfo(addPageData.pageNumber);\n pageInfo.pageContext.annotations = [];\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putPage\",\n function(putPageData) {\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal\n .getVerticalCoordinateString;\n var pageInfo = this.internal.getPageInfoByObjId(putPageData.objId);\n var pageAnnos = putPageData.pageContext.annotations;\n\n var anno, rect, line;\n var found = false;\n for (var a = 0; a < pageAnnos.length && !found; a++) {\n anno = pageAnnos[a];\n switch (anno.type) {\n case \"link\":\n if (\n notEmpty(anno.options.url) ||\n notEmpty(anno.options.pageNumber)\n ) {\n found = true;\n }\n break;\n case \"reference\":\n case \"text\":\n case \"freetext\":\n found = true;\n break;\n }\n }\n if (found == false) {\n return;\n }\n\n this.internal.write(\"/Annots [\");\n for (var i = 0; i < pageAnnos.length; i++) {\n anno = pageAnnos[i];\n var escape = this.internal.pdfEscape;\n var encryptor = this.internal.getEncryptor(putPageData.objId);\n\n switch (anno.type) {\n case \"reference\":\n // References to Widget Annotations (for AcroForm Fields)\n this.internal.write(\" \" + anno.object.objId + \" 0 R \");\n break;\n case \"text\":\n // Create a an object for both the text and the popup\n var objText = this.internal.newAdditionalObject();\n var objPopup = this.internal.newAdditionalObject();\n var encryptorText = this.internal.getEncryptor(objText.objId);\n\n var title = anno.title || \"Note\";\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n\n line =\n \"<>\";\n objText.content = line;\n\n var parent = objText.objId + \" 0 R\";\n var popoff = 30;\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x + popoff) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \" \" +\n getHorizontalCoordinateString(\n anno.bounds.x + anno.bounds.w + popoff\n ) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \"] \";\n line =\n \"<>\";\n objPopup.content = line;\n\n this.internal.write(objText.objId, \"0 R\", objPopup.objId, \"0 R\");\n\n break;\n case \"freetext\":\n rect =\n \"/Rect [\" +\n getHorizontalCoordinateString(anno.bounds.x) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y) +\n \" \" +\n getHorizontalCoordinateString(anno.bounds.x + anno.bounds.w) +\n \" \" +\n getVerticalCoordinateString(anno.bounds.y + anno.bounds.h) +\n \"] \";\n var color = anno.color || \"#000000\";\n line =\n \"<>\";\n this.internal.write(line);\n break;\n case \"link\":\n if (anno.options.name) {\n var loc = this.annotations._nameMap[anno.options.name];\n anno.options.pageNumber = loc.page;\n anno.options.top = loc.y;\n } else {\n if (!anno.options.top) {\n anno.options.top = 0;\n }\n }\n\n rect =\n \"/Rect [\" +\n anno.finalBounds.x +\n \" \" +\n anno.finalBounds.y +\n \" \" +\n anno.finalBounds.w +\n \" \" +\n anno.finalBounds.h +\n \"] \";\n\n line = \"\";\n if (anno.options.url) {\n line =\n \"<>\";\n } else if (anno.options.pageNumber) {\n // first page is 0\n var info = this.internal.getPageInfo(anno.options.pageNumber);\n line =\n \"<>\";\n this.internal.write(line);\n }\n break;\n }\n }\n this.internal.write(\"]\");\n }\n ]);\n\n /**\n * @name createAnnotation\n * @function\n * @param {Object} options\n */\n jsPDFAPI.createAnnotation = function(options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n switch (options.type) {\n case \"link\":\n this.link(\n options.bounds.x,\n options.bounds.y,\n options.bounds.w,\n options.bounds.h,\n options\n );\n break;\n case \"text\":\n case \"freetext\":\n pageInfo.pageContext.annotations.push(options);\n break;\n }\n };\n\n /**\n * Create a link\n *\n * valid options\n *
  60. pageNumber or url [required]\n *

    If pageNumber is specified, top and zoom may also be specified

    \n * @name link\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {Object} options\n */\n jsPDFAPI.link = function(x, y, w, h, options) {\n var pageInfo = this.internal.getCurrentPageInfo();\n var getHorizontalCoordinateString = this.internal.getCoordinateString;\n var getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\n\n pageInfo.pageContext.annotations.push({\n finalBounds: {\n x: getHorizontalCoordinateString(x),\n y: getVerticalCoordinateString(y),\n w: getHorizontalCoordinateString(x + w),\n h: getVerticalCoordinateString(y + h)\n },\n options: options,\n type: \"link\"\n });\n };\n\n /**\n * Currently only supports single line text.\n * Returns the width of the text/link\n *\n * @name textWithLink\n * @function\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {Object} options\n * @returns {number} width the width of the text/link\n */\n jsPDFAPI.textWithLink = function(text, x, y, options) {\n var totalLineWidth = this.getTextWidth(text);\n var lineHeight = this.internal.getLineHeight() / this.internal.scaleFactor;\n var linkHeight, linkWidth;\n\n // Checking if maxWidth option is passed to determine lineWidth and number of lines for each line\n if (options.maxWidth !== undefined) {\n var { maxWidth } = options;\n linkWidth = maxWidth;\n var numOfLines = this.splitTextToSize(text, linkWidth).length;\n linkHeight = Math.ceil(lineHeight * numOfLines);\n } else {\n linkWidth = totalLineWidth;\n linkHeight = lineHeight;\n }\n\n this.text(text, x, y, options);\n\n //TODO We really need the text baseline height to do this correctly.\n // Or ability to draw text on top, bottom, center, or baseline.\n y += lineHeight * 0.2;\n //handle x position based on the align option\n if (options.align === \"center\") {\n x = x - totalLineWidth / 2; //since starting from center move the x position by half of text width\n }\n if (options.align === \"right\") {\n x = x - totalLineWidth;\n }\n this.link(x, y - lineHeight, linkWidth, linkHeight, options);\n return totalLineWidth;\n };\n\n //TODO move into external library\n /**\n * @name getTextWidth\n * @function\n * @param {string} text\n * @returns {number} txtWidth\n */\n jsPDFAPI.getTextWidth = function(text) {\n var fontSize = this.internal.getFontSize();\n var txtWidth =\n (this.getStringUnitWidth(text) * fontSize) / this.internal.scaleFactor;\n return txtWidth;\n };\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF arabic parser PlugIn\n *\n * @name arabic\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Arabic shape substitutions: char code => (isolated, final, initial, medial).\n * Arabic Substition A\n */\n var arabicSubstitionA = {\n 0x0621: [0xfe80], // ARABIC LETTER HAMZA\n 0x0622: [0xfe81, 0xfe82], // ARABIC LETTER ALEF WITH MADDA ABOVE\n 0x0623: [0xfe83, 0xfe84], // ARABIC LETTER ALEF WITH HAMZA ABOVE\n 0x0624: [0xfe85, 0xfe86], // ARABIC LETTER WAW WITH HAMZA ABOVE\n 0x0625: [0xfe87, 0xfe88], // ARABIC LETTER ALEF WITH HAMZA BELOW\n 0x0626: [0xfe89, 0xfe8a, 0xfe8b, 0xfe8c], // ARABIC LETTER YEH WITH HAMZA ABOVE\n 0x0627: [0xfe8d, 0xfe8e], // ARABIC LETTER ALEF\n 0x0628: [0xfe8f, 0xfe90, 0xfe91, 0xfe92], // ARABIC LETTER BEH\n 0x0629: [0xfe93, 0xfe94], // ARABIC LETTER TEH MARBUTA\n 0x062a: [0xfe95, 0xfe96, 0xfe97, 0xfe98], // ARABIC LETTER TEH\n 0x062b: [0xfe99, 0xfe9a, 0xfe9b, 0xfe9c], // ARABIC LETTER THEH\n 0x062c: [0xfe9d, 0xfe9e, 0xfe9f, 0xfea0], // ARABIC LETTER JEEM\n 0x062d: [0xfea1, 0xfea2, 0xfea3, 0xfea4], // ARABIC LETTER HAH\n 0x062e: [0xfea5, 0xfea6, 0xfea7, 0xfea8], // ARABIC LETTER KHAH\n 0x062f: [0xfea9, 0xfeaa], // ARABIC LETTER DAL\n 0x0630: [0xfeab, 0xfeac], // ARABIC LETTER THAL\n 0x0631: [0xfead, 0xfeae], // ARABIC LETTER REH\n 0x0632: [0xfeaf, 0xfeb0], // ARABIC LETTER ZAIN\n 0x0633: [0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4], // ARABIC LETTER SEEN\n 0x0634: [0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8], // ARABIC LETTER SHEEN\n 0x0635: [0xfeb9, 0xfeba, 0xfebb, 0xfebc], // ARABIC LETTER SAD\n 0x0636: [0xfebd, 0xfebe, 0xfebf, 0xfec0], // ARABIC LETTER DAD\n 0x0637: [0xfec1, 0xfec2, 0xfec3, 0xfec4], // ARABIC LETTER TAH\n 0x0638: [0xfec5, 0xfec6, 0xfec7, 0xfec8], // ARABIC LETTER ZAH\n 0x0639: [0xfec9, 0xfeca, 0xfecb, 0xfecc], // ARABIC LETTER AIN\n 0x063a: [0xfecd, 0xfece, 0xfecf, 0xfed0], // ARABIC LETTER GHAIN\n 0x0641: [0xfed1, 0xfed2, 0xfed3, 0xfed4], // ARABIC LETTER FEH\n 0x0642: [0xfed5, 0xfed6, 0xfed7, 0xfed8], // ARABIC LETTER QAF\n 0x0643: [0xfed9, 0xfeda, 0xfedb, 0xfedc], // ARABIC LETTER KAF\n 0x0644: [0xfedd, 0xfede, 0xfedf, 0xfee0], // ARABIC LETTER LAM\n 0x0645: [0xfee1, 0xfee2, 0xfee3, 0xfee4], // ARABIC LETTER MEEM\n 0x0646: [0xfee5, 0xfee6, 0xfee7, 0xfee8], // ARABIC LETTER NOON\n 0x0647: [0xfee9, 0xfeea, 0xfeeb, 0xfeec], // ARABIC LETTER HEH\n 0x0648: [0xfeed, 0xfeee], // ARABIC LETTER WAW\n 0x0649: [0xfeef, 0xfef0, 64488, 64489], // ARABIC LETTER ALEF MAKSURA\n 0x064a: [0xfef1, 0xfef2, 0xfef3, 0xfef4], // ARABIC LETTER YEH\n 0x0671: [0xfb50, 0xfb51], // ARABIC LETTER ALEF WASLA\n 0x0677: [0xfbdd], // ARABIC LETTER U WITH HAMZA ABOVE\n 0x0679: [0xfb66, 0xfb67, 0xfb68, 0xfb69], // ARABIC LETTER TTEH\n 0x067a: [0xfb5e, 0xfb5f, 0xfb60, 0xfb61], // ARABIC LETTER TTEHEH\n 0x067b: [0xfb52, 0xfb53, 0xfb54, 0xfb55], // ARABIC LETTER BEEH\n 0x067e: [0xfb56, 0xfb57, 0xfb58, 0xfb59], // ARABIC LETTER PEH\n 0x067f: [0xfb62, 0xfb63, 0xfb64, 0xfb65], // ARABIC LETTER TEHEH\n 0x0680: [0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d], // ARABIC LETTER BEHEH\n 0x0683: [0xfb76, 0xfb77, 0xfb78, 0xfb79], // ARABIC LETTER NYEH\n 0x0684: [0xfb72, 0xfb73, 0xfb74, 0xfb75], // ARABIC LETTER DYEH\n 0x0686: [0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d], // ARABIC LETTER TCHEH\n 0x0687: [0xfb7e, 0xfb7f, 0xfb80, 0xfb81], // ARABIC LETTER TCHEHEH\n 0x0688: [0xfb88, 0xfb89], // ARABIC LETTER DDAL\n 0x068c: [0xfb84, 0xfb85], // ARABIC LETTER DAHAL\n 0x068d: [0xfb82, 0xfb83], // ARABIC LETTER DDAHAL\n 0x068e: [0xfb86, 0xfb87], // ARABIC LETTER DUL\n 0x0691: [0xfb8c, 0xfb8d], // ARABIC LETTER RREH\n 0x0698: [0xfb8a, 0xfb8b], // ARABIC LETTER JEH\n 0x06a4: [0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d], // ARABIC LETTER VEH\n 0x06a6: [0xfb6e, 0xfb6f, 0xfb70, 0xfb71], // ARABIC LETTER PEHEH\n 0x06a9: [0xfb8e, 0xfb8f, 0xfb90, 0xfb91], // ARABIC LETTER KEHEH\n 0x06ad: [0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6], // ARABIC LETTER NG\n 0x06af: [0xfb92, 0xfb93, 0xfb94, 0xfb95], // ARABIC LETTER GAF\n 0x06b1: [0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d], // ARABIC LETTER NGOEH\n 0x06b3: [0xfb96, 0xfb97, 0xfb98, 0xfb99], // ARABIC LETTER GUEH\n 0x06ba: [0xfb9e, 0xfb9f], // ARABIC LETTER NOON GHUNNA\n 0x06bb: [0xfba0, 0xfba1, 0xfba2, 0xfba3], // ARABIC LETTER RNOON\n 0x06be: [0xfbaa, 0xfbab, 0xfbac, 0xfbad], // ARABIC LETTER HEH DOACHASHMEE\n 0x06c0: [0xfba4, 0xfba5], // ARABIC LETTER HEH WITH YEH ABOVE\n 0x06c1: [0xfba6, 0xfba7, 0xfba8, 0xfba9], // ARABIC LETTER HEH GOAL\n 0x06c5: [0xfbe0, 0xfbe1], // ARABIC LETTER KIRGHIZ OE\n 0x06c6: [0xfbd9, 0xfbda], // ARABIC LETTER OE\n 0x06c7: [0xfbd7, 0xfbd8], // ARABIC LETTER U\n 0x06c8: [0xfbdb, 0xfbdc], // ARABIC LETTER YU\n 0x06c9: [0xfbe2, 0xfbe3], // ARABIC LETTER KIRGHIZ YU\n 0x06cb: [0xfbde, 0xfbdf], // ARABIC LETTER VE\n 0x06cc: [0xfbfc, 0xfbfd, 0xfbfe, 0xfbff], // ARABIC LETTER FARSI YEH\n 0x06d0: [0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7], //ARABIC LETTER E\n 0x06d2: [0xfbae, 0xfbaf], // ARABIC LETTER YEH BARREE\n 0x06d3: [0xfbb0, 0xfbb1] // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE\n };\n\n /*\n var ligaturesSubstitutionA = {\n 0xFBEA: []// ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM\n };\n */\n\n var ligatures = {\n 0xfedf: {\n 0xfe82: 0xfef5, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM\n 0xfe84: 0xfef7, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM\n 0xfe88: 0xfef9, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM\n 0xfe8e: 0xfefb // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM\n },\n 0xfee0: {\n 0xfe82: 0xfef6, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM\n 0xfe84: 0xfef8, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM\n 0xfe88: 0xfefa, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM\n 0xfe8e: 0xfefc // ARABIC LIGATURE LAM WITH ALEF FINAL FORM\n },\n 0xfe8d: { 0xfedf: { 0xfee0: { 0xfeea: 0xfdf2 } } }, // ALLAH\n 0x0651: {\n 0x064c: 0xfc5e, // Shadda + Dammatan\n 0x064d: 0xfc5f, // Shadda + Kasratan\n 0x064e: 0xfc60, // Shadda + Fatha\n 0x064f: 0xfc61, // Shadda + Damma\n 0x0650: 0xfc62 // Shadda + Kasra\n }\n };\n\n var arabic_diacritics = {\n 1612: 64606, // Shadda + Dammatan\n 1613: 64607, // Shadda + Kasratan\n 1614: 64608, // Shadda + Fatha\n 1615: 64609, // Shadda + Damma\n 1616: 64610 // Shadda + Kasra\n };\n\n var alfletter = [1570, 1571, 1573, 1575];\n\n var noChangeInForm = -1;\n var isolatedForm = 0;\n var finalForm = 1;\n var initialForm = 2;\n var medialForm = 3;\n\n jsPDFAPI.__arabicParser__ = {};\n\n //private\n var isInArabicSubstitutionA = (jsPDFAPI.__arabicParser__.isInArabicSubstitutionA = function(\n letter\n ) {\n return typeof arabicSubstitionA[letter.charCodeAt(0)] !== \"undefined\";\n });\n\n var isArabicLetter = (jsPDFAPI.__arabicParser__.isArabicLetter = function(\n letter\n ) {\n return (\n typeof letter === \"string\" &&\n /^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(\n letter\n )\n );\n });\n\n var isArabicEndLetter = (jsPDFAPI.__arabicParser__.isArabicEndLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length <= 2\n );\n });\n\n var isArabicAlfLetter = (jsPDFAPI.__arabicParser__.isArabicAlfLetter = function(\n letter\n ) {\n return (\n isArabicLetter(letter) && alfletter.indexOf(letter.charCodeAt(0)) >= 0\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasIsolatedForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 1\n );\n };\n\n var arabicLetterHasFinalForm = (jsPDFAPI.__arabicParser__.arabicLetterHasFinalForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 2\n );\n });\n\n jsPDFAPI.__arabicParser__.arabicLetterHasInitialForm = function(letter) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length >= 3\n );\n };\n\n var arabicLetterHasMedialForm = (jsPDFAPI.__arabicParser__.arabicLetterHasMedialForm = function(\n letter\n ) {\n return (\n isArabicLetter(letter) &&\n isInArabicSubstitutionA(letter) &&\n arabicSubstitionA[letter.charCodeAt(0)].length == 4\n );\n });\n\n var resolveLigatures = (jsPDFAPI.__arabicParser__.resolveLigatures = function(\n letters\n ) {\n var i = 0;\n var tmpLigatures = ligatures;\n var result = \"\";\n var effectedLetters = 0;\n\n for (i = 0; i < letters.length; i += 1) {\n if (typeof tmpLigatures[letters.charCodeAt(i)] !== \"undefined\") {\n effectedLetters++;\n tmpLigatures = tmpLigatures[letters.charCodeAt(i)];\n\n if (typeof tmpLigatures === \"number\") {\n result += String.fromCharCode(tmpLigatures);\n tmpLigatures = ligatures;\n effectedLetters = 0;\n }\n if (i === letters.length - 1) {\n tmpLigatures = ligatures;\n result += letters.charAt(i - (effectedLetters - 1));\n i = i - (effectedLetters - 1);\n effectedLetters = 0;\n }\n } else {\n tmpLigatures = ligatures;\n result += letters.charAt(i - effectedLetters);\n i = i - effectedLetters;\n effectedLetters = 0;\n }\n }\n\n return result;\n });\n\n jsPDFAPI.__arabicParser__.isArabicDiacritic = function(letter) {\n return (\n letter !== undefined &&\n arabic_diacritics[letter.charCodeAt(0)] !== undefined\n );\n };\n\n var getCorrectForm = (jsPDFAPI.__arabicParser__.getCorrectForm = function(\n currentChar,\n beforeChar,\n nextChar\n ) {\n if (!isArabicLetter(currentChar)) {\n return -1;\n }\n\n if (isInArabicSubstitutionA(currentChar) === false) {\n return noChangeInForm;\n }\n if (\n !arabicLetterHasFinalForm(currentChar) ||\n (!isArabicLetter(beforeChar) && !isArabicLetter(nextChar)) ||\n (!isArabicLetter(nextChar) && isArabicEndLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && !isArabicLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicAlfLetter(beforeChar)) ||\n (isArabicEndLetter(currentChar) && isArabicEndLetter(beforeChar))\n ) {\n return isolatedForm;\n }\n\n if (\n arabicLetterHasMedialForm(currentChar) &&\n isArabicLetter(beforeChar) &&\n !isArabicEndLetter(beforeChar) &&\n isArabicLetter(nextChar) &&\n arabicLetterHasFinalForm(nextChar)\n ) {\n return medialForm;\n }\n\n if (isArabicEndLetter(currentChar) || !isArabicLetter(nextChar)) {\n return finalForm;\n }\n return initialForm;\n });\n\n /**\n * @name processArabic\n * @function\n * @param {string} text\n * @returns {string}\n */\n var parseArabic = function(text) {\n text = text || \"\";\n\n var result = \"\";\n var i = 0;\n var j = 0;\n var position = 0;\n var currentLetter = \"\";\n var prevLetter = \"\";\n var nextLetter = \"\";\n\n var words = text.split(\"\\\\s+\");\n var newWords = [];\n for (i = 0; i < words.length; i += 1) {\n newWords.push(\"\");\n for (j = 0; j < words[i].length; j += 1) {\n currentLetter = words[i][j];\n prevLetter = words[i][j - 1];\n nextLetter = words[i][j + 1];\n if (isArabicLetter(currentLetter)) {\n position = getCorrectForm(currentLetter, prevLetter, nextLetter);\n if (position !== -1) {\n newWords[i] += String.fromCharCode(\n arabicSubstitionA[currentLetter.charCodeAt(0)][position]\n );\n } else {\n newWords[i] += currentLetter;\n }\n } else {\n newWords[i] += currentLetter;\n }\n }\n\n newWords[i] = resolveLigatures(newWords[i]);\n }\n result = newWords.join(\" \");\n\n return result;\n };\n\n var processArabic = (jsPDFAPI.__arabicParser__.processArabic = jsPDFAPI.processArabic = function() {\n var text =\n typeof arguments[0] === \"string\" ? arguments[0] : arguments[0].text;\n var tmpText = [];\n var result;\n\n if (Array.isArray(text)) {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n tmpText.push([parseArabic(text[i][0]), text[i][1], text[i][2]]);\n } else {\n tmpText.push([parseArabic(text[i])]);\n }\n }\n result = tmpText;\n } else {\n result = parseArabic(text);\n }\n if (typeof arguments[0] === \"string\") {\n return result;\n } else {\n arguments[0].text = result;\n return arguments[0];\n }\n });\n\n jsPDFAPI.events.push([\"preProcessText\", processArabic]);\n})(jsPDF.API);\n","/** @license\n * jsPDF Autoprint Plugin\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name autoprint\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.\n *\n * @name autoPrint\n * @function\n * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF();\n * doc.text(10, 10, 'This is a test');\n * doc.autoPrint({variant: 'non-conform'});\n * doc.save('autoprint.pdf');\n */\n jsPDFAPI.autoPrint = function(options) {\n \"use strict\";\n var refAutoPrintTag;\n options = options || {};\n options.variant = options.variant || \"non-conform\";\n\n switch (options.variant) {\n case \"javascript\":\n //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb\n this.addJS(\"print({});\");\n break;\n case \"non-conform\":\n default:\n this.internal.events.subscribe(\"postPutResources\", function() {\n refAutoPrintTag = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /Named\");\n this.internal.out(\"/Type /Action\");\n this.internal.out(\"/N /Print\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.out(\"/OpenAction \" + refAutoPrintTag + \" 0 R\");\n });\n break;\n }\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Canvas PlugIn\n * This plugin mimics the HTML5 Canvas\n *\n * The goal is to provide a way for current canvas users to print directly to a PDF.\n * @name canvas\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @class Canvas\n * @classdesc A Canvas Wrapper for jsPDF\n */\n var Canvas = function() {\n var jsPdfInstance = undefined;\n Object.defineProperty(this, \"pdf\", {\n get: function() {\n return jsPdfInstance;\n },\n set: function(value) {\n jsPdfInstance = value;\n }\n });\n\n var _width = 150;\n /**\n * The height property is a positive integer reflecting the height HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 150 is used.\n * This is one of the two properties, the other being width, that controls the size of the canvas.\n *\n * @name width\n */\n Object.defineProperty(this, \"width\", {\n get: function() {\n return _width;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _width = 150;\n } else {\n _width = value;\n }\n if (this.getContext(\"2d\").pageWrapXEnabled) {\n this.getContext(\"2d\").pageWrapX = _width + 1;\n }\n }\n });\n\n var _height = 300;\n /**\n * The width property is a positive integer reflecting the width HTML attribute of the element interpreted in CSS pixels. When the attribute is not specified, or if it is set to an invalid value, like a negative, the default value of 300 is used.\n * This is one of the two properties, the other being height, that controls the size of the canvas.\n *\n * @name height\n */\n Object.defineProperty(this, \"height\", {\n get: function() {\n return _height;\n },\n set: function(value) {\n if (isNaN(value) || Number.isInteger(value) === false || value < 0) {\n _height = 300;\n } else {\n _height = value;\n }\n if (this.getContext(\"2d\").pageWrapYEnabled) {\n this.getContext(\"2d\").pageWrapY = _height + 1;\n }\n }\n });\n\n var _childNodes = [];\n Object.defineProperty(this, \"childNodes\", {\n get: function() {\n return _childNodes;\n },\n set: function(value) {\n _childNodes = value;\n }\n });\n\n var _style = {};\n Object.defineProperty(this, \"style\", {\n get: function() {\n return _style;\n },\n set: function(value) {\n _style = value;\n }\n });\n\n Object.defineProperty(this, \"parentNode\", {});\n };\n\n /**\n * The getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\n *\n * @name getContext\n * @function\n * @param {string} contextType Is a String containing the context identifier defining the drawing context associated to the canvas. Possible value is \"2d\", leading to the creation of a Context2D object representing a two-dimensional rendering context.\n * @param {object} contextAttributes\n */\n Canvas.prototype.getContext = function(contextType, contextAttributes) {\n contextType = contextType || \"2d\";\n var key;\n\n if (contextType !== \"2d\") {\n return null;\n }\n for (key in contextAttributes) {\n if (this.pdf.context2d.hasOwnProperty(key)) {\n this.pdf.context2d[key] = contextAttributes[key];\n }\n }\n this.pdf.context2d._canvas = this;\n return this.pdf.context2d;\n };\n\n /**\n * The toDataURL() method is just a stub to throw an error if accidently called.\n *\n * @name toDataURL\n * @function\n */\n Canvas.prototype.toDataURL = function() {\n throw new Error(\"toDataURL is not implemented.\");\n };\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n this.canvas = new Canvas();\n this.canvas.pdf = this;\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name cell\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var NO_MARGINS = { left: 0, top: 0, bottom: 0, right: 0 };\n\n var px2pt = (0.264583 * 72) / 25.4;\n var printingHeaderRow = false;\n\n var _initialize = function() {\n if (typeof this.internal.__cell__ === \"undefined\") {\n this.internal.__cell__ = {};\n this.internal.__cell__.padding = 3;\n this.internal.__cell__.headerFunction = undefined;\n this.internal.__cell__.margins = Object.assign({}, NO_MARGINS);\n this.internal.__cell__.margins.width = this.getPageWidth();\n _reset.call(this);\n }\n };\n\n var _reset = function() {\n this.internal.__cell__.lastCell = new Cell();\n this.internal.__cell__.pages = 1;\n };\n\n var Cell = function() {\n var _x = arguments[0];\n Object.defineProperty(this, \"x\", {\n enumerable: true,\n get: function() {\n return _x;\n },\n set: function(value) {\n _x = value;\n }\n });\n var _y = arguments[1];\n Object.defineProperty(this, \"y\", {\n enumerable: true,\n get: function() {\n return _y;\n },\n set: function(value) {\n _y = value;\n }\n });\n var _width = arguments[2];\n Object.defineProperty(this, \"width\", {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n _width = value;\n }\n });\n var _height = arguments[3];\n Object.defineProperty(this, \"height\", {\n enumerable: true,\n get: function() {\n return _height;\n },\n set: function(value) {\n _height = value;\n }\n });\n var _text = arguments[4];\n Object.defineProperty(this, \"text\", {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = value;\n }\n });\n var _lineNumber = arguments[5];\n Object.defineProperty(this, \"lineNumber\", {\n enumerable: true,\n get: function() {\n return _lineNumber;\n },\n set: function(value) {\n _lineNumber = value;\n }\n });\n var _align = arguments[6];\n Object.defineProperty(this, \"align\", {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n _align = value;\n }\n });\n\n return this;\n };\n\n Cell.prototype.clone = function() {\n return new Cell(\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n );\n };\n\n Cell.prototype.toArray = function() {\n return [\n this.x,\n this.y,\n this.width,\n this.height,\n this.text,\n this.lineNumber,\n this.align\n ];\n };\n\n /**\n * @name setHeaderFunction\n * @function\n * @param {function} func\n */\n jsPDFAPI.setHeaderFunction = function(func) {\n _initialize.call(this);\n this.internal.__cell__.headerFunction =\n typeof func === \"function\" ? func : undefined;\n return this;\n };\n\n /**\n * @name getTextDimensions\n * @function\n * @param {string} txt\n * @returns {Object} dimensions\n */\n jsPDFAPI.getTextDimensions = function(text, options) {\n _initialize.call(this);\n options = options || {};\n var fontSize = options.fontSize || this.getFontSize();\n var font = options.font || this.getFont();\n var scaleFactor = options.scaleFactor || this.internal.scaleFactor;\n var width = 0;\n var amountOfLines = 0;\n var height = 0;\n var tempWidth = 0;\n var scope = this;\n\n if (!Array.isArray(text) && typeof text !== \"string\") {\n if (typeof text === \"number\") {\n text = String(text);\n } else {\n throw new Error(\n \"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\"\n );\n }\n }\n\n const maxWidth = options.maxWidth;\n if (maxWidth > 0) {\n if (typeof text === \"string\") {\n text = this.splitTextToSize(text, maxWidth);\n } else if (Object.prototype.toString.call(text) === \"[object Array]\") {\n text = text.reduce(function(acc, textLine) {\n return acc.concat(scope.splitTextToSize(textLine, maxWidth));\n }, []);\n }\n } else {\n // Without the else clause, it will not work if you do not pass along maxWidth\n text = Array.isArray(text) ? text : [text];\n }\n\n for (var i = 0; i < text.length; i++) {\n tempWidth = this.getStringUnitWidth(text[i], { font: font }) * fontSize;\n if (width < tempWidth) {\n width = tempWidth;\n }\n }\n\n if (width !== 0) {\n amountOfLines = text.length;\n }\n\n width = width / scaleFactor;\n height = Math.max(\n (amountOfLines * fontSize * this.getLineHeightFactor() -\n fontSize * (this.getLineHeightFactor() - 1)) /\n scaleFactor,\n 0\n );\n return { w: width, h: height };\n };\n\n /**\n * @name cellAddPage\n * @function\n */\n jsPDFAPI.cellAddPage = function() {\n _initialize.call(this);\n\n this.addPage();\n\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n this.internal.__cell__.lastCell = new Cell(\n margins.left,\n margins.top,\n undefined,\n undefined\n );\n this.internal.__cell__.pages += 1;\n\n return this;\n };\n\n /**\n * @name cell\n * @function\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} text\n * @param {number} lineNumber lineNumber\n * @param {string} align\n * @return {jsPDF} jsPDF-instance\n */\n var cell = (jsPDFAPI.cell = function() {\n var currentCell;\n\n if (arguments[0] instanceof Cell) {\n currentCell = arguments[0];\n } else {\n currentCell = new Cell(\n arguments[0],\n arguments[1],\n arguments[2],\n arguments[3],\n arguments[4],\n arguments[5]\n );\n }\n _initialize.call(this);\n var lastCell = this.internal.__cell__.lastCell;\n var padding = this.internal.__cell__.padding;\n var margins = this.internal.__cell__.margins || NO_MARGINS;\n var tableHeaderRow = this.internal.__cell__.tableHeaderRow;\n var printHeaders = this.internal.__cell__.printHeaders;\n // If this is not the first cell, we must change its position\n if (typeof lastCell.lineNumber !== \"undefined\") {\n if (lastCell.lineNumber === currentCell.lineNumber) {\n //Same line\n currentCell.x = (lastCell.x || 0) + (lastCell.width || 0);\n currentCell.y = lastCell.y || 0;\n } else {\n //New line\n if (\n lastCell.y + lastCell.height + currentCell.height + margins.bottom >\n this.getPageHeight()\n ) {\n this.cellAddPage();\n currentCell.y = margins.top;\n if (printHeaders && tableHeaderRow) {\n this.printHeaderRow(currentCell.lineNumber, true);\n currentCell.y += tableHeaderRow[0].height;\n }\n } else {\n currentCell.y = lastCell.y + lastCell.height || currentCell.y;\n }\n }\n }\n\n if (typeof currentCell.text[0] !== \"undefined\") {\n this.rect(\n currentCell.x,\n currentCell.y,\n currentCell.width,\n currentCell.height,\n printingHeaderRow === true ? \"FD\" : undefined\n );\n if (currentCell.align === \"right\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width - padding,\n currentCell.y + padding,\n { align: \"right\", baseline: \"top\" }\n );\n } else if (currentCell.align === \"center\") {\n this.text(\n currentCell.text,\n currentCell.x + currentCell.width / 2,\n currentCell.y + padding,\n {\n align: \"center\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n } else {\n this.text(\n currentCell.text,\n currentCell.x + padding,\n currentCell.y + padding,\n {\n align: \"left\",\n baseline: \"top\",\n maxWidth: currentCell.width - padding - padding\n }\n );\n }\n }\n this.internal.__cell__.lastCell = currentCell;\n return this;\n });\n\n /**\n * Create a table from a set of data.\n * @name table\n * @function\n * @param {Integer} [x] : left-position for top-left corner of table\n * @param {Integer} [y] top-position for top-left corner of table\n * @param {Object[]} [data] An array of objects containing key-value pairs corresponding to a row of data.\n * @param {String[]} [headers] Omit or null to auto-generate headers at a performance cost\n\n * @param {Object} [config.printHeaders] True to print column headers at the top of every page\n * @param {Object} [config.autoSize] True to dynamically set the column widths to match the widest cell value\n * @param {Object} [config.margins] margin values for left, top, bottom, and width\n * @param {Object} [config.fontSize] Integer fontSize to use (optional)\n * @param {Object} [config.padding] cell-padding in pt to use (optional)\n * @param {Object} [config.headerBackgroundColor] default is #c8c8c8 (optional)\n * @param {Object} [config.headerTextColor] default is #000 (optional)\n * @param {Object} [config.rowStart] callback to handle before print each row (optional)\n * @param {Object} [config.cellStart] callback to handle before print each cell (optional)\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.table = function(x, y, data, headers, config) {\n _initialize.call(this);\n if (!data) {\n throw new Error(\"No data for PDF table.\");\n }\n\n config = config || {};\n\n var headerNames = [],\n headerLabels = [],\n headerAligns = [],\n i,\n columnMatrix = {},\n columnWidths = {},\n column,\n columnMinWidths = [],\n j,\n tableHeaderConfigs = [],\n //set up defaults. If a value is provided in config, defaults will be overwritten:\n autoSize = config.autoSize || false,\n printHeaders = config.printHeaders === false ? false : true,\n fontSize =\n config.css && typeof config.css[\"font-size\"] !== \"undefined\"\n ? config.css[\"font-size\"] * 16\n : config.fontSize || 12,\n margins =\n config.margins ||\n Object.assign({ width: this.getPageWidth() }, NO_MARGINS),\n padding = typeof config.padding === \"number\" ? config.padding : 3,\n headerBackgroundColor = config.headerBackgroundColor || \"#c8c8c8\",\n headerTextColor = config.headerTextColor || \"#000\";\n\n _reset.call(this);\n\n this.internal.__cell__.printHeaders = printHeaders;\n this.internal.__cell__.margins = margins;\n this.internal.__cell__.table_font_size = fontSize;\n this.internal.__cell__.padding = padding;\n this.internal.__cell__.headerBackgroundColor = headerBackgroundColor;\n this.internal.__cell__.headerTextColor = headerTextColor;\n this.setFontSize(fontSize);\n\n // Set header values\n if (headers === undefined || headers === null) {\n // No headers defined so we derive from data\n headerNames = Object.keys(data[0]);\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n } else if (Array.isArray(headers) && typeof headers[0] === \"object\") {\n headerNames = headers.map(function(header) {\n return header.name;\n });\n headerLabels = headers.map(function(header) {\n return header.prompt || header.name || \"\";\n });\n headerAligns = headers.map(function(header) {\n return header.align || \"left\";\n });\n // Split header configs into names and prompts\n for (i = 0; i < headers.length; i += 1) {\n columnWidths[headers[i].name] = headers[i].width * px2pt;\n }\n } else if (Array.isArray(headers) && typeof headers[0] === \"string\") {\n headerNames = headers;\n headerLabels = headerNames;\n headerAligns = headerNames.map(function() {\n return \"left\";\n });\n }\n\n if (\n autoSize ||\n (Array.isArray(headers) && typeof headers[0] === \"string\")\n ) {\n var headerName;\n for (i = 0; i < headerNames.length; i += 1) {\n headerName = headerNames[i];\n\n // Create a matrix of columns e.g., {column_title: [row1_Record, row2_Record]}\n\n columnMatrix[headerName] = data.map(function(rec) {\n return rec[headerName];\n });\n\n // get header width\n this.setFont(undefined, \"bold\");\n columnMinWidths.push(\n this.getTextDimensions(headerLabels[i], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n column = columnMatrix[headerName];\n\n // get cell widths\n this.setFont(undefined, \"normal\");\n for (j = 0; j < column.length; j += 1) {\n columnMinWidths.push(\n this.getTextDimensions(column[j], {\n fontSize: this.internal.__cell__.table_font_size,\n scaleFactor: this.internal.scaleFactor\n }).w\n );\n }\n\n // get final column width\n columnWidths[headerName] =\n Math.max.apply(null, columnMinWidths) + padding + padding;\n\n //have to reset\n columnMinWidths = [];\n }\n }\n\n // -- Construct the table\n\n if (printHeaders) {\n var row = {};\n for (i = 0; i < headerNames.length; i += 1) {\n row[headerNames[i]] = {};\n row[headerNames[i]].text = headerLabels[i];\n row[headerNames[i]].align = headerAligns[i];\n }\n\n var rowHeight = calculateLineHeight.call(this, row, columnWidths);\n\n // Construct the header row\n tableHeaderConfigs = headerNames.map(function(value) {\n return new Cell(\n x,\n y,\n columnWidths[value],\n rowHeight,\n row[value].text,\n undefined,\n row[value].align\n );\n });\n\n // Store the table header config\n this.setTableHeaderRow(tableHeaderConfigs);\n\n // Print the header for the start of the table\n this.printHeaderRow(1, false);\n }\n\n // Construct the data rows\n\n var align = headers.reduce(function(pv, cv) {\n pv[cv.name] = cv.align;\n return pv;\n }, {});\n for (i = 0; i < data.length; i += 1) {\n if (\"rowStart\" in config && config.rowStart instanceof Function) {\n config.rowStart(\n {\n row: i,\n data: data[i]\n },\n this\n );\n }\n var lineHeight = calculateLineHeight.call(this, data[i], columnWidths);\n\n for (j = 0; j < headerNames.length; j += 1) {\n var cellData = data[i][headerNames[j]];\n if (\"cellStart\" in config && config.cellStart instanceof Function) {\n config.cellStart(\n {\n row: i,\n col: j,\n data: cellData\n },\n this\n );\n }\n cell.call(\n this,\n new Cell(\n x,\n y,\n columnWidths[headerNames[j]],\n lineHeight,\n cellData,\n i + 2,\n align[headerNames[j]]\n )\n );\n }\n }\n this.internal.__cell__.table_x = x;\n this.internal.__cell__.table_y = y;\n return this;\n };\n\n /**\n * Calculate the height for containing the highest column\n *\n * @name calculateLineHeight\n * @function\n * @param {Object[]} model is the line of data we want to calculate the height of\n * @param {Integer[]} columnWidths is size of each column\n * @returns {number} lineHeight\n * @private\n */\n var calculateLineHeight = function calculateLineHeight(model, columnWidths) {\n var padding = this.internal.__cell__.padding;\n var fontSize = this.internal.__cell__.table_font_size;\n var scaleFactor = this.internal.scaleFactor;\n\n return Object.keys(model)\n .map(function(key) {\n var value = model[key];\n return this.splitTextToSize(\n value.hasOwnProperty(\"text\") ? value.text : value,\n columnWidths[key] - padding - padding\n );\n }, this)\n .map(function(value) {\n return (\n (this.getLineHeightFactor() * value.length * fontSize) / scaleFactor +\n padding +\n padding\n );\n }, this)\n .reduce(function(pv, cv) {\n return Math.max(pv, cv);\n }, 0);\n };\n\n /**\n * Store the config for outputting a table header\n *\n * @name setTableHeaderRow\n * @function\n * @param {Object[]} config\n * An array of cell configs that would define a header row: Each config matches the config used by jsPDFAPI.cell\n * except the lineNumber parameter is excluded\n */\n jsPDFAPI.setTableHeaderRow = function(config) {\n _initialize.call(this);\n this.internal.__cell__.tableHeaderRow = config;\n };\n\n /**\n * Output the store header row\n *\n * @name printHeaderRow\n * @function\n * @param {number} lineNumber The line number to output the header at\n * @param {boolean} new_page\n */\n jsPDFAPI.printHeaderRow = function(lineNumber, new_page) {\n _initialize.call(this);\n if (!this.internal.__cell__.tableHeaderRow) {\n throw new Error(\"Property tableHeaderRow does not exist.\");\n }\n\n var tableHeaderCell;\n\n printingHeaderRow = true;\n if (typeof this.internal.__cell__.headerFunction === \"function\") {\n var position = this.internal.__cell__.headerFunction(\n this,\n this.internal.__cell__.pages\n );\n this.internal.__cell__.lastCell = new Cell(\n position[0],\n position[1],\n position[2],\n position[3],\n undefined,\n -1\n );\n }\n this.setFont(undefined, \"bold\");\n\n var tempHeaderConf = [];\n for (var i = 0; i < this.internal.__cell__.tableHeaderRow.length; i += 1) {\n tableHeaderCell = this.internal.__cell__.tableHeaderRow[i].clone();\n if (new_page) {\n tableHeaderCell.y = this.internal.__cell__.margins.top || 0;\n tempHeaderConf.push(tableHeaderCell);\n }\n tableHeaderCell.lineNumber = lineNumber;\n var currentTextColor = this.getTextColor();\n this.setTextColor(this.internal.__cell__.headerTextColor);\n this.setFillColor(this.internal.__cell__.headerBackgroundColor);\n cell.call(this, tableHeaderCell);\n this.setTextColor(currentTextColor);\n }\n if (tempHeaderConf.length > 0) {\n this.setTableHeaderRow(tempHeaderConf);\n }\n this.setFont(undefined, \"normal\");\n printingHeaderRow = false;\n };\n})(jsPDF.API);\n","/* eslint-disable no-fallthrough */\r\n/* eslint-disable no-console */\r\n/**\r\n * @license\r\n * jsPDF Context2D PlugIn Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\r\n *\r\n * Licensed under the MIT License. http://opensource.org/licenses/mit-license\r\n */\r\n\r\nimport { jsPDF } from \"../jspdf.js\";\r\nimport { RGBColor } from \"../libs/rgbcolor.js\";\r\nimport { console } from \"../libs/console.js\";\r\nimport {\r\n buildFontFaceMap,\r\n parseFontFamily,\r\n resolveFontFace\r\n} from \"../libs/fontFace.js\";\r\n\r\n/**\r\n * This plugin mimics the HTML5 CanvasRenderingContext2D.\r\n *\r\n * The goal is to provide a way for current canvas implementations to print directly to a PDF.\r\n *\r\n * @name context2d\r\n * @module\r\n */\r\n(function(jsPDFAPI) {\r\n \"use strict\";\r\n var ContextLayer = function(ctx) {\r\n ctx = ctx || {};\r\n this.isStrokeTransparent = ctx.isStrokeTransparent || false;\r\n this.strokeOpacity = ctx.strokeOpacity || 1;\r\n this.strokeStyle = ctx.strokeStyle || \"#000000\";\r\n this.fillStyle = ctx.fillStyle || \"#000000\";\r\n this.isFillTransparent = ctx.isFillTransparent || false;\r\n this.fillOpacity = ctx.fillOpacity || 1;\r\n this.font = ctx.font || \"10px sans-serif\";\r\n this.textBaseline = ctx.textBaseline || \"alphabetic\";\r\n this.textAlign = ctx.textAlign || \"left\";\r\n this.lineWidth = ctx.lineWidth || 1;\r\n this.lineJoin = ctx.lineJoin || \"miter\";\r\n this.lineCap = ctx.lineCap || \"butt\";\r\n this.path = ctx.path || [];\r\n this.transform =\r\n typeof ctx.transform !== \"undefined\"\r\n ? ctx.transform.clone()\r\n : new Matrix();\r\n this.globalCompositeOperation = ctx.globalCompositeOperation || \"normal\";\r\n this.globalAlpha = ctx.globalAlpha || 1.0;\r\n this.clip_path = ctx.clip_path || [];\r\n this.currentPoint = ctx.currentPoint || new Point();\r\n this.miterLimit = ctx.miterLimit || 10.0;\r\n this.lastPoint = ctx.lastPoint || new Point();\r\n this.lineDashOffset = ctx.lineDashOffset || 0.0;\r\n this.lineDash = ctx.lineDash || [];\r\n this.margin = ctx.margin || [0, 0, 0, 0];\r\n this.prevPageLastElemOffset = ctx.prevPageLastElemOffset || 0;\r\n\r\n this.ignoreClearRect =\r\n typeof ctx.ignoreClearRect === \"boolean\" ? ctx.ignoreClearRect : true;\r\n return this;\r\n };\r\n\r\n //stub\r\n var f2,\r\n getHorizontalCoordinateString,\r\n getVerticalCoordinateString,\r\n getHorizontalCoordinate,\r\n getVerticalCoordinate,\r\n Point,\r\n Rectangle,\r\n Matrix,\r\n _ctx;\r\n jsPDFAPI.events.push([\r\n \"initialized\",\r\n function() {\r\n this.context2d = new Context2D(this);\r\n\r\n f2 = this.internal.f2;\r\n getHorizontalCoordinateString = this.internal.getCoordinateString;\r\n getVerticalCoordinateString = this.internal.getVerticalCoordinateString;\r\n getHorizontalCoordinate = this.internal.getHorizontalCoordinate;\r\n getVerticalCoordinate = this.internal.getVerticalCoordinate;\r\n Point = this.internal.Point;\r\n Rectangle = this.internal.Rectangle;\r\n Matrix = this.internal.Matrix;\r\n _ctx = new ContextLayer();\r\n }\r\n ]);\r\n\r\n var Context2D = function(pdf) {\r\n Object.defineProperty(this, \"canvas\", {\r\n get: function() {\r\n return { parentNode: false, style: false };\r\n }\r\n });\r\n\r\n var _pdf = pdf;\r\n Object.defineProperty(this, \"pdf\", {\r\n get: function() {\r\n return _pdf;\r\n }\r\n });\r\n\r\n var _pageWrapXEnabled = false;\r\n /**\r\n * @name pageWrapXEnabled\r\n * @type {boolean}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"pageWrapXEnabled\", {\r\n get: function() {\r\n return _pageWrapXEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapXEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _pageWrapYEnabled = false;\r\n /**\r\n * @name pageWrapYEnabled\r\n * @type {boolean}\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"pageWrapYEnabled\", {\r\n get: function() {\r\n return _pageWrapYEnabled;\r\n },\r\n set: function(value) {\r\n _pageWrapYEnabled = Boolean(value);\r\n }\r\n });\r\n\r\n var _posX = 0;\r\n /**\r\n * @name posX\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posX\", {\r\n get: function() {\r\n return _posX;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posX = value;\r\n }\r\n }\r\n });\r\n\r\n var _posY = 0;\r\n /**\r\n * @name posY\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"posY\", {\r\n get: function() {\r\n return _posY;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n _posY = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Gets or sets the page margin when using auto paging. Has no effect when {@link autoPaging} is off.\r\n * @name margin\r\n * @type {number|number[]}\r\n * @default [0, 0, 0, 0]\r\n */\r\n Object.defineProperty(this, \"margin\", {\r\n get: function() {\r\n return _ctx.margin;\r\n },\r\n set: function(value) {\r\n var margin;\r\n if (typeof value === \"number\") {\r\n margin = [value, value, value, value];\r\n } else {\r\n margin = new Array(4);\r\n margin[0] = value[0];\r\n margin[1] = value.length >= 2 ? value[1] : margin[0];\r\n margin[2] = value.length >= 3 ? value[2] : margin[0];\r\n margin[3] = value.length >= 4 ? value[3] : margin[1];\r\n }\r\n _ctx.margin = margin;\r\n }\r\n });\r\n\r\n var _autoPaging = false;\r\n /**\r\n * Gets or sets the auto paging mode. When auto paging is enabled, the context2d will automatically draw on the\r\n * next page if a shape or text chunk doesn't fit entirely on the current page. The context2d will create new\r\n * pages if required.\r\n *\r\n * Context2d supports different modes:\r\n *
      \r\n *
    • \r\n * false: Auto paging is disabled.\r\n *
    • \r\n *
    • \r\n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\r\n * slice text in half, making it difficult to read.\r\n *
    • \r\n *
    • \r\n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\r\n * mostly of a single column of text.\r\n *
    • \r\n *
    \r\n * @name Context2D#autoPaging\r\n * @type {boolean|\"slice\"|\"text\"}\r\n * @default false\r\n */\r\n Object.defineProperty(this, \"autoPaging\", {\r\n get: function() {\r\n return _autoPaging;\r\n },\r\n set: function(value) {\r\n _autoPaging = value;\r\n }\r\n });\r\n\r\n var lastBreak = 0;\r\n /**\r\n * @name lastBreak\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"lastBreak\", {\r\n get: function() {\r\n return lastBreak;\r\n },\r\n set: function(value) {\r\n lastBreak = value;\r\n }\r\n });\r\n\r\n var pageBreaks = [];\r\n /**\r\n * Y Position of page breaks.\r\n * @name pageBreaks\r\n * @type {number}\r\n * @default 0\r\n */\r\n Object.defineProperty(this, \"pageBreaks\", {\r\n get: function() {\r\n return pageBreaks;\r\n },\r\n set: function(value) {\r\n pageBreaks = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctx\r\n * @type {object}\r\n * @default {}\r\n */\r\n Object.defineProperty(this, \"ctx\", {\r\n get: function() {\r\n return _ctx;\r\n },\r\n set: function(value) {\r\n if (value instanceof ContextLayer) {\r\n _ctx = value;\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * @name path\r\n * @type {array}\r\n * @default []\r\n */\r\n Object.defineProperty(this, \"path\", {\r\n get: function() {\r\n return _ctx.path;\r\n },\r\n set: function(value) {\r\n _ctx.path = value;\r\n }\r\n });\r\n\r\n /**\r\n * @name ctxStack\r\n * @type {array}\r\n * @default []\r\n */\r\n var _ctxStack = [];\r\n Object.defineProperty(this, \"ctxStack\", {\r\n get: function() {\r\n return _ctxStack;\r\n },\r\n set: function(value) {\r\n _ctxStack = value;\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used to fill the drawing\r\n *\r\n * @name fillStyle\r\n * @default #000000\r\n * @property {(color|gradient|pattern)} value The color of the drawing. Default value is #000000
    \r\n * A gradient object (linear or radial) used to fill the drawing (not supported by context2d)
    \r\n * A pattern object to use to fill the drawing (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"fillStyle\", {\r\n get: function() {\r\n return this.ctx.fillStyle;\r\n },\r\n set: function(value) {\r\n var rgba;\r\n rgba = getRGBA(value);\r\n\r\n this.ctx.fillStyle = rgba.style;\r\n this.ctx.isFillTransparent = rgba.a === 0;\r\n this.ctx.fillOpacity = rgba.a;\r\n\r\n this.pdf.setFillColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n this.pdf.setTextColor(rgba.r, rgba.g, rgba.b, { a: rgba.a });\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the color, gradient, or pattern used for strokes\r\n *\r\n * @name strokeStyle\r\n * @default #000000\r\n * @property {color} color A CSS color value that indicates the stroke color of the drawing. Default value is #000000 (not supported by context2d)\r\n * @property {gradient} gradient A gradient object (linear or radial) used to create a gradient stroke (not supported by context2d)\r\n * @property {pattern} pattern A pattern object used to create a pattern stroke (not supported by context2d)\r\n */\r\n Object.defineProperty(this, \"strokeStyle\", {\r\n get: function() {\r\n return this.ctx.strokeStyle;\r\n },\r\n set: function(value) {\r\n var rgba = getRGBA(value);\r\n\r\n this.ctx.strokeStyle = rgba.style;\r\n this.ctx.isStrokeTransparent = rgba.a === 0;\r\n this.ctx.strokeOpacity = rgba.a;\r\n\r\n if (rgba.a === 0) {\r\n this.pdf.setDrawColor(255, 255, 255);\r\n } else if (rgba.a === 1) {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n } else {\r\n this.pdf.setDrawColor(rgba.r, rgba.g, rgba.b);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the style of the end caps for a line\r\n *\r\n * @name lineCap\r\n * @default butt\r\n * @property {(butt|round|square)} lineCap butt A flat edge is added to each end of the line
    \r\n * round A rounded end cap is added to each end of the line
    \r\n * square A square end cap is added to each end of the line
    \r\n */\r\n Object.defineProperty(this, \"lineCap\", {\r\n get: function() {\r\n return this.ctx.lineCap;\r\n },\r\n set: function(value) {\r\n if ([\"butt\", \"round\", \"square\"].indexOf(value) !== -1) {\r\n this.ctx.lineCap = value;\r\n this.pdf.setLineCap(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the current line width\r\n *\r\n * @name lineWidth\r\n * @default 1\r\n * @property {number} lineWidth The current line width, in pixels\r\n */\r\n Object.defineProperty(this, \"lineWidth\", {\r\n get: function() {\r\n return this.ctx.lineWidth;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.lineWidth = value;\r\n this.pdf.setLineWidth(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * Sets or returns the type of corner created, when two lines meet\r\n */\r\n Object.defineProperty(this, \"lineJoin\", {\r\n get: function() {\r\n return this.ctx.lineJoin;\r\n },\r\n set: function(value) {\r\n if ([\"bevel\", \"round\", \"miter\"].indexOf(value) !== -1) {\r\n this.ctx.lineJoin = value;\r\n this.pdf.setLineJoin(value);\r\n }\r\n }\r\n });\r\n\r\n /**\r\n * A number specifying the miter limit ratio in coordinate space units. Zero, negative, Infinity, and NaN values are ignored. The default value is 10.0.\r\n *\r\n * @name miterLimit\r\n * @default 10\r\n */\r\n Object.defineProperty(this, \"miterLimit\", {\r\n get: function() {\r\n return this.ctx.miterLimit;\r\n },\r\n set: function(value) {\r\n if (!isNaN(value)) {\r\n this.ctx.miterLimit = value;\r\n this.pdf.setMiterLimit(value);\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textBaseline\", {\r\n get: function() {\r\n return this.ctx.textBaseline;\r\n },\r\n set: function(value) {\r\n this.ctx.textBaseline = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"textAlign\", {\r\n get: function() {\r\n return this.ctx.textAlign;\r\n },\r\n set: function(value) {\r\n if ([\"right\", \"end\", \"center\", \"left\", \"start\"].indexOf(value) !== -1) {\r\n this.ctx.textAlign = value;\r\n }\r\n }\r\n });\r\n\r\n var _fontFaceMap = null;\r\n\r\n function getFontFaceMap(pdf, fontFaces) {\r\n if (_fontFaceMap === null) {\r\n var fontMap = pdf.getFontList();\r\n\r\n var convertedFontFaces = convertToFontFaces(fontMap);\r\n\r\n _fontFaceMap = buildFontFaceMap(convertedFontFaces.concat(fontFaces));\r\n }\r\n\r\n return _fontFaceMap;\r\n }\r\n\r\n function convertToFontFaces(fontMap) {\r\n var fontFaces = [];\r\n\r\n Object.keys(fontMap).forEach(function(family) {\r\n var styles = fontMap[family];\r\n\r\n styles.forEach(function(style) {\r\n var fontFace = null;\r\n\r\n switch (style) {\r\n case \"bold\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\"\r\n };\r\n break;\r\n\r\n case \"italic\":\r\n fontFace = {\r\n family: family,\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"bolditalic\":\r\n fontFace = {\r\n family: family,\r\n weight: \"bold\",\r\n style: \"italic\"\r\n };\r\n break;\r\n\r\n case \"\":\r\n case \"normal\":\r\n fontFace = {\r\n family: family\r\n };\r\n break;\r\n }\r\n\r\n // If font-face is still null here, it is a font with some styling we don't recognize and\r\n // cannot map or it is a font added via the fontFaces option of .html().\r\n if (fontFace !== null) {\r\n fontFace.ref = {\r\n name: family,\r\n style: style\r\n };\r\n\r\n fontFaces.push(fontFace);\r\n }\r\n });\r\n });\r\n\r\n return fontFaces;\r\n }\r\n\r\n var _fontFaces = null;\r\n /**\r\n * A map of available font-faces, as passed in the options of\r\n * .html(). If set a limited implementation of the font style matching\r\n * algorithm defined by https://www.w3.org/TR/css-fonts-3/#font-matching-algorithm\r\n * will be used. If not set it will fallback to previous behavior.\r\n */\r\n\r\n Object.defineProperty(this, \"fontFaces\", {\r\n get: function() {\r\n return _fontFaces;\r\n },\r\n set: function(value) {\r\n _fontFaceMap = null;\r\n _fontFaces = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"font\", {\r\n get: function() {\r\n return this.ctx.font;\r\n },\r\n set: function(value) {\r\n this.ctx.font = value;\r\n var rx, matches;\r\n\r\n //source: https://stackoverflow.com/a/10136041\r\n // eslint-disable-next-line no-useless-escape\r\n rx = /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$/i;\r\n matches = rx.exec(value);\r\n if (matches !== null) {\r\n var fontStyle = matches[1];\r\n var fontVariant = matches[2];\r\n var fontWeight = matches[3];\r\n var fontSize = matches[4];\r\n var lineHeight = matches[5];\r\n var fontFamily = matches[6];\r\n } else {\r\n return;\r\n }\r\n var rxFontSize = /^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i;\r\n var fontSizeUnit = rxFontSize.exec(fontSize)[2];\r\n\r\n if (\"px\" === fontSizeUnit) {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n } else if (\"em\" === fontSizeUnit) {\r\n fontSize = Math.floor(parseFloat(fontSize) * this.pdf.getFontSize());\r\n } else {\r\n fontSize = Math.floor(\r\n parseFloat(fontSize) * this.pdf.internal.scaleFactor\r\n );\r\n }\r\n\r\n this.pdf.setFontSize(fontSize);\r\n var parts = parseFontFamily(fontFamily);\r\n\r\n if (this.fontFaces) {\r\n var fontFaceMap = getFontFaceMap(this.pdf, this.fontFaces);\r\n\r\n var rules = parts.map(function(ff) {\r\n return {\r\n family: ff,\r\n stretch: \"normal\", // TODO: Extract font-stretch from font rule (perhaps write proper parser for it?)\r\n weight: fontWeight,\r\n style: fontStyle\r\n };\r\n });\r\n\r\n var font = resolveFontFace(fontFaceMap, rules);\r\n this.pdf.setFont(font.ref.name, font.ref.style);\r\n return;\r\n }\r\n\r\n var style = \"\";\r\n if (\r\n fontWeight === \"bold\" ||\r\n parseInt(fontWeight, 10) >= 700 ||\r\n fontStyle === \"bold\"\r\n ) {\r\n style = \"bold\";\r\n }\r\n\r\n if (fontStyle === \"italic\") {\r\n style += \"italic\";\r\n }\r\n\r\n if (style.length === 0) {\r\n style = \"normal\";\r\n }\r\n var jsPdfFontName = \"\";\r\n\r\n var fallbackFonts = {\r\n arial: \"Helvetica\",\r\n Arial: \"Helvetica\",\r\n verdana: \"Helvetica\",\r\n Verdana: \"Helvetica\",\r\n helvetica: \"Helvetica\",\r\n Helvetica: \"Helvetica\",\r\n \"sans-serif\": \"Helvetica\",\r\n fixed: \"Courier\",\r\n monospace: \"Courier\",\r\n terminal: \"Courier\",\r\n cursive: \"Times\",\r\n fantasy: \"Times\",\r\n serif: \"Times\"\r\n };\r\n\r\n for (var i = 0; i < parts.length; i++) {\r\n if (\r\n this.pdf.internal.getFont(parts[i], style, {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n break;\r\n } else if (\r\n style === \"bolditalic\" &&\r\n this.pdf.internal.getFont(parts[i], \"bold\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"bold\";\r\n } else if (\r\n this.pdf.internal.getFont(parts[i], \"normal\", {\r\n noFallback: true,\r\n disableWarning: true\r\n }) !== undefined\r\n ) {\r\n jsPdfFontName = parts[i];\r\n style = \"normal\";\r\n break;\r\n }\r\n }\r\n if (jsPdfFontName === \"\") {\r\n for (var j = 0; j < parts.length; j++) {\r\n if (fallbackFonts[parts[j]]) {\r\n jsPdfFontName = fallbackFonts[parts[j]];\r\n break;\r\n }\r\n }\r\n }\r\n jsPdfFontName = jsPdfFontName === \"\" ? \"Times\" : jsPdfFontName;\r\n this.pdf.setFont(jsPdfFontName, style);\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalCompositeOperation\", {\r\n get: function() {\r\n return this.ctx.globalCompositeOperation;\r\n },\r\n set: function(value) {\r\n this.ctx.globalCompositeOperation = value;\r\n }\r\n });\r\n\r\n Object.defineProperty(this, \"globalAlpha\", {\r\n get: function() {\r\n return this.ctx.globalAlpha;\r\n },\r\n set: function(value) {\r\n this.ctx.globalAlpha = value;\r\n }\r\n });\r\n\r\n /**\r\n * A float specifying the amount of the line dash offset. The default value is 0.0.\r\n *\r\n * @name lineDashOffset\r\n * @default 0.0\r\n */\r\n Object.defineProperty(this, \"lineDashOffset\", {\r\n get: function() {\r\n return this.ctx.lineDashOffset;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDashOffset = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"lineDash\", {\r\n get: function() {\r\n return this.ctx.lineDash;\r\n },\r\n set: function(value) {\r\n this.ctx.lineDash = value;\r\n setLineDash.call(this);\r\n }\r\n });\r\n\r\n // Not HTML API\r\n Object.defineProperty(this, \"ignoreClearRect\", {\r\n get: function() {\r\n return this.ctx.ignoreClearRect;\r\n },\r\n set: function(value) {\r\n this.ctx.ignoreClearRect = Boolean(value);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets the line dash pattern used when stroking lines.\r\n * @name setLineDash\r\n * @function\r\n * @description It uses an array of values that specify alternating lengths of lines and gaps which describe the pattern.\r\n */\r\n Context2D.prototype.setLineDash = function(dashArray) {\r\n this.lineDash = dashArray;\r\n };\r\n\r\n /**\r\n * gets the current line dash pattern.\r\n * @name getLineDash\r\n * @function\r\n * @returns {Array} An Array of numbers that specify distances to alternately draw a line and a gap (in coordinate space units). If the number, when setting the elements, is odd, the elements of the array get copied and concatenated. For example, setting the line dash to [5, 15, 25] will result in getting back [5, 15, 25, 5, 15, 25].\r\n */\r\n Context2D.prototype.getLineDash = function() {\r\n if (this.lineDash.length % 2) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getLineDash#return_value\r\n return this.lineDash.concat(this.lineDash);\r\n } else {\r\n // The copied value is returned to prevent contamination from outside.\r\n return this.lineDash.slice();\r\n }\r\n };\r\n\r\n Context2D.prototype.fill = function() {\r\n pathPreProcess.call(this, \"fill\", false);\r\n };\r\n\r\n /**\r\n * Actually draws the path you have defined\r\n *\r\n * @name stroke\r\n * @function\r\n * @description The stroke() method actually draws the path you have defined with all those moveTo() and lineTo() methods. The default color is black.\r\n */\r\n Context2D.prototype.stroke = function() {\r\n pathPreProcess.call(this, \"stroke\", false);\r\n };\r\n\r\n /**\r\n * Begins a path, or resets the current\r\n *\r\n * @name beginPath\r\n * @function\r\n * @description The beginPath() method begins a path, or resets the current path.\r\n */\r\n Context2D.prototype.beginPath = function() {\r\n this.path = [\r\n {\r\n type: \"begin\"\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Moves the path to the specified point in the canvas, without creating a line\r\n *\r\n * @name moveTo\r\n * @function\r\n * @param x {Number} The x-coordinate of where to move the path to\r\n * @param y {Number} The y-coordinate of where to move the path to\r\n */\r\n Context2D.prototype.moveTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.moveTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"mt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(x, y);\r\n };\r\n\r\n /**\r\n * Creates a path from the current point back to the starting point\r\n *\r\n * @name closePath\r\n * @function\r\n * @description The closePath() method creates a path from the current point back to the starting point.\r\n */\r\n Context2D.prototype.closePath = function() {\r\n var pathBegin = new Point(0, 0);\r\n var i = 0;\r\n for (i = this.path.length - 1; i !== -1; i--) {\r\n if (this.path[i].type === \"begin\") {\r\n if (\r\n typeof this.path[i + 1] === \"object\" &&\r\n typeof this.path[i + 1].x === \"number\"\r\n ) {\r\n pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y);\r\n break;\r\n }\r\n }\r\n }\r\n this.path.push({\r\n type: \"close\"\r\n });\r\n this.ctx.lastPoint = new Point(pathBegin.x, pathBegin.y);\r\n };\r\n\r\n /**\r\n * Adds a new point and creates a line to that point from the last specified point in the canvas\r\n *\r\n * @name lineTo\r\n * @function\r\n * @param x The x-coordinate of where to create the line to\r\n * @param y The y-coordinate of where to create the line to\r\n * @description The lineTo() method adds a new point and creates a line TO that point FROM the last specified point in the canvas (this method does not draw the line).\r\n */\r\n Context2D.prototype.lineTo = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.lineTo: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");\r\n }\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n\r\n this.path.push({\r\n type: \"lt\",\r\n x: pt.x,\r\n y: pt.y\r\n });\r\n this.ctx.lastPoint = new Point(pt.x, pt.y);\r\n };\r\n\r\n /**\r\n * Clips a region of any shape and size from the original canvas\r\n *\r\n * @name clip\r\n * @function\r\n * @description The clip() method clips a region of any shape and size from the original canvas.\r\n */\r\n Context2D.prototype.clip = function() {\r\n this.ctx.clip_path = JSON.parse(JSON.stringify(this.path));\r\n pathPreProcess.call(this, null, true);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name quadraticCurveTo\r\n * @function\r\n * @param cpx {Number} The x-coordinate of the Bézier control point\r\n * @param cpy {Number} The y-coordinate of the Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The quadraticCurveTo() method adds a point to the current path by using the specified control points that represent a quadratic Bézier curve.

    A quadratic Bézier curve requires two points. The first point is a control point that is used in the quadratic Bézier calculation and the second point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {\r\n if (isNaN(x) || isNaN(y) || isNaN(cpx) || isNaN(cpy)) {\r\n console.error(\r\n \"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\"\r\n );\r\n }\r\n\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cpx, cpy));\r\n\r\n this.path.push({\r\n type: \"qct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates a cubic Bézier curve\r\n *\r\n * @name bezierCurveTo\r\n * @function\r\n * @param cp1x {Number} The x-coordinate of the first Bézier control point\r\n * @param cp1y {Number} The y-coordinate of the first Bézier control point\r\n * @param cp2x {Number} The x-coordinate of the second Bézier control point\r\n * @param cp2y {Number} The y-coordinate of the second Bézier control point\r\n * @param x {Number} The x-coordinate of the ending point\r\n * @param y {Number} The y-coordinate of the ending point\r\n * @description The bezierCurveTo() method adds a point to the current path by using the specified control points that represent a cubic Bézier curve.

    A cubic bezier curve requires three points. The first two points are control points that are used in the cubic Bézier calculation and the last point is the ending point for the curve. The starting point for the curve is the last point in the current path. If a path does not exist, use the beginPath() and moveTo() methods to define a starting point.\r\n */\r\n Context2D.prototype.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(cp1x) ||\r\n isNaN(cp1y) ||\r\n isNaN(cp2x) ||\r\n isNaN(cp2y)\r\n ) {\r\n console.error(\r\n \"jsPDF.context2d.bezierCurveTo: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\"\r\n );\r\n }\r\n var pt0 = this.ctx.transform.applyToPoint(new Point(x, y));\r\n var pt1 = this.ctx.transform.applyToPoint(new Point(cp1x, cp1y));\r\n var pt2 = this.ctx.transform.applyToPoint(new Point(cp2x, cp2y));\r\n\r\n this.path.push({\r\n type: \"bct\",\r\n x1: pt1.x,\r\n y1: pt1.y,\r\n x2: pt2.x,\r\n y2: pt2.y,\r\n x: pt0.x,\r\n y: pt0.y\r\n });\r\n this.ctx.lastPoint = new Point(pt0.x, pt0.y);\r\n };\r\n\r\n /**\r\n * Creates an arc/curve (used to create circles, or parts of circles)\r\n *\r\n * @name arc\r\n * @function\r\n * @param x {Number} The x-coordinate of the center of the circle\r\n * @param y {Number} The y-coordinate of the center of the circle\r\n * @param radius {Number} The radius of the circle\r\n * @param startAngle {Number} The starting angle, in radians (0 is at the 3 o'clock position of the arc's circle)\r\n * @param endAngle {Number} The ending angle, in radians\r\n * @param counterclockwise {Boolean} Optional. Specifies whether the drawing should be counterclockwise or clockwise. False is default, and indicates clockwise, while true indicates counter-clockwise.\r\n * @description The arc() method creates an arc/curve (used to create circles, or parts of circles).\r\n */\r\n Context2D.prototype.arc = function(\r\n x,\r\n y,\r\n radius,\r\n startAngle,\r\n endAngle,\r\n counterclockwise\r\n ) {\r\n if (\r\n isNaN(x) ||\r\n isNaN(y) ||\r\n isNaN(radius) ||\r\n isNaN(startAngle) ||\r\n isNaN(endAngle)\r\n ) {\r\n console.error(\"jsPDF.context2d.arc: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");\r\n }\r\n counterclockwise = Boolean(counterclockwise);\r\n\r\n if (!this.ctx.transform.isIdentity) {\r\n var xpt = this.ctx.transform.applyToPoint(new Point(x, y));\r\n x = xpt.x;\r\n y = xpt.y;\r\n\r\n var x_radPt = this.ctx.transform.applyToPoint(new Point(0, radius));\r\n var x_radPt0 = this.ctx.transform.applyToPoint(new Point(0, 0));\r\n radius = Math.sqrt(\r\n Math.pow(x_radPt.x - x_radPt0.x, 2) +\r\n Math.pow(x_radPt.y - x_radPt0.y, 2)\r\n );\r\n }\r\n if (Math.abs(endAngle - startAngle) >= 2 * Math.PI) {\r\n startAngle = 0;\r\n endAngle = 2 * Math.PI;\r\n }\r\n\r\n this.path.push({\r\n type: \"arc\",\r\n x: x,\r\n y: y,\r\n radius: radius,\r\n startAngle: startAngle,\r\n endAngle: endAngle,\r\n counterclockwise: counterclockwise\r\n });\r\n // this.ctx.lastPoint(new Point(pt.x,pt.y));\r\n };\r\n\r\n /**\r\n * Creates an arc/curve between two tangents\r\n *\r\n * @name arcTo\r\n * @function\r\n * @param x1 {Number} The x-coordinate of the first tangent\r\n * @param y1 {Number} The y-coordinate of the first tangent\r\n * @param x2 {Number} The x-coordinate of the second tangent\r\n * @param y2 {Number} The y-coordinate of the second tangent\r\n * @param radius The radius of the arc\r\n * @description The arcTo() method creates an arc/curve between two tangents on the canvas.\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n Context2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {\r\n throw new Error(\"arcTo not implemented.\");\r\n };\r\n\r\n /**\r\n * Creates a rectangle\r\n *\r\n * @name rect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The rect() method creates a rectangle.\r\n */\r\n Context2D.prototype.rect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.rect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");\r\n }\r\n this.moveTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x + w, y + h);\r\n this.lineTo(x, y + h);\r\n this.lineTo(x, y);\r\n this.lineTo(x + w, y);\r\n this.lineTo(x, y);\r\n };\r\n\r\n /**\r\n * Draws a \"filled\" rectangle\r\n *\r\n * @name fillRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The fillRect() method draws a \"filled\" rectangle. The default color of the fill is black.\r\n */\r\n Context2D.prototype.fillRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.fillRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");\r\n }\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n var tmp = {};\r\n if (this.lineCap !== \"butt\") {\r\n tmp.lineCap = this.lineCap;\r\n this.lineCap = \"butt\";\r\n }\r\n if (this.lineJoin !== \"miter\") {\r\n tmp.lineJoin = this.lineJoin;\r\n this.lineJoin = \"miter\";\r\n }\r\n\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.fill();\r\n\r\n if (tmp.hasOwnProperty(\"lineCap\")) {\r\n this.lineCap = tmp.lineCap;\r\n }\r\n if (tmp.hasOwnProperty(\"lineJoin\")) {\r\n this.lineJoin = tmp.lineJoin;\r\n }\r\n };\r\n\r\n /**\r\n * Draws a rectangle (no fill)\r\n *\r\n * @name strokeRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle, in pixels\r\n * @param h {Number} The height of the rectangle, in pixels\r\n * @description The strokeRect() method draws a rectangle (no fill). The default color of the stroke is black.\r\n */\r\n Context2D.prototype.strokeRect = function strokeRect(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n this.beginPath();\r\n this.rect(x, y, w, h);\r\n this.stroke();\r\n };\r\n\r\n /**\r\n * Clears the specified pixels within a given rectangle\r\n *\r\n * @name clearRect\r\n * @function\r\n * @param x {Number} The x-coordinate of the upper-left corner of the rectangle\r\n * @param y {Number} The y-coordinate of the upper-left corner of the rectangle\r\n * @param w {Number} The width of the rectangle to clear, in pixels\r\n * @param h {Number} The height of the rectangle to clear, in pixels\r\n * @description We cannot clear PDF commands that were already written to PDF, so we use white instead.
    \r\n * As a special case, read a special flag (ignoreClearRect) and do nothing if it is set.\r\n * This results in all calls to clearRect() to do nothing, and keep the canvas transparent.\r\n * This flag is stored in the save/restore context and is managed the same way as other drawing states.\r\n *\r\n */\r\n Context2D.prototype.clearRect = function(x, y, w, h) {\r\n if (isNaN(x) || isNaN(y) || isNaN(w) || isNaN(h)) {\r\n console.error(\"jsPDF.context2d.clearRect: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");\r\n }\r\n if (this.ignoreClearRect) {\r\n return;\r\n }\r\n\r\n this.fillStyle = \"#ffffff\";\r\n this.fillRect(x, y, w, h);\r\n };\r\n\r\n /**\r\n * Saves the state of the current context\r\n *\r\n * @name save\r\n * @function\r\n */\r\n Context2D.prototype.save = function(doStackPush) {\r\n doStackPush = typeof doStackPush === \"boolean\" ? doStackPush : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPush) {\r\n this.ctx.fontSize = this.pdf.internal.getFontSize();\r\n var ctx = new ContextLayer(this.ctx);\r\n this.ctxStack.push(this.ctx);\r\n this.ctx = ctx;\r\n }\r\n };\r\n\r\n /**\r\n * Returns previously saved path state and attributes\r\n *\r\n * @name restore\r\n * @function\r\n */\r\n Context2D.prototype.restore = function(doStackPop) {\r\n doStackPop = typeof doStackPop === \"boolean\" ? doStackPop : true;\r\n var tmpPageNumber = this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n for (var i = 0; i < this.pdf.internal.getNumberOfPages(); i++) {\r\n this.pdf.setPage(i + 1);\r\n this.pdf.internal.out(\"Q\");\r\n }\r\n this.pdf.setPage(tmpPageNumber);\r\n\r\n if (doStackPop && this.ctxStack.length !== 0) {\r\n this.ctx = this.ctxStack.pop();\r\n this.fillStyle = this.ctx.fillStyle;\r\n this.strokeStyle = this.ctx.strokeStyle;\r\n this.font = this.ctx.font;\r\n this.lineCap = this.ctx.lineCap;\r\n this.lineWidth = this.ctx.lineWidth;\r\n this.lineJoin = this.ctx.lineJoin;\r\n this.lineDash = this.ctx.lineDash;\r\n this.lineDashOffset = this.ctx.lineDashOffset;\r\n }\r\n };\r\n\r\n /**\r\n * @name toDataURL\r\n * @function\r\n */\r\n Context2D.prototype.toDataURL = function() {\r\n throw new Error(\"toDataUrl not implemented.\");\r\n };\r\n\r\n //helper functions\r\n\r\n /**\r\n * Get the decimal values of r, g, b and a\r\n *\r\n * @name getRGBA\r\n * @function\r\n * @private\r\n * @ignore\r\n */\r\n var getRGBA = function(style) {\r\n var rxRgb = /rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/;\r\n var rxRgba = /rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/;\r\n var rxTransparent = /transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/;\r\n\r\n var r, g, b, a;\r\n\r\n if (style.isCanvasGradient === true) {\r\n style = style.getColor();\r\n }\r\n\r\n if (!style) {\r\n return { r: 0, g: 0, b: 0, a: 0, style: style };\r\n }\r\n\r\n if (rxTransparent.test(style)) {\r\n r = 0;\r\n g = 0;\r\n b = 0;\r\n a = 0;\r\n } else {\r\n var matches = rxRgb.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = 1;\r\n } else {\r\n matches = rxRgba.exec(style);\r\n if (matches !== null) {\r\n r = parseInt(matches[1]);\r\n g = parseInt(matches[2]);\r\n b = parseInt(matches[3]);\r\n a = parseFloat(matches[4]);\r\n } else {\r\n a = 1;\r\n\r\n if (typeof style === \"string\" && style.charAt(0) !== \"#\") {\r\n var rgbColor = new RGBColor(style);\r\n if (rgbColor.ok) {\r\n style = rgbColor.toHex();\r\n } else {\r\n style = \"#000000\";\r\n }\r\n }\r\n\r\n if (style.length === 4) {\r\n r = style.substring(1, 2);\r\n r += r;\r\n g = style.substring(2, 3);\r\n g += g;\r\n b = style.substring(3, 4);\r\n b += b;\r\n } else {\r\n r = style.substring(1, 3);\r\n g = style.substring(3, 5);\r\n b = style.substring(5, 7);\r\n }\r\n r = parseInt(r, 16);\r\n g = parseInt(g, 16);\r\n b = parseInt(b, 16);\r\n }\r\n }\r\n }\r\n return { r: r, g: g, b: b, a: a, style: style };\r\n };\r\n\r\n /**\r\n * @name isFillTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isFillTransparent = function() {\r\n return this.ctx.isFillTransparent || this.globalAlpha == 0;\r\n };\r\n\r\n /**\r\n * @name isStrokeTransparent\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns {Boolean}\r\n */\r\n var isStrokeTransparent = function() {\r\n return Boolean(this.ctx.isStrokeTransparent || this.globalAlpha == 0);\r\n };\r\n\r\n /**\r\n * Draws \"filled\" text on the canvas\r\n *\r\n * @name fillText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The fillText() method draws filled text on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.fillText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.fillText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");\r\n }\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n if (isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n\r\n // We only use X axis as scale hint\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Draws text on the canvas (no fill)\r\n *\r\n * @name strokeText\r\n * @function\r\n * @param text {String} Specifies the text that will be written on the canvas\r\n * @param x {Number} The x coordinate where to start painting the text (relative to the canvas)\r\n * @param y {Number} The y coordinate where to start painting the text (relative to the canvas)\r\n * @param maxWidth {Number} Optional. The maximum allowed width of the text, in pixels\r\n * @description The strokeText() method draws text (with no fill) on the canvas. The default color of the text is black.\r\n */\r\n Context2D.prototype.strokeText = function(text, x, y, maxWidth) {\r\n if (isNaN(x) || isNaN(y) || typeof text !== \"string\") {\r\n console.error(\"jsPDF.context2d.strokeText: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");\r\n }\r\n if (isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n maxWidth = isNaN(maxWidth) ? undefined : maxWidth;\r\n\r\n var degs = rad2deg(this.ctx.transform.rotation);\r\n var scale = this.ctx.transform.scaleX;\r\n\r\n putText.call(this, {\r\n text: text,\r\n x: x,\r\n y: y,\r\n scale: scale,\r\n renderingMode: \"stroke\",\r\n angle: degs,\r\n align: this.textAlign,\r\n maxWidth: maxWidth\r\n });\r\n };\r\n\r\n /**\r\n * Returns an object that contains the width of the specified text\r\n *\r\n * @name measureText\r\n * @function\r\n * @param text {String} The text to be measured\r\n * @description The measureText() method returns an object that contains the width of the specified text, in pixels.\r\n * @returns {Number}\r\n */\r\n Context2D.prototype.measureText = function(text) {\r\n if (typeof text !== \"string\") {\r\n console.error(\r\n \"jsPDF.context2d.measureText: Invalid arguments\",\r\n arguments\r\n );\r\n throw new Error(\r\n \"Invalid arguments passed to jsPDF.context2d.measureText\"\r\n );\r\n }\r\n var pdf = this.pdf;\r\n var k = this.pdf.internal.scaleFactor;\r\n\r\n var fontSize = pdf.internal.getFontSize();\r\n var txtWidth =\r\n (pdf.getStringUnitWidth(text) * fontSize) / pdf.internal.scaleFactor;\r\n txtWidth *= Math.round(((k * 96) / 72) * 10000) / 10000;\r\n\r\n var TextMetrics = function(options) {\r\n options = options || {};\r\n var _width = options.width || 0;\r\n Object.defineProperty(this, \"width\", {\r\n get: function() {\r\n return _width;\r\n }\r\n });\r\n return this;\r\n };\r\n return new TextMetrics({ width: txtWidth });\r\n };\r\n\r\n //Transformations\r\n\r\n /**\r\n * Scales the current drawing bigger or smaller\r\n *\r\n * @name scale\r\n * @function\r\n * @param scalewidth {Number} Scales the width of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @param scaleheight {Number} Scales the height of the current drawing (1=100%, 0.5=50%, 2=200%, etc.)\r\n * @description The scale() method scales the current drawing, bigger or smaller.\r\n */\r\n Context2D.prototype.scale = function(scalewidth, scaleheight) {\r\n if (isNaN(scalewidth) || isNaN(scaleheight)) {\r\n console.error(\"jsPDF.context2d.scale: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");\r\n }\r\n var matrix = new Matrix(scalewidth, 0.0, 0.0, scaleheight, 0.0, 0.0);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Rotates the current drawing\r\n *\r\n * @name rotate\r\n * @function\r\n * @param angle {Number} The rotation angle, in radians.\r\n * @description To calculate from degrees to radians: degrees*Math.PI/180.
    \r\n * Example: to rotate 5 degrees, specify the following: 5*Math.PI/180\r\n */\r\n Context2D.prototype.rotate = function(angle) {\r\n if (isNaN(angle)) {\r\n console.error(\"jsPDF.context2d.rotate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");\r\n }\r\n var matrix = new Matrix(\r\n Math.cos(angle),\r\n Math.sin(angle),\r\n -Math.sin(angle),\r\n Math.cos(angle),\r\n 0.0,\r\n 0.0\r\n );\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Remaps the (0,0) position on the canvas\r\n *\r\n * @name translate\r\n * @function\r\n * @param x {Number} The value to add to horizontal (x) coordinates\r\n * @param y {Number} The value to add to vertical (y) coordinates\r\n * @description The translate() method remaps the (0,0) position on the canvas.\r\n */\r\n Context2D.prototype.translate = function(x, y) {\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"jsPDF.context2d.translate: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");\r\n }\r\n var matrix = new Matrix(1.0, 0.0, 0.0, 1.0, x, y);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Replaces the current transformation matrix for the drawing\r\n *\r\n * @name transform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The transform() method replaces the current transformation matrix. It multiplies the current transformation matrix with the matrix described by:



    a c e

    b d f

    0 0 1

    In other words, the transform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.transform = function(a, b, c, d, e, f) {\r\n if (isNaN(a) || isNaN(b) || isNaN(c) || isNaN(d) || isNaN(e) || isNaN(f)) {\r\n console.error(\"jsPDF.context2d.transform: Invalid arguments\", arguments);\r\n throw new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");\r\n }\r\n var matrix = new Matrix(a, b, c, d, e, f);\r\n this.ctx.transform = this.ctx.transform.multiply(matrix);\r\n };\r\n\r\n /**\r\n * Resets the current transform to the identity matrix. Then runs transform()\r\n *\r\n * @name setTransform\r\n * @function\r\n * @param a {Number} Horizontal scaling\r\n * @param b {Number} Horizontal skewing\r\n * @param c {Number} Vertical skewing\r\n * @param d {Number} Vertical scaling\r\n * @param e {Number} Horizontal moving\r\n * @param f {Number} Vertical moving\r\n * @description Each object on the canvas has a current transformation matrix.

    The setTransform() method resets the current transform to the identity matrix, and then runs transform() with the same arguments.

    In other words, the setTransform() method lets you scale, rotate, move, and skew the current context.\r\n */\r\n Context2D.prototype.setTransform = function(a, b, c, d, e, f) {\r\n a = isNaN(a) ? 1 : a;\r\n b = isNaN(b) ? 0 : b;\r\n c = isNaN(c) ? 0 : c;\r\n d = isNaN(d) ? 1 : d;\r\n e = isNaN(e) ? 0 : e;\r\n f = isNaN(f) ? 0 : f;\r\n this.ctx.transform = new Matrix(a, b, c, d, e, f);\r\n };\r\n\r\n /**\r\n * Should only be used if pageWrapYEnabled is true\r\n *\r\n * @name setPageByYPosition\r\n * @function\r\n * @private\r\n * @ignore\r\n * @returns One-based Page Number\r\n */\r\n var setPageByYPosition = function(y) {\r\n if (this.pageWrapYEnabled) {\r\n this.lastBreak = 0;\r\n var manualBreaks = 0;\r\n var autoBreaks = 0;\r\n for (var i = 0; i < this.pageBreaks.length; i++) {\r\n if (y >= this.pageBreaks[i]) {\r\n manualBreaks++;\r\n if (this.lastBreak === 0) {\r\n autoBreaks++;\r\n }\r\n var spaceBetweenLastBreak = this.pageBreaks[i] - this.lastBreak;\r\n this.lastBreak = this.pageBreaks[i];\r\n var pagesSinceLastBreak = Math.floor(\r\n spaceBetweenLastBreak / this.pageWrapY\r\n );\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n }\r\n if (this.lastBreak === 0) {\r\n var pagesSinceLastBreak = Math.floor(y / this.pageWrapY) + 1;\r\n autoBreaks += pagesSinceLastBreak;\r\n }\r\n return autoBreaks + manualBreaks;\r\n } else {\r\n return this.pdf.internal.getCurrentPageInfo().pageNumber;\r\n }\r\n };\r\n\r\n var hasMargins = function() {\r\n return (\r\n this.margin[0] > 0 ||\r\n this.margin[1] > 0 ||\r\n this.margin[2] > 0 ||\r\n this.margin[3] > 0\r\n );\r\n };\r\n\r\n /**\r\n * Draws an image, canvas, or video onto the canvas\r\n *\r\n * @function\r\n * @param img {} Specifies the image, canvas, or video element to use\r\n * @param sx {Number} Optional. The x coordinate where to start clipping\r\n * @param sy {Number} Optional. The y coordinate where to start clipping\r\n * @param swidth {Number} Optional. The width of the clipped image\r\n * @param sheight {Number} Optional. The height of the clipped image\r\n * @param x {Number} The x coordinate where to place the image on the canvas\r\n * @param y {Number} The y coordinate where to place the image on the canvas\r\n * @param width {Number} Optional. The width of the image to use (stretch or reduce the image)\r\n * @param height {Number} Optional. The height of the image to use (stretch or reduce the image)\r\n */\r\n Context2D.prototype.drawImage = function(\r\n img,\r\n sx,\r\n sy,\r\n swidth,\r\n sheight,\r\n x,\r\n y,\r\n width,\r\n height\r\n ) {\r\n var imageProperties = this.pdf.getImageProperties(img);\r\n var factorX = 1;\r\n var factorY = 1;\r\n var isClip;\r\n\r\n var clipFactorX = 1;\r\n var clipFactorY = 1;\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width !== \"undefined\") {\r\n isClip = true;\r\n clipFactorX = width / swidth;\r\n clipFactorY = height / sheight;\r\n factorX = ((imageProperties.width / swidth) * width) / swidth;\r\n factorY = ((imageProperties.height / sheight) * height) / sheight;\r\n }\r\n\r\n //is sx and sy are set and x and y not, set x and y with values of sx and sy\r\n if (typeof x === \"undefined\") {\r\n x = sx;\r\n y = sy;\r\n sx = 0;\r\n sy = 0;\r\n }\r\n\r\n if (typeof swidth !== \"undefined\" && typeof width === \"undefined\") {\r\n width = swidth;\r\n height = sheight;\r\n }\r\n if (typeof swidth === \"undefined\" && typeof width === \"undefined\") {\r\n width = imageProperties.width;\r\n height = imageProperties.height;\r\n }\r\n\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var angle = rad2deg(decomposedTransformationMatrix.rotate.shx);\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n var xRect = matrix.applyToRectangle(\r\n new Rectangle(\r\n x - sx * clipFactorX,\r\n y - sy * clipFactorY,\r\n swidth * factorX,\r\n sheight * factorY\r\n )\r\n );\r\n var pageArray = getPagesByPath.call(this, xRect);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var tmpRect = JSON.parse(JSON.stringify(xRect));\r\n tmpRect = pathPositionRedo(\r\n [tmpRect],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping = (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n tmpRect.x,\r\n tmpRect.y,\r\n tmpRect.w,\r\n tmpRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n this.pdf.addImage(\r\n img,\r\n \"JPEG\",\r\n xRect.x,\r\n xRect.y,\r\n xRect.w,\r\n xRect.h,\r\n null,\r\n null,\r\n angle\r\n );\r\n }\r\n };\r\n\r\n var getPagesByPath = function(path, pageWrapX, pageWrapY) {\r\n var result = [];\r\n pageWrapX = pageWrapX || this.pdf.internal.pageSize.width;\r\n pageWrapY =\r\n pageWrapY ||\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var yOffset = this.posY + this.ctx.prevPageLastElemOffset;\r\n\r\n switch (path.type) {\r\n default:\r\n case \"mt\":\r\n case \"lt\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n break;\r\n case \"arc\":\r\n result.push(\r\n Math.floor((path.y + yOffset - path.radius) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor((path.y + yOffset + path.radius) / pageWrapY) + 1\r\n );\r\n break;\r\n case \"qct\":\r\n var rectOfQuadraticCurve = getQuadraticCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfQuadraticCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfQuadraticCurve.y + rectOfQuadraticCurve.h + yOffset) /\r\n pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"bct\":\r\n var rectOfBezierCurve = getBezierCurveBoundary(\r\n this.ctx.lastPoint.x,\r\n this.ctx.lastPoint.y,\r\n path.x1,\r\n path.y1,\r\n path.x2,\r\n path.y2,\r\n path.x,\r\n path.y\r\n );\r\n result.push(\r\n Math.floor((rectOfBezierCurve.y + yOffset) / pageWrapY) + 1\r\n );\r\n result.push(\r\n Math.floor(\r\n (rectOfBezierCurve.y + rectOfBezierCurve.h + yOffset) / pageWrapY\r\n ) + 1\r\n );\r\n break;\r\n case \"rect\":\r\n result.push(Math.floor((path.y + yOffset) / pageWrapY) + 1);\r\n result.push(Math.floor((path.y + path.h + yOffset) / pageWrapY) + 1);\r\n }\r\n\r\n for (var i = 0; i < result.length; i += 1) {\r\n while (this.pdf.internal.getNumberOfPages() < result[i]) {\r\n addPage.call(this);\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n var addPage = function() {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var font = this.font;\r\n var lineCap = this.lineCap;\r\n var lineWidth = this.lineWidth;\r\n var lineJoin = this.lineJoin;\r\n this.pdf.addPage();\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.font = font;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n };\r\n\r\n var pathPositionRedo = function(paths, x, y) {\r\n for (var i = 0; i < paths.length; i++) {\r\n switch (paths[i].type) {\r\n case \"bct\":\r\n paths[i].x2 += x;\r\n paths[i].y2 += y;\r\n case \"qct\":\r\n paths[i].x1 += x;\r\n paths[i].y1 += y;\r\n case \"mt\":\r\n case \"lt\":\r\n case \"arc\":\r\n default:\r\n paths[i].x += x;\r\n paths[i].y += y;\r\n }\r\n }\r\n return paths;\r\n };\r\n\r\n var sortPages = function(pages) {\r\n return pages.sort(function(a, b) {\r\n return a - b;\r\n });\r\n };\r\n\r\n var pathPreProcess = function(rule, isClip) {\r\n var fillStyle = this.fillStyle;\r\n var strokeStyle = this.strokeStyle;\r\n var lineCap = this.lineCap;\r\n var oldLineWidth = this.lineWidth;\r\n var lineWidth = Math.abs(oldLineWidth * this.ctx.transform.scaleX);\r\n var lineJoin = this.lineJoin;\r\n\r\n var origPath = JSON.parse(JSON.stringify(this.path));\r\n var xPath = JSON.parse(JSON.stringify(this.path));\r\n var clipPath;\r\n var tmpPath;\r\n var pages = [];\r\n\r\n for (var i = 0; i < xPath.length; i++) {\r\n if (typeof xPath[i].x !== \"undefined\") {\r\n var page = getPagesByPath.call(this, xPath[i]);\r\n\r\n for (var ii = 0; ii < page.length; ii += 1) {\r\n if (pages.indexOf(page[ii]) === -1) {\r\n pages.push(page[ii]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var j = 0; j < pages.length; j++) {\r\n while (this.pdf.internal.getNumberOfPages() < pages[j]) {\r\n addPage.call(this);\r\n }\r\n }\r\n sortPages(pages);\r\n\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var k = min; k < max + 1; k++) {\r\n this.pdf.setPage(k);\r\n\r\n this.fillStyle = fillStyle;\r\n this.strokeStyle = strokeStyle;\r\n this.lineCap = lineCap;\r\n this.lineWidth = lineWidth;\r\n this.lineJoin = lineJoin;\r\n\r\n var pageWidthMinusMargins =\r\n this.pdf.internal.pageSize.width - this.margin[3] - this.margin[1];\r\n var topMargin = k === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusMargins =\r\n this.pdf.internal.pageSize.height - this.margin[0] - this.margin[2];\r\n var previousPageHeightSum =\r\n k === 1 ? 0 : firstPageHeight + (k - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n drawPaths.call(this, rule, true);\r\n this.path = tmpPaths;\r\n }\r\n tmpPath = JSON.parse(JSON.stringify(origPath));\r\n this.path = pathPositionRedo(\r\n tmpPath,\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n );\r\n if (isClip === false || k === 0) {\r\n const needsClipping = (k > min || k < max) && hasMargins.call(this);\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n drawPaths.call(this, rule, isClip);\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n this.lineWidth = oldLineWidth;\r\n }\r\n } else {\r\n this.lineWidth = lineWidth;\r\n drawPaths.call(this, rule, isClip);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n this.path = origPath;\r\n };\r\n\r\n /**\r\n * Processes the paths\r\n *\r\n * @function\r\n * @param rule {String}\r\n * @param isClip {Boolean}\r\n * @private\r\n * @ignore\r\n */\r\n var drawPaths = function(rule, isClip) {\r\n if (rule === \"stroke\" && !isClip && isStrokeTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n if (rule !== \"stroke\" && !isClip && isFillTransparent.call(this)) {\r\n return;\r\n }\r\n\r\n var moves = [];\r\n\r\n //var alpha = (this.ctx.fillOpacity < 1) ? this.ctx.fillOpacity : this.ctx.globalAlpha;\r\n var delta;\r\n var xPath = this.path;\r\n for (var i = 0; i < xPath.length; i++) {\r\n var pt = xPath[i];\r\n\r\n switch (pt.type) {\r\n case \"begin\":\r\n moves.push({\r\n begin: true\r\n });\r\n break;\r\n\r\n case \"close\":\r\n moves.push({\r\n close: true\r\n });\r\n break;\r\n\r\n case \"mt\":\r\n moves.push({\r\n start: pt,\r\n deltas: [],\r\n abs: []\r\n });\r\n break;\r\n\r\n case \"lt\":\r\n var iii = moves.length;\r\n if (xPath[i - 1] && !isNaN(xPath[i - 1].x)) {\r\n delta = [pt.x - xPath[i - 1].x, pt.y - xPath[i - 1].y];\r\n if (iii > 0) {\r\n for (iii; iii >= 0; iii--) {\r\n if (\r\n moves[iii - 1].close !== true &&\r\n moves[iii - 1].begin !== true\r\n ) {\r\n moves[iii - 1].deltas.push(delta);\r\n moves[iii - 1].abs.push(pt);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case \"bct\":\r\n delta = [\r\n pt.x1 - xPath[i - 1].x,\r\n pt.y1 - xPath[i - 1].y,\r\n pt.x2 - xPath[i - 1].x,\r\n pt.y2 - xPath[i - 1].y,\r\n pt.x - xPath[i - 1].x,\r\n pt.y - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"qct\":\r\n var x1 = xPath[i - 1].x + (2.0 / 3.0) * (pt.x1 - xPath[i - 1].x);\r\n var y1 = xPath[i - 1].y + (2.0 / 3.0) * (pt.y1 - xPath[i - 1].y);\r\n var x2 = pt.x + (2.0 / 3.0) * (pt.x1 - pt.x);\r\n var y2 = pt.y + (2.0 / 3.0) * (pt.y1 - pt.y);\r\n var x3 = pt.x;\r\n var y3 = pt.y;\r\n delta = [\r\n x1 - xPath[i - 1].x,\r\n y1 - xPath[i - 1].y,\r\n x2 - xPath[i - 1].x,\r\n y2 - xPath[i - 1].y,\r\n x3 - xPath[i - 1].x,\r\n y3 - xPath[i - 1].y\r\n ];\r\n moves[moves.length - 1].deltas.push(delta);\r\n break;\r\n\r\n case \"arc\":\r\n moves.push({\r\n deltas: [],\r\n abs: [],\r\n arc: true\r\n });\r\n\r\n if (Array.isArray(moves[moves.length - 1].abs)) {\r\n moves[moves.length - 1].abs.push(pt);\r\n }\r\n break;\r\n }\r\n }\r\n var style;\r\n if (!isClip) {\r\n if (rule === \"stroke\") {\r\n style = \"stroke\";\r\n } else {\r\n style = \"fill\";\r\n }\r\n } else {\r\n style = null;\r\n }\r\n\r\n var began = false;\r\n for (var k = 0; k < moves.length; k++) {\r\n if (moves[k].arc) {\r\n var arcs = moves[k].abs;\r\n\r\n for (var ii = 0; ii < arcs.length; ii++) {\r\n var arc = arcs[ii];\r\n\r\n if (arc.type === \"arc\") {\r\n drawArc.call(\r\n this,\r\n arc.x,\r\n arc.y,\r\n arc.radius,\r\n arc.startAngle,\r\n arc.endAngle,\r\n arc.counterclockwise,\r\n undefined,\r\n isClip,\r\n !began\r\n );\r\n } else {\r\n drawLine.call(this, arc.x, arc.y);\r\n }\r\n began = true;\r\n }\r\n } else if (moves[k].close === true) {\r\n this.pdf.internal.out(\"h\");\r\n began = false;\r\n } else if (moves[k].begin !== true) {\r\n var x = moves[k].start.x;\r\n var y = moves[k].start.y;\r\n drawLines.call(this, moves[k].deltas, x, y);\r\n began = true;\r\n }\r\n }\r\n\r\n if (style) {\r\n putStyle.call(this, style);\r\n }\r\n if (isClip) {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var getBaseline = function(y) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n switch (this.ctx.textBaseline) {\r\n case \"bottom\":\r\n return y - descent;\r\n case \"top\":\r\n return y + height - descent;\r\n case \"hanging\":\r\n return y + height - 2 * descent;\r\n case \"middle\":\r\n return y + height / 2 - descent;\r\n case \"ideographic\":\r\n // TODO not implemented\r\n return y;\r\n case \"alphabetic\":\r\n default:\r\n return y;\r\n }\r\n };\r\n\r\n var getTextBottom = function(yBaseLine) {\r\n var height =\r\n this.pdf.internal.getFontSize() / this.pdf.internal.scaleFactor;\r\n var descent = height * (this.pdf.internal.getLineHeightFactor() - 1);\r\n return yBaseLine + descent;\r\n };\r\n\r\n Context2D.prototype.createLinearGradient = function createLinearGradient() {\r\n var canvasGradient = function canvasGradient() {};\r\n\r\n canvasGradient.colorStops = [];\r\n canvasGradient.addColorStop = function(offset, color) {\r\n this.colorStops.push([offset, color]);\r\n };\r\n\r\n canvasGradient.getColor = function() {\r\n if (this.colorStops.length === 0) {\r\n return \"#000000\";\r\n }\r\n\r\n return this.colorStops[0][1];\r\n };\r\n\r\n canvasGradient.isCanvasGradient = true;\r\n return canvasGradient;\r\n };\r\n Context2D.prototype.createPattern = function createPattern() {\r\n return this.createLinearGradient();\r\n };\r\n Context2D.prototype.createRadialGradient = function createRadialGradient() {\r\n return this.createLinearGradient();\r\n };\r\n\r\n /**\r\n *\r\n * @param x Edge point X\r\n * @param y Edge point Y\r\n * @param r Radius\r\n * @param a1 start angle\r\n * @param a2 end angle\r\n * @param counterclockwise\r\n * @param style\r\n * @param isClip\r\n */\r\n var drawArc = function(\r\n x,\r\n y,\r\n r,\r\n a1,\r\n a2,\r\n counterclockwise,\r\n style,\r\n isClip,\r\n includeMove\r\n ) {\r\n // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html\r\n var curves = createArc.call(this, r, a1, a2, counterclockwise);\r\n\r\n for (var i = 0; i < curves.length; i++) {\r\n var curve = curves[i];\r\n if (i === 0) {\r\n if (includeMove) {\r\n doMove.call(this, curve.x1 + x, curve.y1 + y);\r\n } else {\r\n drawLine.call(this, curve.x1 + x, curve.y1 + y);\r\n }\r\n }\r\n drawCurve.call(\r\n this,\r\n x,\r\n y,\r\n curve.x2,\r\n curve.y2,\r\n curve.x3,\r\n curve.y3,\r\n curve.x4,\r\n curve.y4\r\n );\r\n }\r\n\r\n if (!isClip) {\r\n putStyle.call(this, style);\r\n } else {\r\n doClip.call(this);\r\n }\r\n };\r\n\r\n var putStyle = function(style) {\r\n switch (style) {\r\n case \"stroke\":\r\n this.pdf.internal.out(\"S\");\r\n break;\r\n case \"fill\":\r\n this.pdf.internal.out(\"f\");\r\n break;\r\n }\r\n };\r\n\r\n var doClip = function() {\r\n this.pdf.clip();\r\n this.pdf.discardPath();\r\n };\r\n\r\n var doMove = function(x, y) {\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x) +\r\n \" \" +\r\n getVerticalCoordinateString(y) +\r\n \" m\"\r\n );\r\n };\r\n\r\n var putText = function(options) {\r\n var textAlign;\r\n switch (options.align) {\r\n case \"right\":\r\n case \"end\":\r\n textAlign = \"right\";\r\n break;\r\n case \"center\":\r\n textAlign = \"center\";\r\n break;\r\n case \"left\":\r\n case \"start\":\r\n default:\r\n textAlign = \"left\";\r\n break;\r\n }\r\n\r\n var textDimensions = this.pdf.getTextDimensions(options.text);\r\n var yBaseLine = getBaseline.call(this, options.y);\r\n var yBottom = getTextBottom.call(this, yBaseLine);\r\n var yTop = yBottom - textDimensions.h;\r\n\r\n var pt = this.ctx.transform.applyToPoint(new Point(options.x, yBaseLine));\r\n var decomposedTransformationMatrix = this.ctx.transform.decompose();\r\n var matrix = new Matrix();\r\n matrix = matrix.multiply(decomposedTransformationMatrix.translate);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.skew);\r\n matrix = matrix.multiply(decomposedTransformationMatrix.scale);\r\n\r\n var baselineRect = this.ctx.transform.applyToRectangle(\r\n new Rectangle(options.x, yBaseLine, textDimensions.w, textDimensions.h)\r\n );\r\n var textBounds = matrix.applyToRectangle(\r\n new Rectangle(options.x, yTop, textDimensions.w, textDimensions.h)\r\n );\r\n var pageArray = getPagesByPath.call(this, textBounds);\r\n var pages = [];\r\n for (var ii = 0; ii < pageArray.length; ii += 1) {\r\n if (pages.indexOf(pageArray[ii]) === -1) {\r\n pages.push(pageArray[ii]);\r\n }\r\n }\r\n\r\n sortPages(pages);\r\n\r\n var clipPath, oldSize, oldLineWidth;\r\n if (this.autoPaging) {\r\n var min = pages[0];\r\n var max = pages[pages.length - 1];\r\n for (var i = min; i < max + 1; i++) {\r\n this.pdf.setPage(i);\r\n\r\n var topMargin = i === 1 ? this.posY + this.margin[0] : this.margin[0];\r\n var firstPageHeight =\r\n this.pdf.internal.pageSize.height -\r\n this.posY -\r\n this.margin[0] -\r\n this.margin[2];\r\n var pageHeightMinusBottomMargin =\r\n this.pdf.internal.pageSize.height - this.margin[2];\r\n var pageHeightMinusMargins =\r\n pageHeightMinusBottomMargin - this.margin[0];\r\n var pageWidthMinusRightMargin =\r\n this.pdf.internal.pageSize.width - this.margin[1];\r\n var pageWidthMinusMargins = pageWidthMinusRightMargin - this.margin[3];\r\n var previousPageHeightSum =\r\n i === 1 ? 0 : firstPageHeight + (i - 2) * pageHeightMinusMargins;\r\n\r\n if (this.ctx.clip_path.length !== 0) {\r\n var tmpPaths = this.path;\r\n clipPath = JSON.parse(JSON.stringify(this.ctx.clip_path));\r\n this.path = pathPositionRedo(\r\n clipPath,\r\n this.posX + this.margin[3],\r\n -1 * previousPageHeightSum + topMargin\r\n );\r\n drawPaths.call(this, \"fill\", true);\r\n this.path = tmpPaths;\r\n }\r\n var textBoundsOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(textBounds))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum + topMargin + this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n\r\n var doSlice = this.autoPaging !== \"text\";\r\n\r\n if (\r\n doSlice ||\r\n textBoundsOnPage.y + textBoundsOnPage.h <= pageHeightMinusBottomMargin\r\n ) {\r\n if (\r\n doSlice ||\r\n (textBoundsOnPage.y >= topMargin &&\r\n textBoundsOnPage.x <= pageWidthMinusRightMargin)\r\n ) {\r\n var croppedText = doSlice\r\n ? options.text\r\n : this.pdf.splitTextToSize(\r\n options.text,\r\n options.maxWidth ||\r\n pageWidthMinusRightMargin - textBoundsOnPage.x\r\n )[0];\r\n var baseLineRectOnPage = pathPositionRedo(\r\n [JSON.parse(JSON.stringify(baselineRect))],\r\n this.posX + this.margin[3],\r\n -previousPageHeightSum +\r\n topMargin +\r\n this.ctx.prevPageLastElemOffset\r\n )[0];\r\n\r\n const needsClipping =\r\n doSlice && (i > min || i < max) && hasMargins.call(this);\r\n\r\n if (needsClipping) {\r\n this.pdf.saveGraphicsState();\r\n this.pdf\r\n .rect(\r\n this.margin[3],\r\n this.margin[0],\r\n pageWidthMinusMargins,\r\n pageHeightMinusMargins,\r\n null\r\n )\r\n .clip()\r\n .discardPath();\r\n }\r\n\r\n this.pdf.text(\r\n croppedText,\r\n baseLineRectOnPage.x,\r\n baseLineRectOnPage.y,\r\n {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode\r\n }\r\n );\r\n\r\n if (needsClipping) {\r\n this.pdf.restoreGraphicsState();\r\n }\r\n }\r\n } else {\r\n // This text is the last element of the page, but it got cut off due to the margin\r\n // so we render it in the next page\r\n\r\n if (textBoundsOnPage.y < pageHeightMinusBottomMargin) {\r\n // As a result, all other elements have their y offset increased\r\n this.ctx.prevPageLastElemOffset +=\r\n pageHeightMinusBottomMargin - textBoundsOnPage.y;\r\n }\r\n }\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n } else {\r\n if (options.scale >= 0.01) {\r\n oldSize = this.pdf.internal.getFontSize();\r\n this.pdf.setFontSize(oldSize * options.scale);\r\n oldLineWidth = this.lineWidth;\r\n this.lineWidth = oldLineWidth * options.scale;\r\n }\r\n this.pdf.text(options.text, pt.x + this.posX, pt.y + this.posY, {\r\n angle: options.angle,\r\n align: textAlign,\r\n renderingMode: options.renderingMode,\r\n maxWidth: options.maxWidth\r\n });\r\n\r\n if (options.scale >= 0.01) {\r\n this.pdf.setFontSize(oldSize);\r\n this.lineWidth = oldLineWidth;\r\n }\r\n }\r\n };\r\n\r\n var drawLine = function(x, y, prevX, prevY) {\r\n prevX = prevX || 0;\r\n prevY = prevY || 0;\r\n\r\n this.pdf.internal.out(\r\n getHorizontalCoordinateString(x + prevX) +\r\n \" \" +\r\n getVerticalCoordinateString(y + prevY) +\r\n \" l\"\r\n );\r\n };\r\n\r\n var drawLines = function(lines, x, y) {\r\n return this.pdf.lines(lines, x, y, null, null);\r\n };\r\n\r\n var drawCurve = function(x, y, x1, y1, x2, y2, x3, y3) {\r\n this.pdf.internal.out(\r\n [\r\n f2(getHorizontalCoordinate(x1 + x)),\r\n f2(getVerticalCoordinate(y1 + y)),\r\n f2(getHorizontalCoordinate(x2 + x)),\r\n f2(getVerticalCoordinate(y2 + y)),\r\n f2(getHorizontalCoordinate(x3 + x)),\r\n f2(getVerticalCoordinate(y3 + y)),\r\n \"c\"\r\n ].join(\" \")\r\n );\r\n };\r\n\r\n /**\r\n * Return a array of objects that represent bezier curves which approximate the circular arc centered at the origin, from startAngle to endAngle (radians) with the specified radius.\r\n *\r\n * Each bezier curve is an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n * @function createArc\r\n */\r\n var createArc = function(radius, startAngle, endAngle, anticlockwise) {\r\n var EPSILON = 0.00001; // Roughly 1/1000th of a degree, see below\r\n var twoPi = Math.PI * 2;\r\n var halfPi = Math.PI / 2.0;\r\n\r\n while (startAngle > endAngle) {\r\n startAngle = startAngle - twoPi;\r\n }\r\n var totalAngle = Math.abs(endAngle - startAngle);\r\n if (totalAngle < twoPi) {\r\n if (anticlockwise) {\r\n totalAngle = twoPi - totalAngle;\r\n }\r\n }\r\n\r\n // Compute the sequence of arc curves, up to PI/2 at a time.\r\n var curves = [];\r\n\r\n // clockwise or counterclockwise\r\n var sgn = anticlockwise ? -1 : +1;\r\n\r\n var a1 = startAngle;\r\n for (; totalAngle > EPSILON; ) {\r\n var remain = sgn * Math.min(totalAngle, halfPi);\r\n var a2 = a1 + remain;\r\n curves.push(createSmallArc.call(this, radius, a1, a2));\r\n totalAngle -= Math.abs(a2 - a1);\r\n a1 = a2;\r\n }\r\n\r\n return curves;\r\n };\r\n\r\n /**\r\n * Cubic bezier approximation of a circular arc centered at the origin, from (radians) a1 to a2, where a2-a1 < pi/2. The arc's radius is r.\r\n *\r\n * Returns an object with four points, where x1,y1 and x4,y4 are the arc's end points and x2,y2 and x3,y3 are the cubic bezier's control points.\r\n *\r\n * This algorithm is based on the approach described in: A. Riškus, \"Approximation of a Cubic Bezier Curve by Circular Arcs and Vice Versa,\" Information Technology and Control, 35(4), 2006 pp. 371-378.\r\n */\r\n var createSmallArc = function(r, a1, a2) {\r\n var a = (a2 - a1) / 2.0;\r\n\r\n var x4 = r * Math.cos(a);\r\n var y4 = r * Math.sin(a);\r\n var x1 = x4;\r\n var y1 = -y4;\r\n\r\n var q1 = x1 * x1 + y1 * y1;\r\n var q2 = q1 + x1 * x4 + y1 * y4;\r\n var k2 = ((4 / 3) * (Math.sqrt(2 * q1 * q2) - q2)) / (x1 * y4 - y1 * x4);\r\n\r\n var x2 = x1 - k2 * y1;\r\n var y2 = y1 + k2 * x1;\r\n var x3 = x2;\r\n var y3 = -y2;\r\n\r\n var ar = a + a1;\r\n var cos_ar = Math.cos(ar);\r\n var sin_ar = Math.sin(ar);\r\n\r\n return {\r\n x1: r * Math.cos(a1),\r\n y1: r * Math.sin(a1),\r\n x2: x2 * cos_ar - y2 * sin_ar,\r\n y2: x2 * sin_ar + y2 * cos_ar,\r\n x3: x3 * cos_ar - y3 * sin_ar,\r\n y3: x3 * sin_ar + y3 * cos_ar,\r\n x4: r * Math.cos(a2),\r\n y4: r * Math.sin(a2)\r\n };\r\n };\r\n\r\n var rad2deg = function(value) {\r\n return (value * 180) / Math.PI;\r\n };\r\n\r\n var getQuadraticCurveBoundary = function(sx, sy, cpx, cpy, ex, ey) {\r\n var midX1 = sx + (cpx - sx) * 0.5;\r\n var midY1 = sy + (cpy - sy) * 0.5;\r\n var midX2 = ex + (cpx - ex) * 0.5;\r\n var midY2 = ey + (cpy - ey) * 0.5;\r\n var resultX1 = Math.min(sx, ex, midX1, midX2);\r\n var resultX2 = Math.max(sx, ex, midX1, midX2);\r\n var resultY1 = Math.min(sy, ey, midY1, midY2);\r\n var resultY2 = Math.max(sy, ey, midY1, midY2);\r\n return new Rectangle(\r\n resultX1,\r\n resultY1,\r\n resultX2 - resultX1,\r\n resultY2 - resultY1\r\n );\r\n };\r\n\r\n //De Casteljau algorithm\r\n var getBezierCurveBoundary = function(ax, ay, bx, by, cx, cy, dx, dy) {\r\n var tobx = bx - ax;\r\n var toby = by - ay;\r\n var tocx = cx - bx;\r\n var tocy = cy - by;\r\n var todx = dx - cx;\r\n var tody = dy - cy;\r\n var precision = 40;\r\n var d,\r\n i,\r\n px,\r\n py,\r\n qx,\r\n qy,\r\n rx,\r\n ry,\r\n tx,\r\n ty,\r\n sx,\r\n sy,\r\n x,\r\n y,\r\n minx,\r\n miny,\r\n maxx,\r\n maxy,\r\n toqx,\r\n toqy,\r\n torx,\r\n tory,\r\n totx,\r\n toty;\r\n for (i = 0; i < precision + 1; i++) {\r\n d = i / precision;\r\n px = ax + d * tobx;\r\n py = ay + d * toby;\r\n qx = bx + d * tocx;\r\n qy = by + d * tocy;\r\n rx = cx + d * todx;\r\n ry = cy + d * tody;\r\n toqx = qx - px;\r\n toqy = qy - py;\r\n torx = rx - qx;\r\n tory = ry - qy;\r\n\r\n sx = px + d * toqx;\r\n sy = py + d * toqy;\r\n tx = qx + d * torx;\r\n ty = qy + d * tory;\r\n totx = tx - sx;\r\n toty = ty - sy;\r\n\r\n x = sx + d * totx;\r\n y = sy + d * toty;\r\n if (i == 0) {\r\n minx = x;\r\n miny = y;\r\n maxx = x;\r\n maxy = y;\r\n } else {\r\n minx = Math.min(minx, x);\r\n miny = Math.min(miny, y);\r\n maxx = Math.max(maxx, x);\r\n maxy = Math.max(maxy, y);\r\n }\r\n }\r\n return new Rectangle(\r\n Math.round(minx),\r\n Math.round(miny),\r\n Math.round(maxx - minx),\r\n Math.round(maxy - miny)\r\n );\r\n };\r\n\r\n var getPrevLineDashValue = function(lineDash, lineDashOffset) {\r\n return JSON.stringify({\r\n lineDash: lineDash,\r\n lineDashOffset: lineDashOffset\r\n });\r\n };\r\n\r\n var setLineDash = function() {\r\n // Avoid unnecessary line dash declarations.\r\n if (\r\n !this.prevLineDash &&\r\n !this.ctx.lineDash.length &&\r\n !this.ctx.lineDashOffset\r\n ) {\r\n return;\r\n }\r\n\r\n // Avoid unnecessary line dash declarations.\r\n const nextLineDash = getPrevLineDashValue(\r\n this.ctx.lineDash,\r\n this.ctx.lineDashOffset\r\n );\r\n if (this.prevLineDash !== nextLineDash) {\r\n this.pdf.setLineDash(this.ctx.lineDash, this.ctx.lineDashOffset);\r\n this.prevLineDash = nextLineDash;\r\n }\r\n };\r\n})(jsPDF.API);\r\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Much of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// Many optimizations have been made, so the bundle size is ultimately smaller but performance is similar.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\n// Mediocre shim\nvar Worker;\nvar workerAdd = \";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global\";\ntry {\n Worker = require('worker_threads').Worker;\n}\ncatch (e) {\n}\nvar wk = Worker ? function (c, _, msg, transfer, cb) {\n var done = false;\n var w = new Worker(c + workerAdd, { eval: true })\n .on('error', function (e) { return cb(e, null); })\n .on('message', function (m) { return cb(null, m); })\n .on('exit', function (c) {\n if (c && !done)\n cb(new Error('exited with code ' + c), null);\n });\n w.postMessage(msg, transfer);\n w.terminate = function () {\n done = true;\n return Worker.prototype.terminate.call(w);\n };\n return w;\n} : function (_, __, ___, ____, cb) {\n setImmediate(function () { return cb(new Error('async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)'), null); });\n var NOP = function () { };\n return {\n terminate: NOP,\n postMessage: NOP\n };\n};\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([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, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([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, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i)\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) >> 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n if (!noSt && pos + tl * (clb + 7) > tbts)\n break;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts)\n throw 'unexpected EOF';\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var mxa = lbt + dbt + 18;\n while (noSt || pos + mxa < tbts) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts)\n throw 'unexpected EOF';\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts)\n throw 'unexpected EOF';\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = pos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [new u8(0), 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768\n var imod = i & 32767;\n // previous index with this value\n var pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst)\n pos = wfblk(w, pos, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new u32(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = 0xFFFFFFFF;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return c ^ 0xFFFFFFFF; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 5552, l);\n for (; i < e; ++i)\n n += d[i], m += n;\n n %= 65521, m %= 65521;\n }\n a = n, b = m;\n },\n d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n if (!opts.consume)\n dat = new u8(dat);\n w.postMessage([dat, opts], [dat.buffer]);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16)) + (d[b + 3] << 23) * 2; };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) + (2 * (d[l - 1] << 23));\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n return dopt(data, opts, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) >> 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = gzs(this.p);\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n var l = str.length;\n if (!latin1 && typeof TextEncoder != 'undefined')\n return new TextEncoder().encode(str);\n var ar = new u8(str.length + (str.length >>> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >>> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n var r = '';\n if (!latin1 && typeof TextDecoder != 'undefined')\n return new TextDecoder().decode(dat);\n for (var i = 0; i < dat.length;) {\n var c = dat[i++];\n if (c < 128 || latin1)\n r += String.fromCharCode(c);\n else if (c < 224)\n r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));\n else if (c < 240)\n r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));\n else\n c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n return r;\n}\n;\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z ? z64e(d, es) : [b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b4(d, b + 12), b4(d, b + 4), b4(d, b + 20)];\n};\n// write zip header\nvar wzh = function (d, b, c, cmp, su, fn, u, o, ce, t) {\n var fl = fn.length, l = cmp.length;\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b] = 20, b += 2;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (t == 8 && (o.level == 1 ? 6 : o.level < 6 ? 4 : o.level == 9 ? 2 : 0)), d[b++] = u && 8;\n d[b] = t, b += 2;\n var dt = new Date(o.mtime || Date.now()), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, ((y << 24) * 2) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1));\n b += 4;\n wbytes(d, b, c);\n wbytes(d, b + 4, l);\n wbytes(d, b + 8, su);\n wbytes(d, b + 12, fl), b += 16; // skip extra field, comment\n if (ce != null)\n wbytes(d, b += 10, ce), b += 4;\n d.set(fn, b);\n b += fl;\n if (ce == null)\n d.set(cmp, b);\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n wzh(out, tot, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, tot, f.t), o += 46 + f.n.length, tot += 30 + f.n.length + f.d.length;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), m = file.length;\n c.p(file);\n var n = strToU8(fn), s = n.length;\n var t = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = {\n t: t,\n d: d,\n m: m,\n c: c.d(),\n u: fn.length != l,\n n: n,\n p: p\n };\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n if (!--lft)\n cbf();\n }\n };\n if (n.length > 65535)\n cbl('filename too long', null);\n if (!t)\n cbl(null, file);\n else if (m < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (opts === void 0) { opts = {}; }\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var t = p.level == 0 ? 0 : 8;\n var n = strToU8(fn), s = n.length;\n if (n.length > 65535)\n throw 'filename too long';\n var d = t ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push({\n t: t,\n d: d,\n m: file.length,\n c: c.d(),\n u: fn.length != s,\n n: n,\n o: o,\n p: p\n });\n o += 30 + s + l;\n tot += 76 + 2 * s + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f.c, f.d, f.m, f.n, f.u, f.p, null, f.t);\n wzh(out, o, f.c, f.d, f.m, f.n, f.u, f.p, f.o, f.t), o += 46 + f.n.length;\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_2 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_2(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\n\n(function(jsPDFAPI) {\n \"use strict\";\n\n var ASCII85Encode = function(a) {\n var b, c, d, e, f, g, h, i, j, k;\n // eslint-disable-next-line no-control-regex\n for (\n !/[^\\x00-\\xFF]/.test(a),\n b = \"\\x00\\x00\\x00\\x00\".slice(a.length % 4 || 4),\n a += b,\n c = [],\n d = 0,\n e = a.length;\n e > d;\n d += 4\n )\n (f =\n (a.charCodeAt(d) << 24) +\n (a.charCodeAt(d + 1) << 16) +\n (a.charCodeAt(d + 2) << 8) +\n a.charCodeAt(d + 3)),\n 0 !== f\n ? ((k = f % 85),\n (f = (f - k) / 85),\n (j = f % 85),\n (f = (f - j) / 85),\n (i = f % 85),\n (f = (f - i) / 85),\n (h = f % 85),\n (f = (f - h) / 85),\n (g = f % 85),\n c.push(g + 33, h + 33, i + 33, j + 33, k + 33))\n : c.push(122);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(c, b.length),\n String.fromCharCode.apply(String, c) + \"~>\"\n );\n };\n\n var ASCII85Decode = function(a) {\n var c,\n d,\n e,\n f,\n g,\n h = String,\n l = \"length\",\n w = 255,\n x = \"charCodeAt\",\n y = \"slice\",\n z = \"replace\";\n for (\n \"~>\" === a[y](-2),\n a = a[y](0, -2)\n [z](/\\s/g, \"\")\n [z](\"z\", \"!!!!!\"),\n c = \"uuuuu\"[y](a[l] % 5 || 5),\n a += c,\n e = [],\n f = 0,\n g = a[l];\n g > f;\n f += 5\n )\n (d =\n 52200625 * (a[x](f) - 33) +\n 614125 * (a[x](f + 1) - 33) +\n 7225 * (a[x](f + 2) - 33) +\n 85 * (a[x](f + 3) - 33) +\n (a[x](f + 4) - 33)),\n e.push(w & (d >> 24), w & (d >> 16), w & (d >> 8), w & d);\n return (\n (function(a, b) {\n for (var c = b; c > 0; c--) a.pop();\n })(e, c[l]),\n h.fromCharCode.apply(h, e)\n );\n };\n\n var ASCIIHexEncode = function(value) {\n return (\n value\n .split(\"\")\n .map(function(value) {\n return (\"0\" + value.charCodeAt().toString(16)).slice(-2);\n })\n .join(\"\") + \">\"\n );\n };\n\n var ASCIIHexDecode = function(value) {\n var regexCheckIfHex = new RegExp(/^([0-9A-Fa-f]{2})+$/);\n value = value.replace(/\\s/g, \"\");\n if (value.indexOf(\">\") !== -1) {\n value = value.substr(0, value.indexOf(\">\"));\n }\n if (value.length % 2) {\n value += \"0\";\n }\n if (regexCheckIfHex.test(value) === false) {\n return \"\";\n }\n var result = \"\";\n for (var i = 0; i < value.length; i += 2) {\n result += String.fromCharCode(\"0x\" + (value[i] + value[i + 1]));\n }\n return result;\n };\n /*\n var FlatePredictors = {\n None: 1,\n TIFF: 2,\n PNG_None: 10,\n PNG_Sub: 11,\n PNG_Up: 12,\n PNG_Average: 13,\n PNG_Paeth: 14,\n PNG_Optimum: 15\n };\n */\n\n var FlateEncode = function(data) {\n var arr = new Uint8Array(data.length);\n var i = data.length;\n while (i--) {\n arr[i] = data.charCodeAt(i);\n }\n arr = zlibSync(arr);\n data = arr.reduce(function(data, byte) {\n return data + String.fromCharCode(byte);\n }, \"\");\n return data;\n };\n\n jsPDFAPI.processDataByFilters = function(origData, filterChain) {\n \"use strict\";\n var i = 0;\n var data = origData || \"\";\n var reverseChain = [];\n filterChain = filterChain || [];\n\n if (typeof filterChain === \"string\") {\n filterChain = [filterChain];\n }\n\n for (i = 0; i < filterChain.length; i += 1) {\n switch (filterChain[i]) {\n case \"ASCII85Decode\":\n case \"/ASCII85Decode\":\n data = ASCII85Decode(data);\n reverseChain.push(\"/ASCII85Encode\");\n break;\n case \"ASCII85Encode\":\n case \"/ASCII85Encode\":\n data = ASCII85Encode(data);\n reverseChain.push(\"/ASCII85Decode\");\n break;\n case \"ASCIIHexDecode\":\n case \"/ASCIIHexDecode\":\n data = ASCIIHexDecode(data);\n reverseChain.push(\"/ASCIIHexEncode\");\n break;\n case \"ASCIIHexEncode\":\n case \"/ASCIIHexEncode\":\n data = ASCIIHexEncode(data);\n reverseChain.push(\"/ASCIIHexDecode\");\n break;\n case \"FlateEncode\":\n case \"/FlateEncode\":\n data = FlateEncode(data);\n reverseChain.push(\"/FlateDecode\");\n break;\n default:\n throw new Error(\n 'The filter: \"' + filterChain[i] + '\" is not implemented'\n );\n }\n }\n\n return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name fileloading\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name loadFile\n * @function\n * @param {string} url\n * @param {boolean} sync\n * @param {function} callback\n * @returns {string|undefined} result\n */\n jsPDFAPI.loadFile = function(url, sync, callback) {\n return browserRequest(url, sync, callback);\n\n };\n\n /**\n * @name loadImageFile\n * @function\n * @param {string} path\n * @param {boolean} sync\n * @param {function} callback\n */\n jsPDFAPI.loadImageFile = jsPDFAPI.loadFile;\n\n function browserRequest(url, sync, callback) {\n sync = sync === false ? false : true;\n callback = typeof callback === \"function\" ? callback : function() {};\n var result = undefined;\n\n var xhr = function(url, sync, callback) {\n var request = new XMLHttpRequest();\n var i = 0;\n\n var sanitizeUnicode = function(data) {\n var dataLength = data.length;\n var charArray = [];\n var StringFromCharCode = String.fromCharCode;\n\n //Transform Unicode to ASCII\n for (i = 0; i < dataLength; i += 1) {\n charArray.push(StringFromCharCode(data.charCodeAt(i) & 0xff));\n }\n return charArray.join(\"\");\n };\n\n request.open(\"GET\", url, !sync);\n // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]\n request.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n if (sync === false) {\n request.onload = function() {\n if (request.status === 200) {\n callback(sanitizeUnicode(this.responseText));\n } else {\n callback(undefined);\n }\n };\n }\n request.send(null);\n\n if (sync && request.status === 200) {\n return sanitizeUnicode(request.responseText);\n }\n };\n try {\n result = xhr(url, sync, callback);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n return result;\n }\n\n function nodeReadFile(url, sync, callback) {\n sync = sync === false ? false : true;\n var result = undefined;\n\n var fs = require(\"fs\");\n var path = require(\"path\");\n\n url = path.resolve(url);\n if (sync) {\n try {\n result = fs.readFileSync(url, { encoding: \"latin1\" });\n } catch (e) {\n return undefined;\n }\n } else {\n fs.readFile(url, { encoding: \"latin1\" }, function(err, data) {\n if (!callback) {\n return;\n }\n if (err) {\n callback(undefined);\n }\n callback(data);\n });\n }\n\n return result;\n }\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2018 Erik Koopmans\n * Released under the MIT License.\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { normalizeFontFace } from \"../libs/fontFace.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF html PlugIn\n *\n * @name html\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadHtml2Canvas() {\n return (function() {\n if (globalObject[\"html2canvas\"]) {\n return Promise.resolve(globalObject[\"html2canvas\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"html2canvas\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"html2canvas\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load html2canvas\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load html2canvas: \" + e));\n })\n .then(function(html2canvas) {\n return html2canvas.default ? html2canvas.default : html2canvas;\n });\n }\n\n function loadDomPurify() {\n return (function() {\n if (globalObject[\"DOMPurify\"]) {\n return Promise.resolve(globalObject[\"DOMPurify\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"dompurify\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"dompurify\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load dompurify\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load dompurify: \" + e));\n })\n .then(function(dompurify) {\n return dompurify.default ? dompurify.default : dompurify;\n });\n }\n\n /**\n * Determine the type of a variable/object.\n *\n * @private\n * @ignore\n */\n var objType = function(obj) {\n var type = typeof obj;\n if (type === \"undefined\") return \"undefined\";\n else if (type === \"string\" || obj instanceof String) return \"string\";\n else if (type === \"number\" || obj instanceof Number) return \"number\";\n else if (type === \"function\" || obj instanceof Function) return \"function\";\n else if (!!obj && obj.constructor === Array) return \"array\";\n else if (obj && obj.nodeType === 1) return \"element\";\n else if (type === \"object\") return \"object\";\n else return \"unknown\";\n };\n\n /**\n * Create an HTML element with optional className, innerHTML, and style.\n *\n * @private\n * @ignore\n */\n var createElement = function(tagName, opt) {\n var el = document.createElement(tagName);\n if (opt.className) el.className = opt.className;\n if (opt.innerHTML && opt.dompurify) {\n el.innerHTML = opt.dompurify.sanitize(opt.innerHTML);\n }\n for (var key in opt.style) {\n el.style[key] = opt.style[key];\n }\n return el;\n };\n\n /**\n * Deep-clone a node and preserve contents/properties.\n *\n * @private\n * @ignore\n */\n var cloneNode = function(node, javascriptEnabled) {\n // Recursively clone the node.\n var clone =\n node.nodeType === 3\n ? document.createTextNode(node.nodeValue)\n : node.cloneNode(false);\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (\n javascriptEnabled === true ||\n child.nodeType !== 1 ||\n child.nodeName !== \"SCRIPT\"\n ) {\n clone.appendChild(cloneNode(child, javascriptEnabled));\n }\n }\n\n if (node.nodeType === 1) {\n // Preserve contents/properties of special nodes.\n if (node.nodeName === \"CANVAS\") {\n clone.width = node.width;\n clone.height = node.height;\n clone.getContext(\"2d\").drawImage(node, 0, 0);\n } else if (node.nodeName === \"TEXTAREA\" || node.nodeName === \"SELECT\") {\n clone.value = node.value;\n }\n\n // Preserve the node's scroll position when it loads.\n clone.addEventListener(\n \"load\",\n function() {\n clone.scrollTop = node.scrollTop;\n clone.scrollLeft = node.scrollLeft;\n },\n true\n );\n }\n\n // Return the cloned node.\n return clone;\n };\n\n /* ----- CONSTRUCTOR ----- */\n\n var Worker = function Worker(opt) {\n // Create the root parent for the proto chain, and the starting Worker.\n var root = Object.assign(\n Worker.convert(Promise.resolve()),\n JSON.parse(JSON.stringify(Worker.template))\n );\n var self = Worker.convert(Promise.resolve(), root);\n\n // Set progress, optional settings, and return.\n self = self.setProgress(1, Worker, 1, [Worker]);\n self = self.set(opt);\n return self;\n };\n\n // Boilerplate for subclassing Promise.\n Worker.prototype = Object.create(Promise.prototype);\n Worker.prototype.constructor = Worker;\n\n // Converts/casts promises into Workers.\n Worker.convert = function convert(promise, inherit) {\n // Uses prototypal inheritance to receive changes made to ancestors' properties.\n promise.__proto__ = inherit || Worker.prototype;\n return promise;\n };\n\n Worker.template = {\n prop: {\n src: null,\n container: null,\n overlay: null,\n canvas: null,\n img: null,\n pdf: null,\n pageSize: null,\n callback: function() {}\n },\n progress: {\n val: 0,\n state: null,\n n: 0,\n stack: []\n },\n opt: {\n filename: \"file.pdf\",\n margin: [0, 0, 0, 0],\n enableLinks: true,\n x: 0,\n y: 0,\n html2canvas: {},\n jsPDF: {},\n backgroundColor: \"transparent\"\n }\n };\n\n /* ----- FROM / TO ----- */\n\n Worker.prototype.from = function from(src, type) {\n function getType(src) {\n switch (objType(src)) {\n case \"string\":\n return \"string\";\n case \"element\":\n return src.nodeName.toLowerCase() === \"canvas\" ? \"canvas\" : \"element\";\n default:\n return \"unknown\";\n }\n }\n\n return this.then(function from_main() {\n type = type || getType(src);\n switch (type) {\n case \"string\":\n return this.then(loadDomPurify).then(function(dompurify) {\n return this.set({\n src: createElement(\"div\", {\n innerHTML: src,\n dompurify: dompurify\n })\n });\n });\n case \"element\":\n return this.set({ src: src });\n case \"canvas\":\n return this.set({ canvas: src });\n case \"img\":\n return this.set({ img: src });\n default:\n return this.error(\"Unknown source type.\");\n }\n });\n };\n\n Worker.prototype.to = function to(target) {\n // Route the 'to' request to the appropriate method.\n switch (target) {\n case \"container\":\n return this.toContainer();\n case \"canvas\":\n return this.toCanvas();\n case \"img\":\n return this.toImg();\n case \"pdf\":\n return this.toPdf();\n default:\n return this.error(\"Invalid target.\");\n }\n };\n\n Worker.prototype.toContainer = function toContainer() {\n // Set up function prerequisites.\n var prereqs = [\n function checkSrc() {\n return (\n this.prop.src || this.error(\"Cannot duplicate - no source HTML.\")\n );\n },\n function checkPageSize() {\n return this.prop.pageSize || this.setPageSize();\n }\n ];\n return this.thenList(prereqs).then(function toContainer_main() {\n // Define the CSS styles for the container and its overlay parent.\n var overlayCSS = {\n position: \"fixed\",\n overflow: \"hidden\",\n zIndex: 1000,\n left: \"-100000px\",\n right: 0,\n bottom: 0,\n top: 0\n };\n var containerCSS = {\n position: \"relative\",\n display: \"inline-block\",\n width:\n (typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.windowWidth\n : Math.max(\n this.prop.src.clientWidth,\n this.prop.src.scrollWidth,\n this.prop.src.offsetWidth\n )) + \"px\",\n left: 0,\n right: 0,\n top: 0,\n margin: \"auto\",\n backgroundColor: this.opt.backgroundColor\n }; // Set the overlay to hidden (could be changed in the future to provide a print preview).\n\n var source = cloneNode(\n this.prop.src,\n this.opt.html2canvas.javascriptEnabled\n );\n\n if (source.tagName === \"BODY\") {\n containerCSS.height =\n Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.clientHeight,\n document.documentElement.scrollHeight,\n document.documentElement.offsetHeight\n ) + \"px\";\n }\n\n this.prop.overlay = createElement(\"div\", {\n className: \"html2pdf__overlay\",\n style: overlayCSS\n });\n this.prop.container = createElement(\"div\", {\n className: \"html2pdf__container\",\n style: containerCSS\n });\n this.prop.container.appendChild(source);\n this.prop.container.firstChild.appendChild(\n createElement(\"div\", {\n style: {\n clear: \"both\",\n border: \"0 none transparent\",\n margin: 0,\n padding: 0,\n height: 0\n }\n })\n );\n this.prop.container.style.float = \"none\";\n this.prop.overlay.appendChild(this.prop.container);\n document.body.appendChild(this.prop.overlay);\n this.prop.container.firstChild.style.position = \"relative\";\n this.prop.container.height =\n Math.max(\n this.prop.container.firstChild.clientHeight,\n this.prop.container.firstChild.scrollHeight,\n this.prop.container.firstChild.offsetHeight\n ) + \"px\";\n });\n };\n\n Worker.prototype.toCanvas = function toCanvas() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toCanvas_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var options = Object.assign({}, this.opt.html2canvas);\n delete options.onrendered;\n\n return html2canvas(this.prop.container, options);\n })\n .then(function toCanvas_post(canvas) {\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toContext2d = function toContext2d() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContainer() {\n return (\n document.body.contains(this.prop.container) || this.toContainer()\n );\n }\n ];\n\n // Fulfill prereqs then create the canvas.\n return this.thenList(prereqs)\n .then(loadHtml2Canvas)\n .then(function toContext2d_main(html2canvas) {\n // Handle old-fashioned 'onrendered' argument.\n\n var pdf = this.opt.jsPDF;\n var fontFaces = this.opt.fontFaces;\n\n var scale =\n typeof this.opt.width === \"number\" &&\n !isNaN(this.opt.width) &&\n typeof this.opt.windowWidth === \"number\" &&\n !isNaN(this.opt.windowWidth)\n ? this.opt.width / this.opt.windowWidth\n : 1;\n\n var options = Object.assign(\n {\n async: true,\n allowTaint: true,\n scale: scale,\n scrollX: this.opt.scrollX || 0,\n scrollY: this.opt.scrollY || 0,\n backgroundColor: \"#ffffff\",\n imageTimeout: 15000,\n logging: true,\n proxy: null,\n removeContainer: true,\n foreignObjectRendering: false,\n useCORS: false\n },\n this.opt.html2canvas\n );\n delete options.onrendered;\n\n pdf.context2d.autoPaging =\n typeof this.opt.autoPaging === \"undefined\"\n ? true\n : this.opt.autoPaging;\n pdf.context2d.posX = this.opt.x;\n pdf.context2d.posY = this.opt.y;\n pdf.context2d.margin = this.opt.margin;\n pdf.context2d.fontFaces = fontFaces;\n\n if (fontFaces) {\n for (var i = 0; i < fontFaces.length; ++i) {\n var font = fontFaces[i];\n var src = font.src.find(function(src) {\n return src.format === \"truetype\";\n });\n\n if (src) {\n pdf.addFont(src.url, font.ref.name, font.ref.style);\n }\n }\n }\n\n options.windowHeight = options.windowHeight || 0;\n options.windowHeight =\n options.windowHeight == 0\n ? Math.max(\n this.prop.container.clientHeight,\n this.prop.container.scrollHeight,\n this.prop.container.offsetHeight\n )\n : options.windowHeight;\n\n pdf.context2d.save(true);\n return html2canvas(this.prop.container, options);\n })\n .then(function toContext2d_post(canvas) {\n this.opt.jsPDF.context2d.restore(true);\n\n // Handle old-fashioned 'onrendered' argument.\n var onRendered = this.opt.html2canvas.onrendered || function() {};\n onRendered(canvas);\n\n this.prop.canvas = canvas;\n document.body.removeChild(this.prop.overlay);\n });\n };\n\n Worker.prototype.toImg = function toImg() {\n // Set up function prerequisites.\n var prereqs = [\n function checkCanvas() {\n return this.prop.canvas || this.toCanvas();\n }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toImg_main() {\n var imgData = this.prop.canvas.toDataURL(\n \"image/\" + this.opt.image.type,\n this.opt.image.quality\n );\n this.prop.img = document.createElement(\"img\");\n this.prop.img.src = imgData;\n });\n };\n\n Worker.prototype.toPdf = function toPdf() {\n // Set up function prerequisites.\n var prereqs = [\n function checkContext2d() {\n return this.toContext2d();\n }\n //function checkCanvas() { return this.prop.canvas || this.toCanvas(); }\n ];\n\n // Fulfill prereqs then create the image.\n return this.thenList(prereqs).then(function toPdf_main() {\n // Create local copies of frequently used properties.\n this.prop.pdf = this.prop.pdf || this.opt.jsPDF;\n });\n };\n\n /* ----- OUTPUT / SAVE ----- */\n\n Worker.prototype.output = function output(type, options, src) {\n // Redirect requests to the correct function (outputPdf / outputImg).\n src = src || \"pdf\";\n if (src.toLowerCase() === \"img\" || src.toLowerCase() === \"image\") {\n return this.outputImg(type, options);\n } else {\n return this.outputPdf(type, options);\n }\n };\n\n Worker.prototype.outputPdf = function outputPdf(type, options) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputPdf_main() {\n /* Currently implemented output types:\n * https://rawgit.com/MrRio/jsPDF/master/docs/jspdf.js.html#line992\n * save(options), arraybuffer, blob, bloburi/bloburl,\n * datauristring/dataurlstring, dataurlnewwindow, datauri/dataurl\n */\n return this.prop.pdf.output(type, options);\n });\n };\n\n Worker.prototype.outputImg = function outputImg(type) {\n // Set up function prerequisites.\n var prereqs = [\n function checkImg() {\n return this.prop.img || this.toImg();\n }\n ];\n\n // Fulfill prereqs then perform the appropriate output.\n return this.thenList(prereqs).then(function outputImg_main() {\n switch (type) {\n case undefined:\n case \"img\":\n return this.prop.img;\n case \"datauristring\":\n case \"dataurlstring\":\n return this.prop.img.src;\n case \"datauri\":\n case \"dataurl\":\n return (document.location.href = this.prop.img.src);\n default:\n throw 'Image output type \"' + type + '\" is not supported.';\n }\n });\n };\n\n Worker.prototype.save = function save(filename) {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs)\n .set(filename ? { filename: filename } : null)\n .then(function save_main() {\n this.prop.pdf.save(this.opt.filename);\n });\n };\n\n Worker.prototype.doCallback = function doCallback() {\n // Set up function prerequisites.\n var prereqs = [\n function checkPdf() {\n return this.prop.pdf || this.toPdf();\n }\n ];\n\n // Fulfill prereqs, update the filename (if provided), and save the PDF.\n return this.thenList(prereqs).then(function doCallback_main() {\n this.prop.callback(this.prop.pdf);\n });\n };\n\n /* ----- SET / GET ----- */\n\n Worker.prototype.set = function set(opt) {\n // TODO: Implement ordered pairs?\n\n // Silently ignore invalid or empty input.\n if (objType(opt) !== \"object\") {\n return this;\n }\n\n // Build an array of setter functions to queue.\n var fns = Object.keys(opt || {}).map(function(key) {\n if (key in Worker.template.prop) {\n // Set pre-defined properties.\n return function set_prop() {\n this.prop[key] = opt[key];\n };\n } else {\n switch (key) {\n case \"margin\":\n return this.setMargin.bind(this, opt.margin);\n case \"jsPDF\":\n return function set_jsPDF() {\n this.opt.jsPDF = opt.jsPDF;\n return this.setPageSize();\n };\n case \"pageSize\":\n return this.setPageSize.bind(this, opt.pageSize);\n default:\n // Set any other properties in opt.\n return function set_opt() {\n this.opt[key] = opt[key];\n };\n }\n }\n }, this);\n\n // Set properties within the promise chain.\n return this.then(function set_main() {\n return this.thenList(fns);\n });\n };\n\n Worker.prototype.get = function get(key, cbk) {\n return this.then(function get_main() {\n // Fetch the requested property, either as a predefined prop or in opt.\n var val = key in Worker.template.prop ? this.prop[key] : this.opt[key];\n return cbk ? cbk(val) : val;\n });\n };\n\n Worker.prototype.setMargin = function setMargin(margin) {\n return this.then(function setMargin_main() {\n // Parse the margin property.\n switch (objType(margin)) {\n case \"number\":\n margin = [margin, margin, margin, margin];\n // eslint-disable-next-line no-fallthrough\n case \"array\":\n if (margin.length === 2) {\n margin = [margin[0], margin[1], margin[0], margin[1]];\n }\n if (margin.length === 4) {\n break;\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return this.error(\"Invalid margin array.\");\n }\n\n // Set the margin property, then update pageSize.\n this.opt.margin = margin;\n }).then(this.setPageSize);\n };\n\n Worker.prototype.setPageSize = function setPageSize(pageSize) {\n function toPx(val, k) {\n return Math.floor(((val * k) / 72) * 96);\n }\n\n return this.then(function setPageSize_main() {\n // Retrieve page-size based on jsPDF settings, if not explicitly provided.\n pageSize = pageSize || jsPDF.getPageSize(this.opt.jsPDF);\n\n // Add 'inner' field if not present.\n if (!pageSize.hasOwnProperty(\"inner\")) {\n pageSize.inner = {\n width: pageSize.width - this.opt.margin[1] - this.opt.margin[3],\n height: pageSize.height - this.opt.margin[0] - this.opt.margin[2]\n };\n pageSize.inner.px = {\n width: toPx(pageSize.inner.width, pageSize.k),\n height: toPx(pageSize.inner.height, pageSize.k)\n };\n pageSize.inner.ratio = pageSize.inner.height / pageSize.inner.width;\n }\n\n // Attach pageSize to this.\n this.prop.pageSize = pageSize;\n });\n };\n\n Worker.prototype.setProgress = function setProgress(val, state, n, stack) {\n // Immediately update all progress values.\n if (val != null) this.progress.val = val;\n if (state != null) this.progress.state = state;\n if (n != null) this.progress.n = n;\n if (stack != null) this.progress.stack = stack;\n this.progress.ratio = this.progress.val / this.progress.state;\n\n // Return this for command chaining.\n return this;\n };\n\n Worker.prototype.updateProgress = function updateProgress(\n val,\n state,\n n,\n stack\n ) {\n // Immediately update all progress values, using setProgress.\n return this.setProgress(\n val ? this.progress.val + val : null,\n state ? state : null,\n n ? this.progress.n + n : null,\n stack ? this.progress.stack.concat(stack) : null\n );\n };\n\n /* ----- PROMISE MAPPING ----- */\n\n Worker.prototype.then = function then(onFulfilled, onRejected) {\n // Wrap `this` for encapsulation.\n var self = this;\n\n return this.thenCore(onFulfilled, onRejected, function then_main(\n onFulfilled,\n onRejected\n ) {\n // Update progress while queuing, calling, and resolving `then`.\n self.updateProgress(null, null, 1, [onFulfilled]);\n return Promise.prototype.then\n .call(this, function then_pre(val) {\n self.updateProgress(null, onFulfilled);\n return val;\n })\n .then(onFulfilled, onRejected)\n .then(function then_post(val) {\n self.updateProgress(1);\n return val;\n });\n });\n };\n\n Worker.prototype.thenCore = function thenCore(\n onFulfilled,\n onRejected,\n thenBase\n ) {\n // Handle optional thenBase parameter.\n thenBase = thenBase || Promise.prototype.then;\n\n // Wrap `this` for encapsulation and bind it to the promise handlers.\n var self = this;\n if (onFulfilled) {\n onFulfilled = onFulfilled.bind(self);\n }\n if (onRejected) {\n onRejected = onRejected.bind(self);\n }\n\n // Cast self into a Promise to avoid polyfills recursively defining `then`.\n var isNative =\n Promise.toString().indexOf(\"[native code]\") !== -1 &&\n Promise.name === \"Promise\";\n var selfPromise = isNative\n ? self\n : Worker.convert(Object.assign({}, self), Promise.prototype);\n\n // Return the promise, after casting it into a Worker and preserving props.\n var returnVal = thenBase.call(selfPromise, onFulfilled, onRejected);\n return Worker.convert(returnVal, self.__proto__);\n };\n\n Worker.prototype.thenExternal = function thenExternal(\n onFulfilled,\n onRejected\n ) {\n // Call `then` and return a standard promise (exits the Worker chain).\n return Promise.prototype.then.call(this, onFulfilled, onRejected);\n };\n\n Worker.prototype.thenList = function thenList(fns) {\n // Queue a series of promise 'factories' into the promise chain.\n var self = this;\n fns.forEach(function thenList_forEach(fn) {\n self = self.thenCore(fn);\n });\n return self;\n };\n\n Worker.prototype[\"catch\"] = function(onRejected) {\n // Bind `this` to the promise handler, call `catch`, and return a Worker.\n if (onRejected) {\n onRejected = onRejected.bind(this);\n }\n var returnVal = Promise.prototype[\"catch\"].call(this, onRejected);\n return Worker.convert(returnVal, this);\n };\n\n Worker.prototype.catchExternal = function catchExternal(onRejected) {\n // Call `catch` and return a standard promise (exits the Worker chain).\n return Promise.prototype[\"catch\"].call(this, onRejected);\n };\n\n Worker.prototype.error = function error(msg) {\n // Throw the error in the Promise chain.\n return this.then(function error_main() {\n throw new Error(msg);\n });\n };\n\n /* ----- ALIASES ----- */\n\n Worker.prototype.using = Worker.prototype.set;\n Worker.prototype.saveAs = Worker.prototype.save;\n Worker.prototype.export = Worker.prototype.output;\n Worker.prototype.run = Worker.prototype.then;\n\n // Get dimensions of a PDF page, as determined by jsPDF.\n jsPDF.getPageSize = function(orientation, unit, format) {\n // Decode options object\n if (typeof orientation === \"object\") {\n var options = orientation;\n orientation = options.orientation;\n unit = options.unit || unit;\n format = options.format || format;\n }\n\n // Default options\n unit = unit || \"mm\";\n format = format || \"a4\";\n orientation = (\"\" + (orientation || \"P\")).toLowerCase();\n var format_as_string = (\"\" + format).toLowerCase();\n\n // Size in pt of various paper formats\n var pageFormats = {\n a0: [2383.94, 3370.39],\n a1: [1683.78, 2383.94],\n a2: [1190.55, 1683.78],\n a3: [841.89, 1190.55],\n a4: [595.28, 841.89],\n a5: [419.53, 595.28],\n a6: [297.64, 419.53],\n a7: [209.76, 297.64],\n a8: [147.4, 209.76],\n a9: [104.88, 147.4],\n a10: [73.7, 104.88],\n b0: [2834.65, 4008.19],\n b1: [2004.09, 2834.65],\n b2: [1417.32, 2004.09],\n b3: [1000.63, 1417.32],\n b4: [708.66, 1000.63],\n b5: [498.9, 708.66],\n b6: [354.33, 498.9],\n b7: [249.45, 354.33],\n b8: [175.75, 249.45],\n b9: [124.72, 175.75],\n b10: [87.87, 124.72],\n c0: [2599.37, 3676.54],\n c1: [1836.85, 2599.37],\n c2: [1298.27, 1836.85],\n c3: [918.43, 1298.27],\n c4: [649.13, 918.43],\n c5: [459.21, 649.13],\n c6: [323.15, 459.21],\n c7: [229.61, 323.15],\n c8: [161.57, 229.61],\n c9: [113.39, 161.57],\n c10: [79.37, 113.39],\n dl: [311.81, 623.62],\n letter: [612, 792],\n \"government-letter\": [576, 756],\n legal: [612, 1008],\n \"junior-legal\": [576, 360],\n ledger: [1224, 792],\n tabloid: [792, 1224],\n \"credit-card\": [153, 243]\n };\n\n var k;\n // Unit conversion\n switch (unit) {\n case \"pt\":\n k = 1;\n break;\n case \"mm\":\n k = 72 / 25.4;\n break;\n case \"cm\":\n k = 72 / 2.54;\n break;\n case \"in\":\n k = 72;\n break;\n case \"px\":\n k = 72 / 96;\n break;\n case \"pc\":\n k = 12;\n break;\n case \"em\":\n k = 12;\n break;\n case \"ex\":\n k = 6;\n break;\n default:\n throw \"Invalid unit: \" + unit;\n }\n var pageHeight = 0;\n var pageWidth = 0;\n\n // Dimensions are stored as user units and converted to points on output\n if (pageFormats.hasOwnProperty(format_as_string)) {\n pageHeight = pageFormats[format_as_string][1] / k;\n pageWidth = pageFormats[format_as_string][0] / k;\n } else {\n try {\n pageHeight = format[1];\n pageWidth = format[0];\n } catch (err) {\n throw new Error(\"Invalid format: \" + format);\n }\n }\n\n var tmp;\n // Handle page orientation\n if (orientation === \"p\" || orientation === \"portrait\") {\n orientation = \"p\";\n if (pageWidth > pageHeight) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else if (orientation === \"l\" || orientation === \"landscape\") {\n orientation = \"l\";\n if (pageHeight > pageWidth) {\n tmp = pageWidth;\n pageWidth = pageHeight;\n pageHeight = tmp;\n }\n } else {\n throw \"Invalid orientation: \" + orientation;\n }\n\n // Return information (k is the unit conversion ratio from pts)\n var info = {\n width: pageWidth,\n height: pageHeight,\n unit: unit,\n k: k,\n orientation: orientation\n };\n return info;\n };\n\n /**\n * @typedef FontFace\n *\n * The font-face type implements an interface similar to that of the font-face CSS rule,\n * and is used by jsPDF to match fonts when the font property of CanvasRenderingContext2D\n * is updated.\n *\n * All properties expect values similar to those in the font-face CSS rule. A difference\n * is the font-family, which do not need to be enclosed in double-quotes when containing\n * spaces like in CSS.\n *\n * @property {string} family The name of the font-family.\n * @property {string|undefined} style The style that this font-face defines, e.g. 'italic'.\n * @property {string|number|undefined} weight The weight of the font, either as a string or a number (400, 500, 600, e.g.)\n * @property {string|undefined} stretch The stretch of the font, e.g. condensed, normal, expanded.\n * @property {Object[]} src A list of URLs from where fonts of various formats can be fetched.\n * @property {string} [src] url A URL to a font of a specific format.\n * @property {string} [src] format Format of the font referenced by the URL.\n */\n\n /**\n * Generate a PDF from an HTML element or string using.\n *\n * @name html\n * @function\n * @param {HTMLElement|string} source The source HTMLElement or a string containing HTML.\n * @param {Object} [options] Collection of settings\n * @param {function} [options.callback] The mandatory callback-function gets as first parameter the current jsPDF instance\n * @param {(number|number[])=} [options.margin] Page margins [top, right, bottom, left]. Default is 0.\n * @param {(boolean|'slice'|'text')=} [options.autoPaging] The auto paging mode.\n *
      \n *
    • \n * false: Auto paging is disabled.\n *
    • \n *
    • \n * true or 'slice': Will cut shapes or text chunks across page breaks. Will possibly\n * slice text in half, making it difficult to read.\n *
    • \n *
    • \n * 'text': Trys not to cut text in half across page breaks. Works best for documents consisting\n * mostly of a single column of text.\n *
    • \n *
    \n * Default is true.\n * @param {string} [options.filename] name of the file\n * @param {HTMLOptionImage} [options.image] image settings when converting HTML to image\n * @param {Html2CanvasOptions} [options.html2canvas] html2canvas options\n * @param {FontFace[]} [options.fontFaces] A list of font-faces to match when resolving fonts. Fonts will be added to the PDF based on the specified URL. If omitted, the font match algorithm falls back to old algorithm.\n * @param {jsPDF} [options.jsPDF] jsPDF instance\n * @param {number=} [options.x] x position on the PDF document in jsPDF units.\n * @param {number=} [options.y] y position on the PDF document in jsPDF units.\n * @param {number=} [options.width] The target width in the PDF document in jsPDF units. The rendered element will be\n * scaled such that it fits into the specified width. Has no effect if either the html2canvas.scale is\n * specified or the windowWidth option is NOT specified.\n * @param {number=} [options.windowWidth] The window width in CSS pixels. In contrast to the\n * html2canvas.windowWidth option, this option affects the actual container size while rendering and\n * does NOT affect CSS media queries. This option only has an effect, if the width option is also specified.\n *\n * @example\n * var doc = new jsPDF();\n *\n * doc.html(document.body, {\n * callback: function (doc) {\n * doc.save();\n * },\n * x: 10,\n * y: 10\n * });\n */\n jsPDFAPI.html = function(src, options) {\n \"use strict\";\n\n options = options || {};\n options.callback = options.callback || function() {};\n options.html2canvas = options.html2canvas || {};\n options.html2canvas.canvas = options.html2canvas.canvas || this.canvas;\n options.jsPDF = options.jsPDF || this;\n options.fontFaces = options.fontFaces\n ? options.fontFaces.map(normalizeFontFace)\n : null;\n\n // Create a new worker with the given options.\n var worker = new Worker(options);\n\n if (!options.worker) {\n // If worker is not set to true, perform the traditional 'simple' operation.\n return worker.from(src).doCallback();\n } else {\n // Otherwise, return the worker for new Promise-based operation.\n return worker;\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF JavaScript plugin\n *\n * @name javascript\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n var jsNamesObj, jsJsObj, text;\n /**\n * @name addJS\n * @function\n * @param {string} javascript The javascript to be embedded into the PDF-file.\n * @returns {jsPDF}\n */\n jsPDFAPI.addJS = function(javascript) {\n text = javascript;\n this.internal.events.subscribe(\"postPutResources\", function() {\n jsNamesObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/Names [(EmbeddedJS) \" + (jsNamesObj + 1) + \" 0 R]\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n\n jsJsObj = this.internal.newObject();\n this.internal.out(\"<<\");\n this.internal.out(\"/S /JavaScript\");\n this.internal.out(\"/JS (\" + text + \")\");\n this.internal.out(\">>\");\n this.internal.out(\"endobj\");\n });\n this.internal.events.subscribe(\"putCatalog\", function() {\n if (jsNamesObj !== undefined && jsJsObj !== undefined) {\n this.internal.out(\"/Names <>\");\n }\n });\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF Outline PlugIn\n *\n * Generates a PDF Outline\n * @name outline\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var namesOid;\n //var destsGoto = [];\n\n jsPDFAPI.events.push([\n \"postPutResources\",\n function() {\n var pdf = this;\n var rx = /^(\\d+) 0 obj$/;\n\n // Write action goto objects for each page\n // this.outline.destsGoto = [];\n // for (var i = 0; i < totalPages; i++) {\n // var id = pdf.internal.newObject();\n // this.outline.destsGoto.push(id);\n // pdf.internal.write(\"<> endobj\");\n // }\n //\n // for (var i = 0; i < dests.length; i++) {\n // pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0\n // R\");\n // }\n //\n if (this.outline.root.children.length > 0) {\n var lines = pdf.outline.render().split(/\\r\\n/);\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var m = rx.exec(line);\n if (m != null) {\n var oid = m[1];\n pdf.internal.newObjectDeferredBegin(oid, false);\n }\n pdf.internal.write(line);\n }\n }\n\n // This code will write named destination for each page reference\n // (page_1, etc)\n if (this.outline.createNamedDestinations) {\n var totalPages = this.internal.pages.length;\n // WARNING: this assumes jsPDF starts on page 3 and pageIDs\n // follow 5, 7, 9, etc\n // Write destination objects for each page\n var dests = [];\n for (var i = 0; i < totalPages; i++) {\n var id = pdf.internal.newObject();\n dests.push(id);\n var info = pdf.internal.getPageInfo(i + 1);\n pdf.internal.write(\n \"<< /D[\" + info.objId + \" 0 R /XYZ null null null]>> endobj\"\n );\n }\n\n // assign a name for each destination\n var names2Oid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Names [ \");\n for (var i = 0; i < dests.length; i++) {\n pdf.internal.write(\"(page_\" + (i + 1) + \")\" + dests[i] + \" 0 R\");\n }\n pdf.internal.write(\" ] >>\", \"endobj\");\n\n // var kids = pdf.internal.newObject();\n // pdf.internal.write('<< /Kids [ ' + names2Oid + ' 0 R');\n // pdf.internal.write(' ] >>', 'endobj');\n\n namesOid = pdf.internal.newObject();\n pdf.internal.write(\"<< /Dests \" + names2Oid + \" 0 R\");\n pdf.internal.write(\">>\", \"endobj\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"putCatalog\",\n function() {\n var pdf = this;\n if (pdf.outline.root.children.length > 0) {\n pdf.internal.write(\n \"/Outlines\",\n this.outline.makeRef(this.outline.root)\n );\n if (this.outline.createNamedDestinations) {\n pdf.internal.write(\"/Names \" + namesOid + \" 0 R\");\n }\n // Open with Bookmarks showing\n // pdf.internal.write(\"/PageMode /UseOutlines\");\n }\n }\n ]);\n\n jsPDFAPI.events.push([\n \"initialized\",\n function() {\n var pdf = this;\n\n pdf.outline = {\n createNamedDestinations: false,\n root: {\n children: []\n }\n };\n\n /**\n * Options: pageNumber\n */\n pdf.outline.add = function(parent, title, options) {\n var item = {\n title: title,\n options: options,\n children: []\n };\n if (parent == null) {\n parent = this.root;\n }\n parent.children.push(item);\n return item;\n };\n\n pdf.outline.render = function() {\n this.ctx = {};\n this.ctx.val = \"\";\n this.ctx.pdf = pdf;\n\n this.genIds_r(this.root);\n this.renderRoot(this.root);\n this.renderItems(this.root);\n\n return this.ctx.val;\n };\n\n pdf.outline.genIds_r = function(node) {\n node.id = pdf.internal.newObjectDeferred();\n for (var i = 0; i < node.children.length; i++) {\n this.genIds_r(node.children[i]);\n }\n };\n\n pdf.outline.renderRoot = function(node) {\n this.objStart(node);\n this.line(\"/Type /Outlines\");\n if (node.children.length > 0) {\n this.line(\"/First \" + this.makeRef(node.children[0]));\n this.line(\n \"/Last \" + this.makeRef(node.children[node.children.length - 1])\n );\n }\n this.line(\n \"/Count \" +\n this.count_r(\n {\n count: 0\n },\n node\n )\n );\n this.objEnd();\n };\n\n pdf.outline.renderItems = function(node) {\n var getVerticalCoordinateString = this.ctx.pdf.internal\n .getVerticalCoordinateString;\n for (var i = 0; i < node.children.length; i++) {\n var item = node.children[i];\n this.objStart(item);\n\n this.line(\"/Title \" + this.makeString(item.title));\n\n this.line(\"/Parent \" + this.makeRef(node));\n if (i > 0) {\n this.line(\"/Prev \" + this.makeRef(node.children[i - 1]));\n }\n if (i < node.children.length - 1) {\n this.line(\"/Next \" + this.makeRef(node.children[i + 1]));\n }\n if (item.children.length > 0) {\n this.line(\"/First \" + this.makeRef(item.children[0]));\n this.line(\n \"/Last \" + this.makeRef(item.children[item.children.length - 1])\n );\n }\n\n var count = (this.count = this.count_r(\n {\n count: 0\n },\n item\n ));\n if (count > 0) {\n this.line(\"/Count \" + count);\n }\n\n if (item.options) {\n if (item.options.pageNumber) {\n // Explicit Destination\n //WARNING this assumes page ids are 3,5,7, etc.\n var info = pdf.internal.getPageInfo(item.options.pageNumber);\n this.line(\n \"/Dest \" +\n \"[\" +\n info.objId +\n \" 0 R /XYZ 0 \" +\n getVerticalCoordinateString(0) +\n \" 0]\"\n );\n // this line does not work on all clients (pageNumber instead of page ref)\n //this.line('/Dest ' + '[' + (item.options.pageNumber - 1) + ' /XYZ 0 ' + this.ctx.pdf.internal.pageSize.getHeight() + ' 0]');\n\n // Named Destination\n // this.line('/Dest (page_' + (item.options.pageNumber) + ')');\n\n // Action Destination\n // var id = pdf.internal.newObject();\n // pdf.internal.write('<> endobj');\n // this.line('/A ' + id + ' 0 R' );\n }\n }\n this.objEnd();\n }\n for (var z = 0; z < node.children.length; z++) {\n this.renderItems(node.children[z]);\n }\n };\n\n pdf.outline.line = function(text) {\n this.ctx.val += text + \"\\r\\n\";\n };\n\n pdf.outline.makeRef = function(node) {\n return node.id + \" 0 R\";\n };\n\n pdf.outline.makeString = function(val) {\n return \"(\" + pdf.internal.pdfEscape(val) + \")\";\n };\n\n pdf.outline.objStart = function(node) {\n this.ctx.val += \"\\r\\n\" + node.id + \" 0 obj\" + \"\\r\\n<<\\r\\n\";\n };\n\n pdf.outline.objEnd = function() {\n this.ctx.val += \">> \\r\\n\" + \"endobj\" + \"\\r\\n\";\n };\n\n pdf.outline.count_r = function(ctx, node) {\n for (var i = 0; i < node.children.length; i++) {\n ctx.count++;\n this.count_r(ctx, node.children[i]);\n }\n return ctx.count;\n };\n }\n ]);\n\n return this;\n})(jsPDF.API);\n","/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF jpeg Support PlugIn\n *\n * @name jpeg_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * 0xc0 (SOF) Huffman - Baseline DCT\n * 0xc1 (SOF) Huffman - Extended sequential DCT\n * 0xc2 Progressive DCT (SOF2)\n * 0xc3 Spatial (sequential) lossless (SOF3)\n * 0xc4 Differential sequential DCT (SOF5)\n * 0xc5 Differential progressive DCT (SOF6)\n * 0xc6 Differential spatial (SOF7)\n * 0xc7\n */\n var markers = [0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7];\n\n //takes a string imgData containing the raw bytes of\n //a jpeg image and returns [width, height]\n //Algorithm from: http://www.64lines.com/jpeg-width-height\n var getJpegInfo = function(imgData) {\n var width, height, numcomponents;\n var blockLength = imgData.charCodeAt(4) * 256 + imgData.charCodeAt(5);\n var len = imgData.length;\n var result = { width: 0, height: 0, numcomponents: 1 };\n for (var i = 4; i < len; i += 2) {\n i += blockLength;\n if (markers.indexOf(imgData.charCodeAt(i + 1)) !== -1) {\n height = imgData.charCodeAt(i + 5) * 256 + imgData.charCodeAt(i + 6);\n width = imgData.charCodeAt(i + 7) * 256 + imgData.charCodeAt(i + 8);\n numcomponents = imgData.charCodeAt(i + 9);\n result = { width: width, height: height, numcomponents: numcomponents };\n break;\n } else {\n blockLength =\n imgData.charCodeAt(i + 2) * 256 + imgData.charCodeAt(i + 3);\n }\n }\n return result;\n };\n\n /**\n * @ignore\n */\n jsPDFAPI.processJPEG = function(\n data,\n index,\n alias,\n compression,\n dataAsBinaryString,\n colorSpace\n ) {\n var filter = this.decode.DCT_DECODE,\n bpc = 8,\n dims,\n result = null;\n\n if (\n typeof data === \"string\" ||\n this.__addimage__.isArrayBuffer(data) ||\n this.__addimage__.isArrayBufferView(data)\n ) {\n // if we already have a stored binary string rep use that\n data = dataAsBinaryString || data;\n data = this.__addimage__.isArrayBuffer(data)\n ? new Uint8Array(data)\n : data;\n data = this.__addimage__.isArrayBufferView(data)\n ? this.__addimage__.arrayBufferToBinaryString(data)\n : data;\n\n dims = getJpegInfo(data);\n switch (dims.numcomponents) {\n case 1:\n colorSpace = this.color_spaces.DEVICE_GRAY;\n break;\n case 4:\n colorSpace = this.color_spaces.DEVICE_CMYK;\n break;\n case 3:\n colorSpace = this.color_spaces.DEVICE_RGB;\n break;\n }\n\n result = {\n data: data,\n width: dims.width,\n height: dims.height,\n colorSpace: colorSpace,\n bitsPerComponent: bpc,\n filter: filter,\n index: index,\n alias: alias\n };\n }\n return result;\n };\n})(jsPDF.API);\n","// Generated by CoffeeScript 1.4.0\n\n/**\n * @license\n * PNG.js\n * Copyright (c) 2011 Devon Govett\n * MIT LICENSE\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { unzlibSync } from \"./fflate.js\";\nimport { globalObject } from \"./globalObject.js\";\n\nvar PNG = (function() {\n var APNG_BLEND_OP_OVER,\n APNG_BLEND_OP_SOURCE,\n APNG_DISPOSE_OP_BACKGROUND,\n APNG_DISPOSE_OP_NONE,\n APNG_DISPOSE_OP_PREVIOUS,\n makeImage,\n scratchCanvas,\n scratchCtx;\n\n APNG_DISPOSE_OP_NONE = 0;\n\n APNG_DISPOSE_OP_BACKGROUND = 1;\n\n APNG_DISPOSE_OP_PREVIOUS = 2;\n\n APNG_BLEND_OP_SOURCE = 0;\n\n APNG_BLEND_OP_OVER = 1;\n\n function PNG(data) {\n var chunkSize,\n colors,\n palLen,\n delayDen,\n delayNum,\n frame,\n i,\n index,\n key,\n section,\n palShort,\n text,\n _i,\n _j,\n _ref;\n this.data = data;\n this.pos = 8;\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.animation = null;\n this.text = {};\n frame = null;\n while (true) {\n chunkSize = this.readUInt32();\n section = function() {\n var _i, _results;\n _results = [];\n for (i = _i = 0; _i < 4; i = ++_i) {\n _results.push(String.fromCharCode(this.data[this.pos++]));\n }\n return _results;\n }\n .call(this)\n .join(\"\");\n switch (section) {\n case \"IHDR\":\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n case \"acTL\":\n this.animation = {\n numFrames: this.readUInt32(),\n numPlays: this.readUInt32() || Infinity,\n frames: []\n };\n break;\n case \"PLTE\":\n this.palette = this.read(chunkSize);\n break;\n case \"fcTL\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.pos += 4;\n frame = {\n width: this.readUInt32(),\n height: this.readUInt32(),\n xOffset: this.readUInt32(),\n yOffset: this.readUInt32()\n };\n delayNum = this.readUInt16();\n delayDen = this.readUInt16() || 100;\n frame.delay = (1000 * delayNum) / delayDen;\n frame.disposeOp = this.data[this.pos++];\n frame.blendOp = this.data[this.pos++];\n frame.data = [];\n break;\n case \"IDAT\":\n case \"fdAT\":\n if (section === \"fdAT\") {\n this.pos += 4;\n chunkSize -= 4;\n }\n data = (frame != null ? frame.data : void 0) || this.imgData;\n for (\n i = _i = 0;\n 0 <= chunkSize ? _i < chunkSize : _i > chunkSize;\n i = 0 <= chunkSize ? ++_i : --_i\n ) {\n data.push(this.data[this.pos++]);\n }\n break;\n case \"tRNS\":\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n palLen = this.palette.length / 3;\n this.transparency.indexed = this.read(chunkSize);\n if (this.transparency.indexed.length > palLen)\n throw new Error(\"More transparent colors than palette size\");\n /*\n * According to the PNG spec trns should be increased to the same size as palette if shorter\n */\n //palShort = 255 - this.transparency.indexed.length;\n palShort = palLen - this.transparency.indexed.length;\n if (palShort > 0) {\n for (\n i = _j = 0;\n 0 <= palShort ? _j < palShort : _j > palShort;\n i = 0 <= palShort ? ++_j : --_j\n ) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n this.transparency.rgb = this.read(chunkSize);\n }\n break;\n case \"tEXt\":\n text = this.read(chunkSize);\n index = text.indexOf(0);\n key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n case \"IEND\":\n if (frame) {\n this.animation.frames.push(frame);\n }\n this.colors = function() {\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n return 1;\n case 2:\n case 6:\n return 3;\n }\n }.call(this);\n this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;\n colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n this.colorSpace = function() {\n switch (this.colors) {\n case 1:\n return \"DeviceGray\";\n case 3:\n return \"DeviceRGB\";\n }\n }.call(this);\n this.imgData = new Uint8Array(this.imgData);\n return;\n default:\n this.pos += chunkSize;\n }\n this.pos += 4;\n if (this.pos > this.data.length) {\n throw new Error(\"Incomplete or corrupt PNG file\");\n }\n }\n }\n\n PNG.prototype.read = function(bytes) {\n var i, _i, _results;\n _results = [];\n for (\n i = _i = 0;\n 0 <= bytes ? _i < bytes : _i > bytes;\n i = 0 <= bytes ? ++_i : --_i\n ) {\n _results.push(this.data[this.pos++]);\n }\n return _results;\n };\n\n PNG.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.data[this.pos++] << 24;\n b2 = this.data[this.pos++] << 16;\n b3 = this.data[this.pos++] << 8;\n b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n };\n\n PNG.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.data[this.pos++] << 8;\n b2 = this.data[this.pos++];\n return b1 | b2;\n };\n\n PNG.prototype.decodePixels = function(data) {\n var pixelBytes = this.pixelBitlength / 8;\n var fullPixels = new Uint8Array(this.width * this.height * pixelBytes);\n var pos = 0;\n var _this = this;\n\n if (data == null) {\n data = this.imgData;\n }\n if (data.length === 0) {\n return new Uint8Array(0);\n }\n\n data = unzlibSync(data);\n function pass(x0, y0, dx, dy) {\n var abyte,\n c,\n col,\n i,\n left,\n length,\n p,\n pa,\n paeth,\n pb,\n pc,\n pixels,\n row,\n scanlineLength,\n upper,\n upperLeft,\n _i,\n _j,\n _k,\n _l,\n _m;\n var w = Math.ceil((_this.width - x0) / dx),\n h = Math.ceil((_this.height - y0) / dy);\n var isFull = _this.width == w && _this.height == h;\n scanlineLength = pixelBytes * w;\n pixels = isFull ? fullPixels : new Uint8Array(scanlineLength * h);\n length = data.length;\n row = 0;\n c = 0;\n while (row < h && pos < length) {\n switch (data[pos++]) {\n case 0:\n for (i = _i = 0; _i < scanlineLength; i = _i += 1) {\n pixels[c++] = data[pos++];\n }\n break;\n case 1:\n for (i = _j = 0; _j < scanlineLength; i = _j += 1) {\n abyte = data[pos++];\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n pixels[c++] = (abyte + left) % 256;\n }\n break;\n case 2:\n for (i = _k = 0; _k < scanlineLength; i = _k += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (upper + abyte) % 256;\n }\n break;\n case 3:\n for (i = _l = 0; _l < scanlineLength; i = _l += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n upper =\n row &&\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n pixels[c++] = (abyte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n case 4:\n for (i = _m = 0; _m < scanlineLength; i = _m += 1) {\n abyte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : pixels[c - pixelBytes];\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n pixels[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n pixels[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n p = left + upper - upperLeft;\n pa = Math.abs(p - left);\n pb = Math.abs(p - upper);\n pc = Math.abs(p - upperLeft);\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n pixels[c++] = (abyte + paeth) % 256;\n }\n break;\n default:\n throw new Error(\"Invalid filter algorithm: \" + data[pos - 1]);\n }\n if (!isFull) {\n var fullPos = ((y0 + row * dy) * _this.width + x0) * pixelBytes;\n var partPos = row * scanlineLength;\n for (i = 0; i < w; i += 1) {\n for (var j = 0; j < pixelBytes; j += 1)\n fullPixels[fullPos++] = pixels[partPos++];\n fullPos += (dx - 1) * pixelBytes;\n }\n }\n row++;\n }\n }\n if (_this.interlaceMethod == 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n /* NOTE these seem to follow the pattern:\n * pass(x, 0, 2*x, 2*x);\n * pass(0, x, x, 2*x);\n * with x being 4, 2, 1.\n */\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1);\n }\n return fullPixels;\n };\n\n PNG.prototype.decodePalette = function() {\n var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;\n palette = this.palette;\n transparency = this.transparency.indexed || [];\n ret = new Uint8Array((transparency.length || 0) + palette.length);\n pos = 0;\n length = palette.length;\n c = 0;\n for (i = _i = 0, _ref = length; _i < _ref; i = _i += 3) {\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;\n }\n return ret;\n };\n\n PNG.prototype.copyToImageData = function(imageData, pixels) {\n var alpha, colors, data, i, input, j, k, length, palette, v, _ref;\n colors = this.colors;\n palette = null;\n alpha = this.hasAlphaChannel;\n if (this.palette.length) {\n palette =\n (_ref = this._decodedPalette) != null\n ? _ref\n : (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n data = imageData.data || imageData;\n length = data.length;\n input = palette || pixels;\n i = j = 0;\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n };\n\n PNG.prototype.decode = function() {\n var ret;\n ret = new Uint8Array(this.width * this.height * 4);\n this.copyToImageData(ret, this.decodePixels());\n return ret;\n };\n\n var hasBrowserCanvas = function() {\n if (Object.prototype.toString.call(globalObject) === \"[object Window]\") {\n try {\n scratchCanvas = globalObject.document.createElement(\"canvas\");\n scratchCtx = scratchCanvas.getContext(\"2d\");\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n };\n\n hasBrowserCanvas();\n\n makeImage = function(imageData) {\n if (hasBrowserCanvas() === true) {\n var img;\n scratchCtx.width = imageData.width;\n scratchCtx.height = imageData.height;\n scratchCtx.clearRect(0, 0, imageData.width, imageData.height);\n scratchCtx.putImageData(imageData, 0, 0);\n img = new Image();\n img.src = scratchCanvas.toDataURL();\n return img;\n }\n throw new Error(\"This method requires a Browser with Canvas-capability.\");\n };\n\n PNG.prototype.decodeFrames = function(ctx) {\n var frame, i, imageData, pixels, _i, _len, _ref, _results;\n if (!this.animation) {\n return;\n }\n _ref = this.animation.frames;\n _results = [];\n for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n frame = _ref[i];\n imageData = ctx.createImageData(frame.width, frame.height);\n pixels = this.decodePixels(new Uint8Array(frame.data));\n this.copyToImageData(imageData, pixels);\n frame.imageData = imageData;\n _results.push((frame.image = makeImage(imageData)));\n }\n return _results;\n };\n\n PNG.prototype.renderFrame = function(ctx, number) {\n var frame, frames, prev;\n frames = this.animation.frames;\n frame = frames[number];\n prev = frames[number - 1];\n if (number === 0) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_BACKGROUND\n ) {\n ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height);\n } else if (\n (prev != null ? prev.disposeOp : void 0) === APNG_DISPOSE_OP_PREVIOUS\n ) {\n ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset);\n }\n if (frame.blendOp === APNG_BLEND_OP_SOURCE) {\n ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height);\n }\n return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset);\n };\n\n PNG.prototype.animate = function(ctx) {\n var doFrame,\n frameNumber,\n frames,\n numFrames,\n numPlays,\n _ref,\n _this = this;\n frameNumber = 0;\n (_ref = this.animation),\n (numFrames = _ref.numFrames),\n (frames = _ref.frames),\n (numPlays = _ref.numPlays);\n return (doFrame = function() {\n var f, frame;\n f = frameNumber++ % numFrames;\n frame = frames[f];\n _this.renderFrame(ctx, f);\n if (numFrames > 1 && frameNumber / numFrames < numPlays) {\n return (_this.animation._timeout = setTimeout(doFrame, frame.delay));\n }\n })();\n };\n\n PNG.prototype.stopAnimation = function() {\n var _ref;\n return clearTimeout(\n (_ref = this.animation) != null ? _ref._timeout : void 0\n );\n };\n\n PNG.prototype.render = function(canvas) {\n var ctx, data;\n if (canvas._png) {\n canvas._png.stopAnimation();\n }\n canvas._png = this;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx = canvas.getContext(\"2d\");\n if (this.animation) {\n this.decodeFrames(ctx);\n return this.animate(ctx);\n } else {\n data = ctx.createImageData(this.width, this.height);\n this.copyToImageData(data, this.decodePixels());\n return ctx.putImageData(data, 0, 0);\n }\n };\n\n return PNG;\n})();\n\nexport { PNG };\n","/** @license\n * MIT license.\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF split_text_to_size plugin\n *\n * @name split_text_to_size\n * @module\n */\n(function(API) {\n \"use strict\";\n /**\n * Returns an array of length matching length of the 'word' string, with each\n * cell occupied by the width of the char in that position.\n *\n * @name getCharWidthsArray\n * @function\n * @param {string} text\n * @param {Object} options\n * @returns {Array}\n */\n var getCharWidthsArray = (API.getCharWidthsArray = function(text, options) {\n options = options || {};\n\n var activeFont = options.font || this.internal.getFont();\n var fontSize = options.fontSize || this.internal.getFontSize();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n\n var widths = options.widths\n ? options.widths\n : activeFont.metadata.Unicode.widths;\n var widthsFractionOf = widths.fof ? widths.fof : 1;\n var kerning = options.kerning\n ? options.kerning\n : activeFont.metadata.Unicode.kerning;\n var kerningFractionOf = kerning.fof ? kerning.fof : 1;\n var doKerning = options.doKerning === false ? false : true;\n var kerningValue = 0;\n\n var i;\n var length = text.length;\n var char_code;\n var prior_char_code = 0; //for kerning\n var default_char_width = widths[0] || widthsFractionOf;\n var output = [];\n\n for (i = 0; i < length; i++) {\n char_code = text.charCodeAt(i);\n\n if (typeof activeFont.metadata.widthOfString === \"function\") {\n output.push(\n (activeFont.metadata.widthOfGlyph(\n activeFont.metadata.characterToGlyph(char_code)\n ) +\n charSpace * (1000 / fontSize) || 0) / 1000\n );\n } else {\n if (\n doKerning &&\n typeof kerning[char_code] === \"object\" &&\n !isNaN(parseInt(kerning[char_code][prior_char_code], 10))\n ) {\n kerningValue =\n kerning[char_code][prior_char_code] / kerningFractionOf;\n } else {\n kerningValue = 0;\n }\n output.push(\n (widths[char_code] || default_char_width) / widthsFractionOf +\n kerningValue\n );\n }\n prior_char_code = char_code;\n }\n\n return output;\n });\n\n /**\n * Returns a widths of string in a given font, if the font size is set as 1 point.\n *\n * In other words, this is \"proportional\" value. For 1 unit of font size, the length\n * of the string will be that much.\n *\n * Multiply by font size to get actual width in *points*\n * Then divide by 72 to get inches or divide by (72/25.6) to get 'mm' etc.\n *\n * @name getStringUnitWidth\n * @public\n * @function\n * @param {string} text\n * @param {string} options\n * @returns {number} result\n */\n var getStringUnitWidth = (API.getStringUnitWidth = function(text, options) {\n options = options || {};\n\n var fontSize = options.fontSize || this.internal.getFontSize();\n var font = options.font || this.internal.getFont();\n var charSpace = options.charSpace || this.internal.getCharSpace();\n var result = 0;\n\n if (API.processArabic) {\n text = API.processArabic(text);\n }\n\n if (typeof font.metadata.widthOfString === \"function\") {\n result =\n font.metadata.widthOfString(text, fontSize, charSpace) / fontSize;\n } else {\n result = getCharWidthsArray\n .apply(this, arguments)\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n }\n return result;\n });\n\n /**\n returns array of lines\n */\n var splitLongWord = function(word, widths_array, firstLineMaxLen, maxLen) {\n var answer = [];\n\n // 1st, chop off the piece that can fit on the hanging line.\n var i = 0,\n l = word.length,\n workingLen = 0;\n while (i !== l && workingLen + widths_array[i] < firstLineMaxLen) {\n workingLen += widths_array[i];\n i++;\n }\n // this is first line.\n answer.push(word.slice(0, i));\n\n // 2nd. Split the rest into maxLen pieces.\n var startOfLine = i;\n workingLen = 0;\n while (i !== l) {\n if (workingLen + widths_array[i] > maxLen) {\n answer.push(word.slice(startOfLine, i));\n workingLen = 0;\n startOfLine = i;\n }\n workingLen += widths_array[i];\n i++;\n }\n if (startOfLine !== i) {\n answer.push(word.slice(startOfLine, i));\n }\n\n return answer;\n };\n\n // Note, all sizing inputs for this function must be in \"font measurement units\"\n // By default, for PDF, it's \"point\".\n var splitParagraphIntoLines = function(text, maxlen, options) {\n // at this time works only on Western scripts, ones with space char\n // separating the words. Feel free to expand.\n\n if (!options) {\n options = {};\n }\n\n var line = [],\n lines = [line],\n line_length = options.textIndent || 0,\n separator_length = 0,\n current_word_length = 0,\n word,\n widths_array,\n words = text.split(\" \"),\n spaceCharWidth = getCharWidthsArray.apply(this, [\" \", options])[0],\n i,\n l,\n tmp,\n lineIndent;\n\n if (options.lineIndent === -1) {\n lineIndent = words[0].length + 2;\n } else {\n lineIndent = options.lineIndent || 0;\n }\n if (lineIndent) {\n var pad = Array(lineIndent).join(\" \"),\n wrds = [];\n words.map(function(wrd) {\n wrd = wrd.split(/\\s*\\n/);\n if (wrd.length > 1) {\n wrds = wrds.concat(\n wrd.map(function(wrd, idx) {\n return (idx && wrd.length ? \"\\n\" : \"\") + wrd;\n })\n );\n } else {\n wrds.push(wrd[0]);\n }\n });\n words = wrds;\n lineIndent = getStringUnitWidth.apply(this, [pad, options]);\n }\n\n for (i = 0, l = words.length; i < l; i++) {\n var force = 0;\n\n word = words[i];\n if (lineIndent && word[0] == \"\\n\") {\n word = word.substr(1);\n force = 1;\n }\n widths_array = getCharWidthsArray.apply(this, [word, options]);\n current_word_length = widths_array.reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n\n if (\n line_length + separator_length + current_word_length > maxlen ||\n force\n ) {\n if (current_word_length > maxlen) {\n // this happens when you have space-less long URLs for example.\n // we just chop these to size. We do NOT insert hiphens\n tmp = splitLongWord.apply(this, [\n word,\n widths_array,\n maxlen - (line_length + separator_length),\n maxlen\n ]);\n // first line we add to existing line object\n line.push(tmp.shift()); // it's ok to have extra space indicator there\n // last line we make into new line object\n line = [tmp.pop()];\n // lines in the middle we apped to lines object as whole lines\n while (tmp.length) {\n lines.push([tmp.shift()]); // single fragment occupies whole line\n }\n current_word_length = widths_array\n .slice(word.length - (line[0] ? line[0].length : 0))\n .reduce(function(pv, cv) {\n return pv + cv;\n }, 0);\n } else {\n // just put it on a new line\n line = [word];\n }\n\n // now we attach new line to lines\n lines.push(line);\n line_length = current_word_length + lineIndent;\n separator_length = spaceCharWidth;\n } else {\n line.push(word);\n\n line_length += separator_length + current_word_length;\n separator_length = spaceCharWidth;\n }\n }\n\n var postProcess;\n if (lineIndent) {\n postProcess = function(ln, idx) {\n return (idx ? pad : \"\") + ln.join(\" \");\n };\n } else {\n postProcess = function(ln) {\n return ln.join(\" \");\n };\n }\n\n return lines.map(postProcess);\n };\n\n /**\n * Splits a given string into an array of strings. Uses 'size' value\n * (in measurement units declared as default for the jsPDF instance)\n * and the font's \"widths\" and \"Kerning\" tables, where available, to\n * determine display length of a given string for a given font.\n *\n * We use character's 100% of unit size (height) as width when Width\n * table or other default width is not available.\n *\n * @name splitTextToSize\n * @public\n * @function\n * @param {string} text Unencoded, regular JavaScript (Unicode, UTF-16 / UCS-2) string.\n * @param {number} size Nominal number, measured in units default to this instance of jsPDF.\n * @param {Object} options Optional flags needed for chopper to do the right thing.\n * @returns {Array} array Array with strings chopped to size.\n */\n API.splitTextToSize = function(text, maxlen, options) {\n \"use strict\";\n\n options = options || {};\n\n var fsize = options.fontSize || this.internal.getFontSize(),\n newOptions = function(options) {\n var widths = {\n 0: 1\n },\n kerning = {};\n\n if (!options.widths || !options.kerning) {\n var f = this.internal.getFont(options.fontName, options.fontStyle),\n encoding = \"Unicode\";\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE\n // Actual JavaScript-native String's 16bit char codes used.\n // no multi-byte logic here\n\n if (f.metadata[encoding]) {\n return {\n widths: f.metadata[encoding].widths || widths,\n kerning: f.metadata[encoding].kerning || kerning\n };\n } else {\n return {\n font: f.metadata,\n fontSize: this.internal.getFontSize(),\n charSpace: this.internal.getCharSpace()\n };\n }\n } else {\n return {\n widths: options.widths,\n kerning: options.kerning\n };\n }\n }.call(this, options);\n\n // first we split on end-of-line chars\n var paragraphs;\n if (Array.isArray(text)) {\n paragraphs = text;\n } else {\n paragraphs = String(text).split(/\\r?\\n/);\n }\n\n // now we convert size (max length of line) into \"font size units\"\n // at present time, the \"font size unit\" is always 'point'\n // 'proportional' means, \"in proportion to font size\"\n var fontUnit_maxLen = (1.0 * this.internal.scaleFactor * maxlen) / fsize;\n // at this time, fsize is always in \"points\" regardless of the default measurement unit of the doc.\n // this may change in the future?\n // until then, proportional_maxlen is likely to be in 'points'\n\n // If first line is to be indented (shorter or longer) than maxLen\n // we indicate that by using CSS-style \"text-indent\" option.\n // here it's in font units too (which is likely 'points')\n // it can be negative (which makes the first line longer than maxLen)\n newOptions.textIndent = options.textIndent\n ? (options.textIndent * 1.0 * this.internal.scaleFactor) / fsize\n : 0;\n newOptions.lineIndent = options.lineIndent;\n\n var i,\n l,\n output = [];\n for (i = 0, l = paragraphs.length; i < l; i++) {\n output = output.concat(\n splitParagraphIntoLines.apply(this, [\n paragraphs[i],\n fontUnit_maxLen,\n newOptions\n ])\n );\n }\n\n return output;\n };\n})(jsPDF.API);\n","/**\n * @license\n * (c) Dean McNamee , 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */\n\n\"use strict\";\n\nimport { console } from \"./console.js\";\n\nfunction GifWriter(buf, width, height, gopts) {\n var p = 0;\n\n var gopts = gopts === undefined ? {} : gopts;\n var loop_count = gopts.loop === undefined ? null : gopts.loop;\n var global_palette = gopts.palette === undefined ? null : gopts.palette;\n\n if (width <= 0 || height <= 0 || width > 65535 || height > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n function check_palette_and_num_colors(palette) {\n var num_colors = palette.length;\n if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {\n throw new Error(\n \"Invalid code/color length, must be power of 2 and 2 .. 256.\"\n );\n }\n return num_colors;\n }\n\n // - Header.\n buf[p++] = 0x47;\n buf[p++] = 0x49;\n buf[p++] = 0x46; // GIF\n buf[p++] = 0x38;\n buf[p++] = 0x39;\n buf[p++] = 0x61; // 89a\n\n // Handling of Global Color Table (palette) and background index.\n var gp_num_colors_pow2 = 0;\n var background = 0;\n if (global_palette !== null) {\n var gp_num_colors = check_palette_and_num_colors(global_palette);\n while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;\n gp_num_colors = 1 << gp_num_colors_pow2;\n --gp_num_colors_pow2;\n if (gopts.background !== undefined) {\n background = gopts.background;\n if (background >= gp_num_colors)\n throw new Error(\"Background index out of range.\");\n // The GIF spec states that a background index of 0 should be ignored, so\n // this is probably a mistake and you really want to set it to another\n // slot in the palette. But actually in the end most browsers, etc end\n // up ignoring this almost completely (including for dispose background).\n if (background === 0)\n throw new Error(\"Background index explicitly passed as 0.\");\n }\n }\n\n // - Logical Screen Descriptor.\n // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.\n buf[p++] = width & 0xff;\n buf[p++] = (width >> 8) & 0xff;\n buf[p++] = height & 0xff;\n buf[p++] = (height >> 8) & 0xff;\n // NOTE: Indicates 0-bpp original color resolution (unused?).\n buf[p++] = (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).\n buf[p++] = background; // Background Color Index.\n buf[p++] = 0; // Pixel aspect ratio (unused?).\n\n // - Global Color Table\n if (global_palette !== null) {\n for (var i = 0, il = global_palette.length; i < il; ++i) {\n var rgb = global_palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n if (loop_count !== null) {\n // Netscape block for looping.\n if (loop_count < 0 || loop_count > 65535)\n throw new Error(\"Loop count invalid.\");\n // Extension code, label, and length.\n buf[p++] = 0x21;\n buf[p++] = 0xff;\n buf[p++] = 0x0b;\n // NETSCAPE2.0\n buf[p++] = 0x4e;\n buf[p++] = 0x45;\n buf[p++] = 0x54;\n buf[p++] = 0x53;\n buf[p++] = 0x43;\n buf[p++] = 0x41;\n buf[p++] = 0x50;\n buf[p++] = 0x45;\n buf[p++] = 0x32;\n buf[p++] = 0x2e;\n buf[p++] = 0x30;\n // Sub-block\n buf[p++] = 0x03;\n buf[p++] = 0x01;\n buf[p++] = loop_count & 0xff;\n buf[p++] = (loop_count >> 8) & 0xff;\n buf[p++] = 0x00; // Terminator.\n }\n\n var ended = false;\n\n this.addFrame = function(x, y, w, h, indexed_pixels, opts) {\n if (ended === true) {\n --p;\n ended = false;\n } // Un-end.\n\n opts = opts === undefined ? {} : opts;\n\n // TODO(deanm): Bounds check x, y. Do they need to be within the virtual\n // canvas width/height, I imagine?\n if (x < 0 || y < 0 || x > 65535 || y > 65535)\n throw new Error(\"x/y invalid.\");\n\n if (w <= 0 || h <= 0 || w > 65535 || h > 65535)\n throw new Error(\"Width/Height invalid.\");\n\n if (indexed_pixels.length < w * h)\n throw new Error(\"Not enough pixels for the frame size.\");\n\n var using_local_palette = true;\n var palette = opts.palette;\n if (palette === undefined || palette === null) {\n using_local_palette = false;\n palette = global_palette;\n }\n\n if (palette === undefined || palette === null)\n throw new Error(\"Must supply either a local or global palette.\");\n\n var num_colors = check_palette_and_num_colors(palette);\n\n // Compute the min_code_size (power of 2), destroying num_colors.\n var min_code_size = 0;\n while ((num_colors >>= 1)) ++min_code_size;\n num_colors = 1 << min_code_size; // Now we can easily get it back.\n\n var delay = opts.delay === undefined ? 0 : opts.delay;\n\n // From the spec:\n // 0 - No disposal specified. The decoder is\n // not required to take any action.\n // 1 - Do not dispose. The graphic is to be left\n // in place.\n // 2 - Restore to background color. The area used by the\n // graphic must be restored to the background color.\n // 3 - Restore to previous. The decoder is required to\n // restore the area overwritten by the graphic with\n // what was there prior to rendering the graphic.\n // 4-7 - To be defined.\n // NOTE(deanm): Dispose background doesn't really work, apparently most\n // browsers ignore the background palette index and clear to transparency.\n var disposal = opts.disposal === undefined ? 0 : opts.disposal;\n if (disposal < 0 || disposal > 3)\n // 4-7 is reserved.\n throw new Error(\"Disposal out of range.\");\n\n var use_transparency = false;\n var transparent_index = 0;\n if (opts.transparent !== undefined && opts.transparent !== null) {\n use_transparency = true;\n transparent_index = opts.transparent;\n if (transparent_index < 0 || transparent_index >= num_colors)\n throw new Error(\"Transparent color index.\");\n }\n\n if (disposal !== 0 || use_transparency || delay !== 0) {\n // - Graphics Control Extension\n buf[p++] = 0x21;\n buf[p++] = 0xf9; // Extension / Label.\n buf[p++] = 4; // Byte size.\n\n buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);\n buf[p++] = delay & 0xff;\n buf[p++] = (delay >> 8) & 0xff;\n buf[p++] = transparent_index; // Transparent color index.\n buf[p++] = 0; // Block Terminator.\n }\n\n // - Image Descriptor\n buf[p++] = 0x2c; // Image Seperator.\n buf[p++] = x & 0xff;\n buf[p++] = (x >> 8) & 0xff; // Left.\n buf[p++] = y & 0xff;\n buf[p++] = (y >> 8) & 0xff; // Top.\n buf[p++] = w & 0xff;\n buf[p++] = (w >> 8) & 0xff;\n buf[p++] = h & 0xff;\n buf[p++] = (h >> 8) & 0xff;\n // NOTE: No sort flag (unused?).\n // TODO(deanm): Support interlace.\n buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;\n\n // - Local Color Table\n if (using_local_palette === true) {\n for (var i = 0, il = palette.length; i < il; ++i) {\n var rgb = palette[i];\n buf[p++] = (rgb >> 16) & 0xff;\n buf[p++] = (rgb >> 8) & 0xff;\n buf[p++] = rgb & 0xff;\n }\n }\n\n p = GifWriterOutputLZWCodeStream(\n buf,\n p,\n min_code_size < 2 ? 2 : min_code_size,\n indexed_pixels\n );\n\n return p;\n };\n\n this.end = function() {\n if (ended === false) {\n buf[p++] = 0x3b; // Trailer.\n ended = true;\n }\n return p;\n };\n\n this.getOutputBuffer = function() {\n return buf;\n };\n this.setOutputBuffer = function(v) {\n buf = v;\n };\n this.getOutputBufferPosition = function() {\n return p;\n };\n this.setOutputBufferPosition = function(v) {\n p = v;\n };\n}\n\n// Main compression routine, palette indexes -> LZW code stream.\n// |index_stream| must have at least one entry.\nfunction GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {\n buf[p++] = min_code_size;\n var cur_subblock = p++; // Pointing at the length field.\n\n var clear_code = 1 << min_code_size;\n var code_mask = clear_code - 1;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n var cur_shift = 0;\n // We have at most 12-bit codes, so we should have to hold a max of 19\n // bits here (and then we would write out).\n var cur = 0;\n\n function emit_bytes_to_buffer(bit_block_size) {\n while (cur_shift >= bit_block_size) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n }\n\n function emit_code(c) {\n cur |= c << cur_shift;\n cur_shift += cur_code_size;\n emit_bytes_to_buffer(8);\n }\n\n // I am not an expert on the topic, and I don't want to write a thesis.\n // However, it is good to outline here the basic algorithm and the few data\n // structures and optimizations here that make this implementation fast.\n // The basic idea behind LZW is to build a table of previously seen runs\n // addressed by a short id (herein called output code). All data is\n // referenced by a code, which represents one or more values from the\n // original input stream. All input bytes can be referenced as the same\n // value as an output code. So if you didn't want any compression, you\n // could more or less just output the original bytes as codes (there are\n // some details to this, but it is the idea). In order to achieve\n // compression, values greater then the input range (codes can be up to\n // 12-bit while input only 8-bit) represent a sequence of previously seen\n // inputs. The decompressor is able to build the same mapping while\n // decoding, so there is always a shared common knowledge between the\n // encoding and decoder, which is also important for \"timing\" aspects like\n // how to handle variable bit width code encoding.\n //\n // One obvious but very important consequence of the table system is there\n // is always a unique id (at most 12-bits) to map the runs. 'A' might be\n // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc. This relationship\n // can be used for an effecient lookup strategy for the code mapping. We\n // need to know if a run has been seen before, and be able to map that run\n // to the output code. Since we start with known unique ids (input bytes),\n // and then from those build more unique ids (table entries), we can\n // continue this chain (almost like a linked list) to always have small\n // integer values that represent the current byte chains in the encoder.\n // This means instead of tracking the input bytes (AAAABCD) to know our\n // current state, we can track the table entry for AAAABC (it is guaranteed\n // to exist by the nature of the algorithm) and the next character D.\n // Therefor the tuple of (table_entry, byte) is guaranteed to also be\n // unique. This allows us to create a simple lookup key for mapping input\n // sequences to codes (table indices) without having to store or search\n // any of the code sequences. So if 'AAAA' has a table entry of 12, the\n // tuple of ('AAAA', K) for any input byte K will be unique, and can be our\n // key. This leads to a integer value at most 20-bits, which can always\n // fit in an SMI value and be used as a fast sparse array / object key.\n\n // Output code for the current contents of the index buffer.\n var ib_code = index_stream[0] & code_mask; // Load first input index.\n var code_table = {}; // Key'd on our 20-bit \"tuple\".\n\n emit_code(clear_code); // Spec says first code should be a clear code.\n\n // First index already loaded, process the rest of the stream.\n for (var i = 1, il = index_stream.length; i < il; ++i) {\n var k = index_stream[i] & code_mask;\n var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.\n var cur_code = code_table[cur_key]; // buffer + k.\n\n // Check if we have to create a new code table entry.\n if (cur_code === undefined) {\n // We don't have buffer + k.\n // Emit index buffer (without k).\n // This is an inline version of emit_code, because this is the core\n // writing routine of the compressor (and V8 cannot inline emit_code\n // because it is a closure here in a different context). Additionally\n // we can call emit_byte_to_buffer less often, because we can have\n // 30-bits (from our 31-bit signed SMI), and we know our codes will only\n // be 12-bits, so can safely have 18-bits there without overflow.\n // emit_code(ib_code);\n cur |= ib_code << cur_shift;\n cur_shift += cur_code_size;\n while (cur_shift >= 8) {\n buf[p++] = cur & 0xff;\n cur >>= 8;\n cur_shift -= 8;\n if (p === cur_subblock + 256) {\n // Finished a subblock.\n buf[cur_subblock] = 255;\n cur_subblock = p++;\n }\n }\n\n if (next_code === 4096) {\n // Table full, need a clear.\n emit_code(clear_code);\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_table = {};\n } else {\n // Table not full, insert a new entry.\n // Increase our variable bit code sizes if necessary. This is a bit\n // tricky as it is based on \"timing\" between the encoding and\n // decoder. From the encoders perspective this should happen after\n // we've already emitted the index buffer and are about to create the\n // first table entry that would overflow our current code bit size.\n if (next_code >= 1 << cur_code_size) ++cur_code_size;\n code_table[cur_key] = next_code++; // Insert into code table.\n }\n\n ib_code = k; // Index buffer to single input k.\n } else {\n ib_code = cur_code; // Index buffer to sequence in code table.\n }\n }\n\n emit_code(ib_code); // There will still be something in the index buffer.\n emit_code(eoi_code); // End Of Information.\n\n // Flush / finalize the sub-blocks stream to the buffer.\n emit_bytes_to_buffer(1);\n\n // Finish the sub-blocks, writing out any unfinished lengths and\n // terminating with a sub-block of length 0. If we have already started\n // but not yet used a sub-block it can just become the terminator.\n if (cur_subblock + 1 === p) {\n // Started but unused.\n buf[cur_subblock] = 0;\n } else {\n // Started and used, write length and additional terminator block.\n buf[cur_subblock] = p - cur_subblock - 1;\n buf[p++] = 0;\n }\n return p;\n}\n\nfunction GifReader(buf) {\n var p = 0;\n\n // - Header (GIF87a or GIF89a).\n if (\n buf[p++] !== 0x47 ||\n buf[p++] !== 0x49 ||\n buf[p++] !== 0x46 ||\n buf[p++] !== 0x38 ||\n ((buf[p++] + 1) & 0xfd) !== 0x38 ||\n buf[p++] !== 0x61\n ) {\n throw new Error(\"Invalid GIF 87a/89a header.\");\n }\n\n // - Logical Screen Descriptor.\n var width = buf[p++] | (buf[p++] << 8);\n var height = buf[p++] | (buf[p++] << 8);\n var pf0 = buf[p++]; // .\n var global_palette_flag = pf0 >> 7;\n var num_global_colors_pow2 = pf0 & 0x7;\n var num_global_colors = 1 << (num_global_colors_pow2 + 1);\n var background = buf[p++];\n buf[p++]; // Pixel aspect ratio (unused?).\n\n var global_palette_offset = null;\n var global_palette_size = null;\n\n if (global_palette_flag) {\n global_palette_offset = p;\n global_palette_size = num_global_colors;\n p += num_global_colors * 3; // Seek past palette.\n }\n\n var no_eof = true;\n\n var frames = [];\n\n var delay = 0;\n var transparent_index = null;\n var disposal = 0; // 0 - No disposal specified.\n var loop_count = null;\n\n this.width = width;\n this.height = height;\n\n while (no_eof && p < buf.length) {\n switch (buf[p++]) {\n case 0x21: // Graphics Control Extension Block\n switch (buf[p++]) {\n case 0xff: // Application specific block\n // Try if it's a Netscape block (with animation loop counter).\n if (\n buf[p] !== 0x0b || // 21 FF already read, check block size.\n // NETSCAPE2.0\n (buf[p + 1] == 0x4e &&\n buf[p + 2] == 0x45 &&\n buf[p + 3] == 0x54 &&\n buf[p + 4] == 0x53 &&\n buf[p + 5] == 0x43 &&\n buf[p + 6] == 0x41 &&\n buf[p + 7] == 0x50 &&\n buf[p + 8] == 0x45 &&\n buf[p + 9] == 0x32 &&\n buf[p + 10] == 0x2e &&\n buf[p + 11] == 0x30 &&\n // Sub-block\n buf[p + 12] == 0x03 &&\n buf[p + 13] == 0x01 &&\n buf[p + 16] == 0)\n ) {\n p += 14;\n loop_count = buf[p++] | (buf[p++] << 8);\n p++; // Skip terminator.\n } else {\n // We don't know what it is, just try to get past it.\n p += 12;\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n }\n break;\n\n case 0xf9: // Graphics Control Extension\n if (buf[p++] !== 0x4 || buf[p + 4] !== 0)\n throw new Error(\"Invalid graphics extension block.\");\n var pf1 = buf[p++];\n delay = buf[p++] | (buf[p++] << 8);\n transparent_index = buf[p++];\n if ((pf1 & 1) === 0) transparent_index = null;\n disposal = (pf1 >> 2) & 0x7;\n p++; // Skip terminator.\n break;\n\n case 0xfe: // Comment Extension.\n while (true) {\n // Seek through subblocks.\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n // console.log(buf.slice(p, p+block_size).toString('ascii'));\n p += block_size;\n }\n break;\n\n default:\n throw new Error(\n \"Unknown graphic control label: 0x\" + buf[p - 1].toString(16)\n );\n }\n break;\n\n case 0x2c: // Image Descriptor.\n var x = buf[p++] | (buf[p++] << 8);\n var y = buf[p++] | (buf[p++] << 8);\n var w = buf[p++] | (buf[p++] << 8);\n var h = buf[p++] | (buf[p++] << 8);\n var pf2 = buf[p++];\n var local_palette_flag = pf2 >> 7;\n var interlace_flag = (pf2 >> 6) & 1;\n var num_local_colors_pow2 = pf2 & 0x7;\n var num_local_colors = 1 << (num_local_colors_pow2 + 1);\n var palette_offset = global_palette_offset;\n var palette_size = global_palette_size;\n var has_local_palette = false;\n if (local_palette_flag) {\n var has_local_palette = true;\n palette_offset = p; // Override with local palette.\n palette_size = num_local_colors;\n p += num_local_colors * 3; // Seek past palette.\n }\n\n var data_offset = p;\n\n p++; // codesize\n while (true) {\n var block_size = buf[p++];\n // Bad block size (ex: undefined from an out of bounds read).\n if (!(block_size >= 0)) throw Error(\"Invalid block size\");\n if (block_size === 0) break; // 0 size is terminator\n p += block_size;\n }\n\n frames.push({\n x: x,\n y: y,\n width: w,\n height: h,\n has_local_palette: has_local_palette,\n palette_offset: palette_offset,\n palette_size: palette_size,\n data_offset: data_offset,\n data_length: p - data_offset,\n transparent_index: transparent_index,\n interlaced: !!interlace_flag,\n delay: delay,\n disposal: disposal\n });\n break;\n\n case 0x3b: // Trailer Marker (end of file).\n no_eof = false;\n break;\n\n default:\n throw new Error(\"Unknown gif block: 0x\" + buf[p - 1].toString(16));\n break;\n }\n }\n\n this.numFrames = function() {\n return frames.length;\n };\n\n this.loopCount = function() {\n return loop_count;\n };\n\n this.frameInfo = function(frame_num) {\n if (frame_num < 0 || frame_num >= frames.length)\n throw new Error(\"Frame index out of range.\");\n return frames[frame_num];\n };\n\n this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = b;\n pixels[op++] = g;\n pixels[op++] = r;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n\n // I will go to copy and paste hell one day...\n this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {\n var frame = this.frameInfo(frame_num);\n var num_pixels = frame.width * frame.height;\n var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.\n GifReaderLZWOutputIndexStream(\n buf,\n frame.data_offset,\n index_stream,\n num_pixels\n );\n var palette_offset = frame.palette_offset;\n\n // NOTE(deanm): It seems to be much faster to compare index to 256 than\n // to === null. Not sure why, but CompareStub_EQ_STRICT shows up high in\n // the profile, not sure if it's related to using a Uint8Array.\n var trans = frame.transparent_index;\n if (trans === null) trans = 256;\n\n // We are possibly just blitting to a portion of the entire frame.\n // That is a subrect within the framerect, so the additional pixels\n // must be skipped over after we finished a scanline.\n var framewidth = frame.width;\n var framestride = width - framewidth;\n var xleft = framewidth; // Number of subrect pixels left in scanline.\n\n // Output indices of the top left and bottom right corners of the subrect.\n var opbeg = (frame.y * width + frame.x) * 4;\n var opend = ((frame.y + frame.height) * width + frame.x) * 4;\n var op = opbeg;\n\n var scanstride = framestride * 4;\n\n // Use scanstride to skip past the rows when interlacing. This is skipping\n // 7 rows for the first two passes, then 3 then 1.\n if (frame.interlaced === true) {\n scanstride += width * 4 * 7; // Pass 1.\n }\n\n var interlaceskip = 8; // Tracking the row interval in the current pass.\n\n for (var i = 0, il = index_stream.length; i < il; ++i) {\n var index = index_stream[i];\n\n if (xleft === 0) {\n // Beginning of new scan line\n op += scanstride;\n xleft = framewidth;\n if (op >= opend) {\n // Catch the wrap to switch passes when interlacing.\n scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);\n // interlaceskip / 2 * 4 is interlaceskip << 1.\n op = opbeg + (framewidth + framestride) * (interlaceskip << 1);\n interlaceskip >>= 1;\n }\n }\n\n if (index === trans) {\n op += 4;\n } else {\n var r = buf[palette_offset + index * 3];\n var g = buf[palette_offset + index * 3 + 1];\n var b = buf[palette_offset + index * 3 + 2];\n pixels[op++] = r;\n pixels[op++] = g;\n pixels[op++] = b;\n pixels[op++] = 255;\n }\n --xleft;\n }\n };\n}\n\nfunction GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {\n var min_code_size = code_stream[p++];\n\n var clear_code = 1 << min_code_size;\n var eoi_code = clear_code + 1;\n var next_code = eoi_code + 1;\n\n var cur_code_size = min_code_size + 1; // Number of bits per code.\n // NOTE: This shares the same name as the encoder, but has a different\n // meaning here. Here this masks each code coming from the code stream.\n var code_mask = (1 << cur_code_size) - 1;\n var cur_shift = 0;\n var cur = 0;\n\n var op = 0; // Output pointer.\n\n var subblock_size = code_stream[p++];\n\n // TODO(deanm): Would using a TypedArray be any faster? At least it would\n // solve the fast mode / backing store uncertainty.\n // var code_table = Array(4096);\n var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.\n\n var prev_code = null; // Track code-1.\n\n while (true) {\n // Read up to two bytes, making sure we always 12-bits for max sized code.\n while (cur_shift < 16) {\n if (subblock_size === 0) break; // No more data to be read.\n\n cur |= code_stream[p++] << cur_shift;\n cur_shift += 8;\n\n if (subblock_size === 1) {\n // Never let it get to 0 to hold logic above.\n subblock_size = code_stream[p++]; // Next subblock.\n } else {\n --subblock_size;\n }\n }\n\n // TODO(deanm): We should never really get here, we should have received\n // and EOI.\n if (cur_shift < cur_code_size) break;\n\n var code = cur & code_mask;\n cur >>= cur_code_size;\n cur_shift -= cur_code_size;\n\n // TODO(deanm): Maybe should check that the first code was a clear code,\n // at least this is what you're supposed to do. But actually our encoder\n // now doesn't emit a clear code first anyway.\n if (code === clear_code) {\n // We don't actually have to clear the table. This could be a good idea\n // for greater error checking, but we don't really do any anyway. We\n // will just track it with next_code and overwrite old entries.\n\n next_code = eoi_code + 1;\n cur_code_size = min_code_size + 1;\n code_mask = (1 << cur_code_size) - 1;\n\n // Don't update prev_code ?\n prev_code = null;\n continue;\n } else if (code === eoi_code) {\n break;\n }\n\n // We have a similar situation as the decoder, where we want to store\n // variable length entries (code table entries), but we want to do in a\n // faster manner than an array of arrays. The code below stores sort of a\n // linked list within the code table, and then \"chases\" through it to\n // construct the dictionary entries. When a new entry is created, just the\n // last byte is stored, and the rest (prefix) of the entry is only\n // referenced by its table entry. Then the code chases through the\n // prefixes until it reaches a single byte code. We have to chase twice,\n // first to compute the length, and then to actually copy the data to the\n // output (backwards, since we know the length). The alternative would be\n // storing something in an intermediate stack, but that doesn't make any\n // more sense. I implemented an approach where it also stored the length\n // in the code table, although it's a bit tricky because you run out of\n // bits (12 + 12 + 8), but I didn't measure much improvements (the table\n // entries are generally not the long). Even when I created benchmarks for\n // very long table entries the complexity did not seem worth it.\n // The code table stores the prefix entry in 12 bits and then the suffix\n // byte in 8 bits, so each entry is 20 bits.\n\n var chase_code = code < next_code ? code : prev_code;\n\n // Chase what we will output, either {CODE} or {CODE-1}.\n var chase_length = 0;\n var chase = chase_code;\n while (chase > clear_code) {\n chase = code_table[chase] >> 8;\n ++chase_length;\n }\n\n var k = chase;\n\n var op_end = op + chase_length + (chase_code !== code ? 1 : 0);\n if (op_end > output_length) {\n console.log(\"Warning, gif stream longer than expected.\");\n return;\n }\n\n // Already have the first byte from the chase, might as well write it fast.\n output[op++] = k;\n\n op += chase_length;\n var b = op; // Track pointer, writing backwards.\n\n if (chase_code !== code)\n // The case of emitting {CODE-1} + k.\n output[op++] = k;\n\n chase = chase_code;\n while (chase_length--) {\n chase = code_table[chase];\n output[--b] = chase & 0xff; // Write backwards.\n chase >>= 8; // Pull down to the prefix code.\n }\n\n if (prev_code !== null && next_code < 4096) {\n code_table[next_code++] = (prev_code << 8) | k;\n // TODO(deanm): Figure out this clearing vs code growth logic better. I\n // have an feeling that it should just happen somewhere else, for now it\n // is awkward between when we grow past the max and then hit a clear code.\n // For now just check if we hit the max 12-bits (then a clear code should\n // follow, also of course encoded in 12-bits).\n if (next_code >= code_mask + 1 && cur_code_size < 12) {\n ++cur_code_size;\n code_mask = (code_mask << 1) | 1;\n }\n }\n\n prev_code = code;\n }\n\n if (op !== output_length) {\n console.log(\"Warning, gif stream shorter than expected.\");\n }\n\n return output;\n}\n\nexport { GifReader, GifWriter };\n","/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n/*\nJPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n\nBasic GUI blocking jpeg encoder\n*/\n\nfunction JPEGEncoder(quality) {\n var ffloor = Math.floor;\n var YTable = new Array(64);\n var UVTable = new Array(64);\n var fdtbl_Y = new Array(64);\n var fdtbl_UV = new Array(64);\n var YDC_HT;\n var UVDC_HT;\n var YAC_HT;\n var UVAC_HT;\n\n var bitcode = new Array(65535);\n var category = new Array(65535);\n var outputfDCTQuant = new Array(64);\n var DU = new Array(64);\n var byteout = [];\n var bytenew = 0;\n var bytepos = 7;\n\n var YDU = new Array(64);\n var UDU = new Array(64);\n var VDU = new Array(64);\n var clt = new Array(256);\n var RGB_YUV_TABLE = new Array(2048);\n var currentQuality;\n\n var ZigZag = [\n 0,\n 1,\n 5,\n 6,\n 14,\n 15,\n 27,\n 28,\n 2,\n 4,\n 7,\n 13,\n 16,\n 26,\n 29,\n 42,\n 3,\n 8,\n 12,\n 17,\n 25,\n 30,\n 41,\n 43,\n 9,\n 11,\n 18,\n 24,\n 31,\n 40,\n 44,\n 53,\n 10,\n 19,\n 23,\n 32,\n 39,\n 45,\n 52,\n 54,\n 20,\n 22,\n 33,\n 38,\n 46,\n 51,\n 55,\n 60,\n 21,\n 34,\n 37,\n 47,\n 50,\n 56,\n 59,\n 61,\n 35,\n 36,\n 48,\n 49,\n 57,\n 58,\n 62,\n 63\n ];\n\n var std_dc_luminance_nrcodes = [\n 0,\n 0,\n 1,\n 5,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_luminance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_luminance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 3,\n 3,\n 2,\n 4,\n 3,\n 5,\n 5,\n 4,\n 4,\n 0,\n 0,\n 1,\n 0x7d\n ];\n var std_ac_luminance_values = [\n 0x01,\n 0x02,\n 0x03,\n 0x00,\n 0x04,\n 0x11,\n 0x05,\n 0x12,\n 0x21,\n 0x31,\n 0x41,\n 0x06,\n 0x13,\n 0x51,\n 0x61,\n 0x07,\n 0x22,\n 0x71,\n 0x14,\n 0x32,\n 0x81,\n 0x91,\n 0xa1,\n 0x08,\n 0x23,\n 0x42,\n 0xb1,\n 0xc1,\n 0x15,\n 0x52,\n 0xd1,\n 0xf0,\n 0x24,\n 0x33,\n 0x62,\n 0x72,\n 0x82,\n 0x09,\n 0x0a,\n 0x16,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x25,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x34,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe1,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf1,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n var std_dc_chrominance_nrcodes = [\n 0,\n 0,\n 3,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n var std_dc_chrominance_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n var std_ac_chrominance_nrcodes = [\n 0,\n 0,\n 2,\n 1,\n 2,\n 4,\n 4,\n 3,\n 4,\n 7,\n 5,\n 4,\n 4,\n 0,\n 1,\n 2,\n 0x77\n ];\n var std_ac_chrominance_values = [\n 0x00,\n 0x01,\n 0x02,\n 0x03,\n 0x11,\n 0x04,\n 0x05,\n 0x21,\n 0x31,\n 0x06,\n 0x12,\n 0x41,\n 0x51,\n 0x07,\n 0x61,\n 0x71,\n 0x13,\n 0x22,\n 0x32,\n 0x81,\n 0x08,\n 0x14,\n 0x42,\n 0x91,\n 0xa1,\n 0xb1,\n 0xc1,\n 0x09,\n 0x23,\n 0x33,\n 0x52,\n 0xf0,\n 0x15,\n 0x62,\n 0x72,\n 0xd1,\n 0x0a,\n 0x16,\n 0x24,\n 0x34,\n 0xe1,\n 0x25,\n 0xf1,\n 0x17,\n 0x18,\n 0x19,\n 0x1a,\n 0x26,\n 0x27,\n 0x28,\n 0x29,\n 0x2a,\n 0x35,\n 0x36,\n 0x37,\n 0x38,\n 0x39,\n 0x3a,\n 0x43,\n 0x44,\n 0x45,\n 0x46,\n 0x47,\n 0x48,\n 0x49,\n 0x4a,\n 0x53,\n 0x54,\n 0x55,\n 0x56,\n 0x57,\n 0x58,\n 0x59,\n 0x5a,\n 0x63,\n 0x64,\n 0x65,\n 0x66,\n 0x67,\n 0x68,\n 0x69,\n 0x6a,\n 0x73,\n 0x74,\n 0x75,\n 0x76,\n 0x77,\n 0x78,\n 0x79,\n 0x7a,\n 0x82,\n 0x83,\n 0x84,\n 0x85,\n 0x86,\n 0x87,\n 0x88,\n 0x89,\n 0x8a,\n 0x92,\n 0x93,\n 0x94,\n 0x95,\n 0x96,\n 0x97,\n 0x98,\n 0x99,\n 0x9a,\n 0xa2,\n 0xa3,\n 0xa4,\n 0xa5,\n 0xa6,\n 0xa7,\n 0xa8,\n 0xa9,\n 0xaa,\n 0xb2,\n 0xb3,\n 0xb4,\n 0xb5,\n 0xb6,\n 0xb7,\n 0xb8,\n 0xb9,\n 0xba,\n 0xc2,\n 0xc3,\n 0xc4,\n 0xc5,\n 0xc6,\n 0xc7,\n 0xc8,\n 0xc9,\n 0xca,\n 0xd2,\n 0xd3,\n 0xd4,\n 0xd5,\n 0xd6,\n 0xd7,\n 0xd8,\n 0xd9,\n 0xda,\n 0xe2,\n 0xe3,\n 0xe4,\n 0xe5,\n 0xe6,\n 0xe7,\n 0xe8,\n 0xe9,\n 0xea,\n 0xf2,\n 0xf3,\n 0xf4,\n 0xf5,\n 0xf6,\n 0xf7,\n 0xf8,\n 0xf9,\n 0xfa\n ];\n\n function initQuantTables(sf) {\n var YQT = [\n 16,\n 11,\n 10,\n 16,\n 24,\n 40,\n 51,\n 61,\n 12,\n 12,\n 14,\n 19,\n 26,\n 58,\n 60,\n 55,\n 14,\n 13,\n 16,\n 24,\n 40,\n 57,\n 69,\n 56,\n 14,\n 17,\n 22,\n 29,\n 51,\n 87,\n 80,\n 62,\n 18,\n 22,\n 37,\n 56,\n 68,\n 109,\n 103,\n 77,\n 24,\n 35,\n 55,\n 64,\n 81,\n 104,\n 113,\n 92,\n 49,\n 64,\n 78,\n 87,\n 103,\n 121,\n 120,\n 101,\n 72,\n 92,\n 95,\n 98,\n 112,\n 100,\n 103,\n 99\n ];\n\n for (var i = 0; i < 64; i++) {\n var t = ffloor((YQT[i] * sf + 50) / 100);\n t = Math.min(Math.max(t, 1), 255);\n YTable[ZigZag[i]] = t;\n }\n var UVQT = [\n 17,\n 18,\n 24,\n 47,\n 99,\n 99,\n 99,\n 99,\n 18,\n 21,\n 26,\n 66,\n 99,\n 99,\n 99,\n 99,\n 24,\n 26,\n 56,\n 99,\n 99,\n 99,\n 99,\n 99,\n 47,\n 66,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99,\n 99\n ];\n for (var j = 0; j < 64; j++) {\n var u = ffloor((UVQT[j] * sf + 50) / 100);\n u = Math.min(Math.max(u, 1), 255);\n UVTable[ZigZag[j]] = u;\n }\n var aasf = [\n 1.0,\n 1.387039845,\n 1.306562965,\n 1.175875602,\n 1.0,\n 0.785694958,\n 0.5411961,\n 0.275899379\n ];\n var k = 0;\n for (var row = 0; row < 8; row++) {\n for (var col = 0; col < 8; col++) {\n fdtbl_Y[k] = 1.0 / (YTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n fdtbl_UV[k] = 1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0);\n k++;\n }\n }\n }\n\n function computeHuffmanTbl(nrcodes, std_table) {\n var codevalue = 0;\n var pos_in_table = 0;\n var HT = new Array();\n for (var k = 1; k <= 16; k++) {\n for (var j = 1; j <= nrcodes[k]; j++) {\n HT[std_table[pos_in_table]] = [];\n HT[std_table[pos_in_table]][0] = codevalue;\n HT[std_table[pos_in_table]][1] = k;\n pos_in_table++;\n codevalue++;\n }\n codevalue *= 2;\n }\n return HT;\n }\n\n function initHuffmanTbl() {\n YDC_HT = computeHuffmanTbl(\n std_dc_luminance_nrcodes,\n std_dc_luminance_values\n );\n UVDC_HT = computeHuffmanTbl(\n std_dc_chrominance_nrcodes,\n std_dc_chrominance_values\n );\n YAC_HT = computeHuffmanTbl(\n std_ac_luminance_nrcodes,\n std_ac_luminance_values\n );\n UVAC_HT = computeHuffmanTbl(\n std_ac_chrominance_nrcodes,\n std_ac_chrominance_values\n );\n }\n\n function initCategoryNumber() {\n var nrlower = 1;\n var nrupper = 2;\n for (var cat = 1; cat <= 15; cat++) {\n //Positive numbers\n for (var nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitcode[32767 + nr] = [];\n bitcode[32767 + nr][1] = cat;\n bitcode[32767 + nr][0] = nr;\n }\n //Negative numbers\n for (var nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitcode[32767 + nrneg] = [];\n bitcode[32767 + nrneg][1] = cat;\n bitcode[32767 + nrneg][0] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n function initRGBYUVTable() {\n for (var i = 0; i < 256; i++) {\n RGB_YUV_TABLE[i] = 19595 * i;\n RGB_YUV_TABLE[(i + 256) >> 0] = 38470 * i;\n RGB_YUV_TABLE[(i + 512) >> 0] = 7471 * i + 0x8000;\n RGB_YUV_TABLE[(i + 768) >> 0] = -11059 * i;\n RGB_YUV_TABLE[(i + 1024) >> 0] = -21709 * i;\n RGB_YUV_TABLE[(i + 1280) >> 0] = 32768 * i + 0x807fff;\n RGB_YUV_TABLE[(i + 1536) >> 0] = -27439 * i;\n RGB_YUV_TABLE[(i + 1792) >> 0] = -5329 * i;\n }\n }\n\n // IO functions\n function writeBits(bs) {\n var value = bs[0];\n var posval = bs[1] - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) {\n bytenew |= 1 << bytepos;\n }\n posval--;\n bytepos--;\n if (bytepos < 0) {\n if (bytenew == 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(bytenew);\n }\n bytepos = 7;\n bytenew = 0;\n }\n }\n }\n\n function writeByte(value) {\n //byteout.push(clt[value]); // write char directly instead of converting later\n byteout.push(value);\n }\n\n function writeWord(value) {\n writeByte((value >> 8) & 0xff);\n writeByte(value & 0xff);\n }\n\n // DCT & quantization core\n function fDCTQuant(data, fdtbl) {\n var d0, d1, d2, d3, d4, d5, d6, d7;\n /* Pass 1: process rows. */\n var dataOff = 0;\n var i;\n var I8 = 8;\n var I64 = 64;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 1];\n d2 = data[dataOff + 2];\n d3 = data[dataOff + 3];\n d4 = data[dataOff + 4];\n d5 = data[dataOff + 5];\n d6 = data[dataOff + 6];\n d7 = data[dataOff + 7];\n\n var tmp0 = d0 + d7;\n var tmp7 = d0 - d7;\n var tmp1 = d1 + d6;\n var tmp6 = d1 - d6;\n var tmp2 = d2 + d5;\n var tmp5 = d2 - d5;\n var tmp3 = d3 + d4;\n var tmp4 = d3 - d4;\n\n /* Even part */\n var tmp10 = tmp0 + tmp3; /* phase 2 */\n var tmp13 = tmp0 - tmp3;\n var tmp11 = tmp1 + tmp2;\n var tmp12 = tmp1 - tmp2;\n\n data[dataOff] = tmp10 + tmp11; /* phase 3 */\n data[dataOff + 4] = tmp10 - tmp11;\n\n var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n data[dataOff + 2] = tmp13 + z1; /* phase 5 */\n data[dataOff + 6] = tmp13 - z1;\n\n /* Odd part */\n tmp10 = tmp4 + tmp5; /* phase 2 */\n tmp11 = tmp5 + tmp6;\n tmp12 = tmp6 + tmp7;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n var z2 = 0.5411961 * tmp10 + z5; /* c2-c6 */\n var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n var z3 = tmp11 * 0.707106781; /* c4 */\n\n var z11 = tmp7 + z3; /* phase 5 */\n var z13 = tmp7 - z3;\n\n data[dataOff + 5] = z13 + z2; /* phase 6 */\n data[dataOff + 3] = z13 - z2;\n data[dataOff + 1] = z11 + z4;\n data[dataOff + 7] = z11 - z4;\n\n dataOff += 8; /* advance pointer to next row */\n }\n\n /* Pass 2: process columns. */\n dataOff = 0;\n for (i = 0; i < I8; ++i) {\n d0 = data[dataOff];\n d1 = data[dataOff + 8];\n d2 = data[dataOff + 16];\n d3 = data[dataOff + 24];\n d4 = data[dataOff + 32];\n d5 = data[dataOff + 40];\n d6 = data[dataOff + 48];\n d7 = data[dataOff + 56];\n\n var tmp0p2 = d0 + d7;\n var tmp7p2 = d0 - d7;\n var tmp1p2 = d1 + d6;\n var tmp6p2 = d1 - d6;\n var tmp2p2 = d2 + d5;\n var tmp5p2 = d2 - d5;\n var tmp3p2 = d3 + d4;\n var tmp4p2 = d3 - d4;\n\n /* Even part */\n var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */\n var tmp13p2 = tmp0p2 - tmp3p2;\n var tmp11p2 = tmp1p2 + tmp2p2;\n var tmp12p2 = tmp1p2 - tmp2p2;\n\n data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n data[dataOff + 32] = tmp10p2 - tmp11p2;\n\n var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n data[dataOff + 16] = tmp13p2 + z1p2; /* phase 5 */\n data[dataOff + 48] = tmp13p2 - z1p2;\n\n /* Odd part */\n tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n tmp11p2 = tmp5p2 + tmp6p2;\n tmp12p2 = tmp6p2 + tmp7p2;\n\n /* The rotator is modified from fig 4-8 to avoid extra negations. */\n var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n var z2p2 = 0.5411961 * tmp10p2 + z5p2; /* c2-c6 */\n var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n\n var z11p2 = tmp7p2 + z3p2; /* phase 5 */\n var z13p2 = tmp7p2 - z3p2;\n\n data[dataOff + 40] = z13p2 + z2p2; /* phase 6 */\n data[dataOff + 24] = z13p2 - z2p2;\n data[dataOff + 8] = z11p2 + z4p2;\n data[dataOff + 56] = z11p2 - z4p2;\n\n dataOff++; /* advance pointer to next column */\n }\n\n // Quantize/descale the coefficients\n var fDCTQuant;\n for (i = 0; i < I64; ++i) {\n // Apply the quantization and scaling factor & Round to nearest integer\n fDCTQuant = data[i] * fdtbl[i];\n outputfDCTQuant[i] =\n fDCTQuant > 0.0 ? (fDCTQuant + 0.5) | 0 : (fDCTQuant - 0.5) | 0;\n //outputfDCTQuant[i] = fround(fDCTQuant);\n }\n return outputfDCTQuant;\n }\n\n function writeAPP0() {\n writeWord(0xffe0); // marker\n writeWord(16); // length\n writeByte(0x4a); // J\n writeByte(0x46); // F\n writeByte(0x49); // I\n writeByte(0x46); // F\n writeByte(0); // = \"JFIF\",'\\0'\n writeByte(1); // versionhi\n writeByte(1); // versionlo\n writeByte(0); // xyunits\n writeWord(1); // xdensity\n writeWord(1); // ydensity\n writeByte(0); // thumbnwidth\n writeByte(0); // thumbnheight\n }\n\n function writeSOF0(width, height) {\n writeWord(0xffc0); // marker\n writeWord(17); // length, truecolor YUV JPG\n writeByte(8); // precision\n writeWord(height);\n writeWord(width);\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0x11); // HVY\n writeByte(0); // QTY\n writeByte(2); // IdU\n writeByte(0x11); // HVU\n writeByte(1); // QTU\n writeByte(3); // IdV\n writeByte(0x11); // HVV\n writeByte(1); // QTV\n }\n\n function writeDQT() {\n writeWord(0xffdb); // marker\n writeWord(132); // length\n writeByte(0);\n for (var i = 0; i < 64; i++) {\n writeByte(YTable[i]);\n }\n writeByte(1);\n for (var j = 0; j < 64; j++) {\n writeByte(UVTable[j]);\n }\n }\n\n function writeDHT() {\n writeWord(0xffc4); // marker\n writeWord(0x01a2); // length\n\n writeByte(0); // HTYDCinfo\n for (var i = 0; i < 16; i++) {\n writeByte(std_dc_luminance_nrcodes[i + 1]);\n }\n for (var j = 0; j <= 11; j++) {\n writeByte(std_dc_luminance_values[j]);\n }\n\n writeByte(0x10); // HTYACinfo\n for (var k = 0; k < 16; k++) {\n writeByte(std_ac_luminance_nrcodes[k + 1]);\n }\n for (var l = 0; l <= 161; l++) {\n writeByte(std_ac_luminance_values[l]);\n }\n\n writeByte(1); // HTUDCinfo\n for (var m = 0; m < 16; m++) {\n writeByte(std_dc_chrominance_nrcodes[m + 1]);\n }\n for (var n = 0; n <= 11; n++) {\n writeByte(std_dc_chrominance_values[n]);\n }\n\n writeByte(0x11); // HTUACinfo\n for (var o = 0; o < 16; o++) {\n writeByte(std_ac_chrominance_nrcodes[o + 1]);\n }\n for (var p = 0; p <= 161; p++) {\n writeByte(std_ac_chrominance_values[p]);\n }\n }\n\n function writeSOS() {\n writeWord(0xffda); // marker\n writeWord(12); // length\n writeByte(3); // nrofcomponents\n writeByte(1); // IdY\n writeByte(0); // HTY\n writeByte(2); // IdU\n writeByte(0x11); // HTU\n writeByte(3); // IdV\n writeByte(0x11); // HTV\n writeByte(0); // Ss\n writeByte(0x3f); // Se\n writeByte(0); // Bf\n }\n\n function processDU(CDU, fdtbl, DC, HTDC, HTAC) {\n var EOB = HTAC[0x00];\n var M16zeroes = HTAC[0xf0];\n var pos;\n var I16 = 16;\n var I63 = 63;\n var I64 = 64;\n var DU_DCT = fDCTQuant(CDU, fdtbl);\n //ZigZag reorder\n for (var j = 0; j < I64; ++j) {\n DU[ZigZag[j]] = DU_DCT[j];\n }\n var Diff = DU[0] - DC;\n DC = DU[0];\n //Encode DC\n if (Diff == 0) {\n writeBits(HTDC[0]); // Diff might be 0\n } else {\n pos = 32767 + Diff;\n writeBits(HTDC[category[pos]]);\n writeBits(bitcode[pos]);\n }\n //Encode ACs\n var end0pos = 63; // was const... which is crazy\n while (end0pos > 0 && DU[end0pos] == 0) {\n end0pos--;\n }\n //end0pos = first element in reverse order !=0\n if (end0pos == 0) {\n writeBits(EOB);\n return DC;\n }\n var i = 1;\n var lng;\n while (i <= end0pos) {\n var startpos = i;\n while (DU[i] == 0 && i <= end0pos) {\n ++i;\n }\n var nrzeroes = i - startpos;\n if (nrzeroes >= I16) {\n lng = nrzeroes >> 4;\n for (var nrmarker = 1; nrmarker <= lng; ++nrmarker)\n writeBits(M16zeroes);\n nrzeroes = nrzeroes & 0xf;\n }\n pos = 32767 + DU[i];\n writeBits(HTAC[(nrzeroes << 4) + category[pos]]);\n writeBits(bitcode[pos]);\n i++;\n }\n if (end0pos != I63) {\n writeBits(EOB);\n }\n return DC;\n }\n\n function initCharLookupTable() {\n var sfcc = String.fromCharCode;\n for (var i = 0; i < 256; i++) {\n ///// ACHTUNG // 255\n clt[i] = sfcc(i);\n }\n }\n\n this.encode = function(\n image,\n quality // image data object\n ) {\n if (quality) setQuality(quality);\n\n // Initialize bit writer\n byteout = new Array();\n bytenew = 0;\n bytepos = 7;\n\n // Add JPEG headers\n writeWord(0xffd8); // SOI\n writeAPP0();\n writeDQT();\n writeSOF0(image.width, image.height);\n writeDHT();\n writeSOS();\n\n // Encode 8x8 macroblocks\n var DCY = 0;\n var DCU = 0;\n var DCV = 0;\n\n bytenew = 0;\n bytepos = 7;\n\n this.encode.displayName = \"_encode_\";\n\n var imageData = image.data;\n var width = image.width;\n var height = image.height;\n\n var quadWidth = width * 4;\n\n var x,\n y = 0;\n var r, g, b;\n var start, p, col, row, pos;\n while (y < height) {\n x = 0;\n while (x < quadWidth) {\n start = quadWidth * y + x;\n col = -1;\n row = 0;\n\n for (pos = 0; pos < 64; pos++) {\n row = pos >> 3; // /8\n col = (pos & 7) * 4; // %8\n p = start + row * quadWidth + col;\n\n if (y + row >= height) {\n // padding bottom\n p -= quadWidth * (y + 1 + row - height);\n }\n\n if (x + col >= quadWidth) {\n // padding right\n p -= x + col - quadWidth + 4;\n }\n\n r = imageData[p++];\n g = imageData[p++];\n b = imageData[p++];\n\n /* // calculate YUV values dynamically\n\t\t\t\t\tYDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n\t\t\t\t\tUDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n\t\t\t\t\tVDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n\t\t\t\t\t*/\n\n // use lookup table (slightly faster)\n YDU[pos] =\n ((RGB_YUV_TABLE[r] +\n RGB_YUV_TABLE[(g + 256) >> 0] +\n RGB_YUV_TABLE[(b + 512) >> 0]) >>\n 16) -\n 128;\n UDU[pos] =\n ((RGB_YUV_TABLE[(r + 768) >> 0] +\n RGB_YUV_TABLE[(g + 1024) >> 0] +\n RGB_YUV_TABLE[(b + 1280) >> 0]) >>\n 16) -\n 128;\n VDU[pos] =\n ((RGB_YUV_TABLE[(r + 1280) >> 0] +\n RGB_YUV_TABLE[(g + 1536) >> 0] +\n RGB_YUV_TABLE[(b + 1792) >> 0]) >>\n 16) -\n 128;\n }\n\n DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n x += 32;\n }\n y += 8;\n }\n\n ////////////////////////////////////////////////////////////////\n\n // Do the bit alignment of the EOI marker\n if (bytepos >= 0) {\n var fillbits = [];\n fillbits[1] = bytepos + 1;\n fillbits[0] = (1 << (bytepos + 1)) - 1;\n writeBits(fillbits);\n }\n\n writeWord(0xffd9); //EOI\n\n return new Uint8Array(byteout);\n };\n\n function setQuality(quality) {\n quality = Math.min(Math.max(quality, 1), 100);\n\n if (currentQuality == quality) return; // don't recalc if unchanged\n\n var sf =\n quality < 50 ? Math.floor(5000 / quality) : Math.floor(200 - quality * 2);\n\n initQuantTables(sf);\n currentQuality = quality;\n //console.log('Quality set to: '+quality +'%');\n }\n\n function init() {\n quality = quality || 50;\n // Create tables\n initCharLookupTable();\n initHuffmanTbl();\n initCategoryNumber();\n initRGBYUVTable();\n\n setQuality(quality);\n }\n init();\n}\n\nexport { JPEGEncoder };\n","/**\n * @author shaozilee\n *\n * Bmp format decoder,support 1bit 4bit 8bit 24bit bmp\n *\n */\n\nimport { console } from \"./console.js\";\n\nfunction BmpDecoder(buffer, is_with_alpha) {\n this.pos = 0;\n this.buffer = buffer;\n this.datav = new DataView(buffer.buffer);\n this.is_with_alpha = !!is_with_alpha;\n this.bottom_up = true;\n this.flag =\n String.fromCharCode(this.buffer[0]) + String.fromCharCode(this.buffer[1]);\n this.pos += 2;\n if ([\"BM\", \"BA\", \"CI\", \"CP\", \"IC\", \"PT\"].indexOf(this.flag) === -1)\n throw new Error(\"Invalid BMP File\");\n this.parseHeader();\n this.parseBGR();\n}\n\nBmpDecoder.prototype.parseHeader = function() {\n this.fileSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.reserved = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.offset = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.headerSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.width = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.height = this.datav.getInt32(this.pos, true);\n this.pos += 4;\n this.planes = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.bitPP = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n this.compress = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.rawSize = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.hr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.vr = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.colors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n this.importantColors = this.datav.getUint32(this.pos, true);\n this.pos += 4;\n\n if (this.bitPP === 16 && this.is_with_alpha) {\n this.bitPP = 15;\n }\n if (this.bitPP < 15) {\n var len = this.colors === 0 ? 1 << this.bitPP : this.colors;\n this.palette = new Array(len);\n for (var i = 0; i < len; i++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var quad = this.datav.getUint8(this.pos++, true);\n this.palette[i] = {\n red: red,\n green: green,\n blue: blue,\n quad: quad\n };\n }\n }\n if (this.height < 0) {\n this.height *= -1;\n this.bottom_up = false;\n }\n};\n\nBmpDecoder.prototype.parseBGR = function() {\n this.pos = this.offset;\n try {\n var bitn = \"bit\" + this.bitPP;\n var len = this.width * this.height * 4;\n this.data = new Uint8Array(len);\n\n this[bitn]();\n } catch (e) {\n console.log(\"bit decode error:\" + e);\n }\n};\n\nBmpDecoder.prototype.bit1 = function() {\n var xlen = Math.ceil(this.width / 8);\n var mode = xlen % 4;\n var y;\n for (y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 8 * 4;\n for (var i = 0; i < 8; i++) {\n if (x * 8 + i < this.width) {\n var rgb = this.palette[(b >> (7 - i)) & 0x1];\n this.data[location + i * 4] = rgb.blue;\n this.data[location + i * 4 + 1] = rgb.green;\n this.data[location + i * 4 + 2] = rgb.red;\n this.data[location + i * 4 + 3] = 0xff;\n } else {\n break;\n }\n }\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit4 = function() {\n var xlen = Math.ceil(this.width / 2);\n var mode = xlen % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < xlen; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 2 * 4;\n\n var before = b >> 4;\n var after = b & 0x0f;\n\n var rgb = this.palette[before];\n this.data[location] = rgb.blue;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.red;\n this.data[location + 3] = 0xff;\n\n if (x * 2 + 1 >= this.width) break;\n\n rgb = this.palette[after];\n this.data[location + 4] = rgb.blue;\n this.data[location + 4 + 1] = rgb.green;\n this.data[location + 4 + 2] = rgb.red;\n this.data[location + 4 + 3] = 0xff;\n }\n\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit8 = function() {\n var mode = this.width % 4;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var b = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n if (b < this.palette.length) {\n var rgb = this.palette[b];\n this.data[location] = rgb.red;\n this.data[location + 1] = rgb.green;\n this.data[location + 2] = rgb.blue;\n this.data[location + 3] = 0xff;\n } else {\n this.data[location] = 0xff;\n this.data[location + 1] = 0xff;\n this.data[location + 2] = 0xff;\n this.data[location + 3] = 0xff;\n }\n }\n if (mode !== 0) {\n this.pos += 4 - mode;\n }\n }\n};\n\nBmpDecoder.prototype.bit15 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_5) / _1_5) * 255) | 0;\n var red = ((((B >> 10) & _1_5) / _1_5) * 255) | 0;\n var alpha = B >> 15 ? 0xff : 0x00;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit16 = function() {\n var dif_w = this.width % 3;\n var _11111 = parseInt(\"11111\", 2),\n _1_5 = _11111;\n var _111111 = parseInt(\"111111\", 2),\n _1_6 = _111111;\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var B = this.datav.getUint16(this.pos, true);\n this.pos += 2;\n var alpha = 0xff;\n var blue = (((B & _1_5) / _1_5) * 255) | 0;\n var green = ((((B >> 5) & _1_6) / _1_6) * 255) | 0;\n var red = (((B >> 11) / _1_5) * 255) | 0;\n\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n this.pos += dif_w;\n }\n};\n\nBmpDecoder.prototype.bit24 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = 0xff;\n }\n //skip extra bytes\n this.pos += this.width % 4;\n }\n};\n\n/**\n * add 32bit decode func\n * @author soubok\n */\nBmpDecoder.prototype.bit32 = function() {\n //when height > 0\n for (var y = this.height - 1; y >= 0; y--) {\n var line = this.bottom_up ? y : this.height - 1 - y;\n for (var x = 0; x < this.width; x++) {\n var blue = this.datav.getUint8(this.pos++, true);\n var green = this.datav.getUint8(this.pos++, true);\n var red = this.datav.getUint8(this.pos++, true);\n var alpha = this.datav.getUint8(this.pos++, true);\n var location = line * this.width * 4 + x * 4;\n this.data[location] = red;\n this.data[location + 1] = green;\n this.data[location + 2] = blue;\n this.data[location + 3] = alpha;\n }\n //skip extra bytes\n //this.pos += (this.width % 4);\n }\n};\n\nBmpDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { BmpDecoder };\n","function WebPDecoder(imageData) {\n /** @license\n * Copyright 2011 Google Inc.\n *\n * This code is licensed under the same terms as WebM:\n * Software License Agreement: http://www.webmproject.org/license/software/\n * Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n * -----------------------------------------------------------------------------\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -----------------------------------------------------------------------------\n *\n * Copyright 2011-2017 Dominik Homberger\n * Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.6.0)\n *\n * Author: Dominik Homberger (dominik.homberger@gmail.com)\n */\n\n var self = this;\n var UpsampleRgbLinePair,\n UpsampleBgrLinePair,\n UpsampleRgbaLinePair,\n UpsampleBgraLinePair,\n UpsampleArgbLinePair,\n UpsampleArgbLinePair,\n UpsampleRgba4444LinePair,\n UpsampleRgb565LinePair;\n\n function x(F) {\n if (!F) throw Error(\"assert :P\");\n }\n function fa(F, L, J) {\n for (var H = 0; 4 > H; H++) if (F[L + H] != J.charCodeAt(H)) return !0;\n return !1;\n }\n function I(F, L, J, H, Z) {\n for (var O = 0; O < Z; O++) F[L + O] = J[H + O];\n }\n function M(F, L, J, H) {\n for (var Z = 0; Z < H; Z++) F[L + Z] = J;\n }\n function V(F) {\n return new Int32Array(F);\n }\n function wa(F, L) {\n for (var J = [], H = 0; H < F; H++) J.push(new L());\n return J;\n }\n function wb() {\n function F(J, H, Z) {\n for (var O = Z[H], L = 0; L < O; L++) {\n J.push(Z.length > H + 1 ? [] : 0);\n if (Z.length < H + 1) break;\n F(J[L], H + 1, Z);\n }\n }\n var L = [];\n F(L, 0, [3, 11]);\n return L;\n }\n function Ed(F, L) {\n function J(H, O, F) {\n for (var Z = F[O], ma = 0; ma < Z; ma++) {\n H.push(F.length > O + 1 ? [] : new L());\n if (F.length < O + 1) break;\n J(H[ma], O + 1, F);\n }\n }\n var H = [];\n J(H, 0, F);\n return H;\n }\n var _WebPDecoder = function() {\n var self = this;\n function F() {\n V(55);\n }\n function L(a, b) {\n for (var c = (1 << (b - 1)) >>> 0; a & c; ) c >>>= 1;\n return c ? (a & (c - 1)) + c : a;\n }\n function J(a, b, c, d, e) {\n x(!(d % c));\n do (d -= c), (a[b + d] = e);\n while (0 < d);\n }\n function H(a, b, c, d, e, f) {\n var g = b,\n h = 1 << c,\n k,\n l,\n m = V(16),\n n = V(16);\n x(0 != e);\n x(null != d);\n x(null != a);\n x(0 < c);\n for (l = 0; l < e; ++l) {\n if (15 < d[l]) return 0;\n ++m[d[l]];\n }\n if (m[0] == e) return 0;\n n[1] = 0;\n for (k = 1; 15 > k; ++k) {\n if (m[k] > 1 << k) return 0;\n n[k + 1] = n[k] + m[k];\n }\n for (l = 0; l < e; ++l) (k = d[l]), 0 < d[l] && (f[n[k]++] = l);\n if (1 == n[15])\n return (d = new O()), (d.g = 0), (d.value = f[0]), J(a, g, 1, h, d), h;\n var r = -1,\n q = h - 1,\n t = 0,\n v = 1,\n p = 1,\n u,\n w = 1 << c;\n l = 0;\n k = 1;\n for (e = 2; k <= c; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k])\n (d = new O()),\n (d.g = k),\n (d.value = f[l++]),\n J(a, g + t, e, w, d),\n (t = L(t, k));\n }\n k = c + 1;\n for (e = 2; 15 >= k; ++k, e <<= 1) {\n p <<= 1;\n v += p;\n p -= m[k];\n if (0 > p) return 0;\n for (; 0 < m[k]; --m[k]) {\n d = new O();\n if ((t & q) != r) {\n g += w;\n r = k;\n for (u = 1 << (r - c); 15 > r; ) {\n u -= m[r];\n if (0 >= u) break;\n ++r;\n u <<= 1;\n }\n u = r - c;\n w = 1 << u;\n h += w;\n r = t & q;\n a[b + r].g = u + c;\n a[b + r].value = g - b - r;\n }\n d.g = k - c;\n d.value = f[l++];\n J(a, g + (t >> c), e, w, d);\n t = L(t, k);\n }\n }\n return v != 2 * n[15] - 1 ? 0 : h;\n }\n function Z(a, b, c, d, e) {\n x(2328 >= e);\n if (512 >= e) var f = V(512);\n else if (((f = V(e)), null == f)) return 0;\n return H(a, b, c, d, e, f);\n }\n function O() {\n this.value = this.g = 0;\n }\n function Fd() {\n this.value = this.g = 0;\n }\n function Ub() {\n this.G = wa(5, O);\n this.H = V(5);\n this.jc = this.Qb = this.qb = this.nd = 0;\n this.pd = wa(xb, Fd);\n }\n function ma(a, b, c, d) {\n x(null != a);\n x(null != b);\n x(2147483648 > d);\n a.Ca = 254;\n a.I = 0;\n a.b = -8;\n a.Ka = 0;\n a.oa = b;\n a.pa = c;\n a.Jd = b;\n a.Yc = c + d;\n a.Zc = 4 <= d ? c + d - 4 + 1 : c;\n Qa(a);\n }\n function na(a, b) {\n for (var c = 0; 0 < b--; ) c |= K(a, 128) << b;\n return c;\n }\n function ca(a, b) {\n var c = na(a, b);\n return G(a) ? -c : c;\n }\n function cb(a, b, c, d) {\n var e,\n f = 0;\n x(null != a);\n x(null != b);\n x(4294967288 > d);\n a.Sb = d;\n a.Ra = 0;\n a.u = 0;\n a.h = 0;\n 4 < d && (d = 4);\n for (e = 0; e < d; ++e) f += b[c + e] << (8 * e);\n a.Ra = f;\n a.bb = d;\n a.oa = b;\n a.pa = c;\n }\n function Vb(a) {\n for (; 8 <= a.u && a.bb < a.Sb; )\n (a.Ra >>>= 8),\n (a.Ra += (a.oa[a.pa + a.bb] << (ob - 8)) >>> 0),\n ++a.bb,\n (a.u -= 8);\n db(a) && ((a.h = 1), (a.u = 0));\n }\n function D(a, b) {\n x(0 <= b);\n if (!a.h && b <= Gd) {\n var c = pb(a) & Hd[b];\n a.u += b;\n Vb(a);\n return c;\n }\n a.h = 1;\n return (a.u = 0);\n }\n function Wb() {\n this.b = this.Ca = this.I = 0;\n this.oa = [];\n this.pa = 0;\n this.Jd = [];\n this.Yc = 0;\n this.Zc = [];\n this.Ka = 0;\n }\n function Ra() {\n this.Ra = 0;\n this.oa = [];\n this.h = this.u = this.bb = this.Sb = this.pa = 0;\n }\n function pb(a) {\n return (a.Ra >>> (a.u & (ob - 1))) >>> 0;\n }\n function db(a) {\n x(a.bb <= a.Sb);\n return a.h || (a.bb == a.Sb && a.u > ob);\n }\n function qb(a, b) {\n a.u = b;\n a.h = db(a);\n }\n function Sa(a) {\n a.u >= Xb && (x(a.u >= Xb), Vb(a));\n }\n function Qa(a) {\n x(null != a && null != a.oa);\n a.pa < a.Zc\n ? ((a.I = (a.oa[a.pa++] | (a.I << 8)) >>> 0), (a.b += 8))\n : (x(null != a && null != a.oa),\n a.pa < a.Yc\n ? ((a.b += 8), (a.I = a.oa[a.pa++] | (a.I << 8)))\n : a.Ka\n ? (a.b = 0)\n : ((a.I <<= 8), (a.b += 8), (a.Ka = 1)));\n }\n function G(a) {\n return na(a, 1);\n }\n function K(a, b) {\n var c = a.Ca;\n 0 > a.b && Qa(a);\n var d = a.b,\n e = (c * b) >>> 8,\n f = (a.I >>> d > e) + 0;\n f ? ((c -= e), (a.I -= ((e + 1) << d) >>> 0)) : (c = e + 1);\n d = c;\n for (e = 0; 256 <= d; ) (e += 8), (d >>= 8);\n d = 7 ^ (e + Id[d]);\n a.b -= d;\n a.Ca = (c << d) - 1;\n return f;\n }\n function ra(a, b, c) {\n a[b + 0] = (c >> 24) & 255;\n a[b + 1] = (c >> 16) & 255;\n a[b + 2] = (c >> 8) & 255;\n a[b + 3] = (c >> 0) & 255;\n }\n function Ta(a, b) {\n return (a[b + 0] << 0) | (a[b + 1] << 8);\n }\n function Yb(a, b) {\n return Ta(a, b) | (a[b + 2] << 16);\n }\n function Ha(a, b) {\n return Ta(a, b) | (Ta(a, b + 2) << 16);\n }\n function Zb(a, b) {\n var c = 1 << b;\n x(null != a);\n x(0 < b);\n a.X = V(c);\n if (null == a.X) return 0;\n a.Mb = 32 - b;\n a.Xa = b;\n return 1;\n }\n function $b(a, b) {\n x(null != a);\n x(null != b);\n x(a.Xa == b.Xa);\n I(b.X, 0, a.X, 0, 1 << b.Xa);\n }\n function ac() {\n this.X = [];\n this.Xa = this.Mb = 0;\n }\n function bc(a, b, c, d) {\n x(null != c);\n x(null != d);\n var e = c[0],\n f = d[0];\n 0 == e && (e = (a * f + b / 2) / b);\n 0 == f && (f = (b * e + a / 2) / a);\n if (0 >= e || 0 >= f) return 0;\n c[0] = e;\n d[0] = f;\n return 1;\n }\n function xa(a, b) {\n return (a + (1 << b) - 1) >>> b;\n }\n function yb(a, b) {\n return (\n (((((a & 4278255360) + (b & 4278255360)) >>> 0) & 4278255360) +\n ((((a & 16711935) + (b & 16711935)) >>> 0) & 16711935)) >>>\n 0\n );\n }\n function X(a, b) {\n self[b] = function(b, d, e, f, g, h, k) {\n var c;\n for (c = 0; c < g; ++c) {\n var m = self[a](h[k + c - 1], e, f + c);\n h[k + c] = yb(b[d + c], m);\n }\n };\n }\n function Jd() {\n this.ud = this.hd = this.jd = 0;\n }\n function aa(a, b) {\n return ((((a ^ b) & 4278124286) >>> 1) + (a & b)) >>> 0;\n }\n function sa(a) {\n if (0 <= a && 256 > a) return a;\n if (0 > a) return 0;\n if (255 < a) return 255;\n }\n function eb(a, b) {\n return sa(a + ((a - b + 0.5) >> 1));\n }\n function Ia(a, b, c) {\n return Math.abs(b - c) - Math.abs(a - c);\n }\n function cc(a, b, c, d, e, f, g) {\n d = f[g - 1];\n for (c = 0; c < e; ++c) f[g + c] = d = yb(a[b + c], d);\n }\n function Kd(a, b, c, d, e) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + f],\n h = (g >> 8) & 255,\n k = g & 16711935,\n k = k + ((h << 16) + h),\n k = k & 16711935;\n d[e + f] = ((g & 4278255360) + k) >>> 0;\n }\n }\n function dc(a, b) {\n b.jd = (a >> 0) & 255;\n b.hd = (a >> 8) & 255;\n b.ud = (a >> 16) & 255;\n }\n function Ld(a, b, c, d, e, f) {\n var g;\n for (g = 0; g < d; ++g) {\n var h = b[c + g],\n k = h >>> 8,\n l = h >>> 16,\n m = h,\n l = l + ((((a.jd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n l = l & 255,\n m = m + ((((a.hd << 24) >> 24) * ((k << 24) >> 24)) >>> 5),\n m = m + ((((a.ud << 24) >> 24) * ((l << 24) >> 24)) >>> 5),\n m = m & 255;\n e[f + g] = (h & 4278255360) + (l << 16) + m;\n }\n }\n function ec(a, b, c, d, e) {\n self[b] = function(a, b, c, k, l, m, n, r, q) {\n for (k = n; k < r; ++k)\n for (n = 0; n < q; ++n) l[m++] = e(c[d(a[b++])]);\n };\n self[a] = function(a, b, h, k, l, m, n) {\n var f = 8 >> a.b,\n g = a.Ea,\n t = a.K[0],\n v = a.w;\n if (8 > f)\n for (a = (1 << a.b) - 1, v = (1 << f) - 1; b < h; ++b) {\n var p = 0,\n u;\n for (u = 0; u < g; ++u)\n u & a || (p = d(k[l++])), (m[n++] = e(t[p & v])), (p >>= f);\n }\n else self[\"VP8LMapColor\" + c](k, l, t, v, m, n, b, h, g);\n };\n }\n function Md(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n }\n }\n function Nd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 16) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 24) & 255;\n }\n }\n function Od(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 240) | ((f >> 12) & 15),\n f = ((f >> 0) & 240) | ((f >> 28) & 15);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Pd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++],\n g = ((f >> 16) & 248) | ((f >> 13) & 7),\n f = ((f >> 5) & 224) | ((f >> 3) & 31);\n d[e++] = g;\n d[e++] = f;\n }\n }\n function Qd(a, b, c, d, e) {\n for (c = b + c; b < c; ) {\n var f = a[b++];\n d[e++] = (f >> 0) & 255;\n d[e++] = (f >> 8) & 255;\n d[e++] = (f >> 16) & 255;\n }\n }\n function fb(a, b, c, d, e, f) {\n if (0 == f)\n for (c = b + c; b < c; )\n (f = a[b++]),\n ra(\n d,\n ((f[0] >> 24) |\n ((f[1] >> 8) & 65280) |\n ((f[2] << 8) & 16711680) |\n (f[3] << 24)) >>>\n 0\n ),\n (e += 32);\n else I(d, e, a, b, c);\n }\n function gb(a, b) {\n self[b][0] = self[a + \"0\"];\n self[b][1] = self[a + \"1\"];\n self[b][2] = self[a + \"2\"];\n self[b][3] = self[a + \"3\"];\n self[b][4] = self[a + \"4\"];\n self[b][5] = self[a + \"5\"];\n self[b][6] = self[a + \"6\"];\n self[b][7] = self[a + \"7\"];\n self[b][8] = self[a + \"8\"];\n self[b][9] = self[a + \"9\"];\n self[b][10] = self[a + \"10\"];\n self[b][11] = self[a + \"11\"];\n self[b][12] = self[a + \"12\"];\n self[b][13] = self[a + \"13\"];\n self[b][14] = self[a + \"0\"];\n self[b][15] = self[a + \"0\"];\n }\n function hb(a) {\n return a == zb || a == Ab || a == Ja || a == Bb;\n }\n function Rd() {\n this.eb = [];\n this.size = this.A = this.fb = 0;\n }\n function Sd() {\n this.y = [];\n this.f = [];\n this.ea = [];\n this.F = [];\n this.Tc = this.Ed = this.Cd = this.Fd = this.lb = this.Db = this.Ab = this.fa = this.J = this.W = this.N = this.O = 0;\n }\n function Cb() {\n this.Rd = this.height = this.width = this.S = 0;\n this.f = {};\n this.f.RGBA = new Rd();\n this.f.kb = new Sd();\n this.sd = null;\n }\n function Td() {\n this.width = [0];\n this.height = [0];\n this.Pd = [0];\n this.Qd = [0];\n this.format = [0];\n }\n function Ud() {\n this.Id = this.fd = this.Md = this.hb = this.ib = this.da = this.bd = this.cd = this.j = this.v = this.Da = this.Sd = this.ob = 0;\n }\n function Vd(a) {\n alert(\"todo:WebPSamplerProcessPlane\");\n return a.T;\n }\n function Wd(a, b) {\n var c = a.T,\n d = b.ba.f.RGBA,\n e = d.eb,\n f = d.fb + a.ka * d.A,\n g = P[b.ba.S],\n h = a.y,\n k = a.O,\n l = a.f,\n m = a.N,\n n = a.ea,\n r = a.W,\n q = b.cc,\n t = b.dc,\n v = b.Mc,\n p = b.Nc,\n u = a.ka,\n w = a.ka + a.T,\n y = a.U,\n A = (y + 1) >> 1;\n 0 == u\n ? g(h, k, null, null, l, m, n, r, l, m, n, r, e, f, null, null, y)\n : (g(b.ec, b.fc, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y),\n ++c);\n for (; u + 2 < w; u += 2)\n (q = l),\n (t = m),\n (v = n),\n (p = r),\n (m += a.Rc),\n (r += a.Rc),\n (f += 2 * d.A),\n (k += 2 * a.fa),\n g(h, k - a.fa, h, k, q, t, v, p, l, m, n, r, e, f - d.A, e, f, y);\n k += a.fa;\n a.j + w < a.o\n ? (I(b.ec, b.fc, h, k, y),\n I(b.cc, b.dc, l, m, A),\n I(b.Mc, b.Nc, n, r, A),\n c--)\n : w & 1 ||\n g(\n h,\n k,\n null,\n null,\n l,\n m,\n n,\n r,\n l,\n m,\n n,\n r,\n e,\n f + d.A,\n null,\n null,\n y\n );\n return c;\n }\n function Xd(a, b, c) {\n var d = a.F,\n e = [a.J];\n if (null != d) {\n var f = a.U,\n g = b.ba.S,\n h = g == ya || g == Ja;\n b = b.ba.f.RGBA;\n var k = [0],\n l = a.ka;\n k[0] = a.T;\n a.Kb &&\n (0 == l ? --k[0] : (--l, (e[0] -= a.width)),\n a.j + a.ka + a.T == a.o && (k[0] = a.o - a.j - l));\n var m = b.eb,\n l = b.fb + l * b.A;\n a = fc(d, e[0], a.width, f, k, m, l + (h ? 0 : 3), b.A);\n x(c == k);\n a && hb(g) && za(m, l, h, f, k, b.A);\n }\n return 0;\n }\n function gc(a) {\n var b = a.ma,\n c = b.ba.S,\n d = 11 > c,\n e = c == Ua || c == Va || c == ya || c == Db || 12 == c || hb(c);\n b.memory = null;\n b.Ib = null;\n b.Jb = null;\n b.Nd = null;\n if (!hc(b.Oa, a, e ? 11 : 12)) return 0;\n e && hb(c) && ic();\n if (a.da) alert(\"todo:use_scaling\");\n else {\n if (d) {\n if (((b.Ib = Vd), a.Kb)) {\n c = (a.U + 1) >> 1;\n b.memory = V(a.U + 2 * c);\n if (null == b.memory) return 0;\n b.ec = b.memory;\n b.fc = 0;\n b.cc = b.ec;\n b.dc = b.fc + a.U;\n b.Mc = b.cc;\n b.Nc = b.dc + c;\n b.Ib = Wd;\n ic();\n }\n } else alert(\"todo:EmitYUV\");\n e && ((b.Jb = Xd), d && Aa());\n }\n if (d && !jc) {\n for (a = 0; 256 > a; ++a)\n (Yd[a] = (89858 * (a - 128) + Ba) >> Wa),\n (Zd[a] = -22014 * (a - 128) + Ba),\n ($d[a] = -45773 * (a - 128)),\n (ae[a] = (113618 * (a - 128) + Ba) >> Wa);\n for (a = ta; a < Eb; ++a)\n (b = (76283 * (a - 16) + Ba) >> Wa),\n (be[a - ta] = ga(b, 255)),\n (ce[a - ta] = ga((b + 8) >> 4, 15));\n jc = 1;\n }\n return 1;\n }\n function kc(a) {\n var b = a.ma,\n c = a.U,\n d = a.T;\n x(!(a.ka & 1));\n if (0 >= c || 0 >= d) return 0;\n c = b.Ib(a, b);\n null != b.Jb && b.Jb(a, b, c);\n b.Dc += c;\n return 1;\n }\n function lc(a) {\n a.ma.memory = null;\n }\n function mc(a, b, c, d) {\n if (47 != D(a, 8)) return 0;\n b[0] = D(a, 14) + 1;\n c[0] = D(a, 14) + 1;\n d[0] = D(a, 1);\n return 0 != D(a, 3) ? 0 : !a.h;\n }\n function ib(a, b) {\n if (4 > a) return a + 1;\n var c = (a - 2) >> 1;\n return ((2 + (a & 1)) << c) + D(b, c) + 1;\n }\n function nc(a, b) {\n if (120 < b) return b - 120;\n var c = de[b - 1],\n c = (c >> 4) * a + (8 - (c & 15));\n return 1 <= c ? c : 1;\n }\n function ua(a, b, c) {\n var d = pb(c);\n b += d & 255;\n var e = a[b].g - 8;\n 0 < e &&\n (qb(c, c.u + 8),\n (d = pb(c)),\n (b += a[b].value),\n (b += d & ((1 << e) - 1)));\n qb(c, c.u + a[b].g);\n return a[b].value;\n }\n function ub(a, b, c) {\n c.g += a.g;\n c.value += (a.value << b) >>> 0;\n x(8 >= c.g);\n return a.g;\n }\n function ha(a, b, c) {\n var d = a.xc;\n b = 0 == d ? 0 : a.vc[a.md * (c >> d) + (b >> d)];\n x(b < a.Wb);\n return a.Ya[b];\n }\n function oc(a, b, c, d) {\n var e = a.ab,\n f = a.c * b,\n g = a.C;\n b = g + b;\n var h = c,\n k = d;\n d = a.Ta;\n for (c = a.Ua; 0 < e--; ) {\n var l = a.gc[e],\n m = g,\n n = b,\n r = h,\n q = k,\n k = d,\n h = c,\n t = l.Ea;\n x(m < n);\n x(n <= l.nc);\n switch (l.hc) {\n case 2:\n pc(r, q, (n - m) * t, k, h);\n break;\n case 0:\n var v = l,\n p = m,\n u = n,\n w = k,\n y = h,\n A = v.Ea;\n 0 == p &&\n (ee(r, q, null, null, 1, w, y),\n cc(r, q + 1, 0, 0, A - 1, w, y + 1),\n (q += A),\n (y += A),\n ++p);\n for (\n var E = 1 << v.b,\n B = E - 1,\n C = xa(A, v.b),\n N = v.K,\n v = v.w + (p >> v.b) * C;\n p < u;\n\n ) {\n var z = N,\n Q = v,\n S = 1;\n for (fe(r, q, w, y - A, 1, w, y); S < A; ) {\n var K = qc[(z[Q++] >> 8) & 15],\n D = (S & ~B) + E;\n D > A && (D = A);\n K(r, q + +S, w, y + S - A, D - S, w, y + S);\n S = D;\n }\n q += A;\n y += A;\n ++p;\n p & B || (v += C);\n }\n n != l.nc && I(k, h - t, k, h + (n - m - 1) * t, t);\n break;\n case 1:\n t = r;\n u = q;\n r = l.Ea;\n q = 1 << l.b;\n w = q - 1;\n y = r & ~w;\n A = r - y;\n p = xa(r, l.b);\n E = l.K;\n for (l = l.w + (m >> l.b) * p; m < n; ) {\n B = E;\n C = l;\n N = new Jd();\n v = u + y;\n for (z = u + r; u < v; )\n dc(B[C++], N), Fb(N, t, u, q, k, h), (u += q), (h += q);\n u < z &&\n (dc(B[C++], N), Fb(N, t, u, A, k, h), (u += A), (h += A));\n ++m;\n m & w || (l += p);\n }\n break;\n case 3:\n if (r == k && q == h && 0 < l.b) {\n y = (n - m) * xa(l.Ea, l.b);\n t = h + (n - m) * t - y;\n u = k;\n r = t;\n q = k;\n w = h;\n A = y;\n p = [];\n for (y = A - 1; 0 <= y; --y) p[y] = q[w + y];\n for (y = A - 1; 0 <= y; --y) u[r + y] = p[y];\n rc(l, m, n, k, t, k, h);\n } else rc(l, m, n, r, q, k, h);\n }\n h = d;\n k = c;\n }\n k != c && I(d, c, h, k, f);\n }\n function ge(a, b) {\n var c = a.V,\n d = a.Ba + a.c * a.C,\n e = b - a.C;\n x(b <= a.l.o);\n x(16 >= e);\n if (0 < e) {\n var f = a.l,\n g = a.Ta,\n h = a.Ua,\n k = f.width;\n oc(a, e, c, d);\n h = [h];\n c = a.C;\n d = b;\n e = h;\n x(c < d);\n x(f.v < f.va);\n d > f.o && (d = f.o);\n if (c < f.j) {\n var l = f.j - c,\n c = f.j;\n e[0] += l * k;\n }\n c >= d\n ? (c = 0)\n : ((e[0] += 4 * f.v),\n (f.ka = c - f.j),\n (f.U = f.va - f.v),\n (f.T = d - c),\n (c = 1));\n if (c) {\n h = h[0];\n c = a.ca;\n if (11 > c.S) {\n for (\n var m = c.f.RGBA,\n d = c.S,\n e = f.U,\n f = f.T,\n l = m.eb,\n n = m.A,\n r = f,\n m = m.fb + a.Ma * m.A;\n 0 < r--;\n\n ) {\n var q = g,\n t = h,\n v = e,\n p = l,\n u = m;\n switch (d) {\n case Ca:\n sc(q, t, v, p, u);\n break;\n case Ua:\n Gb(q, t, v, p, u);\n break;\n case zb:\n Gb(q, t, v, p, u);\n za(p, u, 0, v, 1, 0);\n break;\n case tc:\n uc(q, t, v, p, u);\n break;\n case Va:\n fb(q, t, v, p, u, 1);\n break;\n case Ab:\n fb(q, t, v, p, u, 1);\n za(p, u, 0, v, 1, 0);\n break;\n case ya:\n fb(q, t, v, p, u, 0);\n break;\n case Ja:\n fb(q, t, v, p, u, 0);\n za(p, u, 1, v, 1, 0);\n break;\n case Db:\n Hb(q, t, v, p, u);\n break;\n case Bb:\n Hb(q, t, v, p, u);\n vc(p, u, v, 1, 0);\n break;\n case wc:\n xc(q, t, v, p, u);\n break;\n default:\n x(0);\n }\n h += k;\n m += n;\n }\n a.Ma += f;\n } else alert(\"todo:EmitRescaledRowsYUVA\");\n x(a.Ma <= c.height);\n }\n }\n a.C = b;\n x(a.C <= a.i);\n }\n function yc(a) {\n var b;\n if (0 < a.ua) return 0;\n for (b = 0; b < a.Wb; ++b) {\n var c = a.Ya[b].G,\n d = a.Ya[b].H;\n if (\n 0 < c[1][d[1] + 0].g ||\n 0 < c[2][d[2] + 0].g ||\n 0 < c[3][d[3] + 0].g\n )\n return 0;\n }\n return 1;\n }\n function zc(a, b, c, d, e, f) {\n if (0 != a.Z) {\n var g = a.qd,\n h = a.rd;\n for (x(null != ia[a.Z]); b < c; ++b)\n ia[a.Z](g, h, d, e, d, e, f), (g = d), (h = e), (e += f);\n a.qd = g;\n a.rd = h;\n }\n }\n function Ib(a, b) {\n var c = a.l.ma,\n d = 0 == c.Z || 1 == c.Z ? a.l.j : a.C,\n d = a.C < d ? d : a.C;\n x(b <= a.l.o);\n if (b > d) {\n var e = a.l.width,\n f = c.ca,\n g = c.tb + e * d,\n h = a.V,\n k = a.Ba + a.c * d,\n l = a.gc;\n x(1 == a.ab);\n x(3 == l[0].hc);\n he(l[0], d, b, h, k, f, g);\n zc(c, d, b, f, g, e);\n }\n a.C = a.Ma = b;\n }\n function Jb(a, b, c, d, e, f, g) {\n var h = a.$ / d,\n k = a.$ % d,\n l = a.m,\n m = a.s,\n n = c + a.$,\n r = n;\n e = c + d * e;\n var q = c + d * f,\n t = 280 + m.ua,\n v = a.Pb ? h : 16777216,\n p = 0 < m.ua ? m.Wa : null,\n u = m.wc,\n w = n < q ? ha(m, k, h) : null;\n x(a.C < f);\n x(q <= e);\n var y = !1;\n a: for (;;) {\n for (; y || n < q; ) {\n var A = 0;\n if (h >= v) {\n var v = a,\n E = n - c;\n x(v.Pb);\n v.wd = v.m;\n v.xd = E;\n 0 < v.s.ua && $b(v.s.Wa, v.s.vb);\n v = h + ie;\n }\n k & u || (w = ha(m, k, h));\n x(null != w);\n w.Qb && ((b[n] = w.qb), (y = !0));\n if (!y)\n if ((Sa(l), w.jc)) {\n var A = l,\n E = b,\n B = n,\n C = w.pd[pb(A) & (xb - 1)];\n x(w.jc);\n 256 > C.g\n ? (qb(A, A.u + C.g), (E[B] = C.value), (A = 0))\n : (qb(A, A.u + C.g - 256), x(256 <= C.value), (A = C.value));\n 0 == A && (y = !0);\n } else A = ua(w.G[0], w.H[0], l);\n if (l.h) break;\n if (y || 256 > A) {\n if (!y)\n if (w.nd) b[n] = (w.qb | (A << 8)) >>> 0;\n else {\n Sa(l);\n y = ua(w.G[1], w.H[1], l);\n Sa(l);\n E = ua(w.G[2], w.H[2], l);\n B = ua(w.G[3], w.H[3], l);\n if (l.h) break;\n b[n] = ((B << 24) | (y << 16) | (A << 8) | E) >>> 0;\n }\n y = !1;\n ++n;\n ++k;\n if (\n k >= d &&\n ((k = 0),\n ++h,\n null != g && h <= f && !(h % 16) && g(a, h),\n null != p)\n )\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (280 > A) {\n A = ib(A - 256, l);\n E = ua(w.G[4], w.H[4], l);\n Sa(l);\n E = ib(E, l);\n E = nc(d, E);\n if (l.h) break;\n if (n - c < E || e - n < A) break a;\n else for (B = 0; B < A; ++B) b[n + B] = b[n + B - E];\n n += A;\n for (k += A; k >= d; )\n (k -= d), ++h, null != g && h <= f && !(h % 16) && g(a, h);\n x(n <= e);\n k & u && (w = ha(m, k, h));\n if (null != p)\n for (; r < n; )\n (A = b[r++]),\n (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n } else if (A < t) {\n y = A - 280;\n for (x(null != p); r < n; )\n (A = b[r++]), (p.X[((506832829 * A) & 4294967295) >>> p.Mb] = A);\n A = n;\n E = p;\n x(!(y >>> E.Xa));\n b[A] = E.X[y];\n y = !0;\n } else break a;\n y || x(l.h == db(l));\n }\n if (a.Pb && l.h && n < e)\n x(a.m.h),\n (a.a = 5),\n (a.m = a.wd),\n (a.$ = a.xd),\n 0 < a.s.ua && $b(a.s.vb, a.s.Wa);\n else if (l.h) break a;\n else null != g && g(a, h > f ? f : h), (a.a = 0), (a.$ = n - c);\n return 1;\n }\n a.a = 3;\n return 0;\n }\n function Ac(a) {\n x(null != a);\n a.vc = null;\n a.yc = null;\n a.Ya = null;\n var b = a.Wa;\n null != b && (b.X = null);\n a.vb = null;\n x(null != a);\n }\n function Bc() {\n var a = new je();\n if (null == a) return null;\n a.a = 0;\n a.xb = Cc;\n gb(\"Predictor\", \"VP8LPredictors\");\n gb(\"Predictor\", \"VP8LPredictors_C\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd\");\n gb(\"PredictorAdd\", \"VP8LPredictorsAdd_C\");\n pc = Kd;\n Fb = Ld;\n sc = Md;\n Gb = Nd;\n Hb = Od;\n xc = Pd;\n uc = Qd;\n self.VP8LMapColor32b = ke;\n self.VP8LMapColor8b = le;\n return a;\n }\n function rb(a, b, c, d, e) {\n var f = 1,\n g = [a],\n h = [b],\n k = d.m,\n l = d.s,\n m = null,\n n = 0;\n a: for (;;) {\n if (c)\n for (; f && D(k, 1); ) {\n var r = g,\n q = h,\n t = d,\n v = 1,\n p = t.m,\n u = t.gc[t.ab],\n w = D(p, 2);\n if (t.Oc & (1 << w)) f = 0;\n else {\n t.Oc |= 1 << w;\n u.hc = w;\n u.Ea = r[0];\n u.nc = q[0];\n u.K = [null];\n ++t.ab;\n x(4 >= t.ab);\n switch (w) {\n case 0:\n case 1:\n u.b = D(p, 3) + 2;\n v = rb(xa(u.Ea, u.b), xa(u.nc, u.b), 0, t, u.K);\n u.K = u.K[0];\n break;\n case 3:\n var y = D(p, 8) + 1,\n A = 16 < y ? 0 : 4 < y ? 1 : 2 < y ? 2 : 3;\n r[0] = xa(u.Ea, A);\n u.b = A;\n var v = rb(y, 1, 0, t, u.K),\n E;\n if ((E = v)) {\n var B,\n C = y,\n N = u,\n z = 1 << (8 >> N.b),\n Q = V(z);\n if (null == Q) E = 0;\n else {\n var S = N.K[0],\n K = N.w;\n Q[0] = N.K[0][0];\n for (B = 1; B < 1 * C; ++B) Q[B] = yb(S[K + B], Q[B - 1]);\n for (; B < 4 * z; ++B) Q[B] = 0;\n N.K[0] = null;\n N.K[0] = Q;\n E = 1;\n }\n }\n v = E;\n break;\n case 2:\n break;\n default:\n x(0);\n }\n f = v;\n }\n }\n g = g[0];\n h = h[0];\n if (f && D(k, 1) && ((n = D(k, 4)), (f = 1 <= n && 11 >= n), !f)) {\n d.a = 3;\n break a;\n }\n var H;\n if ((H = f))\n b: {\n var F = d,\n G = g,\n L = h,\n J = n,\n T = c,\n Da,\n ba,\n X = F.m,\n R = F.s,\n P = [null],\n U,\n W = 1,\n aa = 0,\n na = me[J];\n c: for (;;) {\n if (T && D(X, 1)) {\n var ca = D(X, 3) + 2,\n ga = xa(G, ca),\n ka = xa(L, ca),\n qa = ga * ka;\n if (!rb(ga, ka, 0, F, P)) break c;\n P = P[0];\n R.xc = ca;\n for (Da = 0; Da < qa; ++Da) {\n var ia = (P[Da] >> 8) & 65535;\n P[Da] = ia;\n ia >= W && (W = ia + 1);\n }\n }\n if (X.h) break c;\n for (ba = 0; 5 > ba; ++ba) {\n var Y = Dc[ba];\n !ba && 0 < J && (Y += 1 << J);\n aa < Y && (aa = Y);\n }\n var ma = wa(W * na, O);\n var ua = W,\n va = wa(ua, Ub);\n if (null == va) var la = null;\n else x(65536 >= ua), (la = va);\n var ha = V(aa);\n if (null == la || null == ha || null == ma) {\n F.a = 1;\n break c;\n }\n var pa = ma;\n for (Da = U = 0; Da < W; ++Da) {\n var ja = la[Da],\n da = ja.G,\n ea = ja.H,\n Fa = 0,\n ra = 1,\n Ha = 0;\n for (ba = 0; 5 > ba; ++ba) {\n Y = Dc[ba];\n da[ba] = pa;\n ea[ba] = U;\n !ba && 0 < J && (Y += 1 << J);\n d: {\n var sa,\n za = Y,\n ta = F,\n oa = ha,\n db = pa,\n eb = U,\n Ia = 0,\n Ka = ta.m,\n fb = D(Ka, 1);\n M(oa, 0, 0, za);\n if (fb) {\n var gb = D(Ka, 1) + 1,\n hb = D(Ka, 1),\n Ja = D(Ka, 0 == hb ? 1 : 8);\n oa[Ja] = 1;\n 2 == gb && ((Ja = D(Ka, 8)), (oa[Ja] = 1));\n var ya = 1;\n } else {\n var Ua = V(19),\n Va = D(Ka, 4) + 4;\n if (19 < Va) {\n ta.a = 3;\n var Aa = 0;\n break d;\n }\n for (sa = 0; sa < Va; ++sa) Ua[ne[sa]] = D(Ka, 3);\n var Ba = void 0,\n sb = void 0,\n Wa = ta,\n ib = Ua,\n Ca = za,\n Xa = oa,\n Oa = 0,\n La = Wa.m,\n Ya = 8,\n Za = wa(128, O);\n e: for (;;) {\n if (!Z(Za, 0, 7, ib, 19)) break e;\n if (D(La, 1)) {\n var kb = 2 + 2 * D(La, 3),\n Ba = 2 + D(La, kb);\n if (Ba > Ca) break e;\n } else Ba = Ca;\n for (sb = 0; sb < Ca && Ba--; ) {\n Sa(La);\n var $a = Za[0 + (pb(La) & 127)];\n qb(La, La.u + $a.g);\n var jb = $a.value;\n if (16 > jb) (Xa[sb++] = jb), 0 != jb && (Ya = jb);\n else {\n var lb = 16 == jb,\n ab = jb - 16,\n mb = oe[ab],\n bb = D(La, pe[ab]) + mb;\n if (sb + bb > Ca) break e;\n else\n for (var nb = lb ? Ya : 0; 0 < bb--; )\n Xa[sb++] = nb;\n }\n }\n Oa = 1;\n break e;\n }\n Oa || (Wa.a = 3);\n ya = Oa;\n }\n (ya = ya && !Ka.h) && (Ia = Z(db, eb, 8, oa, za));\n ya && 0 != Ia ? (Aa = Ia) : ((ta.a = 3), (Aa = 0));\n }\n if (0 == Aa) break c;\n ra && 1 == qe[ba] && (ra = 0 == pa[U].g);\n Fa += pa[U].g;\n U += Aa;\n if (3 >= ba) {\n var Pa = ha[0],\n tb;\n for (tb = 1; tb < Y; ++tb) ha[tb] > Pa && (Pa = ha[tb]);\n Ha += Pa;\n }\n }\n ja.nd = ra;\n ja.Qb = 0;\n ra &&\n ((ja.qb =\n ((da[3][ea[3] + 0].value << 24) |\n (da[1][ea[1] + 0].value << 16) |\n da[2][ea[2] + 0].value) >>>\n 0),\n 0 == Fa &&\n 256 > da[0][ea[0] + 0].value &&\n ((ja.Qb = 1), (ja.qb += da[0][ea[0] + 0].value << 8)));\n ja.jc = !ja.Qb && 6 > Ha;\n if (ja.jc) {\n var Ga,\n Ea = ja;\n for (Ga = 0; Ga < xb; ++Ga) {\n var Ma = Ga,\n Na = Ea.pd[Ma],\n vb = Ea.G[0][Ea.H[0] + Ma];\n 256 <= vb.value\n ? ((Na.g = vb.g + 256), (Na.value = vb.value))\n : ((Na.g = 0),\n (Na.value = 0),\n (Ma >>= ub(vb, 8, Na)),\n (Ma >>= ub(Ea.G[1][Ea.H[1] + Ma], 16, Na)),\n (Ma >>= ub(Ea.G[2][Ea.H[2] + Ma], 0, Na)),\n ub(Ea.G[3][Ea.H[3] + Ma], 24, Na));\n }\n }\n }\n R.vc = P;\n R.Wb = W;\n R.Ya = la;\n R.yc = ma;\n H = 1;\n break b;\n }\n H = 0;\n }\n f = H;\n if (!f) {\n d.a = 3;\n break a;\n }\n if (0 < n) {\n if (((l.ua = 1 << n), !Zb(l.Wa, n))) {\n d.a = 1;\n f = 0;\n break a;\n }\n } else l.ua = 0;\n var Qa = d,\n cb = g,\n ob = h,\n Ra = Qa.s,\n Ta = Ra.xc;\n Qa.c = cb;\n Qa.i = ob;\n Ra.md = xa(cb, Ta);\n Ra.wc = 0 == Ta ? -1 : (1 << Ta) - 1;\n if (c) {\n d.xb = re;\n break a;\n }\n m = V(g * h);\n if (null == m) {\n d.a = 1;\n f = 0;\n break a;\n }\n f = (f = Jb(d, m, 0, g, h, h, null)) && !k.h;\n break a;\n }\n f\n ? (null != e ? (e[0] = m) : (x(null == m), x(c)), (d.$ = 0), c || Ac(l))\n : Ac(l);\n return f;\n }\n function Ec(a, b) {\n var c = a.c * a.i,\n d = c + b + 16 * b;\n x(a.c <= b);\n a.V = V(d);\n if (null == a.V) return (a.Ta = null), (a.Ua = 0), (a.a = 1), 0;\n a.Ta = a.V;\n a.Ua = a.Ba + c + b;\n return 1;\n }\n function se(a, b) {\n var c = a.C,\n d = b - c,\n e = a.V,\n f = a.Ba + a.c * c;\n for (x(b <= a.l.o); 0 < d; ) {\n var g = 16 < d ? 16 : d,\n h = a.l.ma,\n k = a.l.width,\n l = k * g,\n m = h.ca,\n n = h.tb + k * c,\n r = a.Ta,\n q = a.Ua;\n oc(a, g, e, f);\n Fc(r, q, m, n, l);\n zc(h, c, c + g, m, n, k);\n d -= g;\n e += g * a.c;\n c += g;\n }\n x(c == b);\n a.C = a.Ma = b;\n }\n function te(a, b) {\n var c = [0],\n d = [0],\n e = [0];\n a: for (;;) {\n if (null == a) return 0;\n if (null == b) return (a.a = 2), 0;\n a.l = b;\n a.a = 0;\n cb(a.m, b.data, b.w, b.ha);\n if (!mc(a.m, c, d, e)) {\n a.a = 3;\n break a;\n }\n a.xb = Cc;\n b.width = c[0];\n b.height = d[0];\n if (!rb(c[0], d[0], 1, a, null)) break a;\n return 1;\n }\n x(0 != a.a);\n return 0;\n }\n function ue() {\n this.ub = this.yd = this.td = this.Rb = 0;\n }\n function ve() {\n this.Kd = this.Ld = this.Ud = this.Td = this.i = this.c = 0;\n }\n function we() {\n this.Fb = this.Bb = this.Cb = 0;\n this.Zb = V(4);\n this.Lb = V(4);\n }\n function Gc() {\n this.Yb = wb();\n }\n function xe() {\n this.jb = V(3);\n this.Wc = Ed([4, 8], Gc);\n this.Xc = Ed([4, 17], Gc);\n }\n function ye() {\n this.Pc = this.wb = this.Tb = this.zd = 0;\n this.vd = new V(4);\n this.od = new V(4);\n }\n function Xa() {\n this.ld = this.La = this.dd = this.tc = 0;\n }\n function Hc() {\n this.Na = this.la = 0;\n }\n function ze() {\n this.Sc = [0, 0];\n this.Eb = [0, 0];\n this.Qc = [0, 0];\n this.ia = this.lc = 0;\n }\n function Kb() {\n this.ad = V(384);\n this.Za = 0;\n this.Ob = V(16);\n this.$b = this.Ad = this.ia = this.Gc = this.Hc = this.Dd = 0;\n }\n function Ae() {\n this.uc = this.M = this.Nb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.ya = Array(new Kb());\n this.aa = 0;\n this.l = new Oa();\n }\n function Ic() {\n this.y = V(16);\n this.f = V(8);\n this.ea = V(8);\n }\n function Be() {\n this.cb = this.a = 0;\n this.sc = \"\";\n this.m = new Wb();\n this.Od = new ue();\n this.Kc = new ve();\n this.ed = new ye();\n this.Qa = new we();\n this.Ic = this.$c = this.Aa = 0;\n this.D = new Ae();\n this.Xb = this.Va = this.Hb = this.zb = this.yb = this.Ub = this.za = 0;\n this.Jc = wa(8, Wb);\n this.ia = 0;\n new F();\n this.pb = wa(4, ze);\n this.Pa = new xe();\n this.Bd = this.kc = 0;\n this.Ac = [];\n this.Bc = 0;\n this.zc = [0, 0, 0, 0];\n this.Gd = Array(new Ic());\n this.Hd = 0;\n this.rb = Array(new Hc());\n this.sb = 0;\n this.wa = Array(new Xa());\n this.Y = 0;\n this.oc = [];\n this.pc = 0;\n this.sa = [];\n this.ta = 0;\n this.qa = [];\n this.ra = 0;\n this.Ha = [];\n this.B = this.R = this.Ia = 0;\n this.Ec = [];\n this.M = this.ja = this.Vb = this.Fc = 0;\n this.ya = Array(new Kb());\n this.L = this.aa = 0;\n this.gd = Ed([4, 2], Xa);\n this.ga = null;\n this.Fa = [];\n this.Cc = this.qc = this.P = 0;\n this.Gb = [];\n this.Uc = 0;\n this.mb = [];\n this.nb = 0;\n this.rc = [];\n this.Ga = this.Vc = 0;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function Oa() {\n this.T = this.U = this.ka = this.height = this.width = 0;\n this.y = [];\n this.f = [];\n this.ea = [];\n this.Rc = this.fa = this.W = this.N = this.O = 0;\n this.ma = \"void\";\n this.put = \"VP8IoPutHook\";\n this.ac = \"VP8IoSetupHook\";\n this.bc = \"VP8IoTeardownHook\";\n this.ha = this.Kb = 0;\n this.data = [];\n this.hb = this.ib = this.da = this.o = this.j = this.va = this.v = this.Da = this.ob = this.w = 0;\n this.F = [];\n this.J = 0;\n }\n function Ce() {\n var a = new Be();\n null != a &&\n ((a.a = 0), (a.sc = \"OK\"), (a.cb = 0), (a.Xb = 0), oa || (oa = De));\n return a;\n }\n function T(a, b, c) {\n 0 == a.a && ((a.a = b), (a.sc = c), (a.cb = 0));\n return 0;\n }\n function Jc(a, b, c) {\n return 3 <= c && 157 == a[b + 0] && 1 == a[b + 1] && 42 == a[b + 2];\n }\n function Kc(a, b) {\n if (null == a) return 0;\n a.a = 0;\n a.sc = \"OK\";\n if (null == b) return T(a, 2, \"null VP8Io passed to VP8GetHeaders()\");\n var c = b.data;\n var d = b.w;\n var e = b.ha;\n if (4 > e) return T(a, 7, \"Truncated header.\");\n var f = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);\n var g = a.Od;\n g.Rb = !(f & 1);\n g.td = (f >> 1) & 7;\n g.yd = (f >> 4) & 1;\n g.ub = f >> 5;\n if (3 < g.td) return T(a, 3, \"Incorrect keyframe parameters.\");\n if (!g.yd) return T(a, 4, \"Frame not displayable.\");\n d += 3;\n e -= 3;\n var h = a.Kc;\n if (g.Rb) {\n if (7 > e) return T(a, 7, \"cannot parse picture header\");\n if (!Jc(c, d, e)) return T(a, 3, \"Bad code word\");\n h.c = ((c[d + 4] << 8) | c[d + 3]) & 16383;\n h.Td = c[d + 4] >> 6;\n h.i = ((c[d + 6] << 8) | c[d + 5]) & 16383;\n h.Ud = c[d + 6] >> 6;\n d += 7;\n e -= 7;\n a.za = (h.c + 15) >> 4;\n a.Ub = (h.i + 15) >> 4;\n b.width = h.c;\n b.height = h.i;\n b.Da = 0;\n b.j = 0;\n b.v = 0;\n b.va = b.width;\n b.o = b.height;\n b.da = 0;\n b.ib = b.width;\n b.hb = b.height;\n b.U = b.width;\n b.T = b.height;\n f = a.Pa;\n M(f.jb, 0, 255, f.jb.length);\n f = a.Qa;\n x(null != f);\n f.Cb = 0;\n f.Bb = 0;\n f.Fb = 1;\n M(f.Zb, 0, 0, f.Zb.length);\n M(f.Lb, 0, 0, f.Lb);\n }\n if (g.ub > e) return T(a, 7, \"bad partition length\");\n f = a.m;\n ma(f, c, d, g.ub);\n d += g.ub;\n e -= g.ub;\n g.Rb && ((h.Ld = G(f)), (h.Kd = G(f)));\n h = a.Qa;\n var k = a.Pa,\n l;\n x(null != f);\n x(null != h);\n h.Cb = G(f);\n if (h.Cb) {\n h.Bb = G(f);\n if (G(f)) {\n h.Fb = G(f);\n for (l = 0; 4 > l; ++l) h.Zb[l] = G(f) ? ca(f, 7) : 0;\n for (l = 0; 4 > l; ++l) h.Lb[l] = G(f) ? ca(f, 6) : 0;\n }\n if (h.Bb) for (l = 0; 3 > l; ++l) k.jb[l] = G(f) ? na(f, 8) : 255;\n } else h.Bb = 0;\n if (f.Ka) return T(a, 3, \"cannot parse segment header\");\n h = a.ed;\n h.zd = G(f);\n h.Tb = na(f, 6);\n h.wb = na(f, 3);\n h.Pc = G(f);\n if (h.Pc && G(f)) {\n for (k = 0; 4 > k; ++k) G(f) && (h.vd[k] = ca(f, 6));\n for (k = 0; 4 > k; ++k) G(f) && (h.od[k] = ca(f, 6));\n }\n a.L = 0 == h.Tb ? 0 : h.zd ? 1 : 2;\n if (f.Ka) return T(a, 3, \"cannot parse filter header\");\n l = d;\n var m = e;\n e = l;\n d = l + m;\n h = m;\n a.Xb = (1 << na(a.m, 2)) - 1;\n k = a.Xb;\n if (m < 3 * k) c = 7;\n else {\n l += 3 * k;\n h -= 3 * k;\n for (m = 0; m < k; ++m) {\n var n = c[e + 0] | (c[e + 1] << 8) | (c[e + 2] << 16);\n n > h && (n = h);\n ma(a.Jc[+m], c, l, n);\n l += n;\n h -= n;\n e += 3;\n }\n ma(a.Jc[+k], c, l, h);\n c = l < d ? 0 : 5;\n }\n if (0 != c) return T(a, c, \"cannot parse partitions\");\n l = a.m;\n c = na(l, 7);\n e = G(l) ? ca(l, 4) : 0;\n d = G(l) ? ca(l, 4) : 0;\n h = G(l) ? ca(l, 4) : 0;\n k = G(l) ? ca(l, 4) : 0;\n l = G(l) ? ca(l, 4) : 0;\n m = a.Qa;\n for (n = 0; 4 > n; ++n) {\n if (m.Cb) {\n var r = m.Zb[n];\n m.Fb || (r += c);\n } else if (0 < n) {\n a.pb[n] = a.pb[0];\n continue;\n } else r = c;\n var q = a.pb[n];\n q.Sc[0] = Lb[ga(r + e, 127)];\n q.Sc[1] = Mb[ga(r + 0, 127)];\n q.Eb[0] = 2 * Lb[ga(r + d, 127)];\n q.Eb[1] = (101581 * Mb[ga(r + h, 127)]) >> 16;\n 8 > q.Eb[1] && (q.Eb[1] = 8);\n q.Qc[0] = Lb[ga(r + k, 117)];\n q.Qc[1] = Mb[ga(r + l, 127)];\n q.lc = r + l;\n }\n if (!g.Rb) return T(a, 4, \"Not a key frame.\");\n G(f);\n g = a.Pa;\n for (c = 0; 4 > c; ++c) {\n for (e = 0; 8 > e; ++e)\n for (d = 0; 3 > d; ++d)\n for (h = 0; 11 > h; ++h)\n (k = K(f, Ee[c][e][d][h]) ? na(f, 8) : Fe[c][e][d][h]),\n (g.Wc[c][e].Yb[d][h] = k);\n for (e = 0; 17 > e; ++e) g.Xc[c][e] = g.Wc[c][Ge[e]];\n }\n a.kc = G(f);\n a.kc && (a.Bd = na(f, 8));\n return (a.cb = 1);\n }\n function De(a, b, c, d, e, f, g) {\n var h = b[e].Yb[c];\n for (c = 0; 16 > e; ++e) {\n if (!K(a, h[c + 0])) return e;\n for (; !K(a, h[c + 1]); )\n if (((h = b[++e].Yb[0]), (c = 0), 16 == e)) return 16;\n var k = b[e + 1].Yb;\n if (K(a, h[c + 2])) {\n var l = a,\n m = h,\n n = c;\n var r = 0;\n if (K(l, m[n + 3]))\n if (K(l, m[n + 6])) {\n h = 0;\n r = K(l, m[n + 8]);\n m = K(l, m[n + 9 + r]);\n n = 2 * r + m;\n r = 0;\n for (m = He[n]; m[h]; ++h) r += r + K(l, m[h]);\n r += 3 + (8 << n);\n } else\n K(l, m[n + 7])\n ? ((r = 7 + 2 * K(l, 165)), (r += K(l, 145)))\n : (r = 5 + K(l, 159));\n else K(l, m[n + 4]) ? (r = 3 + K(l, m[n + 5])) : (r = 2);\n h = k[2];\n } else (r = 1), (h = k[1]);\n k = g + Ie[e];\n l = a;\n 0 > l.b && Qa(l);\n var m = l.b,\n n = l.Ca >> 1,\n q = (n - (l.I >> m)) >> 31;\n --l.b;\n l.Ca += q;\n l.Ca |= 1;\n l.I -= ((n + 1) & q) << m;\n f[k] = ((r ^ q) - q) * d[(0 < e) + 0];\n }\n return 16;\n }\n function Lc(a) {\n var b = a.rb[a.sb - 1];\n b.la = 0;\n b.Na = 0;\n M(a.zc, 0, 0, a.zc.length);\n a.ja = 0;\n }\n function Je(a, b) {\n for (a.M = 0; a.M < a.Va; ++a.M) {\n var c = a.Jc[a.M & a.Xb],\n d = a.m,\n e = a,\n f;\n for (f = 0; f < e.za; ++f) {\n var g = d;\n var h = e;\n var k = h.Ac,\n l = h.Bc + 4 * f,\n m = h.zc,\n n = h.ya[h.aa + f];\n h.Qa.Bb\n ? (n.$b = K(g, h.Pa.jb[0])\n ? 2 + K(g, h.Pa.jb[2])\n : K(g, h.Pa.jb[1]))\n : (n.$b = 0);\n h.kc && (n.Ad = K(g, h.Bd));\n n.Za = !K(g, 145) + 0;\n if (n.Za) {\n var r = n.Ob,\n q = 0;\n for (h = 0; 4 > h; ++h) {\n var t = m[0 + h];\n var v;\n for (v = 0; 4 > v; ++v) {\n t = Ke[k[l + v]][t];\n for (var p = Mc[K(g, t[0])]; 0 < p; )\n p = Mc[2 * p + K(g, t[p])];\n t = -p;\n k[l + v] = t;\n }\n I(r, q, k, l, 4);\n q += 4;\n m[0 + h] = t;\n }\n } else\n (t = K(g, 156) ? (K(g, 128) ? 1 : 3) : K(g, 163) ? 2 : 0),\n (n.Ob[0] = t),\n M(k, l, t, 4),\n M(m, 0, t, 4);\n n.Dd = K(g, 142) ? (K(g, 114) ? (K(g, 183) ? 1 : 3) : 2) : 0;\n }\n if (e.m.Ka) return T(a, 7, \"Premature end-of-partition0 encountered.\");\n for (; a.ja < a.za; ++a.ja) {\n d = a;\n e = c;\n g = d.rb[d.sb - 1];\n k = d.rb[d.sb + d.ja];\n f = d.ya[d.aa + d.ja];\n if ((l = d.kc ? f.Ad : 0))\n (g.la = k.la = 0),\n f.Za || (g.Na = k.Na = 0),\n (f.Hc = 0),\n (f.Gc = 0),\n (f.ia = 0);\n else {\n var u,\n w,\n g = k,\n k = e,\n l = d.Pa.Xc,\n m = d.ya[d.aa + d.ja],\n n = d.pb[m.$b];\n h = m.ad;\n r = 0;\n q = d.rb[d.sb - 1];\n t = v = 0;\n M(h, r, 0, 384);\n if (m.Za) {\n var y = 0;\n var A = l[3];\n } else {\n p = V(16);\n var E = g.Na + q.Na;\n E = oa(k, l[1], E, n.Eb, 0, p, 0);\n g.Na = q.Na = (0 < E) + 0;\n if (1 < E) Nc(p, 0, h, r);\n else {\n var B = (p[0] + 3) >> 3;\n for (p = 0; 256 > p; p += 16) h[r + p] = B;\n }\n y = 1;\n A = l[0];\n }\n var C = g.la & 15;\n var N = q.la & 15;\n for (p = 0; 4 > p; ++p) {\n var z = N & 1;\n for (B = w = 0; 4 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, A, E, n.Sc, y, h, r)),\n (z = E > y),\n (C = (C >> 1) | (z << 7)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 4;\n N = (N >> 1) | (z << 7);\n v = ((v << 8) | w) >>> 0;\n }\n A = C;\n y = N >> 4;\n for (u = 0; 4 > u; u += 2) {\n w = 0;\n C = g.la >> (4 + u);\n N = q.la >> (4 + u);\n for (p = 0; 2 > p; ++p) {\n z = N & 1;\n for (B = 0; 2 > B; ++B)\n (E = z + (C & 1)),\n (E = oa(k, l[2], E, n.Qc, 0, h, r)),\n (z = 0 < E),\n (C = (C >> 1) | (z << 3)),\n (w = (w << 2) | (3 < E ? 3 : 1 < E ? 2 : 0 != h[r + 0])),\n (r += 16);\n C >>= 2;\n N = (N >> 1) | (z << 5);\n }\n t |= w << (4 * u);\n A |= (C << 4) << u;\n y |= (N & 240) << u;\n }\n g.la = A;\n q.la = y;\n m.Hc = v;\n m.Gc = t;\n m.ia = t & 43690 ? 0 : n.ia;\n l = !(v | t);\n }\n 0 < d.L &&\n ((d.wa[d.Y + d.ja] = d.gd[f.$b][f.Za]),\n (d.wa[d.Y + d.ja].La |= !l));\n if (e.Ka) return T(a, 7, \"Premature end-of-file encountered.\");\n }\n Lc(a);\n c = a;\n d = b;\n e = 1;\n f = c.D;\n g = 0 < c.L && c.M >= c.zb && c.M <= c.Va;\n if (0 == c.Aa)\n a: {\n (f.M = c.M), (f.uc = g), Oc(c, f), (e = 1);\n w = c.D;\n f = w.Nb;\n t = Ya[c.L];\n g = t * c.R;\n k = (t / 2) * c.B;\n p = 16 * f * c.R;\n B = 8 * f * c.B;\n l = c.sa;\n m = c.ta - g + p;\n n = c.qa;\n h = c.ra - k + B;\n r = c.Ha;\n q = c.Ia - k + B;\n C = w.M;\n N = 0 == C;\n v = C >= c.Va - 1;\n 2 == c.Aa && Oc(c, w);\n if (w.uc)\n for (E = c, z = E.D.M, x(E.D.uc), w = E.yb; w < E.Hb; ++w) {\n var Q = E;\n y = w;\n A = z;\n var S = Q.D,\n D = S.Nb;\n u = Q.R;\n var S = S.wa[S.Y + y],\n F = Q.sa,\n H = Q.ta + 16 * D * u + 16 * y,\n J = S.dd,\n G = S.tc;\n if (0 != G)\n if ((x(3 <= G), 1 == Q.L))\n 0 < y && Pc(F, H, u, G + 4),\n S.La && Qc(F, H, u, G),\n 0 < A && Rc(F, H, u, G + 4),\n S.La && Sc(F, H, u, G);\n else {\n var L = Q.B,\n O = Q.qa,\n P = Q.ra + 8 * D * L + 8 * y,\n R = Q.Ha,\n Q = Q.Ia + 8 * D * L + 8 * y,\n D = S.ld;\n 0 < y &&\n (Tc(F, H, u, G + 4, J, D),\n Uc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Vc(F, H, u, G, J, D), Wc(O, P, R, Q, L, G, J, D));\n 0 < A &&\n (Xc(F, H, u, G + 4, J, D),\n Yc(O, P, R, Q, L, G + 4, J, D));\n S.La && (Zc(F, H, u, G, J, D), $c(O, P, R, Q, L, G, J, D));\n }\n }\n c.ia && alert(\"todo:DitherRow\");\n if (null != d.put) {\n w = 16 * C;\n C = 16 * (C + 1);\n N\n ? ((d.y = c.sa),\n (d.O = c.ta + p),\n (d.f = c.qa),\n (d.N = c.ra + B),\n (d.ea = c.Ha),\n (d.W = c.Ia + B))\n : ((w -= t),\n (d.y = l),\n (d.O = m),\n (d.f = n),\n (d.N = h),\n (d.ea = r),\n (d.W = q));\n v || (C -= t);\n C > d.o && (C = d.o);\n d.F = null;\n d.J = null;\n if (\n null != c.Fa &&\n 0 < c.Fa.length &&\n w < C &&\n ((d.J = Le(c, d, w, C - w)),\n (d.F = c.mb),\n null == d.F && 0 == d.F.length)\n ) {\n e = T(c, 3, \"Could not decode alpha data.\");\n break a;\n }\n w < d.j &&\n ((t = d.j - w),\n (w = d.j),\n x(!(t & 1)),\n (d.O += c.R * t),\n (d.N += c.B * (t >> 1)),\n (d.W += c.B * (t >> 1)),\n null != d.F && (d.J += d.width * t));\n w < C &&\n ((d.O += d.v),\n (d.N += d.v >> 1),\n (d.W += d.v >> 1),\n null != d.F && (d.J += d.v),\n (d.ka = w - d.j),\n (d.U = d.va - d.v),\n (d.T = C - w),\n (e = d.put(d)));\n }\n f + 1 != c.Ic ||\n v ||\n (I(c.sa, c.ta - g, l, m + 16 * c.R, g),\n I(c.qa, c.ra - k, n, h + 8 * c.B, k),\n I(c.Ha, c.Ia - k, r, q + 8 * c.B, k));\n }\n if (!e) return T(a, 6, \"Output aborted.\");\n }\n return 1;\n }\n function Me(a, b) {\n if (null == a) return 0;\n if (null == b) return T(a, 2, \"NULL VP8Io parameter in VP8Decode().\");\n if (!a.cb && !Kc(a, b)) return 0;\n x(a.cb);\n if (null == b.ac || b.ac(b)) {\n b.ob && (a.L = 0);\n var c = Ya[a.L];\n 2 == a.L\n ? ((a.yb = 0), (a.zb = 0))\n : ((a.yb = (b.v - c) >> 4),\n (a.zb = (b.j - c) >> 4),\n 0 > a.yb && (a.yb = 0),\n 0 > a.zb && (a.zb = 0));\n a.Va = (b.o + 15 + c) >> 4;\n a.Hb = (b.va + 15 + c) >> 4;\n a.Hb > a.za && (a.Hb = a.za);\n a.Va > a.Ub && (a.Va = a.Ub);\n if (0 < a.L) {\n var d = a.ed;\n for (c = 0; 4 > c; ++c) {\n var e;\n if (a.Qa.Cb) {\n var f = a.Qa.Lb[c];\n a.Qa.Fb || (f += d.Tb);\n } else f = d.Tb;\n for (e = 0; 1 >= e; ++e) {\n var g = a.gd[c][e],\n h = f;\n d.Pc && ((h += d.vd[0]), e && (h += d.od[0]));\n h = 0 > h ? 0 : 63 < h ? 63 : h;\n if (0 < h) {\n var k = h;\n 0 < d.wb &&\n ((k = 4 < d.wb ? k >> 2 : k >> 1),\n k > 9 - d.wb && (k = 9 - d.wb));\n 1 > k && (k = 1);\n g.dd = k;\n g.tc = 2 * h + k;\n g.ld = 40 <= h ? 2 : 15 <= h ? 1 : 0;\n } else g.tc = 0;\n g.La = e;\n }\n }\n }\n c = 0;\n } else T(a, 6, \"Frame setup failed\"), (c = a.a);\n if ((c = 0 == c)) {\n if (c) {\n a.$c = 0;\n 0 < a.Aa || (a.Ic = Ne);\n b: {\n c = a.Ic;\n var k = a.za,\n d = 4 * k,\n l = 32 * k,\n m = k + 1,\n n = 0 < a.L ? k * (0 < a.Aa ? 2 : 1) : 0,\n r = (2 == a.Aa ? 2 : 1) * k;\n e = ((3 * (16 * c + Ya[a.L])) / 2) * l;\n f = null != a.Fa && 0 < a.Fa.length ? a.Kc.c * a.Kc.i : 0;\n g = d + 832 + e + f;\n if (g != g) c = 0;\n else {\n if (g > a.Vb) {\n a.Vb = 0;\n a.Ec = V(g);\n a.Fc = 0;\n if (null == a.Ec) {\n c = T(a, 1, \"no memory during frame initialization.\");\n break b;\n }\n a.Vb = g;\n }\n g = a.Ec;\n h = a.Fc;\n a.Ac = g;\n a.Bc = h;\n h += d;\n a.Gd = wa(l, Ic);\n a.Hd = 0;\n a.rb = wa(m + 1, Hc);\n a.sb = 1;\n a.wa = n ? wa(n, Xa) : null;\n a.Y = 0;\n a.D.Nb = 0;\n a.D.wa = a.wa;\n a.D.Y = a.Y;\n 0 < a.Aa && (a.D.Y += k);\n x(!0);\n a.oc = g;\n a.pc = h;\n h += 832;\n a.ya = wa(r, Kb);\n a.aa = 0;\n a.D.ya = a.ya;\n a.D.aa = a.aa;\n 2 == a.Aa && (a.D.aa += k);\n a.R = 16 * k;\n a.B = 8 * k;\n l = Ya[a.L];\n k = l * a.R;\n l = (l / 2) * a.B;\n a.sa = g;\n a.ta = h + k;\n a.qa = a.sa;\n a.ra = a.ta + 16 * c * a.R + l;\n a.Ha = a.qa;\n a.Ia = a.ra + 8 * c * a.B + l;\n a.$c = 0;\n h += e;\n a.mb = f ? g : null;\n a.nb = f ? h : null;\n x(h + f <= a.Fc + a.Vb);\n Lc(a);\n M(a.Ac, a.Bc, 0, d);\n c = 1;\n }\n }\n if (c) {\n b.ka = 0;\n b.y = a.sa;\n b.O = a.ta;\n b.f = a.qa;\n b.N = a.ra;\n b.ea = a.Ha;\n b.Vd = a.Ia;\n b.fa = a.R;\n b.Rc = a.B;\n b.F = null;\n b.J = 0;\n if (!ad) {\n for (c = -255; 255 >= c; ++c) bd[255 + c] = 0 > c ? -c : c;\n for (c = -1020; 1020 >= c; ++c)\n cd[1020 + c] = -128 > c ? -128 : 127 < c ? 127 : c;\n for (c = -112; 112 >= c; ++c)\n dd[112 + c] = -16 > c ? -16 : 15 < c ? 15 : c;\n for (c = -255; 510 >= c; ++c)\n ed[255 + c] = 0 > c ? 0 : 255 < c ? 255 : c;\n ad = 1;\n }\n Nc = Oe;\n Za = Pe;\n Nb = Qe;\n pa = Re;\n Ob = Se;\n fd = Te;\n Xc = Ue;\n Tc = Ve;\n Yc = We;\n Uc = Xe;\n Zc = Ye;\n Vc = Ze;\n $c = $e;\n Wc = af;\n Rc = gd;\n Pc = hd;\n Sc = bf;\n Qc = cf;\n W[0] = df;\n W[1] = ef;\n W[2] = ff;\n W[3] = gf;\n W[4] = hf;\n W[5] = jf;\n W[6] = kf;\n W[7] = lf;\n W[8] = mf;\n W[9] = nf;\n Y[0] = of;\n Y[1] = pf;\n Y[2] = qf;\n Y[3] = rf;\n Y[4] = sf;\n Y[5] = tf;\n Y[6] = uf;\n ka[0] = vf;\n ka[1] = wf;\n ka[2] = xf;\n ka[3] = yf;\n ka[4] = zf;\n ka[5] = Af;\n ka[6] = Bf;\n c = 1;\n } else c = 0;\n }\n c && (c = Je(a, b));\n null != b.bc && b.bc(b);\n c &= 1;\n }\n if (!c) return 0;\n a.cb = 0;\n return c;\n }\n function qa(a, b, c, d, e) {\n e = a[b + c + 32 * d] + (e >> 3);\n a[b + c + 32 * d] = e & -256 ? (0 > e ? 0 : 255) : e;\n }\n function kb(a, b, c, d, e, f) {\n qa(a, b, 0, c, d + e);\n qa(a, b, 1, c, d + f);\n qa(a, b, 2, c, d - f);\n qa(a, b, 3, c, d - e);\n }\n function da(a) {\n return ((20091 * a) >> 16) + a;\n }\n function id(a, b, c, d) {\n var e = 0,\n f;\n var g = V(16);\n for (f = 0; 4 > f; ++f) {\n var h = a[b + 0] + a[b + 8];\n var k = a[b + 0] - a[b + 8];\n var l = ((35468 * a[b + 4]) >> 16) - da(a[b + 12]);\n var m = da(a[b + 4]) + ((35468 * a[b + 12]) >> 16);\n g[e + 0] = h + m;\n g[e + 1] = k + l;\n g[e + 2] = k - l;\n g[e + 3] = h - m;\n e += 4;\n b++;\n }\n for (f = e = 0; 4 > f; ++f)\n (a = g[e + 0] + 4),\n (h = a + g[e + 8]),\n (k = a - g[e + 8]),\n (l = ((35468 * g[e + 4]) >> 16) - da(g[e + 12])),\n (m = da(g[e + 4]) + ((35468 * g[e + 12]) >> 16)),\n qa(c, d, 0, 0, h + m),\n qa(c, d, 1, 0, k + l),\n qa(c, d, 2, 0, k - l),\n qa(c, d, 3, 0, h - m),\n e++,\n (d += 32);\n }\n function Te(a, b, c, d) {\n var e = a[b + 0] + 4,\n f = (35468 * a[b + 4]) >> 16,\n g = da(a[b + 4]),\n h = (35468 * a[b + 1]) >> 16;\n a = da(a[b + 1]);\n kb(c, d, 0, e + g, a, h);\n kb(c, d, 1, e + f, a, h);\n kb(c, d, 2, e - f, a, h);\n kb(c, d, 3, e - g, a, h);\n }\n function Pe(a, b, c, d, e) {\n id(a, b, c, d);\n e && id(a, b + 16, c, d + 4);\n }\n function Qe(a, b, c, d) {\n Za(a, b + 0, c, d, 1);\n Za(a, b + 32, c, d + 128, 1);\n }\n function Re(a, b, c, d) {\n a = a[b + 0] + 4;\n var e;\n for (e = 0; 4 > e; ++e) for (b = 0; 4 > b; ++b) qa(c, d, b, e, a);\n }\n function Se(a, b, c, d) {\n a[b + 0] && pa(a, b + 0, c, d);\n a[b + 16] && pa(a, b + 16, c, d + 4);\n a[b + 32] && pa(a, b + 32, c, d + 128);\n a[b + 48] && pa(a, b + 48, c, d + 128 + 4);\n }\n function Oe(a, b, c, d) {\n var e = V(16),\n f;\n for (f = 0; 4 > f; ++f) {\n var g = a[b + 0 + f] + a[b + 12 + f];\n var h = a[b + 4 + f] + a[b + 8 + f];\n var k = a[b + 4 + f] - a[b + 8 + f];\n var l = a[b + 0 + f] - a[b + 12 + f];\n e[0 + f] = g + h;\n e[8 + f] = g - h;\n e[4 + f] = l + k;\n e[12 + f] = l - k;\n }\n for (f = 0; 4 > f; ++f)\n (a = e[0 + 4 * f] + 3),\n (g = a + e[3 + 4 * f]),\n (h = e[1 + 4 * f] + e[2 + 4 * f]),\n (k = e[1 + 4 * f] - e[2 + 4 * f]),\n (l = a - e[3 + 4 * f]),\n (c[d + 0] = (g + h) >> 3),\n (c[d + 16] = (l + k) >> 3),\n (c[d + 32] = (g - h) >> 3),\n (c[d + 48] = (l - k) >> 3),\n (d += 64);\n }\n function Pb(a, b, c) {\n var d = b - 32,\n e = R,\n f = 255 - a[d - 1],\n g;\n for (g = 0; g < c; ++g) {\n var h = e,\n k = f + a[b - 1],\n l;\n for (l = 0; l < c; ++l) a[b + l] = h[k + a[d + l]];\n b += 32;\n }\n }\n function ef(a, b) {\n Pb(a, b, 4);\n }\n function wf(a, b) {\n Pb(a, b, 8);\n }\n function pf(a, b) {\n Pb(a, b, 16);\n }\n function qf(a, b) {\n var c;\n for (c = 0; 16 > c; ++c) I(a, b + 32 * c, a, b - 32, 16);\n }\n function rf(a, b) {\n var c;\n for (c = 16; 0 < c; --c) M(a, b, a[b - 1], 16), (b += 32);\n }\n function $a(a, b, c) {\n var d;\n for (d = 0; 16 > d; ++d) M(b, c + 32 * d, a, 16);\n }\n function of(a, b) {\n var c = 16,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d] + a[b + d - 32];\n $a(c >> 5, a, b);\n }\n function sf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b - 1 + 32 * d];\n $a(c >> 4, a, b);\n }\n function tf(a, b) {\n var c = 8,\n d;\n for (d = 0; 16 > d; ++d) c += a[b + d - 32];\n $a(c >> 4, a, b);\n }\n function uf(a, b) {\n $a(128, a, b);\n }\n function z(a, b, c) {\n return (a + 2 * b + c + 2) >> 2;\n }\n function ff(a, b) {\n var c = b - 32,\n c = new Uint8Array([\n z(a[c - 1], a[c + 0], a[c + 1]),\n z(a[c + 0], a[c + 1], a[c + 2]),\n z(a[c + 1], a[c + 2], a[c + 3]),\n z(a[c + 2], a[c + 3], a[c + 4])\n ]),\n d;\n for (d = 0; 4 > d; ++d) I(a, b + 32 * d, c, 0, c.length);\n }\n function gf(a, b) {\n var c = a[b - 1],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n ra(a, b + 0, 16843009 * z(a[b - 1 - 32], c, d));\n ra(a, b + 32, 16843009 * z(c, d, e));\n ra(a, b + 64, 16843009 * z(d, e, f));\n ra(a, b + 96, 16843009 * z(e, f, f));\n }\n function df(a, b) {\n var c = 4,\n d;\n for (d = 0; 4 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n c >>= 3;\n for (d = 0; 4 > d; ++d) M(a, b + 32 * d, c, 4);\n }\n function hf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 96] = z(d, e, a[b - 1 + 96]);\n a[b + 1 + 96] = a[b + 0 + 64] = z(c, d, e);\n a[b + 2 + 96] = a[b + 1 + 64] = a[b + 0 + 32] = z(f, c, d);\n a[b + 3 + 96] = a[b + 2 + 64] = a[b + 1 + 32] = a[b + 0 + 0] = z(g, f, c);\n a[b + 3 + 64] = a[b + 2 + 32] = a[b + 1 + 0] = z(h, g, f);\n a[b + 3 + 32] = a[b + 2 + 0] = z(k, h, g);\n a[b + 3 + 0] = z(l, k, h);\n }\n function kf(a, b) {\n var c = a[b + 1 - 32],\n d = a[b + 2 - 32],\n e = a[b + 3 - 32],\n f = a[b + 4 - 32],\n g = a[b + 5 - 32],\n h = a[b + 6 - 32],\n k = a[b + 7 - 32];\n a[b + 0 + 0] = z(a[b + 0 - 32], c, d);\n a[b + 1 + 0] = a[b + 0 + 32] = z(c, d, e);\n a[b + 2 + 0] = a[b + 1 + 32] = a[b + 0 + 64] = z(d, e, f);\n a[b + 3 + 0] = a[b + 2 + 32] = a[b + 1 + 64] = a[b + 0 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 64] = a[b + 1 + 96] = z(f, g, h);\n a[b + 3 + 64] = a[b + 2 + 96] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, k);\n }\n function jf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 - 32],\n g = a[b + 0 - 32],\n h = a[b + 1 - 32],\n k = a[b + 2 - 32],\n l = a[b + 3 - 32];\n a[b + 0 + 0] = a[b + 1 + 64] = (f + g + 1) >> 1;\n a[b + 1 + 0] = a[b + 2 + 64] = (g + h + 1) >> 1;\n a[b + 2 + 0] = a[b + 3 + 64] = (h + k + 1) >> 1;\n a[b + 3 + 0] = (k + l + 1) >> 1;\n a[b + 0 + 96] = z(e, d, c);\n a[b + 0 + 64] = z(d, c, f);\n a[b + 0 + 32] = a[b + 1 + 96] = z(c, f, g);\n a[b + 1 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 2 + 32] = a[b + 3 + 96] = z(g, h, k);\n a[b + 3 + 32] = z(h, k, l);\n }\n function lf(a, b) {\n var c = a[b + 0 - 32],\n d = a[b + 1 - 32],\n e = a[b + 2 - 32],\n f = a[b + 3 - 32],\n g = a[b + 4 - 32],\n h = a[b + 5 - 32],\n k = a[b + 6 - 32],\n l = a[b + 7 - 32];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 1 + 0] = a[b + 0 + 64] = (d + e + 1) >> 1;\n a[b + 2 + 0] = a[b + 1 + 64] = (e + f + 1) >> 1;\n a[b + 3 + 0] = a[b + 2 + 64] = (f + g + 1) >> 1;\n a[b + 0 + 32] = z(c, d, e);\n a[b + 1 + 32] = a[b + 0 + 96] = z(d, e, f);\n a[b + 2 + 32] = a[b + 1 + 96] = z(e, f, g);\n a[b + 3 + 32] = a[b + 2 + 96] = z(f, g, h);\n a[b + 3 + 64] = z(g, h, k);\n a[b + 3 + 96] = z(h, k, l);\n }\n function nf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96];\n a[b + 0 + 0] = (c + d + 1) >> 1;\n a[b + 2 + 0] = a[b + 0 + 32] = (d + e + 1) >> 1;\n a[b + 2 + 32] = a[b + 0 + 64] = (e + f + 1) >> 1;\n a[b + 1 + 0] = z(c, d, e);\n a[b + 3 + 0] = a[b + 1 + 32] = z(d, e, f);\n a[b + 3 + 32] = a[b + 1 + 64] = z(e, f, f);\n a[b + 3 + 64] = a[b + 2 + 64] = a[b + 0 + 96] = a[b + 1 + 96] = a[\n b + 2 + 96\n ] = a[b + 3 + 96] = f;\n }\n function mf(a, b) {\n var c = a[b - 1 + 0],\n d = a[b - 1 + 32],\n e = a[b - 1 + 64],\n f = a[b - 1 + 96],\n g = a[b - 1 - 32],\n h = a[b + 0 - 32],\n k = a[b + 1 - 32],\n l = a[b + 2 - 32];\n a[b + 0 + 0] = a[b + 2 + 32] = (c + g + 1) >> 1;\n a[b + 0 + 32] = a[b + 2 + 64] = (d + c + 1) >> 1;\n a[b + 0 + 64] = a[b + 2 + 96] = (e + d + 1) >> 1;\n a[b + 0 + 96] = (f + e + 1) >> 1;\n a[b + 3 + 0] = z(h, k, l);\n a[b + 2 + 0] = z(g, h, k);\n a[b + 1 + 0] = a[b + 3 + 32] = z(c, g, h);\n a[b + 1 + 32] = a[b + 3 + 64] = z(d, c, g);\n a[b + 1 + 64] = a[b + 3 + 96] = z(e, d, c);\n a[b + 1 + 96] = z(f, e, d);\n }\n function xf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) I(a, b + 32 * c, a, b - 32, 8);\n }\n function yf(a, b) {\n var c;\n for (c = 0; 8 > c; ++c) M(a, b, a[b - 1], 8), (b += 32);\n }\n function lb(a, b, c) {\n var d;\n for (d = 0; 8 > d; ++d) M(b, c + 32 * d, a, 8);\n }\n function vf(a, b) {\n var c = 8,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32] + a[b - 1 + 32 * d];\n lb(c >> 4, a, b);\n }\n function Af(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b + d - 32];\n lb(c >> 3, a, b);\n }\n function zf(a, b) {\n var c = 4,\n d;\n for (d = 0; 8 > d; ++d) c += a[b - 1 + 32 * d];\n lb(c >> 3, a, b);\n }\n function Bf(a, b) {\n lb(128, a, b);\n }\n function ab(a, b, c) {\n var d = a[b - c],\n e = a[b + 0],\n f = 3 * (e - d) + Qb[1020 + a[b - 2 * c] - a[b + c]],\n g = mb[112 + ((f + 4) >> 3)];\n a[b - c] = R[255 + d + mb[112 + ((f + 3) >> 3)]];\n a[b + 0] = R[255 + e - g];\n }\n function jd(a, b, c, d) {\n var e = a[b + 0],\n f = a[b + c];\n return U[255 + a[b - 2 * c] - a[b - c]] > d || U[255 + f - e] > d;\n }\n function kd(a, b, c, d) {\n return (\n 4 * U[255 + a[b - c] - a[b + 0]] + U[255 + a[b - 2 * c] - a[b + c]] <= d\n );\n }\n function ld(a, b, c, d, e) {\n var f = a[b - 3 * c],\n g = a[b - 2 * c],\n h = a[b - c],\n k = a[b + 0],\n l = a[b + c],\n m = a[b + 2 * c],\n n = a[b + 3 * c];\n return 4 * U[255 + h - k] + U[255 + g - l] > d\n ? 0\n : U[255 + a[b - 4 * c] - f] <= e &&\n U[255 + f - g] <= e &&\n U[255 + g - h] <= e &&\n U[255 + n - m] <= e &&\n U[255 + m - l] <= e &&\n U[255 + l - k] <= e;\n }\n function gd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d, c, e) && ab(a, b + d, c);\n }\n function hd(a, b, c, d) {\n var e = 2 * d + 1;\n for (d = 0; 16 > d; ++d) kd(a, b + d * c, 1, e) && ab(a, b + d * c, 1);\n }\n function bf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4 * c), gd(a, b, c, d);\n }\n function cf(a, b, c, d) {\n var e;\n for (e = 3; 0 < e; --e) (b += 4), hd(a, b, c, d);\n }\n function ea(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - 2 * m],\n r = k[l - m],\n q = k[l + 0],\n t = k[l + m],\n v = k[l + 2 * m],\n p = Qb[1020 + 3 * (q - r) + Qb[1020 + n - t]],\n u = (27 * p + 63) >> 7,\n w = (18 * p + 63) >> 7,\n p = (9 * p + 63) >> 7;\n k[l - 3 * m] = R[255 + k[l - 3 * m] + p];\n k[l - 2 * m] = R[255 + n + w];\n k[l - m] = R[255 + r + u];\n k[l + 0] = R[255 + q - u];\n k[l + m] = R[255 + t - w];\n k[l + 2 * m] = R[255 + v - p];\n }\n b += d;\n }\n }\n function Fa(a, b, c, d, e, f, g, h) {\n for (f = 2 * f + 1; 0 < e--; ) {\n if (ld(a, b, c, f, g))\n if (jd(a, b, c, h)) ab(a, b, c);\n else {\n var k = a,\n l = b,\n m = c,\n n = k[l - m],\n r = k[l + 0],\n q = k[l + m],\n t = 3 * (r - n),\n v = mb[112 + ((t + 4) >> 3)],\n t = mb[112 + ((t + 3) >> 3)],\n p = (v + 1) >> 1;\n k[l - 2 * m] = R[255 + k[l - 2 * m] + p];\n k[l - m] = R[255 + n + t];\n k[l + 0] = R[255 + r - v];\n k[l + m] = R[255 + q - p];\n }\n b += d;\n }\n }\n function Ue(a, b, c, d, e, f) {\n ea(a, b, c, 1, 16, d, e, f);\n }\n function Ve(a, b, c, d, e, f) {\n ea(a, b, 1, c, 16, d, e, f);\n }\n function Ye(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4 * c), Fa(a, b, c, 1, 16, d, e, f);\n }\n function Ze(a, b, c, d, e, f) {\n var g;\n for (g = 3; 0 < g; --g) (b += 4), Fa(a, b, 1, c, 16, d, e, f);\n }\n function We(a, b, c, d, e, f, g, h) {\n ea(a, b, e, 1, 8, f, g, h);\n ea(c, d, e, 1, 8, f, g, h);\n }\n function Xe(a, b, c, d, e, f, g, h) {\n ea(a, b, 1, e, 8, f, g, h);\n ea(c, d, 1, e, 8, f, g, h);\n }\n function $e(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4 * e, e, 1, 8, f, g, h);\n Fa(c, d + 4 * e, e, 1, 8, f, g, h);\n }\n function af(a, b, c, d, e, f, g, h) {\n Fa(a, b + 4, 1, e, 8, f, g, h);\n Fa(c, d + 4, 1, e, 8, f, g, h);\n }\n function Cf() {\n this.ba = new Cb();\n this.ec = [];\n this.cc = [];\n this.Mc = [];\n this.Dc = this.Nc = this.dc = this.fc = 0;\n this.Oa = new Ud();\n this.memory = 0;\n this.Ib = \"OutputFunc\";\n this.Jb = \"OutputAlphaFunc\";\n this.Nd = \"OutputRowFunc\";\n }\n function md() {\n this.data = [];\n this.offset = this.kd = this.ha = this.w = 0;\n this.na = [];\n this.xa = this.gb = this.Ja = this.Sa = this.P = 0;\n }\n function Df() {\n this.nc = this.Ea = this.b = this.hc = 0;\n this.K = [];\n this.w = 0;\n }\n function Ef() {\n this.ua = 0;\n this.Wa = new ac();\n this.vb = new ac();\n this.md = this.xc = this.wc = 0;\n this.vc = [];\n this.Wb = 0;\n this.Ya = new Ub();\n this.yc = new O();\n }\n function je() {\n this.xb = this.a = 0;\n this.l = new Oa();\n this.ca = new Cb();\n this.V = [];\n this.Ba = 0;\n this.Ta = [];\n this.Ua = 0;\n this.m = new Ra();\n this.Pb = 0;\n this.wd = new Ra();\n this.Ma = this.$ = this.C = this.i = this.c = this.xd = 0;\n this.s = new Ef();\n this.ab = 0;\n this.gc = wa(4, Df);\n this.Oc = 0;\n }\n function Ff() {\n this.Lc = this.Z = this.$a = this.i = this.c = 0;\n this.l = new Oa();\n this.ic = 0;\n this.ca = [];\n this.tb = 0;\n this.qd = null;\n this.rd = 0;\n }\n function Rb(a, b, c, d, e, f, g) {\n a = null == a ? 0 : a[b + 0];\n for (b = 0; b < g; ++b) (e[f + b] = (a + c[d + b]) & 255), (a = e[f + b]);\n }\n function Gf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h;\n for (h = 0; h < g; ++h) e[f + h] = (a[b + h] + c[d + h]) & 255;\n }\n }\n function Hf(a, b, c, d, e, f, g) {\n if (null == a) Rb(null, null, c, d, e, f, g);\n else {\n var h = a[b + 0],\n k = h,\n l = h,\n m;\n for (m = 0; m < g; ++m)\n (h = a[b + m]),\n (k = l + h - k),\n (l = (c[d + m] + (k & -256 ? (0 > k ? 0 : 255) : k)) & 255),\n (k = h),\n (e[f + m] = l);\n }\n }\n function Le(a, b, c, d) {\n var e = b.width,\n f = b.o;\n x(null != a && null != b);\n if (0 > c || 0 >= d || c + d > f) return null;\n if (!a.Cc) {\n if (null == a.ga) {\n a.ga = new Ff();\n var g;\n (g = null == a.ga) ||\n ((g = b.width * b.o),\n x(0 == a.Gb.length),\n (a.Gb = V(g)),\n (a.Uc = 0),\n null == a.Gb\n ? (g = 0)\n : ((a.mb = a.Gb), (a.nb = a.Uc), (a.rc = null), (g = 1)),\n (g = !g));\n if (!g) {\n g = a.ga;\n var h = a.Fa,\n k = a.P,\n l = a.qc,\n m = a.mb,\n n = a.nb,\n r = k + 1,\n q = l - 1,\n t = g.l;\n x(null != h && null != m && null != b);\n ia[0] = null;\n ia[1] = Rb;\n ia[2] = Gf;\n ia[3] = Hf;\n g.ca = m;\n g.tb = n;\n g.c = b.width;\n g.i = b.height;\n x(0 < g.c && 0 < g.i);\n if (1 >= l) b = 0;\n else if (\n ((g.$a = (h[k + 0] >> 0) & 3),\n (g.Z = (h[k + 0] >> 2) & 3),\n (g.Lc = (h[k + 0] >> 4) & 3),\n (k = (h[k + 0] >> 6) & 3),\n 0 > g.$a || 1 < g.$a || 4 <= g.Z || 1 < g.Lc || k)\n )\n b = 0;\n else if (\n ((t.put = kc),\n (t.ac = gc),\n (t.bc = lc),\n (t.ma = g),\n (t.width = b.width),\n (t.height = b.height),\n (t.Da = b.Da),\n (t.v = b.v),\n (t.va = b.va),\n (t.j = b.j),\n (t.o = b.o),\n g.$a)\n )\n b: {\n x(1 == g.$a), (b = Bc());\n c: for (;;) {\n if (null == b) {\n b = 0;\n break b;\n }\n x(null != g);\n g.mc = b;\n b.c = g.c;\n b.i = g.i;\n b.l = g.l;\n b.l.ma = g;\n b.l.width = g.c;\n b.l.height = g.i;\n b.a = 0;\n cb(b.m, h, r, q);\n if (!rb(g.c, g.i, 1, b, null)) break c;\n 1 == b.ab && 3 == b.gc[0].hc && yc(b.s)\n ? ((g.ic = 1),\n (h = b.c * b.i),\n (b.Ta = null),\n (b.Ua = 0),\n (b.V = V(h)),\n (b.Ba = 0),\n null == b.V ? ((b.a = 1), (b = 0)) : (b = 1))\n : ((g.ic = 0), (b = Ec(b, g.c)));\n if (!b) break c;\n b = 1;\n break b;\n }\n g.mc = null;\n b = 0;\n }\n else b = q >= g.c * g.i;\n g = !b;\n }\n if (g) return null;\n 1 != a.ga.Lc ? (a.Ga = 0) : (d = f - c);\n }\n x(null != a.ga);\n x(c + d <= f);\n a: {\n h = a.ga;\n b = h.c;\n f = h.l.o;\n if (0 == h.$a) {\n r = a.rc;\n q = a.Vc;\n t = a.Fa;\n k = a.P + 1 + c * b;\n l = a.mb;\n m = a.nb + c * b;\n x(k <= a.P + a.qc);\n if (0 != h.Z)\n for (x(null != ia[h.Z]), g = 0; g < d; ++g)\n ia[h.Z](r, q, t, k, l, m, b),\n (r = l),\n (q = m),\n (m += b),\n (k += b);\n else\n for (g = 0; g < d; ++g)\n I(l, m, t, k, b), (r = l), (q = m), (m += b), (k += b);\n a.rc = r;\n a.Vc = q;\n } else {\n x(null != h.mc);\n b = c + d;\n g = h.mc;\n x(null != g);\n x(b <= g.i);\n if (g.C >= b) b = 1;\n else if ((h.ic || Aa(), h.ic)) {\n var h = g.V,\n r = g.Ba,\n q = g.c,\n v = g.i,\n t = 1,\n k = g.$ / q,\n l = g.$ % q,\n m = g.m,\n n = g.s,\n p = g.$,\n u = q * v,\n w = q * b,\n y = n.wc,\n A = p < w ? ha(n, l, k) : null;\n x(p <= u);\n x(b <= v);\n x(yc(n));\n c: for (;;) {\n for (; !m.h && p < w; ) {\n l & y || (A = ha(n, l, k));\n x(null != A);\n Sa(m);\n v = ua(A.G[0], A.H[0], m);\n if (256 > v)\n (h[r + p] = v),\n ++p,\n ++l,\n l >= q && ((l = 0), ++k, k <= b && !(k % 16) && Ib(g, k));\n else if (280 > v) {\n var v = ib(v - 256, m);\n var E = ua(A.G[4], A.H[4], m);\n Sa(m);\n E = ib(E, m);\n E = nc(q, E);\n if (p >= E && u - p >= v) {\n var B;\n for (B = 0; B < v; ++B) h[r + p + B] = h[r + p + B - E];\n } else {\n t = 0;\n break c;\n }\n p += v;\n for (l += v; l >= q; )\n (l -= q), ++k, k <= b && !(k % 16) && Ib(g, k);\n p < w && l & y && (A = ha(n, l, k));\n } else {\n t = 0;\n break c;\n }\n x(m.h == db(m));\n }\n Ib(g, k > b ? b : k);\n break c;\n }\n !t || (m.h && p < u) ? ((t = 0), (g.a = m.h ? 5 : 3)) : (g.$ = p);\n b = t;\n } else b = Jb(g, g.V, g.Ba, g.c, g.i, b, se);\n if (!b) {\n d = 0;\n break a;\n }\n }\n c + d >= f && (a.Cc = 1);\n d = 1;\n }\n if (!d) return null;\n if (\n a.Cc &&\n ((d = a.ga), null != d && (d.mc = null), (a.ga = null), 0 < a.Ga)\n )\n return alert(\"todo:WebPDequantizeLevels\"), null;\n }\n return a.nb + c * e;\n }\n function If(a, b, c, d, e, f) {\n for (; 0 < e--; ) {\n var g = a,\n h = b + (c ? 1 : 0),\n k = a,\n l = b + (c ? 0 : 3),\n m;\n for (m = 0; m < d; ++m) {\n var n = k[l + 4 * m];\n 255 != n &&\n ((n *= 32897),\n (g[h + 4 * m + 0] = (g[h + 4 * m + 0] * n) >> 23),\n (g[h + 4 * m + 1] = (g[h + 4 * m + 1] * n) >> 23),\n (g[h + 4 * m + 2] = (g[h + 4 * m + 2] * n) >> 23));\n }\n b += f;\n }\n }\n function Jf(a, b, c, d, e) {\n for (; 0 < d--; ) {\n var f;\n for (f = 0; f < c; ++f) {\n var g = a[b + 2 * f + 0],\n h = a[b + 2 * f + 1],\n k = h & 15,\n l = 4369 * k,\n h = (((h & 240) | (h >> 4)) * l) >> 16;\n a[b + 2 * f + 0] =\n (((((g & 240) | (g >> 4)) * l) >> 16) & 240) |\n ((((((g & 15) | (g << 4)) * l) >> 16) >> 4) & 15);\n a[b + 2 * f + 1] = (h & 240) | k;\n }\n b += e;\n }\n }\n function Kf(a, b, c, d, e, f, g, h) {\n var k = 255,\n l,\n m;\n for (m = 0; m < e; ++m) {\n for (l = 0; l < d; ++l) {\n var n = a[b + l];\n f[g + 4 * l] = n;\n k &= n;\n }\n b += c;\n g += h;\n }\n return 255 != k;\n }\n function Lf(a, b, c, d, e) {\n var f;\n for (f = 0; f < e; ++f) c[d + f] = a[b + f] >> 8;\n }\n function Aa() {\n za = If;\n vc = Jf;\n fc = Kf;\n Fc = Lf;\n }\n function va(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n, r, q, t, v, p, u, w, y) {\n var d,\n E = (y - 1) >> 1;\n var B = h[k + 0] | (l[m + 0] << 16);\n var C = n[r + 0] | (q[t + 0] << 16);\n x(null != a);\n var z = (3 * B + C + 131074) >> 2;\n b(a[e + 0], z & 255, z >> 16, v, p);\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + 0], z & 255, z >> 16, u, w));\n for (d = 1; d <= E; ++d) {\n var D = h[k + d] | (l[m + d] << 16);\n var G = n[r + d] | (q[t + d] << 16);\n var F = B + D + C + G + 524296;\n var H = (F + 2 * (D + C)) >> 3;\n F = (F + 2 * (B + G)) >> 3;\n z = (H + B) >> 1;\n B = (F + D) >> 1;\n b(a[e + 2 * d - 1], z & 255, z >> 16, v, p + (2 * d - 1) * c);\n b(a[e + 2 * d - 0], B & 255, B >> 16, v, p + (2 * d - 0) * c);\n null != f &&\n ((z = (F + C) >> 1),\n (B = (H + G) >> 1),\n b(f[g + 2 * d - 1], z & 255, z >> 16, u, w + (2 * d - 1) * c),\n b(f[g + 2 * d + 0], B & 255, B >> 16, u, w + (2 * d + 0) * c));\n B = D;\n C = G;\n }\n y & 1 ||\n ((z = (3 * B + C + 131074) >> 2),\n b(a[e + y - 1], z & 255, z >> 16, v, p + (y - 1) * c),\n null != f &&\n ((z = (3 * C + B + 131074) >> 2),\n b(f[g + y - 1], z & 255, z >> 16, u, w + (y - 1) * c)));\n };\n }\n function ic() {\n P[Ca] = Mf;\n P[Ua] = nd;\n P[tc] = Nf;\n P[Va] = od;\n P[ya] = pd;\n P[Db] = qd;\n P[wc] = Of;\n P[zb] = nd;\n P[Ab] = od;\n P[Ja] = pd;\n P[Bb] = qd;\n }\n function Sb(a) {\n return a & ~Pf ? (0 > a ? 0 : 255) : a >> rd;\n }\n function bb(a, b) {\n return Sb(((19077 * a) >> 8) + ((26149 * b) >> 8) - 14234);\n }\n function nb(a, b, c) {\n return Sb(\n ((19077 * a) >> 8) - ((6419 * b) >> 8) - ((13320 * c) >> 8) + 8708\n );\n }\n function Pa(a, b) {\n return Sb(((19077 * a) >> 8) + ((33050 * b) >> 8) - 17685);\n }\n function Ga(a, b, c, d, e) {\n d[e + 0] = bb(a, c);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = Pa(a, b);\n }\n function Tb(a, b, c, d, e) {\n d[e + 0] = Pa(a, b);\n d[e + 1] = nb(a, b, c);\n d[e + 2] = bb(a, c);\n }\n function sd(a, b, c, d, e) {\n var f = nb(a, b, c);\n b = ((f << 3) & 224) | (Pa(a, b) >> 3);\n d[e + 0] = (bb(a, c) & 248) | (f >> 5);\n d[e + 1] = b;\n }\n function td(a, b, c, d, e) {\n var f = (Pa(a, b) & 240) | 15;\n d[e + 0] = (bb(a, c) & 240) | (nb(a, b, c) >> 4);\n d[e + 1] = f;\n }\n function ud(a, b, c, d, e) {\n d[e + 0] = 255;\n Ga(a, b, c, d, e + 1);\n }\n function vd(a, b, c, d, e) {\n Tb(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function wd(a, b, c, d, e) {\n Ga(a, b, c, d, e);\n d[e + 3] = 255;\n }\n function ga(a, b) {\n return 0 > a ? 0 : a > b ? b : a;\n }\n function la(a, b, c) {\n self[a] = function(a, e, f, g, h, k, l, m, n) {\n for (var d = m + (n & -2) * c; m != d; )\n b(a[e + 0], f[g + 0], h[k + 0], l, m),\n b(a[e + 1], f[g + 0], h[k + 0], l, m + c),\n (e += 2),\n ++g,\n ++k,\n (m += 2 * c);\n n & 1 && b(a[e + 0], f[g + 0], h[k + 0], l, m);\n };\n }\n function xd(a, b, c) {\n return 0 == c ? (0 == a ? (0 == b ? 6 : 5) : 0 == b ? 4 : 0) : c;\n }\n function yd(a, b, c, d, e) {\n switch (a >>> 30) {\n case 3:\n Za(b, c, d, e, 0);\n break;\n case 2:\n fd(b, c, d, e);\n break;\n case 1:\n pa(b, c, d, e);\n }\n }\n function Oc(a, b) {\n var c,\n d,\n e = b.M,\n f = b.Nb,\n g = a.oc,\n h = a.pc + 40,\n k = a.oc,\n l = a.pc + 584,\n m = a.oc,\n n = a.pc + 600;\n for (c = 0; 16 > c; ++c) g[h + 32 * c - 1] = 129;\n for (c = 0; 8 > c; ++c)\n (k[l + 32 * c - 1] = 129), (m[n + 32 * c - 1] = 129);\n 0 < e\n ? (g[h - 1 - 32] = k[l - 1 - 32] = m[n - 1 - 32] = 129)\n : (M(g, h - 32 - 1, 127, 21),\n M(k, l - 32 - 1, 127, 9),\n M(m, n - 32 - 1, 127, 9));\n for (d = 0; d < a.za; ++d) {\n var r = b.ya[b.aa + d];\n if (0 < d) {\n for (c = -1; 16 > c; ++c) I(g, h + 32 * c - 4, g, h + 32 * c + 12, 4);\n for (c = -1; 8 > c; ++c)\n I(k, l + 32 * c - 4, k, l + 32 * c + 4, 4),\n I(m, n + 32 * c - 4, m, n + 32 * c + 4, 4);\n }\n var q = a.Gd,\n t = a.Hd + d,\n v = r.ad,\n p = r.Hc;\n 0 < e &&\n (I(g, h - 32, q[t].y, 0, 16),\n I(k, l - 32, q[t].f, 0, 8),\n I(m, n - 32, q[t].ea, 0, 8));\n if (r.Za) {\n var u = g;\n var w = h - 32 + 16;\n 0 < e &&\n (d >= a.za - 1\n ? M(u, w, q[t].y[15], 4)\n : I(u, w, q[t + 1].y, 0, 4));\n for (c = 0; 4 > c; c++)\n u[w + 128 + c] = u[w + 256 + c] = u[w + 384 + c] = u[w + 0 + c];\n for (c = 0; 16 > c; ++c, p <<= 2)\n (u = g), (w = h + zd[c]), W[r.Ob[c]](u, w), yd(p, v, 16 * +c, u, w);\n } else if (((u = xd(d, e, r.Ob[0])), Y[u](g, h), 0 != p))\n for (c = 0; 16 > c; ++c, p <<= 2) yd(p, v, 16 * +c, g, h + zd[c]);\n c = r.Gc;\n u = xd(d, e, r.Dd);\n ka[u](k, l);\n ka[u](m, n);\n r = c >> 0;\n p = v;\n u = k;\n w = l;\n r & 255 && (r & 170 ? Nb(p, 256, u, w) : Ob(p, 256, u, w));\n c >>= 8;\n r = m;\n p = n;\n c & 255 && (c & 170 ? Nb(v, 320, r, p) : Ob(v, 320, r, p));\n e < a.Ub - 1 &&\n (I(q[t].y, 0, g, h + 480, 16),\n I(q[t].f, 0, k, l + 224, 8),\n I(q[t].ea, 0, m, n + 224, 8));\n c = 8 * f * a.B;\n q = a.sa;\n t = a.ta + 16 * d + 16 * f * a.R;\n v = a.qa;\n r = a.ra + 8 * d + c;\n p = a.Ha;\n u = a.Ia + 8 * d + c;\n for (c = 0; 16 > c; ++c) I(q, t + c * a.R, g, h + 32 * c, 16);\n for (c = 0; 8 > c; ++c)\n I(v, r + c * a.B, k, l + 32 * c, 8),\n I(p, u + c * a.B, m, n + 32 * c, 8);\n }\n }\n function Ad(a, b, c, d, e, f, g, h, k) {\n var l = [0],\n m = [0],\n n = 0,\n r = null != k ? k.kd : 0,\n q = null != k ? k : new md();\n if (null == a || 12 > c) return 7;\n q.data = a;\n q.w = b;\n q.ha = c;\n b = [b];\n c = [c];\n q.gb = [q.gb];\n a: {\n var t = b;\n var v = c;\n var p = q.gb;\n x(null != a);\n x(null != v);\n x(null != p);\n p[0] = 0;\n if (12 <= v[0] && !fa(a, t[0], \"RIFF\")) {\n if (fa(a, t[0] + 8, \"WEBP\")) {\n p = 3;\n break a;\n }\n var u = Ha(a, t[0] + 4);\n if (12 > u || 4294967286 < u) {\n p = 3;\n break a;\n }\n if (r && u > v[0] - 8) {\n p = 7;\n break a;\n }\n p[0] = u;\n t[0] += 12;\n v[0] -= 12;\n }\n p = 0;\n }\n if (0 != p) return p;\n u = 0 < q.gb[0];\n for (c = c[0]; ; ) {\n t = [0];\n n = [n];\n a: {\n var w = a;\n v = b;\n p = c;\n var y = n,\n A = l,\n z = m,\n B = t;\n y[0] = 0;\n if (8 > p[0]) p = 7;\n else {\n if (!fa(w, v[0], \"VP8X\")) {\n if (10 != Ha(w, v[0] + 4)) {\n p = 3;\n break a;\n }\n if (18 > p[0]) {\n p = 7;\n break a;\n }\n var C = Ha(w, v[0] + 8);\n var D = 1 + Yb(w, v[0] + 12);\n w = 1 + Yb(w, v[0] + 15);\n if (2147483648 <= D * w) {\n p = 3;\n break a;\n }\n null != B && (B[0] = C);\n null != A && (A[0] = D);\n null != z && (z[0] = w);\n v[0] += 18;\n p[0] -= 18;\n y[0] = 1;\n }\n p = 0;\n }\n }\n n = n[0];\n t = t[0];\n if (0 != p) return p;\n v = !!(t & 2);\n if (!u && n) return 3;\n null != f && (f[0] = !!(t & 16));\n null != g && (g[0] = v);\n null != h && (h[0] = 0);\n g = l[0];\n t = m[0];\n if (n && v && null == k) {\n p = 0;\n break;\n }\n if (4 > c) {\n p = 7;\n break;\n }\n if ((u && n) || (!u && !n && !fa(a, b[0], \"ALPH\"))) {\n c = [c];\n q.na = [q.na];\n q.P = [q.P];\n q.Sa = [q.Sa];\n a: {\n C = a;\n p = b;\n u = c;\n var y = q.gb,\n A = q.na,\n z = q.P,\n B = q.Sa;\n D = 22;\n x(null != C);\n x(null != u);\n w = p[0];\n var F = u[0];\n x(null != A);\n x(null != B);\n A[0] = null;\n z[0] = null;\n for (B[0] = 0; ; ) {\n p[0] = w;\n u[0] = F;\n if (8 > F) {\n p = 7;\n break a;\n }\n var G = Ha(C, w + 4);\n if (4294967286 < G) {\n p = 3;\n break a;\n }\n var H = (8 + G + 1) & -2;\n D += H;\n if (0 < y && D > y) {\n p = 3;\n break a;\n }\n if (!fa(C, w, \"VP8 \") || !fa(C, w, \"VP8L\")) {\n p = 0;\n break a;\n }\n if (F[0] < H) {\n p = 7;\n break a;\n }\n fa(C, w, \"ALPH\") || ((A[0] = C), (z[0] = w + 8), (B[0] = G));\n w += H;\n F -= H;\n }\n }\n c = c[0];\n q.na = q.na[0];\n q.P = q.P[0];\n q.Sa = q.Sa[0];\n if (0 != p) break;\n }\n c = [c];\n q.Ja = [q.Ja];\n q.xa = [q.xa];\n a: if (\n ((y = a),\n (p = b),\n (u = c),\n (A = q.gb[0]),\n (z = q.Ja),\n (B = q.xa),\n (C = p[0]),\n (w = !fa(y, C, \"VP8 \")),\n (D = !fa(y, C, \"VP8L\")),\n x(null != y),\n x(null != u),\n x(null != z),\n x(null != B),\n 8 > u[0])\n )\n p = 7;\n else {\n if (w || D) {\n y = Ha(y, C + 4);\n if (12 <= A && y > A - 12) {\n p = 3;\n break a;\n }\n if (r && y > u[0] - 8) {\n p = 7;\n break a;\n }\n z[0] = y;\n p[0] += 8;\n u[0] -= 8;\n B[0] = D;\n } else\n (B[0] = 5 <= u[0] && 47 == y[C + 0] && !(y[C + 4] >> 5)),\n (z[0] = u[0]);\n p = 0;\n }\n c = c[0];\n q.Ja = q.Ja[0];\n q.xa = q.xa[0];\n b = b[0];\n if (0 != p) break;\n if (4294967286 < q.Ja) return 3;\n null == h || v || (h[0] = q.xa ? 2 : 1);\n g = [g];\n t = [t];\n if (q.xa) {\n if (5 > c) {\n p = 7;\n break;\n }\n h = g;\n r = t;\n v = f;\n null == a || 5 > c\n ? (a = 0)\n : 5 <= c && 47 == a[b + 0] && !(a[b + 4] >> 5)\n ? ((u = [0]),\n (y = [0]),\n (A = [0]),\n (z = new Ra()),\n cb(z, a, b, c),\n mc(z, u, y, A)\n ? (null != h && (h[0] = u[0]),\n null != r && (r[0] = y[0]),\n null != v && (v[0] = A[0]),\n (a = 1))\n : (a = 0))\n : (a = 0);\n } else {\n if (10 > c) {\n p = 7;\n break;\n }\n h = t;\n null == a || 10 > c || !Jc(a, b + 3, c - 3)\n ? (a = 0)\n : ((r = a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16)),\n (v = ((a[b + 7] << 8) | a[b + 6]) & 16383),\n (a = ((a[b + 9] << 8) | a[b + 8]) & 16383),\n r & 1 ||\n 3 < ((r >> 1) & 7) ||\n !((r >> 4) & 1) ||\n r >> 5 >= q.Ja ||\n !v ||\n !a\n ? (a = 0)\n : (g && (g[0] = v), h && (h[0] = a), (a = 1)));\n }\n if (!a) return 3;\n g = g[0];\n t = t[0];\n if (n && (l[0] != g || m[0] != t)) return 3;\n null != k &&\n ((k[0] = q),\n (k.offset = b - k.w),\n x(4294967286 > b - k.w),\n x(k.offset == k.ha - c));\n break;\n }\n return 0 == p || (7 == p && n && null == k)\n ? (null != f && (f[0] |= null != q.na && 0 < q.na.length),\n null != d && (d[0] = g),\n null != e && (e[0] = t),\n 0)\n : p;\n }\n function hc(a, b, c) {\n var d = b.width,\n e = b.height,\n f = 0,\n g = 0,\n h = d,\n k = e;\n b.Da = null != a && 0 < a.Da;\n if (\n b.Da &&\n ((h = a.cd),\n (k = a.bd),\n (f = a.v),\n (g = a.j),\n 11 > c || ((f &= -2), (g &= -2)),\n 0 > f || 0 > g || 0 >= h || 0 >= k || f + h > d || g + k > e)\n )\n return 0;\n b.v = f;\n b.j = g;\n b.va = f + h;\n b.o = g + k;\n b.U = h;\n b.T = k;\n b.da = null != a && 0 < a.da;\n if (b.da) {\n c = [a.ib];\n f = [a.hb];\n if (!bc(h, k, c, f)) return 0;\n b.ib = c[0];\n b.hb = f[0];\n }\n b.ob = null != a && a.ob;\n b.Kb = null == a || !a.Sd;\n b.da && ((b.ob = b.ib < (3 * d) / 4 && b.hb < (3 * e) / 4), (b.Kb = 0));\n return 1;\n }\n function Bd(a) {\n if (null == a) return 2;\n if (11 > a.S) {\n var b = a.f.RGBA;\n b.fb += (a.height - 1) * b.A;\n b.A = -b.A;\n } else\n (b = a.f.kb),\n (a = a.height),\n (b.O += (a - 1) * b.fa),\n (b.fa = -b.fa),\n (b.N += ((a - 1) >> 1) * b.Ab),\n (b.Ab = -b.Ab),\n (b.W += ((a - 1) >> 1) * b.Db),\n (b.Db = -b.Db),\n null != b.F && ((b.J += (a - 1) * b.lb), (b.lb = -b.lb));\n return 0;\n }\n function Cd(a, b, c, d) {\n if (null == d || 0 >= a || 0 >= b) return 2;\n if (null != c) {\n if (c.Da) {\n var e = c.cd,\n f = c.bd,\n g = c.v & -2,\n h = c.j & -2;\n if (0 > g || 0 > h || 0 >= e || 0 >= f || g + e > a || h + f > b)\n return 2;\n a = e;\n b = f;\n }\n if (c.da) {\n e = [c.ib];\n f = [c.hb];\n if (!bc(a, b, e, f)) return 2;\n a = e[0];\n b = f[0];\n }\n }\n d.width = a;\n d.height = b;\n a: {\n var k = d.width;\n var l = d.height;\n a = d.S;\n if (0 >= k || 0 >= l || !(a >= Ca && 13 > a)) a = 2;\n else {\n if (0 >= d.Rd && null == d.sd) {\n var g = (f = e = b = 0),\n h = k * Dd[a],\n m = h * l;\n 11 > a ||\n ((b = (k + 1) / 2),\n (f = ((l + 1) / 2) * b),\n 12 == a && ((e = k), (g = e * l)));\n l = V(m + 2 * f + g);\n if (null == l) {\n a = 1;\n break a;\n }\n d.sd = l;\n 11 > a\n ? ((k = d.f.RGBA),\n (k.eb = l),\n (k.fb = 0),\n (k.A = h),\n (k.size = m))\n : ((k = d.f.kb),\n (k.y = l),\n (k.O = 0),\n (k.fa = h),\n (k.Fd = m),\n (k.f = l),\n (k.N = 0 + m),\n (k.Ab = b),\n (k.Cd = f),\n (k.ea = l),\n (k.W = 0 + m + f),\n (k.Db = b),\n (k.Ed = f),\n 12 == a && ((k.F = l), (k.J = 0 + m + 2 * f)),\n (k.Tc = g),\n (k.lb = e));\n }\n b = 1;\n e = d.S;\n f = d.width;\n g = d.height;\n if (e >= Ca && 13 > e)\n if (11 > e)\n (a = d.f.RGBA),\n (h = Math.abs(a.A)),\n (b &= h * (g - 1) + f <= a.size),\n (b &= h >= f * Dd[e]),\n (b &= null != a.eb);\n else {\n a = d.f.kb;\n h = (f + 1) / 2;\n m = (g + 1) / 2;\n k = Math.abs(a.fa);\n var l = Math.abs(a.Ab),\n n = Math.abs(a.Db),\n r = Math.abs(a.lb),\n q = r * (g - 1) + f;\n b &= k * (g - 1) + f <= a.Fd;\n b &= l * (m - 1) + h <= a.Cd;\n b &= n * (m - 1) + h <= a.Ed;\n b = b & (k >= f) & (l >= h) & (n >= h);\n b &= null != a.y;\n b &= null != a.f;\n b &= null != a.ea;\n 12 == e && ((b &= r >= f), (b &= q <= a.Tc), (b &= null != a.F));\n }\n else b = 0;\n a = b ? 0 : 2;\n }\n }\n if (0 != a) return a;\n null != c && c.fd && (a = Bd(d));\n return a;\n }\n var xb = 64,\n Hd = [\n 0,\n 1,\n 3,\n 7,\n 15,\n 31,\n 63,\n 127,\n 255,\n 511,\n 1023,\n 2047,\n 4095,\n 8191,\n 16383,\n 32767,\n 65535,\n 131071,\n 262143,\n 524287,\n 1048575,\n 2097151,\n 4194303,\n 8388607,\n 16777215\n ],\n Gd = 24,\n ob = 32,\n Xb = 8,\n Id = [\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7\n ];\n X(\"Predictor0\", \"PredictorAdd0\");\n self.Predictor0 = function() {\n return 4278190080;\n };\n self.Predictor1 = function(a) {\n return a;\n };\n self.Predictor2 = function(a, b, c) {\n return b[c + 0];\n };\n self.Predictor3 = function(a, b, c) {\n return b[c + 1];\n };\n self.Predictor4 = function(a, b, c) {\n return b[c - 1];\n };\n self.Predictor5 = function(a, b, c) {\n return aa(aa(a, b[c + 1]), b[c + 0]);\n };\n self.Predictor6 = function(a, b, c) {\n return aa(a, b[c - 1]);\n };\n self.Predictor7 = function(a, b, c) {\n return aa(a, b[c + 0]);\n };\n self.Predictor8 = function(a, b, c) {\n return aa(b[c - 1], b[c + 0]);\n };\n self.Predictor9 = function(a, b, c) {\n return aa(b[c + 0], b[c + 1]);\n };\n self.Predictor10 = function(a, b, c) {\n return aa(aa(a, b[c - 1]), aa(b[c + 0], b[c + 1]));\n };\n self.Predictor11 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return 0 >=\n Ia((d >> 24) & 255, (a >> 24) & 255, (b >> 24) & 255) +\n Ia((d >> 16) & 255, (a >> 16) & 255, (b >> 16) & 255) +\n Ia((d >> 8) & 255, (a >> 8) & 255, (b >> 8) & 255) +\n Ia(d & 255, a & 255, b & 255)\n ? d\n : a;\n };\n self.Predictor12 = function(a, b, c) {\n var d = b[c + 0];\n b = b[c - 1];\n return (\n ((sa(((a >> 24) & 255) + ((d >> 24) & 255) - ((b >> 24) & 255)) << 24) |\n (sa(((a >> 16) & 255) + ((d >> 16) & 255) - ((b >> 16) & 255)) <<\n 16) |\n (sa(((a >> 8) & 255) + ((d >> 8) & 255) - ((b >> 8) & 255)) << 8) |\n sa((a & 255) + (d & 255) - (b & 255))) >>>\n 0\n );\n };\n self.Predictor13 = function(a, b, c) {\n var d = b[c - 1];\n a = aa(a, b[c + 0]);\n return (\n ((eb((a >> 24) & 255, (d >> 24) & 255) << 24) |\n (eb((a >> 16) & 255, (d >> 16) & 255) << 16) |\n (eb((a >> 8) & 255, (d >> 8) & 255) << 8) |\n eb((a >> 0) & 255, (d >> 0) & 255)) >>>\n 0\n );\n };\n var ee = self.PredictorAdd0;\n self.PredictorAdd1 = cc;\n X(\"Predictor2\", \"PredictorAdd2\");\n X(\"Predictor3\", \"PredictorAdd3\");\n X(\"Predictor4\", \"PredictorAdd4\");\n X(\"Predictor5\", \"PredictorAdd5\");\n X(\"Predictor6\", \"PredictorAdd6\");\n X(\"Predictor7\", \"PredictorAdd7\");\n X(\"Predictor8\", \"PredictorAdd8\");\n X(\"Predictor9\", \"PredictorAdd9\");\n X(\"Predictor10\", \"PredictorAdd10\");\n X(\"Predictor11\", \"PredictorAdd11\");\n X(\"Predictor12\", \"PredictorAdd12\");\n X(\"Predictor13\", \"PredictorAdd13\");\n var fe = self.PredictorAdd2;\n ec(\n \"ColorIndexInverseTransform\",\n \"MapARGB\",\n \"32b\",\n function(a) {\n return (a >> 8) & 255;\n },\n function(a) {\n return a;\n }\n );\n ec(\n \"VP8LColorIndexInverseTransformAlpha\",\n \"MapAlpha\",\n \"8b\",\n function(a) {\n return a;\n },\n function(a) {\n return (a >> 8) & 255;\n }\n );\n var rc = self.ColorIndexInverseTransform,\n ke = self.MapARGB,\n he = self.VP8LColorIndexInverseTransformAlpha,\n le = self.MapAlpha,\n pc,\n qc = (self.VP8LPredictorsAdd = []);\n qc.length = 16;\n (self.VP8LPredictors = []).length = 16;\n (self.VP8LPredictorsAdd_C = []).length = 16;\n (self.VP8LPredictors_C = []).length = 16;\n var Fb,\n sc,\n Gb,\n Hb,\n xc,\n uc,\n bd = V(511),\n cd = V(2041),\n dd = V(225),\n ed = V(767),\n ad = 0,\n Qb = cd,\n mb = dd,\n R = ed,\n U = bd,\n Ca = 0,\n Ua = 1,\n tc = 2,\n Va = 3,\n ya = 4,\n Db = 5,\n wc = 6,\n zb = 7,\n Ab = 8,\n Ja = 9,\n Bb = 10,\n pe = [2, 3, 7],\n oe = [3, 3, 11],\n Dc = [280, 256, 256, 256, 40],\n qe = [0, 1, 1, 1, 0],\n ne = [17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n de = [\n 24,\n 7,\n 23,\n 25,\n 40,\n 6,\n 39,\n 41,\n 22,\n 26,\n 38,\n 42,\n 56,\n 5,\n 55,\n 57,\n 21,\n 27,\n 54,\n 58,\n 37,\n 43,\n 72,\n 4,\n 71,\n 73,\n 20,\n 28,\n 53,\n 59,\n 70,\n 74,\n 36,\n 44,\n 88,\n 69,\n 75,\n 52,\n 60,\n 3,\n 87,\n 89,\n 19,\n 29,\n 86,\n 90,\n 35,\n 45,\n 68,\n 76,\n 85,\n 91,\n 51,\n 61,\n 104,\n 2,\n 103,\n 105,\n 18,\n 30,\n 102,\n 106,\n 34,\n 46,\n 84,\n 92,\n 67,\n 77,\n 101,\n 107,\n 50,\n 62,\n 120,\n 1,\n 119,\n 121,\n 83,\n 93,\n 17,\n 31,\n 100,\n 108,\n 66,\n 78,\n 118,\n 122,\n 33,\n 47,\n 117,\n 123,\n 49,\n 63,\n 99,\n 109,\n 82,\n 94,\n 0,\n 116,\n 124,\n 65,\n 79,\n 16,\n 32,\n 98,\n 110,\n 48,\n 115,\n 125,\n 81,\n 95,\n 64,\n 114,\n 126,\n 97,\n 111,\n 80,\n 113,\n 127,\n 96,\n 112\n ],\n me = [\n 2954,\n 2956,\n 2958,\n 2962,\n 2970,\n 2986,\n 3018,\n 3082,\n 3212,\n 3468,\n 3980,\n 5004\n ],\n ie = 8,\n Lb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 17,\n 18,\n 19,\n 20,\n 20,\n 21,\n 21,\n 22,\n 22,\n 23,\n 23,\n 24,\n 25,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n 62,\n 63,\n 64,\n 65,\n 66,\n 67,\n 68,\n 69,\n 70,\n 71,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 79,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 91,\n 93,\n 95,\n 96,\n 98,\n 100,\n 101,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 118,\n 122,\n 124,\n 126,\n 128,\n 130,\n 132,\n 134,\n 136,\n 138,\n 140,\n 143,\n 145,\n 148,\n 151,\n 154,\n 157\n ],\n Mb = [\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 60,\n 62,\n 64,\n 66,\n 68,\n 70,\n 72,\n 74,\n 76,\n 78,\n 80,\n 82,\n 84,\n 86,\n 88,\n 90,\n 92,\n 94,\n 96,\n 98,\n 100,\n 102,\n 104,\n 106,\n 108,\n 110,\n 112,\n 114,\n 116,\n 119,\n 122,\n 125,\n 128,\n 131,\n 134,\n 137,\n 140,\n 143,\n 146,\n 149,\n 152,\n 155,\n 158,\n 161,\n 164,\n 167,\n 170,\n 173,\n 177,\n 181,\n 185,\n 189,\n 193,\n 197,\n 201,\n 205,\n 209,\n 213,\n 217,\n 221,\n 225,\n 229,\n 234,\n 239,\n 245,\n 249,\n 254,\n 259,\n 264,\n 269,\n 274,\n 279,\n 284\n ],\n oa = null,\n He = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0]\n ],\n Ie = [0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15],\n Mc = [-0, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9],\n Fe = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128]\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128]\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]\n ]\n ]\n ],\n Ke = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36]\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111, 32, 75, 80],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22]\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22, 64, 171, 36, 225, 114],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51]\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82]\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73, 154],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47]\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98]\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26]\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160, 1],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40]\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128]\n ],\n [\n [190, 80, 35, 99, 180, 80, 126, 54, 45],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24]\n ]\n ],\n Ee = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]\n ]\n ]\n ],\n Ge = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0],\n Nc,\n Y = [],\n W = [],\n ka = [],\n Za,\n fd,\n Nb,\n pa,\n Ob,\n Xc,\n Tc,\n Yc,\n Uc,\n Zc,\n Vc,\n $c,\n Wc,\n Rc,\n Pc,\n Sc,\n Qc,\n re = 1,\n Cc = 2,\n ia = [],\n za,\n vc,\n fc,\n Fc,\n P = [];\n va(\"UpsampleRgbLinePair\", Ga, 3);\n va(\"UpsampleBgrLinePair\", Tb, 3);\n va(\"UpsampleRgbaLinePair\", wd, 4);\n va(\"UpsampleBgraLinePair\", vd, 4);\n va(\"UpsampleArgbLinePair\", ud, 4);\n va(\"UpsampleRgba4444LinePair\", td, 2);\n va(\"UpsampleRgb565LinePair\", sd, 2);\n var Mf = self.UpsampleRgbLinePair,\n Nf = self.UpsampleBgrLinePair,\n nd = self.UpsampleRgbaLinePair,\n od = self.UpsampleBgraLinePair,\n pd = self.UpsampleArgbLinePair,\n qd = self.UpsampleRgba4444LinePair,\n Of = self.UpsampleRgb565LinePair,\n Wa = 16,\n Ba = 1 << (Wa - 1),\n ta = -227,\n Eb = 482,\n rd = 6,\n Pf = (256 << rd) - 1,\n jc = 0,\n Yd = V(256),\n ae = V(256),\n $d = V(256),\n Zd = V(256),\n be = V(Eb - ta),\n ce = V(Eb - ta);\n la(\"YuvToRgbRow\", Ga, 3);\n la(\"YuvToBgrRow\", Tb, 3);\n la(\"YuvToRgbaRow\", wd, 4);\n la(\"YuvToBgraRow\", vd, 4);\n la(\"YuvToArgbRow\", ud, 4);\n la(\"YuvToRgba4444Row\", td, 2);\n la(\"YuvToRgb565Row\", sd, 2);\n var zd = [\n 0,\n 4,\n 8,\n 12,\n 128,\n 132,\n 136,\n 140,\n 256,\n 260,\n 264,\n 268,\n 384,\n 388,\n 392,\n 396\n ],\n Ya = [0, 2, 8],\n Qf = [8, 7, 6, 4, 4, 2, 2, 2, 1, 1, 1, 1],\n Ne = 1;\n this.WebPDecodeRGBA = function(a, b, c, d, e) {\n var f = Ua;\n var g = new Cf(),\n h = new Cb();\n g.ba = h;\n h.S = f;\n h.width = [h.width];\n h.height = [h.height];\n var k = h.width;\n var l = h.height,\n m = new Td();\n if (null == m || null == a) var n = 2;\n else\n x(null != m),\n (n = Ad(a, b, c, m.width, m.height, m.Pd, m.Qd, m.format, null));\n 0 != n\n ? (k = 0)\n : (null != k && (k[0] = m.width[0]),\n null != l && (l[0] = m.height[0]),\n (k = 1));\n if (k) {\n h.width = h.width[0];\n h.height = h.height[0];\n null != d && (d[0] = h.width);\n null != e && (e[0] = h.height);\n b: {\n d = new Oa();\n e = new md();\n e.data = a;\n e.w = b;\n e.ha = c;\n e.kd = 1;\n b = [0];\n x(null != e);\n a = Ad(e.data, e.w, e.ha, null, null, null, b, null, e);\n (0 == a || 7 == a) && b[0] && (a = 4);\n b = a;\n if (0 == b) {\n x(null != g);\n d.data = e.data;\n d.w = e.w + e.offset;\n d.ha = e.ha - e.offset;\n d.put = kc;\n d.ac = gc;\n d.bc = lc;\n d.ma = g;\n if (e.xa) {\n a = Bc();\n if (null == a) {\n g = 1;\n break b;\n }\n if (te(a, d)) {\n b = Cd(d.width, d.height, g.Oa, g.ba);\n if ((d = 0 == b)) {\n c: {\n d = a;\n d: for (;;) {\n if (null == d) {\n d = 0;\n break c;\n }\n x(null != d.s.yc);\n x(null != d.s.Ya);\n x(0 < d.s.Wb);\n c = d.l;\n x(null != c);\n e = c.ma;\n x(null != e);\n if (0 != d.xb) {\n d.ca = e.ba;\n d.tb = e.tb;\n x(null != d.ca);\n if (!hc(e.Oa, c, Va)) {\n d.a = 2;\n break d;\n }\n if (!Ec(d, c.width)) break d;\n if (c.da) break d;\n (c.da || hb(d.ca.S)) && Aa();\n 11 > d.ca.S ||\n (alert(\"todo:WebPInitConvertARGBToYUV\"),\n null != d.ca.f.kb.F && Aa());\n if (\n d.Pb &&\n 0 < d.s.ua &&\n null == d.s.vb.X &&\n !Zb(d.s.vb, d.s.Wa.Xa)\n ) {\n d.a = 1;\n break d;\n }\n d.xb = 0;\n }\n if (!Jb(d, d.V, d.Ba, d.c, d.i, c.o, ge)) break d;\n e.Dc = d.Ma;\n d = 1;\n break c;\n }\n x(0 != d.a);\n d = 0;\n }\n d = !d;\n }\n d && (b = a.a);\n } else b = a.a;\n } else {\n a = new Ce();\n if (null == a) {\n g = 1;\n break b;\n }\n a.Fa = e.na;\n a.P = e.P;\n a.qc = e.Sa;\n if (Kc(a, d)) {\n if (((b = Cd(d.width, d.height, g.Oa, g.ba)), 0 == b)) {\n a.Aa = 0;\n c = g.Oa;\n e = a;\n x(null != e);\n if (null != c) {\n k = c.Md;\n k = 0 > k ? 0 : 100 < k ? 255 : (255 * k) / 100;\n if (0 < k) {\n for (l = m = 0; 4 > l; ++l)\n (n = e.pb[l]),\n 12 > n.lc &&\n (n.ia = (k * Qf[0 > n.lc ? 0 : n.lc]) >> 3),\n (m |= n.ia);\n m && (alert(\"todo:VP8InitRandom\"), (e.ia = 1));\n }\n e.Ga = c.Id;\n 100 < e.Ga ? (e.Ga = 100) : 0 > e.Ga && (e.Ga = 0);\n }\n Me(a, d) || (b = a.a);\n }\n } else b = a.a;\n }\n 0 == b && null != g.Oa && g.Oa.fd && (b = Bd(g.ba));\n }\n g = b;\n }\n f = 0 != g ? null : 11 > f ? h.f.RGBA.eb : h.f.kb.y;\n } else f = null;\n return f;\n };\n var Dd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4, 2, 1, 1];\n };\n new _WebPDecoder();\n\n /** @license\n * Copyright (c) 2017 Dominik Homberger\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n\nhttps://webpjs.appspot.com\nWebPRiffParser dominikhlbg@gmail.com\n*/\n\n function memcmp(data, data_off, str, size) {\n for (var i = 0; i < size; i++)\n if (data[data_off + i] != str.charCodeAt(i)) return true;\n return false;\n }\n\n function GetTag(data, data_off) {\n var str = \"\";\n for (var i = 0; i < 4; i++) str += String.fromCharCode(data[data_off++]);\n return str;\n }\n\n function GetLE16(data, data_off) {\n return (data[data_off + 0] << 0) | (data[data_off + 1] << 8);\n }\n\n function GetLE24(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16)) >>>\n 0\n );\n }\n\n function GetLE32(data, data_off) {\n return (\n ((data[data_off + 0] << 0) |\n (data[data_off + 1] << 8) |\n (data[data_off + 2] << 16) |\n (data[data_off + 3] << 24)) >>>\n 0\n );\n }\n\n function WebPRiffParser(src, src_off) {\n var imagearray = {};\n var i = 0;\n var alpha_chunk = false;\n var alpha_size = 0;\n var alpha_offset = 0;\n imagearray[\"frames\"] = [];\n if (memcmp(src, src_off, \"RIFF\", 4)) return;\n src_off += 4;\n var riff_size = GetLE32(src, src_off) + 8;\n src_off += 8;\n\n while (src_off < src.length) {\n var fourcc = GetTag(src, src_off);\n src_off += 4;\n\n var payload_size = GetLE32(src, src_off);\n src_off += 4;\n var payload_size_padded = payload_size + (payload_size & 1);\n\n switch (fourcc) {\n case \"VP8 \":\n case \"VP8L\":\n if (typeof imagearray[\"frames\"][i] === \"undefined\")\n imagearray[\"frames\"][i] = {};\n var obj = imagearray[\"frames\"][i];\n var height = [0];\n var width = [0];\n obj[\"src_off\"] = alpha_chunk ? alpha_offset : src_off - 8;\n obj[\"src_size\"] = alpha_size + payload_size + 8;\n //var rgba = webpdecoder.WebPDecodeRGBA(src,(alpha_chunk?alpha_offset:src_off-8),alpha_size+payload_size+8,width,height);\n //imagearray[i]={'rgba':rgba,'width':width[0],'height':height[0]};\n i++;\n if (alpha_chunk) {\n alpha_chunk = false;\n alpha_size = 0;\n alpha_offset = 0;\n }\n break;\n case \"VP8X\":\n var obj = (imagearray[\"header\"] = {});\n var feature_flags = (obj[\"feature_flags\"] = src[src_off]);\n var src_off_ = src_off + 4;\n var canvas_width = (obj[\"canvas_width\"] = 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n var canvas_height = (obj[\"canvas_height\"] =\n 1 + GetLE24(src, src_off_));\n src_off_ += 3;\n break;\n case \"ALPH\":\n alpha_chunk = true;\n alpha_size = payload_size_padded + 8;\n alpha_offset = src_off - 8;\n break;\n\n case \"ANIM\":\n var obj = imagearray[\"header\"];\n var bgcolor = (obj[\"bgcolor\"] = GetLE32(src, src_off));\n src_off_ = src_off + 4;\n\n var loop_count = (obj[\"loop_count\"] = GetLE16(src, src_off_));\n src_off_ += 2;\n break;\n case \"ANMF\":\n var offset_x = 0,\n offset_y = 0,\n width = 0,\n height = 0,\n duration = 0,\n blend = 0,\n dispose = 0,\n temp = 0;\n var obj = (imagearray[\"frames\"][i] = {});\n obj[\"offset_x\"] = offset_x = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"offset_y\"] = offset_y = 2 * GetLE24(src, src_off);\n src_off += 3;\n obj[\"width\"] = width = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"height\"] = height = 1 + GetLE24(src, src_off);\n src_off += 3;\n obj[\"duration\"] = duration = GetLE24(src, src_off);\n src_off += 3;\n temp = src[src_off++];\n obj[\"dispose\"] = dispose = temp & 1;\n obj[\"blend\"] = blend = (temp >> 1) & 1;\n break;\n default:\n }\n if (fourcc != \"ANMF\") src_off += payload_size_padded;\n }\n return imagearray;\n }\n\n var height = [0];\n var width = [0];\n var pixels = [];\n var webpdecoder = new _WebPDecoder();\n\n var response = imageData;\n var imagearray = WebPRiffParser(response, 0);\n imagearray[\"response\"] = response;\n imagearray[\"rgbaoutput\"] = true;\n imagearray[\"dataurl\"] = false;\n\n var header = imagearray[\"header\"] ? imagearray[\"header\"] : null;\n var frames = imagearray[\"frames\"] ? imagearray[\"frames\"] : null;\n\n if (header) {\n header[\"loop_counter\"] = header[\"loop_count\"];\n height = [header[\"canvas_height\"]];\n width = [header[\"canvas_width\"]];\n\n var blend = false;\n for (var f = 0; f < frames.length; f++)\n if (frames[f][\"blend\"] == 0) {\n blend = true;\n break;\n }\n }\n\n var frame = frames[0];\n var rgba = webpdecoder.WebPDecodeRGBA(\n response,\n frame[\"src_off\"],\n frame[\"src_size\"],\n width,\n height\n );\n frame[\"rgba\"] = rgba;\n frame[\"imgwidth\"] = width[0];\n frame[\"imgheight\"] = height[0];\n\n for (var i = 0; i < width[0] * height[0] * 4; i++) {\n pixels[i] = rgba[i];\n }\n\n this.width = width;\n this.height = height;\n this.data = pixels;\n return this;\n}\n\nWebPDecoder.prototype.getData = function() {\n return this.data;\n};\n\nexport { WebPDecoder };\n","/**\n * @license\n *\n * Copyright (c) 2014 James Robb, https://github.com/jamesbrobb\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { zlibSync } from \"../libs/fflate.js\";\nimport { PNG } from \"../libs/png.js\";\n\n/**\n * jsPDF PNG PlugIn\n * @name png_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /*\n * @see http://www.w3.org/TR/PNG-Chunks.html\n *\n Color Allowed Interpretation\n Type Bit Depths\n\n 0 1,2,4,8,16 Each pixel is a grayscale sample.\n\n 2 8,16 Each pixel is an R,G,B triple.\n\n 3 1,2,4,8 Each pixel is a palette index;\n a PLTE chunk must appear.\n\n 4 8,16 Each pixel is a grayscale sample,\n followed by an alpha sample.\n\n 6 8,16 Each pixel is an R,G,B triple,\n followed by an alpha sample.\n */\n\n /*\n * PNG filter method types\n *\n * @see http://www.w3.org/TR/PNG-Filters.html\n * @see http://www.libpng.org/pub/png/book/chapter09.html\n *\n * This is what the value 'Predictor' in decode params relates to\n *\n * 15 is \"optimal prediction\", which means the prediction algorithm can change from line to line.\n * In that case, you actually have to read the first byte off each line for the prediction algorthim (which should be 0-4, corresponding to PDF 10-14) and select the appropriate unprediction algorithm based on that byte.\n *\n 0 None\n 1 Sub\n 2 Up\n 3 Average\n 4 Paeth\n */\n\n var canCompress = function(value) {\n return value !== jsPDFAPI.image_compression.NONE && hasCompressionJS();\n };\n\n var hasCompressionJS = function() {\n return typeof zlibSync === \"function\";\n };\n var compressBytes = function(bytes, lineLength, colorsPerPixel, compression) {\n var level = 4;\n var filter_method = filterUp;\n\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n level = 1;\n filter_method = filterSub;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n level = 6;\n filter_method = filterAverage;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n level = 9;\n filter_method = filterPaeth;\n break;\n }\n\n bytes = applyPngFilterMethod(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n );\n var dat = zlibSync(bytes, { level: level });\n return jsPDFAPI.__addimage__.arrayBufferToBinaryString(dat);\n };\n\n var applyPngFilterMethod = function(\n bytes,\n lineLength,\n colorsPerPixel,\n filter_method\n ) {\n var lines = bytes.length / lineLength,\n result = new Uint8Array(bytes.length + lines),\n filter_methods = getFilterMethods(),\n line,\n prevLine,\n offset;\n\n for (var i = 0; i < lines; i += 1) {\n offset = i * lineLength;\n line = bytes.subarray(offset, offset + lineLength);\n\n if (filter_method) {\n result.set(filter_method(line, colorsPerPixel, prevLine), offset + i);\n } else {\n var len = filter_methods.length,\n results = [];\n\n for (var j; j < len; j += 1) {\n results[j] = filter_methods[j](line, colorsPerPixel, prevLine);\n }\n\n var ind = getIndexOfSmallestSum(results.concat());\n\n result.set(results[ind], offset + i);\n }\n\n prevLine = line;\n }\n\n return result;\n };\n\n var filterNone = function(line) {\n /*var result = new Uint8Array(line.length + 1);\n result[0] = 0;\n result.set(line, 1);*/\n\n var result = Array.apply([], line);\n result.unshift(0);\n\n return result;\n };\n\n var filterSub = function(line, colorsPerPixel) {\n var result = [],\n len = line.length,\n left;\n\n result[0] = 1;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n result[i + 1] = (line[i] - left + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterUp = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n up;\n\n result[0] = 2;\n\n for (var i = 0; i < len; i += 1) {\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] - up + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var filterAverage = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up;\n\n result[0] = 3;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n result[i + 1] = (line[i] + 0x0100 - ((left + up) >>> 1)) & 0xff;\n }\n\n return result;\n };\n\n var filterPaeth = function(line, colorsPerPixel, prevLine) {\n var result = [],\n len = line.length,\n left,\n up,\n upLeft,\n paeth;\n\n result[0] = 4;\n\n for (var i = 0; i < len; i += 1) {\n left = line[i - colorsPerPixel] || 0;\n up = (prevLine && prevLine[i]) || 0;\n upLeft = (prevLine && prevLine[i - colorsPerPixel]) || 0;\n paeth = paethPredictor(left, up, upLeft);\n result[i + 1] = (line[i] - paeth + 0x0100) & 0xff;\n }\n\n return result;\n };\n\n var paethPredictor = function(left, up, upLeft) {\n if (left === up && up === upLeft) {\n return left;\n }\n var pLeft = Math.abs(up - upLeft),\n pUp = Math.abs(left - upLeft),\n pUpLeft = Math.abs(left + up - upLeft - upLeft);\n return pLeft <= pUp && pLeft <= pUpLeft\n ? left\n : pUp <= pUpLeft\n ? up\n : upLeft;\n };\n\n var getFilterMethods = function() {\n return [filterNone, filterSub, filterUp, filterAverage, filterPaeth];\n };\n\n var getIndexOfSmallestSum = function(arrays) {\n var sum = arrays.map(function(value) {\n return value.reduce(function(pv, cv) {\n return pv + Math.abs(cv);\n }, 0);\n });\n return sum.indexOf(Math.min.apply(null, sum));\n };\n\n var getPredictorFromCompression = function(compression) {\n var predictor;\n switch (compression) {\n case jsPDFAPI.image_compression.FAST:\n predictor = 11;\n break;\n\n case jsPDFAPI.image_compression.MEDIUM:\n predictor = 13;\n break;\n\n case jsPDFAPI.image_compression.SLOW:\n predictor = 14;\n break;\n\n default:\n predictor = 12;\n break;\n }\n return predictor;\n };\n\n /**\n * @name processPNG\n * @function\n * @ignore\n */\n jsPDFAPI.processPNG = function(imageData, index, alias, compression) {\n \"use strict\";\n\n var colorSpace,\n filter = this.decode.FLATE_DECODE,\n bitsPerComponent,\n image,\n decodeParameters = \"\",\n trns,\n colors,\n pal,\n smask,\n pixels,\n len,\n alphaData,\n imgData,\n hasColors,\n pixel,\n i,\n n;\n\n if (this.__addimage__.isArrayBuffer(imageData))\n imageData = new Uint8Array(imageData);\n\n if (this.__addimage__.isArrayBufferView(imageData)) {\n image = new PNG(imageData);\n imageData = image.imgData;\n bitsPerComponent = image.bits;\n colorSpace = image.colorSpace;\n colors = image.colors;\n\n /*\n * colorType 6 - Each pixel is an R,G,B triple, followed by an alpha sample.\n *\n * colorType 4 - Each pixel is a grayscale sample, followed by an alpha sample.\n *\n * Extract alpha to create two separate images, using the alpha as a sMask\n */\n if ([4, 6].indexOf(image.colorType) !== -1) {\n /*\n * processes 8 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 8) {\n pixels =\n image.pixelBitlength == 32\n ? new Uint32Array(image.decodePixels().buffer)\n : image.pixelBitlength == 16\n ? new Uint16Array(image.decodePixels().buffer)\n : new Uint8Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(len * image.colors);\n alphaData = new Uint8Array(len);\n var pDiff = image.pixelBitlength - image.bits;\n i = 0;\n n = 0;\n var pbl;\n\n for (; i < len; i++) {\n pixel = pixels[i];\n pbl = 0;\n\n while (pbl < pDiff) {\n imgData[n++] = (pixel >>> pbl) & 0xff;\n pbl = pbl + image.bits;\n }\n\n alphaData[i] = (pixel >>> pbl) & 0xff;\n }\n }\n\n /*\n * processes 16 bit RGBA and grayscale + alpha images\n */\n if (image.bits === 16) {\n pixels = new Uint32Array(image.decodePixels().buffer);\n len = pixels.length;\n imgData = new Uint8Array(\n len * (32 / image.pixelBitlength) * image.colors\n );\n alphaData = new Uint8Array(len * (32 / image.pixelBitlength));\n hasColors = image.colors > 1;\n i = 0;\n n = 0;\n var a = 0;\n\n while (i < len) {\n pixel = pixels[i++];\n\n imgData[n++] = (pixel >>> 0) & 0xff;\n\n if (hasColors) {\n imgData[n++] = (pixel >>> 16) & 0xff;\n\n pixel = pixels[i++];\n imgData[n++] = (pixel >>> 0) & 0xff;\n }\n\n alphaData[a++] = (pixel >>> 16) & 0xff;\n }\n bitsPerComponent = 8;\n }\n\n if (canCompress(compression)) {\n imageData = compressBytes(\n imgData,\n image.width * image.colors,\n image.colors,\n compression\n );\n smask = compressBytes(alphaData, image.width, 1, compression);\n } else {\n imageData = imgData;\n smask = alphaData;\n filter = undefined;\n }\n }\n\n /*\n * Indexed png. Each pixel is a palette index.\n */\n if (image.colorType === 3) {\n colorSpace = this.color_spaces.INDEXED;\n pal = image.palette;\n\n if (image.transparency.indexed) {\n var trans = image.transparency.indexed;\n var total = 0;\n i = 0;\n len = trans.length;\n\n for (; i < len; ++i) {\n total += trans[i];\n }\n\n total = total / 255;\n\n /*\n * a single color is specified as 100% transparent (0),\n * so we set trns to use a /Mask with that index\n */\n if (total === len - 1 && trans.indexOf(0) !== -1) {\n trns = [trans.indexOf(0)];\n\n /*\n * there's more than one colour within the palette that specifies\n * a transparency value less than 255, so we unroll the pixels to create an image sMask\n */\n } else if (total !== len) {\n pixels = image.decodePixels();\n alphaData = new Uint8Array(pixels.length);\n i = 0;\n len = pixels.length;\n\n for (; i < len; i++) {\n alphaData[i] = trans[pixels[i]];\n }\n\n smask = compressBytes(alphaData, image.width, 1);\n }\n }\n }\n\n var predictor = getPredictorFromCompression(compression);\n\n if (filter === this.decode.FLATE_DECODE) {\n decodeParameters = \"/Predictor \" + predictor + \" \";\n }\n decodeParameters +=\n \"/Colors \" +\n colors +\n \" /BitsPerComponent \" +\n bitsPerComponent +\n \" /Columns \" +\n image.width;\n\n if (\n this.__addimage__.isArrayBuffer(imageData) ||\n this.__addimage__.isArrayBufferView(imageData)\n ) {\n imageData = this.__addimage__.arrayBufferToBinaryString(imageData);\n }\n\n if (\n (smask && this.__addimage__.isArrayBuffer(smask)) ||\n this.__addimage__.isArrayBufferView(smask)\n ) {\n smask = this.__addimage__.arrayBufferToBinaryString(smask);\n }\n\n return {\n alias: alias,\n data: imageData,\n index: index,\n filter: filter,\n decodeParameters: decodeParameters,\n transparency: trns,\n palette: pal,\n sMask: smask,\n predictor: predictor,\n width: image.width,\n height: image.height,\n bitsPerComponent: bitsPerComponent,\n colorSpace: colorSpace\n };\n }\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { GifReader } from \"../libs/omggif.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\n\n/**\n * jsPDF Gif Support PlugIn\n *\n * @name gif_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processGIF89A = function(imageData, index, alias, compression) {\n var reader = new GifReader(imageData);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = [];\n\n reader.decodeAndBlitFrameRGBA(0, pixels);\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n\n jsPDFAPI.processGIF87A = jsPDFAPI.processGIF89A;\n})(jsPDF.API);\n","import { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { BmpDecoder } from \"../libs/BMPDecoder.js\";\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\n/**\n * jsPDF bmp Support PlugIn\n * @name bmp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processBMP = function(imageData, index, alias, compression) {\n var reader = new BmpDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { JPEGEncoder } from \"../libs/JPEGEncoder.js\";\nimport { WebPDecoder } from \"../libs/WebPDecoder.js\";\n\n/**\n * jsPDF webp Support PlugIn\n *\n * @name webp_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n jsPDFAPI.processWEBP = function(imageData, index, alias, compression) {\n var reader = new WebPDecoder(imageData, false);\n var width = reader.width,\n height = reader.height;\n var qu = 100;\n var pixels = reader.getData();\n\n var rawImageData = {\n data: pixels,\n width: width,\n height: height\n };\n\n var encoder = new JPEGEncoder(qu);\n var data = encoder.encode(rawImageData, qu);\n return jsPDFAPI.processJPEG.call(this, data, index, alias, compression);\n };\n})(jsPDF.API);\n","/**\n * @license\n *\n * Copyright (c) 2021 Antti Palola, https://github.com/Pantura\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF RGBA array PlugIn\n * @name rgba_support\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * @name processRGBA\n * @function\n *\n * Process RGBA Array. This is a one-dimension array with pixel data [red, green, blue, alpha, red, green, ...].\n * RGBA array data can be obtained from DOM canvas getImageData.\n * @ignore\n */\n jsPDFAPI.processRGBA = function(imageData, index, alias) {\n \"use strict\";\n\n var imagePixels = imageData.data;\n var length = imagePixels.length;\n // jsPDF takes alpha data separately so extract that.\n var rgbOut = new Uint8Array((length / 4) * 3);\n var alphaOut = new Uint8Array(length / 4);\n var outIndex = 0;\n var alphaIndex = 0;\n\n for (var i = 0; i < length; i += 4) {\n var r = imagePixels[i];\n var g = imagePixels[i + 1];\n var b = imagePixels[i + 2];\n var alpha = imagePixels[i + 3];\n rgbOut[outIndex++] = r;\n rgbOut[outIndex++] = g;\n rgbOut[outIndex++] = b;\n alphaOut[alphaIndex++] = alpha;\n }\n\n var rgbData = this.__addimage__.arrayBufferToBinaryString(rgbOut);\n var alphaData = this.__addimage__.arrayBufferToBinaryString(alphaOut);\n\n return {\n alpha: alphaData,\n data: rgbData,\n index: index,\n alias: alias,\n colorSpace: \"DeviceRGB\",\n bitsPerComponent: 8,\n width: imageData.width,\n height: imageData.height\n };\n };\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF setLanguage Plugin\n *\n * @name setLanguage\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n /**\n * Add Language Tag to the generated PDF\n *\n * @name setLanguage\n * @function\n * @param {string} langCode The Language code as ISO-639-1 (e.g. 'en') or as country language code (e.g. 'en-GB').\n * @returns {jsPDF}\n * @example\n * var doc = new jsPDF()\n * doc.text(10, 10, 'This is a test')\n * doc.setLanguage(\"en-US\")\n * doc.save('english.pdf')\n */\n jsPDFAPI.setLanguage = function(langCode) {\n \"use strict\";\n\n var langCodes = {\n af: \"Afrikaans\",\n sq: \"Albanian\",\n ar: \"Arabic (Standard)\",\n \"ar-DZ\": \"Arabic (Algeria)\",\n \"ar-BH\": \"Arabic (Bahrain)\",\n \"ar-EG\": \"Arabic (Egypt)\",\n \"ar-IQ\": \"Arabic (Iraq)\",\n \"ar-JO\": \"Arabic (Jordan)\",\n \"ar-KW\": \"Arabic (Kuwait)\",\n \"ar-LB\": \"Arabic (Lebanon)\",\n \"ar-LY\": \"Arabic (Libya)\",\n \"ar-MA\": \"Arabic (Morocco)\",\n \"ar-OM\": \"Arabic (Oman)\",\n \"ar-QA\": \"Arabic (Qatar)\",\n \"ar-SA\": \"Arabic (Saudi Arabia)\",\n \"ar-SY\": \"Arabic (Syria)\",\n \"ar-TN\": \"Arabic (Tunisia)\",\n \"ar-AE\": \"Arabic (U.A.E.)\",\n \"ar-YE\": \"Arabic (Yemen)\",\n an: \"Aragonese\",\n hy: \"Armenian\",\n as: \"Assamese\",\n ast: \"Asturian\",\n az: \"Azerbaijani\",\n eu: \"Basque\",\n be: \"Belarusian\",\n bn: \"Bengali\",\n bs: \"Bosnian\",\n br: \"Breton\",\n bg: \"Bulgarian\",\n my: \"Burmese\",\n ca: \"Catalan\",\n ch: \"Chamorro\",\n ce: \"Chechen\",\n zh: \"Chinese\",\n \"zh-HK\": \"Chinese (Hong Kong)\",\n \"zh-CN\": \"Chinese (PRC)\",\n \"zh-SG\": \"Chinese (Singapore)\",\n \"zh-TW\": \"Chinese (Taiwan)\",\n cv: \"Chuvash\",\n co: \"Corsican\",\n cr: \"Cree\",\n hr: \"Croatian\",\n cs: \"Czech\",\n da: \"Danish\",\n nl: \"Dutch (Standard)\",\n \"nl-BE\": \"Dutch (Belgian)\",\n en: \"English\",\n \"en-AU\": \"English (Australia)\",\n \"en-BZ\": \"English (Belize)\",\n \"en-CA\": \"English (Canada)\",\n \"en-IE\": \"English (Ireland)\",\n \"en-JM\": \"English (Jamaica)\",\n \"en-NZ\": \"English (New Zealand)\",\n \"en-PH\": \"English (Philippines)\",\n \"en-ZA\": \"English (South Africa)\",\n \"en-TT\": \"English (Trinidad & Tobago)\",\n \"en-GB\": \"English (United Kingdom)\",\n \"en-US\": \"English (United States)\",\n \"en-ZW\": \"English (Zimbabwe)\",\n eo: \"Esperanto\",\n et: \"Estonian\",\n fo: \"Faeroese\",\n fj: \"Fijian\",\n fi: \"Finnish\",\n fr: \"French (Standard)\",\n \"fr-BE\": \"French (Belgium)\",\n \"fr-CA\": \"French (Canada)\",\n \"fr-FR\": \"French (France)\",\n \"fr-LU\": \"French (Luxembourg)\",\n \"fr-MC\": \"French (Monaco)\",\n \"fr-CH\": \"French (Switzerland)\",\n fy: \"Frisian\",\n fur: \"Friulian\",\n gd: \"Gaelic (Scots)\",\n \"gd-IE\": \"Gaelic (Irish)\",\n gl: \"Galacian\",\n ka: \"Georgian\",\n de: \"German (Standard)\",\n \"de-AT\": \"German (Austria)\",\n \"de-DE\": \"German (Germany)\",\n \"de-LI\": \"German (Liechtenstein)\",\n \"de-LU\": \"German (Luxembourg)\",\n \"de-CH\": \"German (Switzerland)\",\n el: \"Greek\",\n gu: \"Gujurati\",\n ht: \"Haitian\",\n he: \"Hebrew\",\n hi: \"Hindi\",\n hu: \"Hungarian\",\n is: \"Icelandic\",\n id: \"Indonesian\",\n iu: \"Inuktitut\",\n ga: \"Irish\",\n it: \"Italian (Standard)\",\n \"it-CH\": \"Italian (Switzerland)\",\n ja: \"Japanese\",\n kn: \"Kannada\",\n ks: \"Kashmiri\",\n kk: \"Kazakh\",\n km: \"Khmer\",\n ky: \"Kirghiz\",\n tlh: \"Klingon\",\n ko: \"Korean\",\n \"ko-KP\": \"Korean (North Korea)\",\n \"ko-KR\": \"Korean (South Korea)\",\n la: \"Latin\",\n lv: \"Latvian\",\n lt: \"Lithuanian\",\n lb: \"Luxembourgish\",\n mk: \"North Macedonia\",\n ms: \"Malay\",\n ml: \"Malayalam\",\n mt: \"Maltese\",\n mi: \"Maori\",\n mr: \"Marathi\",\n mo: \"Moldavian\",\n nv: \"Navajo\",\n ng: \"Ndonga\",\n ne: \"Nepali\",\n no: \"Norwegian\",\n nb: \"Norwegian (Bokmal)\",\n nn: \"Norwegian (Nynorsk)\",\n oc: \"Occitan\",\n or: \"Oriya\",\n om: \"Oromo\",\n fa: \"Persian\",\n \"fa-IR\": \"Persian/Iran\",\n pl: \"Polish\",\n pt: \"Portuguese\",\n \"pt-BR\": \"Portuguese (Brazil)\",\n pa: \"Punjabi\",\n \"pa-IN\": \"Punjabi (India)\",\n \"pa-PK\": \"Punjabi (Pakistan)\",\n qu: \"Quechua\",\n rm: \"Rhaeto-Romanic\",\n ro: \"Romanian\",\n \"ro-MO\": \"Romanian (Moldavia)\",\n ru: \"Russian\",\n \"ru-MO\": \"Russian (Moldavia)\",\n sz: \"Sami (Lappish)\",\n sg: \"Sango\",\n sa: \"Sanskrit\",\n sc: \"Sardinian\",\n sd: \"Sindhi\",\n si: \"Singhalese\",\n sr: \"Serbian\",\n sk: \"Slovak\",\n sl: \"Slovenian\",\n so: \"Somani\",\n sb: \"Sorbian\",\n es: \"Spanish\",\n \"es-AR\": \"Spanish (Argentina)\",\n \"es-BO\": \"Spanish (Bolivia)\",\n \"es-CL\": \"Spanish (Chile)\",\n \"es-CO\": \"Spanish (Colombia)\",\n \"es-CR\": \"Spanish (Costa Rica)\",\n \"es-DO\": \"Spanish (Dominican Republic)\",\n \"es-EC\": \"Spanish (Ecuador)\",\n \"es-SV\": \"Spanish (El Salvador)\",\n \"es-GT\": \"Spanish (Guatemala)\",\n \"es-HN\": \"Spanish (Honduras)\",\n \"es-MX\": \"Spanish (Mexico)\",\n \"es-NI\": \"Spanish (Nicaragua)\",\n \"es-PA\": \"Spanish (Panama)\",\n \"es-PY\": \"Spanish (Paraguay)\",\n \"es-PE\": \"Spanish (Peru)\",\n \"es-PR\": \"Spanish (Puerto Rico)\",\n \"es-ES\": \"Spanish (Spain)\",\n \"es-UY\": \"Spanish (Uruguay)\",\n \"es-VE\": \"Spanish (Venezuela)\",\n sx: \"Sutu\",\n sw: \"Swahili\",\n sv: \"Swedish\",\n \"sv-FI\": \"Swedish (Finland)\",\n \"sv-SV\": \"Swedish (Sweden)\",\n ta: \"Tamil\",\n tt: \"Tatar\",\n te: \"Teluga\",\n th: \"Thai\",\n tig: \"Tigre\",\n ts: \"Tsonga\",\n tn: \"Tswana\",\n tr: \"Turkish\",\n tk: \"Turkmen\",\n uk: \"Ukrainian\",\n hsb: \"Upper Sorbian\",\n ur: \"Urdu\",\n ve: \"Venda\",\n vi: \"Vietnamese\",\n vo: \"Volapuk\",\n wa: \"Walloon\",\n cy: \"Welsh\",\n xh: \"Xhosa\",\n ji: \"Yiddish\",\n zu: \"Zulu\"\n };\n\n if (this.internal.languageSettings === undefined) {\n this.internal.languageSettings = {};\n this.internal.languageSettings.isSubscribed = false;\n }\n\n if (langCodes[langCode] !== undefined) {\n this.internal.languageSettings.languageCode = langCode;\n if (this.internal.languageSettings.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n this.internal.write(\n \"/Lang (\" + this.internal.languageSettings.languageCode + \")\"\n );\n });\n this.internal.languageSettings.isSubscribed = true;\n }\n }\n return this;\n };\n})(jsPDF.API);\n","/** @license\n jsPDF standard_fonts_metrics plugin\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n * MIT license.\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * This file adds the standard font metrics to jsPDF.\n *\n * Font metrics data is reprocessed derivative of contents of\n * \"Font Metrics for PDF Core 14 Fonts\" package, which exhibits the following copyright and license:\n *\n * Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\n *\n * This file and the 14 PostScript(R) AFM files it accompanies may be used,\n * copied, and distributed for any purpose and without charge, with or without\n * modification, provided that all copyright notices are retained; that the AFM\n * files are not distributed without this file; that all modifications to this\n * file or any of the AFM files are prominently noted in the modified file(s);\n * and that this paragraph is not modified. Adobe Systems has no responsibility\n * or obligation to support the use of the AFM files.\n *\n * @name standard_fonts_metrics\n * @module\n */\n\n(function(API) {\n \"use strict\";\n API.__fontmetrics__ = API.__fontmetrics__ || {};\n\n var decoded = \"0123456789abcdef\",\n encoded = \"klmnopqrstuvwxyz\",\n mappingUncompress = {},\n mappingCompress = {};\n\n for (var i = 0; i < encoded.length; i++) {\n mappingUncompress[encoded[i]] = decoded[i];\n mappingCompress[decoded[i]] = encoded[i];\n }\n\n var hex = function(value) {\n return \"0x\" + parseInt(value, 10).toString(16);\n };\n\n var compress = (API.__fontmetrics__.compress = function(data) {\n var vals = [\"{\"];\n var value, keystring, valuestring, numberprefix;\n\n for (var key in data) {\n value = data[key];\n\n if (!isNaN(parseInt(key, 10))) {\n key = parseInt(key, 10);\n keystring = hex(key).slice(2);\n keystring =\n keystring.slice(0, -1) + mappingCompress[keystring.slice(-1)];\n } else {\n keystring = \"'\" + key + \"'\";\n }\n\n if (typeof value == \"number\") {\n if (value < 0) {\n valuestring = hex(value).slice(3);\n numberprefix = \"-\";\n } else {\n valuestring = hex(value).slice(2);\n numberprefix = \"\";\n }\n valuestring =\n numberprefix +\n valuestring.slice(0, -1) +\n mappingCompress[valuestring.slice(-1)];\n } else {\n if (typeof value === \"object\") {\n valuestring = compress(value);\n } else {\n throw new Error(\n \"Don't know what to do with value type \" + typeof value + \".\"\n );\n }\n }\n vals.push(keystring + valuestring);\n }\n vals.push(\"}\");\n return vals.join(\"\");\n });\n\n /**\n * Uncompresses data compressed into custom, base16-like format.\n *\n * @public\n * @function\n * @param\n * @returns {Type}\n */\n var uncompress = (API.__fontmetrics__.uncompress = function(data) {\n if (typeof data !== \"string\") {\n throw new Error(\"Invalid argument passed to uncompress.\");\n }\n\n var output = {},\n sign = 1,\n stringparts, // undef. will be [] in string mode\n activeobject = output,\n parentchain = [],\n parent_key_pair,\n keyparts = \"\",\n valueparts = \"\",\n key, // undef. will be Truthy when Key is resolved.\n datalen = data.length - 1, // stripping ending }\n ch;\n\n for (var i = 1; i < datalen; i += 1) {\n // - { } ' are special.\n\n ch = data[i];\n\n if (ch == \"'\") {\n if (stringparts) {\n // end of string mode\n key = stringparts.join(\"\");\n stringparts = undefined;\n } else {\n // start of string mode\n stringparts = [];\n }\n } else if (stringparts) {\n stringparts.push(ch);\n } else if (ch == \"{\") {\n // start of object\n parentchain.push([activeobject, key]);\n activeobject = {};\n key = undefined;\n } else if (ch == \"}\") {\n // end of object\n parent_key_pair = parentchain.pop();\n parent_key_pair[0][parent_key_pair[1]] = activeobject;\n key = undefined;\n activeobject = parent_key_pair[0];\n } else if (ch == \"-\") {\n sign = -1;\n } else {\n // must be number\n if (key === undefined) {\n if (mappingUncompress.hasOwnProperty(ch)) {\n keyparts += mappingUncompress[ch];\n key = parseInt(keyparts, 16) * sign;\n sign = +1;\n keyparts = \"\";\n } else {\n keyparts += ch;\n }\n } else {\n if (mappingUncompress.hasOwnProperty(ch)) {\n valueparts += mappingUncompress[ch];\n activeobject[key] = parseInt(valueparts, 16) * sign;\n sign = +1;\n key = undefined;\n valueparts = \"\";\n } else {\n valueparts += ch;\n }\n }\n }\n }\n return output;\n });\n\n // encoding = 'Unicode'\n // NOT UTF8, NOT UTF16BE/LE, NOT UCS2BE/LE. NO clever BOM behavior\n // Actual 16bit char codes used.\n // no multi-byte logic here\n\n // Unicode characters to WinAnsiEncoding:\n // {402: 131, 8211: 150, 8212: 151, 8216: 145, 8217: 146, 8218: 130, 8220: 147, 8221: 148, 8222: 132, 8224: 134, 8225: 135, 8226: 149, 8230: 133, 8364: 128, 8240:137, 8249: 139, 8250: 155, 710: 136, 8482: 153, 338: 140, 339: 156, 732: 152, 352: 138, 353: 154, 376: 159, 381: 142, 382: 158}\n // as you can see, all Unicode chars are outside of 0-255 range. No char code conflicts.\n // this means that you can give Win cp1252 encoded strings to jsPDF for rendering directly\n // as well as give strings with some (supported by these fonts) Unicode characters and\n // these will be mapped to win cp1252\n // for example, you can send char code (cp1252) 0x80 or (unicode) 0x20AC, getting \"Euro\" glyph displayed in both cases.\n\n var encodingBlock = {\n codePages: [\"WinAnsiEncoding\"],\n WinAnsiEncoding: uncompress(\n \"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\"\n )\n };\n var encodings = {\n Unicode: {\n Courier: encodingBlock,\n \"Courier-Bold\": encodingBlock,\n \"Courier-BoldOblique\": encodingBlock,\n \"Courier-Oblique\": encodingBlock,\n Helvetica: encodingBlock,\n \"Helvetica-Bold\": encodingBlock,\n \"Helvetica-BoldOblique\": encodingBlock,\n \"Helvetica-Oblique\": encodingBlock,\n \"Times-Roman\": encodingBlock,\n \"Times-Bold\": encodingBlock,\n \"Times-BoldItalic\": encodingBlock,\n \"Times-Italic\": encodingBlock\n //\t, 'Symbol'\n //\t, 'ZapfDingbats'\n }\n };\n\n var fontMetrics = {\n Unicode: {\n // all sizing numbers are n/fontMetricsFractionOf = one font size unit\n // this means that if fontMetricsFractionOf = 1000, and letter A's width is 476, it's\n // width is 476/1000 or 47.6% of its height (regardless of font size)\n // At this time this value applies to \"widths\" and \"kerning\" numbers.\n\n // char code 0 represents \"default\" (average) width - use it for chars missing in this table.\n // key 'fof' represents the \"fontMetricsFractionOf\" value\n\n \"Courier-Oblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-BoldItalic\": uncompress(\n \"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n \"Helvetica-Bold\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n Courier: uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-BoldOblique\": uncompress(\n \"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"\n ),\n \"Times-Bold\": uncompress(\n \"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"\n ),\n Symbol: uncompress(\n \"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"\n ),\n Helvetica: uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n ),\n \"Helvetica-BoldOblique\": uncompress(\n \"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"\n ),\n ZapfDingbats: uncompress(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Courier-Bold\": uncompress(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\n \"Times-Italic\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"\n ),\n \"Times-Roman\": uncompress(\n \"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"\n ),\n \"Helvetica-Oblique\": uncompress(\n \"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"\n )\n }\n };\n\n /*\n\tThis event handler is fired when a new jsPDF object is initialized\n\tThis event handler appends metrics data to standard fonts within\n\tthat jsPDF instance. The metrics are mapped over Unicode character\n\tcodes, NOT CIDs or other codes matching the StandardEncoding table of the\n\tstandard PDF fonts.\n\tFuture:\n\tAlso included is the encoding maping table, converting Unicode (UCS-2, UTF-16)\n\tchar codes to StandardEncoding character codes. The encoding table is to be used\n\tsomewhere around \"pdfEscape\" call.\n\t*/\n API.events.push([\n \"addFont\",\n function(data) {\n var font = data.font;\n\n var metrics = fontMetrics[\"Unicode\"][font.postScriptName];\n if (metrics) {\n font.metadata[\"Unicode\"] = {};\n font.metadata[\"Unicode\"].widths = metrics.widths;\n font.metadata[\"Unicode\"].kerning = metrics.kerning;\n }\n\n var encodingBlock = encodings[\"Unicode\"][font.postScriptName];\n if (encodingBlock) {\n font.metadata[\"Unicode\"].encoding = encodingBlock;\n font.encoding = encodingBlock.codePages[0];\n }\n }\n ]); // end of adding event handler\n})(jsPDF.API);\n","/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { atob } from \"../libs/AtobBtoa.js\";\n\n/**\n * @name ttfsupport\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n\n var binaryStringToUint8Array = function(binary_string) {\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n };\n\n var addFont = function(font, file) {\n // eslint-disable-next-line no-control-regex\n if (/^\\x00\\x01\\x00\\x00/.test(file)) {\n file = binaryStringToUint8Array(file);\n } else {\n file = binaryStringToUint8Array(atob(file));\n }\n font.metadata = jsPDF.API.TTFFont.open(file);\n font.metadata.Unicode = font.metadata.Unicode || {\n encoding: {},\n kerning: {},\n widths: []\n };\n font.metadata.glyIdsUsed = [0];\n };\n\n jsPDF.API.events.push([\n \"addFont\",\n function(data) {\n var file = undefined;\n var font = data.font;\n var instance = data.instance;\n if (font.isStandardFont) {\n return;\n }\n if (typeof instance !== \"undefined\") {\n if (instance.existsFileInVFS(font.postScriptName) === false) {\n file = instance.loadFile(font.postScriptName);\n } else {\n file = instance.getFileFromVFS(font.postScriptName);\n }\n if (typeof file !== \"string\") {\n throw new Error(\n \"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n addFont(font, file);\n } else {\n throw new Error(\n \"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\" +\n font.postScriptName +\n \"').\"\n );\n }\n }\n ]); // end of adding event handler\n})(jsPDF);\n","/** @license\n * Copyright (c) 2012 Willow Systems Corporation, https://github.com/willowsystems\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\nimport { console } from \"../libs/console.js\";\nimport { globalObject } from \"../libs/globalObject.js\";\n\n/**\n * jsPDF SVG plugin\n *\n * @name svg\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n function loadCanvg() {\n return (function() {\n if (globalObject[\"canvg\"]) {\n return Promise.resolve(globalObject[\"canvg\"]);\n }\n\n\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n return new Promise(function(resolve, reject) {\n try {\n resolve(require(\"canvg\"));\n } catch (e) {\n reject(e);\n }\n });\n }\n if (typeof define === \"function\" && define.amd) {\n return new Promise(function(resolve, reject) {\n try {\n require([\"canvg\"], resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n return Promise.reject(new Error(\"Could not load canvg\"));\n })()\n .catch(function(e) {\n return Promise.reject(new Error(\"Could not load canvg: \" + e));\n })\n .then(function(canvg) {\n return canvg.default ? canvg.default : canvg;\n });\n }\n\n /**\n * Parses SVG XML and saves it as image into the PDF.\n *\n * Depends on canvas-element and canvg\n *\n * @name addSvgAsImage\n * @public\n * @function\n * @param {string} SVG-Data as Text\n * @param {number} x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param {number} y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param {number} width of SVG-Image (in units declared at inception of PDF document)\n * @param {number} height of SVG-Image (in units declared at inception of PDF document)\n * @param {string} alias of SVG-Image (if used multiple times)\n * @param {string} compression of the generated JPEG, can have the values 'NONE', 'FAST', 'MEDIUM' and 'SLOW'\n * @param {number} rotation of the image in degrees (0-359)\n *\n * @returns jsPDF jsPDF-instance\n */\n jsPDFAPI.addSvgAsImage = function(\n svg,\n x,\n y,\n w,\n h,\n alias,\n compression,\n rotation\n ) {\n if (isNaN(x) || isNaN(y)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid coordinates\", arguments);\n throw new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");\n }\n\n if (isNaN(w) || isNaN(h)) {\n console.error(\"jsPDF.addSvgAsImage: Invalid measurements\", arguments);\n throw new Error(\n \"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\"\n );\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"#fff\"; /// set white fill style\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var options = {\n ignoreMouse: true,\n ignoreAnimation: true,\n ignoreDimensions: true\n };\n var doc = this;\n return loadCanvg()\n .then(\n function(canvg) {\n return canvg.fromString(ctx, svg, options);\n },\n function() {\n return Promise.reject(new Error(\"Could not load canvg.\"));\n }\n )\n .then(function(instance) {\n return instance.render(options);\n })\n .then(function() {\n doc.addImage(\n canvas.toDataURL(\"image/jpeg\", 1.0),\n x,\n y,\n w,\n h,\n compression,\n rotation\n );\n });\n };\n})(jsPDF.API);\n","/**\n * @license\n * ====================================================================\n * Copyright (c) 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * jsPDF total_pages plugin\n * @name total_pages\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * @name putTotalPages\n * @function\n * @param {string} pageExpression Regular Expression\n * @returns {jsPDF} jsPDF-instance\n */\n\n jsPDFAPI.putTotalPages = function(pageExpression) {\n \"use strict\";\n\n var replaceExpression;\n var totalNumberOfPages = 0;\n if (parseInt(this.internal.getFont().id.substr(1), 10) < 15) {\n replaceExpression = new RegExp(pageExpression, \"g\");\n totalNumberOfPages = this.internal.getNumberOfPages();\n } else {\n replaceExpression = new RegExp(\n this.pdfEscape16(pageExpression, this.internal.getFont()),\n \"g\"\n );\n totalNumberOfPages = this.pdfEscape16(\n this.internal.getNumberOfPages() + \"\",\n this.internal.getFont()\n );\n }\n\n for (var n = 1; n <= this.internal.getNumberOfPages(); n++) {\n for (var i = 0; i < this.internal.pages[n].length; i++) {\n this.internal.pages[n][i] = this.internal.pages[n][i].replace(\n replaceExpression,\n totalNumberOfPages\n );\n }\n }\n\n return this;\n };\n})(jsPDF.API);\n","/**\n * @license\n * jsPDF viewerPreferences Plugin\n * @author Aras Abbasi (github.com/arasabbasi)\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Adds the ability to set ViewerPreferences and by thus\n * controlling the way the document is to be presented on the\n * screen or in print.\n * @name viewerpreferences\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n /**\n * Set the ViewerPreferences of the generated PDF\n *\n * @name viewerPreferences\n * @function\n * @public\n * @param {Object} options Array with the ViewerPreferences
    \n * Example: doc.viewerPreferences({\"FitWindow\":true});
    \n *
    \n * You can set following preferences:
    \n *
    \n * HideToolbar (boolean)
    \n * Default value: false
    \n *
    \n * HideMenubar (boolean)
    \n * Default value: false.
    \n *
    \n * HideWindowUI (boolean)
    \n * Default value: false.
    \n *
    \n * FitWindow (boolean)
    \n * Default value: false.
    \n *
    \n * CenterWindow (boolean)
    \n * Default value: false
    \n *
    \n * DisplayDocTitle (boolean)
    \n * Default value: false.
    \n *
    \n * NonFullScreenPageMode (string)
    \n * Possible values: UseNone, UseOutlines, UseThumbs, UseOC
    \n * Default value: UseNone
    \n *
    \n * Direction (string)
    \n * Possible values: L2R, R2L
    \n * Default value: L2R.
    \n *
    \n * ViewArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * ViewClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintArea (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox
    \n *
    \n * PrintClip (string)
    \n * Possible values: MediaBox, CropBox, TrimBox, BleedBox, ArtBox
    \n * Default value: CropBox.
    \n *
    \n * PrintScaling (string)
    \n * Possible values: AppDefault, None
    \n * Default value: AppDefault.
    \n *
    \n * Duplex (string)
    \n * Possible values: Simplex, DuplexFlipLongEdge, DuplexFlipShortEdge\n * Default value: none
    \n *
    \n * PickTrayByPDFSize (boolean)
    \n * Default value: false
    \n *
    \n * PrintPageRange (Array)
    \n * Example: [[1,5], [7,9]]
    \n * Default value: as defined by PDF viewer application
    \n *
    \n * NumCopies (Number)
    \n * Possible values: 1, 2, 3, 4, 5
    \n * Default value: 1
    \n *
    \n * For more information see the PDF Reference, sixth edition on Page 577\n * @param {boolean} doReset True to reset the settings\n * @function\n * @returns jsPDF jsPDF-instance\n * @example\n * var doc = new jsPDF()\n * doc.text('This is a test', 10, 10)\n * doc.viewerPreferences({'FitWindow': true}, true)\n * doc.save(\"viewerPreferences.pdf\")\n *\n * // Example printing 10 copies, using cropbox, and hiding UI.\n * doc.viewerPreferences({\n * 'HideWindowUI': true,\n * 'PrintArea': 'CropBox',\n * 'NumCopies': 10\n * })\n */\n jsPDFAPI.viewerPreferences = function(options, doReset) {\n options = options || {};\n doReset = doReset || false;\n\n var configuration;\n var configurationTemplate = {\n HideToolbar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideMenubar: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n HideWindowUI: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n FitWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n CenterWindow: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.3\n },\n DisplayDocTitle: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.4\n },\n NonFullScreenPageMode: {\n defaultValue: \"UseNone\",\n value: \"UseNone\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"UseNone\", \"UseOutlines\", \"UseThumbs\", \"UseOC\"],\n pdfVersion: 1.3\n },\n Direction: {\n defaultValue: \"L2R\",\n value: \"L2R\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"L2R\", \"R2L\"],\n pdfVersion: 1.3\n },\n ViewArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n ViewClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintArea: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintClip: {\n defaultValue: \"CropBox\",\n value: \"CropBox\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"MediaBox\", \"CropBox\", \"TrimBox\", \"BleedBox\", \"ArtBox\"],\n pdfVersion: 1.4\n },\n PrintScaling: {\n defaultValue: \"AppDefault\",\n value: \"AppDefault\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\"AppDefault\", \"None\"],\n pdfVersion: 1.6\n },\n Duplex: {\n defaultValue: \"\",\n value: \"none\",\n type: \"name\",\n explicitSet: false,\n valueSet: [\n \"Simplex\",\n \"DuplexFlipShortEdge\",\n \"DuplexFlipLongEdge\",\n \"none\"\n ],\n pdfVersion: 1.7\n },\n PickTrayByPDFSize: {\n defaultValue: false,\n value: false,\n type: \"boolean\",\n explicitSet: false,\n valueSet: [true, false],\n pdfVersion: 1.7\n },\n PrintPageRange: {\n defaultValue: \"\",\n value: \"\",\n type: \"array\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n },\n NumCopies: {\n defaultValue: 1,\n value: 1,\n type: \"integer\",\n explicitSet: false,\n valueSet: null,\n pdfVersion: 1.7\n }\n };\n\n var configurationKeys = Object.keys(configurationTemplate);\n\n var rangeArray = [];\n var i = 0;\n var j = 0;\n var k = 0;\n var isValid;\n\n var method;\n var value;\n\n function arrayContainsElement(array, element) {\n var iterator;\n var result = false;\n\n for (iterator = 0; iterator < array.length; iterator += 1) {\n if (array[iterator] === element) {\n result = true;\n }\n }\n return result;\n }\n\n if (this.internal.viewerpreferences === undefined) {\n this.internal.viewerpreferences = {};\n this.internal.viewerpreferences.configuration = JSON.parse(\n JSON.stringify(configurationTemplate)\n );\n this.internal.viewerpreferences.isSubscribed = false;\n }\n configuration = this.internal.viewerpreferences.configuration;\n\n if (options === \"reset\" || doReset === true) {\n var len = configurationKeys.length;\n\n for (k = 0; k < len; k += 1) {\n configuration[configurationKeys[k]].value =\n configuration[configurationKeys[k]].defaultValue;\n configuration[configurationKeys[k]].explicitSet = false;\n }\n }\n\n if (typeof options === \"object\") {\n for (method in options) {\n value = options[method];\n if (\n arrayContainsElement(configurationKeys, method) &&\n value !== undefined\n ) {\n if (\n configuration[method].type === \"boolean\" &&\n typeof value === \"boolean\"\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"name\" &&\n arrayContainsElement(configuration[method].valueSet, value)\n ) {\n configuration[method].value = value;\n } else if (\n configuration[method].type === \"integer\" &&\n Number.isInteger(value)\n ) {\n configuration[method].value = value;\n } else if (configuration[method].type === \"array\") {\n for (i = 0; i < value.length; i += 1) {\n isValid = true;\n if (value[i].length === 1 && typeof value[i][0] === \"number\") {\n rangeArray.push(String(value[i] - 1));\n } else if (value[i].length > 1) {\n for (j = 0; j < value[i].length; j += 1) {\n if (typeof value[i][j] !== \"number\") {\n isValid = false;\n }\n }\n if (isValid === true) {\n rangeArray.push([value[i][0] - 1, value[i][1] - 1].join(\" \"));\n }\n }\n }\n configuration[method].value = \"[\" + rangeArray.join(\" \") + \"]\";\n } else {\n configuration[method].value = configuration[method].defaultValue;\n }\n\n configuration[method].explicitSet = true;\n }\n }\n }\n\n if (this.internal.viewerpreferences.isSubscribed === false) {\n this.internal.events.subscribe(\"putCatalog\", function() {\n var pdfDict = [];\n var vPref;\n for (vPref in configuration) {\n if (configuration[vPref].explicitSet === true) {\n if (configuration[vPref].type === \"name\") {\n pdfDict.push(\"/\" + vPref + \" /\" + configuration[vPref].value);\n } else {\n pdfDict.push(\"/\" + vPref + \" \" + configuration[vPref].value);\n }\n }\n }\n if (pdfDict.length !== 0) {\n this.internal.write(\n \"/ViewerPreferences\\n<<\\n\" + pdfDict.join(\"\\n\") + \"\\n>>\"\n );\n }\n });\n this.internal.viewerpreferences.isSubscribed = true;\n }\n\n this.internal.viewerpreferences.configuration = configuration;\n return this;\n };\n})(jsPDF.API);\n","/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * @name xmp_metadata\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var postPutResources = function() {\n var xmpmeta_beginning = '';\n var rdf_beginning =\n '';\n var rdf_ending = \"\";\n var xmpmeta_ending = \"\";\n var utf8_xmpmeta_beginning = unescape(\n encodeURIComponent(xmpmeta_beginning)\n );\n var utf8_rdf_beginning = unescape(encodeURIComponent(rdf_beginning));\n var utf8_metadata = unescape(\n encodeURIComponent(this.internal.__metadata__.metadata)\n );\n var utf8_rdf_ending = unescape(encodeURIComponent(rdf_ending));\n var utf8_xmpmeta_ending = unescape(encodeURIComponent(xmpmeta_ending));\n\n var total_len =\n utf8_rdf_beginning.length +\n utf8_metadata.length +\n utf8_rdf_ending.length +\n utf8_xmpmeta_beginning.length +\n utf8_xmpmeta_ending.length;\n\n this.internal.__metadata__.metadata_object_number = this.internal.newObject();\n this.internal.write(\n \"<< /Type /Metadata /Subtype /XML /Length \" + total_len + \" >>\"\n );\n this.internal.write(\"stream\");\n this.internal.write(\n utf8_xmpmeta_beginning +\n utf8_rdf_beginning +\n utf8_metadata +\n utf8_rdf_ending +\n utf8_xmpmeta_ending\n );\n this.internal.write(\"endstream\");\n this.internal.write(\"endobj\");\n };\n\n var putCatalog = function() {\n if (this.internal.__metadata__.metadata_object_number) {\n this.internal.write(\n \"/Metadata \" +\n this.internal.__metadata__.metadata_object_number +\n \" 0 R\"\n );\n }\n };\n\n /**\n * Adds XMP formatted metadata to PDF\n *\n * @name addMetadata\n * @function\n * @param {String} metadata The actual metadata to be added. The metadata shall be stored as XMP simple value. Note that if the metadata string contains XML markup characters \"<\", \">\" or \"&\", those characters should be written using XML entities.\n * @param {String} namespaceuri Sets the namespace URI for the metadata. Last character should be slash or hash.\n * @returns {jsPDF} jsPDF-instance\n */\n jsPDFAPI.addMetadata = function(metadata, namespaceuri) {\n if (typeof this.internal.__metadata__ === \"undefined\") {\n this.internal.__metadata__ = {\n metadata: metadata,\n namespaceuri: namespaceuri || \"http://jspdf.default.namespaceuri/\"\n };\n this.internal.events.subscribe(\"putCatalog\", putCatalog);\n\n this.internal.events.subscribe(\"postPutResources\", postPutResources);\n }\n return this;\n };\n})(jsPDF.API);\n","import { jsPDF } from \"../jspdf.js\";\nimport { toPDFName } from \"../libs/pdfname.js\";\n\n/**\n * @name utf8\n * @module\n */\n(function(jsPDF) {\n \"use strict\";\n var jsPDFAPI = jsPDF.API;\n\n /***************************************************************************************************/\n /* function : pdfEscape16 */\n /* comment : The character id of a 2-byte string is converted to a hexadecimal number by obtaining */\n /* the corresponding glyph id and width, and then adding padding to the string. */\n /***************************************************************************************************/\n var pdfEscape16 = (jsPDFAPI.pdfEscape16 = function(text, font) {\n var widths = font.metadata.Unicode.widths;\n var padz = [\"\", \"0\", \"00\", \"000\", \"0000\"];\n var ar = [\"\"];\n for (var i = 0, l = text.length, t; i < l; ++i) {\n t = font.metadata.characterToGlyph(text.charCodeAt(i));\n font.metadata.glyIdsUsed.push(t);\n font.metadata.toUnicode[t] = text.charCodeAt(i);\n if (widths.indexOf(t) == -1) {\n widths.push(t);\n widths.push([parseInt(font.metadata.widthOfGlyph(t), 10)]);\n }\n if (t == \"0\") {\n //Spaces are not allowed in cmap.\n return ar.join(\"\");\n } else {\n t = t.toString(16);\n ar.push(padz[4 - t.length], t);\n }\n }\n return ar.join(\"\");\n });\n\n var toUnicodeCmap = function(map) {\n var code, codes, range, unicode, unicodeMap, _i, _len;\n unicodeMap =\n \"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\";\n codes = Object.keys(map).sort(function(a, b) {\n return a - b;\n });\n\n range = [];\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (range.length >= 100) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\";\n range = [];\n }\n\n if (\n map[code] !== undefined &&\n map[code] !== null &&\n typeof map[code].toString === \"function\"\n ) {\n unicode = (\"0000\" + map[code].toString(16)).slice(-4);\n code = (\"0000\" + (+code).toString(16)).slice(-4);\n range.push(\"<\" + code + \"><\" + unicode + \">\");\n }\n }\n\n if (range.length) {\n unicodeMap +=\n \"\\n\" +\n range.length +\n \" beginbfchar\\n\" +\n range.join(\"\\n\") +\n \"\\nendbfchar\\n\";\n }\n unicodeMap +=\n \"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\";\n return unicodeMap;\n };\n\n var identityHFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"Identity-H\"\n ) {\n //Tag with Identity-H\n var widths = font.metadata.Unicode.widths;\n var data = font.metadata.subset.encode(font.metadata.glyIdsUsed, 1);\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Type /FontDescriptor\");\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/Flags \" + font.metadata.flags);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\">>\");\n out(\"endobj\");\n\n var DescendantFont = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/FontDescriptor \" + fontDescriptor + \" 0 R\");\n out(\"/W \" + jsPDF.API.PDFObject.convert(widths));\n out(\"/CIDToGIDMap /Identity\");\n out(\"/DW 1000\");\n out(\"/Subtype /CIDFontType2\");\n out(\"/CIDSystemInfo\");\n out(\"<<\");\n out(\"/Supplement 0\");\n out(\"/Registry (Adobe)\");\n out(\"/Ordering (\" + font.encoding + \")\");\n out(\">>\");\n out(\">>\");\n out(\"endobj\");\n\n font.objectNumber = newObject();\n out(\"<<\");\n out(\"/Type /Font\");\n out(\"/Subtype /Type0\");\n out(\"/ToUnicode \" + cmap + \" 0 R\");\n out(\"/BaseFont /\" + toPDFName(font.fontName));\n out(\"/Encoding /\" + font.encoding);\n out(\"/DescendantFonts [\" + DescendantFont + \" 0 R]\");\n out(\">>\");\n out(\"endobj\");\n\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n identityHFunction(args);\n }\n ]);\n\n var winAnsiEncodingFunction = function(options) {\n var font = options.font;\n var out = options.out;\n var newObject = options.newObject;\n var putStream = options.putStream;\n\n if (\n font.metadata instanceof jsPDF.API.TTFFont &&\n font.encoding === \"WinAnsiEncoding\"\n ) {\n //Tag with WinAnsi encoding\n var data = font.metadata.rawData;\n var pdfOutput = data;\n var pdfOutput2 = \"\";\n for (var i = 0; i < pdfOutput.length; i++) {\n pdfOutput2 += String.fromCharCode(pdfOutput[i]);\n }\n var fontTable = newObject();\n putStream({ data: pdfOutput2, addLength1: true, objectId: fontTable });\n out(\"endobj\");\n\n var cmap = newObject();\n var cmapData = toUnicodeCmap(font.metadata.toUnicode);\n putStream({ data: cmapData, addLength1: true, objectId: cmap });\n out(\"endobj\");\n\n var fontDescriptor = newObject();\n out(\"<<\");\n out(\"/Descent \" + font.metadata.decender);\n out(\"/CapHeight \" + font.metadata.capHeight);\n out(\"/StemV \" + font.metadata.stemV);\n out(\"/Type /FontDescriptor\");\n out(\"/FontFile2 \" + fontTable + \" 0 R\");\n out(\"/Flags 96\");\n out(\"/FontBBox \" + jsPDF.API.PDFObject.convert(font.metadata.bbox));\n out(\"/FontName /\" + toPDFName(font.fontName));\n out(\"/ItalicAngle \" + font.metadata.italicAngle);\n out(\"/Ascent \" + font.metadata.ascender);\n out(\">>\");\n out(\"endobj\");\n font.objectNumber = newObject();\n for (var j = 0; j < font.metadata.hmtx.widths.length; j++) {\n font.metadata.hmtx.widths[j] = parseInt(\n font.metadata.hmtx.widths[j] * (1000 / font.metadata.head.unitsPerEm)\n ); //Change the width of Em units to Point units.\n }\n out(\n \"<>\"\n );\n out(\"endobj\");\n font.isAlreadyPutted = true;\n }\n };\n\n jsPDFAPI.events.push([\n \"putFont\",\n function(args) {\n winAnsiEncodingFunction(args);\n }\n ]);\n\n var utf8TextFunction = function(args) {\n var text = args.text || \"\";\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n\n var pdfEscape = mutex.pdfEscape;\n var activeFontKey = mutex.activeFontKey;\n var fonts = mutex.fonts;\n var key = activeFontKey;\n\n var str = \"\",\n s = 0,\n cmapConfirm;\n var strText = \"\";\n var encoding = fonts[key].encoding;\n\n if (fonts[key].encoding !== \"Identity-H\") {\n return {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n }\n strText = text;\n\n key = activeFontKey;\n if (Array.isArray(text)) {\n strText = text[0];\n }\n for (s = 0; s < strText.length; s += 1) {\n if (fonts[key].metadata.hasOwnProperty(\"cmap\")) {\n cmapConfirm =\n fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)];\n /*\n if (Object.prototype.toString.call(text) === '[object Array]') {\n var i = 0;\n // for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[s]) === '[object Array]') {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s][0].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n } else {\n\n }\n //}\n\n } else {\n cmapConfirm = fonts[key].metadata.cmap.unicode.codeMap[strText[s].charCodeAt(0)]; //Make sure the cmap has the corresponding glyph id\n }*/\n }\n if (!cmapConfirm) {\n if (\n strText[s].charCodeAt(0) < 256 &&\n fonts[key].metadata.hasOwnProperty(\"Unicode\")\n ) {\n str += strText[s];\n } else {\n str += \"\";\n }\n } else {\n str += strText[s];\n }\n }\n var result = \"\";\n if (parseInt(key.slice(1)) < 14 || encoding === \"WinAnsiEncoding\") {\n //For the default 13 font\n result = pdfEscape(str, key)\n .split(\"\")\n .map(function(cv) {\n return cv.charCodeAt(0).toString(16);\n })\n .join(\"\");\n } else if (encoding === \"Identity-H\") {\n result = pdfEscape16(str, fonts[key]);\n }\n mutex.isHex = true;\n\n return {\n text: result,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n };\n\n var utf8EscapeFunction = function(parms) {\n var text = parms.text || \"\",\n x = parms.x,\n y = parms.y,\n options = parms.options,\n mutex = parms.mutex;\n var tmpText = [];\n var args = {\n text: text,\n x: x,\n y: y,\n options: options,\n mutex: mutex\n };\n\n if (Array.isArray(text)) {\n var i = 0;\n for (i = 0; i < text.length; i += 1) {\n if (Array.isArray(text[i])) {\n if (text[i].length === 3) {\n tmpText.push([\n utf8TextFunction(Object.assign({}, args, { text: text[i][0] }))\n .text,\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n } else {\n tmpText.push(\n utf8TextFunction(Object.assign({}, args, { text: text[i] })).text\n );\n }\n }\n parms.text = tmpText;\n } else {\n parms.text = utf8TextFunction(\n Object.assign({}, args, { text: text })\n ).text;\n }\n };\n\n jsPDFAPI.events.push([\"postProcessText\", utf8EscapeFunction]);\n})(jsPDF);\n","/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n/**\n * Use the vFS to handle files\n *\n * @name vFS\n * @module\n */\n(function(jsPDFAPI) {\n \"use strict\";\n\n var _initializeVFS = function() {\n if (typeof this.internal.vFS === \"undefined\") {\n this.internal.vFS = {};\n }\n return true;\n };\n\n /**\n * Check if the file exists in the vFS\n *\n * @name existsFileInVFS\n * @function\n * @param {string} Possible filename in the vFS.\n * @returns {boolean}\n * @example\n * doc.existsFileInVFS(\"someFile.txt\");\n */\n jsPDFAPI.existsFileInVFS = function(filename) {\n _initializeVFS.call(this);\n return typeof this.internal.vFS[filename] !== \"undefined\";\n };\n\n /**\n * Add a file to the vFS\n *\n * @name addFileToVFS\n * @function\n * @param {string} filename The name of the file which should be added.\n * @param {string} filecontent The content of the file.\n * @returns {jsPDF}\n * @example\n * doc.addFileToVFS(\"someFile.txt\", \"BADFACE1\");\n */\n jsPDFAPI.addFileToVFS = function(filename, filecontent) {\n _initializeVFS.call(this);\n this.internal.vFS[filename] = filecontent;\n return this;\n };\n\n /**\n * Get the file from the vFS\n *\n * @name getFileFromVFS\n * @function\n * @param {string} The name of the file which gets requested.\n * @returns {string}\n * @example\n * doc.getFileFromVFS(\"someFile.txt\");\n */\n jsPDFAPI.getFileFromVFS = function(filename) {\n _initializeVFS.call(this);\n\n if (typeof this.internal.vFS[filename] !== \"undefined\") {\n return this.internal.vFS[filename];\n }\n return null;\n };\n})(jsPDF.API);\n","/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\n\nimport { jsPDF } from \"../jspdf.js\";\n\n(function(jsPDF) {\n \"use strict\";\n /**\n * Table of Unicode types.\n *\n * Generated by:\n *\n * var bidi = require(\"./bidi/index\");\n * var bidi_accumulate = bidi.slice(0, 256).concat(bidi.slice(0x0500, 0x0500 + 256 * 3)).\n * concat(bidi.slice(0x2000, 0x2000 + 256)).concat(bidi.slice(0xFB00, 0xFB00 + 256)).\n * concat(bidi.slice(0xFE00, 0xFE00 + 2 * 256));\n *\n * for( var i = 0; i < bidi_accumulate.length; i++) {\n * \tif(bidi_accumulate[i] === undefined || bidi_accumulate[i] === 'ON')\n * \t\tbidi_accumulate[i] = 'N'; //mark as neutral to conserve space and substitute undefined\n * }\n * var bidiAccumulateStr = 'return [ \"' + bidi_accumulate.toString().replace(/,/g, '\", \"') + '\" ];';\n * require(\"fs\").writeFile('unicode-types.js', bidiAccumulateStr);\n *\n * Based on:\n * https://github.com/mathiasbynens/unicode-8.0.0\n */\n var bidiUnicodeTypes = [\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"S\",\n \"B\",\n \"S\",\n \"WS\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"B\",\n \"B\",\n \"S\",\n \"WS\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"B\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"CS\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"EN\",\n \"EN\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"N\",\n \"N\",\n \"AL\",\n \"ET\",\n \"ET\",\n \"AL\",\n \"CS\",\n \"AL\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"AN\",\n \"ET\",\n \"AN\",\n \"AN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AN\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"R\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"L\",\n \"R\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"B\",\n \"LRE\",\n \"RLE\",\n \"PDF\",\n \"LRO\",\n \"RLO\",\n \"CS\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"WS\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"N\",\n \"LRI\",\n \"RLI\",\n \"FSI\",\n \"PDI\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"BN\",\n \"EN\",\n \"L\",\n \"N\",\n \"N\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"R\",\n \"NSM\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"ES\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"N\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"R\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"NSM\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"N\",\n \"N\",\n \"ES\",\n \"ES\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"AL\",\n \"N\",\n \"N\",\n \"BN\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"ES\",\n \"CS\",\n \"ES\",\n \"CS\",\n \"CS\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"EN\",\n \"CS\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"L\",\n \"L\",\n \"L\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"ET\",\n \"ET\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\",\n \"N\"\n ];\n\n /**\n * Unicode Bidi algorithm compliant Bidi engine.\n * For reference see http://unicode.org/reports/tr9/\n */\n\n /**\n * constructor ( options )\n *\n * Initializes Bidi engine\n *\n * @param {Object} See 'setOptions' below for detailed description.\n * options are cashed between invocation of 'doBidiReorder' method\n *\n * sample usage pattern of BidiEngine:\n * var opt = {\n * \tisInputVisual: true,\n * \tisInputRtl: false,\n * \tisOutputVisual: false,\n * \tisOutputRtl: false,\n * \tisSymmetricSwapping: true\n * }\n * var sourceToTarget = [], levels = [];\n * var bidiEng = Globalize.bidiEngine(opt);\n * var src = \"text string to be reordered\";\n * var ret = bidiEng.doBidiReorder(src, sourceToTarget, levels);\n */\n\n jsPDF.__bidiEngine__ = jsPDF.prototype.__bidiEngine__ = function(options) {\n var _UNICODE_TYPES = _bidiUnicodeTypes;\n\n var _STATE_TABLE_LTR = [\n [0, 3, 0, 1, 0, 0, 0],\n [0, 3, 0, 1, 2, 2, 0],\n [0, 3, 0, 0x11, 2, 0, 1],\n [0, 3, 5, 5, 4, 1, 0],\n [0, 3, 0x15, 0x15, 4, 0, 1],\n [0, 3, 5, 5, 4, 2, 0]\n ];\n\n var _STATE_TABLE_RTL = [\n [2, 0, 1, 1, 0, 1, 0],\n [2, 0, 1, 1, 0, 2, 0],\n [2, 0, 2, 1, 3, 2, 0],\n [2, 0, 2, 0x21, 3, 1, 1]\n ];\n\n var _TYPE_NAMES_MAP = { L: 0, R: 1, EN: 2, AN: 3, N: 4, B: 5, S: 6 };\n\n var _UNICODE_RANGES_MAP = {\n 0: 0,\n 5: 1,\n 6: 2,\n 7: 3,\n 0x20: 4,\n 0xfb: 5,\n 0xfe: 6,\n 0xff: 7\n };\n\n var _SWAP_TABLE = [\n \"\\u0028\",\n \"\\u0029\",\n \"\\u0028\",\n \"\\u003C\",\n \"\\u003E\",\n \"\\u003C\",\n \"\\u005B\",\n \"\\u005D\",\n \"\\u005B\",\n \"\\u007B\",\n \"\\u007D\",\n \"\\u007B\",\n \"\\u00AB\",\n \"\\u00BB\",\n \"\\u00AB\",\n \"\\u2039\",\n \"\\u203A\",\n \"\\u2039\",\n \"\\u2045\",\n \"\\u2046\",\n \"\\u2045\",\n \"\\u207D\",\n \"\\u207E\",\n \"\\u207D\",\n \"\\u208D\",\n \"\\u208E\",\n \"\\u208D\",\n \"\\u2264\",\n \"\\u2265\",\n \"\\u2264\",\n \"\\u2329\",\n \"\\u232A\",\n \"\\u2329\",\n \"\\uFE59\",\n \"\\uFE5A\",\n \"\\uFE59\",\n \"\\uFE5B\",\n \"\\uFE5C\",\n \"\\uFE5B\",\n \"\\uFE5D\",\n \"\\uFE5E\",\n \"\\uFE5D\",\n \"\\uFE64\",\n \"\\uFE65\",\n \"\\uFE64\"\n ];\n\n var _LTR_RANGES_REG_EXPR = new RegExp(\n /^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/\n );\n\n var _lastArabic = false,\n _hasUbatAl,\n _hasUbatB,\n _hasUbatS,\n DIR_LTR = 0,\n DIR_RTL = 1,\n _isInVisual,\n _isInRtl,\n _isOutVisual,\n _isOutRtl,\n _isSymmetricSwapping,\n _dir = DIR_LTR;\n\n this.__bidiEngine__ = {};\n\n var _init = function(text, sourceToTargetMap) {\n if (sourceToTargetMap) {\n for (var i = 0; i < text.length; i++) {\n sourceToTargetMap[i] = i;\n }\n }\n if (_isInRtl === undefined) {\n _isInRtl = _isContextualDirRtl(text);\n }\n if (_isOutRtl === undefined) {\n _isOutRtl = _isContextualDirRtl(text);\n }\n };\n\n // for reference see 3.2 in http://unicode.org/reports/tr9/\n //\n var _getCharType = function(ch) {\n var charCode = ch.charCodeAt(),\n range = charCode >> 8,\n rangeIdx = _UNICODE_RANGES_MAP[range];\n\n if (rangeIdx !== undefined) {\n return _UNICODE_TYPES[rangeIdx * 256 + (charCode & 0xff)];\n } else if (range === 0xfc || range === 0xfd) {\n return \"AL\";\n } else if (_LTR_RANGES_REG_EXPR.test(range)) {\n //unlikely case\n return \"L\";\n } else if (range === 8) {\n // even less likely\n return \"R\";\n }\n return \"N\"; //undefined type, mark as neutral\n };\n\n var _isContextualDirRtl = function(text) {\n for (var i = 0, charType; i < text.length; i++) {\n charType = _getCharType(text.charAt(i));\n if (charType === \"L\") {\n return false;\n } else if (charType === \"R\") {\n return true;\n }\n }\n return false;\n };\n\n // for reference see 3.3.4 & 3.3.5 in http://unicode.org/reports/tr9/\n //\n var _resolveCharType = function(chars, types, resolvedTypes, index) {\n var cType = types[index],\n wType,\n nType,\n i,\n len;\n switch (cType) {\n case \"L\":\n case \"R\":\n _lastArabic = false;\n break;\n case \"N\":\n case \"AN\":\n break;\n\n case \"EN\":\n if (_lastArabic) {\n cType = \"AN\";\n }\n break;\n\n case \"AL\":\n _lastArabic = true;\n _hasUbatAl = true;\n cType = \"R\";\n break;\n\n case \"WS\":\n cType = \"N\";\n break;\n\n case \"CS\":\n if (\n index < 1 ||\n index + 1 >= types.length ||\n ((wType = resolvedTypes[index - 1]) !== \"EN\" && wType !== \"AN\") ||\n ((nType = types[index + 1]) !== \"EN\" && nType !== \"AN\")\n ) {\n cType = \"N\";\n } else if (_lastArabic) {\n nType = \"AN\";\n }\n cType = nType === wType ? nType : \"N\";\n break;\n\n case \"ES\":\n wType = index > 0 ? resolvedTypes[index - 1] : \"B\";\n cType =\n wType === \"EN\" &&\n index + 1 < types.length &&\n types[index + 1] === \"EN\"\n ? \"EN\"\n : \"N\";\n break;\n\n case \"ET\":\n if (index > 0 && resolvedTypes[index - 1] === \"EN\") {\n cType = \"EN\";\n break;\n } else if (_lastArabic) {\n cType = \"N\";\n break;\n }\n i = index + 1;\n len = types.length;\n while (i < len && types[i] === \"ET\") {\n i++;\n }\n if (i < len && types[i] === \"EN\") {\n cType = \"EN\";\n } else {\n cType = \"N\";\n }\n break;\n\n case \"NSM\":\n if (_isInVisual && !_isInRtl) {\n //V->L\n len = types.length;\n i = index + 1;\n while (i < len && types[i] === \"NSM\") {\n i++;\n }\n if (i < len) {\n var c = chars[index];\n var rtlCandidate = (c >= 0x0591 && c <= 0x08ff) || c === 0xfb1e;\n wType = types[i];\n if (rtlCandidate && (wType === \"R\" || wType === \"AL\")) {\n cType = \"R\";\n break;\n }\n }\n }\n if (index < 1 || (wType = types[index - 1]) === \"B\") {\n cType = \"N\";\n } else {\n cType = resolvedTypes[index - 1];\n }\n break;\n\n case \"B\":\n _lastArabic = false;\n _hasUbatB = true;\n cType = _dir;\n break;\n\n case \"S\":\n _hasUbatS = true;\n cType = \"N\";\n break;\n\n case \"LRE\":\n case \"RLE\":\n case \"LRO\":\n case \"RLO\":\n case \"PDF\":\n _lastArabic = false;\n break;\n case \"BN\":\n cType = \"N\";\n break;\n }\n return cType;\n };\n\n var _handleUbatS = function(types, levels, length) {\n for (var i = 0; i < length; i++) {\n if (types[i] === \"S\") {\n levels[i] = _dir;\n for (var j = i - 1; j >= 0; j--) {\n if (types[j] === \"WS\") {\n levels[j] = _dir;\n } else {\n break;\n }\n }\n }\n }\n };\n\n var _invertString = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\");\n if (levels) {\n _computeLevels(charArray, levels, { hiLevel: _dir });\n }\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return charArray.join(\"\");\n };\n\n // For reference see 3.3 in http://unicode.org/reports/tr9/\n //\n var _computeLevels = function(chars, levels, params) {\n var action,\n condition,\n i,\n index,\n newLevel,\n prevState,\n condPos = -1,\n len = chars.length,\n newState = 0,\n resolvedTypes = [],\n stateTable = _dir ? _STATE_TABLE_RTL : _STATE_TABLE_LTR,\n types = [];\n\n _lastArabic = false;\n _hasUbatAl = false;\n _hasUbatB = false;\n _hasUbatS = false;\n for (i = 0; i < len; i++) {\n types[i] = _getCharType(chars[i]);\n }\n for (index = 0; index < len; index++) {\n prevState = newState;\n resolvedTypes[index] = _resolveCharType(\n chars,\n types,\n resolvedTypes,\n index\n );\n newState = stateTable[prevState][_TYPE_NAMES_MAP[resolvedTypes[index]]];\n action = newState & 0xf0;\n newState &= 0x0f;\n levels[index] = newLevel = stateTable[newState][5];\n if (action > 0) {\n if (action === 0x10) {\n for (i = condPos; i < index; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n condition = stateTable[newState][6];\n if (condition) {\n if (condPos === -1) {\n condPos = index;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < index; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (types[index] === \"B\") {\n levels[index] = 0;\n }\n params.hiLevel |= newLevel;\n }\n if (_hasUbatS) {\n _handleUbatS(types, levels, len);\n }\n };\n\n // for reference see 3.4 in http://unicode.org/reports/tr9/\n //\n var _invertByLevel = function(\n level,\n charArray,\n sourceToTargetMap,\n levels,\n params\n ) {\n if (params.hiLevel < level) {\n return;\n }\n if (level === 1 && _dir === DIR_RTL && !_hasUbatB) {\n charArray.reverse();\n sourceToTargetMap && sourceToTargetMap.reverse();\n return;\n }\n var ch,\n high,\n end,\n low,\n len = charArray.length,\n start = 0;\n\n while (start < len) {\n if (levels[start] >= level) {\n end = start + 1;\n while (end < len && levels[end] >= level) {\n end++;\n }\n for (low = start, high = end - 1; low < high; low++, high--) {\n ch = charArray[low];\n charArray[low] = charArray[high];\n charArray[high] = ch;\n if (sourceToTargetMap) {\n ch = sourceToTargetMap[low];\n sourceToTargetMap[low] = sourceToTargetMap[high];\n sourceToTargetMap[high] = ch;\n }\n }\n start = end;\n }\n start++;\n }\n };\n\n // for reference see 7 & BD16 in http://unicode.org/reports/tr9/\n //\n var _symmetricSwap = function(charArray, levels, params) {\n if (params.hiLevel !== 0 && _isSymmetricSwapping) {\n for (var i = 0, index; i < charArray.length; i++) {\n if (levels[i] === 1) {\n index = _SWAP_TABLE.indexOf(charArray[i]);\n if (index >= 0) {\n charArray[i] = _SWAP_TABLE[index + 1];\n }\n }\n }\n }\n };\n\n var _reorder = function(text, sourceToTargetMap, levels) {\n var charArray = text.split(\"\"),\n params = { hiLevel: _dir };\n\n if (!levels) {\n levels = [];\n }\n _computeLevels(charArray, levels, params);\n _symmetricSwap(charArray, levels, params);\n _invertByLevel(DIR_RTL + 1, charArray, sourceToTargetMap, levels, params);\n _invertByLevel(DIR_RTL, charArray, sourceToTargetMap, levels, params);\n return charArray.join(\"\");\n };\n\n // doBidiReorder( text, sourceToTargetMap, levels )\n // Performs Bidi reordering by implementing Unicode Bidi algorithm.\n // Returns reordered string\n // @text [String]:\n // - input string to be reordered, this is input parameter\n // $sourceToTargetMap [Array] (optional)\n // - resultant mapping between input and output strings, this is output parameter\n // $levels [Array] (optional)\n // - array of calculated Bidi levels, , this is output parameter\n this.__bidiEngine__.doBidiReorder = function(\n text,\n sourceToTargetMap,\n levels\n ) {\n _init(text, sourceToTargetMap);\n if (!_isInVisual && _isOutVisual && !_isOutRtl) {\n // LLTR->VLTR, LRTL->VLTR\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && _isOutVisual && _isInRtl ^ _isOutRtl) {\n // VRTL->VLTR, VLTR->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _invertString(text, sourceToTargetMap, levels);\n } else if (!_isInVisual && _isOutVisual && _isOutRtl) {\n // LLTR->VRTL, LRTL->VRTL\n _dir = _isInRtl ? DIR_RTL : DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (_isInVisual && !_isInRtl && !_isOutVisual && !_isOutRtl) {\n // VLTR->LLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else if (_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // VLTR->LRTL, VRTL->LLTR\n text = _invertString(text, sourceToTargetMap);\n if (_isInRtl) {\n //LLTR -> VLTR\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n } else {\n //LRTL -> VRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n }\n } else if (_isInVisual && _isInRtl && !_isOutVisual && _isOutRtl) {\n // VRTL->LRTL\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n } else if (!_isInVisual && !_isOutVisual && _isInRtl ^ _isOutRtl) {\n // LRTL->LLTR, LLTR->LRTL\n var isSymmetricSwappingOrig = _isSymmetricSwapping;\n if (_isInRtl) {\n //LRTL->LLTR\n _dir = DIR_RTL;\n text = _reorder(text, sourceToTargetMap, levels);\n _dir = DIR_LTR;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n } else {\n //LLTR->LRTL\n _dir = DIR_LTR;\n text = _reorder(text, sourceToTargetMap, levels);\n text = _invertString(text, sourceToTargetMap);\n _dir = DIR_RTL;\n _isSymmetricSwapping = false;\n text = _reorder(text, sourceToTargetMap, levels);\n _isSymmetricSwapping = isSymmetricSwappingOrig;\n text = _invertString(text, sourceToTargetMap);\n }\n }\n return text;\n };\n\n /**\n * @name setOptions( options )\n * @function\n * Sets options for Bidi conversion\n * @param {Object}:\n * - isInputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isInputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong character of input string)\n * - isOutputVisual {boolean} (defaults to false): allowed values: true(Visual mode), false(Logical mode)\n * - isOutputRtl {boolean}: allowed values true(Right-to-left direction), false (Left-to-right directiion), undefined(Contectual direction, i.e.direction defined by first strong characterof input string)\n * - isSymmetricSwapping {boolean} (defaults to false): allowed values true(needs symmetric swapping), false (no need in symmetric swapping),\n */\n this.__bidiEngine__.setOptions = function(options) {\n if (options) {\n _isInVisual = options.isInputVisual;\n _isOutVisual = options.isOutputVisual;\n _isInRtl = options.isInputRtl;\n _isOutRtl = options.isOutputRtl;\n _isSymmetricSwapping = options.isSymmetricSwapping;\n }\n };\n\n this.__bidiEngine__.setOptions(options);\n return this.__bidiEngine__;\n };\n\n var _bidiUnicodeTypes = bidiUnicodeTypes;\n\n var bidiEngine = new jsPDF.__bidiEngine__({ isInputVisual: true });\n\n var bidiEngineFunction = function(args) {\n var text = args.text;\n var x = args.x;\n var y = args.y;\n var options = args.options || {};\n var mutex = args.mutex || {};\n var lang = options.lang;\n var tmpText = [];\n\n options.isInputVisual =\n typeof options.isInputVisual === \"boolean\" ? options.isInputVisual : true;\n bidiEngine.setOptions(options);\n\n if (Object.prototype.toString.call(text) === \"[object Array]\") {\n var i = 0;\n tmpText = [];\n for (i = 0; i < text.length; i += 1) {\n if (Object.prototype.toString.call(text[i]) === \"[object Array]\") {\n tmpText.push([\n bidiEngine.doBidiReorder(text[i][0]),\n text[i][1],\n text[i][2]\n ]);\n } else {\n tmpText.push([bidiEngine.doBidiReorder(text[i])]);\n }\n }\n args.text = tmpText;\n } else {\n args.text = bidiEngine.doBidiReorder(text);\n }\n bidiEngine.setOptions({ isInputVisual: true });\n };\n\n jsPDF.API.events.push([\"postProcessText\", bidiEngineFunction]);\n})(jsPDF);\n","/* eslint-disable no-control-regex */\n/************************************************\n * Title : custom font *\n * Start Data : 2017. 01. 22. *\n * Comment : TEXT API *\n ************************************************/\n\n/******************************\n * jsPDF extension API Design *\n * ****************************/\n\nimport { jsPDF } from \"../jspdf.js\";\n\njsPDF.API.TTFFont = (function() {\n /************************************************************************/\n /* function : open */\n /* comment : Decode the encoded ttf content and create a TTFFont object. */\n /************************************************************************/\n TTFFont.open = function(file) {\n return new TTFFont(file);\n };\n /***************************************************************/\n /* function : TTFFont gernerator */\n /* comment : Decode TTF contents are parsed, Data, */\n /* Subset object is created, and registerTTF function is called.*/\n /***************************************************************/\n function TTFFont(rawData) {\n var data;\n this.rawData = rawData;\n data = this.contents = new Data(rawData);\n this.contents.pos = 4;\n if (data.readString(4) === \"ttcf\") {\n throw new Error(\"TTCF not supported.\");\n } else {\n data.pos = 0;\n this.parse();\n this.subset = new Subset(this);\n this.registerTTF();\n }\n }\n /********************************************************/\n /* function : parse */\n /* comment : TTF Parses the file contents by each table.*/\n /********************************************************/\n TTFFont.prototype.parse = function() {\n this.directory = new Directory(this.contents);\n this.head = new HeadTable(this);\n this.name = new NameTable(this);\n this.cmap = new CmapTable(this);\n this.toUnicode = {};\n this.hhea = new HheaTable(this);\n this.maxp = new MaxpTable(this);\n this.hmtx = new HmtxTable(this);\n this.post = new PostTable(this);\n this.os2 = new OS2Table(this);\n this.loca = new LocaTable(this);\n this.glyf = new GlyfTable(this);\n this.ascender =\n (this.os2.exists && this.os2.ascender) || this.hhea.ascender;\n this.decender =\n (this.os2.exists && this.os2.decender) || this.hhea.decender;\n this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;\n return (this.bbox = [\n this.head.xMin,\n this.head.yMin,\n this.head.xMax,\n this.head.yMax\n ]);\n };\n /***************************************************************/\n /* function : registerTTF */\n /* comment : Get the value to assign pdf font descriptors. */\n /***************************************************************/\n TTFFont.prototype.registerTTF = function() {\n var e, hi, low, raw, _ref;\n this.scaleFactor = 1000.0 / this.head.unitsPerEm;\n this.bbox = function() {\n var _i, _len, _ref, _results;\n _ref = this.bbox;\n _results = [];\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n e = _ref[_i];\n _results.push(Math.round(e * this.scaleFactor));\n }\n return _results;\n }.call(this);\n this.stemV = 0;\n if (this.post.exists) {\n raw = this.post.italic_angle;\n hi = raw >> 16;\n low = raw & 0xff;\n if ((hi & 0x8000) !== 0) {\n hi = -((hi ^ 0xffff) + 1);\n }\n this.italicAngle = +(\"\" + hi + \".\" + low);\n } else {\n this.italicAngle = 0;\n }\n this.ascender = Math.round(this.ascender * this.scaleFactor);\n this.decender = Math.round(this.decender * this.scaleFactor);\n this.lineGap = Math.round(this.lineGap * this.scaleFactor);\n this.capHeight = (this.os2.exists && this.os2.capHeight) || this.ascender;\n this.xHeight = (this.os2.exists && this.os2.xHeight) || 0;\n this.familyClass = ((this.os2.exists && this.os2.familyClass) || 0) >> 8;\n this.isSerif =\n (_ref = this.familyClass) === 1 ||\n _ref === 2 ||\n _ref === 3 ||\n _ref === 4 ||\n _ref === 5 ||\n _ref === 7;\n this.isScript = this.familyClass === 10;\n this.flags = 0;\n if (this.post.isFixedPitch) {\n this.flags |= 1 << 0;\n }\n if (this.isSerif) {\n this.flags |= 1 << 1;\n }\n if (this.isScript) {\n this.flags |= 1 << 3;\n }\n if (this.italicAngle !== 0) {\n this.flags |= 1 << 6;\n }\n this.flags |= 1 << 5;\n if (!this.cmap.unicode) {\n throw new Error(\"No unicode cmap for font\");\n }\n };\n TTFFont.prototype.characterToGlyph = function(character) {\n var _ref;\n return (\n ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) ||\n 0\n );\n };\n TTFFont.prototype.widthOfGlyph = function(glyph) {\n var scale;\n scale = 1000.0 / this.head.unitsPerEm;\n return this.hmtx.forGlyph(glyph).advance * scale;\n };\n TTFFont.prototype.widthOfString = function(string, size, charSpace) {\n var charCode, i, scale, width, _ref;\n string = \"\" + string;\n width = 0;\n for (\n i = 0, _ref = string.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n charCode = string.charCodeAt(i);\n width +=\n this.widthOfGlyph(this.characterToGlyph(charCode)) +\n charSpace * (1000 / size) || 0;\n }\n scale = size / 1000;\n return width * scale;\n };\n TTFFont.prototype.lineHeight = function(size, includeGap) {\n var gap;\n if (includeGap == null) {\n includeGap = false;\n }\n gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.decender) / 1000) * size;\n };\n return TTFFont;\n})();\n\n/************************************************************************************************/\n/* function : Data */\n/* comment : The ttf data decoded and stored in an array is read and written to the Data object.*/\n/************************************************************************************************/\nvar Data = (function() {\n function Data(data) {\n this.data = data != null ? data : [];\n this.pos = 0;\n this.length = this.data.length;\n }\n Data.prototype.readByte = function() {\n return this.data[this.pos++];\n };\n Data.prototype.writeByte = function(byte) {\n return (this.data[this.pos++] = byte);\n };\n Data.prototype.readUInt32 = function() {\n var b1, b2, b3, b4;\n b1 = this.readByte() * 0x1000000;\n b2 = this.readByte() << 16;\n b3 = this.readByte() << 8;\n b4 = this.readByte();\n return b1 + b2 + b3 + b4;\n };\n Data.prototype.writeUInt32 = function(val) {\n this.writeByte((val >>> 24) & 0xff);\n this.writeByte((val >> 16) & 0xff);\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt32 = function() {\n var int;\n int = this.readUInt32();\n if (int >= 0x80000000) {\n return int - 0x100000000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt32 = function(val) {\n if (val < 0) {\n val += 0x100000000;\n }\n return this.writeUInt32(val);\n };\n Data.prototype.readUInt16 = function() {\n var b1, b2;\n b1 = this.readByte() << 8;\n b2 = this.readByte();\n return b1 | b2;\n };\n Data.prototype.writeUInt16 = function(val) {\n this.writeByte((val >> 8) & 0xff);\n return this.writeByte(val & 0xff);\n };\n Data.prototype.readInt16 = function() {\n var int;\n int = this.readUInt16();\n if (int >= 0x8000) {\n return int - 0x10000;\n } else {\n return int;\n }\n };\n Data.prototype.writeInt16 = function(val) {\n if (val < 0) {\n val += 0x10000;\n }\n return this.writeUInt16(val);\n };\n Data.prototype.readString = function(length) {\n var i, ret;\n ret = [];\n for (\n i = 0;\n 0 <= length ? i < length : i > length;\n i = 0 <= length ? ++i : --i\n ) {\n ret[i] = String.fromCharCode(this.readByte());\n }\n return ret.join(\"\");\n };\n Data.prototype.writeString = function(val) {\n var i, _ref, _results;\n _results = [];\n for (\n i = 0, _ref = val.length;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n _results.push(this.writeByte(val.charCodeAt(i)));\n }\n return _results;\n };\n /*Data.prototype.stringAt = function (pos, length) {\n this.pos = pos;\n return this.readString(length);\n };*/\n Data.prototype.readShort = function() {\n return this.readInt16();\n };\n Data.prototype.writeShort = function(val) {\n return this.writeInt16(val);\n };\n Data.prototype.readLongLong = function() {\n var b1, b2, b3, b4, b5, b6, b7, b8;\n b1 = this.readByte();\n b2 = this.readByte();\n b3 = this.readByte();\n b4 = this.readByte();\n b5 = this.readByte();\n b6 = this.readByte();\n b7 = this.readByte();\n b8 = this.readByte();\n if (b1 & 0x80) {\n return (\n ((b1 ^ 0xff) * 0x100000000000000 +\n (b2 ^ 0xff) * 0x1000000000000 +\n (b3 ^ 0xff) * 0x10000000000 +\n (b4 ^ 0xff) * 0x100000000 +\n (b5 ^ 0xff) * 0x1000000 +\n (b6 ^ 0xff) * 0x10000 +\n (b7 ^ 0xff) * 0x100 +\n (b8 ^ 0xff) +\n 1) *\n -1\n );\n }\n return (\n b1 * 0x100000000000000 +\n b2 * 0x1000000000000 +\n b3 * 0x10000000000 +\n b4 * 0x100000000 +\n b5 * 0x1000000 +\n b6 * 0x10000 +\n b7 * 0x100 +\n b8\n );\n };\n Data.prototype.writeLongLong = function(val) {\n var high, low;\n high = Math.floor(val / 0x100000000);\n low = val & 0xffffffff;\n this.writeByte((high >> 24) & 0xff);\n this.writeByte((high >> 16) & 0xff);\n this.writeByte((high >> 8) & 0xff);\n this.writeByte(high & 0xff);\n this.writeByte((low >> 24) & 0xff);\n this.writeByte((low >> 16) & 0xff);\n this.writeByte((low >> 8) & 0xff);\n return this.writeByte(low & 0xff);\n };\n Data.prototype.readInt = function() {\n return this.readInt32();\n };\n Data.prototype.writeInt = function(val) {\n return this.writeInt32(val);\n };\n /*Data.prototype.slice = function (start, end) {\n return this.data.slice(start, end);\n };*/\n Data.prototype.read = function(bytes) {\n var buf, i;\n buf = [];\n for (\n i = 0;\n 0 <= bytes ? i < bytes : i > bytes;\n i = 0 <= bytes ? ++i : --i\n ) {\n buf.push(this.readByte());\n }\n return buf;\n };\n Data.prototype.write = function(bytes) {\n var byte, i, _len, _results;\n _results = [];\n for (i = 0, _len = bytes.length; i < _len; i++) {\n byte = bytes[i];\n _results.push(this.writeByte(byte));\n }\n return _results;\n };\n return Data;\n})();\n\nvar Directory = (function() {\n var checksum;\n\n /*****************************************************************************************************/\n /* function : Directory generator */\n /* comment : Initialize the offset, tag, length, and checksum for each table for the font to be used.*/\n /*****************************************************************************************************/\n function Directory(data) {\n var entry, i, _ref;\n this.scalarType = data.readInt();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n this.tables = {};\n for (\n i = 0, _ref = this.tableCount;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n entry = {\n tag: data.readString(4),\n checksum: data.readInt(),\n offset: data.readInt(),\n length: data.readInt()\n };\n this.tables[entry.tag] = entry;\n }\n }\n /********************************************************************************************************/\n /* function : encode */\n /* comment : It encodes and stores the font table object and information used for the directory object. */\n /********************************************************************************************************/\n Directory.prototype.encode = function(tables) {\n var adjustment,\n directory,\n directoryLength,\n entrySelector,\n headOffset,\n log2,\n offset,\n rangeShift,\n searchRange,\n sum,\n table,\n tableCount,\n tableData,\n tag;\n tableCount = Object.keys(tables).length;\n log2 = Math.log(2);\n searchRange = Math.floor(Math.log(tableCount) / log2) * 16;\n entrySelector = Math.floor(searchRange / log2);\n rangeShift = tableCount * 16 - searchRange;\n directory = new Data();\n directory.writeInt(this.scalarType);\n directory.writeShort(tableCount);\n directory.writeShort(searchRange);\n directory.writeShort(entrySelector);\n directory.writeShort(rangeShift);\n directoryLength = tableCount * 16;\n offset = directory.pos + directoryLength;\n headOffset = null;\n tableData = [];\n for (tag in tables) {\n table = tables[tag];\n directory.writeString(tag);\n directory.writeInt(checksum(table));\n directory.writeInt(offset);\n directory.writeInt(table.length);\n tableData = tableData.concat(table);\n if (tag === \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.push(0);\n offset++;\n }\n }\n directory.write(tableData);\n sum = checksum(directory.data);\n adjustment = 0xb1b0afba - sum;\n directory.pos = headOffset + 8;\n directory.writeUInt32(adjustment);\n return directory.data;\n };\n /***************************************************************/\n /* function : checksum */\n /* comment : Duplicate the table for the tag. */\n /***************************************************************/\n checksum = function(data) {\n var i, sum, tmp, _ref;\n data = __slice.call(data);\n while (data.length % 4) {\n data.push(0);\n }\n tmp = new Data(data);\n sum = 0;\n for (i = 0, _ref = data.length; i < _ref; i = i += 4) {\n sum += tmp.readUInt32();\n }\n return sum & 0xffffffff;\n };\n return Directory;\n})();\n\nvar Table,\n __hasProp = {}.hasOwnProperty,\n __extends = function(child, parent) {\n for (var key in parent) {\n if (__hasProp.call(parent, key)) child[key] = parent[key];\n }\n\n function ctor() {\n this.constructor = child;\n }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n\n/***************************************************************/\n/* function : Table */\n/* comment : Save info for each table, and parse the table. */\n/***************************************************************/\nTable = (function() {\n function Table(file) {\n var info;\n this.file = file;\n info = this.file.directory.tables[this.tag];\n this.exists = !!info;\n if (info) {\n (this.offset = info.offset), (this.length = info.length);\n this.parse(this.file.contents);\n }\n }\n Table.prototype.parse = function() {};\n Table.prototype.encode = function() {};\n Table.prototype.raw = function() {\n if (!this.exists) {\n return null;\n }\n this.file.contents.pos = this.offset;\n return this.file.contents.read(this.length);\n };\n return Table;\n})();\n\nvar HeadTable = (function(_super) {\n __extends(HeadTable, _super);\n\n function HeadTable() {\n return HeadTable.__super__.constructor.apply(this, arguments);\n }\n HeadTable.prototype.tag = \"head\";\n HeadTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.revision = data.readInt();\n this.checkSumAdjustment = data.readInt();\n this.magicNumber = data.readInt();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.readLongLong();\n this.modified = data.readLongLong();\n this.xMin = data.readShort();\n this.yMin = data.readShort();\n this.xMax = data.readShort();\n this.yMax = data.readShort();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort();\n this.indexToLocFormat = data.readShort();\n return (this.glyphDataFormat = data.readShort());\n };\n HeadTable.prototype.encode = function(indexToLocFormat) {\n var table;\n table = new Data();\n table.writeInt(this.version);\n table.writeInt(this.revision);\n table.writeInt(this.checkSumAdjustment);\n table.writeInt(this.magicNumber);\n table.writeShort(this.flags);\n table.writeShort(this.unitsPerEm);\n table.writeLongLong(this.created);\n table.writeLongLong(this.modified);\n table.writeShort(this.xMin);\n table.writeShort(this.yMin);\n table.writeShort(this.xMax);\n table.writeShort(this.yMax);\n table.writeShort(this.macStyle);\n table.writeShort(this.lowestRecPPEM);\n table.writeShort(this.fontDirectionHint);\n table.writeShort(indexToLocFormat);\n table.writeShort(this.glyphDataFormat);\n return table.data;\n };\n return HeadTable;\n})(Table);\n\n/************************************************************************************/\n/* function : CmapEntry */\n/* comment : Cmap Initializes and encodes object information (required by pdf spec).*/\n/************************************************************************************/\nvar CmapEntry = (function() {\n function CmapEntry(data, offset) {\n var code,\n count,\n endCode,\n glyphId,\n glyphIds,\n i,\n idDelta,\n idRangeOffset,\n index,\n saveOffset,\n segCount,\n segCountX2,\n start,\n startCode,\n tail,\n _j,\n _k,\n _len;\n this.platformID = data.readUInt16();\n this.encodingID = data.readShort();\n this.offset = offset + data.readInt();\n saveOffset = data.pos;\n data.pos = this.offset;\n this.format = data.readUInt16();\n this.length = data.readUInt16();\n this.language = data.readUInt16();\n this.isUnicode =\n (this.platformID === 3 && this.encodingID === 1 && this.format === 4) ||\n (this.platformID === 0 && this.format === 4);\n this.codeMap = {};\n switch (this.format) {\n case 0:\n for (i = 0; i < 256; ++i) {\n this.codeMap[i] = data.readByte();\n }\n break;\n case 4:\n segCountX2 = data.readUInt16();\n segCount = segCountX2 / 2;\n data.pos += 6;\n endCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n data.pos += 2;\n startCode = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idDelta = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n idRangeOffset = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= segCount ? _j < segCount : _j > segCount;\n i = 0 <= segCount ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n count = (this.length - data.pos + this.offset) / 2;\n glyphIds = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= count ? _j < count : _j > count;\n i = 0 <= count ? ++_j : --_j\n ) {\n _results.push(data.readUInt16());\n }\n return _results;\n })();\n for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {\n tail = endCode[i];\n start = startCode[i];\n for (\n code = _k = start;\n start <= tail ? _k <= tail : _k >= tail;\n code = start <= tail ? ++_k : --_k\n ) {\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n this.codeMap[code] = glyphId & 0xffff;\n }\n }\n }\n data.pos = saveOffset;\n }\n CmapEntry.encode = function(charmap, encoding) {\n var charMap,\n code,\n codeMap,\n codes,\n delta,\n deltas,\n diff,\n endCode,\n endCodes,\n entrySelector,\n glyphIDs,\n i,\n id,\n indexes,\n last,\n map,\n nextID,\n offset,\n old,\n rangeOffsets,\n rangeShift,\n searchRange,\n segCount,\n segCountX2,\n startCode,\n startCodes,\n startGlyph,\n subtable,\n _i,\n _j,\n _k,\n _l,\n _len,\n _len1,\n _len2,\n _len3,\n _len4,\n _len5,\n _len6,\n _len7,\n _m,\n _n,\n _name,\n _o,\n _p,\n _q;\n subtable = new Data();\n codes = Object.keys(charmap).sort(function(a, b) {\n return a - b;\n });\n switch (encoding) {\n case \"macroman\":\n id = 0;\n indexes = (function() {\n var _results = [];\n for (i = 0; i < 256; ++i) {\n _results.push(0);\n }\n return _results;\n })();\n map = {\n 0: 0\n };\n codeMap = {};\n for (_i = 0, _len = codes.length; _i < _len; _i++) {\n code = codes[_i];\n if (map[(_name = charmap[code])] == null) {\n map[_name] = ++id;\n }\n codeMap[code] = {\n old: charmap[code],\n new: map[charmap[code]]\n };\n indexes[code] = map[charmap[code]];\n }\n subtable.writeUInt16(1);\n subtable.writeUInt16(0);\n subtable.writeUInt32(12);\n subtable.writeUInt16(0);\n subtable.writeUInt16(262);\n subtable.writeUInt16(0);\n subtable.write(indexes);\n return {\n charMap: codeMap,\n subtable: subtable.data,\n maxGlyphID: id + 1\n };\n case \"unicode\":\n startCodes = [];\n endCodes = [];\n nextID = 0;\n map = {};\n charMap = {};\n last = diff = null;\n for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {\n code = codes[_j];\n old = charmap[code];\n if (map[old] == null) {\n map[old] = ++nextID;\n }\n charMap[code] = {\n old: old,\n new: map[old]\n };\n delta = map[old] - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xffff);\n startCodes.push(0xffff);\n segCount = startCodes.length;\n segCountX2 = segCount * 2;\n searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);\n entrySelector = Math.log(searchRange / 2) / Math.LN2;\n rangeShift = 2 * segCount - searchRange;\n deltas = [];\n rangeOffsets = [];\n glyphIDs = [];\n for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {\n startCode = startCodes[i];\n endCode = endCodes[i];\n if (startCode === 0xffff) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n startGlyph = charMap[startCode][\"new\"];\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIDs.length + segCount - i));\n for (\n code = _l = startCode;\n startCode <= endCode ? _l <= endCode : _l >= endCode;\n code = startCode <= endCode ? ++_l : --_l\n ) {\n glyphIDs.push(charMap[code][\"new\"]);\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n subtable.writeUInt16(3);\n subtable.writeUInt16(1);\n subtable.writeUInt32(12);\n subtable.writeUInt16(4);\n subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);\n subtable.writeUInt16(0);\n subtable.writeUInt16(segCountX2);\n subtable.writeUInt16(searchRange);\n subtable.writeUInt16(entrySelector);\n subtable.writeUInt16(rangeShift);\n for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {\n code = endCodes[_m];\n subtable.writeUInt16(code);\n }\n subtable.writeUInt16(0);\n for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {\n code = startCodes[_n];\n subtable.writeUInt16(code);\n }\n for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {\n delta = deltas[_o];\n subtable.writeUInt16(delta);\n }\n for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {\n offset = rangeOffsets[_p];\n subtable.writeUInt16(offset);\n }\n for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {\n id = glyphIDs[_q];\n subtable.writeUInt16(id);\n }\n return {\n charMap: charMap,\n subtable: subtable.data,\n maxGlyphID: nextID + 1\n };\n }\n };\n return CmapEntry;\n})();\n\nvar CmapTable = (function(_super) {\n __extends(CmapTable, _super);\n\n function CmapTable() {\n return CmapTable.__super__.constructor.apply(this, arguments);\n }\n CmapTable.prototype.tag = \"cmap\";\n CmapTable.prototype.parse = function(data) {\n var entry, i, tableCount;\n data.pos = this.offset;\n this.version = data.readUInt16();\n tableCount = data.readUInt16();\n this.tables = [];\n this.unicode = null;\n for (\n i = 0;\n 0 <= tableCount ? i < tableCount : i > tableCount;\n i = 0 <= tableCount ? ++i : --i\n ) {\n entry = new CmapEntry(data, this.offset);\n this.tables.push(entry);\n if (entry.isUnicode) {\n if (this.unicode == null) {\n this.unicode = entry;\n }\n }\n }\n return true;\n };\n /*************************************************************************/\n /* function : encode */\n /* comment : Encode the cmap table corresponding to the input character. */\n /*************************************************************************/\n CmapTable.encode = function(charmap, encoding) {\n var result, table;\n if (encoding == null) {\n encoding = \"macroman\";\n }\n result = CmapEntry.encode(charmap, encoding);\n table = new Data();\n table.writeUInt16(0);\n table.writeUInt16(1);\n result.table = table.data.concat(result.subtable);\n return result;\n };\n return CmapTable;\n})(Table);\n\nvar HheaTable = (function(_super) {\n __extends(HheaTable, _super);\n\n function HheaTable() {\n return HheaTable.__super__.constructor.apply(this, arguments);\n }\n HheaTable.prototype.tag = \"hhea\";\n HheaTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.ascender = data.readShort();\n this.decender = data.readShort();\n this.lineGap = data.readShort();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort();\n this.minRightSideBearing = data.readShort();\n this.xMaxExtent = data.readShort();\n this.caretSlopeRise = data.readShort();\n this.caretSlopeRun = data.readShort();\n this.caretOffset = data.readShort();\n data.pos += 4 * 2;\n this.metricDataFormat = data.readShort();\n return (this.numberOfMetrics = data.readUInt16());\n };\n /*HheaTable.prototype.encode = function (ids) {\n var i, table, _i, _ref;\n table = new Data;\n table.writeInt(this.version);\n table.writeShort(this.ascender);\n table.writeShort(this.decender);\n table.writeShort(this.lineGap);\n table.writeShort(this.advanceWidthMax);\n table.writeShort(this.minLeftSideBearing);\n table.writeShort(this.minRightSideBearing);\n table.writeShort(this.xMaxExtent);\n table.writeShort(this.caretSlopeRise);\n table.writeShort(this.caretSlopeRun);\n table.writeShort(this.caretOffset);\n for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n table.writeByte(0);\n }\n table.writeShort(this.metricDataFormat);\n table.writeUInt16(ids.length);\n return table.data;\n };*/\n return HheaTable;\n})(Table);\n\nvar OS2Table = (function(_super) {\n __extends(OS2Table, _super);\n\n function OS2Table() {\n return OS2Table.__super__.constructor.apply(this, arguments);\n }\n OS2Table.prototype.tag = \"OS/2\";\n OS2Table.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readUInt16();\n this.averageCharWidth = data.readShort();\n this.weightClass = data.readUInt16();\n this.widthClass = data.readUInt16();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort();\n this.ySubscriptYSize = data.readShort();\n this.ySubscriptXOffset = data.readShort();\n this.ySubscriptYOffset = data.readShort();\n this.ySuperscriptXSize = data.readShort();\n this.ySuperscriptYSize = data.readShort();\n this.ySuperscriptXOffset = data.readShort();\n this.ySuperscriptYOffset = data.readShort();\n this.yStrikeoutSize = data.readShort();\n this.yStrikeoutPosition = data.readShort();\n this.familyClass = data.readShort();\n this.panose = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 10; ++i) {\n _results.push(data.readByte());\n }\n return _results;\n })();\n this.charRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 4; ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort();\n this.descent = data.readShort();\n this.lineGap = data.readShort();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = (function() {\n var i, _results;\n _results = [];\n for (i = 0; i < 2; i = ++i) {\n _results.push(data.readInt());\n }\n return _results;\n })();\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n return (this.maxContext = data.readShort());\n }\n }\n };\n /*OS2Table.prototype.encode = function () {\n return this.raw();\n };*/\n return OS2Table;\n})(Table);\n\nvar PostTable = (function(_super) {\n var POSTSCRIPT_GLYPHS;\n __extends(PostTable, _super);\n\n function PostTable() {\n return PostTable.__super__.constructor.apply(this, arguments);\n }\n PostTable.prototype.tag = \"post\";\n PostTable.prototype.parse = function(data) {\n var length, numberOfGlyphs, _results;\n data.pos = this.offset;\n this.format = data.readInt();\n this.italicAngle = data.readInt();\n this.underlinePosition = data.readShort();\n this.underlineThickness = data.readShort();\n this.isFixedPitch = data.readInt();\n this.minMemType42 = data.readInt();\n this.maxMemType42 = data.readInt();\n this.minMemType1 = data.readInt();\n this.maxMemType1 = data.readInt();\n switch (this.format) {\n case 0x00010000:\n break;\n case 0x00020000:\n numberOfGlyphs = data.readUInt16();\n this.glyphNameIndex = [];\n var i;\n for (\n i = 0;\n 0 <= numberOfGlyphs ? i < numberOfGlyphs : i > numberOfGlyphs;\n i = 0 <= numberOfGlyphs ? ++i : --i\n ) {\n this.glyphNameIndex.push(data.readUInt16());\n }\n this.names = [];\n _results = [];\n while (data.pos < this.offset + this.length) {\n length = data.readByte();\n _results.push(this.names.push(data.readString(length)));\n }\n return _results;\n case 0x00025000:\n numberOfGlyphs = data.readUInt16();\n return (this.offsets = data.read(numberOfGlyphs));\n case 0x00030000:\n break;\n case 0x00040000:\n return (this.map = function() {\n var _j, _ref, _results1;\n _results1 = [];\n for (\n i = _j = 0, _ref = this.file.maxp.numGlyphs;\n 0 <= _ref ? _j < _ref : _j > _ref;\n i = 0 <= _ref ? ++_j : --_j\n ) {\n _results1.push(data.readUInt32());\n }\n return _results1;\n }.call(this));\n }\n };\n /*PostTable.prototype.glyphFor = function (code) {\n var index;\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 0x00020000:\n index = this.glyphNameIndex[code];\n if (index <= 257) {\n return POSTSCRIPT_GLYPHS[index];\n }\n else {\n return this.names[index - 258] || '.notdef';\n }\n break;\n case 0x00025000:\n return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';\n case 0x00030000:\n return '.notdef';\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };*/\n /*PostTable.prototype.encode = function (mapping) {\n var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;\n if (!this.exists) {\n return null;\n }\n raw = this.raw();\n if (this.format === 0x00030000) {\n return raw;\n }\n table = new Data(raw.slice(0, 32));\n table.writeUInt32(0x00020000);\n table.pos = 32;\n indexes = [];\n strings = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n post = this.glyphFor(id);\n position = POSTSCRIPT_GLYPHS.indexOf(post);\n if (position !== -1) {\n indexes.push(position);\n }\n else {\n indexes.push(257 + strings.length);\n strings.push(post);\n }\n }\n table.writeUInt16(Object.keys(mapping).length);\n for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {\n index = indexes[_j];\n table.writeUInt16(index);\n }\n for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {\n string = strings[_k];\n table.writeByte(string.length);\n table.writeString(string);\n }\n return table.data;\n };*/\n POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\\nzero one two three four five six seven eight nine colon semicolon less equal greater\\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\\nbracketleft backslash bracketright asciicircum underscore grave\\na b c d e f g h i j k l m n o p q r s t u v w x y z\\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\\nsterling section bullet paragraph germandbls registered copyright trademark acute\\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\\nCacute cacute Ccaron ccaron dcroat\".split(\n /\\s+/g\n );\n return PostTable;\n})(Table);\n\n/*********************************************************************************************************/\n/* function : NameEntry */\n/* comment : Store copyright information, platformID, encodingID, and languageID in the NameEntry object.*/\n/*********************************************************************************************************/\nvar NameEntry = (function() {\n function NameEntry(raw, entry) {\n this.raw = raw;\n this.length = raw.length;\n this.platformID = entry.platformID;\n this.encodingID = entry.encodingID;\n this.languageID = entry.languageID;\n }\n return NameEntry;\n})();\n\nvar NameTable = (function(_super) {\n var subsetTag;\n __extends(NameTable, _super);\n\n function NameTable() {\n return NameTable.__super__.constructor.apply(this, arguments);\n }\n NameTable.prototype.tag = \"name\";\n NameTable.prototype.parse = function(data) {\n var count,\n entries,\n entry,\n i,\n name,\n stringOffset,\n strings,\n text,\n _j,\n _len,\n _name;\n data.pos = this.offset;\n data.readShort(); //format\n count = data.readShort();\n stringOffset = data.readShort();\n entries = [];\n for (\n i = 0;\n 0 <= count ? i < count : i > count;\n i = 0 <= count ? ++i : --i\n ) {\n entries.push({\n platformID: data.readShort(),\n encodingID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: this.offset + stringOffset + data.readShort()\n });\n }\n strings = {};\n for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {\n entry = entries[i];\n data.pos = entry.offset;\n text = data.readString(entry.length);\n name = new NameEntry(text, entry);\n if (strings[(_name = entry.nameID)] == null) {\n strings[_name] = [];\n }\n strings[entry.nameID].push(name);\n }\n this.strings = strings;\n this.copyright = strings[0];\n this.fontFamily = strings[1];\n this.fontSubfamily = strings[2];\n this.uniqueSubfamily = strings[3];\n this.fontName = strings[4];\n this.version = strings[5];\n try {\n this.postscriptName = strings[6][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n } catch (e) {\n this.postscriptName = strings[4][0].raw.replace(\n /[\\x00-\\x19\\x80-\\xff]/g,\n \"\"\n );\n }\n this.trademark = strings[7];\n this.manufacturer = strings[8];\n this.designer = strings[9];\n this.description = strings[10];\n this.vendorUrl = strings[11];\n this.designerUrl = strings[12];\n this.license = strings[13];\n this.licenseUrl = strings[14];\n this.preferredFamily = strings[15];\n this.preferredSubfamily = strings[17];\n this.compatibleFull = strings[18];\n return (this.sampleText = strings[19]);\n };\n subsetTag = \"AAAAAA\";\n /*NameTable.prototype.encode = function () {\n var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;\n strings = {};\n _ref = this.strings;\n for (id in _ref) {\n val = _ref[id];\n strings[id] = val;\n }\n postscriptName = new NameEntry(\"\" + subsetTag + \"+\" + this.postscriptName, {\n platformID: 1\n , encodingID: 0\n , languageID: 0\n });\n strings[6] = [postscriptName];\n subsetTag = successorOf(subsetTag);\n strCount = 0;\n for (id in strings) {\n list = strings[id];\n if (list != null) {\n strCount += list.length;\n }\n }\n table = new Data;\n strTable = new Data;\n table.writeShort(0);\n table.writeShort(strCount);\n table.writeShort(6 + 12 * strCount);\n for (nameID in strings) {\n list = strings[nameID];\n if (list != null) {\n for (_i = 0, _len = list.length; _i < _len; _i++) {\n string = list[_i];\n table.writeShort(string.platformID);\n table.writeShort(string.encodingID);\n table.writeShort(string.languageID);\n table.writeShort(nameID);\n table.writeShort(string.length);\n table.writeShort(strTable.pos);\n strTable.writeString(string.raw);\n }\n }\n }\n return nameTable = {\n postscriptName: postscriptName.raw\n , table: table.data.concat(strTable.data)\n };\n };*/\n return NameTable;\n})(Table);\n\nvar MaxpTable = (function(_super) {\n __extends(MaxpTable, _super);\n\n function MaxpTable() {\n return MaxpTable.__super__.constructor.apply(this, arguments);\n }\n MaxpTable.prototype.tag = \"maxp\";\n MaxpTable.prototype.parse = function(data) {\n data.pos = this.offset;\n this.version = data.readInt();\n this.numGlyphs = data.readUInt16();\n this.maxPoints = data.readUInt16();\n this.maxContours = data.readUInt16();\n this.maxCompositePoints = data.readUInt16();\n this.maxComponentContours = data.readUInt16();\n this.maxZones = data.readUInt16();\n this.maxTwilightPoints = data.readUInt16();\n this.maxStorage = data.readUInt16();\n this.maxFunctionDefs = data.readUInt16();\n this.maxInstructionDefs = data.readUInt16();\n this.maxStackElements = data.readUInt16();\n this.maxSizeOfInstructions = data.readUInt16();\n this.maxComponentElements = data.readUInt16();\n return (this.maxComponentDepth = data.readUInt16());\n };\n /*MaxpTable.prototype.encode = function (ids) {\n var table;\n table = new Data;\n table.writeInt(this.version);\n table.writeUInt16(ids.length);\n table.writeUInt16(this.maxPoints);\n table.writeUInt16(this.maxContours);\n table.writeUInt16(this.maxCompositePoints);\n table.writeUInt16(this.maxComponentContours);\n table.writeUInt16(this.maxZones);\n table.writeUInt16(this.maxTwilightPoints);\n table.writeUInt16(this.maxStorage);\n table.writeUInt16(this.maxFunctionDefs);\n table.writeUInt16(this.maxInstructionDefs);\n table.writeUInt16(this.maxStackElements);\n table.writeUInt16(this.maxSizeOfInstructions);\n table.writeUInt16(this.maxComponentElements);\n table.writeUInt16(this.maxComponentDepth);\n return table.data;\n };*/\n return MaxpTable;\n})(Table);\n\nvar HmtxTable = (function(_super) {\n __extends(HmtxTable, _super);\n\n function HmtxTable() {\n return HmtxTable.__super__.constructor.apply(this, arguments);\n }\n HmtxTable.prototype.tag = \"hmtx\";\n HmtxTable.prototype.parse = function(data) {\n var i, last, lsbCount, m, _j, _ref, _results;\n data.pos = this.offset;\n this.metrics = [];\n for (\n i = 0, _ref = this.file.hhea.numberOfMetrics;\n 0 <= _ref ? i < _ref : i > _ref;\n i = 0 <= _ref ? ++i : --i\n ) {\n this.metrics.push({\n advance: data.readUInt16(),\n lsb: data.readInt16()\n });\n }\n lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;\n this.leftSideBearings = (function() {\n var _j, _results;\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(data.readInt16());\n }\n return _results;\n })();\n this.widths = function() {\n var _j, _len, _ref1, _results;\n _ref1 = this.metrics;\n _results = [];\n for (_j = 0, _len = _ref1.length; _j < _len; _j++) {\n m = _ref1[_j];\n _results.push(m.advance);\n }\n return _results;\n }.call(this);\n last = this.widths[this.widths.length - 1];\n _results = [];\n for (\n i = _j = 0;\n 0 <= lsbCount ? _j < lsbCount : _j > lsbCount;\n i = 0 <= lsbCount ? ++_j : --_j\n ) {\n _results.push(this.widths.push(last));\n }\n return _results;\n };\n /***************************************************************/\n /* function : forGlyph */\n /* comment : Returns the advance width and lsb for this glyph. */\n /***************************************************************/\n HmtxTable.prototype.forGlyph = function(id) {\n if (id in this.metrics) {\n return this.metrics[id];\n }\n return {\n advance: this.metrics[this.metrics.length - 1].advance,\n lsb: this.leftSideBearings[id - this.metrics.length]\n };\n };\n /*HmtxTable.prototype.encode = function (mapping) {\n var id, metric, table, _i, _len;\n table = new Data;\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n metric = this.forGlyph(id);\n table.writeUInt16(metric.advance);\n table.writeUInt16(metric.lsb);\n }\n return table.data;\n };*/\n return HmtxTable;\n})(Table);\n\nvar __slice = [].slice;\n\nvar GlyfTable = (function(_super) {\n __extends(GlyfTable, _super);\n\n function GlyfTable() {\n return GlyfTable.__super__.constructor.apply(this, arguments);\n }\n GlyfTable.prototype.tag = \"glyf\";\n GlyfTable.prototype.parse = function() {\n return (this.cache = {});\n };\n GlyfTable.prototype.glyphFor = function(id) {\n var data,\n index,\n length,\n loca,\n numberOfContours,\n raw,\n xMax,\n xMin,\n yMax,\n yMin;\n if (id in this.cache) {\n return this.cache[id];\n }\n loca = this.file.loca;\n data = this.file.contents;\n index = loca.indexOf(id);\n length = loca.lengthOf(id);\n if (length === 0) {\n return (this.cache[id] = null);\n }\n data.pos = this.offset + index;\n raw = new Data(data.read(length));\n numberOfContours = raw.readShort();\n xMin = raw.readShort();\n yMin = raw.readShort();\n xMax = raw.readShort();\n yMax = raw.readShort();\n if (numberOfContours === -1) {\n this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);\n } else {\n this.cache[id] = new SimpleGlyph(\n raw,\n numberOfContours,\n xMin,\n yMin,\n xMax,\n yMax\n );\n }\n return this.cache[id];\n };\n GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {\n var glyph, id, offsets, table, _i, _len;\n table = [];\n offsets = [];\n for (_i = 0, _len = mapping.length; _i < _len; _i++) {\n id = mapping[_i];\n glyph = glyphs[id];\n offsets.push(table.length);\n if (glyph) {\n table = table.concat(glyph.encode(old2new));\n }\n }\n offsets.push(table.length);\n return {\n table: table,\n offsets: offsets\n };\n };\n return GlyfTable;\n})(Table);\n\nvar SimpleGlyph = (function() {\n /**************************************************************************/\n /* function : SimpleGlyph */\n /* comment : Stores raw, xMin, yMin, xMax, and yMax values for this glyph.*/\n /**************************************************************************/\n function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {\n this.raw = raw;\n this.numberOfContours = numberOfContours;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = false;\n }\n SimpleGlyph.prototype.encode = function() {\n return this.raw.data;\n };\n return SimpleGlyph;\n})();\n\nvar CompoundGlyph = (function() {\n var ARG_1_AND_2_ARE_WORDS,\n MORE_COMPONENTS,\n WE_HAVE_AN_X_AND_Y_SCALE,\n WE_HAVE_A_SCALE,\n WE_HAVE_A_TWO_BY_TWO,\n WE_HAVE_INSTRUCTIONS;\n ARG_1_AND_2_ARE_WORDS = 0x0001;\n WE_HAVE_A_SCALE = 0x0008;\n MORE_COMPONENTS = 0x0020;\n WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n WE_HAVE_A_TWO_BY_TWO = 0x0080;\n WE_HAVE_INSTRUCTIONS = 0x0100;\n\n /********************************************************************************************************************/\n /* function : CompoundGlypg generator */\n /* comment : It stores raw, xMin, yMin, xMax, yMax, glyph id, and glyph offset for the corresponding compound glyph.*/\n /********************************************************************************************************************/\n function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {\n var data, flags;\n this.raw = raw;\n this.xMin = xMin;\n this.yMin = yMin;\n this.xMax = xMax;\n this.yMax = yMax;\n this.compound = true;\n this.glyphIDs = [];\n this.glyphOffsets = [];\n data = this.raw;\n while (true) {\n flags = data.readShort();\n this.glyphOffsets.push(data.pos);\n this.glyphIDs.push(data.readUInt16());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n data.pos += 4;\n } else {\n data.pos += 2;\n }\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.pos += 8;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.pos += 4;\n } else if (flags & WE_HAVE_A_SCALE) {\n data.pos += 2;\n }\n }\n }\n /****************************************************************************************************************/\n /* function : CompoundGlypg encode */\n /* comment : After creating a table for the characters you typed, you call directory.encode to encode the table.*/\n /****************************************************************************************************************/\n CompoundGlyph.prototype.encode = function() {\n var i, result, _len, _ref;\n result = new Data(__slice.call(this.raw.data));\n _ref = this.glyphIDs;\n for (i = 0, _len = _ref.length; i < _len; ++i) {\n result.pos = this.glyphOffsets[i];\n }\n return result.data;\n };\n return CompoundGlyph;\n})();\n\nvar LocaTable = (function(_super) {\n __extends(LocaTable, _super);\n\n function LocaTable() {\n return LocaTable.__super__.constructor.apply(this, arguments);\n }\n LocaTable.prototype.tag = \"loca\";\n LocaTable.prototype.parse = function(data) {\n var format, i;\n data.pos = this.offset;\n format = this.file.head.indexToLocFormat;\n if (format === 0) {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 2) {\n _results.push(data.readUInt16() * 2);\n }\n return _results;\n }.call(this));\n } else {\n return (this.offsets = function() {\n var _ref, _results;\n _results = [];\n for (i = 0, _ref = this.length; i < _ref; i += 4) {\n _results.push(data.readUInt32());\n }\n return _results;\n }.call(this));\n }\n };\n LocaTable.prototype.indexOf = function(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.encode = function(offsets, activeGlyphs) {\n var LocaTable = new Uint32Array(this.offsets.length);\n var glyfPtr = 0;\n var listGlyf = 0;\n for (var k = 0; k < LocaTable.length; ++k) {\n LocaTable[k] = glyfPtr;\n if (listGlyf < activeGlyphs.length && activeGlyphs[listGlyf] == k) {\n ++listGlyf;\n LocaTable[k] = glyfPtr;\n var start = this.offsets[k];\n var len = this.offsets[k + 1] - start;\n if (len > 0) {\n glyfPtr += len;\n }\n }\n }\n var newLocaTable = new Array(LocaTable.length * 4);\n for (var j = 0; j < LocaTable.length; ++j) {\n newLocaTable[4 * j + 3] = LocaTable[j] & 0x000000ff;\n newLocaTable[4 * j + 2] = (LocaTable[j] & 0x0000ff00) >> 8;\n newLocaTable[4 * j + 1] = (LocaTable[j] & 0x00ff0000) >> 16;\n newLocaTable[4 * j] = (LocaTable[j] & 0xff000000) >> 24;\n }\n return newLocaTable;\n };\n return LocaTable;\n})(Table);\n\n/************************************************************************************/\n/* function : invert */\n/* comment : Change the object's (key: value) to create an object with (value: key).*/\n/************************************************************************************/\nvar invert = function(object) {\n var key, ret, val;\n ret = {};\n for (key in object) {\n val = object[key];\n ret[val] = key;\n }\n return ret;\n};\n\n/*var successorOf = function (input) {\n var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;\n alphabet = 'abcdefghijklmnopqrstuvwxyz';\n length = alphabet.length;\n result = input;\n i = input.length;\n while (i >= 0) {\n last = input.charAt(--i);\n if (isNaN(last)) {\n index = alphabet.indexOf(last.toLowerCase());\n if (index === -1) {\n next = last;\n carry = true;\n }\n else {\n next = alphabet.charAt((index + 1) % length);\n isUpperCase = last === last.toUpperCase();\n if (isUpperCase) {\n next = next.toUpperCase();\n }\n carry = index + 1 >= length;\n if (carry && i === 0) {\n added = isUpperCase ? 'A' : 'a';\n result = added + next + result.slice(1);\n break;\n }\n }\n }\n else {\n next = +last + 1;\n carry = next > 9;\n if (carry) {\n next = 0;\n }\n if (carry && i === 0) {\n result = '1' + next + result.slice(1);\n break;\n }\n }\n result = result.slice(0, i) + next + result.slice(i + 1);\n if (!carry) {\n break;\n }\n }\n return result;\n };*/\n\nvar Subset = (function() {\n function Subset(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.next = 33;\n }\n /*Subset.prototype.use = function (character) {\n var i, _i, _ref;\n if (typeof character === 'string') {\n for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n this.use(character.charCodeAt(i));\n }\n return;\n }\n if (!this.unicodes[character]) {\n this.subset[this.next] = character;\n return this.unicodes[character] = this.next++;\n }\n };*/\n /*Subset.prototype.encodeText = function (text) {\n var char, i, string, _i, _ref;\n string = '';\n for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n char = this.unicodes[text.charCodeAt(i)];\n string += String.fromCharCode(char);\n }\n return string;\n };*/\n /***************************************************************/\n /* function : generateCmap */\n /* comment : Returns the unicode cmap for this font. */\n /***************************************************************/\n Subset.prototype.generateCmap = function() {\n var mapping, roman, unicode, unicodeCmap, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n mapping = {};\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n mapping[roman] = unicodeCmap[unicode];\n }\n return mapping;\n };\n /*Subset.prototype.glyphIDs = function () {\n var ret, roman, unicode, unicodeCmap, val, _ref;\n unicodeCmap = this.font.cmap.tables[0].codeMap;\n ret = [0];\n _ref = this.subset;\n for (roman in _ref) {\n unicode = _ref[roman];\n val = unicodeCmap[unicode];\n if ((val != null) && __indexOf.call(ret, val) < 0) {\n ret.push(val);\n }\n }\n return ret.sort();\n };*/\n /******************************************************************/\n /* function : glyphsFor */\n /* comment : Returns simple glyph objects for the input character.*/\n /******************************************************************/\n Subset.prototype.glyphsFor = function(glyphIDs) {\n var additionalIDs, glyph, glyphs, id, _i, _len, _ref;\n glyphs = {};\n for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {\n id = glyphIDs[_i];\n glyphs[id] = this.font.glyf.glyphFor(id);\n }\n additionalIDs = [];\n for (id in glyphs) {\n glyph = glyphs[id];\n if (glyph != null ? glyph.compound : void 0) {\n additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);\n }\n }\n if (additionalIDs.length > 0) {\n _ref = this.glyphsFor(additionalIDs);\n for (id in _ref) {\n glyph = _ref[id];\n glyphs[id] = glyph;\n }\n }\n return glyphs;\n };\n /***************************************************************/\n /* function : encode */\n /* comment : Encode various tables for the characters you use. */\n /***************************************************************/\n Subset.prototype.encode = function(glyID, indexToLocFormat) {\n var cmap,\n code,\n glyf,\n glyphs,\n id,\n ids,\n loca,\n new2old,\n newIDs,\n nextGlyphID,\n old2new,\n oldID,\n oldIDs,\n tables,\n _ref;\n cmap = CmapTable.encode(this.generateCmap(), \"unicode\");\n glyphs = this.glyphsFor(glyID);\n old2new = {\n 0: 0\n };\n _ref = cmap.charMap;\n for (code in _ref) {\n ids = _ref[code];\n old2new[ids.old] = ids[\"new\"];\n }\n nextGlyphID = cmap.maxGlyphID;\n for (oldID in glyphs) {\n if (!(oldID in old2new)) {\n old2new[oldID] = nextGlyphID++;\n }\n }\n new2old = invert(old2new);\n newIDs = Object.keys(new2old).sort(function(a, b) {\n return a - b;\n });\n oldIDs = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = newIDs.length; _i < _len; _i++) {\n id = newIDs[_i];\n _results.push(new2old[id]);\n }\n return _results;\n })();\n glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);\n loca = this.font.loca.encode(glyf.offsets, oldIDs);\n tables = {\n cmap: this.font.cmap.raw(),\n glyf: glyf.table,\n loca: loca,\n hmtx: this.font.hmtx.raw(),\n hhea: this.font.hhea.raw(),\n maxp: this.font.maxp.raw(),\n post: this.font.post.raw(),\n name: this.font.name.raw(),\n head: this.font.head.encode(indexToLocFormat)\n };\n if (this.font.os2.exists) {\n tables[\"OS/2\"] = this.font.os2.raw();\n }\n return this.font.directory.encode(tables);\n };\n return Subset;\n})();\n\njsPDF.API.PDFObject = (function() {\n var pad;\n\n function PDFObject() {}\n pad = function(str, length) {\n return (Array(length + 1).join(\"0\") + str).slice(-length);\n };\n /*****************************************************************************/\n /* function : convert */\n /* comment :Converts pdf tag's / FontBBox and array values in / W to strings */\n /*****************************************************************************/\n PDFObject.convert = function(object) {\n var e, items, key, out, val;\n if (Array.isArray(object)) {\n items = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = object.length; _i < _len; _i++) {\n e = object[_i];\n _results.push(PDFObject.convert(e));\n }\n return _results;\n })().join(\" \");\n return \"[\" + items + \"]\";\n } else if (typeof object === \"string\") {\n return \"/\" + object;\n } else if (object != null ? object.isString : void 0) {\n return \"(\" + object + \")\";\n } else if (object instanceof Date) {\n return (\n \"(D:\" +\n pad(object.getUTCFullYear(), 4) +\n pad(object.getUTCMonth(), 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n \"Z)\"\n );\n } else if ({}.toString.call(object) === \"[object Object]\") {\n out = [\"<<\"];\n for (key in object) {\n val = object[key];\n out.push(\"/\" + key + \" \" + PDFObject.convert(val));\n }\n out.push(\">>\");\n return out.join(\"\\n\");\n } else {\n return \"\" + object;\n }\n };\n return PDFObject;\n})();\n"],"names":["globalObject","window","global","self","this","consoleLog","console","log","apply","arguments","warn","str","call","error","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","atob","btoa","_global","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","navigator","msSaveOrOpenBlob","autoBom","_typeof","test","type","Blob","String","fromCharCode","bom","popup","title","body","innerText","force","isSafari","HTMLElement","safari","isChromeIOS","userAgent","FileReader","reader","onloadend","result","replace","readAsDataURL","RGBColor","color_string","channels","ok","charAt","substr","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","toLowerCase","color_defs","re","example","process","bits","parseInt","i","length","processor","exec","r","g","b","isNaN","toRGB","toHex","toString","md5cycle","x","k","c","d","ff","gg","hh","ii","add32","cmn","q","s","t","md51","n","state","md5blk","substring","tail","charCodeAt","md5blks","bind","hex_chr","split","rhex","j","singleToByteString","md5Bin","map","join","toByteString","md5Check","hex","lsw","rc4","key","data","lastKey","lastState","num","Array","out","permissionOptions","print","modify","copy","PDFSecurity","permissions","userPassword","ownerPassword","fileId","v","protection","forEach","perm","Error","padding","paddedUserPassword","paddedOwnerPassword","O","processOwnerPassword","P","encryptionKey","lsbFirstWord","hexToBytes","U","toPDFName","strLength","charCode","slice","PubSub","context","topics","subscribe","topic","callback","once","hasOwnProperty","token","Math","random","unsubscribe","Object","keys","publish","args","tokens","sub","ex","message","push","getTopics","GState","parameters","supported","p","indexOf","id","objectNumber","Pattern","gState","matrix","ShadingPattern","coords","colors","TilingPattern","boundingBox","xStep","yStep","stream","cloneIndex","jsPDF","options","precision","orientation","unit","format","compressPdf","filters","userUnit","floatPrecision","defaultPathOperation","encryptionOptions","compress","encryption","userPermissions","abs","putOnlyUsedFonts","usedFonts","API","internal","__private__","pdfVersion","getPdfVersion","setPdfVersion","value","pageFormats","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","dl","letter","legal","ledger","tabloid","getPageFormats","getPageFormat","ApiMode","COMPAT","ADVANCED","apiMode","advancedAPI","saveGraphicsState","Matrix","scaleFactor","getPageHeight","setFontSize","getFontSize","compatAPI","restoreGraphicsState","combineFontStyleAndFontWeight","fontStyle","fontWeight","doSwitch","isAdvancedAPI","hpf","advancedApiModeTrap","methodName","roundToPrecision","number","parmPrecision","tmpPrecision","toFixed","f2","f3","scale","transformY","y","transformScaleY","setPrecision","creationDate","getFileId","setFileId","toUpperCase","floor","convertDateToPDFDate","parmDate","tzoffset","getTimezoneOffset","tzsign","tzhour","tzmin","timeZoneString","padd2","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","parmPDFDate","year","month","date","hour","minutes","seconds","Date","setCreationDate","tmpCreationDateString","getCreationDate","currentPage","padd2Hex","hexString","offsets","content","contentLength","additionalObjects","pages","hasCustomDestination","outputDestination","resetDocument","rootDictionaryObjId","newObjectDeferred","resourceDictionaryObjId","setCustomOutputDestination","destination","setOutputDestination","resetCustomOutputDestination","string","write","getArrayBuffer","len","ab","ArrayBuffer","u8","Uint8Array","standardFonts","getStandardFonts","activeFontSize","fontSize","size","zoomMode","R2L","setR2L","getR2L","pageMode","setZoomMode","zoom","validZoomModes","undefined","getZoomMode","layoutMode","setPageMode","pmode","getPageMode","setLayoutMode","layout","getLayoutMode","setDisplayMode","documentProperties","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","properties","property","setDocumentProperty","activeFontKey","pageX","pageY","pageMatrix","fonts","fontmap","fontStateStack","patterns","patternMap","gStates","gStatesMap","activeGState","page","pagesContext","events","hotfixes","renderTargets","renderTargetMap","renderTargetStack","sx","shy","shx","sy","tx","ty","_matrix","defineProperty","get","set","atan2","decompose","separator","multiply","f","scaleX","sqrt","shear","scaleY","translate","rotate","skew","inversed","quot","aInv","bInv","cInv","dInv","applyToPoint","pt","Point","applyToRectangle","rect","pt1","pt2","w","h","Rectangle","clone","matrixMult","m1","m2","identityMatrix","unitMatrix","addPattern","pattern","patternKey","addShadingPattern","beginTilingPattern","beginNewRenderTarget","endTilingPattern","pop","restore","newObject","oid","newObjectDeferredBegin","doOutput","newAdditionalObject","obj","objId","decodeColorString","color","colorEncoded","floatVal","parseFloat","colorAsRGB","encodeColorString","ch1","ch2","ch3","ch4","letterArray","pdfColorType","rgbColor","getFilters","putStream","alreadyAppliedFilters","addLength1","valueOfLength1","objectId","encryptor","processedData","keyValues","additionalKeyValues","filterAsString","processDataByFilters","reverseChain","isArray","decodeParmsArray","putPage","pageNumber","pageObjectNumber","pageContentsObjId","contentsObjId","mediaBox","bottomLeftX","bottomLeftY","topRightX","topRightY","cropBox","bleedBox","trimBox","artBox","pageContext","pageContent","putPages","pageObjectNumbers","kids","putFont","font","isAlreadyPutted","postScriptName","encoding","putFonts","fontKey","putXObject","xObject","width","height","putXObjects","xObjectKey","interpolateAndEncodeRGBStream","numberSamples","tValues","dT","offset","unshift","index","aColor","bColor","round","trim","putShadingPattern","funcObjectNumber","putTilingPattern","deferredResourceDictionaryIds","resourcesObjectId","patternObjectId","resourcesOid","objectOid","putPatterns","putGState","putGStates","gStateKey","putXobjectDict","putEncryptionDict","toHexString","putFontDict","putShadingPatternDict","putTilingPatternDict","putGStatesDict","putResourceDictionary","objectIds","putResources","Number","MAX_SAFE_INTEGER","putAdditionalObjects","addFontToFontDictionary","fontName","addFont","isStandardFont","metadata","instance","addFonts","arrayOfFonts","l","parts","dictionary","SAFE","fn","foo","stack","m","alert","bar","to8bitStream","text","flags","sourceEncoding","encodingBlock","outputEncoding","newtext","isUnicode","ch","bch","autoencode","codePages","noBOM","pdfEscape","beginPage","_setPage","_addPage","parmFormat","parmOrientation","dimensions","min","setLineWidth","lineWidth","strokeColor","lineCapID","lineJoinID","_deletePage","splice","setPage","getNumberOfPages","getFont","fontNameLowerCase","disableWarning","noFallback","putInfo","version","putCatalog","tmpRootDictionaryObjId","pcn","putTrailer","putHeader","putXRef","buildDocument","offsetOfXRef","getBlob","output","filename","save","dataURI","pdfDocument","unescape","encodeURIComponent","pdfObjectUrl","integrity","htmlForNewWindow","JSON","stringify","nW","htmlForPDFjsNewWindow","pdfJsUrl","PDFjsNewWindow","scope","documentElement","querySelector","contentWindow","PDFViewerApplication","htmlForDataURLNewWindow","dataURLNewWindow","hasHotfix","hotfixName","getEncryptor","getPageInfo","pageNumberOneBased","getPageInfoByObjId","getCurrentPageInfo","addPage","insertPage","beforePage","movePage","targetPage","tmpPages","tmpPagesContext","deletePage","transform","payload","da","angle","align","charSpace","maxWidth","horizontalScale","transformationMatrix","tmp","xtra","isHex","lineHeight","lineHeightFactor","ESC","TabLen","transformTextToSpecialArray","curDa","sa","concat","shift","processTextByFunction","processingFunction","tmpResult","textIsOfTypeString","tmpTextIsOfTypeString","match","descent","baseline","splitTextToSize","reduce","acc","textLine","mutex","PI","rotationDirection","cos","sin","activeCharSpace","setCharSpace","getCharSpace","lang","renderingMode","parmRenderingMode","stroke","usedRenderingMode","lineWidths","leading","pageWidth","pageSize","getWidth","activeFont","assign","wordSpacingPerLine","newY","getStringUnitWidth","doKerning","newX","prevWidth","getHorizontalCoordinate","getVerticalCoordinate","doReversing","posX","posY","reverse","activeFontEncoding","STRING","ARRAY","variant","wordSpacing","generatePosition","parmPosX","parmPosY","parmTransformationMatrix","position","lineIndex","textColor","clip","rule","clipEvenOdd","discardPath","isValidStyle","style","setDefaultPathOperation","operator","getStyle","op","close","fill","fillWithOptionalPattern","fillEvenOdd","fillStroke","fillStrokeEvenOdd","fillWithPattern","putStyle","cloneTilingPattern","patternData","patternId","clipRuleFromStyle","setGState","moveTo","lineTo","curveTo","x1","y1","x2","y2","x3","y3","line","lines","closed","scalex","scaley","leg","x4","y4","path","triangle","roundedRect","rx","ry","MyArc","SQRT2","ellipse","lx","ly","circle","setFont","getFontEntry","getFontList","list","encodingOptions","getLineWidth","setLineDash","setLineDashPattern","dashArray","dashPhase","getLineHeight","setLineHeightFactor","getLineHeightFactor","getHorizontalCoordinateString","getVerticalCoordinateString","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","getTextColor","setTextColor","CapJoinStyles","butt","but","miter","rounded","projecting","project","square","bevel","setLineCap","setLineJoin","setLineMiterLimit","setMiterLimit","addGState","equals","duplicate","fontState","setCurrentTransformationMatrix","comment","_x","enumerable","_y","_type","_w","_h","RenderTarget","getPageWidth","setPageWidth","setPageHeight","endFormObject","newXObject","xObjectId","plugin","beginFormObject","doFormObject","getFormObject","returnPromise","unload","Promise","resolve","reject","newEvents","eventname","handler_and_args","getCoordinateString","collections","setWidth","getHeight","setHeight","getPDFVersion","configurable","byteString","byte","bytes","generation","other","ignore","count","jsPDFAPI","pdfUnescape","f5","__acroform__","inherit","child","parent","create","constructor","createFormXObject","formObject","xobj","AcroFormXObject","AcroFormAppearance","BBox","setBit","bitPosition","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","coordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","calculateAppearanceStream","appearanceStreamContent","V","DV","_V","calcRes","calculateX","maxFontSize","returnValue","textSplit","multiline","word","isSmallerThanWidth","lastLine","calculateFontSpace","FontSize","startX","lastLength","textHeight","startY","lastY","firstWordInLine","lastWordInLine","currWord","lineCount","isWithNewLine","nextLineIsSmaller","isLastWord","currLine","textAlign","acroformPluginTemplate","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","createAnnotationReference","object","annotations","find","entry","createXFormObjectCallback","fieldArray","fieldObject","initializeAcroForm","acroformPlugin","AcroFormField","FieldNum","parse","AcroFormDictionary","_eventID","AcroFormDictionaryCallback","Fields","hasAnnotation","annotReferenceCallback","putCatalogCallback","standardFields","Kids","keyValueList","oldRect","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","appearance","appearanceStreamString","createFieldCallback","arrayToPdfArray","array","toPdfString","AcroFormPDFObject","_objId","_scope","writable","getOwnPropertyNames","filter","getOwnPropertyDescriptor","_stream","_BBox","_DA","_Kids","_F","Boolean","F","_Ff","_Rect","_FT","_T","AcroFormChildClass","_fontName","_fontStyle","_fontSize","_maxFontSize","_color","AcroFormTextField","_DV","AcroFormButton","_page","_hasAppearanceStream","Ff","_Q","AcroFormChoiceField","FT","_TI","_Opt","regex","matches","getMatches","getOptions","setOptions","sort","addOption","removeOption","allEntries","combo","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","edit","_AS","_MK","CA","AcroFormPushButton","pushButton","AcroFormRadioButton","radio","_parent","_optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","optionName","setAppearance","getCA","createOption","Parent","addField","AcroFormCheckBox","CheckBox","_MaxLen","isInteger","AcroFormPasswordField","password","N","On","YesNormal","D","YesPushDown","Off","OffPushDown","encodedColor","DotRadius","Bezier_C","DotRadiusBezier","kc","dc","Cross","cross","calculateCross","AcroForm","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","Appearance","toLookup","arr","lookup","__addimage__","UNKNOWN","imageFileTypeHeaders","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","WEBP","BMP","getImageFileTypeByImageData","imageData","fallbackFormat","headerSchemata","compareResult","fileType","Uint8ClampedArray","isArrayBufferView","putImage","image","colorSpace","color_spaces","INDEXED","palette","sMask","DEVICE_CMYK","bitsPerComponent","decodeParameters","transparency","predictor","arrayBufferToBinaryString","putResourcesCallback","images","putXObjectsDictCallback","initialize","getImages","getImageIndex","isImageTypeSupported","isDOMElement","nodeType","getImageDataFromElement","element","nodeName","hasAttribute","src","getAttribute","tmpImageData","loadFile","mimeType","toDataURL","checkImagesForAlias","alias","determineWidthAndHeight","writeImageToPDF","rotation","dims","coord","vcoord","f4","rotationTransformationMatrix","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","decode","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","hash","byteLength","validateStringAsBase64","possibleBase64String","extractImageFromDataUrl","dataUrl","dataUrlParts","extractedInfo","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","binary_string","buffer","buf","subarray","addImage","compression","processImageData","dataAsBinaryString","convertBase64ToBinaryString","generateAliasFromImageData","checkCompressValue","stringData","throwError","base64Info","rawData","getImageProperties","notEmpty","addPageData","putPageData","anno","pageInfo","pageAnnos","found","escape","objText","objPopup","encryptorText","bounds","contents","loc","_nameMap","top","finalBounds","magFactor","left","createAnnotation","link","textWithLink","linkHeight","linkWidth","totalLineWidth","getTextWidth","numOfLines","ceil","arabicSubstitionA","ligatures","arabic_diacritics","alfletter","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","letters","tmpLigatures","effectedLetters","isArabicDiacritic","getCorrectForm","currentChar","beforeChar","nextChar","parseArabic","currentLetter","prevLetter","nextLetter","words","newWords","processArabic","tmpText","autoPrint","refAutoPrintTag","addJS","Canvas","jsPdfInstance","_width","getContext","pageWrapXEnabled","pageWrapX","_height","pageWrapYEnabled","pageWrapY","_childNodes","_style","contextType","contextAttributes","pdf","context2d","_canvas","canvas","NO_MARGINS","bottom","right","printingHeaderRow","_initialize","__cell__","headerFunction","margins","_reset","lastCell","Cell","_text","_lineNumber","_align","lineNumber","toArray","setHeaderFunction","func","getTextDimensions","amountOfLines","tempWidth","max","cellAddPage","cell","currentCell","tableHeaderRow","printHeaders","printHeaderRow","table","headers","config","column","headerName","headerNames","headerLabels","headerAligns","columnMatrix","columnWidths","columnMinWidths","tableHeaderConfigs","autoSize","css","headerBackgroundColor","headerTextColor","table_font_size","header","prompt","rec","row","rowHeight","calculateLineHeight","setTableHeaderRow","pv","cv","rowStart","Function","cellData","cellStart","col","table_x","table_y","model","new_page","tableHeaderCell","tempHeaderConf","currentTextColor","fontStyleOrder","italic","oblique","normal","fontStretchOrder","fontStretchLookup","fontWeights","fontWeightsLookup","normalizeFontFace","fontFace","family","normalizeFontStyle","weight","normalizeFontWeight","stretch","normalizeFontStretch","ref","searchFromPivot","matchingSet","order","pivot","dir","defaultGenericFontFamilies","fixed","monospace","terminal","cursive","fantasy","serif","systemFonts","icon","menu","ruleToString","resolveFontFace","fontFaceMap","rules","defaultFontFamily","genericFontFamilies","resolveFontStretch","ordering","resolveFontStyle","resolveFontWeight","eatWhiteSpace","input","trimLeft","parseQuotedFontFamily","quote","parseNonQuotedFontFamily","defaultFont","_ctx","ContextLayer","ctx","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","lineDashOffset","lineDash","margin","prevPageLastElemOffset","ignoreClearRect","Context2D","parentNode","_pdf","_pageWrapXEnabled","_pageWrapYEnabled","_posX","_posY","_autoPaging","lastBreak","pageBreaks","_ctxStack","rgba","getRGBA","_fontFaceMap","getFontFaceMap","fontFaces","convertedFontFaces","fontMap","convertToFontFaces","normalized","buildFontFaceMap","_fontFaces","fontFamily","fontSizeUnit","parsed","remaining","parseFontFamily","jsPdfFontName","fallbackFonts","arial","Arial","verdana","Verdana","helvetica","Helvetica","getLineDash","pathPreProcess","beginPath","closePath","pathBegin","quadraticCurveTo","cpx","cpy","pt0","bezierCurveTo","cp1x","cp1y","cp2x","cp2y","arc","radius","startAngle","endAngle","counterclockwise","isIdentity","xpt","x_radPt","x_radPt0","pow","arcTo","fillRect","strokeRect","clearRect","doStackPush","tmpPageNumber","ctxStack","doStackPop","isCanvasGradient","getColor","fillText","degs","rad2deg","putText","strokeText","measureText","txtWidth","TextMetrics","scalewidth","scaleheight","setTransform","hasMargins","drawImage","img","swidth","sheight","imageProperties","factorX","factorY","clipFactorX","clipFactorY","clipPath","decomposedTransformationMatrix","xRect","pageArray","getPagesByPath","sortPages","autoPaging","pageWidthMinusMargins","topMargin","firstPageHeight","pageHeightMinusMargins","previousPageHeightSum","tmpPaths","pathPositionRedo","drawPaths","tmpRect","needsClipping","yOffset","rectOfQuadraticCurve","getQuadraticCurveBoundary","rectOfBezierCurve","getBezierCurveBoundary","paths","isClip","tmpPath","oldLineWidth","origPath","xPath","delta","moves","begin","start","deltas","iii","began","arcs","drawArc","drawLine","drawLines","doClip","getBaseline","getTextBottom","yBaseLine","createLinearGradient","canvasGradient","colorStops","addColorStop","createPattern","createRadialGradient","includeMove","curves","createArc","curve","doMove","drawCurve","textDimensions","yTop","oldSize","baselineRect","textBounds","pageHeightMinusBottomMargin","pageWidthMinusRightMargin","textBoundsOnPage","doSlice","croppedText","baseLineRectOnPage","prevX","prevY","anticlockwise","twoPi","halfPi","totalAngle","sgn","createSmallArc","q1","q2","k2","ar","cos_ar","sin_ar","ey","midX1","midY1","midX2","midY2","resultX1","resultX2","resultY1","resultY2","ax","ay","bx","by","cx","cy","dx","dy","px","py","qx","qy","minx","miny","maxx","maxy","tobx","toby","tocx","tocy","todx","tody","prevLineDash","nextLineDash","require","Worker","u16","u32","fleb","fdeb","clim","freb","eb","_a","fl","revfl","_b","fd","revfd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flm","flrm","fdm","fdrm","o","bits16","shft","slc","wbits","wbits16","hTree","t2","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","lc","cl","cli","cln","cls","clen","cf","wfblk","pos","dat","wblk","final","syms","lf","df","li","bs","bl","dlt","mlb","ddt","mdb","_c","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","lm","ll","dm","flen","ftlen","dtlen","llm","lcts","it","clct","dst","deo","et","dopt","opt","pre","post","st","lvl","plvl","lst","msk_1","prev","head","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","level","mem","zlibSync","adler","lv","zlh","wbytes","unzlibSync","sl","noBuf","noSt","cbuf","nbuf","bt","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","lms","dms","mxa","sym","add","dsym","end","inflt","zlv","ASCII85Encode","ASCII85Decode","z","ASCIIHexDecode","regexCheckIfHex","RegExp","FlateEncode","origData","filterChain","sync","request","sanitizeUnicode","dataLength","charArray","StringFromCharCode","overrideMimeType","responseText","browserRequest","loadImageFile","loadHtml2Canvas","exports","module","define","amd","catch","then","html2canvas","default","loadDomPurify","dompurify","objType","tagName","el","className","innerHTML","sanitize","root","convert","template","setProgress","promise","__proto__","prop","container","overlay","progress","val","enableLinks","backgroundColor","from","getType","to","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","containerCSS","display","windowWidth","clientWidth","scrollWidth","offsetWidth","source","cloneNode","javascriptEnabled","createTextNode","nodeValue","firstChild","nextSibling","appendChild","addEventListener","scrollTop","scrollLeft","scrollHeight","offsetHeight","clientHeight","overflow","zIndex","clear","border","float","prereqs","contains","onrendered","removeChild","toContext2d","async","allowTaint","scrollX","scrollY","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","imgData","quality","outputImg","outputPdf","doCallback","fns","setMargin","cbk","toPx","getPageSize","inner","ratio","updateProgress","onFulfilled","onRejected","thenCore","thenBase","selfPromise","returnVal","thenExternal","catchExternal","msg","using","export","run","format_as_string","pageHeight","err","html","worker","jsNamesObj","jsJsObj","javascript","namesOid","outline","children","render","createNamedDestinations","totalPages","dests","info","names2Oid","makeRef","item","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","markers","processJPEG","blockLength","numcomponents","getJpegInfo","getCharWidthsArray","splitLongWord","splitParagraphIntoLines","makeImage","scratchCanvas","scratchCtx","chunkSize","palLen","delayDen","delayNum","frame","section","palShort","_i","_j","_ref","animation","readUInt32","_results","colorType","compressionMethod","filterMethod","interlaceMethod","numFrames","numPlays","Infinity","frames","read","xOffset","readUInt16","delay","disposeOp","blendOp","indexed","grayscale","rgb","hasAlphaChannel","pixelBitlength","decodePixels","pixelBytes","fullPixels","_this","pass","x0","y0","abyte","pa","paeth","pb","pc","pixels","scanlineLength","upper","upperLeft","_k","_l","_m","isFull","fullPos","partPos","decodePalette","ret","_ref1","copyToImageData","alpha","_decodedPalette","hasBrowserCanvas","putImageData","Image","decodeFrames","_len","createImageData","renderFrame","animate","doFrame","frameNumber","_timeout","stopAnimation","clearTimeout","_png","GifReader","pf0","global_palette_flag","num_global_colors","global_palette_offset","global_palette_size","no_eof","transparent_index","disposal","loop_count","block_size","pf1","pf2","interlace_flag","num_local_colors","palette_offset","palette_size","has_local_palette","data_offset","data_length","interlaced","loopCount","frameInfo","frame_num","decodeAndBlitFrameBGRA","num_pixels","index_stream","GifReaderLZWOutputIndexStream","trans","framewidth","framestride","xleft","opbeg","opend","scanstride","interlaceskip","il","decodeAndBlitFrameRGBA","code_stream","output_length","min_code_size","clear_code","eoi_code","next_code","cur_code_size","code_mask","cur_shift","cur","subblock_size","code_table","prev_code","code","chase_code","chase_length","chase","JPEGEncoder","YDC_HT","UVDC_HT","YAC_HT","UVAC_HT","currentQuality","ffloor","YTable","UVTable","fdtbl_Y","fdtbl_UV","bitcode","category","outputfDCTQuant","DU","byteout","bytenew","bytepos","YDU","UDU","VDU","RGB_YUV_TABLE","ZigZag","std_dc_luminance_nrcodes","std_dc_luminance_values","std_ac_luminance_nrcodes","std_ac_luminance_values","std_dc_chrominance_nrcodes","std_dc_chrominance_values","std_ac_chrominance_nrcodes","std_ac_chrominance_values","computeHuffmanTbl","nrcodes","std_table","codevalue","pos_in_table","HT","writeBits","posval","writeByte","writeWord","processDU","CDU","fdtbl","DC","HTDC","HTAC","EOB","M16zeroes","DU_DCT","d0","d1","d2","d3","d4","d5","d6","d7","fDCTQuant","dataOff","tmp0","tmp7","tmp1","tmp6","tmp2","tmp5","tmp3","tmp4","tmp10","tmp13","tmp11","tmp12","z1","z5","z2","z4","z3","z11","z13","tmp0p2","tmp7p2","tmp1p2","tmp6p2","tmp2p2","tmp5p2","tmp3p2","tmp4p2","tmp10p2","tmp13p2","tmp11p2","tmp12p2","z1p2","z5p2","z2p2","z4p2","z3p2","z11p2","z13p2","Diff","end0pos","lng","startpos","nrzeroes","nrmarker","setQuality","sf","YQT","UVQT","u","aasf","initQuantTables","encode","writeDQT","writeSOF0","writeDHT","DCY","DCU","DCV","displayName","quadWidth","fillbits","sfcc","initCharLookupTable","nrlower","nrupper","cat","nr","nrneg","initCategoryNumber","initRGBYUVTable","BmpDecoder","is_with_alpha","datav","DataView","bottom_up","flag","parseHeader","parseBGR","WebPDecoder","fa","L","J","H","I","Z","M","wa","Ed","ma","_WebPDecoder","Fd","Ub","G","jc","Qb","qb","nd","pd","xb","Ca","Ka","oa","Jd","Yc","Zc","Qa","na","K","ca","cb","Sb","Ra","bb","Vb","ob","db","Gd","Hd","Wb","Sa","Xb","Id","ra","Ta","Yb","Ha","Zb","X","Mb","Xa","$b","ac","bc","xa","yb","ud","hd","jd","aa","Ia","cc","Kd","Ld","ec","Ea","Md","Nd","Od","Pd","Qd","fb","gb","hb","zb","Ab","Ja","Bb","Rd","A","Sd","ea","Tc","Cd","lb","Db","W","Cb","S","RGBA","kb","sd","Td","Ud","ib","bd","Da","Vd","T","Wd","ba","ka","Mc","Nc","fc","Rc","Xd","ya","Kb","za","gc","Ua","Va","memory","Ib","Jb","hc","Oa","ic","Aa","Yd","Ba","Wa","Zd","$d","ae","ta","Eb","be","ga","ce","Dc","mc","nc","de","ua","ub","ha","xc","vc","Ya","oc","C","ee","E","B","Q","fe","qc","Fb","rc","ge","va","Ma","sc","Gb","tc","uc","Hb","wc","yc","zc","qd","rd","ia","tb","he","$","Pb","wd","xd","vb","ie","Ac","Bc","je","Cc","VP8LMapColor32b","ke","VP8LMapColor8b","rb","Oc","R","me","qa","Y","la","ja","Fa","ne","sb","La","Za","$a","jb","oe","pe","nb","qe","Pa","Ga","Na","Ec","se","Fc","ue","yd","td","Rb","ve","we","Lb","Gc","wb","xe","Wc","Xc","ye","Pc","Tb","zd","vd","od","ld","dd","Hc","ze","Sc","Qc","ad","Ob","Ad","Dd","Ae","Nb","Ic","Be","Kc","ed","$c","Jc","Bd","gd","Uc","Vc","put","Ce","De","Ee","Fe","Ge","He","Ie","Lc","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","ef","gf","hf","jf","kf","mf","nf","of","pf","qf","rf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","Ke","Le","Je","kd","Cf","Df","Ef","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","Predictor0","Predictor1","Predictor2","Predictor3","Predictor4","Predictor5","Predictor6","Predictor7","Predictor8","Predictor9","Predictor10","Predictor11","Predictor12","Predictor13","PredictorAdd0","PredictorAdd1","PredictorAdd2","ColorIndexInverseTransform","MapARGB","VP8LColorIndexInverseTransformAlpha","MapAlpha","VP8LPredictorsAdd","VP8LPredictors","VP8LPredictorsAdd_C","VP8LPredictors_C","UpsampleRgbLinePair","UpsampleBgrLinePair","UpsampleRgbaLinePair","UpsampleBgraLinePair","UpsampleArgbLinePair","UpsampleRgba4444LinePair","UpsampleRgb565LinePair","Qf","WebPDecodeRGBA","te","GetTag","data_off","GetLE24","GetLE32","webpdecoder","imagearray","src_off","alpha_chunk","alpha_size","alpha_offset","memcmp","fourcc","payload_size","payload_size_padded","src_off_","temp","WebPRiffParser","hasCompressionJS","compressBytes","lineLength","colorsPerPixel","filter_method","filterUp","filterSub","filterAverage","filterPaeth","applyPngFilterMethod","prevLine","filter_methods","getFilterMethods","results","ind","getIndexOfSmallestSum","filterNone","up","upLeft","paethPredictor","pLeft","pUp","pUpLeft","arrays","sum","processPNG","trns","pal","smask","alphaData","hasColors","pixel","pbl","pDiff","total","getPredictorFromCompression","processGIF89A","rawImageData","processGIF87A","fileSize","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","hr","vr","importantColors","getUint8","quad","bitn","bit1","xlen","mode","bit4","before","after","bit8","bit15","dif_w","_1_5","bit16","_1_6","bit24","bit32","getData","processBMP","processWEBP","processRGBA","imagePixels","rgbOut","alphaOut","outIndex","alphaIndex","rgbData","setLanguage","langCode","languageSettings","isSubscribed","sq","an","hy","as","ast","az","eu","bn","br","bg","my","zh","cr","cs","en","eo","fo","fj","fi","fr","fy","fur","gl","gu","ht","hi","hu","is","iu","kn","ks","kk","km","ky","tlh","ko","mk","ms","mt","mi","mr","mo","nv","ng","no","nn","or","om","pl","qu","rm","ro","ru","sz","sg","si","sr","sk","so","es","sw","tt","th","tig","ts","tn","tk","uk","hsb","ur","vi","vo","xh","ji","zu","languageCode","char_code","widths","Unicode","widthsFractionOf","fof","kerning","kerningFractionOf","kerningValue","prior_char_code","default_char_width","widthOfString","widthOfGlyph","characterToGlyph","widths_array","firstLineMaxLen","maxLen","answer","workingLen","startOfLine","maxlen","lineIndent","postProcess","line_length","textIndent","separator_length","current_word_length","spaceCharWidth","pad","wrds","wrd","idx","paragraphs","fsize","newOptions","fontUnit_maxLen","__fontmetrics__","encoded","mappingUncompress","mappingCompress","keystring","valuestring","numberprefix","vals","uncompress","stringparts","parent_key_pair","sign","activeobject","parentchain","keyparts","valueparts","datalen","WinAnsiEncoding","encodings","Courier","fontMetrics","Symbol","ZapfDingbats","metrics","file","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","loadCanvg","canvg","addSvgAsImage","svg","ignoreMouse","ignoreAnimation","ignoreDimensions","doc","fromString","putTotalPages","pageExpression","replaceExpression","totalNumberOfPages","pdfEscape16","viewerPreferences","doReset","configuration","isValid","method","configurationTemplate","HideToolbar","defaultValue","explicitSet","valueSet","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","configurationKeys","rangeArray","arrayContainsElement","iterator","viewerpreferences","vPref","pdfDict","postPutResources","rdf_beginning","__metadata__","namespaceuri","utf8_xmpmeta_beginning","utf8_rdf_beginning","utf8_metadata","utf8_rdf_ending","utf8_xmpmeta_ending","total_len","metadata_object_number","addMetadata","padz","toUnicode","toUnicodeCmap","codes","range","unicode","unicodeMap","pdfOutput","subset","pdfOutput2","fontTable","cmap","fontDescriptor","PDFObject","bbox","stemV","italicAngle","ascender","decender","capHeight","DescendantFont","identityHFunction","hmtx","unitsPerEm","winAnsiEncodingFunction","utf8TextFunction","cmapConfirm","strText","codeMap","parms","_initializeVFS","vFS","addFileToVFS","filecontent","__bidiEngine__","_hasUbatB","_hasUbatS","_isInVisual","_isInRtl","_isOutVisual","_isOutRtl","_isSymmetricSwapping","_UNICODE_TYPES","_bidiUnicodeTypes","_STATE_TABLE_LTR","_STATE_TABLE_RTL","_TYPE_NAMES_MAP","EN","AN","_UNICODE_RANGES_MAP","_SWAP_TABLE","_LTR_RANGES_REG_EXPR","_lastArabic","_dir","_getCharType","rangeIdx","_isContextualDirRtl","charType","_resolveCharType","chars","types","resolvedTypes","wType","nType","cType","rtlCandidate","_invertString","sourceToTargetMap","levels","_computeLevels","hiLevel","params","action","newLevel","prevState","condPos","newState","stateTable","_handleUbatS","_invertByLevel","high","low","_reorder","_symmetricSwap","DIR_RTL","doBidiReorder","_init","isSymmetricSwappingOrig","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","bidiEngine","Data","readString","Subset","registerTTF","directory","Directory","HeadTable","NameTable","CmapTable","hhea","HheaTable","maxp","MaxpTable","HmtxTable","PostTable","os2","OS2Table","loca","LocaTable","glyf","GlyfTable","exists","lineGap","xMin","yMin","xMax","yMax","raw","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","character","glyph","forGlyph","advance","includeGap","gap","Table","readByte","writeUInt32","readInt32","int","writeInt32","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","checksum","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","adjustment","directoryLength","headOffset","log2","tableData","__slice","__hasProp","__extends","ctor","__super__","_super","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","CmapEntry","endCode","glyphId","glyphIds","idDelta","idRangeOffset","saveOffset","segCount","segCountX2","startCode","platformID","encodingID","language","charmap","charMap","diff","endCodes","glyphIDs","indexes","last","nextID","old","rangeOffsets","startCodes","startGlyph","subtable","_len1","_len2","_len3","_len4","_len5","_len6","_len7","_n","_name","_o","_p","_q","new","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","numberOfGlyphs","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","_results1","numGlyphs","NameEntry","languageID","entries","stringOffset","strings","nameID","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","lsbCount","lsb","leftSideBearings","cache","glyphFor","numberOfContours","lengthOf","CompoundGlyph","SimpleGlyph","glyphs","mapping","old2new","compound","glyphOffsets","activeGlyphs","glyfPtr","listGlyf","newLocaTable","unicodes","next","generateCmap","roman","unicodeCmap","glyphsFor","additionalIDs","glyID","ids","new2old","newIDs","nextGlyphID","oldID","oldIDs","invert","isString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds"],"mappings":"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K,IAAI16D,MAAM,IACf26D,EAAU,GACVC,EAAU,EACVC,EAAU,EAEVC,EAAM,IAAI96D,MAAM,IAChB+6D,EAAM,IAAI/6D,MAAM,IAChBg7D,EAAM,IAAIh7D,MAAM,IAChB4mD,EAAM,IAAI5mD,MAAM,KAChBi7D,EAAgB,IAAIj7D,MAAM,MAG1Bk7D,EAAS,CACX,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAGEC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA0B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC7DC,EAA2B,CAC7B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA0B,CAC5B,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,IACA,IACA,IACA,EACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGEC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAC/DC,EAA6B,CAC/B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAEEC,EAA4B,CAC9B,EACA,EACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,EACA,GACA,GACA,GACA,EACA,GACA,IACA,GACA,GACA,GACA,IACA,EACA,GACA,GACA,IACA,IACA,IACA,IACA,EACA,GACA,GACA,GACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA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AAGA,GAAYH,IAAOG,EACxClE,EAAUW,GACZsD,GAAsB,GAExBjf,EAAM,MAAQyZ,EAAG99D,GACjBq/D,EAAUS,GAAMwD,GAAY,GAAK1F,EAASvZ,KAC1Cgb,EAAU1B,EAAQtZ,IAClBrkD,WA5CQ,IA8CNmjE,GACF9D,EAAUU,GAELH,WA8HA4D,EAAWtS,IAClBA,EAAUvrD,KAAKsb,IAAItb,KAAK+mC,IAAIwkB,EAAS,GAAI,KAErCmM,GAAkBnM,eA1qBCuS,WACnBC,EAAM,CACR,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IAGO1jE,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvBwB,EAAI87D,GAAQoG,EAAI1jE,GAAKyjE,EAAK,IAAM,KACpCjiE,EAAImE,KAAKsb,IAAItb,KAAK+mC,IAAIlrC,EAAG,GAAI,KAC7B+7D,EAAOe,EAAOt+D,IAAMwB,UAElBmiE,EAAO,CACT,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAEOthE,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACvBuhE,EAAItG,GAAQqG,EAAKthE,GAAKohE,EAAK,IAAM,KACrCG,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KwV,EAAKtV,GAAKgB,GAAKtN,EAAE62E,GAAMvqE,GAAK,MAAQtM,EAAEklC,QAE5D54B,EAAI,EACTtM,EAAIsM,EAAI,EAAI,UAGZ,GAAKtM,SACD8M,GAAKA,EAAEygD,KAAOvtD,EAAI4gF,GAAG7zE,IADV/M,MAIjB8yE,GAAK,GACPmB,GAAK,CACH,EACA,EACA,EACA,EACA,GACA,GACA,GACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,UAEFD,GAAK,GACLF,GAAK,GACLM,GAAK,EACLC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EA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GAAI,GAAI,IACpEvD,GAAK,CACH,GACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,GACA,GACA,EACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,GACA,KAEFiD,GAAK,CACH,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEFX,GAAK,EACLuC,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEFlK,GAAK,CACH,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEF3B,GAAK,KACLqO,GAAK,CACH,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,IAAK,GACrB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAC1B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAE1DC,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IACxDtJ,GAAK,EAAE,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GACnEmJ,GAAK,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K,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IA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IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,MACA,IACA,MACA,MACA,IACA,MACA,MACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,MACA,MACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,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"} \ No newline at end of file diff --git a/lib/jspdf/polyfills.es.js b/lib/jspdf/polyfills.es.js new file mode 100644 index 0000000..0e1d374 --- /dev/null +++ b/lib/jspdf/polyfills.es.js @@ -0,0 +1,62 @@ +/** @license + * + * jsPDF - PDF Document creation from JavaScript + * Version 2.5.1 Built on 2022-01-28T15:37:57.791Z + * CommitID 00000000 + * + * Copyright (c) 2010-2021 James Hall , https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +import"core-js/es/promise";import"core-js/es/array/map";import"core-js/es/array/is-array";import"core-js/es/array/reduce";import"core-js/es/array/for-each";import"core-js/es/array/find";import"core-js/es/object/create";import"core-js/es/object/keys";import"core-js/es/object/values";import"core-js/es/object/assign";import"core-js/es/string/trim";import"core-js/es/string/trim-left";import"core-js/es/string/trim-right";import"core-js/es/number/is-integer";import"core-js/es/typed-array/uint8-array";import"core-js/es/typed-array/reduce";var e=function(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this}(),t=e.BlobBuilder||e.WebKitBlobBuilder||e.MSBlobBuilder||e.MozBlobBuilder; +/** + * @license + * Blob.js + * A Blob, File, FileReader & URL implementation. + * 2018-08-09 + * + * By Eli Grey, http://eligrey.com + * By Jimmy Wärting, https://github.com/jimmywarting + * License: MIT + * See https://github.com/eligrey/Blob.js/blob/master/LICENSE.md + */e.URL=e.URL||e.webkitURL||function(e,t){return(t=document.createElement("a")).href=e,t};var r=e.Blob,o=URL.createObjectURL,n=URL.revokeObjectURL,i=e.Symbol&&e.Symbol.toStringTag,a=!1,s=!1,c=!!e.ArrayBuffer,l=t&&t.prototype.append&&t.prototype.getBlob;try{a=2===new Blob(["ä"]).size,s=2===new Blob([new Uint8Array([1,2])]).size}catch(e){}function p(e){return e.map((function(e){if(e.buffer instanceof ArrayBuffer){var t=e.buffer;if(e.byteLength!==t.byteLength){var r=new Uint8Array(e.byteLength);r.set(new Uint8Array(t,e.byteOffset,e.byteLength)),t=r.buffer}return t}return e}))}function f(e,r){r=r||{};var o=new t;return p(e).forEach((function(e){o.append(e)})),r.type?o.getBlob(r.type):o.getBlob()}function u(e,t){return new r(p(e),t||{})}if(e.Blob&&(f.prototype=Blob.prototype,u.prototype=Blob.prototype),i)try{File.prototype[i]="File",Blob.prototype[i]="Blob",FileReader.prototype[i]="FileReader"}catch(e){}function d(){var t=!!e.ActiveXObject||"-ms-scroll-limit"in document.documentElement.style&&"-ms-ime-align"in document.documentElement.style,r=e.XMLHttpRequest&&e.XMLHttpRequest.prototype.send;t&&r&&(XMLHttpRequest.prototype.send=function(e){e instanceof Blob?(this.setRequestHeader("Content-Type",e.type),r.call(this,e)):r.call(this,e)});try{new File([],"")}catch(t){try{var o=new Function('class File extends Blob {constructor(chunks, name, opts) {opts = opts || {};super(chunks, opts || {});this.name = name;this.lastModifiedDate = opts.lastModified ? new Date(opts.lastModified) : new Date;this.lastModified = +this.lastModifiedDate;}};return new File([], ""), File')();e.File=o}catch(t){o=function(e,t,r){var o=new Blob(e,r),n=r&&void 0!==r.lastModified?new Date(r.lastModified):new Date;return o.name=t,o.lastModifiedDate=n,o.lastModified=+n,o.toString=function(){return"[object File]"},i&&(o[i]="File"),o};e.File=o}}}a?(d(),e.Blob=s?e.Blob:u):l?(d(),e.Blob=f):function(){function t(e){for(var t=[],r=0;r>6,128|63&o):o<55296||o>=57344?t.push(224|o>>12,128|o>>6&63,128|63&o):(r++,o=65536+((1023&o)<<10|1023&e.charCodeAt(r)),t.push(240|o>>18,128|o>>12&63,128|o>>6&63,128|63&o))}return t}function r(e){var t,r,o,n,i,a;for(t="",o=e.length,r=0;r>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:t+=String.fromCharCode(n);break;case 12:case 13:i=e[r++],t+=String.fromCharCode((31&n)<<6|63&i);break;case 14:i=e[r++],a=e[r++],t+=String.fromCharCode((15&n)<<12|(63&i)<<6|(63&a)<<0)}return t}function i(e){for(var t=new Array(e.byteLength),r=new Uint8Array(e),o=t.length;o--;)t[o]=r[o];return t}function a(e){for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r=[],o=0;o>2,p=(3&n)<<4|a>>4,f=(15&a)<<2|c>>6,u=63&c;s||(u=64,i||(f=64)),r.push(t[l],t[p],t[f],t[u])}return r.join("")}var s=Object.create||function(e){function t(){}return t.prototype=e,new t};if(c)var l=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],p=ArrayBuffer.isView||function(e){return e&&l.indexOf(Object.prototype.toString.call(e))>-1};function f(e,r){for(var o=0,n=(e=e||[]).length;o>18&63,r=i>>12&63,o=i>>6&63,n=63&i,l[s++]=y.charAt(t)+y.charAt(r)+y.charAt(o)+y.charAt(n)}while(a>16&255,r=a>>8&255,o=255&a,l[c++]=64==n?String.fromCharCode(t):64==i?String.fromCharCode(t,r):String.fromCharCode(t,r,o)}while(s, https://github.com/MrRio/jsPDF + * 2015-2021 yWorks GmbH, http://www.yworks.com + * 2015-2021 Lukas Holländer , https://github.com/HackbrettXXX + * 2016-2018 Aras Abbasi + * 2010 Aaron Spike, https://github.com/acspike + * 2012 Willow Systems Corporation, https://github.com/willowsystems + * 2012 Pablo Hess, https://github.com/pablohess + * 2012 Florian Jenett, https://github.com/fjenett + * 2013 Warren Weckesser, https://github.com/warrenweckesser + * 2013 Youssef Beddad, https://github.com/lifof + * 2013 Lee Driscoll, https://github.com/lsdriscoll + * 2013 Stefan Slonevskiy, https://github.com/stefslon + * 2013 Jeremy Morel, https://github.com/jmorel + * 2013 Christoph Hartmann, https://github.com/chris-rock + * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria + * 2014 James Makes, https://github.com/dollaruw + * 2014 Diego Casorran, https://github.com/diegocr + * 2014 Steven Spungin, https://github.com/Flamenco + * 2014 Kenneth Glassey, https://github.com/Gavvers + * + * 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. + * + * Contributor(s): + * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango, + * kim3er, mfo, alnorth, Flamenco + */ + +/** + * Copyright (c) 2014-2020 Denis Pushkarev + * + * 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. + */ + +!function(t){"function"==typeof define&&define.amd?define(t):t()}((function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=function(t){return t&&t.Math==Math&&t},n=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t&&t)||Function("return this")(),o=function(t){try{return!!t()}catch(t){return!0}},i=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),a=function(t){return"object"==typeof t?null!==t:"function"==typeof t},u=n.document,c=a(u)&&a(u.createElement),f=function(t){return c?u.createElement(t):{}},s=!i&&!o((function(){return 7!=Object.defineProperty(f("div"),"a",{get:function(){return 7}}).a})),l=function(t){if(!a(t))throw TypeError(String(t)+" is not an object");return t},p=function(t,e){if(!a(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!a(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!a(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!a(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},y=Object.defineProperty,h={f:i?y:function(t,e,r){if(l(t),e=p(e,!0),l(r),s)try{return y(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},d=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},v=i?function(t,e,r){return h.f(t,e,d(1,r))}:function(t,e,r){return t[e]=r,t},g=function(t,e){try{v(n,t,e)}catch(r){n[t]=e}return e},b=n["__core-js_shared__"]||g("__core-js_shared__",{}),A=e((function(t){(t.exports=function(t,e){return b[t]||(b[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})})),m={}.hasOwnProperty,w=function(t,e){return m.call(t,e)},T=0,S=Math.random(),O=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++T+S).toString(36)},E=!!Object.getOwnPropertySymbols&&!o((function(){return!String(Symbol())})),j=E&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,M=A("wks"),L=n.Symbol,x=j?L:L&&L.withoutSetter||O,R=function(t){return w(M,t)||(E&&w(L,t)?M[t]=L[t]:M[t]=x("Symbol."+t)),M[t]},I={};I[R("toStringTag")]="z";var _="[object z]"===String(I),P=Function.toString;"function"!=typeof b.inspectSource&&(b.inspectSource=function(t){return P.call(t)});var B,C,F,U=b.inspectSource,D=n.WeakMap,k="function"==typeof D&&/native code/.test(U(D)),N=A("keys"),V=function(t){return N[t]||(N[t]=O(t))},W={},Y=n.WeakMap;if(k){var G=new Y,q=G.get,H=G.has,z=G.set;B=function(t,e){return z.call(G,t,e),e},C=function(t){return q.call(G,t)||{}},F=function(t){return H.call(G,t)}}else{var X=V("state");W[X]=!0,B=function(t,e){return v(t,X,e),e},C=function(t){return w(t,X)?t[X]:{}},F=function(t){return w(t,X)}}var K={set:B,get:C,has:F,enforce:function(t){return F(t)?C(t):B(t,{})},getterFor:function(t){return function(e){var r;if(!a(e)||(r=C(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},J=e((function(t){var e=K.get,r=K.enforce,o=String(String).split("String");(t.exports=function(t,e,i,a){var u=!!a&&!!a.unsafe,c=!!a&&!!a.enumerable,f=!!a&&!!a.noTargetGet;"function"==typeof i&&("string"!=typeof e||w(i,"name")||v(i,"name",e),r(i).source=o.join("string"==typeof e?e:"")),t!==n?(u?!f&&t[e]&&(c=!0):delete t[e],c?t[e]=i:v(t,e,i)):c?t[e]=i:g(e,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&e(this).source||U(this)}))})),Q={}.toString,Z=function(t){return Q.call(t).slice(8,-1)},$=R("toStringTag"),tt="Arguments"==Z(function(){return arguments}()),et=_?Z:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),$))?r:tt?Z(e):"Object"==(n=Z(e))&&"function"==typeof e.callee?"Arguments":n},rt=_?{}.toString:function(){return"[object "+et(this)+"]"};_||J(Object.prototype,"toString",rt,{unsafe:!0});var nt,ot,it,at=Math.ceil,ut=Math.floor,ct=function(t){return isNaN(t=+t)?0:(t>0?ut:at)(t)},ft=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},st=function(t){return function(e,r){var n,o,i=String(ft(e)),a=ct(r),u=i.length;return a<0||a>=u?t?"":void 0:(n=i.charCodeAt(a))<55296||n>56319||a+1===u||(o=i.charCodeAt(a+1))<56320||o>57343?t?i.charAt(a):n:t?i.slice(a,a+2):o-56320+(n-55296<<10)+65536}},lt={codeAt:st(!1),charAt:st(!0)},pt={}.propertyIsEnumerable,yt=Object.getOwnPropertyDescriptor,ht={f:yt&&!pt.call({1:2},1)?function(t){var e=yt(this,t);return!!e&&e.enumerable}:pt},dt="".split,vt=o((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==Z(t)?dt.call(t,""):Object(t)}:Object,gt=function(t){return vt(ft(t))},bt=Object.getOwnPropertyDescriptor,At={f:i?bt:function(t,e){if(t=gt(t),e=p(e,!0),s)try{return bt(t,e)}catch(t){}if(w(t,e))return d(!ht.f.call(t,e),t[e])}},mt=n,wt=function(t){return"function"==typeof t?t:void 0},Tt=function(t,e){return arguments.length<2?wt(mt[t])||wt(n[t]):mt[t]&&mt[t][e]||n[t]&&n[t][e]},St=Math.min,Ot=function(t){return t>0?St(ct(t),9007199254740991):0},Et=Math.max,jt=Math.min,Mt=function(t,e){var r=ct(t);return r<0?Et(r+e,0):jt(r,e)},Lt=function(t){return function(e,r,n){var o,i=gt(e),a=Ot(i.length),u=Mt(n,a);if(t&&r!=r){for(;a>u;)if((o=i[u++])!=o)return!0}else for(;a>u;u++)if((t||u in i)&&i[u]===r)return t||u||0;return!t&&-1}},xt={includes:Lt(!0),indexOf:Lt(!1)},Rt=xt.indexOf,It=function(t,e){var r,n=gt(t),o=0,i=[];for(r in n)!w(W,r)&&w(n,r)&&i.push(r);for(;e.length>o;)w(n,r=e[o++])&&(~Rt(i,r)||i.push(r));return i},_t=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Pt=_t.concat("length","prototype"),Bt={f:Object.getOwnPropertyNames||function(t){return It(t,Pt)}},Ct={f:Object.getOwnPropertySymbols},Ft=Tt("Reflect","ownKeys")||function(t){var e=Bt.f(l(t)),r=Ct.f;return r?e.concat(r(t)):e},Ut=function(t,e){for(var r=Ft(e),n=h.f,o=At.f,i=0;ii;)h.f(t,r=n[i++],e[r]);return t},oe=Tt("document","documentElement"),ie=V("IE_PROTO"),ae=function(){},ue=function(t){return"